]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorParticlePID.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoCutMonitorParticlePID.cxx
CommitLineData
76ce4b5b 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),
5b39ee58 18 fTOFNSigma(0),
19 fTPCNSigma(0),
20 fTPCTOFNSigma(0),
acc1ca78 21 fTPCvsTOFNSigma(0),
22 fParticleOrigin(0),
23 fParticleId(0)
76ce4b5b 24{
25 // Default constructor
5b39ee58 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);
acc1ca78 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);
ceeb8ab7 34
76ce4b5b 35}
36
37AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const char *aName, Int_t aTOFParticle):
38 AliFemtoCutMonitor(),
39 fTPCdEdx(0),
40 fTOFParticle(aTOFParticle),
41 fTOFTime(0x0),
5b39ee58 42 fTOFNSigma(0),
43 fTPCNSigma(0),
44 fTPCTOFNSigma(0),
acc1ca78 45 fTPCvsTOFNSigma(0),
46 fParticleOrigin(0),
47 fParticleId(0)
76ce4b5b 48{
49 // Normal constructor
50 char name[200];
51 snprintf(name, 200, "TPCdEdx%s", aName);
5b39ee58 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);
76ce4b5b 54
55 snprintf(name, 200, "TOFTime%s", aName);
5b39ee58 56 fTOFTime = new TH2D(name, "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
ceeb8ab7 57
5b39ee58 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);
ceeb8ab7 60
5b39ee58 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);
ceeb8ab7 63
5b39ee58 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);
76ce4b5b 66
9ff091e3 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);
acc1ca78 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);
76ce4b5b 75}
76
77AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut):
78 AliFemtoCutMonitor(),
79 fTPCdEdx(0),
80 fTOFParticle(0),
81 fTOFTime(0x0),
5b39ee58 82 fTOFNSigma(0),
83 fTPCNSigma(0),
84 fTPCTOFNSigma(0),
acc1ca78 85 fTPCvsTOFNSigma(0),
86 fParticleOrigin(0),
87 fParticleId(0)
ceeb8ab7 88
76ce4b5b 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
5b39ee58 97 if (fTOFNSigma) delete fTOFNSigma;
98 fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
ceeb8ab7 99
5b39ee58 100 if (fTPCNSigma) delete fTPCNSigma;
101 fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
ceeb8ab7 102
5b39ee58 103 if (fTPCTOFNSigma) delete fTPCTOFNSigma;
104 fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
acc1ca78 105
106 if (fParticleOrigin) delete fParticleOrigin;
107 fParticleOrigin= new TH1D(*aCut.fParticleOrigin);
108
109 if (fParticleId) delete fParticleId;
110 fParticleId= new TH1D(*aCut.fParticleId);
76ce4b5b 111}
112
113AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID()
114{
115 // Destructor
116 delete fTPCdEdx;
117 delete fTOFTime;
5b39ee58 118 delete fTOFNSigma;
119 delete fTPCNSigma;
120 delete fTPCTOFNSigma;
121 delete fTPCvsTOFNSigma;
acc1ca78 122 delete fParticleOrigin;
123 delete fParticleId;
ceeb8ab7 124
76ce4b5b 125}
126
127AliFemtoCutMonitorParticlePID& AliFemtoCutMonitorParticlePID::operator=(const AliFemtoCutMonitorParticlePID& aCut)
128{
129 // assignment operator
91bce940 130 if (this == &aCut)
76ce4b5b 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);
91bce940 138
5b39ee58 139 if(fTOFNSigma) delete fTOFNSigma;
140 fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
ceeb8ab7 141
5b39ee58 142 if(fTPCNSigma) delete fTPCNSigma;
143 fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
ceeb8ab7 144
5b39ee58 145 if(fTPCTOFNSigma) delete fTPCTOFNSigma;
146 fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
147
148 if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma;
149 fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma);
ceeb8ab7 150
acc1ca78 151 if (fParticleOrigin) delete fParticleOrigin;
152 fParticleOrigin= new TH1D(*aCut.fParticleOrigin);
153
154 if (fParticleId) delete fParticleId;
155 fParticleId= new TH1D(*aCut.fParticleId);
156
76ce4b5b 157 return *this;
158}
159
91bce940 160AliFemtoString AliFemtoCutMonitorParticlePID::Report(){
76ce4b5b 161 // Prepare report from the execution
91bce940 162 string stemp = "*** AliFemtoCutMonitorParticlePID report";
76ce4b5b 163 AliFemtoString returnThis = stemp;
91bce940 164 return returnThis;
76ce4b5b 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
acc1ca78 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 }
64536eaf 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());
ceeb8ab7 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
91bce940 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() ) );
ceeb8ab7 208
9ff091e3 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());
5b39ee58 212
213
76ce4b5b 214}
215
216void AliFemtoCutMonitorParticlePID::Write()
217{
218 // Write out the relevant histograms
219 fTPCdEdx->Write();
220 fTOFTime->Write();
5b39ee58 221 fTOFNSigma->Write();
222 fTPCNSigma->Write();
223 fTPCTOFNSigma->Write();
224 fTPCvsTOFNSigma->Write();
acc1ca78 225 fParticleId->Write();
226 fParticleOrigin->Write();
76ce4b5b 227}
228
229TList *AliFemtoCutMonitorParticlePID::GetOutputList()
230{
231 TList *tOutputList = new TList();
232 tOutputList->Add(fTPCdEdx);
233 tOutputList->Add(fTOFTime);
5b39ee58 234 tOutputList->Add(fTOFNSigma);
235 tOutputList->Add(fTPCNSigma);
236 tOutputList->Add(fTPCTOFNSigma);
237 tOutputList->Add(fTPCvsTOFNSigma);
acc1ca78 238 tOutputList->Add(fParticleId);
239 tOutputList->Add(fParticleOrigin);
ceeb8ab7 240
76ce4b5b 241 return tOutputList;
242}