FairRoot/PandaRoot
QAmacro_evtgen_4.C
Go to the documentation of this file.
1 
2 
3 void add_mccode(TString &mctxt,Int_t id)
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 }
79 
80 
81 TString propagate_mclist(Int_t id,TClonesArray * mctrack_array)
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 
92  if(mct->GetMotherID()==-1){// show only first geant generation
93  for(Int_t i=0; i<mctrack_array->GetEntries(); i++){
94  mo=(PndMCTrack *)mctrack_array->At(i);
95 
96  if(mo->GetMotherID()==id || (mo->GetMotherID()==-1 && mo->GetSecondMotherID()==id)){
97  chtxt+=propagate_mclist( i, mctrack_array);
98  }
99  }
100  }
101 
102  TString mctxt="";
103  add_mccode(mctxt,mct->GetPdgCode());
104 
105  if(chtxt!="") mctxt+=TString(" (")+chtxt+TString(")");
106  return mctxt+" ";
107 }
108 
109 // TEST 3: check result
111 {
112  TStopwatch timer;
113  timer.Start();
114 
115  // defined by what is simulated in qa macros 2
116  TString shouldbe="#Psi(2S) (#xi_{c1}(1P) (J/#Psi (#Lambda (p #pi^{-} ) #bar{#Lambda} (#bar{n} #pi^{0} (#gamma e^{+} e^{-} ) ) ) #gamma ) #gamma ) ";
117 
118  cout << "-------------------------------------------------"<<endl
119  << "This macro checks the decay tree stored by QAmacro evtgen_2"<<endl
120  << "in file qa_evtgen2.root"<<endl
121  << "Is checks the layout of the (fixed) tree by a string comparison."<<endl
122  << "-----------------------------------------------"<<endl;
123 
124  Bool_t fTest=kTRUE;
125 
126  PndMCTrack *mo;
127  {
128  TChain *abc=new TChain("pndsim");
129  abc->Add("qa_evtgen2.root");
130 
131  TClonesArray* mctrack_array=new TClonesArray("PndMCTrack");
132  abc->SetBranchAddress("MCTrack",&mctrack_array);
133 
134  Int_t ncounts = abc->GetEntries();
135  if(ncounts<1) fTest=kFALSE;
136 
137  for(int k = 0; k < ncounts; k++){
138  TString mytxt, fullevt;
139  abc->GetEntry(k);
140 
141  fullevt="";
142  cout << "====== Evt "<<k<<" ======="<<endl;
143  for(Int_t i=0; i<mctrack_array->GetEntries(); i++){// for all generator generated particles
144  mo=(PndMCTrack *)mctrack_array->At(i);
145  mytxt="";
146  if(mo->GetMotherID()==-1 && mo->GetSecondMotherID()==-1) {
147  mytxt = propagate_mclist(i, mctrack_array);
148  cout << "Part "<<i<<": "<<mytxt<<endl;
149  if(fullevt!="") fullevt+=" / ";
150  fullevt+=mytxt;
151  }
152  }
153  cout << "Full Event: "<<fullevt<<endl;
154  if(fullevt!=shouldbe){
155  cout << "Event layout differs from the one defined in qa macro!!!"<<endl;
156  cout << "Shouldbe: "<<shouldbe<<endl;
157  fTest=kFALSE;
158  }
159  cout << "==================="<<endl;
160  }
161  }
162 
163  if (fTest){
164  cout << " Test Passed" << endl;
165  cout << " All Ok " << endl;
166  }else{
167  cout << " Test Failed" << endl;
168  cout << " Not Ok " << endl;
169  }
170  timer.Stop();
171  Double_t rtime = timer.RealTime();
172  Double_t ctime = timer.CpuTime();
173  printf("RealTime=%f seconds, CpuTime=%f seconds\n",rtime,ctime);
174  return 0;
175 }
176 
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
Int_t i
Definition: run_full.C:25
Int_t GetPdgCode() const
Definition: PndMCTrack.h:73
void add_mccode(TString &mctxt, Int_t id)
int QAmacro_evtgen_4()
TString 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
Int_t GetSecondMotherID() const
Definition: PndMCTrack.h:75
TClonesArray * mctrack_array
Int_t GetMotherID() const
Definition: PndMCTrack.h:74
Double_t rtime
Definition: hit_dirc.C:113