]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/Correlations/DPhi/TriggerPID/AliTwoParticlePIDCorr.h
Updates in Two particle PID corr
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / TriggerPID / AliTwoParticlePIDCorr.h
CommitLineData
59bf0a70 1#ifndef ALITWOPARTICLEPIDCORR_H
2#define ALITWOPARTICLEPIDCORR_H
3
4#include "THn.h" // in cxx file causes .../THn.h:257: error: conflicting declaration ‘typedef class THnT<float> THnF’
5
6
7class TH1F;
8class TH2F;
9class TH3F;
10class THnSparse;
11class TString;
12class TList;
13//class AliESDtrackCuts;
14class TSeqCollection;
15class AliPIDResponse;
16class AliAODEvent;
17class AliAODTrack;
18class AliAODVertex;
19class AliEventPoolManager;
20class TFormula;
63818f52 21//class AliAnalysisUtils;
59bf0a70 22class LRCParticlePID;
23class AliVParticle;
24
25
26#include <TObject.h> //LRCParticlePID is a derived class from"TObject"
27#include "TMath.h"
28#include "TNamed.h"
29#include "AliUEHist.h"
30#include "AliPID.h"
31#include "AliAnalysisTask.h"
32#include "AliUEHist.h"
33#include "TString.h"
34#include "AliVParticle.h"
35#include "TParticle.h"
36#include "AliLog.h"
37
38
39#ifndef ALIANALYSISTASKSE_H
40#include "AliAnalysisTaskSE.h"
41#endif
42
43namespace AliPIDNameSpace {
44
45 enum PIDType
46 {
47 NSigmaTPC = 0,
48 NSigmaTOF,
49 NSigmaTPCTOF, // squared sum
50 NSigmaPIDType=NSigmaTPCTOF
51 };
52
53 enum AliDetectorType
54 {
55 TPC = 0,
56 TOF,
57 NDetectors
58 };
59
60
61 enum AliParticleSpecies
62 {
63 SpPion = 0,
64 SpKaon,
65 SpProton,
f2fc55fd 66 unidentified,
67 NSpecies=unidentified,
59bf0a70 68 SpUndefined=999
69 }; // Particle species used in plotting
70
71
72 enum AliCharge
73 {
74 Posch = 0,
75 Negch,
76 NCharge
77 };
78}
79
80
81using namespace AliPIDNameSpace;
82
83class AliTwoParticlePIDCorr : public AliAnalysisTaskSE {
84 public:
85 AliTwoParticlePIDCorr();
86 AliTwoParticlePIDCorr(const char *name);
87 virtual ~AliTwoParticlePIDCorr();
88
89 virtual void UserCreateOutputObjects();
90 virtual void UserExec(Option_t *option);
91 virtual void doAODevent();
92 virtual void doMCAODevent();
93 virtual void Terminate(Option_t *);
ef349d3c 94 void SetSharedClusterCut(Double_t value) { fSharedClusterCut = value; }
95
bb0bbd58 96 void SetVertextype(Int_t Vertextype){fVertextype=Vertextype;} //Check it every time
ef349d3c 97 void SetZvtxcut(Double_t zvtxcut) {fzvtxcut=zvtxcut;}
f2fc55fd 98 void SetCustomBinning(TString receivedCustomBinning) { fCustomBinning = receivedCustomBinning; }
99 void SetAsymmetricBin(THnSparse *h,Int_t axisno,Double_t *arraybin,Int_t arraybinsize,TString axisTitle);
bb0bbd58 100 void SetMaxNofMixingTracks(Int_t MaxNofMixingTracks) {fMaxNofMixingTracks=MaxNofMixingTracks;} //Check it every time
f2fc55fd 101 void SetCentralityEstimator(TString CentralityMethod) { fCentralityMethod = CentralityMethod;}
102 void SetSampleType(TString SampleType) {fSampleType=SampleType;}
103 void SetAnalysisType(TString AnalysisType){fAnalysisType=AnalysisType;}
104 void SetFilterBit(Int_t FilterBit) {fFilterBit=FilterBit;}
105 void SetfilltrigassoUNID(Bool_t filltrigassoUNID){ffilltrigassoUNID=filltrigassoUNID;}
106 void SetfilltrigUNIDassoID(Bool_t filltrigUNIDassoID){ffilltrigUNIDassoID=filltrigUNIDassoID;}
107 void SetfilltrigIDassoUNID(Bool_t filltrigIDassoUNID){ffilltrigIDassoUNID=filltrigIDassoUNID;}
108 void SetfilltrigIDassoID(Bool_t filltrigIDassoID){ ffilltrigIDassoID=filltrigIDassoID;}
109 void SetfilltrigIDassoIDMCTRUTH(Bool_t filltrigIDassoIDMCTRUTH){ffilltrigIDassoIDMCTRUTH=filltrigIDassoIDMCTRUTH;}
ef349d3c 110 void SetSelectHighestPtTrig(Bool_t SelectHighestPtTrig){fSelectHighestPtTrig=SelectHighestPtTrig;}
f2fc55fd 111 void SetTriggerSpeciesSelection(Bool_t TriggerSpeciesSelection,Int_t TriggerSpecies,Bool_t containPIDtrig){
112 fTriggerSpeciesSelection=TriggerSpeciesSelection;//if it is KTRUE then Set containPIDtrig=kFALSE
113 fTriggerSpecies=TriggerSpecies;
114 fcontainPIDtrig=containPIDtrig;
115 }
116 void SetAssociatedSpeciesSelection(Bool_t AssociatedSpeciesSelection,Int_t AssociatedSpecies, Bool_t containPIDasso)
117 {
118 fAssociatedSpeciesSelection=AssociatedSpeciesSelection;//if it is KTRUE then Set containPIDasso=kFALSE
119 fAssociatedSpecies=AssociatedSpecies;
120 fcontainPIDasso=containPIDasso;
121 }
63818f52 122 // void SetRejectPileUp(Bool_t rejectPileUp) {frejectPileUp=rejectPileUp;}
f2fc55fd 123 void SetKinematicCuts(Float_t minPt, Float_t maxPt,Float_t mineta,Float_t maxeta)
124 {
125 fminPt=minPt;
126 fmaxPt=maxPt;
127 fmineta=mineta;
128 fmaxeta=maxeta;
129 }
130 void SetAsymmetricnSigmaCut( Float_t minprotonsigmacut,Float_t maxprotonsigmacut,Float_t minpionsigmacut,Float_t maxpionsigmacut)
131 {
132 fminprotonsigmacut=minprotonsigmacut;
133 fmaxprotonsigmacut=maxprotonsigmacut;
134 fminpionsigmacut=minpionsigmacut;
135 fmaxpionsigmacut=maxpionsigmacut;
136 }
137 void SetDcaCut(Bool_t dcacut,Double_t dcacutvalue)
138 {
139 fdcacut=dcacut;
140 fdcacutvalue=dcacutvalue;
141 }
63818f52
MW
142 void SetfillHistQA(Bool_t fillhistQAReco,Bool_t fillhistQATruth)
143 {
144 ffillhistQAReco=fillhistQAReco;
145 ffillhistQATruth=fillhistQATruth;
146 }
c2c6819a
MW
147 void Setselectprimarydatareco(Bool_t onlyprimarydatareco) {fonlyprimarydatareco=onlyprimarydatareco;}
148 void SetselectprimaryTruth(Bool_t selectprimaryTruth) {fselectprimaryTruth=selectprimaryTruth;}
f2fc55fd 149 void SetCombinedNSigmaCut(Double_t NSigmaPID) {fNSigmaPID=NSigmaPID;}
150 void IgnoreoverlappedTracks(Bool_t UseExclusiveNSigma){fUseExclusiveNSigma=UseExclusiveNSigma;}
151 void SetRemoveTracksT0Fill( Bool_t RemoveTracksT0Fill){fRemoveTracksT0Fill=RemoveTracksT0Fill;}
152 void SetPairSelectCharge(Int_t SelectCharge){fSelectCharge=SelectCharge;}
153 void SetTrigAssoSelectcharge( Int_t TriggerSelectCharge,Int_t AssociatedSelectCharge)
154 {
155 fTriggerSelectCharge=TriggerSelectCharge;
156 fAssociatedSelectCharge=AssociatedSelectCharge;
157 }
158 void SetEtaOrdering(Bool_t EtaOrdering){fEtaOrdering=EtaOrdering;}
159 void SetCutConversionsResonances( Bool_t CutConversions,Bool_t CutResonances)
160 {
161 fCutConversions=CutConversions;
162 fCutResonances=CutResonances;
163 }
164 void SetCleanUp(Bool_t InjectedSignals,Bool_t RemoveWeakDecays,Bool_t RemoveDuplicates)
165 {
166 fInjectedSignals=InjectedSignals;
167 fRemoveWeakDecays=RemoveWeakDecays;
168 fRemoveDuplicates=RemoveDuplicates;
169 }
c2c6819a 170 void SetEfficiency(Bool_t fillefficiency,Bool_t applyTrigefficiency,Bool_t applyAssoefficiency)
f2fc55fd 171 {
172 ffillefficiency=fillefficiency;
c2c6819a
MW
173 fapplyTrigefficiency=applyTrigefficiency;
174 fapplyAssoefficiency=applyAssoefficiency;
175
f2fc55fd 176 }
c2c6819a
MW
177 void SetComboeffPtRange(Double_t minPtComboeff,Double_t maxPtComboeff) {
178 fminPtComboeff=minPtComboeff;
179 fmaxPtComboeff=maxPtComboeff;}
180 //only one can be kTRUE at a time(for the next two Setters)
181 void Setmesoneffrequired(Bool_t mesoneffrequired) {fmesoneffrequired=mesoneffrequired;}
182 void Setkaonprotoneffrequired(Bool_t kaonprotoneffrequired){fkaonprotoneffrequired=kaonprotoneffrequired;}
f2fc55fd 183 void SetOnlyOneEtaSide(Int_t OnlyOneEtaSide){fOnlyOneEtaSide=OnlyOneEtaSide;}
184 void SetRejectResonanceDaughters(Int_t RejectResonanceDaughters){fRejectResonanceDaughters=RejectResonanceDaughters;}
185
186void SetTOFPIDVal(Bool_t RequestTOFPID,Float_t PtTOFPIDmin,Float_t PtTOFPIDmax)
187 {
188fRequestTOFPID=RequestTOFPID;
189fPtTOFPIDmin=PtTOFPIDmin;
190fPtTOFPIDmax=PtTOFPIDmax;
191}
59bf0a70 192
970080e0 193 void SetEffcorectionfilePathName(TString efffilename) {fefffilename=efffilename;}
194
59bf0a70 195 private:
196 //histograms
197 TList *fOutput; //! Output list
f2fc55fd 198 TString fCentralityMethod; // Method to determine centrality
199 TString fSampleType; // pp,p-Pb,Pb-Pb
200 Int_t fnTracksVertex; // QA tracks pointing to principal vertex
91a5dc10 201 AliAODVertex* trkVtx;//!
f2fc55fd 202 Float_t zvtx;
203 Int_t fFilterBit; // track selection cuts
ef349d3c 204 Double_t fSharedClusterCut; // cut on shared clusters (only for AOD)
205 Int_t fVertextype;
f2fc55fd 206 Double_t fzvtxcut;
207 Bool_t ffilltrigassoUNID;
208 Bool_t ffilltrigUNIDassoID;
209 Bool_t ffilltrigIDassoUNID;
210 Bool_t ffilltrigIDassoID;
211 Bool_t ffilltrigIDassoIDMCTRUTH;
ef349d3c 212 Int_t fMaxNofMixingTracks;
f2fc55fd 213 Bool_t fPtOrderMCTruth;
214 Bool_t fTriggerSpeciesSelection;
215 Bool_t fAssociatedSpeciesSelection;
216 Int_t fTriggerSpecies;
217 Int_t fAssociatedSpecies;
c2c6819a
MW
218 TString fCustomBinning;//for setting customized binning
219 TString fBinningString;//final binning string
ef349d3c 220 Bool_t fSelectHighestPtTrig;
c2c6819a
MW
221 Bool_t fcontainPIDtrig;
222 Bool_t fcontainPIDasso;
63818f52 223 // Bool_t frejectPileUp;
f2fc55fd 224 Float_t fminPt;
225 Float_t fmaxPt;
226 Float_t fmineta;
227 Float_t fmaxeta;
228 Float_t fminprotonsigmacut;
229 Float_t fmaxprotonsigmacut;
230 Float_t fminpionsigmacut;
231 Float_t fmaxpionsigmacut;
232 Bool_t fselectprimaryTruth;
c2c6819a 233 Bool_t fonlyprimarydatareco;
f2fc55fd 234 Bool_t fdcacut;
235 Double_t fdcacutvalue;
63818f52
MW
236 Bool_t ffillhistQAReco;
237 Bool_t ffillhistQATruth;
f2fc55fd 238 Int_t kTrackVariablesPair ;
239 Double_t fminPtTrig;
240 Double_t fmaxPtTrig;
c2c6819a
MW
241 Double_t fminPtComboeff;
242 Double_t fmaxPtComboeff;
f2fc55fd 243 Double_t fminPtAsso;
244 Double_t fmaxPtAsso;
59bf0a70 245 TH1F *fhistcentrality;//!
246 TH1F *fEventCounter; //!
247 TH2F *fEtaSpectrasso;//!
248 TH2F *fphiSpectraasso;//!
f2fc55fd 249 TH1F *MCtruthpt;//!
250 TH1F *MCtrutheta;//!
251 TH1F *MCtruthphi;//!
252 TH1F *MCtruthpionpt;//!
253 TH1F *MCtruthpioneta;//!
254 TH1F *MCtruthpionphi;//!
255 TH1F *MCtruthkaonpt;//!
256 TH1F *MCtruthkaoneta;//!
257 TH1F *MCtruthkaonphi;//!
258 TH1F *MCtruthprotonpt;//!
259 TH1F *MCtruthprotoneta;//!
260 TH1F *MCtruthprotonphi;//!
261 TH2F *fPioncont;//!
262 TH2F *fKaoncont;//!
263 TH2F *fProtoncont;//!
264
265 TH2D* fCentralityCorrelation; //! centrality vs multiplicity
59bf0a70 266
267 TH2F *fHistoTPCdEdx;//!
268 TH2F *fHistoTOFbeta;//!
c2c6819a
MW
269 TH3F *fTPCTOFPion3d;//!
270 TH3F *fTPCTOFKaon3d;//!
271 TH3F *fTPCTOFProton3d;//!
91a5dc10
LM
272 TH1F *fPionPt;//!
273 TH1F *fPionEta;//!
274 TH1F *fPionPhi;//!
275 TH1F *fKaonPt;//!
276 TH1F *fKaonEta;//!
277 TH1F *fKaonPhi;//!
278 TH1F *fProtonPt;//!
279 TH1F *fProtonEta;//!
280 TH1F *fProtonPhi;//!
59bf0a70 281 // TH3F *fHistocentNSigmaTPC;//! nsigma TPC
282 // TH3F *fHistocentNSigmaTOF;//! nsigma TOF
f2fc55fd 283
284 THnSparse *fCorrelatonTruthPrimary;//!
285 THnSparse *fCorrelatonTruthPrimarymix;//!
286 THnSparse *fTHnCorrUNID;//!
287 THnSparse *fTHnCorrUNIDmix;//!
288 THnSparse *fTHnCorrID;//!
289 THnSparse *fTHnCorrIDmix;//!
290 THnSparse *fTHnCorrIDUNID;//!
291 THnSparse *fTHnCorrIDUNIDmix;//!
292 THnSparse *fTHnTrigcount;//!
293 THnSparse *fTHnTrigcountMCTruthPrim;//!
59bf0a70 294
59bf0a70 295
f2fc55fd 296 TH1F *fHistQA[16]; //!
297
91a5dc10
LM
298 THnSparse *fTHnrecomatchedallPid[6];//! //0 pion, 1 kaon,2 proton,3 mesons,4 kaons+protons,5 all
299 THnSparse *fTHngenprimPidTruth[6];//!
300 THnSparse *effcorection[6];//!
f2fc55fd 301 // THnF *effmap[6];
59bf0a70 302 //TH2F* fControlConvResoncances; //! control histograms for cuts on conversions and resonances
303
c2c6819a 304 Int_t ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield);
f2fc55fd 305 Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins);
59bf0a70 306
59bf0a70 307
ef349d3c 308 void Fillcorrelation(TObjArray *trackstrig,TObjArray *tracksasso,Double_t cent,Float_t vtx,Float_t weight,Float_t bSign,Bool_t fPtOrder,Bool_t twoTrackEfficiencyCut,Bool_t mixcase,TString fillup);//mixcase=kTRUE in case of mixing;
c2c6819a 309 Float_t GetTrackbyTrackeffvalue(AliAODTrack* track,Double_t cent,Float_t evzvtx, Int_t parpid);
59bf0a70 310
311//Mixing functions
312 void DefineEventPool();
91a5dc10 313 // AliAnalysisUtils *fUtils;
59bf0a70 314 AliEventPoolManager *fPoolMgr;//!
315 TClonesArray *fArrayMC;//!
91a5dc10
LM
316 TString fAnalysisType; // "MC", "ESD", "AOD"
317 TString fefffilename;
59bf0a70 318
319 //PID part histograms
320
321 //PID functions
322 Bool_t HasTPCPID(AliAODTrack *track) const; // has TPC PID
323 Bool_t HasTOFPID(AliAODTrack *track) const; // has TOF PID
bb0bbd58 324 Double_t GetBeta(AliAODTrack *track);
f2fc55fd 325 void CalculateNSigmas(AliAODTrack *track);
59bf0a70 326 Int_t FindMinNSigma(AliAODTrack *track);
327 Bool_t* GetDoubleCounting(AliAODTrack * trk);
f2fc55fd 328 Int_t GetParticle(AliAODTrack * trk);
59bf0a70 329
330
331
332 Float_t twoTrackEfficiencyCutValue;
333 //Pid objects
334 AliPIDResponse *fPID; //! PID
335 Int_t eventno;
f2fc55fd 336 Float_t fPtTOFPIDmin; //lower pt bound for the TOCTOF combined circular pid
337 Float_t fPtTOFPIDmax; //uper pt bound for the TOCTOF combined circular pid
59bf0a70 338 Bool_t fRequestTOFPID;//if true returns kSpUndefined if the TOF signal is missing
339 PIDType fPIDType; // PID type Double_t fNSigmaPID; // number of sigma for PID cut
340 Double_t fNSigmaPID; // number of sigma for PID cut
59bf0a70 341 Bool_t fUseExclusiveNSigma;//if true returns the identity only if no double counting(i.e not in the overlap area)
342 Bool_t fRemoveTracksT0Fill;//if true remove tracks for which only StartTime from To-Fill is available (worst resolution)
343 Int_t fSelectCharge; // (un)like sign selection when building correlations: 0: no selection; 1: unlike sign; 2: like sign
344 Int_t fTriggerSelectCharge; // select charge of trigger particle: 1: positive; -1 negative
345 Int_t fAssociatedSelectCharge; // select charge of associated particle: 1: positive; -1 negative
346 Float_t fTriggerRestrictEta; // restrict eta range for trigger particle (default: -1 [off])
347 Bool_t fEtaOrdering; // eta ordering, see AliUEHistograms.h for documentation
348 Bool_t fCutConversions; // cut on conversions (inv mass)
349 Bool_t fCutResonances; // cut on resonances (inv mass)
350 Int_t fRejectResonanceDaughters; // reject all daughters of all resonance candidates (1: test method (cut at m_inv=0.9); 2: k0; 3: lambda)
f2fc55fd 351 Int_t fOnlyOneEtaSide; // decides that only trigger particle from one eta side are considered (0 = all; -1 = negative, 1 = positive)
352 Bool_t fInjectedSignals; // check header to skip injected signals in MC
59bf0a70 353 Bool_t fRemoveWeakDecays; // remove secondaries from weak decays from tracks and particles
354 Bool_t fRemoveDuplicates;// remove particles with the same label (double reconstruction)
c2c6819a
MW
355 Bool_t fapplyTrigefficiency;//if kTRUE then eff correction calculation starts
356 Bool_t fapplyAssoefficiency;//if kTRUE then eff correction calculation starts
f2fc55fd 357 Bool_t ffillefficiency;//if kTRUE then THNsparses used for eff. calculation are filled up
c2c6819a
MW
358 Bool_t fmesoneffrequired;
359 Bool_t fkaonprotoneffrequired;
63818f52 360 // AliAnalysisUtils* fAnalysisUtils; // points to class with common analysis utilities
59bf0a70 361 TFormula* fDCAXYCut; // additional pt dependent cut on DCA XY (only for AOD)
362
363
364 Float_t fnsigmas[NSpecies][NSigmaPIDType+1]; //nsigma values
365 Bool_t fHasDoubleCounting[NSpecies];//array with compatible identities
366
367 //Int_t fPIDMethod; // PID method
368
369 //functions
370 Float_t PhiRange(Float_t DPhi);
371 Float_t GetInvMassSquared(Float_t pt1, Float_t eta1, Float_t phi1, Float_t pt2, Float_t eta2, Float_t phi2, Float_t m0_1, Float_t m0_2);
372Float_t GetInvMassSquaredCheap(Float_t pt1, Float_t eta1, Float_t phi1, Float_t pt2, Float_t eta2, Float_t phi2, Float_t m0_1, Float_t m0_2);
373 Float_t GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign);
f2fc55fd 374 TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
59bf0a70 375
376
377 AliTwoParticlePIDCorr(const AliTwoParticlePIDCorr&); // not implemented
378 AliTwoParticlePIDCorr& operator=(const AliTwoParticlePIDCorr&); // not implemented
379
380 ClassDef(AliTwoParticlePIDCorr, 1); // example of analysis
381};
382class LRCParticlePID : public TObject {
383public:
f2fc55fd 384 LRCParticlePID(Int_t par,Short_t icharge,Float_t pt,Float_t eta, Float_t phi,Float_t effcorrectionval)
385 :fparticle(par),fcharge(icharge),fPt(pt), fEta(eta), fPhi(phi),feffcorrectionval(effcorrectionval) {}
59bf0a70 386 virtual ~LRCParticlePID() {}
387
388
389 virtual Float_t Eta() const { return fEta; }
390 virtual Float_t Phi() const { return fPhi; }
59bf0a70 391 virtual Float_t Pt() const { return fPt; }
392 Int_t getparticle() const {return fparticle;}
393 virtual Short_t Charge() const { return fcharge; }
394 Float_t geteffcorrectionval() const {return feffcorrectionval;}
395 virtual Bool_t IsEqual(const TObject* obj) const { return (obj->GetUniqueID() == GetUniqueID()); }
396
397
398private:
399 LRCParticlePID(const LRCParticlePID&); // not implemented
400 LRCParticlePID& operator=(const LRCParticlePID&); // not implemented
f2fc55fd 401
59bf0a70 402 Int_t fparticle;
403 Short_t fcharge;
404 Float_t fPt;
405 Float_t fEta;
406 Float_t fPhi;
59bf0a70 407 Float_t feffcorrectionval;
408 ClassDef(LRCParticlePID, 1);
409} ;
410
411#endif
412