FairRoot/PandaRoot
Functions
QAmacro_evtgen_3.C File Reference

Go to the source code of this file.

Functions

void add_mccode (TString &mctxt, Int_t id)
 
Bool_t propagate_mclist (Int_t id, TClonesArray *mctrack_array)
 
int QAmacro_evtgen_3 ()
 

Function Documentation

void add_mccode ( TString mctxt,
Int_t  id 
)

Definition at line 3 of file QAmacro_evtgen_3.C.

Referenced by propagate_mclist().

4 {
5  switch(id)
6  {
7  case 22: mctxt+="#gamma" ; break;
8  case 11: mctxt+="e^{-}" ; break;
9  case -11: mctxt+="e^{+}" ; break;
10  case 13: mctxt+="#mu^{-}" ; break;
11  case -13: mctxt+="#mu^{+}" ; break;
12  case 111: mctxt+="#pi^{0}" ; break;
13  case 211: mctxt+="#pi^{+}" ; break;
14  case -211: mctxt+="#pi^{-}" ; break;
15  case 310: mctxt+="K^{0}_{S}" ; break;
16  case 130: mctxt+="K^{0}_{L}" ; break;
17  case 321: mctxt+="K^{+}" ; break;
18  case -321: mctxt+="K^{-}" ; break;
19 
20  case 12: mctxt+="#nu_{e}"; break;
21  case 14: mctxt+="#nu_{#mu}"; break;
22  case -12: mctxt+="#bar{#nu}_{e}"; break;
23  case -14: mctxt+="#bar{#nu}_{#mu}"; break;
24 
25  case 2112: mctxt+="n" ; break;
26  case 2212: mctxt+="p" ; break;
27 
28  case 3122: mctxt+="#Lambda"; break;
29  case 3124: mctxt+="#Lambda(1520)"; break;
30  case 13122: mctxt+="#Lambda(1405)"; break;
31 
32  case 3222: mctxt+="#Sigma^{+}"; break;
33  case 3224: mctxt+="#Sigma^{*+}"; break;
34  case 3212: mctxt+="#Sigma^{0}"; break;
35  case 3214: mctxt+="#Sigma^{*0}"; break;
36  case 3112: mctxt+="#Sigma^{-}"; break;
37  case 3114: mctxt+="#Sigma^{*-}"; break;
38 
39  case 3312: mctxt+="#Xi^{-}"; break;
40  case 3322: mctxt+="#Xi^{0}"; break;
41  case 3314: mctxt+="#Xi^{*-}"; break;
42  case 3324: mctxt+="#Xi^{*0}"; break;
43 
44  case 3334: mctxt+="#Omega^{-}"; break;
45 
46  case -2112: mctxt+="#bar{n}" ; break;
47  case -2212: mctxt+="#bar{p}" ; break;
48 
49  case -3122: mctxt+="#bar{#Lambda}"; break;
50  case -3124: mctxt+="#bar{#Lambda}(1520)"; break;
51  case -13122: mctxt+="#bar{#Lambda}(1405)"; break;
52 
53  case -3222: mctxt+="#bar{#Sigma}^{-}"; break;
54  case -3224: mctxt+="#bar{#Sigma}^{*-}"; break;
55  case -3212: mctxt+="#bar{#Sigma}^{0}"; break;
56  case -3214: mctxt+="#bar{#Sigma}^{*0}"; break;
57  case -3112: mctxt+="#bar{#Sigma}^{+}"; break;
58  case -3114: mctxt+="#bar{#Sigma}^{*+}"; break;
59 
60  case -3312: mctxt+="#bar{#Xi}^{+}"; break;
61  case -3322: mctxt+="#bar{#Xi}^{0}"; break;
62  case -3314: mctxt+="#bar{#Xi}^{*+}"; break;
63  case -3324: mctxt+="#bar{#Xi}^{*0}"; break;
64 
65  case -3334: mctxt+="#bar{#Omega}^{+}"; break;
66 
67  case 443: mctxt+="J/#Psi"; break;
68  case 100443: mctxt+="#Psi(2S)"; break;
69  case 441: mctxt+="#eta_c(1S)"; break;
70  case 10441: mctxt+="#xi_{c0}(1P)"; break;
71  case 20443: mctxt+="#xi_{c1}(1P)"; break;
72  case 445: mctxt+="#xi_{c2}(1P)"; break;
73  case 100441: mctxt+="#eta_c(2S)"; break;
74  case 10443: mctxt+="h_c(1P)"; break;
75 
76  default: mctxt+="?" ; break;
77  }
78 }
Bool_t propagate_mclist ( Int_t  id,
TClonesArray *  mctrack_array 
)

Verbose output

Definition at line 81 of file QAmacro_evtgen_3.C.

References add_mccode(), Bool_t, fabs(), PndMCTrack::Get4Momentum(), PndMCTrack::GetMotherID(), PndMCTrack::GetPdgCode(), PndMCTrack::GetSecondMotherID(), i, and TString.

Referenced by QAmacro_evtgen_3().

