2 #include "TauSpinner/nonSM.h"
3 #include "TauSpinner/EWtables.h"
16 extern double WTnonSM;
20 double nonSM_born(
int ID,
double S,
double cost,
int H1,
int H2,
int key)
22 if(IfHiggs)
return nonSM_bornH(ID,S,cost,H1,H2,key);
23 else return nonSM_bornZ(ID,S,cost,H1,H2,key);
35 if (ID == 3 || ID == 5)
46 cout <<
"WARNING: default_nonSM_born: unexpected ID continue debugging: " << ID << endl;
74 return t_bornew_(&Bmode, &keyGSW, &S, &cost, &H1d , &H2d);}
76 return t_born_ (&zero, &S, &cost, &H1d , &H2d);}
80 cout<<
"TauSpinner::default_nonSM_born: EW tables were not initialize\n"<<endl;
81 cout<<
" and user has not provided his own nonSM_born too"<<endl;
82 cout<<
" see: nonSM_adopt() and set_nonSM_born( NULL )"<<endl;
83 cout<<
" in TauSpinner/examples/tau-reweight-test.cxx for details"<<endl;
92 cout<<
"TauSpinner::default_nonSM_born: this function is dummy\n"<<endl;
93 cout<<
" user must provide his own nonSM_born"<<endl;
94 cout<<
" see: nonSM_adopt() and set_nonSM_born( NULL )"<<endl;
95 cout<<
" in TauSpinner/examples/tau-reweight-test.cxx for details"<<endl;
103 else {nonSM_bornZ = fun;
return 1;}
109 else {nonSM_bornH = fun;
return 1;}
115 double plzap2(
int ide,
int idf,
double svar,
double costhe)
119 if(idf > 0) initwk_(&ide,&idf,&svar);
125 initwk_(&mide,&midf,&svar);
136 ret = t_born_(&zero,&svar,&costhe, &one, &one)
137 /(t_born_(&zero,&svar,&costhe, &one, &one)
138 +t_born_(&zero,&svar,&costhe,&mone,&mone));
142 ret =
nonSM_born(ide,svar,costhe, 1, 1, nonSM2)
153 double sm= t_born_(&zero,&svar,&costhe, &one, &one)
154 /(t_born_(&zero,&svar,&costhe, &one, &one)
155 +t_born_(&zero,&svar,&costhe,&mone,&mone));
156 double nsm=
nonSM_born(ide,svar,costhe, 1, 1, nonSM2)
159 double smn=
nonSM_born(ide,svar,costhe, 1, 1, 0 )
163 cout<<
"test of nonSM Born nonsm2="<<nonSM2 << endl;
164 cout<<
"ide,svar,costhe="<<ide <<
" " << svar <<
" " << costhe << endl;
165 cout<<
"sm="<<sm <<
" sm (new)="<<smn <<
" nsm="<<nsm << endl;
166 cout<<
"sm and sm (new) should be essentially equal" << endl << endl;
167 if (IfHiggs) cout <<
"(for Higgs we need to improve algorithm)" << endl;
175 double plweight(
int ide,
double svar,
double costhe)
177 if(nonSM2==0)
return 1.0;
178 if (ide==0 && !IfHiggs)
return 1.0;
180 double ret =(
nonSM_born(ide,svar,costhe, 1, 1, nonSM2)/svar
181 +
nonSM_born(ide,svar,costhe,-1,-1, nonSM2)/svar);
182 double retm =(
nonSM_born(ide,svar,costhe, 1, 1, 0)/svar
185 if(nonSMN==1) ret = ret *
plnorm(ide,svar);
191 if(nonSMN==0)
return 1.0;
193 double c1 = 1.0/sqrt(3.0);
194 double c2 = sqrt(2.0/3.0);
196 double alpha = 2*
nonSM_born(ide,svar,0.0, 1, 1,0)+
198 double beta =
nonSM_born(ide,svar, c1, 1, 1,0) +
nonSM_born(ide,svar,-c1, 1, 1,0)+
199 nonSM_born(ide,svar, c1,-1,-1,0) +
nonSM_born(ide,svar,-c1,-1,-1,0);
200 double gamma =
nonSM_born(ide,svar, c2, 1, 1,0) +
nonSM_born(ide,svar,-c2, 1, 1,0)+
201 nonSM_born(ide,svar, c2,-1,-1,0) +
nonSM_born(ide,svar,-c2,-1,-1,0);
202 double ret = ( alpha + 0.9*(gamma+alpha-2*beta) + 0.5*(4*beta-3*alpha-gamma) );
204 alpha = 2*
nonSM_born(ide,svar,0.0, 1, 1,nonSM2)+
206 beta =
nonSM_born(ide,svar, c1, 1, 1,nonSM2) +
nonSM_born(ide,svar,-c1, 1, 1,nonSM2)+
207 nonSM_born(ide,svar, c1,-1,-1,nonSM2) +
nonSM_born(ide,svar,-c1,-1,-1,nonSM2);
208 gamma =
nonSM_born(ide,svar, c2, 1, 1,nonSM2) +
nonSM_born(ide,svar,-c2, 1, 1,nonSM2)+
209 nonSM_born(ide,svar, c2,-1,-1,nonSM2) +
nonSM_born(ide,svar,-c2,-1,-1,nonSM2);
211 ret = ret / ( alpha + 0.9*(gamma+alpha-2*beta) + 0.5*(4*beta-3*alpha-gamma) );
217 double *corrX2,
double *polX2)
219 Particle tau_plus ( tau1.px(), tau1.py(), tau1.pz(), tau1.e(), tau1.pdgid() );
220 Particle tau_minus( tau2.px(), tau2.py(), tau2.pz(), tau2.e(), tau2.pdgid() );
223 Particle P_QQ( tau_plus.px()+tau_minus.px(), tau_plus.py()+tau_minus.py(), tau_plus.pz()+tau_minus.pz(), tau_plus.e()+tau_minus.e(), 0 );
228 tau_plus. boostToRestFrame(P_QQ);
229 tau_minus.boostToRestFrame(P_QQ);
230 P_B1. boostToRestFrame(P_QQ);
231 P_B2. boostToRestFrame(P_QQ);
233 double costheta1 = (tau_plus.px()*P_B1.px() +tau_plus.py()*P_B1.py() +tau_plus.pz()*P_B1.pz() ) /
234 sqrt(tau_plus.px()*tau_plus.px()+tau_plus.py()*tau_plus.py()+tau_plus.pz()*tau_plus.pz()) /
235 sqrt(P_B1.px() *P_B1.px() +P_B1.py() *P_B1.py() +P_B1.pz() *P_B1.pz() );
237 double costheta2 = (tau_minus.px()*P_B2.px() +tau_minus.py()*P_B2.py() +tau_minus.pz()*P_B2.pz() ) /
238 sqrt(tau_minus.px()*tau_minus.px()+tau_minus.py()*tau_minus.py()+tau_minus.pz()*tau_minus.pz()) /
239 sqrt(P_B2.px() *P_B2.px() +P_B2.py() *P_B2.py() +P_B2.pz() *P_B2.pz() );
241 double sintheta1 = sqrt(1-costheta1*costheta1);
242 double sintheta2 = sqrt(1-costheta2*costheta2);
245 double costhe = (costheta1*sintheta2 + costheta2*sintheta1) / (sintheta1 + sintheta2);
double default_nonSM_born(int ID, double S, double cost, int H1, int H2, int key)
double plzap2(int ide, int idf, double svar, double costhe)
int set_nonSM_bornH(double(*fun)(int, double, double, int, int, int))
double default_nonSM_bornH(int ID, double S, double cost, int H1, int H2, int key)
double nonSM_born(int ID, double S, double cost, int H1, int H2, int key)
double plweight(int ide, double svar, double costhe)
void nonSMHcorrPol(double S, SimpleParticle &tau1, SimpleParticle &tau2, double *corrX2, double *polX2)
int initEWff(int ID, double S, double cost, int key)
double plnorm(int ide, double svar)
int set_nonSM_born(double(*fun)(int, double, double, int, int, int))