]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/PiKaPr/TestAOD/AliSpectraAODPID.cxx
Updating configuration for ACORDE and TRD.
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / PiKaPr / TestAOD / AliSpectraAODPID.cxx
CommitLineData
e8b0fe64 1#include "AliSpectraAODPID.h"
2#include "AliAODEvent.h"
3#include "TH1F.h"
4#include "TH2F.h"
5#include "TList.h"
6#include "AliAODTrack.h"
7#include "AliAODMCParticle.h"
8#include "AliPIDResponse.h"
9#include "AliAnalysisManager.h"
10#include "AliInputEventHandler.h"
11#include "AliSpectraAODTrackCuts.h"
12
13ClassImp(AliSpectraAODPID)
14
0e268798 15AliSpectraAODPID::AliSpectraAODPID() : TNamed("PID", "PID object"), fPIDType(kNSigmaTPCTOF), fNSigmaPID(3), fPIDResponse(0) {
e8b0fe64 16
17}
18
0e268798 19AliSpectraAODPID::AliSpectraAODPID(AODPIDType_t pidType) : TNamed("PID", "PID object"), fPIDType(pidType), fNSigmaPID(3), fPIDResponse(0) {
e8b0fe64 20
21
22
23}
24
25
26
27void AliSpectraAODPID::FillQAHistos(AliSpectraAODHistoManager * hman, AliAODTrack * track, AliSpectraAODTrackCuts * trackCuts) {
28
29 // fill a bunch of QA histos
30
31
32 // Get PID response object, if needed
33 if(!fPIDResponse) {
34 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
35 AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
36 fPIDResponse = inputHandler->GetPIDResponse();
37 }
38
39 //Response
40 AliVParticle *inEvHMain = dynamic_cast<AliVParticle *>(track);
3ed78abf 41
e8b0fe64 42 hman->GetPIDHistogram(kHistPIDTPC)->Fill(track->GetTPCmomentum(), track->GetTPCsignal()*track->Charge()); // PID histo
3ed78abf 43 hman->GetPIDHistogram(kHistPIDTPCPion)->Fill(track->GetTPCmomentum(),fPIDResponse->GetTPCResponse().GetExpectedSignal(track->GetTPCmomentum(),AliPID::kPion)*track->Charge()); // Expected PIDPion histo
44 hman->GetPIDHistogram(kHistPIDTPCKaon)->Fill(track->GetTPCmomentum(),fPIDResponse->GetTPCResponse().GetExpectedSignal(track->GetTPCmomentum(),AliPID::kKaon)*track->Charge()); // Expected PIDKaon histo
45 hman->GetPIDHistogram(kHistPIDTPCProton)->Fill(track->GetTPCmomentum(),fPIDResponse->GetTPCResponse().GetExpectedSignal(track->GetTPCmomentum(),AliPID::kProton)*track->Charge()); // Expected PIDProton histo
46
e8b0fe64 47 Double_t nsigmaTPCkProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kProton));
48 Double_t nsigmaTPCkKaon = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kKaon));
49 Double_t nsigmaTPCkPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kPion));
50 Double_t nsigmaTOFkProton=0,nsigmaTOFkKaon=0,nsigmaTOFkPion=0;
51
52 if(track->Pt()>trackCuts->GetPtTOFMatching()){
53 hman->GetPIDHistogram(kHistPIDTOF)->Fill(track->P(),(track->GetTOFsignal()/100)*track->Charge()); // PID histo
3ed78abf 54
e8b0fe64 55 nsigmaTOFkProton = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton));
56 nsigmaTOFkKaon = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon));
57 nsigmaTOFkPion = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion));
58
59 //TOF
60 hman->GetPtHistogram(kHistNSigProtonTOF)->Fill(track->P(),fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton));
61 hman->GetPtHistogram(kHistNSigKaonTOF)->Fill(track->P(),fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon));
62 hman->GetPtHistogram(kHistNSigPionTOF)->Fill(track->P(),fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion));
63 hman->GetPtHistogram(kHistNSigProtonPtTOF)->Fill(track->Pt(),fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton));
64 hman->GetPtHistogram(kHistNSigKaonPtTOF)->Fill(track->Pt(),fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon));
65 hman->GetPtHistogram(kHistNSigPionPtTOF)->Fill(track->Pt(),fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion));
66 }
67
6fe873b8 68 Double_t nsigmaTPCTOFkProton = TMath::Sqrt((nsigmaTPCkProton*nsigmaTPCkProton+nsigmaTOFkProton*nsigmaTOFkProton)/2);
69 Double_t nsigmaTPCTOFkKaon = TMath::Sqrt((nsigmaTPCkKaon*nsigmaTPCkKaon+nsigmaTOFkKaon*nsigmaTOFkKaon)/2);
70 Double_t nsigmaTPCTOFkPion = TMath::Sqrt((nsigmaTPCkPion*nsigmaTPCkPion+nsigmaTOFkPion*nsigmaTOFkPion)/2);
e8b0fe64 71
72 //TPC
73 hman->GetPtHistogram(kHistNSigProtonTPC)->Fill(track->P(),fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kProton));
74 hman->GetPtHistogram(kHistNSigKaonTPC)->Fill(track->P(),fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kKaon));
75 hman->GetPtHistogram(kHistNSigPionTPC)->Fill(track->P(),fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kPion));
76 hman->GetPtHistogram(kHistNSigProtonPtTPC)->Fill(track->Pt(),fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kProton));
77 hman->GetPtHistogram(kHistNSigKaonPtTPC)->Fill(track->Pt(),fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kKaon));
78 hman->GetPtHistogram(kHistNSigPionPtTPC)->Fill(track->Pt(),fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kPion));
79 //TPCTOF
80 hman->GetPtHistogram(kHistNSigProtonTPCTOF)->Fill(track->P(),nsigmaTPCTOFkProton);
81 hman->GetPtHistogram(kHistNSigKaonTPCTOF)->Fill(track->P(),nsigmaTPCTOFkKaon);
82 hman->GetPtHistogram(kHistNSigPionTPCTOF)->Fill(track->P(),nsigmaTPCTOFkPion);
83 hman->GetPtHistogram(kHistNSigProtonPtTPCTOF)->Fill(track->Pt(),nsigmaTPCTOFkProton);
84 hman->GetPtHistogram(kHistNSigKaonPtTPCTOF)->Fill(track->Pt(),nsigmaTPCTOFkKaon);
85 hman->GetPtHistogram(kHistNSigPionPtTPCTOF)->Fill(track->Pt(),nsigmaTPCTOFkPion);
86
87}
88
89Int_t AliSpectraAODPID::GetParticleSpecie(AliAODMCParticle * part) {
90 // return PID according to MC truth
91 switch(TMath::Abs(part->PdgCode())){
92 case 2212:
93 return kSpProton;
94 break;
95 case 321:
96 return kSpKaon;
97 break;
98 case 211:
99 return kSpPion;
100 break;
101 default:
102 return kSpUndefined;
103 }
104}
105
106
972a21ad 107Int_t AliSpectraAODPID::GetParticleSpecie(AliSpectraAODHistoManager * hman,AliAODTrack * trk, AliSpectraAODTrackCuts * trackCuts) {
e8b0fe64 108 // return PID according to detectors
109
110 // Get PID response object, if needed
111 if(!fPIDResponse) {
112 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
113 AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
114 fPIDResponse = inputHandler->GetPIDResponse();
115 }
116
117 if(!fPIDResponse) {
118 AliFatal("Cannot get pid response");
119 return 0;
120 }
121
122
123 // Compute nsigma for each hypthesis
124 AliVParticle *inEvHMain = dynamic_cast<AliVParticle *>(trk);
125
126 // --- TPC
127 Double_t nsigmaTPCkProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kProton));
128 Double_t nsigmaTPCkKaon = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kKaon));
129 Double_t nsigmaTPCkPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(inEvHMain, AliPID::kPion));
130 // --- TOF
131 Double_t nsigmaTOFkProton=0,nsigmaTOFkKaon=0,nsigmaTOFkPion=0;
132 if(trk->Pt()>trackCuts->GetPtTOFMatching()){
133 nsigmaTOFkProton = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kProton));
134 nsigmaTOFkKaon = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kKaon));
135 nsigmaTOFkPion = TMath::Abs(fPIDResponse->NumberOfSigmasTOF(inEvHMain, AliPID::kPion));
136 }
137
138 // --- combined
ae0fdd7d 139 Double_t nsigmaTPCTOFkProton = TMath::Sqrt((nsigmaTPCkProton*nsigmaTPCkProton+nsigmaTOFkProton*nsigmaTOFkProton)/2.);
140 Double_t nsigmaTPCTOFkKaon = TMath::Sqrt((nsigmaTPCkKaon*nsigmaTPCkKaon+nsigmaTOFkKaon*nsigmaTOFkKaon)/2.);
141 Double_t nsigmaTPCTOFkPion = TMath::Sqrt((nsigmaTPCkPion*nsigmaTPCkPion+nsigmaTOFkPion*nsigmaTOFkPion)/2.);
e8b0fe64 142
143
144 // select the nsigma to be used for the actual PID
0eeb2f95 145 Double_t nsigmaPion=0, nsigmaKaon=0, nsigmaProton=0;
e8b0fe64 146
147 switch (fPIDType) {
148 case kNSigmaTPC:
149 nsigmaProton = nsigmaTPCkProton;
150 nsigmaKaon = nsigmaTPCkKaon ;
151 nsigmaPion = nsigmaTPCkPion ;
152 break;
153 case kNSigmaTOF:
154 nsigmaProton = nsigmaTOFkProton;
155 nsigmaKaon = nsigmaTOFkKaon ;
156 nsigmaPion = nsigmaTOFkPion ;
157 break;
158 case kNSigmaTPCTOF:
159 nsigmaProton = nsigmaTPCTOFkProton;
160 nsigmaKaon = nsigmaTPCTOFkKaon ;
161 nsigmaPion = nsigmaTPCTOFkPion ;
162 break;
163 }
164
165 // guess the particle based on the smaller nsigma
b150ea7e 166 if( ( nsigmaKaon==nsigmaPion ) && ( nsigmaKaon==nsigmaProton )) return kSpUndefined;//if is the default value for the three
972a21ad 167 if( ( nsigmaKaon < nsigmaPion ) && ( nsigmaKaon < nsigmaProton ) && (nsigmaKaon < fNSigmaPID)){
168 hman->GetPIDHistogram(kHistPIDTPCKaonRec)->Fill(trk->GetTPCmomentum(), trk->GetTPCsignal()*trk->Charge()); // Reconstructed PIDKaon histo
169 return kSpKaon;
170 }
171 if( ( nsigmaPion < nsigmaKaon ) && ( nsigmaPion < nsigmaProton ) && (nsigmaPion < fNSigmaPID)){
172 hman->GetPIDHistogram(kHistPIDTPCPionRec)->Fill(trk->GetTPCmomentum(), trk->GetTPCsignal()*trk->Charge()); // Reconstructed PIDPion histo
173 return kSpPion;
174 }
175 if( ( nsigmaProton < nsigmaKaon ) && ( nsigmaProton < nsigmaPion ) && (nsigmaProton < fNSigmaPID)){
176 hman->GetPIDHistogram(kHistPIDTPCProtonRec)->Fill(trk->GetTPCmomentum(), trk->GetTPCsignal()*trk->Charge()); // Reconstructed PIDProton histo
177 return kSpProton;
178 }
e8b0fe64 179 // else, return undefined
180 return kSpUndefined;
181
182}
0e268798 183
184Long64_t AliSpectraAODPID::Merge(TCollection* list)
185{
186 // Merging interface.
187 // Returns the number of merged objects (including this).
188
189 Printf("Merging");
190
191 if (!list)
192 return 0;
193
194 if (list->IsEmpty())
195 return 1;
196
197 TIterator* iter = list->MakeIterator();
198 TObject* obj;
199
200 // Actually, we don't do anything here...
201 // collections of all histograms
202 // TList collections;
203
204 Int_t count = 0;
205
206 while ((obj = iter->Next())) {
207 AliSpectraAODPID* entry = dynamic_cast<AliSpectraAODPID*> (obj);
208 if (entry == 0)
209 continue;
210
211 // TH1I * histo = entry->GetHistoCuts();
212 // collections.Add(histo);
213 count++;
214 }
215
216 // fHistoCuts->Merge(&collections);
217
218 delete iter;
219 Printf("OK");
220 return count+1;
221}
222