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():
23 // Default constructor
24 fTPCdEdx = new TH2D("TPCdEdx", "TPC dEdx vs. momentum", 100, 0.0, 5.0, 250, 0.0, 500.0);
25 fTOFTime = new TH2D("TOFTime", "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
26 fTOFNSigma = new TH2D("TOFNSigma","TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
27 fTPCNSigma = new TH2D("TPCNSigma","TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
28 fTPCTOFNSigma = new TH2D("TPCTOFNSigma","TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0);
29 fTPCvsTOFNSigma = new TH2D("TPCvsTOFNSigma","TPC vs TOF Nsigma",100, -5.0, 5.0, 100, -5.0, 5.0);
33 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const char *aName, Int_t aTOFParticle):
36 fTOFParticle(aTOFParticle),
45 snprintf(name, 200, "TPCdEdx%s", aName);
46 // fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 100, 0.0, 6.0, 250, 0.0, 500.0);
47 fTPCdEdx = new TH2D(name, "TPC dEdx vs. momentum", 200, 0.1, 4.0, 250, 0.0, 500.0);
49 snprintf(name, 200, "TOFTime%s", aName);
50 fTOFTime = new TH2D(name, "TOF Time vs. momentum", 100, 0.1, 5.0, 400, -4000.0, 4000.0);
52 snprintf(name, 200, "TOFNSigma%s", aName);
53 fTOFNSigma = new TH2D(name,"TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
55 snprintf(name, 200, "TPCNSigma%s", aName);
56 fTPCNSigma = new TH2D(name,"TPC NSigma vs. momentum", 100, 0.0, 5.0, 100, -5.0, 5.0);
58 snprintf(name, 200, "TPCTOFNSigma%s", aName);
59 fTPCTOFNSigma = new TH2D(name,"TPC & TOF NSigma vs. momentum", 100, 0.0, 5.0, 100, 0.0, 10.0);
61 snprintf(name, 200, "TPCvsTOFNSigma%s", aName);
62 fTPCvsTOFNSigma = new TH2D(name,"TPC vs TOF Nsigma",100, -5.0, 5.0, 100, -5.0, 5.0);
65 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut):
77 if (fTPCdEdx) delete fTPCdEdx;
78 fTPCdEdx = new TH2D(*aCut.fTPCdEdx);
80 if (fTOFTime) delete fTOFTime;
81 fTOFTime = new TH2D(*aCut.fTOFTime);
83 if (fTOFNSigma) delete fTOFNSigma;
84 fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
86 if (fTPCNSigma) delete fTPCNSigma;
87 fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
89 if (fTPCTOFNSigma) delete fTPCTOFNSigma;
90 fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
93 AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID()
100 delete fTPCTOFNSigma;
101 delete fTPCvsTOFNSigma;
105 AliFemtoCutMonitorParticlePID& AliFemtoCutMonitorParticlePID::operator=(const AliFemtoCutMonitorParticlePID& aCut)
107 // assignment operator
111 if (fTPCdEdx) delete fTPCdEdx;
112 fTPCdEdx = new TH2D(*aCut.fTPCdEdx);
114 if (fTOFTime) delete fTOFTime;
115 fTOFTime = new TH2D(*aCut.fTOFTime);
117 if(fTOFNSigma) delete fTOFNSigma;
118 fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
120 if(fTPCNSigma) delete fTPCNSigma;
121 fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
123 if(fTPCTOFNSigma) delete fTPCTOFNSigma;
124 fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
126 if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma;
127 fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma);
132 AliFemtoString AliFemtoCutMonitorParticlePID::Report(){
133 // Prepare report from the execution
134 string stemp = "*** AliFemtoCutMonitorParticlePID report";
135 AliFemtoString returnThis = stemp;
139 void AliFemtoCutMonitorParticlePID::Fill(const AliFemtoTrack* aTrack)
141 // Fill in the monitor histograms with the values from the current track
142 float tMom = aTrack->P().Mag();
143 float tdEdx = aTrack->TPCsignal();
145 // short tchg = aTrack->Charge();
146 if (fTOFParticle == 0) tTOF = aTrack->TOFpionTime();
147 if (fTOFParticle == 1) tTOF = aTrack->TOFkaonTime();
148 if (fTOFParticle == 2) tTOF = aTrack->TOFprotonTime();
150 fTPCdEdx->Fill(tMom, tdEdx);
151 fTOFTime->Fill(tMom, tTOF);
153 // float vp= aTrack->VTOF();
155 // fTOFTime->Fill(tMom, tTOF);
156 // if (fTOFParticle == 0) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFPi());
157 // if (fTOFParticle == 1) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFK());
158 // if (fTOFParticle == 2) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFP());
161 if (fTOFParticle == 0) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFPi());
162 if (fTOFParticle == 1) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFK());
163 if (fTOFParticle == 2) fTOFNSigma->Fill(tMom, aTrack->NSigmaTOFP());
165 if (fTOFParticle == 0) fTPCNSigma->Fill(tMom, aTrack->NSigmaTPCPi());
166 if (fTOFParticle == 1) fTPCNSigma->Fill(tMom, aTrack->NSigmaTPCK());
167 if (fTOFParticle == 2) fTPCNSigma->Fill(tMom, aTrack->NSigmaTPCP());
169 if (fTOFParticle == 0) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCPi(), aTrack->NSigmaTOFPi() ) );
170 if (fTOFParticle == 1) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCK(), aTrack->NSigmaTOFK() ) );
171 if (fTOFParticle == 2) fTPCTOFNSigma->Fill(tMom, TMath::Hypot( aTrack->NSigmaTPCP(), aTrack->NSigmaTOFP() ) );
173 if (fTOFParticle == 0) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCPi(), aTrack->NSigmaTOFPi());
174 if (fTOFParticle == 1) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCK(), aTrack->NSigmaTOFK());
175 if (fTOFParticle == 2) fTPCvsTOFNSigma->Fill(aTrack->NSigmaTPCP(), aTrack->NSigmaTOFP());
180 void AliFemtoCutMonitorParticlePID::Write()
182 // Write out the relevant histograms
187 fTPCTOFNSigma->Write();
188 fTPCvsTOFNSigma->Write();
191 TList *AliFemtoCutMonitorParticlePID::GetOutputList()
193 TList *tOutputList = new TList();
194 tOutputList->Add(fTPCdEdx);
195 tOutputList->Add(fTOFTime);
196 tOutputList->Add(fTOFNSigma);
197 tOutputList->Add(fTPCNSigma);
198 tOutputList->Add(fTPCTOFNSigma);
199 tOutputList->Add(fTPCvsTOFNSigma);