![]() |
![]() |
00001 #include "Validation/EventGenerator/interface/TauDecay.h" 00002 #include "Validation/EventGenerator/interface/PdtPdgMini.h" 00003 00004 00005 #include <iomanip> 00006 #include <cstdlib> 00007 #include <iostream> 00008 00009 TauDecay::TauDecay(){ 00010 Reset(); 00011 } 00012 00013 TauDecay::~TauDecay(){ 00014 00015 } 00016 00017 void TauDecay::Reset(){ 00018 n_pi=0; 00019 n_pi0=0; 00020 n_K=0; 00021 n_K0L=0; 00022 n_K0S=0; 00023 n_gamma=0; 00024 n_nu=0; 00025 n_e=0; 00026 n_mu=0; 00027 n_a1=0; 00028 n_a10=0; 00029 n_rho=0; 00030 n_rho0=0; 00031 n_eta=0; 00032 n_omega=0; 00033 n_Kstar0=0; 00034 n_Kstar=0; 00035 unknown=0; 00036 } 00037 00038 bool TauDecay::isTauFinalStateParticle(int pdgid){ 00039 int id=abs(pdgid); 00040 if(id==PdtPdgMini::e_minus) return true; // e+- 00041 if(id==PdtPdgMini::nu_e) return true; // nu_e 00042 if(id==PdtPdgMini::mu_minus) return true; // mu+- 00043 if(id==PdtPdgMini::nu_mu) return true; // nu_mu 00044 if(id==PdtPdgMini::nu_tau) return true; // nu_tau 00045 if(id==PdtPdgMini::gamma) return true; // gamma happends in generator 00046 if(id==PdtPdgMini::pi0) return true; // pi0 00047 if(id==PdtPdgMini::pi_plus) return true; // pi+- 00048 if(id==PdtPdgMini::K_L0) return true; // K0L 00049 if(id==PdtPdgMini::K_S0) return true; // KS 00050 if(id==PdtPdgMini::K_plus) return true; // K+- 00051 return false; 00052 } 00053 00054 bool TauDecay::isTauParticleCounter(int pdgid){ 00055 int id=abs(pdgid); 00056 //count particles 00057 if(id==PdtPdgMini::pi_plus) { n_pi++; return true;} 00058 if(id==PdtPdgMini::pi0) { n_pi0++; return true;} 00059 if(id==PdtPdgMini::K_plus) { n_K++; return true;} 00060 if(id==PdtPdgMini::K_L0) { n_K0L++; return true;} 00061 if(id==PdtPdgMini::K_S0) { n_K0S++; return true;} 00062 if(id==PdtPdgMini::gamma) { n_gamma++; return true;} 00063 if(id==PdtPdgMini::nu_tau || 00064 id==PdtPdgMini::nu_e || 00065 id==PdtPdgMini::nu_mu) { n_nu++; return true;} 00066 if(id==PdtPdgMini::e_minus) { n_e++; return true;} 00067 if(id==PdtPdgMini::mu_minus) { n_mu++; return true;} 00068 return false; 00069 } 00070 00071 bool TauDecay::isTauResonanceCounter(int pdgid){ 00072 int id=abs(pdgid); 00073 //count resonances 00074 if(id==PdtPdgMini::a_1_plus) { n_a1++; return true;} 00075 if(id==PdtPdgMini::a_10) { n_a10++; return true;} 00076 if(id==PdtPdgMini::rho_plus) { n_rho++; return true;} 00077 if(id==PdtPdgMini::rho0) { n_rho0++; return true;} 00078 if(id==PdtPdgMini::eta) { n_eta++; return true;} 00079 if(id==PdtPdgMini::omega) { n_omega++; return true;} 00080 //if(id==PdtPdgMini::K_S0) { n_K0S++; return true;} 00081 if(id==PdtPdgMini::K_star0) { n_Kstar0++; return true;} 00082 if(id==PdtPdgMini::K_star_plus){ n_Kstar++; return true;} 00083 if(id==PdtPdgMini::W_plus) { return true;} 00084 unknown++; 00085 return false; 00086 } 00087 00088 void TauDecay::ClassifyDecayMode(unsigned int &JAK_ID,unsigned int &TauBitMask){ 00089 00090 //Reset Bits 00091 JAK_ID=0; 00092 TauBitMask=0; 00093 // Classify according to JAK and TauDecayStructure 00095 // 00096 // Exlusive modes remove first 00097 // 00098 if(n_pi>=1 && n_pi0>=1 && n_nu==1 && n_eta==1){ // eta modes 00099 JAK_ID=JAK_ETAPIPI0; 00100 TauBitMask=OneProng; 00101 if(n_pi0==1)TauBitMask+=OnePi0; 00102 if(n_pi0==2)TauBitMask+=TwoPi0; 00103 if(n_pi0==3)TauBitMask+=ThreePi0; 00104 ClassifyDecayResonance(TauBitMask); 00105 return; 00106 } 00107 //JAK_K0BK0PI 00108 if ((n_K0S+n_K0L==2 && n_pi==1 && n_pi0==0 && n_K==0 && n_nu==1) || (n_pi>=1 && n_pi0==0 && n_K0L+n_K0S==2 && n_K==0 && n_nu==1) ){ 00109 JAK_ID=JAK_K0BK0PI; 00110 TauBitMask=OneProng; 00111 if(n_pi>1)TauBitMask+=KS0_to_pipi; 00112 ClassifyDecayResonance(TauBitMask); 00113 return; 00114 } 00115 //if(n_Kstar==1){ //JAK_KSTAR K0SPi && KPi0 00116 if(n_e==0 && n_mu==0 && n_pi>=1 && n_pi0==0 && n_K==0 && n_K0L+n_K0S==1 && n_nu==1){ 00117 JAK_ID=JAK_KSTAR; 00118 TauBitMask=OneProng; 00119 if(n_pi==3)TauBitMask+=KS0_to_pipi; 00120 ClassifyDecayResonance(TauBitMask); 00121 return; 00122 } 00123 if(n_e==0 && n_mu==0 && n_pi==0 && n_pi0==1 && n_K==1 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00124 JAK_ID=JAK_KSTAR; 00125 TauBitMask=OneProng; 00126 ClassifyDecayResonance(TauBitMask); 00127 return; 00128 } 00129 //} 00130 //JAK_PIK0PI0 00131 if(n_e==0 && n_mu==0 && n_pi>=1 && n_pi0==1 && n_K==0 && n_K0L+n_K0S==1 && n_nu==1){ 00132 JAK_ID=JAK_PIK0PI0; 00133 TauBitMask=OneProng; 00134 TauBitMask+=OnePi0; 00135 if(n_pi==3)TauBitMask+=KS0_to_pipi; 00136 ClassifyDecayResonance(TauBitMask); 00137 return; 00138 } 00139 //JAK_KK0B 00140 if(n_e==0 && n_mu==0 && n_pi0==0 && n_K==1 && n_K0L+n_K0S==1 && n_nu==1){ 00141 JAK_ID=JAK_KK0B; 00142 TauBitMask=OneProng; 00143 if(n_pi==2)TauBitMask+=KS0_to_pipi; 00144 return; 00145 } 00146 //JAK_ID=JAK_KK0BPI0 00147 if(n_e==0 && n_mu==0 && n_pi0==1 && n_K==1 && n_K0L+n_K0S==1 && n_nu==1){ 00148 JAK_ID=JAK_KK0BPI0; 00149 TauBitMask=OneProng; 00150 TauBitMask+=OnePi0; 00151 if(n_pi==2)TauBitMask+=KS0_to_pipi; 00152 ClassifyDecayResonance(TauBitMask); 00153 return; 00154 } 00155 00156 00157 //Safty handelling for exlusive modes 00158 if (n_K0L!=0){ 00159 std::cout << "Unknown mode with KL0: n_e " << n_e << " n_mu " << n_mu << " n_pi " << n_pi << " n_pi0 " << n_pi0 << " n_K " << n_K << " n_K0L " << n_K0L << " n_K0S " << n_K0S << " n_nu " << n_nu << " n_gamma " << n_gamma 00160 << std::endl; 00161 return; 00162 } 00163 if (n_K0S!=0){ 00164 std::cout << "Unknown mode with KS0: n_e " << n_e << " n_mu " << n_mu << " n_pi " << n_pi << " n_pi0 " << n_pi0 << " n_K " << n_K << " n_K0L " << n_K0L << " n_K0S " << n_K0S << " n_nu " << n_nu << " n_gamma " << n_gamma 00165 << std::endl; 00166 return; 00167 } 00168 if (n_eta!=0){ 00169 std::cout << "Unknown mode with eta: n_e " << n_e << " n_mu " << n_mu << " n_pi " << n_pi << " n_pi0 " << n_pi0 << " n_K " << n_K << " n_K0L " << n_K0L << " n_K0S " << n_K0S << " n_nu " << n_nu << " n_gamma " << n_gamma 00170 << std::endl; 00171 return; 00172 } 00173 00174 00175 00176 if(n_pi+n_K+n_e+n_mu==1)TauBitMask=OneProng; 00177 if(n_pi+n_K==3)TauBitMask=ThreeProng; 00178 if(n_pi+n_K==5)TauBitMask=FiveProng; 00179 if(n_pi0==1)TauBitMask+=OnePi0; 00180 if(n_pi0==2)TauBitMask+=TwoPi0; 00181 if(n_pi0==3)TauBitMask+=ThreePi0; 00182 ClassifyDecayResonance(TauBitMask); 00184 // 00185 // Standard modes 00186 // 00187 if(n_e==1 && n_mu==0 && n_pi==0 && n_pi0==0 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==2){ 00188 JAK_ID=JAK_ELECTRON; 00189 return; 00190 } 00191 if(n_e==0 && n_mu==1 && n_pi==0 && n_pi0==0 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==2){ 00192 JAK_ID=JAK_MUON; 00193 return; 00194 } 00195 if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==0 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00196 JAK_ID=JAK_PION; 00197 return; 00198 } 00199 if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1 && n_gamma==0){ 00200 JAK_ID=JAK_RHO_PIPI0; 00201 return; 00202 } 00203 if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==2 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00204 JAK_ID=JAK_A1_3PI; 00205 return; 00206 } 00207 if(n_e==0 && n_mu==0 && n_pi==3 && n_pi0==0 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00208 JAK_ID=JAK_A1_3PI; 00209 return; 00210 } 00211 if(n_e==0 && n_mu==0 && n_pi==0 && n_pi0==0 && n_K==1 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00212 JAK_ID=JAK_KAON; 00213 return; 00214 } 00215 if(n_e==0 && n_mu==0 && n_pi==3 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00216 JAK_ID=JAK_3PIPI0; 00217 return; 00218 } 00219 if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==3 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00220 JAK_ID=JAK_PI3PI0; 00221 return; 00222 } 00223 if(n_e==0 && n_mu==0 && n_pi==3 && n_pi0==2 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00224 JAK_ID=JAK_3PI2PI0; 00225 return; 00226 } 00227 if(n_e==0 && n_mu==0 && n_pi==5 && n_pi0==0 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00228 JAK_ID=JAK_5PI; 00229 return; 00230 } 00231 if(n_e==0 && n_mu==0 && n_pi==5 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00232 JAK_ID=JAK_5PIPI0; 00233 return; 00234 } 00235 if(n_e==0 && n_mu==0 && n_pi==3 && n_pi0==3 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00236 JAK_ID=JAK_3PI3PI0; 00237 return; 00238 } 00239 if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==0 && n_K==2 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00240 JAK_ID=JAK_KPIK; 00241 return; 00242 } 00243 if(n_e==0 && n_mu==0 && n_pi==0 && n_pi0==2 && n_K==1 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00244 JAK_ID=JAK_K2PI0; 00245 return; 00246 } 00247 if(n_e==0 && n_mu==0 && n_pi==2 && n_pi0==0 && n_K==1 && n_K0L==0 && n_K0S==0 && n_nu==1){ 00248 JAK_ID=JAK_KPIPI; 00249 return; 00250 } 00251 if(n_e==0 && n_mu==0 && n_pi==1 && n_pi0==1 && n_K==0 && n_K0L==0 && n_K0S==0 && n_nu==1 && n_gamma>=1){ 00252 JAK_ID=JAK_PIPI0GAM; 00253 return; 00254 } 00255 std::cout << "Tau Mode not found: n_e " << n_e << " n_mu " << n_mu << " n_pi " << n_pi << " n_pi0 " << n_pi0 << " n_K " << n_K << " n_K0L " << n_K0L << " n_K0S " << n_K0S << " n_nu " << n_nu << " n_gamma " << n_gamma << std::endl; 00256 JAK_ID=JAK_UNKNOWN; 00257 } 00258 00259 void TauDecay::ClassifyDecayResonance(unsigned int &TauBitMask){ 00260 // Add Resonance info to TauBitMask 00261 if(n_a1>0) TauBitMask+=Res_a1_pm; 00262 if(n_a10>0) TauBitMask+=Res_a1_0; 00263 if(n_rho>0) TauBitMask+=Res_rho_pm; 00264 if(n_rho0>0) TauBitMask+=Res_rho_0; 00265 if(n_eta>0) TauBitMask+=Res_eta; 00266 if(n_omega>0) TauBitMask+=Res_omega; 00267 if(n_Kstar>0) TauBitMask+=Res_Kstar_pm; 00268 if(n_Kstar0>0) TauBitMask+=Res_Kstar_0; 00269 }