1 ////////////////////////////////////////////////////////////////////////////////
3 // AliFemtoCutMonitorParticlePtPDGV0 - the cut monitor for particles to study //
4 // the difference between reconstructed V0s and MC V0s //
6 ////////////////////////////////////////////////////////////////////////////////
7 #include "AliFemtoCutMonitorParticlePtPDGV0.h"
8 #include "AliFemtoModelHiddenInfo.h"
14 AliFemtoCutMonitorParticlePtPDGV0::AliFemtoCutMonitorParticlePtPDGV0():
15 fPtPDG(0),ftpcHist(0),fPtMostProbable(0),
16 fPtFakeLambdas(0), fFakeProtonDaughters(0), fFakeAntiProtonDaughters(0), fFakePionPlusDaughters(0), fFakePionMinusDaughters(0),
17 //fPtRPi(0),fPtRK(0),fPtRP(0),
18 fPtV0(0), fPtPosProton(0),
24 // Default constructor
27 AliFemtoCutMonitorParticlePtPDGV0::AliFemtoCutMonitorParticlePtPDGV0(const char *aName, float aMass):
29 fPtPDG(0),ftpcHist(0),fPtMostProbable(0),
30 fPtFakeLambdas(0), fFakeProtonDaughters(0), fFakeAntiProtonDaughters(0), fFakePionPlusDaughters(0), fFakePionMinusDaughters(0),
31 //fPtRPi(0),fPtRK(0),fPtRP(0),
32 fPtV0(0), fPtPosProton(0),
40 snprintf(name, 200, "PtPDG%s", aName);
41 fPtPDG = new TH2D(name, "PDG vs Pt", 10, 0.0, 5.0, 8000, -4000, 4000);
42 snprintf(name, 200, "tpcHist%s", aName);
43 ftpcHist=new TH2D(name,"TPC dE/dX vs momentum",100,0.1,2.7,100,0.,6.);
44 snprintf(name, 200, "PtOfV0s%s", aName);
45 fPtMostProbable = new TH1D(name, "Pt of V0s", 250, 0.1, 5.0);
46 snprintf(name, 200, "PtFakeLambdas%s", aName);
47 fPtFakeLambdas = new TH1D(name, "fake lambdas Pt", 250, 0.1, 5.0);
48 snprintf(name, 200, "PtFakePionPlus%s", aName);
49 fFakePionPlusDaughters = new TH1D(name, "fake pion+ daughters", 250, 0.1, 5.0);
50 snprintf(name, 200, "PtFakeProtonPlus%s", aName);
51 fFakeProtonDaughters = new TH1D(name, "fake proton daughters", 250, 0.1, 5.0);
52 snprintf(name, 200, "PtFakePionMinus%s", aName);
53 fFakePionMinusDaughters = new TH1D(name, "fake pion- daughters", 250, 0.1, 5.0);
54 snprintf(name, 200, "PtFakeProtonPlus%s", aName);
55 fFakeAntiProtonDaughters = new TH1D(name, "fake anti-proton daughters", 250, 0.1, 5.0);
59 // fPtRPi = new TH1D(name, "right pdg pions Pt", 250, 0.1, 5.0);
60 // snprintf(name, 200, "PtFakeK%s", aName);
61 // snprintf(name, 200, "PtRK%s", aName);
62 // fPtRK = new TH1D(name, "right pdg kaons Pt",
63 // snprintf(name, 200, "PtRP%s", aName);
64 // fPtRP = new TH1D(name, "right pdg protons Pt", 250, 0.1, 5.0);
66 snprintf(name, 200, "PtRealLambdas%s", aName);
67 fPtV0 = new TH1D(name, "Pt of real Lambdas in the sample", 250, 0.1, 5.0);
68 snprintf(name, 200, "PtRealPosP%s", aName);
69 fPtPosProton = new TH1D(name, "Pt of real protons in the sample", 250, 0.1, 5.0);
70 snprintf(name, 200, "PtRealNegP%s", aName);
71 fPtNegProton = new TH1D(name, "Pt of real antiprotons in the sample", 250, 0.1, 5.0);
72 snprintf(name, 200, "PtRealPosPi%s", aName);
73 fPtPosPion = new TH1D(name, "Pt of real pion+ in the sample", 250, 0.1, 5.0);
74 snprintf(name, 200, "PtRealNegPi%s", aName);
75 fPtNegPion = new TH1D(name, "Pt of real pion- in the sample", 250, 0.1, 5.0);
79 AliFemtoCutMonitorParticlePtPDGV0::AliFemtoCutMonitorParticlePtPDGV0(const AliFemtoCutMonitorParticlePtPDGV0 &aCut):
81 fPtPDG(0),ftpcHist(0),fPtMostProbable(0),
82 fPtFakeLambdas(0), fFakeProtonDaughters(0), fFakeAntiProtonDaughters(0), fFakePionPlusDaughters(0), fFakePionMinusDaughters(0),
83 //fPtRPi(0),fPtRK(0),fPtRP(0),
84 fPtV0(0), fPtPosProton(0),
91 if (fPtPDG) delete fPtPDG;
92 fPtPDG = new TH2D(*aCut.fPtPDG);
93 ftpcHist= new TH2D(*aCut.ftpcHist);
94 fPtMostProbable= new TH1D(*aCut.fPtMostProbable);
95 fPtFakeLambdas= new TH1D(*aCut.fPtFakeLambdas);
96 fFakeProtonDaughters= new TH1D(*aCut.fFakeProtonDaughters);
97 fFakeAntiProtonDaughters= new TH1D(*aCut.fFakeAntiProtonDaughters);
98 fFakePionPlusDaughters= new TH1D(*aCut.fFakePionPlusDaughters);
99 fFakePionMinusDaughters= new TH1D(*aCut.fFakePionMinusDaughters);
101 // fPtRPi= new TH1D(*aCut.fPtRPi);
102 // fPtRK= new TH1D(*aCut.fPtRK);
103 // fPtRP= new TH1D(*aCut.fPtRP);
108 fPtV0= new TH1D(*aCut.fPtV0);
109 fPtPosProton= new TH1D(*aCut.fPtPosProton);
110 fPtNegProton= new TH1D(*aCut.fPtNegProton);
111 fPtPosPion= new TH1D(*aCut.fPtPosPion);
112 fPtNegPion= new TH1D(*aCut.fPtNegPion);
117 AliFemtoCutMonitorParticlePtPDGV0::~AliFemtoCutMonitorParticlePtPDGV0()
122 delete fPtMostProbable;
127 delete fPtFakeLambdas;
128 delete fFakeProtonDaughters;
129 delete fFakePionPlusDaughters;
130 delete fFakeAntiProtonDaughters;
131 delete fFakePionMinusDaughters;
141 AliFemtoCutMonitorParticlePtPDGV0& AliFemtoCutMonitorParticlePtPDGV0::operator=(const AliFemtoCutMonitorParticlePtPDGV0& aCut)
143 // assignment operator
147 if (fPtPDG) delete fPtPDG;
148 fPtPDG = new TH2D(*aCut.fPtPDG);
150 if (ftpcHist) delete ftpcHist;
151 ftpcHist = new TH2D(*aCut.ftpcHist);
153 if (fPtFakeLambdas) delete fPtFakeLambdas;
154 fPtFakeLambdas = new TH1D(*aCut.fPtFakeLambdas);
156 if (fFakeProtonDaughters) delete fFakeProtonDaughters;
157 fFakeProtonDaughters = new TH1D(*aCut.fFakeProtonDaughters);
159 if (fFakeAntiProtonDaughters) delete fFakeAntiProtonDaughters;
160 fFakeAntiProtonDaughters = new TH1D(*aCut.fFakeAntiProtonDaughters);
162 if (fFakePionPlusDaughters) delete fFakePionPlusDaughters;
163 fFakePionPlusDaughters = new TH1D(*aCut.fFakePionPlusDaughters);
165 if (fFakePionMinusDaughters) delete fFakePionMinusDaughters;
166 fFakePionMinusDaughters = new TH1D(*aCut.fFakePionMinusDaughters);
168 // if (fPtRPi) delete fPtRPi;
169 // fPtRPi = new TH1D(*aCut.fPtRPi);
171 // if (fPtRK) delete fPtRK;
172 // fPtRK = new TH1D(*aCut.fPtRK);
174 // if (fPtRP) delete fPtRP;
175 // fPtRP = new TH1D(*aCut.fPtRP);
177 if (fPtV0) delete fPtV0;
178 fPtV0 = new TH1D(*aCut.fPtV0);
180 if (fPtPosProton) delete fPtPosProton;
181 fPtPosProton = new TH1D(*aCut.fPtPosProton);
183 if (fPtNegProton) delete fPtNegProton;
184 fPtNegProton = new TH1D(*aCut.fPtNegProton);
186 if (fPtPosPion) delete fPtPosPion;
187 fPtPosPion = new TH1D(*aCut.fPtPosPion);
189 if (fPtNegPion) delete fPtNegPion;
190 fPtNegPion = new TH1D(*aCut.fPtNegPion);
195 AliFemtoString AliFemtoCutMonitorParticlePtPDGV0::Report(){
196 // Prepare report from the execution
197 string stemp = "*** AliFemtoCutMonitorParticlePtPDGV0 report";
198 AliFemtoString returnThis = stemp;
202 void AliFemtoCutMonitorParticlePtPDGV0::Fill(const AliFemtoV0* aV0)
205 // Fill in the monitor histograms with the values from the current track
206 // float tEnergy = ::sqrt(aV0->P().mag2()+fMass*fMass);
207 // float tRapidity = 0.5*::log((tEnergy+aV0->P().z())/(tEnergy-aV0->P().z()));
208 float tPt = aV0->PtV0();//::sqrt((aV0->P().x())*(aV0->P().x())+(aV0->P().y())*(aV0->P().y()));
209 float tPtPos = aV0->PtPos();
210 float tPtNeg = aV0->PtNeg();
211 // float tEta = -TMath::Log(TMath::Tan(aV0->P().theta()/2.0));
212 // float tPhi = aV0->P().phi();
213 //float tP = ::sqrt((aV0->P().z())*(aV0->P().z())+(aV0->P().x())*(aV0->P().x())+(aV0->P().y())*(aV0->P().y()));;
214 // float dedx = aV0->TPCsignalN();
216 // w[0] = aV0->PidProbElectron();
217 // w[1] = aV0->PidProbMuon();
218 // w[2] = aV0->PidProbPion();
219 // w[3] = aV0->PidProbKaon();
220 // w[4] = aV0->PidProbProton();
222 Int_t pdg1=0, pdgPosDaughter=0, pdgNegDaughter=0;
223 AliFemtoModelHiddenInfo *info = ( AliFemtoModelHiddenInfo *) aV0->GetHiddenInfo();
224 if(info)pdg1 = info->GetPDGPid();
225 if(info)pdgPosDaughter=info->GetPDGPidPos();
226 if(info)pdgNegDaughter=info->GetPDGPidNeg();
229 //most probable particle
230 fPtMostProbable->Fill(tPt);
233 if (abs(pdg1)!=3122)fPtFakeLambdas->Fill(tPt);
234 if (pdgPosDaughter!=2212)fFakeProtonDaughters->Fill(tPtPos);
235 if (pdgPosDaughter!=211)fFakePionPlusDaughters->Fill(tPtPos);
236 if (pdgNegDaughter!=-2212)fFakeAntiProtonDaughters->Fill(tPtNeg);
237 if (pdgNegDaughter!=-211)fFakePionMinusDaughters->Fill(tPtNeg);
240 //spectra of different particle species we've got
241 if (abs(pdg1)==3122)fPtV0->Fill(tPt);
242 if (abs(pdgNegDaughter)==2212)fPtNegProton->Fill(tPtNeg);
243 if (abs(pdgPosDaughter)==2212)fPtPosProton->Fill(tPtPos);
244 if (abs(pdgPosDaughter)==211)fPtPosPion->Fill(tPtPos);
245 if (abs(pdgNegDaughter)==211)fPtNegPion->Fill(tPtNeg);
248 //if(abs(pdg1)==3122)pdg=0.0; //lambda
249 //if(abs(pdg1)==211) pdg=1.0; //pion
250 //if(abs(pdg1)==2212)pdg=2.0; //proton
252 //cout<<"pdg from CutMonitor.."<<pdg1<<"pdg"<<pdg<<endl;
255 fPtPDG->Fill(pdg, tPt);
256 // ftpcHist->Fill(tP,dedx);
261 void AliFemtoCutMonitorParticlePtPDGV0::Write()
263 // Write out the relevant histograms
267 fPtMostProbable->Write();
268 fPtFakeLambdas->Write();
269 fFakeProtonDaughters->Write();
270 fFakePionPlusDaughters->Write();
271 fFakeAntiProtonDaughters->Write();
272 fFakePionMinusDaughters->Write();
277 fPtPosProton->Write();
278 fPtNegProton->Write();
283 TList *AliFemtoCutMonitorParticlePtPDGV0::GetOutputList()
285 TList *tOutputList = new TList();
286 tOutputList->Add(fPtPDG);
287 //tOutputList->Add(ftpcHist);
288 tOutputList->Add(fPtMostProbable);
289 tOutputList->Add(fPtFakeLambdas);
290 tOutputList->Add(fFakeProtonDaughters);
291 tOutputList->Add(fFakePionPlusDaughters);
292 tOutputList->Add(fFakeAntiProtonDaughters);
293 tOutputList->Add(fFakePionMinusDaughters);
295 tOutputList->Add(fPtV0);
296 tOutputList->Add(fPtPosProton);
297 tOutputList->Add(fPtNegProton);
298 tOutputList->Add(fPtPosPion);
299 tOutputList->Add(fPtNegPion);