82 {
83  PndMCTrack *mct;
84  PndMCTrack *mo;
85 
86  TLorentzVector sum, tmp;
87  TString chtxt="";
88 
89  if(id<0) return "none";
90  mct=(PndMCTrack *)mctrack_array->At(id);
91  sum=mct->Get4Momentum();
92  tmp=sum;
93 
94  if(mct->GetMotherID()==-1){// show only first geant generation
95  for(Int_t i=0; i<mctrack_array->GetEntries(); i++){
96  mo=(PndMCTrack *)mctrack_array->At(i);
97 
98  if(mo->GetMotherID()==id){
99  sum-=mo->Get4Momentum();
100  }else if(mo->GetMotherID()==-1 && mo->GetSecondMotherID()==id){
101  sum-=mo->Get4Momentum();
102  }
103  }
104  }
105 
106  TString mctxt;
107  mctxt="";
108  add_mccode(mctxt,mct->GetPdgCode());
109  Bool_t flag;
110  flag=kTRUE;
111 
112  if( sum.P()>1e-4 || sum.E()>1e-4){
114 /* cout << "Check id "<<id<<": "<<mctxt<<" : "<<
115  tmp.Px()<<" , "<<
116  tmp.Py()<<" , "<<
117  tmp.Pz()<<" , "<<
118  tmp.E()<<" , "<<
119  sum.Px()<<" , "<<
120  sum.Py()<<" , "<<
121  sum.Pz()<<" , "<<
122  sum.E()<<" , "<<
123  chtxt<< endl;
124  */
125  if(fabs(sum.P()-tmp.P())>1e-4 || fabs(sum.E()-tmp.E())>1e-4){
126  cout << "Check id "<<id<<": "<<mctxt<<" : "<<
127  tmp.Px()<<" , "<<
128  tmp.Py()<<" , "<<
129  tmp.Pz()<<" , "<<
130  tmp.E()<<" , "<<
131  sum.Px()<<" , "<<
132  sum.Py()<<" , "<<
133  sum.Pz()<<" , "<<
134  sum.E()<<" , "<<
135  chtxt<< endl;
136  cout <<"Missing Energy/Momentum detected... decay tree might be corrupted!"<<endl;
137  flag=kFALSE;
138  }
139  }
140  return flag;
141 }
Int_t i
Definition: run_full.C:25
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
TLorentzVector Get4Momentum() const
Definition: PndMCTrack.cxx:102
void add_mccode(TString &mctxt, Int_t id)
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:47
Int_t GetSecondMotherID() const
Definition: PndMCTrack.h:75
TClonesArray * mctrack_array
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
int QAmacro_evtgen_3 ( )

Definition at line 144 of file QAmacro_evtgen_3.C.

References Bool_t, ctime, Double_t, PndMCTrack::GetMotherID(), i, mctrack_array, ncounts, printf(), propagate_mclist(), rtime, and timer.

145 {
146  TStopwatch timer;
147  timer.Start();
148 
149  cout << "-------------------------------------------------"<<endl
150  << "This macro checks the decay tree stored by QAmacro evtgen_1"<<endl
151  << "in file qa_evtgen1.root"<<endl
152  << "It checks all particles decayed by the EvtGen if the"<<endl
153  << "energy and momentum of the daughter particles sums up"<<endl
154  << "to the initial particle."<<endl
155  << "It fails if more than 100keV is missing."<<endl
156  << "-----------------------------------------------"<<endl;
157 
158  Bool_t fTest=kTRUE;
159 
160  PndMCTrack *mo;
161  // check_mc_tree_sums()
162  {
163  TChain *abc=new TChain("pndsim");
164  abc->Add("qa_evtgen1.root");
165 
166  TClonesArray* mctrack_array=new TClonesArray("PndMCTrack");
167  abc->SetBranchAddress("MCTrack",&mctrack_array);
168 
169  Int_t ncounts = abc->GetEntries();
170  if(ncounts<1) fTest=kFALSE;
171 
172  for(int k = 0; k < ncounts; k++){
173  abc->GetEntry(k);
174 
175  cout << "====== Evt "<<k<<" ======="<<endl;
176  for(Int_t i=0; i<mctrack_array->GetEntries(); i++){// for all generator generated particles
177  mo=(PndMCTrack *)mctrack_array->At(i);
178  if(mo->GetMotherID()==-1){
179  fTest &= propagate_mclist(i, mctrack_array);
180  }
181  }
182  cout << "==================="<<endl;
183  }
184  }
185 
186  if (fTest){
187  cout << " Test Passed" << endl;
188  cout << " All Ok " << endl;
189  }else{
190  cout << " Test Failed" << endl;
191  cout << " Not Ok " << endl;
192  }
193  timer.Stop();
194  Double_t rtime = timer.RealTime();
195  Double_t ctime = timer.CpuTime();
196  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
197  return 0;
198 }
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Int_t i
Definition: run_full.C:25
Bool_t propagate_mclist(Int_t id, TClonesArray *mctrack_array)
Double_t
TStopwatch timer
Definition: hit_dirc.C:51
Double_t ctime
Definition: hit_dirc.C:114
TClonesArray * mctrack_array
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
Double_t rtime
Definition: hit_dirc.C:113