2 #include "TauolaParticlePair.h"
12 extern "C" {
double transcosTheta ;
double transinvariant_mass;
13 int transincoming_pdg_id;
14 double transR11, transR22, transWT11, transWT22;
15 double trans_h_tau_minus[4];
double trans_h_tau_plus[4];}
20 particle_list.pop_back();
39 if(temp_mothers.size()==0){
42 Log::Warning()<<
"WARNING: Could not find taus mother or grandmothers. "
43 <<
"Ignoring spin effects" << std::endl;
54 std::vector<TauolaParticle*> temp_daughters;
55 temp_daughters = temp_mothers.at(0)->getDaughters();
56 if(temp_daughters.size()==0)
57 Log::Fatal(
"WARNING: Something wrong with event structure or there is a bug in the TAUOLA interface.",6);
75 for(j=0;j<(int)particle_list.size();j++)
77 if(j>=(
int)particle_list.size())
continue;
81 particle_list.erase(particle_list.begin()+j);
93 if(temp_mothers.size()==1){
120 int incoming_pdg_id=0;
121 int outgoing_pdg_id=0;
122 double invariant_mass_squared=-5.0;
126 for(
int x = 0; x < 4; x ++) {
127 for(
int y = 0; y < 4; y ++)
155 if(!Tauola::spin_correlation.HIGGS_H)
return;
157 double phi = Tauola::getHiggsScalarPseudoscalarMixingAngle();
160 double beta = sqrt(1-4*mass_ratio*mass_ratio);
161 double denominator = pow(cos(phi)*beta,2)+pow(sin(phi),2);
164 m_R[1][1]= (pow(cos(phi)*beta,2)-pow(sin(phi),2))/denominator;
165 m_R[1][2]= 2*cos(phi)*sin(phi)*beta/denominator;
177 if(!Tauola::spin_correlation.Z0)
break;
183 pz =
getZPolarization(&incoming_pdg_id, &outgoing_pdg_id, &invariant_mass_squared, &cosTheta);
189 recalculateRij(incoming_pdg_id, outgoing_pdg_id, invariant_mass_squared, cosTheta);
193 if(!Tauola::spin_correlation.GAMMA)
break;
199 pz =
getZPolarization(&incoming_pdg_id, &outgoing_pdg_id, &invariant_mass_squared, &cosTheta);
205 recalculateRij(incoming_pdg_id, outgoing_pdg_id, invariant_mass_squared, cosTheta);
210 if(!Tauola::spin_correlation.HIGGS)
break;
219 if(!Tauola::spin_correlation.HIGGS_A)
break;
227 if(!Tauola::spin_correlation.HIGGS_PLUS)
break;
234 if(!Tauola::spin_correlation.HIGGS_MINUS)
break;
241 if(!Tauola::spin_correlation.W_PLUS)
break;
248 if(!Tauola::spin_correlation.W_MINUS)
break;
265 Tauola::buf_incoming_pdg_id=incoming_pdg_id;
266 Tauola::buf_outgoing_pdg_id=outgoing_pdg_id;
267 Tauola::buf_invariant_mass_squared=invariant_mass_squared;
268 Tauola::buf_cosTheta=cosTheta;
281 setBornKinematics(*incoming_pdg_id, *outgoing_pdg_id, *invariant_mass_squared, *cosTheta);
287 Log::Warning()<<
"Not enough mothers of Z to "
288 <<
"calculate cos(theta) between "
289 <<
"incoming about outgoing beam"
291 return 1-plzap0_(incoming_pdg_id,outgoing_pdg_id,
292 invariant_mass_squared, cosTheta);
296 Log::Error()<<
"tau+ or tau- not found in Z decay"<< endl;
309 vector<TauolaParticle*> extra_grandmothers;
319 vector<TauolaParticle*> extra_tau_siblings;
320 vector<TauolaParticle*> temp_production_particles;
328 vector<TauolaParticle*> extra_Z_siblings;
331 extra_Z_siblings.push_back(
m_grandmothers.at(0)->getDaughters().at(i));
336 std::vector<TauolaParticle*> effective_taus;
348 for(
int i=0; i<(int) extra_grandmothers.size(); i++)
352 for(
int i=0; i<(int) extra_Z_siblings.size(); i++)
356 for(
int i=0; i<(int) extra_tau_siblings.size() ; i++){
358 addToBeam(extra_tau_siblings.at(i),&effective_taus,0);
365 *invariant_mass_squared = pow(temp_mother->
getMass(),2);
370 double angle1,angle2,angle3;
390 double sintheta1 = sqrt(1-costheta1*costheta1);
391 double sintheta2 = sqrt(1-costheta2*costheta2);
392 double avg = (costheta1*sintheta2+costheta2*sintheta1)/(sintheta1+sintheta2);
398 if(abs(*incoming_pdg_id)==21 || abs(*incoming_pdg_id)==22)
404 if( abs(*incoming_pdg_id)> 8 &&
405 abs(*incoming_pdg_id)!=11 &&
406 abs(*incoming_pdg_id)!=13 &&
407 abs(*incoming_pdg_id)!=15 )
409 Log::Error()<<
"Second class disaster: incoming_pdg_id = "<<*incoming_pdg_id<<endl;
416 return 1-plzap0_(incoming_pdg_id,outgoing_pdg_id,
417 invariant_mass_squared, cosTheta);
422 setBornKinematics(*incoming_pdg_id, *outgoing_pdg_id, *invariant_mass_squared, *cosTheta);
423 return 1-plzap0_(incoming_pdg_id,outgoing_pdg_id, invariant_mass_squared, cosTheta);
430 double angle1,angle2,angle3;
447 double sintheta1 = sqrt(1-costheta1*costheta1);
448 double sintheta2 = sqrt(1-costheta2*costheta2);
450 double avg = (costheta1*sintheta2+costheta2*sintheta1)/(sintheta1+sintheta2);
459 setBornKinematics(*incoming_pdg_id, *outgoing_pdg_id, *invariant_mass_squared, *cosTheta);
460 return 1-plzap0_(incoming_pdg_id,outgoing_pdg_id, invariant_mass_squared, cosTheta);
470 std::vector<TauolaParticle*> *candidates_same,
471 std::vector<TauolaParticle*> *candidates_opp){
479 double s0 =1.0/
getVirtuality(pcle,candidates_same->at(0),
false);
480 double s1 = 1.0/
getVirtuality(pcle,candidates_same->at(1),
false);
483 s_beam = candidates_same->at(0);
487 s_beam = candidates_same->at(1);
492 double o0 =1.0/
getVirtuality(pcle,candidates_opp->at(0),
true);
493 double o1 = 1.0/
getVirtuality(pcle,candidates_opp->at(1),
true);
496 o_beam = candidates_opp->at(0);
500 o_beam = candidates_opp->at(1);
509 if(abs(pdg2)==15)
return;
510 if((abs(pdg2)==21 || abs(pdg2)==22) && abs(pdg1)<17 && abs(pdg1)!=10 && abs(pdg1)!=9) s_beam->
setPdgID( pdg1);
517 if((abs(pdg2)==21 || abs(pdg2)==22) && abs(pdg1)<17 && abs(pdg1)!=10 && abs(pdg1)!=9) o_beam->
setPdgID(-pdg1);
542 abs(p2->
getPdgID())==TauolaParticle::CHARM ||
543 abs(p2->
getPdgID())==TauolaParticle::TOP)
546 abs(p2->
getPdgID())==TauolaParticle::STRANGE ||
547 abs(p2->
getPdgID())==TauolaParticle::BOTTOM)
552 abs(p1->
getPdgID())==TauolaParticle::CHARM ||
553 abs(p1->
getPdgID())==TauolaParticle::TOP)
556 abs(p1->
getPdgID())==TauolaParticle::STRANGE ||
557 abs(p1->
getPdgID())==TauolaParticle::BOTTOM)
571 double h_tau_minus[4]={2,0,0,0};
572 double h_tau_plus[4]={2,0,0,0};
578 for(
double weight=0; weight < Tauola::randomDouble();){
582 Tauola::redefineTauMinusProperties(tau_minus);
590 Tauola::redefineTauPlusProperties(tau_plus);
597 double sinv=sqrt((tau_minus->
getE()+tau_plus->
getE())*(tau_minus->
getE()+tau_plus->
getE())
604 if(h_tau_plus[0]<1.3 && h_tau_minus[0]<1.3)
double asymi=(tau_minus->
getE()- tau_plus->
getE())/( tau_minus->
getE()+ tau_plus->
getE());
616 transWT11=
m_R[1][1]* h_tau_minus[1]* h_tau_plus[1];
617 transWT22=
m_R[2][2]* h_tau_minus[2]* h_tau_plus[2];
618 trans_h_tau_minus[3]= h_tau_minus[3];
619 trans_h_tau_minus[1]= h_tau_minus[1];
620 trans_h_tau_minus[2]= h_tau_minus[2];
621 trans_h_tau_plus[3]= h_tau_plus[3];
622 trans_h_tau_plus[1]= h_tau_plus[1];
623 trans_h_tau_plus[2]= h_tau_plus[2];
625 for(
int i =0; i<4; i++){
626 for(
int j=0; j<4; j++)
627 weight+=
m_R[i][j]*h_tau_minus[i]*h_tau_plus[j];
633 wthel[0]=(h_tau_minus[0]+h_tau_minus[3])*(h_tau_plus[0]+h_tau_plus[3])*(
m_R[0][0]+
m_R[0][3]+
m_R[3][0]+
m_R[3][3]);
634 wthel[1]=(h_tau_minus[0]+h_tau_minus[3])*(h_tau_plus[0]-h_tau_plus[3])*(
m_R[0][0]-
m_R[0][3]+
m_R[3][0]-
m_R[3][3]);
635 wthel[2]=(h_tau_minus[0]-h_tau_minus[3])*(h_tau_plus[0]+h_tau_plus[3])*(
m_R[0][0]+
m_R[0][3]-
m_R[3][0]-
m_R[3][3]);
636 wthel[3]=(h_tau_minus[0]-h_tau_minus[3])*(h_tau_plus[0]-h_tau_plus[3])*(
m_R[0][0]-
m_R[0][3]-
m_R[3][0]+
m_R[3][3]);
638 double rn=Tauola::randomDouble();
639 if (rn>(wthel[0]+wthel[1]+wthel[2])/(wthel[0]+wthel[1]+wthel[2]+wthel[3])) Tauola::setHelicities(-1,-1);
640 else if (rn>(wthel[0]+wthel[1]) /(wthel[0]+wthel[1]+wthel[2]+wthel[3])) Tauola::setHelicities(-1,+1);
641 else if (rn>(wthel[0]) /(wthel[0]+wthel[1]+wthel[2]+wthel[3])) Tauola::setHelicities( 1,-1);
642 else Tauola::setHelicities( 1, 1);
650 double angle1,angle2,angle3;
685 double * rotation_angle2,
686 double * rotation_angle3,
688 vector<TauolaParticle *> grandmothers,
689 vector<TauolaParticle *> taus
695 for(
int i=0; i< (int) grandmothers.size(); i++)
696 grandmothers.at(i)->boostToRestFrame(mother);
699 for(
int i=0; i< (int) taus.size(); i++){
700 taus.at(i)->boostToRestFrame(mother);
703 taus.at(i)->boostDaughtersToRestFrame(mother);
721 if(grandmothers.size()<1){
722 *rotation_angle3 = 0;
740 double rotation_angle2,
741 double rotation_angle3,
743 vector<TauolaParticle *> grandmothers,
744 vector<TauolaParticle *> taus){
760 for(
int i=0; i< (int) grandmothers.size(); i++)
761 grandmothers.at(i)->boostFromRestFrame(mother);
764 for(
int i=0; i< (int) taus.size(); i++){
765 taus.at(i)->boostFromRestFrame(mother);
766 taus.at(i)->boostDaughtersFromRestFrame(mother);
771 vector<TauolaParticle *> taus,
772 double theta,
int axis,
int axis2){
773 for(
int i=0; i< (int) grandmothers.size(); i++)
774 grandmothers.at(i)->rotate(axis,theta,axis2);
775 for(
int i=0; i< (int) taus.size(); i++){
776 taus.at(i)->rotate(axis,theta,axis2);
777 taus.at(i)->rotateDaughters(axis,theta,axis2);
794 bool tau_plus =
false;
795 bool tau_minus =
false;
796 bool tau_neutrino =
false;
797 bool tau_antineutrino =
false;
799 for(
int d=0; d < (int) taus.size(); d++){
802 px+=daughter->
getPx();
803 py+=daughter->
getPy();
804 pz+=daughter->
getPz();
816 tau_antineutrino=
true;
820 double m = e*e-px*px-py*py-pz*pz;
830 if(tau_plus&&tau_minus)
834 if(tau_plus&&tau_neutrino)
838 if(tau_minus&&tau_antineutrino)
842 return taus.at(0)->createNewParticle(pdg,2,m,px,py,pz,e);
858 for(
int i=0; i< (int) taus.size(); i++){
866 for(
int i=0; i< (int) taus.size(); i++){
877 for(
int i=0; i< (int) grandmothers.size(); i++){
878 if( (grandmothers.at(i)->getPdgID()<0 && grandmothers.at(i)->getPdgID()>-9) ||
881 if(e<grandmothers.at(i)->getE()){
882 e=grandmothers.at(i)->getE();
889 for(
int i=0; i< (int) grandmothers.size(); i++)
891 if(grandmothers.at(i)->getPdgID()==21 || grandmothers.at(i)->getPdgID()==22)
894 e=grandmothers.at(i)->getE();
899 if(index==-1) index=0;
902 grandmothers.at(index)->print();
906 return grandmothers.at(index);
913 for(
int i=0; i< (int) grandmothers.size(); i++){
914 if( (grandmothers.at(i)->getPdgID()>0 && grandmothers.at(i)->getPdgID()<9) ||
917 if(e<grandmothers.at(i)->getE()){
918 e=grandmothers.at(i)->getE();
925 for(
int i=(
int) grandmothers.size()-1; i>=0 ; i--)
927 if(grandmothers.at(i)->getPdgID()==21||grandmothers.at(i)->getPdgID()==22)
930 e=grandmothers.at(i)->getE();
935 if(index==-1) index=0;
939 return grandmothers.at(index);
947 std::cout <<
"Daughters final:" << std::endl;
952 std::cout <<
"Daughters at production:" << std::endl;
957 std::cout <<
"Mother particle: " << std::endl;
961 std::cout <<
"Grandmother particles: " << std::endl;
987 if (abs(outgoing_pdg_id)!=15)
989 Log::Warning()<<
"interface was not used for taus pdg id="<<outgoing_pdg_id<<endl;
993 double (*T) [Tauola::NCOS][4][4] = NULL;
994 double (*Tw) [Tauola::NCOS] = NULL;
995 double (*Tw0)[Tauola::NCOS] = NULL;
1001 switch(abs(incoming_pdg_id)){
1003 if(invariant_mass_squared<Tauola::smaxB && invariant_mass_squared>Tauola::sminB)
1005 T = Tauola::table11B;
1006 Tw = Tauola::wtable11B;
1007 Tw0 = Tauola::w0table11B;
1008 smin = Tauola::sminB;
1009 smax = Tauola::smaxB;
1010 step = (smax-smin)/(Tauola::NS2-1);
1012 else if (invariant_mass_squared<Tauola::smaxC && invariant_mass_squared>Tauola::sminC)
1014 T = Tauola::table11C;
1015 Tw = Tauola::wtable11C;
1016 Tw0 = Tauola::w0table11C;
1017 smin = Tauola::sminC;
1018 smax = Tauola::smaxC;
1019 step = (smax-smin)/(Tauola::NS3-1);
1023 T = Tauola::table11A;
1024 Tw = Tauola::wtable11A;
1025 Tw0 = Tauola::w0table11A;
1026 smin = Tauola::sminA;
1027 smax = Tauola::smaxA;
1028 step = (smax-smin)/(Tauola::NS1-1);
1036 if(invariant_mass_squared<Tauola::smaxB && invariant_mass_squared>Tauola::sminB)
1038 T = Tauola::table1B;
1039 Tw = Tauola::wtable1B;
1040 Tw0 = Tauola::w0table1B;
1041 smin = Tauola::sminB;
1042 smax = Tauola::smaxB;
1043 step = (smax-smin)/(Tauola::NS2-1);
1045 else if (invariant_mass_squared<Tauola::smaxC && invariant_mass_squared>Tauola::sminC)
1047 T = Tauola::table1C;
1048 Tw = Tauola::wtable1C;
1049 Tw0 = Tauola::w0table1C;
1050 smin = Tauola::sminC;
1051 smax = Tauola::smaxC;
1052 step = (smax-smin)/(Tauola::NS3-1);
1056 T = Tauola::table1A;
1057 Tw = Tauola::wtable1A;
1058 Tw0 = Tauola::w0table1A;
1059 smin = Tauola::sminA;
1060 smax = Tauola::smaxA;
1061 step = (smax-smin)/(Tauola::NS1-1);
1068 if(invariant_mass_squared<Tauola::smaxB && invariant_mass_squared>Tauola::sminB)
1070 T = Tauola::table2B;
1071 Tw = Tauola::wtable2B;
1072 Tw0 = Tauola::w0table2B;
1073 smin = Tauola::sminB;
1074 smax = Tauola::smaxB;
1075 step = (smax-smin)/(Tauola::NS2-1);
1077 else if (invariant_mass_squared<Tauola::smaxC && invariant_mass_squared>Tauola::sminC)
1079 T = Tauola::table2C;
1080 Tw = Tauola::wtable2C;
1081 Tw0 = Tauola::w0table2C;
1082 smin = Tauola::sminC;
1083 smax = Tauola::smaxC;
1084 step = (smax-smin)/(Tauola::NS3-1);
1088 T = Tauola::table2A;
1089 Tw = Tauola::wtable2A;
1090 Tw0 = Tauola::w0table2A;
1091 smin = Tauola::sminA;
1092 smax = Tauola::smaxA;
1093 step = (smax-smin)/(Tauola::NS1-1);
1098 Log::Warning()<<
"interface was not used for proper beams pdg id="<<incoming_pdg_id<<endl;
1103 if (T[0][0][0][0]<0.5)
return;
1106 if (invariant_mass_squared <= exp(Tauola::sminA)){
1108 double cosf = cosTheta;
1109 double s = invariant_mass_squared;
1110 double sinf = sqrt(1-cosf*cosf);
1111 double MM = sqrt(4e0*mta*mta/s);
1112 double xnorm = 1+cosf*cosf + MM*MM*sinf*sinf;
1115 for (
int i=0;i<4;i++)
1116 for (
int j=0;j<4;j++)
1119 m_R[0][0] = (1+cosf*cosf + MM*MM*sinf*sinf)/xnorm;
1120 m_R[1][1] = (-(1- MM*MM)*sinf*sinf)/xnorm;
1121 m_R[2][2] = ( (1+ MM*MM)*sinf*sinf)/xnorm;
1122 m_R[3][3] = (1+cosf*cosf - MM*MM*sinf*sinf)/xnorm;
1123 m_R[2][3] = (2*MM*sinf*cosf)/xnorm;
1124 m_R[3][2] = (2*MM*sinf*cosf)/xnorm;
1130 if (Tauola::wtable2A[0][0]>0 ) w=Tauola::wtable2A[0][0];
1131 else if(Tauola::wtable1A[0][0]>0 ) w=Tauola::wtable1A[0][0];
1132 else if(Tauola::wtable11A[0][0]>0) w=Tauola::wtable11A[0][0];
1134 if (Tauola::wtable2A[0][0]>0 ) w0=Tauola::w0table2A[0][0];
1135 else if(Tauola::wtable1A[0][0]>0 ) w0=Tauola::w0table1A[0][0];
1136 else if(Tauola::wtable11A[0][0]>0) w0=Tauola::w0table11A[0][0];
1139 Tauola::setEWwt(w,w0);
1145 double remnant = 0.0;
1148 if(T==Tauola::table11A || T==Tauola::table1A || T== Tauola::table2A)
1150 while(log(invariant_mass_squared) > buf){
1154 remnant = (log(invariant_mass_squared)-(buf-step))/step;
1158 while(invariant_mass_squared > buf){
1162 remnant = (invariant_mass_squared-(buf-step))/step;
1167 double remnantc = 0.0;
1170 buf = cmin+1./Tauola::NCOS;
1171 while(cosTheta > buf){
1173 buf+=2./Tauola::NCOS;
1176 remnantc = (cosTheta-(buf-2./Tauola::NCOS))/(2./Tauola::NCOS);
1179 bool isUsingExtrapolation =
false;
1180 if(y >= Tauola::NCOS) { isUsingExtrapolation =
true; y = Tauola::NCOS-1; }
1181 if(y == 0) { isUsingExtrapolation =
true; y = 1; }
1184 double b11,b21,b12,b22;
1186 for (
int i=0; i<4; i++){
1187 for (
int j=0; j<4; j++){
1189 if(isUsingExtrapolation){
1191 b11 = 2*T[x-1][0][i][j] - T[x-1][1][i][j];
1192 b21 = 2*T[x][0][i][j] - T[x][1][i][j];
1193 b12 = T[x-1][0][i][j];
1194 b22 = T[x][0][i][j];
1197 b11 = T[x-1][y][i][j];
1198 b21 = T[x][y][i][j];
1199 b12 = 2*T[x-1][y][i][j] - T[x-1][y-1][i][j];
1200 b22 = 2*T[x][y][i][j] - T[x][y-1][i][j];
1204 b11 = T[x-1][y-1][i][j];
1205 b21 = T[x][y-1][i][j];
1206 b12 = T[x-1][y][i][j];
1207 b22 = T[x][y][i][j];
1209 m_R[i][j] = b11*(1-remnant)*(1-remnantc) + b21*remnant*(1-remnantc)
1210 + b12*(1-remnant)*remnantc + b22*remnant*remnantc;
1217 transcosTheta= cosTheta;
1218 transincoming_pdg_id=incoming_pdg_id;
1219 transinvariant_mass=sqrt(invariant_mass_squared);
1227 if(isUsingExtrapolation){
1229 b11 = 2*Tw[x-1][0] - Tw[x-1][1];
1230 b21 = 2*Tw[x][0] - Tw[x][1];
1238 b12 = 2*Tw[x-1][y] - Tw[x-1][y-1];
1239 b22 = 2*Tw[x][y] - Tw[x][y-1];
1250 w = b11*(1-remnant)*(1-remnantc) + b21*remnant*(1-remnantc)
1251 + b12*(1-remnant)*remnantc + b22*remnant*remnantc;
1253 if(isUsingExtrapolation){
1255 b11 = 2*Tw0[x-1][0] - Tw0[x-1][1];
1256 b21 = 2*Tw0[x][0] - Tw0[x][1];
1263 b12 = 2*Tw0[x-1][y] - Tw0[x-1][y-1];
1264 b22 = 2*Tw0[x][y] - Tw0[x][y-1];
1268 b11 = Tw0[x-1][y-1];
1274 w0 = b11*(1-remnant)*(1-remnantc) + b21*remnant*(1-remnantc)
1275 + b12*(1-remnant)*remnantc + b22*remnant*remnantc;
1277 Tauola::setEWwt(w,w0);
static void AddDecay(int type)
static void Fatal(string text, unsigned short int code=0)
static void RevertOutput()
static void RedirectOutput(void(*func)(), ostream &where=*out)
TauolaParticle * getGrandmotherMinus(std::vector< TauolaParticle * > particles)
TauolaParticle * getGrandmotherPlus(std::vector< TauolaParticle * > particles)
bool contains(TauolaParticle *particle)
void addToBeam(TauolaParticle *pcle, std::vector< TauolaParticle * > *candidates_same, std::vector< TauolaParticle * > *candidates_opp)
TauolaParticle * m_mother
void rotateSystem(vector< TauolaParticle * > grandmothers, vector< TauolaParticle * > taus, double theta, int axis, int axis2=TauolaParticle::Z_AXIS)
void recalculateRij(int incoming_pdg_id, int outgoing_pdg_id, double invariant_mass_squared, double cosTheta)
TauolaParticle * makeTemporaryMother(vector< TauolaParticle * > taus)
TauolaParticle * getTauMinus(std::vector< TauolaParticle * > particles)
TauolaParticle * getTauPlus(std::vector< TauolaParticle * > particles)
void checkMomentumConservation()
std::vector< TauolaParticle * > m_grandmothers
static void setBornKinematics(int incoming_pdg_id, int outgoing_pdg_id, double invariant_mass_squared, double cosTheta)
double getVirtuality(TauolaParticle *p1, TauolaParticle *p2, bool flip)
void boostFromLabToTauPairFrame(double *rotation_angle1, double *rotation_angle2, double *rotation_angle3, TauolaParticle *mother, vector< TauolaParticle * > grandmothers, vector< TauolaParticle * > taus)
void initializeDensityMatrix()
std::vector< TauolaParticle * > m_production_particles
std::vector< TauolaParticle * > m_final_particles
void boostFromTauPairToLabFrame(double rotation_angle1, double rotation_angle2, double rotation_angle3, TauolaParticle *mother, vector< TauolaParticle * > grandmothers, vector< TauolaParticle * > taus)
double getZPolarization(int *incoming_pdg_id, int *outgoing_pdg_id, double *invMass, double *cosTheta)
static const int TAU_MINUS
static const int MUON_MINUS
virtual int getBarcode()=0
static const int MUON_PLUS
void subtract(TauolaParticle *)
static const int TAU_NEUTRINO
static const int HIGGS_MINUS
std::vector< TauolaParticle * > findProductionMothers()
void addDecayToEventRecord()
virtual void setPdgID(int pdg_id)=0
static const int POSITRON
static const int TAU_ANTINEUTRINO
double getPolarimetricX()
double getRotationAngle(int axis, int second_axis=Z_AXIS)
static const int ELECTRON
double getPolarimetricY()
static const int TAU_PLUS
virtual void decayEndgame()
static const int HIGGS_PLUS
virtual void checkMomentumConservation()
TauolaParticle * findLastSelf()
double getPolarimetricZ()
void add(TauolaParticle *)
static double getTauMass()
static int getHiggsScalarPseudoscalarPDG()
static bool isUsingDecayOneBoost()
static bool isUsingDecayOne()
static const double * getDecayOnePolarization()