]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorParticlePID.cxx
added extraction of V0s origin
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoCutMonitorParticlePID.cxx
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
14 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID():
15   fTPCdEdx(0),
16   fTOFParticle(0),
17   fTOFTime(0x0),
18   fTOFNSigma(0),
19   fTPCNSigma(0),
20   fTPCTOFNSigma(0),
21   fTPCvsTOFNSigma(0),
22   fParticleOrigin(0),
23   fParticleId(0)
24 {
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);
34
35 }
36
37 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const char *aName, Int_t aTOFParticle):
38   AliFemtoCutMonitor(),
39   fTPCdEdx(0),
40   fTOFParticle(aTOFParticle),
41   fTOFTime(0x0),
42   fTOFNSigma(0),
43   fTPCNSigma(0),
44   fTPCTOFNSigma(0),
45   fTPCvsTOFNSigma(0),
46   fParticleOrigin(0),
47   fParticleId(0)
48 {
49   // Normal constructor
50   char name[200];
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);
54
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);
57
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);
60
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);
63
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);
66
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);
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);
75 }
76
77 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut):
78   AliFemtoCutMonitor(),
79   fTPCdEdx(0),
80   fTOFParticle(0),
81   fTOFTime(0x0),
82   fTOFNSigma(0),
83   fTPCNSigma(0),
84   fTPCTOFNSigma(0),
85   fTPCvsTOFNSigma(0),
86   fParticleOrigin(0),
87   fParticleId(0)
88
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
97   if (fTOFNSigma) delete fTOFNSigma;
98   fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
99
100   if (fTPCNSigma) delete fTPCNSigma;
101   fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
102
103   if (fTPCTOFNSigma) delete fTPCTOFNSigma;
104   fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
105
106   if (fParticleOrigin) delete fParticleOrigin;
107   fParticleOrigin= new TH1D(*aCut.fParticleOrigin);
108
109   if (fParticleId) delete fParticleId;
110   fParticleId= new TH1D(*aCut.fParticleId);
111 }
112
113 AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID()
114 {
115   // Destructor
116   delete fTPCdEdx;
117   delete fTOFTime;
118   delete fTOFNSigma;
119   delete fTPCNSigma;
120   delete fTPCTOFNSigma;
121   delete fTPCvsTOFNSigma;
122   delete fParticleOrigin;
123   delete fParticleId;
124
125 }
126
127 AliFemtoCutMonitorParticlePID& AliFemtoCutMonitorParticlePID::operator=(const AliFemtoCutMonitorParticlePID& aCut)
128 {
129   // assignment operator
130   if (this == &aCut)
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);
138
139   if(fTOFNSigma) delete fTOFNSigma;
140   fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
141
142   if(fTPCNSigma) delete fTPCNSigma;
143   fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
144
145   if(fTPCTOFNSigma) delete fTPCTOFNSigma;
146   fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
147
148   if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma;
149   fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma);
150
151   if (fParticleOrigin) delete fParticleOrigin;
152   fParticleOrigin= new TH1D(*aCut.fParticleOrigin);
153
154   if (fParticleId) delete fParticleId;
155   fParticleId= new TH1D(*aCut.fParticleId);
156
157   return *this;
158 }
159
160 AliFemtoString AliFemtoCutMonitorParticlePID::Report(){
161   // Prepare report from the execution
162   string stemp = "*** AliFemtoCutMonitorParticlePID report";
163   AliFemtoString returnThis = stemp;
164   return returnThis;
165 }
166
167 void 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
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   }
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());
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
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() ) );
208
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());
212
213
214 }
215
216 void AliFemtoCutMonitorParticlePID::Write()
217 {
218   // Write out the relevant histograms
219   fTPCdEdx->Write();
220   fTOFTime->Write();
221   fTOFNSigma->Write();
222   fTPCNSigma->Write();
223   fTPCTOFNSigma->Write();
224   fTPCvsTOFNSigma->Write();
225   fParticleId->Write();
226   fParticleOrigin->Write();
227 }
228
229 TList *AliFemtoCutMonitorParticlePID::GetOutputList()
230 {
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);
240
241   return tOutputList;
242 }