file: ../SURF/friends.cc
#include "event.h" #include "Cfort.h" #include <math.h> #include <assert.h> //references used for these equations are the program MAJOR //and Buchmuller and Greub, Nuclear Physics B double make_direction() {//from B+G equation 19 double ret = acos(-2*global->variable[full_t] /(global->sqrt_s[squared]-global->majorana_mass[squared])-1); return ret; } double make_En3() { return .5*(global->sqrt_s[squared]+global->majorana_mass[squared]) /global->sqrt_s[value]; } double make_Enu3() { return .5*(global->sqrt_s[squared]-global->majorana_mass[squared]) /global->sqrt_s[value]; } double make_E_nu_out() { return global->z_mass[maj2_minus_val2]*.5/global->majorana_mass[value]; } double make_Pnt3() { return global->Enu3*abs(sin(global->direction)); } double makeu() {//possible bug... how to handle negative sqrt? double ret=global->majorana_mass[squared]+2*global->lepton_mass[squared]; ret-=global->sqrt_s[squared]; ret-=global->variable[t]; return ret; } double makeu3() {//possible bug... how to handle negative sqrt? double ret=global->majorana_mass[squared]; ret+=2*global->lepton_mass[squared]; ret-=global->sqrt_s[squared]; ret-=global->variable[full_t]; return ret; } double make_out_lepton_pl() {//major line: 716 return sqrt(global->lepton_mass[squared]+ pow(global->variable[plt],2)) *sinh(global->variable[yl]); } double limit(double *xf, var_type var) { if (xf[0]<global->kinematic_min[var]) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) return pow(xf[0]-global->kinematic_min[var],2); else if (xf[0]>global->kinematic_max[var]) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) return pow(xf[0]-global->kinematic_max[var],2); else return 0.; } double make_out_lepton_energy() {//EL in major line 717 return sqrt(global->lepton_mass[squared]+pow(global->variable[plt],2) +pow(global->out_lepton_pl,2)); } double makeQQ() {//Q2 in major line 1281 return 2*global->in_lepton_energy[value]*(global->En+global->kNl) -global->majorana_mass[squared]; } double makeQQ3() {//this is still not correct return 2*global->in_lepton_energy[value]*(global->En3+global->kNl) -global->majorana_mass[squared]; } double makekNt() {//From B+G pg 354 return sqrt(global->u*global->variable[t] /global->sqrt_s[squared]); } double make_E_nu() {//magnitude is the same although direction will be 180 apart. return sqrt(global->kNt*global->kNt+global->kNl*global->kNl); } double make_kNt_min() {//From B+G pg 355 //significant sig fig loss here double ret=4*global->majorana_mass[squared]; ret*=pow(global->variable[plt],2); ret-=pow(global->w_mass[maj2_minus_val2],2); ret=ret/(4*global->variable[plt]*global->w_mass[maj2_minus_val2]); return max(1e-6,ret); } double makekNl() {//B+G 354 if (global->current_process==nr1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) return (global->variable[t]-global->u) /(2*global->sqrt_s[value]); else return (-global->variable[t]+global->u) /(2*global->sqrt_s[value]); } double makemt() {//B+G 354 return sqrt(global->majorana_mass[squared]+pow(global->kNt,2)); } double makeEn() {//B+G 354 return sqrt(pow(global->mt,2)+pow(global->kNl,2)); } double makeyN() {//B+G 354 return .5*log((global->En+global->kNl) /(global->En-global->kNl)); } double make_lhs_limit() {//From B+G pg 354 return (global->w_mass[maj2_minus_val2]-2*global->variable[plt] *global->kNt)/(2*global->mt*global->variable[plt]); } double make_rhs_limit() {//From B+G pg 354 return (global->w_mass[maj2_minus_val2]+2*global->variable[plt] *global->kNt)/(2*global->mt*global->variable[plt]); } double makeA() {//From B+G pg 354 if (global->current_process==nr1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) return 8*global->variable[t]*(global->w_mass[maj2_minus_val2] *(global->variable[t] -global->majorana_mass[squared]) +(global->majorana_mass[squared] -pow(global->majorana_mass[squared],2) /(2*global->w_mass[squared])) *global->sqrt_s[value] *global->variable[plt] *exp(-global->variable[yl])); else return 8*global->u*(global->w_mass[maj2_minus_val2] *(global->u-global->majorana_mass[squared]) +(global->majorana_mass[squared] -pow(global->majorana_mass[squared],2) /(2*global->w_mass[squared])) *global->sqrt_s[value] *global->variable[plt] *exp(global->variable[yl])); } double makeB() {//From B+G pg 354 if (global->current_process==nr1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) return 4*global->u*global->majorana_mass[squared] /global->w_mass[squared] *(global->w_mass[maj2_minus_val2] *(global->u-global->majorana_mass[squared]) +(global->majorana_mass[squared]-2*global->w_mass[squared]) *global->sqrt_s[value]*global->variable[plt] *exp(global->variable[yl])); else return 4*global->variable[t]*global->majorana_mass[squared] /global->w_mass[squared] *(global->w_mass[maj2_minus_val2] *(global->variable[t]-global->majorana_mass[squared]) +(global->majorana_mass[squared]-2*global->w_mass[squared]) *global->sqrt_s[value]*global->variable[plt] *exp(-global->variable[yl])); } double makeC() {//C=A with t->u + B with u->t B+G g 354 double ret; if (global->current_process==nr1){ //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) ret=8*global->u *(global->w_mass[maj2_minus_val2] *(global->u-global->majorana_mass[squared]) +(global->majorana_mass[squared] -pow(global->majorana_mass[squared],2) /(2*global->w_mass[squared])) *global->sqrt_s[value] *global->variable[plt] *exp(global->variable[yl])); ret+=4*global->variable[t]*global->majorana_mass[squared] /global->w_mass[squared] *(global->w_mass[maj2_minus_val2] *(global->variable[t]-global->majorana_mass[squared]) +(global->majorana_mass[squared]-2*global->w_mass[squared]) *global->sqrt_s[value]*global->variable[plt] *exp(-global->variable[yl])); } else { ret=8*global->variable[t] *(global->w_mass[maj2_minus_val2] *(global->variable[t]-global->majorana_mass[squared]) +(global->majorana_mass[squared] -pow(global->majorana_mass[squared],2) /(2*global->w_mass[squared])) *global->sqrt_s[value] *global->variable[plt] *exp(-global->variable[yl])); ret+=4*global->u*global->majorana_mass[squared] /global->w_mass[squared] *(global->w_mass[maj2_minus_val2] *(global->u-global->majorana_mass[squared]) +(global->majorana_mass[squared]-2*global->w_mass[squared]) *global->sqrt_s[value]*global->variable[plt] *exp(global->variable[yl])); } return ret; } double make_mix_theta() { return global->mixing*(.5-pow(sin(global->theta_w),2)) /(pow(cos(global->theta_w),2) *(global->sqrt_s[squared]-global->z_mass[squared])); } double make_decay_time_cross() {//from B+G equation 12 double ret=global->z_mass[gamma]*global->majorana_mass[value]/global->En3; ret*=exp(-global->variable[time]* global->full_gamma *global->majorana_mass[value]/global->En3); ret*=hmult(); return ret; } double make_majorana_production_cross() {//from B+G equation 15 double ret=fermi*fermi*pow(global->w_mass[squared],2) /(2*PI*pow(global->sqrt_s[squared],2)); double part1, part2,part3; part1=(pow(global->mixing,2)*pow(tan(global->theta_w),4) *(global->variable[full_t] *(global->variable[full_t]-global->majorana_mass[squared]) +global->u3*(global->u3-global->majorana_mass[squared])) /pow(global->sqrt_s[squared]-global->z_mass[squared],2)); part2=pow(global->mix_theta-global->Vzhi /(global->variable[full_t]-global->w_mass[squared]),2) *global->u3*(global->u3-global->majorana_mass[squared]); part3=pow(global->mix_theta-global->Vzhi /(global->u3-global->w_mass[squared]),2)*global->variable[full_t] *(global->variable[full_t]-global->majorana_mass[squared]); ret*=(part1+part2+part3); ret*=hmult(); return 3.894e8*ret;//unit conversion again. } double hmult() { double ret=1; int i; for (i=0;i<global->process_var_count[global->current_process];i++) switch (global->h_function[global->process_vars((int)global->current_process,i)]){ case cnst: ret=ret*(global->kinematic_max[global->process_vars((int)global->current_process,i)]-global->kinematic_min[global->process_vars((int)global->current_process,i)]); break; case v_inv: ret=ret*log(global->kinematic_max[global->process_vars((int)global->current_process,i)]/global->kinematic_min[global->process_vars((int)global->current_process,i)]); ret=ret*global->variable[global->process_vars((int)global->current_process,i)]; break; case v_inv_v_inv: ret=ret*(1/global->kinematic_min[global->process_vars((int)global->current_process,i)]-1/global->kinematic_max[global->process_vars((int)global->current_process,i)]); ret=ret*pow(global->variable[global->process_vars((int)global->current_process,i)],2); break; case exp_neg_v_Av: ret=ret*(exp(-global->A_value[global->process_vars((int)global->current_process,i)]*global->kinematic_min[global->process_vars((int)global->current_process,i)]) -exp(-global->A_value[global->process_vars((int)global->current_process,i)]*global->kinematic_max[global->process_vars((int)global->current_process,i)])) /global->A_value[global->process_vars((int)global->current_process,i)]; ret=ret/exp(-global->A_value[global->process_vars((int)global->current_process,i)]*global->variable[global->process_vars((int)global->current_process,i)]); break; case v_exp_neg_v_v_Av: ret=ret*.5 *(exp(-global->A_value[global->process_vars((int)global->current_process,i)]*pow(global->kinematic_min[global->process_vars((int)global->current_process,i)],2)) -exp(-global->A_value[global->process_vars((int)global->current_process,i)]*pow(global->kinematic_max[global->process_vars((int)global->current_process,i)],2))) /global->A_value[global->process_vars((int)global->current_process,i)]; ret=ret/exp(-global->A_value[global->process_vars((int)global->current_process,i)]*pow(global->variable[global->process_vars((int)global->current_process,i)],2)); break; case omega_to_yl: //Now the same for the yl parameter //http://www3.tsl.uu.se/thep/papers/TSL/ISV-92-0058.ps.gz ret=ret*2*PI; if (global->g_1){ //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) ret=ret/sqrt(global->rhs_limit); //This is not actually h, but rather h canceled with part of the cross //section if (global->current_process==nr1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) ret=ret*cosh(global->yN-global->variable[global->process_vars(global->current_process,i)]) /sqrt(1.+cosh(global->yN-global->variable[global->process_vars(global->current_process,i)])); else ret=ret*cosh(global->yN+global->variable[global->process_vars(global->current_process,i)]) /sqrt(1.+cosh(global->yN+global->variable[global->process_vars(global->current_process,i)])); } else{ ret=ret/sqrt(global->rhs_limit*global->lhs_limit); //ditto if (global->current_process==nr1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) ret=ret/abs(tanh(global->yN-global->variable[global->process_vars(global->current_process,i)])); else ret=ret/abs(tanh(global->yN+global->variable[global->process_vars(global->current_process,i)])); } break; default: assert(0); break; } return ret; } double make_first_term() {//the first term in B+G equation 20 return fermi*fermi*global->branching_ratio[global->current_process] *pow(global->w_mass[squared],3)*global->majorana_mass[squared] /(4*pow(PI*global->sqrt_s[squared]*global->w_mass[maj2_minus_val2],2) *global->w_mass[maj2_plus_2val2]*global->mt); } double make_nr1_cross() {//B+G pg 353 note that V=1 assert(global->current_process==nr1); double ret=global->first_term; if (global->g_1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) ret=ret/sqrt(cosh(global->yN-global->variable[yl]) -global->lhs_limit); ret= ret*(pow(global->mix_theta-global->Vzhi /(global->u-global->w_mass[squared]),2) *global->letters[A] +pow(global->mix_theta-global->Vzhi /(global->variable[t]-global->w_mass[squared]),2) *global->letters[B] +pow(global->mixing/(global->sqrt_s[squared]-global->z_mass[squared]),2) *pow(tan(global->theta_w),4)*global->letters[C]); //cross section done //now multiply by H=integral of h, and divide by h ret*=hmult(); return 3.894e8*ret;//unit conversion } double make_nr2_cross() {//B+G pg 353 note that V=1 assert(global->current_process==nr2); double ret=global->first_term; if (global->g_1) //OVERLOAD CALL: if: parameter.cc(?), parameter.cc(?) ret=ret/sqrt(cosh(global->yN+global->variable[yl]) -global->lhs_limit); ret= ret*(pow(global->mix_theta-global->Vzhi /(global->variable[t]-global->w_mass[squared]),2) *global->letters[A] +pow(global->mix_theta-global->Vzhi /(global->u-global->w_mass[squared]),2) *global->letters[B] +pow(global->mixing/(global->sqrt_s[squared]-global->z_mass[squared]),2) *pow(tan(global->theta_w),4)*global->letters[C]); //cross section done //now multiply by H=integral of h, and divide by h ret*=hmult(); return 3.894e8*ret;//unit conversion } double make_kinematic_min_yl() {//B+G 354 return global->yN-acosh(global->rhs_limit); } double make_kinematic_max_yl() {//B+G 354 double temp; temp=global->yN; temp-=acosh(global->lhs_limit); return temp; } double make_kinematic_max_plt() {//B+G pg 354 return .5*(global->majorana_mass[squared]-global->w_mass[squared]) *global->sqrt_s[value]/global->majorana_mass[squared]; } double make_kinematic_min_t() { return (global->sqrt_s[squared]-global->majorana_mass[squared] +sqrt(pow(global->sqrt_s[squared]- global->majorana_mass[squared],2) -4*global->sqrt_s[squared]*pow(global->kNt_min,2)))/-2; } double make_kinematic_min_full_t() { return -(global->sqrt_s[squared]-global->majorana_mass[squared]); } double make_kinematic_max_t() { return (global->sqrt_s[squared]-global->majorana_mass[squared] -sqrt(pow(global->sqrt_s[squared]- global->majorana_mass[squared],2) -4*global->sqrt_s[squared]*pow(global->kNt_min,2)))/-2; } double make_br12() {//MAJOR line: 209 return global->w_mass[gamma] /global->full_gamma; } double make_br3() {//MAJOR line: 209 return 1-global->branching_ratio[nr1]-global->branching_ratio[nr2]; } double makeAt() {//Calculated //MAJOR line: 217 valid for e+e-? return -6.93147e-5; } double makeAyl() {//MAJOR line: 222 return 4.4 +15.744*global->majorana_mass[squared]/ global->sqrt_s[squared]; } double makeAplt() {//MAJOR line:233 return 46*global->majorana_mass[squared] /(sqrt(global->sqrt_s[value])*pow(global->w_mass[maj2_minus_val2],2)); } double make_A_time() { return global->full_gamma*global->majorana_mass[value]/global->En3; } double make_s() {//s = 4 E ^2 B+G 350 return global->in_lepton_energy[squared]*4; } double make_sqrt_s() {// sqrt(s) = 2 E B+G 350 double ret=(global->in_lepton_energy[value])*2; return ret; } //the remainder of these functions are general utilities that rely on depends //instead of in. double make_gamma_z() {//equation 12 in B+G return fermi*pow(global->mixing*global->z_mass[maj2_minus_val2],2) *global->z_mass[maj2_plus_2val2] /(8*sqrt(2)*PI*pow(global->majorana_mass[value],3)); } double make_full_gamma() { return 2*global->w_mass[gamma]*global->z_mass[gamma]; } double make_gamma_w() {//equation 11 in B+G return fermi*pow(global->Vzhi*global->w_mass[maj2_minus_val2],2) *global->w_mass[maj2_plus_2val2] /(8*sqrt(2)*PI*pow(global->majorana_mass[value],3)); } double make_w_square() { return global->w_mass[value]*global->w_mass[value]; } double make_z_square() { return global->z_mass[value]*global->z_mass[value]; } double make_major_square() { return (global->majorana_mass)[value]*(global->majorana_mass)[value]; } double make_ilm() { return sqrt(global->in_lepton_momentum[squared]); } double make_ilms() { return global->in_lepton_energy[squared]-global->lepton_mass[squared]; } double make_iles() { return global->in_lepton_energy[value]*global->in_lepton_energy[value]; } double make_ilmas() { return global->lepton_mass[value]*global->lepton_mass[value]; } double make_m2p2w2() { return global->majorana_mass[squared]+2*global->w_mass[squared]; } double make_m2p2z2() { return global->majorana_mass[squared]+2*global->z_mass[squared]; } double make_m2mw2() { return global->majorana_mass[squared]-global->w_mass[squared]; } double make_m2mz2() { return global->majorana_mass[squared]-global->z_mass[squared]; }
Back to Source File Index
C++ to HTML Conversion by ctoohtml