]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorParticlePID.cxx
35edbfee246eba679f7b6fa89b734af933408df0
[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 {
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);
30
31 }
32
33 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const char *aName, Int_t aTOFParticle):
34   AliFemtoCutMonitor(),
35   fTPCdEdx(0),
36   fTOFParticle(aTOFParticle),
37   fTOFTime(0x0),
38   fTOFNSigma(0),
39   fTPCNSigma(0),
40   fTPCTOFNSigma(0),
41   fTPCvsTOFNSigma(0)
42 {
43   // Normal constructor
44   char name[200];
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);
48
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);
51
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);
54
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);
57
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);
60
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);
63 }
64
65 AliFemtoCutMonitorParticlePID::AliFemtoCutMonitorParticlePID(const AliFemtoCutMonitorParticlePID &aCut):
66   AliFemtoCutMonitor(),
67   fTPCdEdx(0),
68   fTOFParticle(0),
69   fTOFTime(0x0),
70   fTOFNSigma(0),
71   fTPCNSigma(0),
72   fTPCTOFNSigma(0),
73   fTPCvsTOFNSigma(0)
74
75 {
76   // copy constructor
77   if (fTPCdEdx) delete fTPCdEdx;
78   fTPCdEdx = new TH2D(*aCut.fTPCdEdx);
79
80   if (fTOFTime) delete fTOFTime;
81   fTOFTime = new TH2D(*aCut.fTOFTime);
82
83   if (fTOFNSigma) delete fTOFNSigma;
84   fTOFNSigma= new TH2D(*aCut.fTOFNSigma);
85
86   if (fTPCNSigma) delete fTPCNSigma;
87   fTPCNSigma= new TH2D(*aCut.fTPCNSigma);
88
89   if (fTPCTOFNSigma) delete fTPCTOFNSigma;
90   fTPCTOFNSigma= new TH2D(*aCut.fTPCTOFNSigma);
91 }
92
93 AliFemtoCutMonitorParticlePID::~AliFemtoCutMonitorParticlePID()
94 {
95   // Destructor
96   delete fTPCdEdx;
97   delete fTOFTime;
98   delete fTOFNSigma;
99   delete fTPCNSigma;
100   delete fTPCTOFNSigma;
101   delete fTPCvsTOFNSigma;
102
103 }
104
105 AliFemtoCutMonitorParticlePID& AliFemtoCutMonitorParticlePID::operator=(const AliFemtoCutMonitorParticlePID& aCut)
106 {
107   // assignment operator
108   if (this == &aCut)
109     return *this;
110
111   if (fTPCdEdx) delete fTPCdEdx;
112   fTPCdEdx = new TH2D(*aCut.fTPCdEdx);
113
114   if (fTOFTime) delete fTOFTime;
115   fTOFTime = new TH2D(*aCut.fTOFTime);
116
117   if(fTOFNSigma) delete fTOFNSigma;
118   fTOFNSigma = new TH2D(*aCut.fTOFNSigma);
119
120   if(fTPCNSigma) delete fTPCNSigma;
121   fTPCNSigma = new TH2D(*aCut.fTPCNSigma);
122
123   if(fTPCTOFNSigma) delete fTPCTOFNSigma;
124   fTPCTOFNSigma = new TH2D(*aCut.fTPCTOFNSigma);
125
126   if(fTPCvsTOFNSigma) delete fTPCvsTOFNSigma;
127   fTPCvsTOFNSigma = new TH2D(*aCut.fTPCvsTOFNSigma);
128
129   return *this;
130 }
131
132 AliFemtoString AliFemtoCutMonitorParticlePID::Report(){
133   // Prepare report from the execution
134   string stemp = "*** AliFemtoCutMonitorParticlePID report";
135   AliFemtoString returnThis = stemp;
136   return returnThis;
137 }
138
139 void AliFemtoCutMonitorParticlePID::Fill(const AliFemtoTrack* aTrack)
140 {
141   // Fill in the monitor histograms with the values from the current track
142   float tMom = aTrack->P().Mag();
143   float tdEdx = aTrack->TPCsignal();
144   float tTOF = 0.0;
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();
149
150   fTPCdEdx->Fill(tMom, tdEdx);
151   fTOFTime->Fill(tMom, tTOF);
152
153   //  float vp= aTrack->VTOF();
154   //     if (vp > 0.) {
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());
159   // }
160
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());
164
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());
168
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() ) );
172
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());
176
177
178 }
179
180 void AliFemtoCutMonitorParticlePID::Write()
181 {
182   // Write out the relevant histograms
183   fTPCdEdx->Write();
184   fTOFTime->Write();
185   fTOFNSigma->Write();
186   fTPCNSigma->Write();
187   fTPCTOFNSigma->Write();
188   fTPCvsTOFNSigma->Write();
189 }
190
191 TList *AliFemtoCutMonitorParticlePID::GetOutputList()
192 {
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);
200
201   return tOutputList;
202 }