1 #ifndef ALITWOPARTICLEPIDCORR_H
2 #define ALITWOPARTICLEPIDCORR_H
4 #include "THn.h" // in cxx file causes .../THn.h:257: error: conflicting declaration ‘typedef class THnT<float> THnF’
13 //class AliESDtrackCuts;
19 class AliEventPoolManager;
21 class AliAnalysisUtils;
25 class AliCFGridSparse;
30 #include <TObject.h> //LRCParticlePID is a derived class from"TObject"
33 #include "AliUEHist.h"
35 #include "AliAnalysisTask.h"
36 #include "AliUEHist.h"
38 #include "AliVParticle.h"
39 #include "TParticle.h"
45 #ifndef ALIANALYSISTASKSE_H
46 #include "AliAnalysisTaskSE.h"
49 namespace AliPIDNameSpace {
55 NSigmaTPCTOF, // squared sum
56 NSigmaPIDType=NSigmaTPCTOF
68 enum AliParticleSpecies
74 NSpecies=unidentified,
76 }; // Particle species used in plotting
88 using namespace AliPIDNameSpace;
90 class AliTwoParticlePIDCorr : public AliAnalysisTaskSE {
92 AliTwoParticlePIDCorr();
93 AliTwoParticlePIDCorr(const char *name);
94 virtual ~AliTwoParticlePIDCorr();
96 virtual void UserCreateOutputObjects();
97 virtual void UserExec(Option_t *option);
98 virtual void doAODevent();
99 virtual void doMCAODevent();
100 virtual void Terminate(Option_t *);
101 void SetSharedClusterCut(Double_t value) { fSharedClusterCut = value; }
103 void SetVertextype(Int_t Vertextype){fVertextype=Vertextype;} //Check it every time
104 void SetZvtxcut(Double_t zvtxcut) {fzvtxcut=zvtxcut;}
105 void SetCustomBinning(TString receivedCustomBinning) { fCustomBinning = receivedCustomBinning; }
106 void SetMaxNofMixingTracks(Int_t MaxNofMixingTracks) {fMaxNofMixingTracks=MaxNofMixingTracks;} //Check it every time
107 void SetCentralityEstimator(TString CentralityMethod) { fCentralityMethod = CentralityMethod;}
108 void SetSampleType(TString SampleType) {fSampleType=SampleType;}
109 void SetAnalysisType(TString AnalysisType){fAnalysisType=AnalysisType;}
110 void SetFilterBit(Int_t FilterBit) {fFilterBit=FilterBit;}
111 void SetTrackStatus(UInt_t status) { fTrackStatus = status; }
112 void SetfilltrigassoUNID(Bool_t filltrigassoUNID){ffilltrigassoUNID=filltrigassoUNID;}
113 void SetfilltrigUNIDassoID(Bool_t filltrigUNIDassoID){ffilltrigUNIDassoID=filltrigUNIDassoID;}
114 void SetfilltrigIDassoUNID(Bool_t filltrigIDassoUNID){ffilltrigIDassoUNID=filltrigIDassoUNID;}
115 void SetfilltrigIDassoID(Bool_t filltrigIDassoID){ ffilltrigIDassoID=filltrigIDassoID;}
116 void SetfilltrigIDassoIDMCTRUTH(Bool_t filltrigIDassoIDMCTRUTH){ffilltrigIDassoIDMCTRUTH=filltrigIDassoIDMCTRUTH;}
117 void SetSelectHighestPtTrig(Bool_t SelectHighestPtTrig){fSelectHighestPtTrig=SelectHighestPtTrig;}
118 void SetTriggerSpeciesSelection(Bool_t TriggerSpeciesSelection,Int_t TriggerSpecies,Bool_t containPIDtrig){
119 fTriggerSpeciesSelection=TriggerSpeciesSelection;//if it is KTRUE then Set containPIDtrig=kFALSE
120 fTriggerSpecies=TriggerSpecies;
121 fcontainPIDtrig=containPIDtrig;
123 void SetAssociatedSpeciesSelection(Bool_t AssociatedSpeciesSelection,Int_t AssociatedSpecies, Bool_t containPIDasso)
125 fAssociatedSpeciesSelection=AssociatedSpeciesSelection;//if it is KTRUE then Set containPIDasso=kFALSE
126 fAssociatedSpecies=AssociatedSpecies;
127 fcontainPIDasso=containPIDasso;
130 void SetFIllPIDQAHistos(Bool_t FIllPIDQAHistos){fFIllPIDQAHistos=FIllPIDQAHistos;}
131 void SetRejectPileUp(Bool_t rejectPileUp) {frejectPileUp=rejectPileUp;}
132 void SetKinematicCuts(Float_t minPt, Float_t maxPt,Float_t mineta,Float_t maxeta)
139 void SetAsymmetricnSigmaCut( Float_t minprotonsigmacut,Float_t maxprotonsigmacut,Float_t minpionsigmacut,Float_t maxpionsigmacut)
141 fminprotonsigmacut=minprotonsigmacut;
142 fmaxprotonsigmacut=maxprotonsigmacut;
143 fminpionsigmacut=minpionsigmacut;
144 fmaxpionsigmacut=maxpionsigmacut;
146 void SetDcaCut(Bool_t dcacut,Double_t dcacutvalue)
149 fdcacutvalue=dcacutvalue;
151 void SetfillHistQA(Bool_t fillhistQAReco,Bool_t fillhistQATruth)
153 ffillhistQAReco=fillhistQAReco;
154 ffillhistQATruth=fillhistQATruth;
156 void SetPtordering(Bool_t PtOrderDataReco,Bool_t PtOrderMCTruth)
158 fPtOrderDataReco=PtOrderDataReco;
159 fPtOrderMCTruth=PtOrderMCTruth;
161 void SetWeightPerEvent(Bool_t flag) { fWeightPerEvent = flag;}
162 void Setselectprimarydatareco(Bool_t onlyprimarydatareco) {fonlyprimarydatareco=onlyprimarydatareco;}
163 void SetselectprimaryTruth(Bool_t selectprimaryTruth) {fselectprimaryTruth=selectprimaryTruth;}
164 void SetCombinedNSigmaCut(Double_t NSigmaPID) {fNSigmaPID=NSigmaPID;}
165 void IgnoreoverlappedTracks(Bool_t UseExclusiveNSigma){fUseExclusiveNSigma=UseExclusiveNSigma;}
166 void SetRemoveTracksT0Fill( Bool_t RemoveTracksT0Fill){fRemoveTracksT0Fill=RemoveTracksT0Fill;}
167 void SetPairSelectCharge(Int_t SelectCharge){fSelectCharge=SelectCharge;}
168 void SetTrigAssoSelectcharge( Int_t TriggerSelectCharge,Int_t AssociatedSelectCharge)
170 fTriggerSelectCharge=TriggerSelectCharge;
171 fAssociatedSelectCharge=AssociatedSelectCharge;
173 void SetEtaOrdering(Bool_t EtaOrdering){fEtaOrdering=EtaOrdering;}
174 void SetCutConversionsResonances( Bool_t CutConversions,Bool_t CutResonances)
176 fCutConversions=CutConversions;
177 fCutResonances=CutResonances;
179 void SetCleanUp(Bool_t InjectedSignals,Bool_t RemoveWeakDecays,Bool_t RemoveDuplicates)
181 fInjectedSignals=InjectedSignals;
182 fRemoveWeakDecays=RemoveWeakDecays;
183 fRemoveDuplicates=RemoveDuplicates;
185 void SetEfficiency(Bool_t fillefficiency,Bool_t applyTrigefficiency,Bool_t applyAssoefficiency)
187 ffillefficiency=fillefficiency;
188 fapplyTrigefficiency=applyTrigefficiency;
189 fapplyAssoefficiency=applyAssoefficiency;
192 void SetComboeffPtRange(Double_t minPtComboeff,Double_t maxPtComboeff) {
193 fminPtComboeff=minPtComboeff;
194 fmaxPtComboeff=maxPtComboeff;}
195 //only one can be kTRUE at a time(for the next two Setters)
196 void Setmesoneffrequired(Bool_t mesoneffrequired) {fmesoneffrequired=mesoneffrequired;}
197 void Setkaonprotoneffrequired(Bool_t kaonprotoneffrequired){fkaonprotoneffrequired=kaonprotoneffrequired;}
198 void SetOnlyOneEtaSide(Int_t OnlyOneEtaSide){fOnlyOneEtaSide=OnlyOneEtaSide;}
199 void SetRejectResonanceDaughters(Int_t RejectResonanceDaughters){fRejectResonanceDaughters=RejectResonanceDaughters;}
201 void SetTOFPIDVal(Bool_t RequestTOFPID,Float_t PtTOFPIDmin,Float_t PtTOFPIDmax)
203 fRequestTOFPID=RequestTOFPID;
204 fPtTOFPIDmin=PtTOFPIDmin;
205 fPtTOFPIDmax=PtTOFPIDmax;
208 void SetEffcorectionfilePathName(TString efffilename) {fefffilename=efffilename;}
212 TList *fOutput; //! Output list
213 TList *fOutputList; //! Output list
215 TString fCentralityMethod; // Method to determine centrality
216 TString fSampleType; // pp,p-Pb,Pb-Pb
217 Int_t fnTracksVertex; // QA tracks pointing to principal vertex
218 AliAODVertex* trkVtx;//!
220 Int_t fFilterBit; // track selection cuts
221 UInt_t fTrackStatus; // if non-0, the bits set in this variable are required for each track
222 Double_t fSharedClusterCut; // cut on shared clusters (only for AOD)
225 Bool_t ffilltrigassoUNID;
226 Bool_t ffilltrigUNIDassoID;
227 Bool_t ffilltrigIDassoUNID;
228 Bool_t ffilltrigIDassoID;
229 Bool_t ffilltrigIDassoIDMCTRUTH;
230 Int_t fMaxNofMixingTracks;
231 Bool_t fPtOrderMCTruth;
232 Bool_t fPtOrderDataReco;
233 Bool_t fWeightPerEvent;
234 Bool_t fTriggerSpeciesSelection;
235 Bool_t fAssociatedSpeciesSelection;
236 Int_t fTriggerSpecies;
237 Int_t fAssociatedSpecies;
238 TString fCustomBinning;//for setting customized binning
239 TString fBinningString;//final binning string
240 Bool_t fSelectHighestPtTrig;
241 Bool_t fcontainPIDtrig;
242 Bool_t fcontainPIDasso;
243 Bool_t frejectPileUp;
248 Float_t fminprotonsigmacut;
249 Float_t fmaxprotonsigmacut;
250 Float_t fminpionsigmacut;
251 Float_t fmaxpionsigmacut;
252 Bool_t fselectprimaryTruth;
253 Bool_t fonlyprimarydatareco;
255 Double_t fdcacutvalue;
256 Bool_t ffillhistQAReco;
257 Bool_t ffillhistQATruth;
258 Int_t kTrackVariablesPair ;
261 Double_t fminPtComboeff;
262 Double_t fmaxPtComboeff;
265 TH1F *fhistcentrality;//!
266 TH1F *fEventCounter; //!
267 TH2F *fEtaSpectrasso;//!
268 TH2F *fphiSpectraasso;//!
272 TH1F *MCtruthpionpt;//!
273 TH1F *MCtruthpioneta;//!
274 TH1F *MCtruthpionphi;//!
275 TH1F *MCtruthkaonpt;//!
276 TH1F *MCtruthkaoneta;//!
277 TH1F *MCtruthkaonphi;//!
278 TH1F *MCtruthprotonpt;//!
279 TH1F *MCtruthprotoneta;//!
280 TH1F *MCtruthprotonphi;//!
283 TH2F *fProtoncont;//!
285 TH2F *fEventnobaryon;//!
286 TH2F *fEventnomeson;//!
287 TH2F *fhistJetTrigestimate;//!
289 TH2D* fCentralityCorrelation; //! centrality vs multiplicity
291 TH2F *fHistoTPCdEdx;//!
292 TH2F *fHistoTOFbeta;//!
293 TH3F *fTPCTOFPion3d;//!
294 TH3F *fTPCTOFKaon3d;//!
295 TH3F *fTPCTOFProton3d;//!
305 // TH3F *fHistocentNSigmaTPC;//! nsigma TPC
306 // TH3F *fHistocentNSigmaTOF;//! nsigma TOF
308 AliTHn *fCorrelatonTruthPrimary;//!
309 AliTHn *fCorrelatonTruthPrimarymix;//!
310 AliTHn *fTHnCorrUNID;//!
311 AliTHn *fTHnCorrUNIDmix;//!
312 AliTHn *fTHnCorrID;//!
313 AliTHn *fTHnCorrIDmix;//!
314 AliTHn *fTHnCorrIDUNID;//!
315 AliTHn *fTHnCorrIDUNIDmix;//!
316 AliTHn *fTHnTrigcount;//!
317 AliTHn *fTHnTrigcountMCTruthPrim;//!
318 AliTHn* fTrackHistEfficiency[6]; //! container for tracking efficiency and contamination (all particles filled including leading one): axes: eta, pT, particle species:::::::::0 pion, 1 kaon,2 proton,3 mesons,4 kaons+protons,5 all
321 TH1F *fHistQA[16]; //!
324 THnSparse *effcorection[6];//!
326 //TH2F* fControlConvResoncances; //! control histograms for cuts on conversions and resonances
328 Int_t ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield);
329 Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins);
332 void Fillcorrelation(TObjArray *trackstrig,TObjArray *tracksasso,Double_t cent,Float_t vtx,Float_t weight,Bool_t firstTime,Float_t bSign,Bool_t fPtOrder,Bool_t twoTrackEfficiencyCut,Bool_t mixcase,TString fillup);//mixcase=kTRUE in case of mixing;
333 Float_t GetTrackbyTrackeffvalue(AliAODTrack* track,Double_t cent,Float_t evzvtx, Int_t parpid);
336 void DefineEventPool();
337 AliEventPoolManager *fPoolMgr;//!
338 TClonesArray *fArrayMC;//!
339 TString fAnalysisType; // "MC", "ESD", "AOD"
340 TString fefffilename;
342 //PID part histograms
345 Bool_t HasTPCPID(AliAODTrack *track) const; // has TPC PID
346 Bool_t HasTOFPID(AliAODTrack *track) const; // has TOF PID
347 Double_t GetBeta(AliAODTrack *track);
348 void CalculateNSigmas(AliAODTrack *track, Bool_t FIllQAHistos);
349 Int_t FindMinNSigma(AliAODTrack *track, Bool_t FIllQAHistos);
350 Bool_t* GetDoubleCounting(AliAODTrack * trk, Bool_t FIllQAHistos);
351 Int_t GetParticle(AliAODTrack * trk, Bool_t FIllQAHistos);
353 TH2F* GetHistogram2D(const char * name);//return histogram "name" from fOutputList
356 Float_t twoTrackEfficiencyCutValue;
358 AliPIDResponse *fPID; //! PID
360 Float_t fPtTOFPIDmin; //lower pt bound for the TOCTOF combined circular pid
361 Float_t fPtTOFPIDmax; //uper pt bound for the TOCTOF combined circular pid
362 Bool_t fRequestTOFPID;//if true returns kSpUndefined if the TOF signal is missing
363 PIDType fPIDType; // PID type Double_t fNSigmaPID; // number of sigma for PID cut
364 Bool_t fFIllPIDQAHistos; //Switch for filling the nSigma histos
365 Double_t fNSigmaPID; // number of sigma for PID cut
366 Bool_t fUseExclusiveNSigma;//if true returns the identity only if no double counting(i.e not in the overlap area)
367 Bool_t fRemoveTracksT0Fill;//if true remove tracks for which only StartTime from To-Fill is available (worst resolution)
368 Int_t fSelectCharge; // (un)like sign selection when building correlations: 0: no selection; 1: unlike sign; 2: like sign
369 Int_t fTriggerSelectCharge; // select charge of trigger particle: 1: positive; -1 negative
370 Int_t fAssociatedSelectCharge; // select charge of associated particle: 1: positive; -1 negative
371 Float_t fTriggerRestrictEta; // restrict eta range for trigger particle (default: -1 [off])
372 Bool_t fEtaOrdering; // eta ordering, see AliUEHistograms.h for documentation
373 Bool_t fCutConversions; // cut on conversions (inv mass)
374 Bool_t fCutResonances; // cut on resonances (inv mass)
375 Int_t fRejectResonanceDaughters; // reject all daughters of all resonance candidates (1: test method (cut at m_inv=0.9); 2: k0; 3: lambda)
376 Int_t fOnlyOneEtaSide; // decides that only trigger particle from one eta side are considered (0 = all; -1 = negative, 1 = positive)
377 Bool_t fInjectedSignals; // check header to skip injected signals in MC
378 Bool_t fRemoveWeakDecays; // remove secondaries from weak decays from tracks and particles
379 Bool_t fRemoveDuplicates;// remove particles with the same label (double reconstruction)
380 Bool_t fapplyTrigefficiency;//if kTRUE then eff correction calculation starts
381 Bool_t fapplyAssoefficiency;//if kTRUE then eff correction calculation starts
382 Bool_t ffillefficiency; //if kTRUE then THNsparses used for eff. calculation are filled up
383 Bool_t fmesoneffrequired;
384 Bool_t fkaonprotoneffrequired;
385 AliAnalysisUtils* fAnalysisUtils; // points to class with common analysis utilities
386 TFormula* fDCAXYCut; // additional pt dependent cut on DCA XY (only for AOD)
389 Float_t fnsigmas[NSpecies][NSigmaPIDType+1]; //nsigma values
390 Bool_t fHasDoubleCounting[NSpecies];//array with compatible identities
392 //Int_t fPIDMethod; // PID method
395 Bool_t CheckTrack(AliAODTrack * part);
396 Float_t PhiRange(Float_t DPhi);
397 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);
398 Float_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);
399 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);
400 TObjArray* CloneAndReduceTrackList(TObjArray* tracks);
403 AliTwoParticlePIDCorr(const AliTwoParticlePIDCorr&); // not implemented
404 AliTwoParticlePIDCorr& operator=(const AliTwoParticlePIDCorr&); // not implemented
406 ClassDef(AliTwoParticlePIDCorr, 1); // example of analysis
408 class LRCParticlePID : public TObject {
410 LRCParticlePID(Int_t par,Short_t icharge,Float_t pt,Float_t eta, Float_t phi,Float_t effcorrectionval)
411 :fparticle(par),fcharge(icharge),fPt(pt), fEta(eta), fPhi(phi),feffcorrectionval(effcorrectionval) {}
412 virtual ~LRCParticlePID() {}
415 virtual Float_t Eta() const { return fEta; }
416 virtual Float_t Phi() const { return fPhi; }
417 virtual Float_t Pt() const { return fPt; }
418 Int_t getparticle() const {return fparticle;}
419 virtual Short_t Charge() const { return fcharge; }
420 Float_t geteffcorrectionval() const {return feffcorrectionval;}
421 virtual Bool_t IsEqual(const TObject* obj) const { return (obj->GetUniqueID() == GetUniqueID()); }
425 LRCParticlePID(const LRCParticlePID&); // not implemented
426 LRCParticlePID& operator=(const LRCParticlePID&); // not implemented
433 Float_t feffcorrectionval;
434 ClassDef(LRCParticlePID, 1);