1 ////////////////////////////////////////////////////////////////////////////////
3 // AliFemtoCutMonitorParticlePID - the cut monitor for particles to study //
4 // various aspects of the PID determination //
6 ////////////////////////////////////////////////////////////////////////////////
7 #include "AliFemtoCutMonitorParticlePID.h"
8 #include "AliFemtoModelHiddenInfo.h"
14 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID():
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);
37 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const char *aName, Int_t aTOFParticle):
40 fTOFParticle(aTOFParticle),
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);
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);
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);
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);
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);
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);
70 snprintf(name, 200, "POrigin%s", aName);
71 fParticleOrigin = new TH1D(name, "Mothers PDG Codes", 6000, 0.0, 6000.0);
73 snprintf(name, 200, "PId%s", aName);
74 fParticleId = new TH1D(name, "Particle PDG Codes", 6000, 0.0, 6000.0);
77 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut):
91 if (fTPCdEdx) delete fTPCdEdx;
92 fTPCdEdx = new TH2D(*aCut.fTPCdEdx);
94 if (fTOFTime) delete fTOFTime;
95 fTOFTime = new TH2D(*aCut.fTOFTime);
97 if (fTOFNSigma) delete fTOFNSigma;
98 fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
100 if (fTPCNSigma) delete fTPCNSigma;
101 fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
103 if (fTPCTOFNSigma) delete fTPCTOFNSigma;
104 fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
106 if (fParticleOrigin) delete fParticleOrigin;
107 fParticleOrigin= new TH1D(*aCut.fParticleOrigin);
109 if (fParticleId) delete fParticleId;
110 fParticleId= new TH1D(*aCut.fParticleId);
113 AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID()
120 delete fTPCTOFNSigma;
121 delete fTPCvsTOFNSigma;
122 delete fParticleOrigin;
127 AliFemtoCutMonitorParticlePID& AliFemtoCutMonitorParticlePID::operator=(const AliFemtoCutMonitorParticlePID& aCut)
129 // assignment operator
133 if (fTPCdEdx) delete fTPCdEdx;
134 fTPCdEdx = new TH2D(*aCut.fTPCdEdx);
136 if (fTOFTime) delete fTOFTime;
137 fTOFTime = new TH2D(*aCut.fTOFTime);
139 if(fTOFNSigma) delete fTOFNSigma;
140 fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
142 if(fTPCNSigma) delete fTPCNSigma;
143 fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
145 if(fTPCTOFNSigma) delete fTPCTOFNSigma;
146 fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
148 if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma;
149 fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma);
151 if (fParticleOrigin) delete fParticleOrigin;
152 fParticleOrigin= new TH1D(*aCut.fParticleOrigin);
154 if (fParticleId) delete fParticleId;
155 fParticleId= new TH1D(*aCut.fParticleId);
160 AliFemtoString AliFemtoCutMonitorParticlePID::Report(){
161 // Prepare report from the execution
162 string stemp = "*** AliFemtoCutMonitorParticlePID report";
163 AliFemtoString returnThis = stemp;
167 void AliFemtoCutMonitorParticlePID::Fill(const AliFemtoTrack* aTrack)
169 // Fill in the monitor histograms with the values from the current track
170 float tMom = aTrack->P().Mag();
171 float tdEdx = aTrack->TPCsignal();
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();
178 fTPCdEdx->Fill(tMom, tdEdx);
179 fTOFTime->Fill(tMom, tTOF);
181 AliFemtoModelHiddenInfo *tInfo = (AliFemtoModelHiddenInfo*)aTrack->GetHiddenInfo();
183 Int_t partID = TMath::Abs(tInfo->GetPDGPid());
184 Int_t motherID = TMath::Abs(tInfo->GetMotherPdgCode());
186 fParticleId->Fill(partID);
187 fParticleOrigin->Fill(motherID);
189 // float vp= aTrack->VTOF();
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());
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());
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());
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() ) );
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());
216 void AliFemtoCutMonitorParticlePID::Write()
218 // Write out the relevant histograms
223 fTPCTOFNSigma->Write();
224 fTPCvsTOFNSigma->Write();
225 fParticleId->Write();
226 fParticleOrigin->Write();
229 TList *AliFemtoCutMonitorParticlePID::GetOutputList()
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);