]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorParticlePID.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoCutMonitorParticlePID.cxx
... / ...
CommitLineData
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
14AliFemtoCutMonitorParticlePID::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
37AliFemtoCutMonitorParticlePID::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
77AliFemtoCutMonitorParticlePID::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
113AliFemtoCutMonitorParticlePID::~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
127AliFemtoCutMonitorParticlePID& 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
160AliFemtoString AliFemtoCutMonitorParticlePID::Report(){
161 // Prepare report from the execution
162 string stemp = "*** AliFemtoCutMonitorParticlePID report";
163 AliFemtoString returnThis = stemp;
164 return returnThis;
165}
166
167void 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
216void 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
229TList *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}