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