]>
Commit | Line | Data |
---|---|---|
1 | //////////////////////////////////////////////////////////////////////////////// | |
2 | // // | |
3 | // AliFemtoCutMonitorParticlePID - the cut monitor for particles to study // | |
4 | // various aspects of the PID determination // | |
5 | // // | |
6 | //////////////////////////////////////////////////////////////////////////////// | |
7 | #include "AliFemtoCutMonitorParticlePID.h" | |
8 | #include "AliFemtoModelHiddenInfo.h" | |
9 | #include <TH1D.h> | |
10 | #include <TH2D.h> | |
11 | #include <TList.h> | |
12 | #include <TMath.h> | |
13 | ||
14 | AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(): | |
15 | fTPCdEdx(0), | |
16 | fTOFParticle(0), | |
17 | fTOFTime(0x0), | |
18 | fTOFNSigma(0), | |
19 | fTPCNSigma(0), | |
20 | fTPCTOFNSigma(0), | |
21 | fTPCvsTOFNSigma(0), | |
22 | fParticleOrigin(0), | |
23 | fParticleId(0) | |
24 | { | |
25 | // Default constructor | |
26 | fTPCdEdx = new TH2D("TPCdEdx", "TPC dEdx vs. momentum", 100, 0.0, 5.0, 250, 0.0, 500.0); | |
27 | fTOFTime = new TH2D("TOFTime", "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0); | |
28 | fTOFNSigma = new TH2D("TOFNSigma","TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0); | |
29 | fTPCNSigma = new TH2D("TPCNSigma","TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0); | |
30 | fTPCTOFNSigma = new TH2D("TPCTOFNSigma","TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0); | |
31 | fTPCvsTOFNSigma = new TH2D("TPCvsTOFNSigma","TPC vs TOF Nsigma",100, -5.0, 5.0, 100, -5.0, 5.0); | |
32 | fParticleOrigin = new TH1D("POrigin", "Mothers PDG Codes", 6000, 0.0, 6000.0); | |
33 | fParticleId = new TH1D("PId", "Particle PDG Codes", 6000, 0.0, 6000.0); | |
34 | ||
35 | } | |
36 | ||
37 | AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const char *aName, Int_t aTOFParticle): | |
38 | AliFemtoCutMonitor(), | |
39 | fTPCdEdx(0), | |
40 | fTOFParticle(aTOFParticle), | |
41 | fTOFTime(0x0), | |
42 | fTOFNSigma(0), | |
43 | fTPCNSigma(0), | |
44 | fTPCTOFNSigma(0), | |
45 | fTPCvsTOFNSigma(0), | |
46 | fParticleOrigin(0), | |
47 | fParticleId(0) | |
48 | { | |
49 | // Normal constructor | |
50 | char name[200]; | |
51 | snprintf(name, 200, "TPCdEdx%s", aName); | |
52 | // fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 100, 0.0, 6.0, 250, 0.0, 500.0); | |
53 | fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 200, 0.1, 4.0, 250, 0.0, 500.0); | |
54 | ||
55 | snprintf(name, 200, "TOFTime%s", aName); | |
56 | fTOFTime = new TH2D(name, "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0); | |
57 | ||
58 | snprintf(name, 200, "TOFNSigma%s", aName); | |
59 | fTOFNSigma = new TH2D(name,"TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0); | |
60 | ||
61 | snprintf(name, 200, "TPCNSigma%s", aName); | |
62 | fTPCNSigma = new TH2D(name,"TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0); | |
63 | ||
64 | snprintf(name, 200, "TPCTOFNSigma%s", aName); | |
65 | fTPCTOFNSigma = new TH2D(name,"TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0); | |
66 | ||
67 | snprintf(name, 200, "TPCvsTOFNSigma%s", aName); | |
68 | fTPCvsTOFNSigma = new TH2D(name,"TPC vs TOF Nsigma",100, -5.0, 5.0, 100, -5.0, 5.0); | |
69 | ||
70 | snprintf(name, 200, "POrigin%s", aName); | |
71 | fParticleOrigin = new TH1D(name, "Mothers PDG Codes", 6000, 0.0, 6000.0); | |
72 | ||
73 | snprintf(name, 200, "PId%s", aName); | |
74 | fParticleId = new TH1D(name, "Particle PDG Codes", 6000, 0.0, 6000.0); | |
75 | } | |
76 | ||
77 | AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut): | |
78 | AliFemtoCutMonitor(), | |
79 | fTPCdEdx(0), | |
80 | fTOFParticle(0), | |
81 | fTOFTime(0x0), | |
82 | fTOFNSigma(0), | |
83 | fTPCNSigma(0), | |
84 | fTPCTOFNSigma(0), | |
85 | fTPCvsTOFNSigma(0), | |
86 | fParticleOrigin(0), | |
87 | fParticleId(0) | |
88 | ||
89 | { | |
90 | // copy constructor | |
91 | if (fTPCdEdx) delete fTPCdEdx; | |
92 | fTPCdEdx = new TH2D(*aCut.fTPCdEdx); | |
93 | ||
94 | if (fTOFTime) delete fTOFTime; | |
95 | fTOFTime = new TH2D(*aCut.fTOFTime); | |
96 | ||
97 | if (fTOFNSigma) delete fTOFNSigma; | |
98 | fTOFNSigma= new TH2D(*aCut.fTOFNSigma); | |
99 | ||
100 | if (fTPCNSigma) delete fTPCNSigma; | |
101 | fTPCNSigma= new TH2D(*aCut.fTPCNSigma); | |
102 | ||
103 | if (fTPCTOFNSigma) delete fTPCTOFNSigma; | |
104 | fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma); | |
105 | ||
106 | if (fParticleOrigin) delete fParticleOrigin; | |
107 | fParticleOrigin= new TH1D(*aCut.fParticleOrigin); | |
108 | ||
109 | if (fParticleId) delete fParticleId; | |
110 | fParticleId= new TH1D(*aCut.fParticleId); | |
111 | } | |
112 | ||
113 | AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID() | |
114 | { | |
115 | // Destructor | |
116 | delete fTPCdEdx; | |
117 | delete fTOFTime; | |
118 | delete fTOFNSigma; | |
119 | delete fTPCNSigma; | |
120 | delete fTPCTOFNSigma; | |
121 | delete fTPCvsTOFNSigma; | |
122 | delete fParticleOrigin; | |
123 | delete fParticleId; | |
124 | ||
125 | } | |
126 | ||
127 | AliFemtoCutMonitorParticlePID& AliFemtoCutMonitorParticlePID::operator=(const AliFemtoCutMonitorParticlePID& aCut) | |
128 | { | |
129 | // assignment operator | |
130 | if (this == &aCut) | |
131 | return *this; | |
132 | ||
133 | if (fTPCdEdx) delete fTPCdEdx; | |
134 | fTPCdEdx = new TH2D(*aCut.fTPCdEdx); | |
135 | ||
136 | if (fTOFTime) delete fTOFTime; | |
137 | fTOFTime = new TH2D(*aCut.fTOFTime); | |
138 | ||
139 | if(fTOFNSigma) delete fTOFNSigma; | |
140 | fTOFNSigma = new TH2D(*aCut.fTOFNSigma); | |
141 | ||
142 | if(fTPCNSigma) delete fTPCNSigma; | |
143 | fTPCNSigma = new TH2D(*aCut.fTPCNSigma); | |
144 | ||
145 | if(fTPCTOFNSigma) delete fTPCTOFNSigma; | |
146 | fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma); | |
147 | ||
148 | if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma; | |
149 | fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma); | |
150 | ||
151 | if (fParticleOrigin) delete fParticleOrigin; | |
152 | fParticleOrigin= new TH1D(*aCut.fParticleOrigin); | |
153 | ||
154 | if (fParticleId) delete fParticleId; | |
155 | fParticleId= new TH1D(*aCut.fParticleId); | |
156 | ||
157 | return *this; | |
158 | } | |
159 | ||
160 | AliFemtoString AliFemtoCutMonitorParticlePID::Report(){ | |
161 | // Prepare report from the execution | |
162 | string stemp = "*** AliFemtoCutMonitorParticlePID report"; | |
163 | AliFemtoString returnThis = stemp; | |
164 | return returnThis; | |
165 | } | |
166 | ||
167 | void AliFemtoCutMonitorParticlePID::Fill(const AliFemtoTrack* aTrack) | |
168 | { | |
169 | // Fill in the monitor histograms with the values from the current track | |
170 | float tMom = aTrack->P().Mag(); | |
171 | float tdEdx = aTrack->TPCsignal(); | |
172 | float tTOF = 0.0; | |
173 | // short tchg = aTrack->Charge(); | |
174 | if (fTOFParticle == 0) tTOF = aTrack->TOFpionTime(); | |
175 | if (fTOFParticle == 1) tTOF = aTrack->TOFkaonTime(); | |
176 | if (fTOFParticle == 2) tTOF = aTrack->TOFprotonTime(); | |
177 | ||
178 | fTPCdEdx->Fill(tMom, tdEdx); | |
179 | fTOFTime->Fill(tMom, tTOF); | |
180 | ||
181 | AliFemtoModelHiddenInfo *tInfo = (AliFemtoModelHiddenInfo*)aTrack->GetHiddenInfo(); | |
182 | if(tInfo!=NULL) { | |
183 | Int_t partID = TMath::Abs(tInfo->GetPDGPid()); | |
184 | Int_t motherID = TMath::Abs(tInfo->GetMotherPdgCode()); | |
185 | ||
186 | fParticleId->Fill(partID); | |
187 | fParticleOrigin->Fill(motherID); | |
188 | } | |
189 | // float vp= aTrack->VTOF(); | |
190 | // if (vp > 0.) { | |
191 | // fTOFTime->Fill(tMom, tTOF); | |
192 | // if (fTOFParticle == 0) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFPi()); | |
193 | // if (fTOFParticle == 1) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFK()); | |
194 | // if (fTOFParticle == 2) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFP()); | |
195 | // } | |
196 | ||
197 | if (fTOFParticle == 0) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFPi()); | |
198 | if (fTOFParticle == 1) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFK()); | |
199 | if (fTOFParticle == 2) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFP()); | |
200 | ||
201 | if (fTOFParticle == 0) fTPCNSigma->Fill(tMom, aTrack->NSigmaTPCPi()); | |
202 | if (fTOFParticle == 1) fTPCNSigma->Fill(tMom, aTrack->NSigmaTPCK()); | |
203 | if (fTOFParticle == 2) fTPCNSigma->Fill(tMom, aTrack->NSigmaTPCP()); | |
204 | ||
205 | if (fTOFParticle == 0) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCPi(), aTrack->NSigmaTOFPi() ) ); | |
206 | if (fTOFParticle == 1) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCK(), aTrack->NSigmaTOFK() ) ); | |
207 | if (fTOFParticle == 2) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCP(), aTrack->NSigmaTOFP() ) ); | |
208 | ||
209 | if (fTOFParticle == 0) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCPi(), aTrack->NSigmaTOFPi()); | |
210 | if (fTOFParticle == 1) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCK(), aTrack->NSigmaTOFK()); | |
211 | if (fTOFParticle == 2) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCP(), aTrack->NSigmaTOFP()); | |
212 | ||
213 | ||
214 | } | |
215 | ||
216 | void AliFemtoCutMonitorParticlePID::Write() | |
217 | { | |
218 | // Write out the relevant histograms | |
219 | fTPCdEdx->Write(); | |
220 | fTOFTime->Write(); | |
221 | fTOFNSigma->Write(); | |
222 | fTPCNSigma->Write(); | |
223 | fTPCTOFNSigma->Write(); | |
224 | fTPCvsTOFNSigma->Write(); | |
225 | fParticleId->Write(); | |
226 | fParticleOrigin->Write(); | |
227 | } | |
228 | ||
229 | TList *AliFemtoCutMonitorParticlePID::GetOutputList() | |
230 | { | |
231 | TList *tOutputList = new TList(); | |
232 | tOutputList->Add(fTPCdEdx); | |
233 | tOutputList->Add(fTOFTime); | |
234 | tOutputList->Add(fTOFNSigma); | |
235 | tOutputList->Add(fTPCNSigma); | |
236 | tOutputList->Add(fTPCTOFNSigma); | |
237 | tOutputList->Add(fTPCvsTOFNSigma); | |
238 | tOutputList->Add(fParticleId); | |
239 | tOutputList->Add(fParticleOrigin); | |
240 | ||
241 | return tOutputList; | |
242 | } |