]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/TriggerPID/AliTwoParticlePIDCorr.h
806093f2631a8b8c5ffa092671c11adbbd14089f
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / TriggerPID / AliTwoParticlePIDCorr.h
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
7 class TH1F;
8 class TH2F;
9 class TH3F;
10 class THnSparse;
11 class TString;
12 class TList;
13 //class AliESDtrackCuts;
14 class TSeqCollection;
15 class AliPIDResponse;
16 class AliAODEvent;
17 class AliAODTrack;
18 class AliAODVertex;
19 class AliEventPoolManager;
20 class TFormula;
21 class AliAnalysisUtils;
22 class LRCParticlePID;
23 class AliVParticle;
24 class AliCFContainer;
25 class AliCFGridSparse;
26 class THnBase;
27 class AliTHn;
28
29
30 #include <TObject.h> //LRCParticlePID is a derived class from"TObject"
31 #include "TMath.h"
32 #include "TNamed.h"
33 #include "AliUEHist.h"
34 #include "AliPID.h"
35 #include "AliAnalysisTask.h"
36 #include "AliUEHist.h"
37 #include "TString.h"
38 #include "AliVParticle.h"
39 #include "TParticle.h"
40 #include "AliLog.h"
41 #include "AliTHn.h"
42
43
44
45 #ifndef ALIANALYSISTASKSE_H
46 #include "AliAnalysisTaskSE.h"
47 #endif
48
49 namespace AliPIDNameSpace {
50   
51   enum PIDType
52   {
53     NSigmaTPC = 0,
54     NSigmaTOF,
55     NSigmaTPCTOF,  // squared sum
56     NSigmaPIDType=NSigmaTPCTOF
57   };
58     
59   enum AliDetectorType
60   {
61     fITS = 0,
62     fTPC,
63     fTOF,
64     fNDetectors
65   };
66   
67   
68   enum AliParticleSpecies
69   {
70     SpPion = 0,
71     SpKaon,
72     SpProton,
73     unidentified,
74     NSpecies=unidentified,
75     SpUndefined=999
76   }; // Particle species used in plotting
77   
78   
79   enum AliCharge
80   {
81     Posch = 0,
82     Negch,
83     NCharge
84   };
85 }
86
87
88 using namespace AliPIDNameSpace;
89
90 class AliTwoParticlePIDCorr : public AliAnalysisTaskSE {
91  public:
92     AliTwoParticlePIDCorr();
93     AliTwoParticlePIDCorr(const char *name);
94     virtual ~AliTwoParticlePIDCorr();
95     
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; }
102
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;
122   }
123   void SetAssociatedSpeciesSelection(Bool_t AssociatedSpeciesSelection,Int_t AssociatedSpecies, Bool_t containPIDasso)
124   {
125     fAssociatedSpeciesSelection=AssociatedSpeciesSelection;//if it is KTRUE then Set containPIDasso=kFALSE
126     fAssociatedSpecies=AssociatedSpecies;
127     fcontainPIDasso=containPIDasso;
128   }
129
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)
133   {
134     fminPt=minPt;
135     fmaxPt=maxPt;
136     fmineta=mineta;
137     fmaxeta=maxeta;
138   }
139   void SetAsymmetricnSigmaCut( Float_t minprotonsigmacut,Float_t maxprotonsigmacut,Float_t minpionsigmacut,Float_t maxpionsigmacut)
140   {
141     fminprotonsigmacut=minprotonsigmacut;
142     fmaxprotonsigmacut=maxprotonsigmacut;
143     fminpionsigmacut=minpionsigmacut;
144     fmaxpionsigmacut=maxpionsigmacut;
145   }
146   void SetDcaCut(Bool_t dcacut,Double_t dcacutvalue)
147   {
148     fdcacut=dcacut;
149     fdcacutvalue=dcacutvalue;
150   }
151   void SetfillHistQA(Bool_t fillhistQAReco,Bool_t fillhistQATruth)
152   {
153     ffillhistQAReco=fillhistQAReco;
154     ffillhistQATruth=fillhistQATruth;
155   }
156   void SetPtordering(Bool_t PtOrderDataReco,Bool_t PtOrderMCTruth)
157   {
158     fPtOrderDataReco=PtOrderDataReco;
159     fPtOrderMCTruth=PtOrderMCTruth;
160   }
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)
169   {
170     fTriggerSelectCharge=TriggerSelectCharge;
171     fAssociatedSelectCharge=AssociatedSelectCharge;
172   }
173   void SetEtaOrdering(Bool_t EtaOrdering){fEtaOrdering=EtaOrdering;}
174   void SetCutConversionsResonances( Bool_t CutConversions,Bool_t CutResonances)
175   {
176      fCutConversions=CutConversions;
177      fCutResonances=CutResonances;
178   }
179   void SetCleanUp(Bool_t InjectedSignals,Bool_t RemoveWeakDecays,Bool_t RemoveDuplicates)
180   {
181     fInjectedSignals=InjectedSignals;
182     fRemoveWeakDecays=RemoveWeakDecays;
183     fRemoveDuplicates=RemoveDuplicates;
184   }
185   void SetEfficiency(Bool_t fillefficiency,Bool_t applyTrigefficiency,Bool_t applyAssoefficiency)
186     {
187       ffillefficiency=fillefficiency;
188       fapplyTrigefficiency=applyTrigefficiency;
189       fapplyAssoefficiency=applyAssoefficiency;
190
191     }
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;}
200
201 void SetTOFPIDVal(Bool_t RequestTOFPID,Float_t PtTOFPIDmin,Float_t PtTOFPIDmax)
202    {
203 fRequestTOFPID=RequestTOFPID;
204 fPtTOFPIDmin=PtTOFPIDmin;
205 fPtTOFPIDmax=PtTOFPIDmax;
206 }
207
208  void SetEffcorectionfilePathName(TString efffilename) {fefffilename=efffilename;}
209  
210  private:
211  //histograms
212     TList *fOutput;        //! Output list
213     TList *fOutputList;        //! Output list
214
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;//!
219     Float_t zvtx;
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)
223     Int_t fVertextype;
224     Double_t fzvtxcut;
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;
244     Float_t fminPt;
245     Float_t fmaxPt;
246     Float_t fmineta;
247     Float_t fmaxeta;
248     Float_t fminprotonsigmacut;
249     Float_t fmaxprotonsigmacut;
250     Float_t fminpionsigmacut;
251     Float_t fmaxpionsigmacut;
252     Bool_t fselectprimaryTruth;
253     Bool_t fonlyprimarydatareco;
254     Bool_t fdcacut;
255     Double_t fdcacutvalue;
256     Bool_t ffillhistQAReco;
257     Bool_t ffillhistQATruth;
258     Int_t kTrackVariablesPair ;
259     Double_t fminPtTrig;
260     Double_t fmaxPtTrig;
261     Double_t fminPtComboeff;
262     Double_t fmaxPtComboeff;
263     Double_t fminPtAsso;
264     Double_t fmaxPtAsso;
265     TH1F *fhistcentrality;//!
266     TH1F *fEventCounter; //!
267     TH2F *fEtaSpectrasso;//!
268     TH2F *fphiSpectraasso;//!
269     TH1F *MCtruthpt;//! 
270     TH1F *MCtrutheta;//! 
271     TH1F *MCtruthphi;//!
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;//! 
281     TH2F *fPioncont;//!
282     TH2F *fKaoncont;//!
283     TH2F *fProtoncont;//!
284     TH2F *fEventno;//!
285     TH2F *fEventnobaryon;//!
286     TH2F *fEventnomeson;//!
287     TH2F *fhistJetTrigestimate;//!
288
289     TH2D* fCentralityCorrelation;  //! centrality vs multiplicity
290
291     TH2F *fHistoTPCdEdx;//!
292     TH2F *fHistoTOFbeta;//!
293     TH3F *fTPCTOFPion3d;//!
294     TH3F *fTPCTOFKaon3d;//!
295     TH3F *fTPCTOFProton3d;//!
296     TH1F *fPionPt;//!
297     TH1F *fPionEta;//!
298     TH1F *fPionPhi;//!
299     TH1F *fKaonPt;//!
300     TH1F *fKaonEta;//!
301     TH1F *fKaonPhi;//!
302     TH1F *fProtonPt;//!
303     TH1F *fProtonEta;//!
304     TH1F *fProtonPhi;//!
305     // TH3F *fHistocentNSigmaTPC;//! nsigma TPC
306     // TH3F *fHistocentNSigmaTOF;//! nsigma TOF 
307     
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
319
320     
321     TH1F *fHistQA[16]; //!
322      
323    
324     THnSparse *effcorection[6];//!
325     // THnF *effmap[6];  
326     //TH2F* fControlConvResoncances; //! control histograms for cuts on conversions and resonances
327
328     Int_t ClassifyTrack(AliAODTrack* track,AliAODVertex* vertex,Float_t magfield);
329   Double_t* GetBinning(const char* configuration, const char* tag, Int_t& nBins);
330
331
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);
334
335 //Mixing functions
336   void DefineEventPool();
337   AliEventPoolManager    *fPoolMgr;//! 
338   TClonesArray          *fArrayMC;//!
339   TString          fAnalysisType;          // "MC", "ESD", "AOD"
340   TString fefffilename;
341
342     //PID part histograms
343
344   //PID functions
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);  
352  
353      TH2F* GetHistogram2D(const char * name);//return histogram "name" from fOutputList
354
355            
356    Float_t twoTrackEfficiencyCutValue;
357   //Pid objects
358   AliPIDResponse *fPID; //! PID
359   Int_t eventno;
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)
387
388
389   Float_t fnsigmas[NSpecies][NSigmaPIDType+1]; //nsigma values
390   Bool_t fHasDoubleCounting[NSpecies];//array with compatible identities
391
392   //Int_t fPIDMethod; // PID method
393
394  //functions
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);
401            
402     
403     AliTwoParticlePIDCorr(const AliTwoParticlePIDCorr&); // not implemented
404     AliTwoParticlePIDCorr& operator=(const AliTwoParticlePIDCorr&); // not implemented
405     
406     ClassDef(AliTwoParticlePIDCorr, 1); // example of analysis
407 };
408 class LRCParticlePID : public TObject {
409 public:
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() {}
413
414   
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()); }
422
423
424 private:
425   LRCParticlePID(const LRCParticlePID&);  // not implemented
426    LRCParticlePID& operator=(const LRCParticlePID&);  // not implemented
427   
428   Int_t fparticle;
429   Short_t fcharge;
430   Float_t fPt;
431   Float_t fEta;
432   Float_t fPhi;
433   Float_t feffcorrectionval;
434   ClassDef(LRCParticlePID, 1);
435 } ;
436
437 #endif
438