CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TauDecay.cc
Go to the documentation of this file.
3 #include <iomanip>
4 #include <cstdlib>
5 #include <iostream>
6 
8  Reset();
9 }
10 
12 
13 }
14 
16  n_pi=0;
17  n_pi0=0;
18  n_K=0;
19  n_K0L=0;
20  n_K0S=0;
21  n_gamma=0;
22  n_nu=0;
23  n_e=0;
24  n_mu=0;
25  n_a1=0;
26  n_a10=0;
27  n_rho=0;
28  n_rho0=0;
29  n_eta=0;
30  n_omega=0;
31  n_Kstar0=0;
32  n_Kstar=0;
33  unknown=0;
34 }
35 
37  int id=abs(pdgid);
38  if(id==PdtPdgMini::e_minus) return true; // e+-
39  if(id==PdtPdgMini::nu_e) return true; // nu_e
40  if(id==PdtPdgMini::mu_minus) return true; // mu+-
41  if(id==PdtPdgMini::nu_mu) return true; // nu_mu
42  if(id==PdtPdgMini::nu_tau) return true; // nu_tau
43  if(id==PdtPdgMini::gamma) return true; // gamma happends in generator
44  if(id==PdtPdgMini::pi0) return true; // pi0
45  if(id==PdtPdgMini::pi_plus) return true; // pi+-
46  if(id==PdtPdgMini::K_L0) return true; // K0L
47  if(id==PdtPdgMini::K_S0) return true; // KS
48  if(id==PdtPdgMini::K_plus) return true; // K+-
49  return false;
50 }
51 
53  int id=abs(pdgid);
54  //count particles
55  if(id==PdtPdgMini::pi_plus) { n_pi++; return true;}
56  if(id==PdtPdgMini::pi0) { n_pi0++; return true;}
57  if(id==PdtPdgMini::K_plus) { n_K++; return true;}
58  if(id==PdtPdgMini::K_L0) { n_K0L++; return true;}
59  if(id==PdtPdgMini::K_S0) { n_K0S++; return true;}
60  if(id==PdtPdgMini::gamma) { n_gamma++; return true;}
61  if(id==PdtPdgMini::nu_tau ||
62  id==PdtPdgMini::nu_e ||
63  id==PdtPdgMini::nu_mu) { n_nu++; return true;}
64  if(id==PdtPdgMini::e_minus) { n_e++; return true;}
65  if(id==PdtPdgMini::mu_minus) { n_mu++; return true;}
66  return false;
67 }
68 
70  int id=abs(pdgid);
71  //count resonances
72  if(id==PdtPdgMini::a_1_plus) { n_a1++; return true;}
73  if(id==PdtPdgMini::a_10) { n_a10++; return true;}
74  if(id==PdtPdgMini::rho_plus) { n_rho++; return true;}
75  if(id==PdtPdgMini::rho0) { n_rho0++; return true;}
76  if(id==PdtPdgMini::eta) { n_eta++; return true;}
77  if(id==PdtPdgMini::omega) { n_omega++; return true;}
78  //if(id==PdtPdgMini::K_S0) { n_K0S++; return true;}
79  if(id==PdtPdgMini::K_star0) { n_Kstar0++; return true;}
80  if(id==PdtPdgMini::K_star_plus){ n_Kstar++; return true;}
81  if(id==PdtPdgMini::W_plus) { return true;}
82  unknown++;
83  return false;
84 }
85 
86 void TauDecay::ClassifyDecayMode(unsigned int &JAK_ID,unsigned int &TauBitMask){
87  //Reset Bits
88  JAK_ID=0;
89  TauBitMask=0;
90  // Classify according to JAK and TauDecayStructure
92  //
93  // Exlusive modes remove first
94  //
95  if(n_pi>=1 && n_pi0>=1 && n_nu==1 && n_eta==1){ // eta modes
96  JAK_ID=JAK_ETAPIPI0;
97  TauBitMask=OneProng;
98  if(n_pi0==1)TauBitMask+=OnePi0;
99  if(n_pi0==2)TauBitMask+=TwoPi0;
100  if(n_pi0==3)TauBitMask+=ThreePi0;
101  ClassifyDecayResonance(TauBitMask);
102  return;
103  }
104  //JAK_K0BK0PI
105  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) ){
106  JAK_ID=JAK_K0BK0PI;
107  TauBitMask=OneProng;
108  if(n_pi>1)TauBitMask+=KS0_to_pipi;
109  ClassifyDecayResonance(TauBitMask);
110  return;
111  }
112  //if(n_Kstar==1){ //JAK_KSTAR K0SPi && KPi0
113  if(n_e==0 && n_mu==0 && n_pi>=1 && n_pi0==0 && n_K==0 && n_K0L+n_K0S==1 && n_nu==1){
114  JAK_ID=JAK_KSTAR;
115  TauBitMask=OneProng;
116  if(n_pi==3)TauBitMask+=KS0_to_pipi;
117  ClassifyDecayResonance(TauBitMask);
118  return;
119  }
120  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){
121  JAK_ID=JAK_KSTAR;
122  TauBitMask=OneProng;
123  ClassifyDecayResonance(TauBitMask);
124  return;
125  }
126  //}
127  //JAK_PIK0PI0
128  if(n_e==0 && n_mu==0 && n_pi>=1 && n_pi0==1 && n_K==0 && n_K0L+n_K0S==1 && n_nu==1){
129  JAK_ID=JAK_PIK0PI0;
130  TauBitMask=OneProng;
131  TauBitMask+=OnePi0;
132  if(n_pi==3)TauBitMask+=KS0_to_pipi;
133  ClassifyDecayResonance(TauBitMask);
134  return;
135  }
136  //JAK_KK0B
137  if(n_e==0 && n_mu==0 && n_pi0==0 && n_K==1 && n_K0L+n_K0S==1 && n_nu==1){
138  JAK_ID=JAK_KK0B;
139  TauBitMask=OneProng;
140  if(n_pi==2)TauBitMask+=KS0_to_pipi;
141  return;
142  }
143  //JAK_ID=JAK_KK0BPI0
144  if(n_e==0 && n_mu==0 && n_pi0==1 && n_K==1 && n_K0L+n_K0S==1 && n_nu==1){
145  JAK_ID=JAK_KK0BPI0;
146  TauBitMask=OneProng;
147  TauBitMask+=OnePi0;
148  if(n_pi==2)TauBitMask+=KS0_to_pipi;
149  ClassifyDecayResonance(TauBitMask);
150  return;
151  }
152 
153 
154  //Safty handelling for exlusive modes
155  if (n_K0L!=0){
156  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
157  << std::endl;
158  return;
159  }
160  if (n_K0S!=0){
161  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
162  << std::endl;
163  return;
164  }
165  if (n_eta!=0){
166  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
167  << std::endl;
168  return;
169  }
170 
171 
172 
173  if(n_pi+n_K+n_e+n_mu==1)TauBitMask=OneProng;
174  if(n_pi+n_K==3)TauBitMask=ThreeProng;
175  if(n_pi+n_K==5)TauBitMask=FiveProng;
176  if(n_pi0==1)TauBitMask+=OnePi0;
177  if(n_pi0==2)TauBitMask+=TwoPi0;
178  if(n_pi0==3)TauBitMask+=ThreePi0;
179  ClassifyDecayResonance(TauBitMask);
181  //
182  // Standard modes
183  //
184  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){
185  JAK_ID=JAK_ELECTRON;
186  return;
187  }
188  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){
189  JAK_ID=JAK_MUON;
190  return;
191  }
192  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){
193  JAK_ID=JAK_PION;
194  return;
195  }
196  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_rho==1*/){
197  JAK_ID=JAK_RHO_PIPI0;
198  return;
199  }
200  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){
201  JAK_ID=JAK_A1_3PI;
202  return;
203  }
204  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){
205  JAK_ID=JAK_A1_3PI;
206  return;
207  }
208  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){
209  JAK_ID=JAK_KAON;
210  return;
211  }
212  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){
213  JAK_ID=JAK_3PIPI0;
214  return;
215  }
216  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){
217  JAK_ID=JAK_PI3PI0;
218  return;
219  }
220  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){
221  JAK_ID=JAK_3PI2PI0;
222  return;
223  }
224  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){
225  JAK_ID=JAK_5PI;
226  return;
227  }
228  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){
229  JAK_ID=JAK_5PIPI0;
230  return;
231  }
232  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){
233  JAK_ID=JAK_3PI3PI0;
234  return;
235  }
236  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){
237  JAK_ID=JAK_KPIK;
238  return;
239  }
240  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){
241  JAK_ID=JAK_K2PI0;
242  return;
243  }
244  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){
245  JAK_ID=JAK_KPIPI;
246  return;
247  }
248  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 && n_rho==0){
249  JAK_ID=JAK_PIPI0GAM;
250  return;
251  }
252  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;
253  JAK_ID=JAK_UNKNOWN;
254 }
255 
256 unsigned int TauDecay::nProng(unsigned int &TauBitMask){
257  if(OneProng&TauBitMask) return 1;
258  if(ThreeProng&TauBitMask) return 3;
259  if(FiveProng&TauBitMask) return 5;
260  return 7;
261 }
262 unsigned int TauDecay::nPi0(unsigned int &TauBitMask){
263  if(OnePi0&TauBitMask) return 1;
264  if(TwoPi0&TauBitMask) return 2;
265  if(ThreePi0&TauBitMask) return 3;
266  return 0;
267 }
268 
269 bool TauDecay::hasResonance(unsigned int &TauBitMask, int pdgid){
270  int p=abs(pdgid);
271  if(p==PdtPdgMini::a_1_plus && Res_a1_pm&TauBitMask) return true;
272  if(p==PdtPdgMini::a_10 && Res_a1_0&TauBitMask) return true;
273  if(p==PdtPdgMini::rho_plus && Res_rho_pm&TauBitMask) return true;
274  if(p==PdtPdgMini::rho0 && Res_rho_0&TauBitMask) return true;
275  if(p==PdtPdgMini::eta && Res_eta&TauBitMask) return true;
276  if(p==PdtPdgMini::omega && Res_omega&TauBitMask) return true;
277  if(p==PdtPdgMini::K_star0 && Res_Kstar_pm&TauBitMask) return true;
278  if(p==PdtPdgMini::K_star_plus && Res_Kstar_0&TauBitMask) return true;
279  if(p==PdtPdgMini::K_S0 && KS0_to_pipi&TauBitMask) return true;
280  return false;
281 }
282 
283 
284 void TauDecay::ClassifyDecayResonance(unsigned int &TauBitMask){
285  // Add Resonance info to TauBitMask
286  if(n_a1>0) TauBitMask+=Res_a1_pm;
287  if(n_a10>0) TauBitMask+=Res_a1_0;
288  if(n_rho>0) TauBitMask+=Res_rho_pm;
289  if(n_rho0>0) TauBitMask+=Res_rho_0;
290  if(n_eta>0) TauBitMask+=Res_eta;
291  if(n_omega>0) TauBitMask+=Res_omega;
292  if(n_Kstar>0) TauBitMask+=Res_Kstar_pm;
293  if(n_Kstar0>0) TauBitMask+=Res_Kstar_0;
294 }
295 
unsigned int n_pi
Definition: TauDecay.h:109
void Reset()
Definition: TauDecay.cc:15
bool hasResonance(unsigned int &TauBitMask, int pdgid)
Definition: TauDecay.cc:269
unsigned int unknown
Definition: TauDecay.h:110
unsigned int n_nu
Definition: TauDecay.h:109
~TauDecay()
Definition: TauDecay.cc:11
unsigned int n_omega
Definition: TauDecay.h:110
unsigned int n_K
Definition: TauDecay.h:109
bool isTauFinalStateParticle(int pdgid)
Definition: TauDecay.cc:36
unsigned int n_mu
Definition: TauDecay.h:109
unsigned int n_eta
Definition: TauDecay.h:110
unsigned int n_rho0
Definition: TauDecay.h:110
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int n_K0S
Definition: TauDecay.h:109
unsigned int n_a10
Definition: TauDecay.h:110
TauDecay()
Definition: TauDecay.cc:7
bool isTauResonanceCounter(int pdgid)
Definition: TauDecay.cc:69
unsigned int n_a1
Definition: TauDecay.h:110
unsigned int n_e
Definition: TauDecay.h:109
unsigned int n_Kstar0
Definition: TauDecay.h:110
void ClassifyDecayResonance(unsigned int &TauBitMask)
Definition: TauDecay.cc:284
unsigned int n_rho
Definition: TauDecay.h:110
void ClassifyDecayMode(unsigned int &JAK_ID, unsigned int &TauBitMask)
Definition: TauDecay.cc:86
tuple cout
Definition: gather_cfg.py:121
unsigned int n_Kstar
Definition: TauDecay.h:110
unsigned int n_K0L
Definition: TauDecay.h:109
unsigned int n_pi0
Definition: TauDecay.h:109
unsigned int nPi0(unsigned int &TauBitMask)
Definition: TauDecay.cc:262
unsigned int n_gamma
Definition: TauDecay.h:109
bool isTauParticleCounter(int pdgid)
Definition: TauDecay.cc:52
unsigned int nProng(unsigned int &TauBitMask)
Definition: TauDecay.cc:256