]>
Commit | Line | Data |
---|---|---|
76ce4b5b | 1 | //////////////////////////////////////////////////////////////////////////////// |
2 | // // | |
3 | // AliFemtoCutMonitorParticlePtPDG - the cut monitor for particles to study // | |
4 | // the difference between reconstructed and true momentum // | |
5 | // // | |
6 | //////////////////////////////////////////////////////////////////////////////// | |
7 | #include "AliFemtoCutMonitorParticlePtPDG.h" | |
8 | #include "AliFemtoModelHiddenInfo.h" | |
9 | #include <TH1D.h> | |
10 | #include <TH2D.h> | |
11 | #include <TList.h> | |
12 | #include <TMath.h> | |
13 | ||
14 | AliFemtoCutMonitorParticlePtPDG::AliFemtoCutMonitorParticlePtPDG(): | |
15 | fPtPDG(0),ftpcHist(0),fPtGoodPi(0),fPtFakePi(0),fPtGoodK(0),fPtFakeK(0), | |
16 | fPtGoodP(0),fPtFakeP(0),fPtRPi(0),fPtRK(0),fPtRP(0), | |
17 | fPtContP(0), | |
18 | fPtContPi(0), | |
19 | fPtContMup(0), | |
20 | fPtContElp(0), | |
21 | fMass(0.13957) | |
22 | { | |
23 | // Default constructor | |
24 | } | |
25 | ||
26 | AliFemtoCutMonitorParticlePtPDG::AliFemtoCutMonitorParticlePtPDG(const char *aName, float aMass): | |
27 | AliFemtoCutMonitor(), | |
28 | fPtPDG(0),ftpcHist(0),fPtGoodPi(0),fPtFakePi(0),fPtGoodK(0),fPtFakeK(0), | |
29 | fPtGoodP(0),fPtFakeP(0),fPtRPi(0),fPtRK(0),fPtRP(0), | |
30 | fPtContP(0), | |
31 | fPtContPi(0), | |
32 | fPtContMup(0), | |
33 | fPtContElp(0), | |
34 | fMass(aMass) | |
35 | { | |
36 | // Normal constructor | |
37 | char name[200]; | |
38 | snprintf(name, 200, "PtPDG%s", aName); | |
39 | fPtPDG = new TH2D(name, "PDG vs Pt", 10, 0.0, 5.0, 100, 0.1, 2.0); | |
40 | snprintf(name, 200, "tpcHist%s", aName); | |
41 | ftpcHist=new TH2D(name,"TPC dE/dX vs momentum",100,0.1,2.7,100,0.,6.); | |
42 | snprintf(name, 200, "PtGoodPi%s", aName); | |
43 | fPtGoodPi = new TH1D(name, "good pions Pt", 100, 0.1, 2.0); | |
44 | snprintf(name, 200, "PtFakePi%s", aName); | |
45 | fPtFakePi = new TH1D(name, "fake pions Pt", 100, 0.1, 2.0); | |
46 | snprintf(name, 200, "PtRPi%s", aName); | |
47 | fPtRPi = new TH1D(name, "right pdg pions Pt", 100, 0.1, 2.0); | |
48 | snprintf(name, 200, "PtGoodK%s", aName); | |
49 | fPtGoodK = new TH1D(name, "good kaons Pt", 100, 0.1, 2.0); | |
50 | snprintf(name, 200, "PtFakeK%s", aName); | |
51 | fPtFakeK = new TH1D(name, "fake kaons Pt", 100, 0.1, 2.0); | |
52 | snprintf(name, 200, "PtRK%s", aName); | |
53 | fPtRK = new TH1D(name, "right pdg kaons Pt", 100, 0.1, 2.0); | |
54 | snprintf(name, 200, "PtGoodP%s", aName); | |
55 | fPtGoodP = new TH1D(name, "good protons Pt", 100, 0.1, 2.0); | |
56 | snprintf(name, 200, "PtFakeP%s", aName); | |
57 | fPtFakeP = new TH1D(name, "fake protons Pt", 100, 0.1, 2.0); | |
58 | snprintf(name, 200, "PtRP%s", aName); | |
59 | fPtRP = new TH1D(name, "right pdg protons Pt", 100, 0.1, 2.0); | |
60 | ||
61 | snprintf(name, 200, "PtContP%s", aName); | |
62 | fPtContP = new TH1D(name, "contamination", 100, 0.1, 2.0); | |
63 | snprintf(name, 200, "PtContPi%s", aName); | |
64 | fPtContPi = new TH1D(name, "contamination", 100, 0.1, 2.0); | |
65 | snprintf(name, 200, "PtContMup%s", aName); | |
66 | fPtContMup = new TH1D(name, "contamination", 100, 0.1, 2.0); | |
67 | snprintf(name, 200, "PtContElp%s", aName); | |
68 | fPtContElp = new TH1D(name, "contamination", 100, 0.1, 2.0); | |
69 | ||
70 | } | |
71 | ||
72 | AliFemtoCutMonitorParticlePtPDG::AliFemtoCutMonitorParticlePtPDG(const AliFemtoCutMonitorParticlePtPDG &aCut): | |
73 | AliFemtoCutMonitor(), | |
74 | fPtPDG(0),ftpcHist(0),fPtGoodPi(0),fPtFakePi(0),fPtGoodK(0),fPtFakeK(0), | |
75 | fPtGoodP(0),fPtFakeP(0),fPtRPi(0),fPtRK(0),fPtRP(0), | |
76 | fPtContP(0), | |
77 | fPtContPi(0), | |
78 | fPtContMup(0), | |
79 | fPtContElp(0), | |
80 | fMass(0.13957) | |
81 | { | |
82 | // copy constructor | |
83 | if (fPtPDG) delete fPtPDG; | |
84 | fPtPDG = new TH2D(*aCut.fPtPDG); | |
85 | ftpcHist= new TH2D(*aCut.ftpcHist); | |
86 | fPtGoodPi= new TH1D(*aCut.fPtGoodPi); | |
87 | fPtFakePi= new TH1D(*aCut.fPtFakePi); | |
88 | fPtGoodK= new TH1D(*aCut.fPtGoodK); | |
89 | fPtFakeK= new TH1D(*aCut.fPtFakePi); | |
90 | fPtGoodP= new TH1D(*aCut.fPtGoodP); | |
91 | fPtFakeP= new TH1D(*aCut.fPtFakePi); | |
92 | fPtRPi= new TH1D(*aCut.fPtRPi); | |
93 | fPtRK= new TH1D(*aCut.fPtRK); | |
94 | fPtRP= new TH1D(*aCut.fPtRP); | |
95 | ||
96 | fPtContP= new TH1D(*aCut.fPtContP); | |
97 | fPtContPi= new TH1D(*aCut.fPtContPi); | |
98 | fPtContMup= new TH1D(*aCut.fPtContMup); | |
99 | fPtContElp= new TH1D(*aCut.fPtContElp); | |
100 | ||
101 | fMass = aCut.fMass; | |
102 | } | |
103 | ||
104 | AliFemtoCutMonitorParticlePtPDG::~AliFemtoCutMonitorParticlePtPDG() | |
105 | { | |
106 | // Destructor | |
107 | delete fPtPDG; | |
108 | delete ftpcHist; | |
109 | delete fPtGoodPi; | |
110 | delete fPtFakePi; | |
111 | delete fPtGoodK; | |
112 | delete fPtFakeK; | |
113 | delete fPtGoodP; | |
114 | delete fPtFakeP; | |
115 | delete fPtRPi; | |
116 | delete fPtRK; | |
117 | delete fPtRP; | |
118 | ||
119 | delete fPtContP; | |
120 | delete fPtContPi; | |
121 | delete fPtContMup; | |
122 | delete fPtContElp; | |
123 | ||
124 | } | |
125 | ||
126 | AliFemtoCutMonitorParticlePtPDG& AliFemtoCutMonitorParticlePtPDG::operator=(const AliFemtoCutMonitorParticlePtPDG& aCut) | |
127 | { | |
128 | // assignment operator | |
129 | if (this == &aCut) | |
130 | return *this; | |
131 | ||
132 | if (fPtPDG) delete fPtPDG; | |
133 | fPtPDG = new TH2D(*aCut.fPtPDG); | |
134 | ||
135 | if (ftpcHist) delete ftpcHist; | |
136 | ftpcHist = new TH2D(*aCut.ftpcHist); | |
137 | ||
138 | if (fPtGoodPi) delete fPtGoodPi; | |
139 | fPtGoodPi = new TH1D(*aCut.fPtGoodPi); | |
140 | ||
141 | if (fPtFakePi) delete fPtFakePi; | |
142 | fPtFakePi = new TH1D(*aCut.fPtFakePi); | |
143 | ||
144 | if (fPtRPi) delete fPtRPi; | |
145 | fPtRPi = new TH1D(*aCut.fPtRPi); | |
146 | ||
147 | if (fPtGoodK) delete fPtGoodK; | |
148 | fPtGoodK = new TH1D(*aCut.fPtGoodK); | |
149 | ||
150 | if (fPtFakeK) delete fPtFakeK; | |
151 | fPtFakeK = new TH1D(*aCut.fPtFakeK); | |
152 | ||
153 | if (fPtRK) delete fPtRK; | |
154 | fPtRK = new TH1D(*aCut.fPtRK); | |
155 | ||
156 | if (fPtGoodP) delete fPtGoodP; | |
157 | fPtGoodP = new TH1D(*aCut.fPtGoodP); | |
158 | ||
159 | if (fPtFakeP) delete fPtFakeP; | |
160 | fPtFakeP = new TH1D(*aCut.fPtFakeP); | |
161 | ||
162 | if (fPtRP) delete fPtRP; | |
163 | fPtRP = new TH1D(*aCut.fPtRP); | |
164 | ||
165 | if (fPtContP) delete fPtContP; | |
166 | fPtContP = new TH1D(*aCut.fPtContP); | |
167 | ||
168 | if (fPtContPi) delete fPtContPi; | |
169 | fPtContPi = new TH1D(*aCut.fPtContPi); | |
170 | ||
171 | if (fPtContMup) delete fPtContMup; | |
172 | fPtContMup = new TH1D(*aCut.fPtContMup); | |
173 | ||
174 | if (fPtContElp) delete fPtContElp; | |
175 | fPtContElp = new TH1D(*aCut.fPtContElp); | |
176 | ||
177 | return *this; | |
178 | } | |
179 | ||
180 | AliFemtoString AliFemtoCutMonitorParticlePtPDG::Report(){ | |
181 | // Prepare report from the execution | |
182 | string stemp = "*** AliFemtoCutMonitorParticlePtPDG report"; | |
183 | AliFemtoString returnThis = stemp; | |
184 | return returnThis; | |
185 | } | |
186 | ||
187 | void AliFemtoCutMonitorParticlePtPDG::Fill(const AliFemtoTrack* aTrack) | |
188 | { | |
189 | // Fill in the monitor histograms with the values from the current track | |
190 | // float tEnergy = ::sqrt(aTrack->P().mag2()+fMass*fMass); | |
191 | // float tRapidity = 0.5*::log((tEnergy+aTrack->P().z())/(tEnergy-aTrack->P().z())); | |
192 | float tPt = ::sqrt((aTrack->P().x())*(aTrack->P().x())+(aTrack->P().y())*(aTrack->P().y())); | |
193 | // float tEta = -TMath::Log(TMath::Tan(aTrack->P().theta()/2.0)); | |
194 | // float tPhi = aTrack->P().phi(); | |
195 | float tP = ::sqrt((aTrack->P().z())*(aTrack->P().z())+(aTrack->P().x())*(aTrack->P().x())+(aTrack->P().y())*(aTrack->P().y()));; | |
196 | float dedx = aTrack->TPCsignalN(); | |
197 | float w[10]; | |
198 | w[0] = aTrack->PidProbElectron(); | |
199 | w[1] = aTrack->PidProbMuon(); | |
200 | w[2] = aTrack->PidProbPion(); | |
201 | w[3] = aTrack->PidProbKaon(); | |
202 | w[4] = aTrack->PidProbProton(); | |
203 | ||
204 | Int_t pdg1=0; | |
205 | AliFemtoModelHiddenInfo *info = ( AliFemtoModelHiddenInfo *) aTrack->GetHiddenInfo(); | |
206 | if(info)pdg1 = info->GetPDGPid(); | |
207 | ||
208 | ||
209 | //most probable particle | |
210 | fPtGoodPi->Fill(tPt); | |
211 | fPtGoodP->Fill(tPt); | |
212 | fPtGoodK->Fill(tPt); | |
213 | ||
214 | //contaminations | |
215 | if (abs(pdg1)!=321)fPtFakeK->Fill(tPt); | |
216 | if (abs(pdg1)!=211)fPtFakePi->Fill(tPt); | |
217 | if (abs(pdg1)!=2212)fPtFakeP->Fill(tPt); | |
218 | ||
219 | ||
220 | //contaminations for kaons | |
221 | if (abs(pdg1)==2212)fPtContP->Fill(tPt); | |
222 | if (abs(pdg1)==211)fPtContPi->Fill(tPt); | |
223 | if (abs(pdg1)==13)fPtContMup->Fill(tPt); | |
224 | if (abs(pdg1)==11)fPtContElp->Fill(tPt); | |
225 | ||
226 | Float_t pdg=-1.0; | |
227 | if(abs(pdg1)==211){ | |
228 | pdg=2.0; | |
229 | fPtRPi->Fill(tPt); | |
230 | } | |
231 | ||
232 | if(abs(pdg1)==321){ | |
233 | pdg=3.0; | |
234 | fPtRK->Fill(tPt); | |
235 | } | |
236 | ||
237 | if(abs(pdg1)==2212){ | |
238 | pdg=4.0; | |
239 | fPtRP->Fill(tPt); | |
240 | } | |
241 | ||
242 | if(abs(pdg1)==11)pdg=0.0; //+-electron | |
243 | if(abs(pdg1)==13)pdg=1.0; //+-muon | |
244 | ||
245 | //cout<<"pdg from CutMonitor.."<<pdg1<<"pdg"<<pdg<<endl; | |
246 | ||
247 | ||
248 | fPtPDG->Fill(pdg, tPt); | |
249 | ftpcHist->Fill(tP,dedx); | |
250 | ||
251 | ||
252 | } | |
253 | ||
254 | void AliFemtoCutMonitorParticlePtPDG::Write() | |
255 | { | |
256 | // Write out the relevant histograms | |
257 | ||
258 | fPtPDG->Write(); | |
259 | ftpcHist->Write(); | |
260 | fPtGoodPi->Write(); | |
261 | fPtFakePi->Write(); | |
262 | fPtGoodK->Write(); | |
263 | fPtFakeK->Write(); | |
264 | fPtGoodP->Write(); | |
265 | fPtFakeP->Write(); | |
266 | fPtRPi->Write(); | |
267 | fPtRK->Write(); | |
268 | fPtRP->Write(); | |
269 | fPtContP->Write(); | |
270 | fPtContPi->Write(); | |
271 | fPtContMup->Write(); | |
272 | fPtContElp->Write(); | |
273 | } | |
274 | ||
275 | TList *AliFemtoCutMonitorParticlePtPDG::GetOutputList() | |
276 | { | |
277 | TList *tOutputList = new TList(); | |
278 | tOutputList->Add(fPtPDG); | |
279 | tOutputList->Add(ftpcHist); | |
280 | tOutputList->Add(fPtGoodPi); | |
281 | tOutputList->Add(fPtFakePi); | |
282 | tOutputList->Add(fPtGoodK); | |
283 | tOutputList->Add(fPtFakeK); | |
284 | tOutputList->Add(fPtGoodP); | |
285 | tOutputList->Add(fPtFakeP); | |
286 | tOutputList->Add(fPtRPi); | |
287 | tOutputList->Add(fPtRK); | |
288 | tOutputList->Add(fPtRP); | |
289 | ||
290 | tOutputList->Add(fPtContP); | |
291 | tOutputList->Add(fPtContPi); | |
292 | tOutputList->Add(fPtContMup); | |
293 | tOutputList->Add(fPtContElp); | |
294 | ||
295 | return tOutputList; | |
296 | } |