1 ////////////////////////////////////////////////////////////////////////////////
3 // AliFemtoCutMonitorParticlePtPDG - the cut monitor for particles to study //
4 // the difference between reconstructed and true momentum //
6 ////////////////////////////////////////////////////////////////////////////////
7 #include "AliFemtoCutMonitorParticlePtPDG.h"
8 #include "AliFemtoModelHiddenInfo.h"
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),
23 // Default constructor
26 AliFemtoCutMonitorParticlePtPDG::AliFemtoCutMonitorParticlePtPDG(const char *aName, float aMass):
28 fPtPDG(0),ftpcHist(0),fPtGoodPi(0),fPtFakePi(0),fPtGoodK(0),fPtFakeK(0),
29 fPtGoodP(0),fPtFakeP(0),fPtRPi(0),fPtRK(0),fPtRP(0),
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);
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);
72 AliFemtoCutMonitorParticlePtPDG::AliFemtoCutMonitorParticlePtPDG(const AliFemtoCutMonitorParticlePtPDG &aCut):
74 fPtPDG(0),ftpcHist(0),fPtGoodPi(0),fPtFakePi(0),fPtGoodK(0),fPtFakeK(0),
75 fPtGoodP(0),fPtFakeP(0),fPtRPi(0),fPtRK(0),fPtRP(0),
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);
96 fPtContP= new TH1D(*aCut.fPtContP);
97 fPtContPi= new TH1D(*aCut.fPtContPi);
98 fPtContMup= new TH1D(*aCut.fPtContMup);
99 fPtContElp= new TH1D(*aCut.fPtContElp);
104 AliFemtoCutMonitorParticlePtPDG::~AliFemtoCutMonitorParticlePtPDG()
126 AliFemtoCutMonitorParticlePtPDG& AliFemtoCutMonitorParticlePtPDG::operator=(const AliFemtoCutMonitorParticlePtPDG& aCut)
128 // assignment operator
132 if (fPtPDG) delete fPtPDG;
133 fPtPDG = new TH2D(*aCut.fPtPDG);
135 if (ftpcHist) delete ftpcHist;
136 ftpcHist = new TH2D(*aCut.ftpcHist);
138 if (fPtGoodPi) delete fPtGoodPi;
139 fPtGoodPi = new TH1D(*aCut.fPtGoodPi);
141 if (fPtFakePi) delete fPtFakePi;
142 fPtFakePi = new TH1D(*aCut.fPtFakePi);
144 if (fPtRPi) delete fPtRPi;
145 fPtRPi = new TH1D(*aCut.fPtRPi);
147 if (fPtGoodK) delete fPtGoodK;
148 fPtGoodK = new TH1D(*aCut.fPtGoodK);
150 if (fPtFakeK) delete fPtFakeK;
151 fPtFakeK = new TH1D(*aCut.fPtFakeK);
153 if (fPtRK) delete fPtRK;
154 fPtRK = new TH1D(*aCut.fPtRK);
156 if (fPtGoodP) delete fPtGoodP;
157 fPtGoodP = new TH1D(*aCut.fPtGoodP);
159 if (fPtFakeP) delete fPtFakeP;
160 fPtFakeP = new TH1D(*aCut.fPtFakeP);
162 if (fPtRP) delete fPtRP;
163 fPtRP = new TH1D(*aCut.fPtRP);
165 if (fPtContP) delete fPtContP;
166 fPtContP = new TH1D(*aCut.fPtContP);
168 if (fPtContPi) delete fPtContPi;
169 fPtContPi = new TH1D(*aCut.fPtContPi);
171 if (fPtContMup) delete fPtContMup;
172 fPtContMup = new TH1D(*aCut.fPtContMup);
174 if (fPtContElp) delete fPtContElp;
175 fPtContElp = new TH1D(*aCut.fPtContElp);
180 AliFemtoString AliFemtoCutMonitorParticlePtPDG::Report(){
181 // Prepare report from the execution
182 string stemp = "*** AliFemtoCutMonitorParticlePtPDG report";
183 AliFemtoString returnThis = stemp;
187 void AliFemtoCutMonitorParticlePtPDG::Fill(const AliFemtoTrack* aTrack)
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();
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();
205 AliFemtoModelHiddenInfo *info = ( AliFemtoModelHiddenInfo *) aTrack->GetHiddenInfo();
206 if(info)pdg1 = info->GetPDGPid();
209 //most probable particle
210 fPtGoodPi->Fill(tPt);
215 if (abs(pdg1)!=321)fPtFakeK->Fill(tPt);
216 if (abs(pdg1)!=211)fPtFakePi->Fill(tPt);
217 if (abs(pdg1)!=2212)fPtFakeP->Fill(tPt);
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);
242 if(abs(pdg1)==11)pdg=0.0; //+-electron
243 if(abs(pdg1)==13)pdg=1.0; //+-muon
245 //cout<<"pdg from CutMonitor.."<<pdg1<<"pdg"<<pdg<<endl;
248 fPtPDG->Fill(pdg, tPt);
249 ftpcHist->Fill(tP,dedx);
254 void AliFemtoCutMonitorParticlePtPDG::Write()
256 // Write out the relevant histograms
275 TList *AliFemtoCutMonitorParticlePtPDG::GetOutputList()
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);
290 tOutputList->Add(fPtContP);
291 tOutputList->Add(fPtContPi);
292 tOutputList->Add(fPtContMup);
293 tOutputList->Add(fPtContElp);