CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_6/src/Validation/EventGenerator/src/TauDecay.cc

Go to the documentation of this file.
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 }