1 #include "TauSpinner/tau_reweight_lib.h"
2 #include "TauSpinner/nonSM.h"
3 #include "TauSpinner/Tauola_wrapper.h"
4 #include "TauSpinner/EWtables.h"
7 #include "Tauola/TauolaParticlePair.h"
13 double CMSENE = 7000.0;
107 double RcorExt[4][4];
111 double f(
double x,
int ID,
double SS,
double cmsene)
128 return LHAPDF::xfx(x, sqrt(SS), ID)/x;
140 double sigborn(
int ID,
double SS,
double costhe)
149 double SIGggHiggs=0.;
154 SIGggHiggs=
disth_(&SS, &costhe, &IPOne, &IPOne)+
disth_(&SS, &costhe, &IPOne, &IMOne)+
155 disth_(&SS, &costhe, &IMOne, &IPOne)+
disth_(&SS, &costhe, &IMOne, &IMOne);
158 double PI=3.14159265358979324;
159 SIGggHiggs *= XMH * XMH * XMH *XGH /PI/ ((SS-XMH*XMH)*(SS-XMH*XMH) + XGH*XGH*XMH*XMH);
162 if(IfHsimple==1) SIGggHiggs = Xnorm * XMH * XGH /PI/ ((SS-XMH*XMH)*(SS-XMH*XMH) +XGH*XGH*XMH*XMH);
170 if (ID==0)
return 0.0 ;
181 if (ID>0) initwk_( &ID, &tauID, &SS);
185 initwk_( &ID, &tauID, &SS);
192 return ( t_born_(&iZero, &SS, &costhe, &dOne , &dOne) + t_born_(&iZero, &SS, &costhe, &dOne , &dMOne)
193 + t_born_(&iZero, &SS, &costhe, &dMOne, &dOne) + t_born_(&iZero, &SS, &costhe, &dMOne, &dMOne))/SS/128.86674175/128.86674175/3.141559265358979324;
242 GAMfrac2i=_GAMfrac2i;
287 void GSWadapt(
int ID,
double S,
double cost,
double GSWr[7],
double GSWi[7]){
294 double AMZi=
Amz(ID);
295 costhe=0.0;SSS=AMZi*AMZi;
319 GSWr[5]= real(
EWFACT(ID,6,SSS,costhe));
325 GSWi[5]= imag(
EWFACT(ID,6,SSS,costhe));
329 GSWr[0] = real(
EWFACT(ID,0,SSS,costhe));
333 GSWr[5] = real(
EWFACT(ID,6,SSS,costhe));
335 GSWi[0] = imag(
EWFACT(ID,0,SSS,costhe));
339 GSWi[5] = imag(
EWFACT(ID,6,SSS,costhe));
343 GSWr[0]= real(
EWFACT(ID,0,SSS,costhe));
344 GSWr[1]= real(
EWFACT(ID,1,SSS,costhe));
345 GSWr[2]= real(
EWFACT(ID,2,SSS,costhe));
346 GSWr[3]= real(
EWFACT(ID,3,SSS,costhe));
347 GSWr[5]= real(
EWFACT(ID,6,SSS,costhe));
349 GSWi[0]= imag(
EWFACT(ID,0,SSS,costhe));
350 GSWi[1]= imag(
EWFACT(ID,1,SSS,costhe));
351 GSWi[2]= imag(
EWFACT(ID,2,SSS,costhe));
352 GSWi[3]= imag(
EWFACT(ID,3,SSS,costhe));
353 GSWi[5]= imag(
EWFACT(ID,6,SSS,costhe));
389 GSWr[0]= real(
EWFACT(0,0,SSS,costhe));
392 GSWr[0]=real(
EWFACT(ID,0,SSS,costhe));
393 GSWr[1]=real(
EWFACT(ID,1,SSS,costhe))/real(
EWFACT(0,1,SSS,costhe));
394 GSWr[2]=real(
EWFACT(ID,2,SSS,costhe))/real(
EWFACT(0,2,SSS,costhe));
398 GSWr[0] = GSWr[0]*GSWN1r- GSWi[0]*GSWN1i;
399 GSWi[0] = GSWr[0]*GSWN1i+ GSWi[0]*GSWN1r;
400 GSWr[1] = GSWr[1]*GSWN2r- GSWi[1]*GSWN2i;
401 GSWi[1] = GSWr[1]*GSWN2i+ GSWi[1]*GSWN2r;
402 GSWr[2] = GSWr[2]*GSWN3r- GSWi[2]*GSWN3i;
403 GSWi[2] = GSWr[2]*GSWN3i+ GSWi[2]*GSWN3r;
404 GSWr[3] = GSWr[3]*GSWN4r- GSWi[3]*GSWN4i;
405 GSWi[3] = GSWr[3]*GSWN4i+ GSWi[3]*GSWN4r;
406 GSWr[4] = GSWr[4]*GSWN5r- GSWi[4]*GSWN5i;
407 GSWi[4] = GSWr[4]*GSWN5i+ GSWi[4]*GSWN5r;
408 GSWr[5] = GSWr[5]*GSWN6r- GSWi[5]*GSWN6i;
409 GSWi[5] = GSWr[5]*GSWN6i+ GSWi[5]*GSWN6r;
413 complex<double> Frezu(
int NO){
416 { F=complex<double>(GSWN1r,GSWN1i);}
418 { F=complex<double>(GSWN2r,GSWN2i);}
420 { F=complex<double>(GSWN3r,GSWN3i);}
422 { F=complex<double>(GSWN4r,GSWN4i);}
424 { F=complex<double>(GSWN5r,GSWN5i);}
426 { F=complex<double>(GSWN6r,GSWN6i);}
428 { F=complex<double>(GSWN6r,GSWN6i);}
430 {cout<<
"wrong NO="<<NO<<endl; exit(-1);}
448 cout<<
" ------------------------------------------------------"<<endl;
449 cout<<
" TauSpinner v2.1.3"<<endl;
450 cout<<
" -----------------"<<endl;
451 cout<<
" 01.Jan.2026 "<<endl;
452 cout<<
" by Z. Czyczula (until 2015), T. Przedzinski, E. Richter-Was, Z. Was,"<<endl;
453 cout<<
" matrix elements implementations "<<endl;
454 cout<<
" also A, Korchin J. Kalinowski, W. Kotlarski and M. Bachmani"<<endl;
455 cout<<
" ------------------------------------------------------"<<endl;
456 cout<<
" Ipp - true for pp collision; otherwise polarization"<<endl;
457 cout<<
" of individual taus from Z/gamma* is set to 0.0"<<endl;
458 cout<<
" Ipp = "<<Ipp<<endl;
459 cout<<
" CMSENE - used in PDF calculations; only if Ipp = true"<<endl;
460 cout<<
" and only for Z/gamma*"<<endl;
461 cout<<
" CMSENE = "<<CMSENE<<endl;
462 cout<<
" Ipol - relevant for Z/gamma* decays "<<endl;
463 cout<<
" 0 - events generated without spin effects "<<endl;
464 cout<<
" 1 - events generated with all spin effects "<<endl;
465 cout<<
" 2 - events generated with spin correlations and <pol>=0 "<<endl;
466 cout<<
" 3 - events generated with spin correlations and"<<endl;
467 cout<<
" polarization but missing angular dependence of <pol>"<<endl;
468 cout<<
" Ipol = "<<Ipol<<endl;
469 cout<<
" Ipol - relevant for Z/gamma* decays "<<endl;
470 cout<<
" NOTE: For Ipol=0,1 algorithm is identical. "<<endl;
471 cout<<
" However in user program role of wt need change. "<<endl;
472 cout<<
" nonSM2 = "<<nonSM2<<endl;
473 cout<<
" 1/0 extra term in cross section, density matrix on/off "<<endl;
474 cout<<
" nonSMN = "<<nonSMN<<endl;
475 cout<<
" 1/0 extra term in cross section, for shapes only? on/off "<<endl;
476 cout<<
" note KEY - for options of matrix elements calculations "<<endl;
477 cout<<
" in cases of final states with two jets "<<endl;
478 cout<<
" ------------------------------------------------------ "<<endl;
487 FrameType = _FrameType;
498 relWTnonSM = _relWTnonSM;
510 Xnorm = normalization;
529 void getZgamParametersL(
double &Rzx,
double &Rzy,
double &Rzz,
double &Rtx,
double &Rty,
double &Rtz)
573 void getHH(
double &Hmx,
double &Hmy,
double &Hmz,
double &Hpx,
double &Hpy,
double &Hpz)
595 *normalization = Xnorm;
607 void setSpinOfSample(
int _Ipol)
661 Particle X ( sp_X.px(), sp_X.py(), sp_X.pz(), sp_X.e(), sp_X.pdgid() );
662 Particle tau ( sp_tau.px(), sp_tau.py(), sp_tau.pz(), sp_tau.e(), sp_tau.pdgid() );
663 Particle nu_tau(sp_nu_tau.px(), sp_nu_tau.py(), sp_nu_tau.pz(), sp_nu_tau.e(), sp_nu_tau.pdgid() );
665 vector<Particle> tau_daughters;
668 int tau_pdgid = sp_tau.pdgid();
671 for(
unsigned int i=0; i<sp_tau_daughters.size(); i++)
673 Particle pp(sp_tau_daughters[i].px(),
674 sp_tau_daughters[i].py(),
675 sp_tau_daughters[i].pz(),
676 sp_tau_daughters[i].e(),
677 sp_tau_daughters[i].pdgid() );
679 tau_daughters.push_back(pp);
682 double phi2 = 0.0, theta2 = 0.0;
692 double *HH =
calculateHH(tau_pdgid, tau_daughters, phi2, theta2);
695 if ( abs(sp_X.pdgid()) == 24 ) { sign= 1.0; }
696 else if( abs(sp_X.pdgid()) == 37 ) { sign=-1.0; }
699 cout<<
"wrong sp_W/H.pdgid()="<<sp_X.pdgid()<<endl;
702 if (sp_X.pdgid() > 0 )
703 {WTamplitM = WTamplit;}
705 {WTamplitP = WTamplit;}
708 double WT = 1.0+sign*HH[2];
713 cout<<tau_pdgid<<
" -> ";
714 for(
unsigned int i=0;i<tau_daughters.size();i++) cout<<tau_daughters[i].pdgid()<<
" ";
715 cout<<
" (HH: "<<HH[0]<<
" "<<HH[1]<<
" "<<HH[2]<<
" "<<HH[3]<<
") WT: "<<WT<<endl;
720 printf(
"TauSpinner::calculateWeightFromParticlesWorHpn WT is: %13.10f. Setting WT = 0.0\n",WT);
725 printf(
"Tauspinner::calculateWeightFromParticlesWorHpn WT is: %13.10f. Setting WT = 2.0\n",WT);
757 vector<SimpleParticle> sp_tau_daughters;
761 if (sp_tau1.pdgid() == -15 )
765 sp_tau_daughters = sp_tau1_daughters;
771 sp_tau_daughters = sp_tau2_daughters;
780 Particle X ( sp_X.px(), sp_X.py(), sp_X.pz(), sp_X.e(), sp_X.pdgid() );
781 Particle tau ( sp_tau.px(), sp_tau.py(), sp_tau.pz(), sp_tau.e(), sp_tau.pdgid() );
782 Particle nu_tau( sp_nu_tau.px(), sp_nu_tau.py(), sp_nu_tau.pz(), sp_nu_tau.e(), sp_nu_tau.pdgid() );
784 vector<Particle> tau_daughters;
787 int tau_pdgid = sp_tau.pdgid();
790 for(
unsigned int i=0; i<sp_tau_daughters.size(); i++)
792 Particle pp(sp_tau_daughters[i].px(),
793 sp_tau_daughters[i].py(),
794 sp_tau_daughters[i].pz(),
795 sp_tau_daughters[i].e(),
796 sp_tau_daughters[i].pdgid() );
798 tau_daughters.push_back(pp);
801 double phi2 = 0.0, theta2 = 0.0;
813 HHp =
calculateHH(tau_pdgid, tau_daughters, phi2, theta2);
817 cout<<tau_pdgid<<
" -> ";
818 for(
unsigned int i=0;i<tau_daughters.size();i++) cout<<tau_daughters[i].pdgid()<<
" ";
819 cout<<
" (HHp: "<<HHp[0]<<
" "<<HHp[1]<<
" "<<HHp[2]<<
" "<<HHp[3]<<
") ";
823 WTamplitP = WTamplit;
830 if(sp_tau1.pdgid() == 15 )
834 sp_tau_daughters = sp_tau1_daughters;
840 sp_tau_daughters = sp_tau2_daughters;
847 Particle X ( sp_X.px(), sp_X.py(), sp_X.pz(), sp_X.e(), sp_X.pdgid() );
848 Particle tau ( sp_tau.px(), sp_tau.py(), sp_tau.pz(), sp_tau.e(), sp_tau.pdgid() );
849 Particle nu_tau( sp_nu_tau.px(), sp_nu_tau.py(), sp_nu_tau.pz(), sp_nu_tau.e(), sp_nu_tau.pdgid() );
851 vector<Particle> tau_daughters;
854 int tau_pdgid = sp_tau.pdgid();
857 for(
unsigned int i=0; i<sp_tau_daughters.size(); i++)
859 Particle pp(sp_tau_daughters[i].px(),
860 sp_tau_daughters[i].py(),
861 sp_tau_daughters[i].pz(),
862 sp_tau_daughters[i].e(),
863 sp_tau_daughters[i].pdgid() );
865 tau_daughters.push_back(pp);
868 double phi2 = 0.0, theta2 = 0.0;
879 HHm =
calculateHH(tau_pdgid, tau_daughters, phi2, theta2);
883 cout<<tau_pdgid<<
" -> ";
884 for(
unsigned int i=0;i<tau_daughters.size();i++) cout<<tau_daughters[i].pdgid()<<
" ";
885 cout<<
" (HHm: "<<HHm[0]<<
" "<<HHm[1]<<
" "<<HHm[2]<<
" "<<HHm[3]<<
") ";
889 WTamplitM = WTamplit;
909 if(sp_X.pdgid() == 25) { sign=-1.0; }
910 if(sp_X.pdgid() == 36) { sign=-1.0; }
911 if(sp_X.pdgid() ==553) { sign=-1.0; }
918 double S = sp_X.e()*sp_X.e() - sp_X.px()*sp_X.px() - sp_X.py()*sp_X.py() - sp_X.pz()*sp_X.pz();
936 WT = 1.0+corrX2*HHp[2]*HHm[2]+polX2*HHp[2]+polX2*HHm[2] + RzXX*HHp[0]*HHm[0] - RzYY*HHp[1]*HHm[1] + RzXY*HHp[0]*HHm[1] - RzYX*HHp[1]*HHm[0];
939 double RRR = Tauola::randomDouble();
941 if (RRR<(1.0+polX2)*(1.0+corrX2*HHp[2]*HHm[2]+HHp[2]+HHm[2])/(2.0+2.0*corrX2*HHp[2]*HHm[2]+2.0*polX2*HHp[2]+2.0*polX2*HHm[2])) Polari=-1.0;
945 WT = 1.0 + sign*HHp[2]*HHm[2] + RXX*HHp[0]*HHm[0] + RYY*HHp[1]*HHm[1] + RXY*HHp[0]*HHm[1] + RYX*HHp[1]*HHm[0];
948 double RRR = Tauola::randomDouble();
950 if (RRR<(1.0+sign*HHp[2]*HHm[2]+HHp[2]-HHm[2])/(2.0+2.0*sign*HHp[2]*HHm[2])) Polari=-1.0;
956 double S = sp_X.e()*sp_X.e() - sp_X.px()*sp_X.px() - sp_X.py()*sp_X.py() - sp_X.pz()*sp_X.pz();
966 WT = 1.0+sign*HHp[2]*HHm[2]+pol*HHp[2]+pol*HHm[2] + RzXX*R11*HHp[0]*HHm[0] - RzYY*R22*HHp[1]*HHm[1] + RzXY*R12*HHp[0]*HHm[1] - RzYX*R21*HHp[1]*HHm[0];
1005 if(Ipol==2) WT = WT/(1.0+sign*HHp[2]*HHm[2]);
1012 double polp1 =
plzap2(11,sp_tau.pdgid(),S,0.0);
1013 double pol1 =(2*(1-polp1)-1) ;
1014 WT = WT/(1.0+sign*HHp[2]*HHm[2]+pol1*HHp[2]+pol1*HHm[2]);
1022 for (
int k0=0;k0<4;k0++){
1023 for (
int k1=0;k1<4;k1++){
1026 if(k0==0&&k1==0) F=RzXX;
1027 if(k0==1&&k1==1) F=RzYY;
1028 if(k0==0&&k1==1) F=RzXY;
1029 if(k0==1&&k1==0) F=RzYX;
1030 WTtest=WTtest+RcorExt[k0][k1]*HHp[k0]*HHm[k1]*F;
1051 R11 = RcorExt[0][0];
1052 R12 = RcorExt[0][1];
1053 R21 = RcorExt[1][0];
1054 R22 = RcorExt[1][1];
1055 R31 = RcorExt[2][0];
1056 R32 = RcorExt[2][1];
1057 R33 = RcorExt[2][2];
1058 R41 = RcorExt[3][0];
1059 R42 = RcorExt[3][1];
1060 R43 = RcorExt[3][2];
1065 if(nonSM2==1) WT=WTtest;
1066 if(nonSM2==0&& Ipol==0) WT=WTtest;
1070 double RRR = Tauola::randomDouble();
1074 if( ifkorch==1) pol = RcorExt[3][2];
1075 if (RRR<(1.0+pol)*(1.0+sign*HHp[2]*HHm[2]+HHp[2]+HHm[2])/(2.0+2.0*sign*HHp[2]*HHm[2]+2.0*pol*HHp[2]+2.0*pol*HHm[2])) Polari=-1.0;
1079 DEBUG( cout<<
" WT: "<<WT<<endl; )
1082 printf(
"Tauspinner::calculateWeightFromParticlesH WT is: %13.10f. Setting WT = 0.0\n",WT);
1087 printf(
"Tauspinner::calculateWeightFromParticlesH WT is: %13.10f. Setting WT = 4.0\n",WT);
1091 if( WT>4.0 || WT<0.0)
1093 cout<<
"Tauspinner::calculateWeightFromParticlesH ERROR: Z/gamma* or H, and WT not in range [0,4]."<<endl;
1097 if (sign==-1.0 && nonSM2!=1) {
1100 cout <<
"Tauspinner::calculateWeightFromParticlesH Setting WT to be 2.0" << endl;
1104 if( sign==-1.0 && (WT>2.0 || WT<0.0) && nonSM2!=1)
1106 cout<<
"Tauspinner::calculateWeightFromParticlesH ERROR: H and WT not in range [0,2]."<<endl;
1124 Particle P_QQ( tau.px()+nu_tau.px(), tau.py()+nu_tau.py(), tau.pz()+nu_tau.pz(), tau.e()+nu_tau.e(), 0 );
1131 tau.boostToRestFrame(P_QQ);
1132 nu_tau.boostToRestFrame(P_QQ);
1134 for(
unsigned int i=0; i<tau_daughters.size();i++)
1135 tau_daughters[i].boostToRestFrame(P_QQ);
1144 double phi = tau.getAnglePhi();
1148 double theta = tau.getAngleTheta();
1150 tau.rotateXZ(M_PI-theta);
1152 nu_tau.rotateXY(-phi );
1153 nu_tau.rotateXZ(M_PI-theta);
1155 for(
unsigned int i=0; i<tau_daughters.size();i++)
1157 tau_daughters[i].rotateXY(-phi );
1158 tau_daughters[i].rotateXZ(M_PI-theta);
1166 for(
unsigned int i=0; i<tau_daughters.size();i++)
1167 tau_daughters[i].boostAlongZ(-tau.pz(),tau.e());
1177 unsigned int i_stored = 0;
1182 for(
unsigned int i=0; i<tau_daughters.size();i++)
1184 if(abs(tau_daughters[i].pdgid())==16){
1185 *phi2 = tau_daughters[i].getAnglePhi();
1187 tau_daughters[i].rotateXY( -(*phi2) );
1189 *theta2 = tau_daughters[i].getAngleTheta();
1191 tau_daughters[i].rotateXZ( -(*theta2) );
1198 for(
unsigned int i=0; i<tau_daughters.size();i++)
1201 tau_daughters[i].rotateXY( -(*phi2) );
1202 tau_daughters[i].rotateXZ( -(*theta2) );
1220 double*
calculateHH(
int tau_pdgid, vector<Particle> &tau_daughters,
double phi,
double theta)
1223 double *HH =
new double[4];
1225 HH[0]=HH[1]=HH[2]=HH[3]=0.0;
1230 for(
unsigned int i=0; i<tau_daughters.size(); i++)
1231 pdgid.push_back( tau_daughters[i].pdgid() );
1245 if( pdgid.size()==2 &&
1247 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211) ) ||
1248 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211) ) ||
1249 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-321) ) ||
1250 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321) )
1254 if(abs(pdgid[1])==321) channel = 6;
1255 DEBUG( cout<<
"Channel "<<channel<<
" : "; )
1263 const double AMTAU = 1.777;
1265 double AMPI = sqrt(tau_daughters[1].e() *tau_daughters[1].e()
1266 -tau_daughters[1].px()*tau_daughters[1].px()
1267 -tau_daughters[1].py()*tau_daughters[1].py()
1268 -tau_daughters[1].pz()*tau_daughters[1].pz());
1271 double PXQ=AMTAU*tau_daughters[1].e();
1272 double PXN=AMTAU*tau_daughters[0].e();
1273 double QXN=tau_daughters[1].e()*tau_daughters[0].e()-tau_daughters[1].px()*tau_daughters[0].px()-tau_daughters[1].py()*tau_daughters[0].py()-tau_daughters[1].pz()*tau_daughters[0].pz();
1274 double BRAK=(2*PXQ*QXN-AMPI*AMPI*PXN);
1276 WTamplit = (1.16637E-5)*(1.16637E-5)*BRAK/2.;
1277 HH[0] = AMTAU*(2*tau_daughters[1].px()*QXN-tau_daughters[0].px()*AMPI*AMPI)/BRAK;
1278 HH[1] = AMTAU*(2*tau_daughters[1].py()*QXN-tau_daughters[0].py()*AMPI*AMPI)/BRAK;
1279 HH[2] = AMTAU*(2*tau_daughters[1].pz()*QXN-tau_daughters[0].pz()*AMPI*AMPI)/BRAK;
1287 else if( pdgid.size()==3 &&
1289 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 111) ) ||
1290 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 111) ) ||
1291 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-321, 311) ) ||
1292 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 311) ) ||
1293 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-321, 310) ) ||
1294 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 310) ) ||
1295 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-321, 130) ) ||
1296 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 130) )
1302 DEBUG( cout<<
"Channel "<<channel<<
" : "; )
1309 const double AMTAU = 1.777;
1312 if(tau_daughters[2].pdgid() != 111) { MNUM=3; channel = 22;}
1313 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1314 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1315 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1316 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1318 float HV[4] = { 0.0 };
1320 dam2pi_( &MNUM, PT, PN, PIM1, PIM2, &LIT, HV );
1335 else if( pdgid.size()==3 &&
1337 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 130) ) ||
1338 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 130) ) ||
1339 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 310) ) ||
1340 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 310) ) ||
1341 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 311) ) ||
1342 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 311) ) ||
1343 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-321, 111) ) ||
1344 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 111) )
1349 DEBUG( cout<<
"Channel "<<channel<<
" : "; )
1356 const double AMTAU = 1.777;
1359 QQ[0]=tau_daughters[1].e() -tau_daughters[2].e() ;
1360 QQ[1]=tau_daughters[1].px()-tau_daughters[2].px();
1361 QQ[2]=tau_daughters[1].py()-tau_daughters[2].py();
1362 QQ[3]=tau_daughters[1].pz()-tau_daughters[2].pz();
1365 PKS[0]=tau_daughters[1].e() +tau_daughters[2].e() ;
1366 PKS[1]=tau_daughters[1].px()+tau_daughters[2].px();
1367 PKS[2]=tau_daughters[1].py()+tau_daughters[2].py();
1368 PKS[3]=tau_daughters[1].pz()+tau_daughters[2].pz();
1371 double PKSD=PKS[0]*PKS[0]-PKS[1]*PKS[1]-PKS[2]*PKS[2]-PKS[3]*PKS[3];
1372 double QQPKS=QQ[0]*PKS[0]-QQ[1]*PKS[1]-QQ[2]*PKS[2]-QQ[3]*PKS[3];
1374 QQ[0]=QQ[0]-PKS[0]*QQPKS/PKSD;
1375 QQ[1]=QQ[1]-PKS[1]*QQPKS/PKSD;
1376 QQ[2]=QQ[2]-PKS[2]*QQPKS/PKSD;
1377 QQ[3]=QQ[3]-PKS[3]*QQPKS/PKSD;
1379 double PRODPQ=AMTAU*QQ[0];
1380 double PRODNQ=tau_daughters[0].e() *QQ[0]
1381 -tau_daughters[0].px()*QQ[1]
1382 -tau_daughters[0].py()*QQ[2]
1383 -tau_daughters[0].pz()*QQ[3];
1384 double PRODPN=AMTAU*tau_daughters[0].e();
1385 double QQ2 =QQ[0]*QQ[0]-QQ[1]*QQ[1]-QQ[2]*QQ[2]-QQ[3]*QQ[3];
1388 double BRAK=(2*PRODPQ*PRODNQ-PRODPN*QQ2);
1390 WTamplit = (1.16637E-5)*(1.16637E-5)*BRAK/2.;
1391 HH[0]=AMTAU*(2*PRODNQ*QQ[1]-QQ2*tau_daughters[0].px())/BRAK;
1392 HH[1]=AMTAU*(2*PRODNQ*QQ[2]-QQ2*tau_daughters[0].py())/BRAK;
1393 HH[2]=AMTAU*(2*PRODNQ*QQ[3]-QQ2*tau_daughters[0].pz())/BRAK;
1399 else if( pdgid.size()==3 &&
1401 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 11,-12) ) ||
1402 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16,-11, 12) )
1405 DEBUG( cout<<
"Channel 1 : "; )
1411 double XK0DEC = 0.01;
1412 double XK[4] = { 0.0 };
1413 double XA[4] = { tau_daughters[2].px(), tau_daughters[2].py(), tau_daughters[2].pz(), tau_daughters[2].e() };
1414 double QP[4] = { tau_daughters[1].px(), tau_daughters[1].py(), tau_daughters[1].pz(), tau_daughters[1].e() };
1415 double XN[4] = { tau_daughters[0].px(), tau_daughters[0].py(), tau_daughters[0].pz(), tau_daughters[0].e() };
1416 double AMPLIT = 0.0;
1417 double HV[4] = { 0.0 };
1421 QP[3] = sqrt( QP[0]*QP[0] + QP[1]*QP[1] + QP[2]*QP[2] + 0.511e-3*0.511e-3);
1422 XA[3] = sqrt( XA[0]*XA[0] + XA[1]*XA[1] + XA[2]*XA[2] );
1424 dampry_( &ITDKRC, &XK0DEC, XK, XA, QP, XN, &LIT, HV );
1435 else if( pdgid.size()==4 &&
1437 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 11,-12, 22) ) ||
1438 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16,-11, 12, 22) )
1441 DEBUG( cout<<
"Channel 1b : "; )
1447 double XK0DEC = 0.01;
1448 double XK[4] = { tau_daughters[3].px(), tau_daughters[3].py(), tau_daughters[3].pz(), tau_daughters[3].e() };
1449 double XA[4] = { tau_daughters[2].px(), tau_daughters[2].py(), tau_daughters[2].pz(), tau_daughters[2].e() };
1450 double QP[4] = { tau_daughters[1].px(), tau_daughters[1].py(), tau_daughters[1].pz(), tau_daughters[1].e() };
1451 double XN[4] = { tau_daughters[0].px(), tau_daughters[0].py(), tau_daughters[0].pz(), tau_daughters[0].e() };
1452 double AMPLIT = 0.0;
1453 double HV[4] = { 0.0 };
1457 QP[3] = sqrt( QP[0]*QP[0] + QP[1]*QP[1] + QP[2]*QP[2] + 0.511e-3*0.511e-3);
1458 XA[3] = sqrt( XA[0]*XA[0] + XA[1]*XA[1] + XA[2]*XA[2] );
1459 XK[3] = sqrt( XK[0]*XK[0] + XK[1]*XK[1] + XK[2]*XK[2] );
1461 if(XK0DEC > XK[3]/(XK[3]+XA[3]+QP[3]+XN[3])) XK0DEC=0.5*XK[3]/(XK[3]+XA[3]+QP[3]+XN[3]);
1463 dampry_( &ITDKRC, &XK0DEC, XK, XA, QP, XN, &LIT, HV );
1474 else if( pdgid.size()==3 &&
1476 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 13,-14) ) ||
1477 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16,-13, 14) )
1481 DEBUG( cout<<
"Channel 2 : "; )
1487 double XK0DEC = 0.01;
1488 double XK[4] = { 0.0 };
1489 double XA[4] = { tau_daughters[2].px(), tau_daughters[2].py(), tau_daughters[2].pz(), tau_daughters[2].e() };
1490 double QP[4] = { tau_daughters[1].px(), tau_daughters[1].py(), tau_daughters[1].pz(), tau_daughters[1].e() };
1491 double XN[4] = { tau_daughters[0].px(), tau_daughters[0].py(), tau_daughters[0].pz(), tau_daughters[0].e() };
1492 double AMPLIT = 0.0;
1493 double HV[4] = { 0.0 };
1497 QP[3] = sqrt( QP[0]*QP[0] + QP[1]*QP[1] + QP[2]*QP[2] + 0.105659*0.105659);
1498 XA[3] = sqrt( XA[0]*XA[0] + XA[1]*XA[1] + XA[2]*XA[2] );
1500 dampry_( &ITDKRC, &XK0DEC, XK, XA, QP, XN, &LIT, HV );
1511 else if( pdgid.size()==4 &&
1513 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 13,-14, 22) ) ||
1514 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16,-13, 14, 22) )
1518 DEBUG( cout<<
"Channel 2b : "; )
1524 double XK0DEC = 0.01;
1525 double XK[4] = { tau_daughters[3].px(), tau_daughters[3].py(), tau_daughters[3].pz(), tau_daughters[3].e() };
1526 double XA[4] = { tau_daughters[2].px(), tau_daughters[2].py(), tau_daughters[2].pz(), tau_daughters[2].e() };
1527 double QP[4] = { tau_daughters[1].px(), tau_daughters[1].py(), tau_daughters[1].pz(), tau_daughters[1].e() };
1528 double XN[4] = { tau_daughters[0].px(), tau_daughters[0].py(), tau_daughters[0].pz(), tau_daughters[0].e() };
1529 double AMPLIT = 0.0;
1530 double HV[4] = { 0.0 };
1534 QP[3] = sqrt( QP[0]*QP[0] + QP[1]*QP[1] + QP[2]*QP[2] + 0.105659*0.105659);
1535 XA[3] = sqrt( XA[0]*XA[0] + XA[1]*XA[1] + XA[2]*XA[2] );
1536 XK[3] = sqrt( XK[0]*XK[0] + XK[1]*XK[1] + XK[2]*XK[2] );
1538 if(XK0DEC > XK[3]/(XK[3]+XA[3]+QP[3]+XN[3])) XK0DEC=0.5*XK[3]/(XK[3]+XA[3]+QP[3]+XN[3]);
1541 dampry_( &ITDKRC, &XK0DEC, XK, XA, QP, XN, &LIT, HV );
1552 else if( pdgid.size()==4 &&
1554 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 111, 111,-211) ) ||
1555 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 111, 111, 211) )
1558 DEBUG( cout<<
"Channel 5 : "; )
1563 const double AMTAU = 1.777;
1565 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1566 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1567 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1568 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1569 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1571 float HV[4] = { 0.0 };
1576 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1587 else if( pdgid.size()==4 &&
1589 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211,-211, 211) ) ||
1590 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 211,-211) )
1593 DEBUG( cout<<
"Channel 5 : "; )
1598 const double AMTAU = 1.777;
1600 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1601 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1602 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1603 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1604 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1606 float HV[4] = { 0.0 };
1611 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1646 else if( pdgid.size()==4 &&
1648 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, -321, -211, 321) ) ||
1649 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 211,-321) )
1652 DEBUG( cout<<
"Channel 5 : "; )
1657 const double AMTAU = 1.777;
1661 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1662 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1663 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1664 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1665 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1667 float HV[4] = { 0.0 };
1672 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1683 else if( pdgid.size()==4 &&
1685 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 311, -211, 311 ) ) ||
1686 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 311, 211, 311 ) ) ||
1687 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 311, -211, 310 ) ) ||
1688 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 311, 211, 310 ) ) ||
1689 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 311, -211, 130 ) ) ||
1690 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 311, 211, 130 ) ) ||
1691 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 310, -211, 311 ) ) ||
1692 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 310, 211, 311 ) ) ||
1693 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 310, -211, 310 ) ) ||
1694 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 310, 211, 310 ) ) ||
1695 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 310, -211, 130 ) ) ||
1696 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 310, 211, 130 ) ) ||
1697 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 130, -211, 311 ) ) ||
1698 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 130, 211, 311 ) ) ||
1699 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 130, -211, 310 ) ) ||
1700 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 130, 211, 310 ) ) ||
1701 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 130, -211, 130 ) ) ||
1702 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 130, 211, 130 ) )
1705 DEBUG( cout<<
"Channel 5 : "; )
1710 const double AMTAU = 1.777;
1713 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1714 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1715 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1716 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1717 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1719 float HV[4] = { 0.0 };
1724 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1735 else if( pdgid.size()==4 &&
1737 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, -321, 311, 111) ) ||
1738 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 311, 111) ) ||
1739 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, -321, 310, 111) ) ||
1740 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 310, 111) ) ||
1741 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, -321, 130, 111) ) ||
1742 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 130, 111) )
1745 DEBUG( cout<<
"Channel 5 : "; )
1750 const double AMTAU = 1.777;
1753 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1754 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1755 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1756 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1757 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1759 float HV[4] = { 0.0 };
1764 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1775 else if( pdgid.size()==4 &&
1777 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 111, 111,-321) ) ||
1778 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 111, 111, 321) )
1781 DEBUG( cout<<
"Channel 5 : "; )
1786 const double AMTAU = 1.777;
1789 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1790 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1791 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1792 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1793 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1795 float HV[4] = { 0.0 };
1800 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1810 else if( pdgid.size()==4 &&
1812 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-321,-211, 211) ) ||
1813 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 321, 211,-211) )
1816 DEBUG( cout<<
"Channel 5 : "; )
1821 const double AMTAU = 1.777;
1824 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1825 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1826 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1827 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1828 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1830 float HV[4] = { 0.0 };
1835 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1844 else if( pdgid.size()==4 &&
1846 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 311, 111) ) ||
1847 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 311, 111) ) ||
1848 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 310, 111) ) ||
1849 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 310, 111) ) ||
1850 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211, 130, 111) ) ||
1851 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 130, 111) )
1854 DEBUG( cout<<
"Channel 5 : "; )
1859 const double AMTAU = 1.777;
1862 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1863 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1864 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1865 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1866 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1868 float HV[4] = { 0.0 };
1873 damppk_( &MNUM, PT, PN, PIM1, PIM2, PIPL, &LIT, HV );
1883 else if( pdgid.size()==5 &&
1885 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16,-211,-211, 211, 111) ) ||
1886 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 211, 211,-211, 111) )
1889 DEBUG( cout<<
"Channel 8 : "; )
1892 const double AMTAU = 1.777;
1894 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1895 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1896 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1897 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1898 float PIZ [4] = { (float)tau_daughters[4].px(), (float)tau_daughters[4].py(), (float)tau_daughters[4].pz(), (float)tau_daughters[4].e() };
1899 float PIPL[4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1901 float HV[4] = { 0.0 };
1903 dam4pi_( &MNUM, PT, PN, PIM1, PIM2, PIZ, PIPL, &LIT, HV );
1913 else if( pdgid.size()==5 &&
1915 ( tau_pdgid== 15 &&
channelMatch(tau_daughters, 16, 111, 111, 111,-211) ) ||
1916 ( tau_pdgid==-15 &&
channelMatch(tau_daughters,-16, 111, 111, 111, 211) )
1919 DEBUG( cout<<
"Channel 9 : "; )
1922 const double AMTAU = 1.777;
1924 float PT[4] = { 0.0, 0.0, 0.0, (float)AMTAU };
1925 float PN[4] = { (float)tau_daughters[0].px(), (float)tau_daughters[0].py(), (float)tau_daughters[0].pz(), (float)tau_daughters[0].e() };
1926 float PIM1[4] = { (float)tau_daughters[1].px(), (float)tau_daughters[1].py(), (float)tau_daughters[1].pz(), (float)tau_daughters[1].e() };
1927 float PIM2[4] = { (float)tau_daughters[2].px(), (float)tau_daughters[2].py(), (float)tau_daughters[2].pz(), (float)tau_daughters[2].e() };
1928 float PIZ [4] = { (float)tau_daughters[3].px(), (float)tau_daughters[3].py(), (float)tau_daughters[3].pz(), (float)tau_daughters[3].e() };
1929 float PIPL[4] = { (float)tau_daughters[4].px(), (float)tau_daughters[4].py(), (float)tau_daughters[4].pz(), (float)tau_daughters[4].e() };
1931 float HV[4] = { 0.0 };
1933 dam4pi_( &MNUM, PT, PN, PIM1, PIM2, PIZ, PIPL, &LIT, HV );
1943 DEBUG( cout<<tau_daughters.size()<<
"-part ???: "; )
1948 Particle HHbuf(HH[0], HH[1], HH[2], HH[3], 0);
1950 HHbuf.rotateXZ(theta);
1951 HHbuf.rotateXY(phi);
1992 double GSWr[7],GSWi[7];
1993 double GSWr0[7],GSWi0[7];
1999 double xsec,xsec0,xsecsum;
2001 double GAMfrac2=0.0;
2013 alphaQED= 1.0/128.86674175;
2015 for (
int k=0;k<7;k++){
2016 GSWr[k]=1.0; GSWr0[k]=1.0;
2017 GSWi[k]=0.0; GSWi0[k]=0.0;
2022 if(ifkorch==1 && nonSM2==0) {
2042 if(ifkorch==1 && nonSM2==1) {
2062 Particle tau_plus ( sp_tau.px(), sp_tau.py(), sp_tau.pz(), sp_tau.e(), sp_tau.pdgid() );
2063 Particle tau_minus( sp_nu_tau.px(), sp_nu_tau.py(), sp_nu_tau.pz(), sp_nu_tau.e(), sp_nu_tau.pdgid() );
2065 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 );
2068 double x1x2 = SS/CMSENE/CMSENE;
2069 double x1Mx2 = P_QQ.pz()/CMSENE*2;
2071 double x1 = ( x1Mx2 + sqrt(x1Mx2*x1Mx2 + 4*x1x2) )/2;
2072 double x2 = ( -x1Mx2 + sqrt(x1Mx2*x1Mx2 + 4*x1x2) )/2;
2077 tau_plus. boostToRestFrame(P_QQ);
2078 tau_minus.boostToRestFrame(P_QQ);
2079 P_B1. boostToRestFrame(P_QQ);
2080 P_B2. boostToRestFrame(P_QQ);
2082 double costheta1 = (tau_plus.px()*P_B1.px() +tau_plus.py()*P_B1.py() +tau_plus.pz()*P_B1.pz() ) /
2083 sqrt(tau_plus.px()*tau_plus.px()+tau_plus.py()*tau_plus.py()+tau_plus.pz()*tau_plus.pz()) /
2084 sqrt(P_B1.px() *P_B1.px() +P_B1.py() *P_B1.py() +P_B1.pz() *P_B1.pz() );
2086 double costheta2 = (tau_minus.px()*P_B2.px() +tau_minus.py()*P_B2.py() +tau_minus.pz()*P_B2.pz() ) /
2087 sqrt(tau_minus.px()*tau_minus.px()+tau_minus.py()*tau_minus.py()+tau_minus.pz()*tau_minus.pz()) /
2088 sqrt(P_B2.px() *P_B2.px() +P_B2.py() *P_B2.py() +P_B2.pz() *P_B2.pz() );
2090 double sintheta1 = sqrt(1-costheta1*costheta1);
2091 double sintheta2 = sqrt(1-costheta2*costheta2);
2096 double phit=tau_plus.getAnglePhi();
2097 tau_plus.rotateXY(-phit);
2098 tau_minus.rotateXY(-phit);
2099 P_B1.rotateXY(-phit);
2100 P_B2.rotateXY(-phit);
2101 double thetam = tau_plus.getAngleTheta();
2104 tau_plus.rotateXZ(-thetam);
2105 tau_minus.rotateXZ(-thetam);
2106 P_B1.rotateXZ(-thetam);
2107 P_B2.rotateXZ(-thetam);
2110 double phia=P_B1.getAnglePhi()-M_PI;
2111 double phib=P_B2.getAnglePhi();
2112 if (phib>2*M_PI) phib=phib-2*M_PI;
2113 double mb=sqrt(P_B2.px() *P_B2.px() +P_B2.py() *P_B2.py() +P_B2.pz() *P_B2.pz() );
2114 double ma= sqrt(P_B1.px() *P_B1.px() +P_B1.py() *P_B1.py() +P_B1.pz() *P_B1.pz() );
2121 if (phiaR> M_PI) phiaR=phiaR-M_PI;
2122 if (phibR> M_PI) phibR=phibR-M_PI;
2123 if (phiaR> M_PI/2) phiaR=M_PI-phiaR;
2124 if (phibR> M_PI/2) phibR=M_PI-phibR;
2127 double costhe = (costheta1*sintheta2 + costheta2*sintheta1) / (sintheta1 + sintheta2);
2128 double costhem= (costheta1*sintheta2 + costheta2*sintheta1) / (sintheta1 + sintheta2);
2132 double RRR = Tauola::randomDouble();
2134 wtMustraal= P_B1.e()*P_B1.e()*(1+costheta1*costheta1)/(P_B1.e()*P_B1.e()*(1+costheta1*costheta1)+P_B2.e()*P_B2.e()*(1+costheta2*costheta2));
2135 if( RRR< wtMustraal) {costhe=costheta1; costhem=costheta2; MusChan=1;phi1=phia;}
2136 else {costhe=costheta2; costhem=costheta1; MusChan=2;phi1=phib;}
2155 WID[0] = f(x1, 0,SS,CMSENE)*f(x2, 0,SS,CMSENE) * sigborn(0,SS, costhe);
2156 WID[1] = f(x1, 1,SS,CMSENE)*f(x2,-1,SS,CMSENE) * sigborn(1,SS, costhe);
2157 WID[2] = f(x1,-1,SS,CMSENE)*f(x2, 1,SS,CMSENE) * sigborn(1,SS,-costhem);
2158 WID[3] = f(x1, 2,SS,CMSENE)*f(x2,-2,SS,CMSENE) * sigborn(2,SS, costhe);
2159 WID[4] = f(x1,-2,SS,CMSENE)*f(x2, 2,SS,CMSENE) * sigborn(2,SS,-costhem);
2160 WID[5] = f(x1, 3,SS,CMSENE)*f(x2,-3,SS,CMSENE) * sigborn(3,SS, costhe);
2161 WID[6] = f(x1,-3,SS,CMSENE)*f(x2, 3,SS,CMSENE) * sigborn(3,SS,-costhem);
2162 WID[7] = f(x1, 4,SS,CMSENE)*f(x2,-4,SS,CMSENE) * sigborn(4,SS, costhe);
2163 WID[8] = f(x1,-4,SS,CMSENE)*f(x2, 4,SS,CMSENE) * sigborn(4,SS,-costhem);
2164 WID[9] = f(x1, 5,SS,CMSENE)*f(x2,-5,SS,CMSENE) * sigborn(5,SS, costhe);
2165 WID[10]= f(x1,-5,SS,CMSENE)*f(x2, 5,SS,CMSENE) * sigborn(5,SS,-costhem);
2166 WID[11]= GAMfrac*(WID[0]+WID[1]+WID[2]+WID[3]+WID[4]+WID[5]+WID[6]+WID[7]+WID[8]+WID[9]+WID[10]);
2181 for(
int i=0;i<=12;i++) sum+=WID[i];
2192 cout <<
"Tauspinner::calculateWeightFromParticlesH WARNING: sum of WID[0]-WID[10] is 0. Check LHAPDF configuration" << endl;
2196 if(relWTnonSM==0) WTnonSM=sum;
2200 WID2[0] = f(x1, 0,SS,CMSENE)*f(x2, 0,SS,CMSENE) * sigborn(0,SS, costhe) *
plweight(0,SS, costhe);
2201 WID2[1] = f(x1, 1,SS,CMSENE)*f(x2,-1,SS,CMSENE) * sigborn(1,SS, costhe) *
plweight(1,SS, costhe);
2202 WID2[2] = f(x1,-1,SS,CMSENE)*f(x2, 1,SS,CMSENE) * sigborn(1,SS,-costhem) *
plweight(1,SS,-costhem);
2203 WID2[3] = f(x1, 2,SS,CMSENE)*f(x2,-2,SS,CMSENE) * sigborn(2,SS, costhe) *
plweight(2,SS, costhe);
2204 WID2[4] = f(x1,-2,SS,CMSENE)*f(x2, 2,SS,CMSENE) * sigborn(2,SS,-costhem) *
plweight(2,SS,-costhem);
2205 WID2[5] = f(x1, 3,SS,CMSENE)*f(x2,-3,SS,CMSENE) * sigborn(3,SS, costhe) *
plweight(3,SS, costhe);
2206 WID2[6] = f(x1,-3,SS,CMSENE)*f(x2, 3,SS,CMSENE) * sigborn(3,SS,-costhem) *
plweight(3,SS,-costhem);
2207 WID2[7] = f(x1, 4,SS,CMSENE)*f(x2,-4,SS,CMSENE) * sigborn(4,SS, costhe) *
plweight(4,SS, costhe);
2208 WID2[8] = f(x1,-4,SS,CMSENE)*f(x2, 4,SS,CMSENE) * sigborn(4,SS,-costhem) *
plweight(4,SS,-costhem);
2209 WID2[9] = f(x1, 5,SS,CMSENE)*f(x2,-5,SS,CMSENE) * sigborn(5,SS, costhe) *
plweight(5,SS, costhe);
2210 WID2[10]= f(x1,-5,SS,CMSENE)*f(x2, 5,SS,CMSENE) * sigborn(5,SS,-costhem) *
plweight(5,SS,-costhem);
2213 WID2[11]= GAMfrac2*(WID2[0]+WID2[1]+WID2[2]+WID2[3]+WID2[4]+WID2[5]+WID2[6]+WID2[7]+WID2[8]+WID2[9]+WID2[10]);
2223 for(
int i=0;i<=12;i++) sum2+=WID2[i];
2227 if(relWTnonSM==0) WTnonSM=sum2;
2235 if(IfHiggs && nonSM2==1) {
2236 double polp =
plzap2(0,15,S,costhe);
2237 pol += (2*(1-polp)-1);
2240 if(IfHiggs)
return NAN;
2243 for(
int i=0;i<=12;i++) WID[i]/=sum;
2256 for(
int i=0;i<=3;i++){
2257 for(
int j=0;j<=3;j++){
2263 for(
int i=1;i<=12;i++)
2267 double cost = costhe;
2270 if( ICC==2 || ICC==4 || ICC==6 || ICC==8 || ICC==10|| ICC==12 ) { cost = -costhem; IROT=1;}
2274 if( ICC==7 || ICC==8 ) ID = 4;
2275 if( ICC==1 || ICC==2 ) ID = 1;
2276 if( ICC==5 || ICC==6 ) ID = 3;
2277 if( ICC==9 || ICC==10 ) ID = 5;
2278 if( ICC==11 || ICC==12 ) ID = 22;
2282 double polp =
plzap2(ID,tau_pdgid,S,cost);
2284 pol += (2*(1-polp)-1)*WID[i];
2291 pp.
m_R[1][1] = pp.
m_R[2][2] = 0.0;
2292 pp.
m_R[1][2] = pp.
m_R[2][1] = 0.0;
2293 pp.
m_R[0][1] = pp.
m_R[3][2] = 0.0;
2294 pp.
m_R[0][2] = pp.
m_R[3][1] = 0.0;
2295 pp.
m_R[1][0] = pp.
m_R[2][3] = 0.0;
2296 pp.
m_R[2][0] = pp.
m_R[1][3] = 0.0;
2323 if (ID==2||ID==4) {channel=2 ; IFLAV=2;}
2324 if (ID==1||ID==3||ID==5){channel=3 ; IFLAV=1;}
2336 sin2W0=
sin2W(IFLAV);
2337 alphaQED=7.2973525693e-3;
2338 for (
int k=0;k<7;k++){
2339 complex<double> rezu =
EWFACT(IFLAV, k, S, cost);
2342 GSWr[k]=real(rezu);GSWr0[k]=1.0;
2343 GSWi[k]=imag(rezu);GSWi0[k]=0.0;
2348 dipolqq_(&iqed,&Energy,&theta,&channel,&Amz0,&Gamz0,&sin2W0,&alphaQED,&ReA00,&ImA00, &ReB0,&ImB0, &ReX0,&ImX0,&ReY0,&ImY0, GSWr0,GSWi0,Rcor);
2351 dipolqq_(&iqed,&Energy,&theta,&channel,&Amz0,&Gamz0,&sin2W0,&alphaQED,&ReA0,&ImA0, &ReB,&ImB, &ReX,&ImX,&ReY,&ImY, GSWr,GSWi,Rcor);
2370 Rcor[1][3]=-Rcor[1][3];
2371 Rcor[3][1]=-Rcor[3][1];
2372 Rcor[0][1]=-Rcor[0][1];
2373 Rcor[1][0]=-Rcor[1][0];
2374 Rcor[2][3]=-Rcor[2][3];
2375 Rcor[3][2]=-Rcor[3][2];
2376 Rcor[2][0]=-Rcor[2][0];
2377 Rcor[0][2]=-Rcor[0][2];
2394 if (MusChan==1 && IROT==0){
Rotin(phi1,Rcor); }
2395 else if(MusChan==1 && IROT==1){
Rotin(-phi1,Rcor); }
2396 else if(MusChan==2 && IROT==0){
Rotin(phi1,Rcor); }
2397 else if(MusChan==2 && IROT==1){
Rotin(-phi1,Rcor); }
2398 else {printf(
" warning MusChan= %3i IROT= %3i \n",MusChan,IROT);
2438 R11 += WID[i]*pp.
m_R[1][1];
2439 R22 += WID[i]*pp.
m_R[2][2];
2440 R12 += WID[i]*pp.
m_R[1][2];
2441 R21 += WID[i]*pp.
m_R[2][1];
2444 for(
int i3=0;i3<=3;i3++){
2445 for(
int j=0;j<=3;j++){
2450 RcorExt[i4][j4]+=WID[i]*Rcor[i3][j];
2454 xsecsum+=xsec/xsec0*WID[i];
2463 pol += (2*(1-polp)-1)*WID[i];
2470 dipolgamma_(&iqed, &E, &theta, &A0, &B0, Rcor);
2486 dipolgamma_(&iqed, &E, &theta, &A, &B, Rcor);
2519 R11 += WID[i]*Rcor[1][1]/Rcor[0][0];
2520 R22 += WID[i]*Rcor[2][2]/Rcor[0][0];
2521 R12 += WID[i]*Rcor[1][2]/Rcor[0][0];
2522 R21 += WID[i]*Rcor[2][1]/Rcor[0][0];
2538 if (MusChan==1 && IROT==0){
Rotin( phi1,Rcor); }
2539 else if(MusChan==1 && IROT==1){
Rotin(-phi1,Rcor); }
2540 else if(MusChan==2 && IROT==0){
Rotin( phi1,Rcor); }
2541 else if(MusChan==2 && IROT==1){
Rotin(-phi1,Rcor); }
2542 else {printf(
" warning (gamma gamma) MusChan= %3i IROT= %3i \n",MusChan,IROT);
2558 for(
int i3=0;i3<=3;i3++){
2559 for(
int j=0;j<=3;j++){
2564 RcorExt[i4][j4]+=WID[i]*Rcor[i3][j];
2567 xsecsum+=xsec/xsec0*WID[i];
2599 for (
int k0=0;k0<4;k0++){
2600 for (
int k1=0;k1<4;k1++){
2610 RcorExt[k0][k1]=RcorExt[k0][k1]*F;
2621 if(relWTnonSM!=0) WTnonSM=xsecsum;
2622 if(relWTnonSM==0) {WTnonSM=xsecsum;
2623 std::cout <<
"input not supported: relWTnonSM=" <<relWTnonSM<<
" ifkorch= "<<ifkorch << std::endl;
2624 std::cout <<
"X-sects nonSM2="<<nonSM2<<
" sum= " << sum <<
" WTnonSM-korch= "<< xsecsum <<std::endl;
2642 for(
int i=0;i<4;i++){
2644 R[1][i]= R[1][i]*c + R[2][i]*s;
2645 R[2][i]= -buf *s + R[2][i]*c;
2647 for(
int i=0;i<4;i++){
2649 R[i][1]= R[i][1]*c + R[i][2]*s;
2650 R[i][2]= -buf *s + R[i][2]*c;
2665 bool channelMatch(vector<Particle> &particles,
int p1,
int p2,
int p3,
int p4,
int p5,
int p6)
2670 for(
unsigned int i=0;i<particles.size();i++) list.push_back(particles[i].pdgid());
2673 int p[6] = { p1, p2, p3, p4, p5, p6 };
2677 for(
int i=0;i<6;i++)
2684 for(
unsigned int j=0;j<list.size(); j++)
2690 list.erase(list.begin()+j);
2695 if(!found)
return false;
2699 if(list.size()!=0)
return false;
2704 vector<Particle> newList;
2706 for(
int i=0;i<6;i++)
2711 for(
unsigned int j=0;j<particles.size(); j++)
2714 if(particles[j].pdgid()==p[i])
2716 newList.push_back(particles[j]);
2717 particles.erase(particles.begin()+j);
2723 particles = newList;
2738 double px=nu_tau.px()+tau.px();
2739 double py=nu_tau.py()+tau.py();
2740 double pz=nu_tau.pz()+tau.pz();
2741 double e =nu_tau.e ()+tau.e ();
2744 cout<<
"--------------------------------------------------------------------------------------------------------"<<endl;
2752 for(
unsigned int i=0; i<tau_daughters.size();i++) tau_daughters[i].
print();
2755 cout<<
"--------------------------------------------------------------------------------------------------------"<<endl;
2769 double px=0.0,py=0.0,pz=0.0,e=0.0;
2771 for(
unsigned int i=0; i<x.size();i++)
void recalculateRij(int incoming_pdg_id, int outgoing_pdg_id, double invariant_mass_squared, double cosTheta)
double plweight(int ide, double svar, double costhe)
double plzap2(int ide, int idf, double svar, double costhe)
void initialize_gamagama(double _GAMfraci, double _GAMfrac2i, double _A0i, double _B0i, double _Ai, double _Bi)
void initialize_GSW_norm(int _keyGSW, double _ReGSW1, double _ImGSW1, double _ReGSW2, double _ImGSW2, double _ReGSW3, double _ImGSW3, double _ReGSW4, double _ImGSW4, double _ReGSW5, double _ImGSW5, double _ReGSW6, double _ImGSW6)
double calculateWeightFromParticlesH(SimpleParticle &sp_X, SimpleParticle &sp_tau1, SimpleParticle &sp_tau2, vector< SimpleParticle > &sp_tau1_daughters, vector< SimpleParticle > &sp_tau2_daughters)
void initialize_GSW(int _ifGSW, int _ifkorch, int _iqed, double _ReAini, double _ImAini, double _ReBini, double _ImBini, double _ReXini, double _ImXini, double _ReYini, double _ImYini)
bool channelMatch(vector< Particle > &particles, int p1, int p2=0, int p3=0, int p4=0, int p5=0, int p6=0)
double disth_(double *SVAR, double *COSTHE, int *TA, int *TB)
double calculateWeightFromParticlesWorHpn(SimpleParticle &W, SimpleParticle &tau, SimpleParticle &nu_tau, vector< SimpleParticle > &tau_daughters)
void getZgamMultipliersTR(double &Rxx, double &Ryy, double &Rxy, double &Ryx)
void Rotin(double phi, double R[4][4])
void getZgamParametersTR(double &Rxx, double &Ryy, double &Rxy, double &Ryx)
double getLongitudinalPolarization(double, SimpleParticle &, SimpleParticle &)
void getHiggsParameters(double *mass, double *width, double *normalization)
void setZgamMultipliersTR(double Rxx, double Ryy, double Rxy, double Ryx)
void setFrameType(int _FrameType)
complex< double > EWFACT(int FLAV, int NO, double s, double costhe)
void getZgamParametersL(double &Rzx, double &Rzy, double &Rzz, double &Rtx, double &Rty, double &Rtz)
Particle * vector_sum(vector< Particle > &x)
void setNonSMkey(int key)
double * calculateHH(int tau_pdgid, vector< Particle > &tau_daughters, double phi, double theta)
void setHiggsParametersTR(double Rxx, double Ryy, double Rxy, double Ryx)
void getHH(double &HHmx, double &HHmy, double &HHmz, double &HHpx, double &HHpy, double &HHpz)
void GSWadapt(int ID, double S, double cost, double GSWr[7], double GSWi[7])
void setRelWTnonSM(int _relWTnonSM)
void print(Particle &W, Particle &nu_tau, Particle &tau, vector< Particle > &tau_daughters)
void initialize_spinner(bool _Ipp, int _Ipol, int _nonSM2, int _nonSMN, double _CMSENE)
void prepareKinematicForHH(Particle &tau, Particle &nu_tau, vector< Particle > &tau_daughters, double *phi2, double *theta2)
void setHiggsParameters(int jak, double mass, double width, double normalization)