StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StDecayMode.cc
1 /***********************************************************************
2  *
3  * StDecayMode: Singleton class for determining decay modes of MC vertices
4  *
5  ***********************************************************************/
6 
7 #include "StDecayMode.hh"
8 
9 StDecayMode* StDecayMode::mInstance = 0;
10 
11 ClassImp(StDecayMode)
12 
14 StDecayMode::~StDecayMode() { mInstance=0; }
15 
16 /*
17  Note: reassign Gamma Id to -1
18  Decay Daughter Geant IDs |sum / product (miss Nu)
19 11 K+ -> Mu Nu 5 4 (mu+) |9 / 20 (5 / 5)
20  K+ -> Pi+ Pi0 8 7 |15 / 56
21  K+ -> Pi+ Pi+ Pi- 8 8 9 |25 / 576
22  K+ -> E Nu Pi0 2 4 7 (positron) |13 / 42 (9 / 14)
23  K+ -> Mu Nu Pi0 5 4 7 |16 / 140 (12 / 35)
24  K+ -> Pi+ Pi0 Pi0 8 7 7 |22 / 392
25 
26 12 K- -> Mu Nu 6 4 (mu-) |10 / 24 (6 / 6)
27  K- -> Pi- Pi0 9 7 |16 / 63
28  K- -> Pi+ Pi- Pi- 8 9 9 |26 / 648
29  K- -> E Nu Pi0 3 4 7 |14 / 84 (10 / 21)
30  K- -> Mu Nu Pi0 6 4 7 |17 / 168 (13 / 42)
31  K- -> Pi- Pi0 Pi0 9 7 7 |23 / 441
32 
33 10 K0l -> Pi+ Pi- Pi0 8 9 7 |24 / 504
34  K0l -> Pi+ Mu- Nu 8 6 4 |18 / 192 (14 / 48)
35  K0l -> Pi- Mu+ Nu 9 5 4 |18 / 180 (14 / 45)
36  K0l -> Pi+ E Nu 8 3 4 |15 / 96 (11 / 24)
37  K0l -> Pi- E Nu 9 2 4 |15 / 72 (11 / 18)
38  K0l -> Pi- Pi+ 9 8 |17 / 72
39 
40 16 K0s -> Pi+ Pi- 8 9 |17
41  K0s -> Pi0 Pi0 7 7 |14
42  K0s -> Pi+ Pi- Gamma 8 9 -1 |16
43 
44  8 Pi+ -> Mu+ Nu 5 4 |9 (5)
45  Pi+ -> Mu+ Nu Gamma 5 4 -1 |8 (4)
46  Pi+ -> E Nu 2 4 |6 (2)
47 
48  9 Pi- -> Mu- Nu 6 4 |10 (6)
49  Pi- -> Mu- Nu Gamma 6 4 -1 |9 (5)
50  Pi- -> E Nu 3 4 |7 (3)
51 
52  5 Mu+ -> E Nu Nu 2 4 4 |10 (2,6)
53  Mu+ -> E Nu Nu Gamma 2 4 4 -1 |9 (1,5)
54 
55  6 Mu- -> E Nu Nu 3 4 4 |11 (3,7)
56  Mu- -> E Nu Nu Gamma 3 4 4 -1 |10 (2,6)
57 
58 18 Lambda -> P Pi- 14 9 |23 / 126
59  Lambda -> N Pi0 13 7 |20 / 91
60  Lambda -> N Gamma 13 -1 |12 / -13
61  Lambda -> P Pi- Gamma 14 9 -1 |22 / -126
62  Lambda -> P E Nu 14 3 4 |21 / 168 (17 / 42)
63  Lambda -> P Mu Nu 14 6 4 |20 / 336 (24 / 84)
64 
65 26 AntiLambda -> AntiP Pi+ 15 8 |23 / 120
66  AntiLambda -> AntiN Pi0 25 7 |32 / 175
67  AntiLambda -> AntiN Gamma 25 -1 |24 / -25
68  AntiLambda -> AntiP Pi+ Gamma 15 8 -1 |22 / -120
69  AntiLambda -> AntiP E Nu 15 2 4 |21 / 120 (17 / 30)
70  AntiLambda -> AntiP Mu Nu 15 5 4 |20 / 300 (24 / 75)
71 
72 23 Cascade -> Lambda Pi- 18 9 |27
73 31 AntiCascade -> AntiLambda Pi+ 26 8 |34
74 
75 24 Omega -> Lambda K- 18 12 |30 / 216
76  Omega -> Cascade0 Pi- 22 9 |31 / 198
77  Omega -> Cascade- Pi0 23 7 |30 / 161
78 
79 32 AntiOmega -> AntiLambda K+ 26 11 |37 / 286
80  AntiOmega -> AntiCascade0 Pi+ 30 8 |38 / 240
81  AntiOmega -> AntiCascade+ Pi0 31 7 |38 / 217
82  */
83 //____________________________________________________________________
85 {
86  Int_t ID = 0;
87  Int_t ID2 = 1;
88  if (!mcVertex->numberOfDaughters()) return kWrongDecay; // No daughters
89  if (mcVertex->geantProcess() != 5) return kWrongDecay; // Not a weak decay
90  const StMcTrack* parent = mcVertex->parent();
91 
92  if (parent) {
93  Int_t parentId = parent->geantId();
94  StSPtrVecMcTrack& Daughters = mcVertex->daughters();
95 
96  for (StMcTrackIterator DTrackIt = Daughters.begin();
97  DTrackIt != Daughters.end(); DTrackIt++) {
98  Int_t daughterId = (*DTrackIt)->geantId();
99  if (daughterId == 1) daughterId = -1;
100  ID += daughterId;
101  ID2 *= daughterId;
102  }
103 
104  switch (parentId) {
105  case ( 5) : return MuPlusProcess(ID);
106  case ( 6) : return MuMinusProcess(ID);
107  case ( 8) : return PiPlusProcess(ID);
108  case ( 9) : return PiMinusProcess(ID);
109  case (10) : return KLongProcess(ID,ID2);
110  case (11) : return KPlusProcess(ID2);
111  case (12) : return KMinusProcess(ID2);
112  case (16) : return KShortProcess(ID);
113  case (18) : return LambdaProcess(ID2);
114  case (26) : return AntiLambdaProcess(ID,ID2);
115  case (23) : return XiProcess(ID);
116  case (31) : return AntiXiProcess(ID);
117  case (24) : return OmegaProcess(ID2);
118  case (32) : return AntiOmegaProcess(ID2);
119  }
120  }
121  return kWrongDecay;
122 }
123 //_____________________________________________________________________
124 Int_t StDecayMode::KPlusProcess(Int_t ID)
125 {
126  switch (ID) {
127  case ( 5) :
128  case ( 20) : return kKPlus2MuNu;
129  case ( 56) : return kKPlus2PiPlusPiZero;
130  case (576) : return kKPlus2PiPlusPiPlusPiMinus;
131  case ( 14) :
132  case ( 42) : return kKPlus2ENuPiZero;
133  case ( 35) :
134  case (140) : return kKPlus2MuNuPiZero;
135  case (392) : return kKPlus2PiPlusPiZeroPiZero;
136  default : return kWrongDecay;
137  }
138 }
139 
140 //_____________________________________________________________________
141 Int_t StDecayMode::KMinusProcess(Int_t ID)
142 {
143  switch (ID) {
144  case ( 6) :
145  case ( 24) : return kKMinus2MuNu;
146  case ( 63) : return kKMinus2PiMinusPiZero;
147  case (648) : return kKMinus2PiPlusPiMinusPiMinus;
148  case ( 21) :
149  case ( 84) : return kKMinus2ENuPiZero;
150  case ( 42) :
151  case (168) : return kKMinus2MuNuPiZero;
152  case (441) : return kKMinus2PiMinusPiZeroPiZero;
153  default : return kWrongDecay;
154  }
155 }
156 
157 //____________________________________________________________________
158 Int_t StDecayMode::KLongProcess(Int_t ID, Int_t ID2)
159 {
160  switch (ID2) {
161  case (504) : return kKLong2PiPlusPiZeroPiMinus;
162  case ( 48) :
163  case (192) : return kKLong2PiPlusMuNu;
164  case ( 45) :
165  case (180) : return kKLong2PiMinusMuNu;
166  case ( 24) :
167  case ( 96) : return kKLong2PiMinusENu;
168  case ( 18) :
169  case ( 72) : return ((ID==17) ? kKLong2PiPlusPiMinus : kKLong2PiPlusENu);
170  default : return kWrongDecay;
171  }
172 }
173 //____________________________________________________________________
174 Int_t StDecayMode::KShortProcess(Int_t ID)
175 {
176  switch (ID) {
177  case (17) : return kKShort2PiPlusPiMinus;
178  case (14) : return kKShort2PiZeroPiZero;
179  case (16) : return kKShort2PiPlusPiMinusGamma;
180  default : return kWrongDecay;
181  }
182 }
183 //____________________________________________________________________
184 Int_t StDecayMode::PiPlusProcess(Int_t ID)
185 {
186  switch (ID) {
187  case (5) :
188  case (9) : return kPiPlus2MuNu;
189  case (4) :
190  case (8) : return kPiPlus2MuNuGamma;
191  case (2) :
192  case (6) : return kPiPlus2ENu;
193  default : return kWrongDecay;
194  }
195 }
196 //____________________________________________________________________
197 Int_t StDecayMode::PiMinusProcess(Int_t ID)
198 {
199  switch (ID) {
200  case ( 6) :
201  case (10) : return kPiMinus2MuNu;
202  case ( 5) :
203  case ( 9) : return kPiMinus2MuNuGamma;
204  case ( 3) :
205  case ( 7) : return kPiMinus2ENu;
206  default : return kWrongDecay;
207  }
208 }
209 //____________________________________________________________________
210 Int_t StDecayMode::MuPlusProcess(Int_t ID)
211 {
212  switch (ID) {
213  case ( 2) :
214  case ( 6) :
215  case (10) : return kMuPlus2ENuNu;
216  case ( 1) :
217  case ( 5) :
218  case ( 9) : return kMuPlus2ENuNuGamma;
219  default : return kWrongDecay;
220  }
221 }
222 //____________________________________________________________________
223 Int_t StDecayMode::MuMinusProcess(Int_t ID)
224 {
225  switch (ID) {
226  case ( 3) :
227  case ( 7) :
228  case (11) : return kMuMinus2ENuNu;
229  case ( 2) :
230  case ( 6) :
231  case (10) : return kMuMinus2ENuNuGamma;
232  default : return kWrongDecay;
233  }
234 }
235 //____________________________________________________________________
236 Int_t StDecayMode::LambdaProcess(Int_t ID)
237 {
238  switch (ID) {
239  case ( 126) : return kLambda2ProtonPiMinus;
240  case ( 91) : return kLambda2NeutronPiZero;
241  case ( -13) : return kLambda2NeutronGamma;
242  case (-126) : return kLambda2ProtonPiMinusGamma;
243  case ( 42) :
244  case ( 168) : return kLambda2ProtonENu;
245  case ( 84) :
246  case ( 336) : return kLambda2ProtonMuNu;
247  default : return kWrongDecay;
248  }
249 }
250 //____________________________________________________________________
251 Int_t StDecayMode::AntiLambdaProcess(Int_t ID, Int_t ID2)
252 {
253  switch (ID) {
254  case (23) : return kAntiLambda2AntiProtonPiPlus;
255  case (32) : return kAntiLambda2AntiNeutronPiZero;
256  case (24) : if (ID2 == -25) return kAntiLambda2AntiNeutronGamma;
257  case (20) : return kAntiLambda2AntiProtonMuNu;
258  case (22) : return kAntiLambda2AntiProtonPiPlusGamma;
259  case (17) :
260  case (21) : return kAntiLambda2AntiProtonENu;
261  default : return kWrongDecay;
262  }
263 }
264 
265 //____________________________________________________________________
266 Int_t StDecayMode::XiProcess(Int_t ID)
267 {
268  switch (ID) {
269  case (27) : return kCascade2LambdaPiMinus;
270  default : return kWrongDecay;
271  }
272 }
273 //____________________________________________________________________
274 Int_t StDecayMode::AntiXiProcess(Int_t ID)
275 {
276  switch (ID) {
277  case (34) : return kAntiCascade2AntiLambdaPiPlus;
278  default : return kWrongDecay;
279  }
280 }
281 //____________________________________________________________________
282 Int_t StDecayMode::OmegaProcess(Int_t ID)
283 {
284  switch (ID) {
285  case (216) : return kOmega2LambdaKMinus;
286  case (198) : return kOmega2CascadePiMinus;
287  case (161) : return kOmega2CascadePiZero;
288  default : return kWrongDecay;
289  }
290 }
291 //____________________________________________________________________
292 Int_t StDecayMode::AntiOmegaProcess(Int_t ID)
293 {
294  switch (ID) {
295  case (286) : return kAntiOmega2AntiLambdaKPlus;
296  case (240) : return kAntiOmega2AntiCascadePiPlus;
297  case (217) : return kAntiOmega2AntiCascadePiZero;
298  default : return kWrongDecay;
299  }
300 }
301 //____________________________________________________________________
302 Int_t StDecayMode::ParentCharge(Int_t mode)
303 {
304  switch (mode) {
305  case (kKPlus2MuNu) :
306  case (kKPlus2PiPlusPiZero) :
307  case (kKPlus2PiPlusPiPlusPiMinus) :
308  case (kKPlus2ENuPiZero) :
309  case (kKPlus2MuNuPiZero) :
310  case (kKPlus2PiPlusPiZeroPiZero) :
311  case (kPiPlus2MuNu) :
312  case (kPiPlus2MuNuGamma) :
313  case (kPiPlus2ENu) :
314  case (kMuPlus2ENuNu) :
315  case (kMuPlus2ENuNuGamma) :
316  case (kAntiCascade2AntiLambdaPiPlus) :
317  case (kAntiOmega2AntiLambdaKPlus) :
318  case (kAntiOmega2AntiCascadePiPlus) : return 1;
319  case (kKMinus2MuNu) :
320  case (kKMinus2PiMinusPiZero) :
321  case (kKMinus2PiPlusPiMinusPiMinus) :
322  case (kKMinus2ENuPiZero) :
323  case (kKMinus2MuNuPiZero) :
324  case (kKMinus2PiMinusPiZeroPiZero) :
325  case (kPiMinus2MuNu) :
326  case (kPiMinus2MuNuGamma) :
327  case (kPiMinus2ENu) :
328  case (kMuMinus2ENuNu) :
329  case (kMuMinus2ENuNuGamma) :
330  case (kCascade2LambdaPiMinus) :
331  case (kOmega2LambdaKMinus) :
332  case (kOmega2CascadePiMinus) : return -1;
333  default : {}
334  }
335  return 0;
336 }
337 
338 /***********************************************************************
339  *
340  * $Id: StDecayMode.cc,v 3.3 2002/05/29 19:08:44 genevb Exp $
341  * $Log: StDecayMode.cc,v $
342  * Revision 3.3 2002/05/29 19:08:44 genevb
343  * Some additional decay modes, better organization of enumeration
344  *
345  * Revision 3.2 2002/04/30 16:02:47 genevb
346  * Common muDst, improved MC code, better kinks, StrangeCuts now a branch
347  *
348  * Revision 3.1 2001/05/04 20:15:13 genevb
349  * Common interfaces and reorganization of components, add MC event info
350  *
351  * Revision 3.0 2000/07/14 12:56:47 genevb
352  * Revision 3 has event multiplicities and dedx information for vertex tracks
353  *
354  * Revision 2.1 2000/06/09 22:17:09 genevb
355  * Allow MC data to be copied between DSTs, other small improvements
356  *
357  * Revision 2.0 2000/06/05 05:19:37 genevb
358  * New version of Strangeness micro DST package
359  *
360  ***********************************************************************/
Monte Carlo Track class All information on a simulated track is stored in this class: kinematics...
Definition: StMcTrack.hh:144
Int_t ParentCharge(Int_t mode)
Definition: StDecayMode.cc:302
Int_t Process(StMcVertex *mcVertex)
Definition: StDecayMode.cc:84