]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/PidPid/AliAnalysisTaskPidPidCorrelations.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / PidPid / AliAnalysisTaskPidPidCorrelations.h
1 #ifndef ALIANALYSISTASKPIDPIDCORRELATION_H
2 #define ALIANALYSISTASKPIDPIDCORRELATION_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 #include "TROOT.h"
8 #include "TSystem.h"
9 #include "TFile.h"
10 #include "TString.h"
11 #include "TAxis.h"
12 #include "TClonesArray.h"
13 #include "TList.h"
14 #include "TObjArray.h"
15
16 #ifndef ALIANALYSISTASKSE_H
17 #include "AliAnalysisTaskSE.h"
18 #endif
19
20 #include "AliAODEvent.h"
21 #include "AliVTrack.h"
22 #include "AliAODTrack.h"
23 #include "AliAODMCHeader.h"
24 #include "AliAODMCParticle.h"
25 #include "AliMCEvent.h"
26 #include "AliMCEventHandler.h"
27 #include "AliAODVertex.h"
28 #include "AliCentrality.h"
29 #include "AliAODHeader.h"
30 #include "AliVParticle.h"
31 #include "AliVVertex.h"
32 #include "AliPID.h"
33 #include "AliPIDResponse.h"
34 #include "AliPIDCombined.h"
35 #include "AliInputEventHandler.h" // event mixing
36 #include "AliEventPoolManager.h"  // event mixing
37 #include "AliLog.h"
38 #include "AliPIDResponse.h"
39 #include "AliPIDCombined.h"
40
41 #include "AliCFContainer.h"
42 // #include "AliCFGridSparse.h"
43 // #include "AliCFEffGrid.h"
44 // #include "AliCFManager.h"
45 // #include "AliCFCutBase.h"
46
47 #include "TH1F.h"
48 #include "TH2F.h"
49
50 #include "THnSparse.h"
51 // #include "AliTHn.h"
52
53 class TList;
54 class TH1F;
55 class TH2F;
56 // class AliTHn;
57 class AliCFContainer;
58 // class AliCFGridSparse;
59 // class AliCFEffGrid;
60 // class AliCFCutBase;
61 // class AliCFManager;
62 class AliPIDResponse;
63
64 #include <vector>
65 using std::vector;
66
67 // const Int_t kTrackVariablesSingle = 4+1;       // track variables in histogram (particle type, pTtrig, vertexZ, centrality)
68 const Int_t kTrackVariablesPair   = 5;       // track variables in histogram (particle type trig, particle type assoc, pTtrig, ptAssociated, dPhi, dEta, vertexZ, centrality)
69
70 namespace myAliPID {
71   
72   //enum PIDType { kMyNSigmaITS=0, kMyNSigmaTPC, kMyNSigmaTOF, kMyNSigmaHMP, kMyNSigmaTPCTOF, kMyNSigmaPIDType = kMyNSigmaTPCTOF };
73   enum PIDType { kMyNSigmaITS=0, kMyNSigmaTPC, kMyNSigmaTOF, kMyNSigmaHMP, kMyNSigmaPIDType };
74   enum AliParticleSpeciesQA { fPartElectronQA=0, fPartMuonQA, fPartPionQA, fPartKaonQA, fPartProtonQA, fPartNSpeciesQA, fPartUndefinedQA = 999 };
75   enum AliParticleSpecies { fPartPionMinus=1, fPartPionPlus, fPartKaonMinus, fPartKaonPlus, fPartProtonMinus, fPartProtonPlus, fPartHadronMinus, fPartHadronPlus, fPartNSpecies, fPartUndefined = 999 };
76 }
77
78 using namespace myAliPID;
79
80 class AliAnalysisTaskPidPidCorrelations : public AliAnalysisTaskSE { //
81
82   public:
83   
84   AliAnalysisTaskPidPidCorrelations();
85   AliAnalysisTaskPidPidCorrelations(const Char_t* name/* = "AliAnalysisTaskPidPidCorrelations"*/);
86   virtual ~AliAnalysisTaskPidPidCorrelations();
87   
88   //___ Implementation of interface methods
89   virtual void  UserCreateOutputObjects();
90   virtual void  UserExec(Option_t* option);
91   virtual void  Terminate(Option_t* option);
92
93   // Setters/Getters
94   void  SetMaxVertexZ(Double_t maxVertexZ) { fVzMax = maxVertexZ; }
95   void  SetTriggerMask(Int_t triggerType)   { fTriggerType = triggerType; }  
96 //   void       SetFilterBit(Int_t fbit)                { fFilterBit = fbit; }
97   void  SetCentralityEstimator(const Char_t* centralityestimator) { fCentralityEstimator = centralityestimator; }
98   void  SetCentralityRange(Float_t min, Float_t max)    { fCentralityPercentileMin = min; fCentralityPercentileMax = max; }
99 //   void       SetEtaRange(Double_t etaMin, Double_t etaMax) { fTrackEtaMin = etaMin; fTrackEtaMax = etaMax; }
100   void  SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) { fVxMax = vx; fVyMax = vy; fVzMax = vz;}  
101   void  SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax) { fTrackPtMin = ptmin;  fTrackPtMax = ptmax; fTrackEtaMin = etamin; fTrackEtaMax = etamax; }
102   //void SetFilterMask(UInt_t i,Int_t iType = 0){fFilterMask = i;fFilterType = iType;}
103
104   void  SetMixingTracks(Int_t tracks, Int_t poolsize) { fMinNumTrack = tracks; fPoolSize = poolsize;}
105   void  SetFillpT(Bool_t flag) { fFillpT = flag; }
106   void  SetTwoTrackEfficiencyCut(Float_t value = 0.02, Float_t min = 0.8) { twoTrackEfficiencyCutValue = value; fTwoTrackCutMinRadius = min; }
107   void  SetPairCuts(Bool_t conversions, Bool_t resonances) { fCutConversions = conversions; fCutResonances = resonances; }
108   void  SetWeightPerEvent(Bool_t flag = kTRUE)   { fWeightPerEvent = flag; }
109   void  SetPtOrder(Bool_t flag) { fPtOrder = flag; }
110   void  SetEtaOrdering(Bool_t flag) { fEtaOrdering = flag; }
111   void  SetEventMixing(Bool_t flag) { fFillMixed = flag; }
112   void  SetRejectResonanceDaughters(Int_t value) { fRejectResonanceDaughters = value; }
113   void  SetSelectCharge(Int_t selectCharge) { fSelectCharge = selectCharge; }
114   void  SetSelectTriggerCharge(Int_t selectCharge) { fTriggerSelectCharge = selectCharge; }
115   void  SetSelectAssociatedCharge(Int_t selectCharge) { fAssociatedSelectCharge = selectCharge; }
116   void  SetTriggerRestrictEta(Float_t eta) { fTriggerRestrictEta = eta; }
117   void  SetOnlyOneEtaSide(Int_t flag)     { fOnlyOneEtaSide = flag; }
118
119   void SetPIDsToCorrelate(Int_t triggerPID, Int_t assocPID) { fPIDtrigType = triggerPID; fPIDassocType = assocPID; }
120   
121   void          SetMC(Bool_t isMC) {fUseMC = isMC;}
122   Bool_t                GetMC() const {return fUseMC;}
123
124   void  SetCentBinning(Int_t nBins, Double_t* limits);
125   Int_t GetCentBin(Double_t centrality);
126   void  SetZvtxBinning(Int_t nBins, Double_t* limits);
127   Int_t GetZvtxBin(Double_t zvtx);
128   void  SetPtBinning(Int_t nBins, Double_t* limits);
129   Int_t GetPtBin(Double_t valPt);
130   void  SetEtaBinning(Int_t nBins, Double_t *limits);
131   Int_t GetEtaBin(Double_t valEta);  
132     
133   TString       GetCentralityEstimator() const { return fCentralityEstimator; }
134   Double_t      GetMaxVertexZ() const           { return fVzMax; }
135 //   Int_t              GetMyFilterBit()                { return fFilterBit; }
136 //  Double_t* GetNSigmas(AliParticleSpecies species) { return fnsigmas[species]; }      // get nsigma[ipart][idet], calculated in CalculateNSigmas(trk)
137 /*
138   //_______ AliTHn
139   AliTHn*       GetHistCorrSingle() {return fHistCorrSingle;}
140   void          SetHistCorrSingle(AliTHn *gHist) { fHistCorrSingle = gHist; }//fHistP->FillParent(); fHistP->DeleteContainers();}
141   AliTHn*       GetHistCorrPairSame() {return fHistCorrPairSame;}
142   void          SetHistCorrPairSame(AliTHn *gHist) { fHistCorrPairSame = gHist; }//fHistN->FillParent(); fHistN->DeleteContainers();}
143   AliTHn*       GetHistCorrPairMixed() {return fHistCorrPairMixed;}
144   void          SetHistCorrPairMixed(AliTHn *gHist) { fHistCorrPairMixed = gHist; }//fHistN->FillParent(); fHistN->DeleteContainers();}
145 */
146   //AliTHn* MakeHistCorr(const Char_t* name) const;
147
148   void          UseMomentumDifferenceCut(Bool_t fqcut = kFALSE,Double_t gDeltaPtCutMin = 0.01) { fQCut = fqcut; fDeltaPtMin = fqcut ? gDeltaPtCutMin : 0.; }
149   void          SetupForMixing();
150   void                  AddSettingsTree();
151   void                  Analyse();
152         
153   void          FillCorrelations(TObjArray* particles, TObjArray* particlesMixed, Double_t centrality, Double_t zVtx, Double_t bSign, Bool_t twoTrackEfficiencyCut, Double_t twoTrackEfficiencyCutValue, /*Int_t step,*/ Double_t weight);
154   Bool_t        CheckMcDistributions(TClonesArray* arrayMC, AliAODMCHeader* mcHeader);
155   TString       GetGenerator(Int_t label, AliAODMCHeader* MCheader);
156   Bool_t        IsFromHijingBg(Int_t mcTrackLabel);
157   void          FillMcGeneratorHistos(TString genLabel);
158   Bool_t        VertexSelection(TObject* obj, Int_t ntracks, Int_t centBin, Double_t gVxMax, Double_t gVyMax, Double_t gVzMax);
159   void          CleanUp(TObjArray* tracks, TObject* mcObj);
160   TObjArray*    AcceptTracks(Int_t centBin, TObject* arrayMC, /*Bool_t onlyprimaries,*/ Bool_t useCuts);
161   TObjArray*            AcceptMcTracks(Int_t centBin, Bool_t onlyprimaries, Bool_t useCuts);
162   TObjArray*    AcceptMcRecoMachedTracks(Int_t centBin, Bool_t onlyprimaries, Bool_t useCuts);
163   Double_t*     GetBinning(const Char_t* configuration, const Char_t* tag, Int_t& nBins);
164   Bool_t        CheckTrack(AliAODTrack* track);
165   void          CalculateNSigmas(AliAODTrack* track, Int_t centBin, Bool_t* pidFlag, Bool_t fillQA);
166   Int_t                 FindNSigma(AliAODTrack* track);
167   Int_t                 GetParticleID(AliVTrack* trk, Int_t centbin, Bool_t fillQA); // DATA and MC-reco
168   Int_t                 GetParticleIDMC(AliVTrack* trk, Int_t centbin, Bool_t fillQA); // MC-truth
169   Double_t      MakeTPCPID(AliAODTrack* track, Double_t* nSigma);
170   Double_t      MakeTOFPID(AliAODTrack* track, Double_t* nSigma);
171   Bool_t        HasTPCPID(AliAODTrack* track) const;
172   Bool_t        HasTOFPID(AliAODTrack* track) const;
173   Double_t      GetBeta(AliAODTrack* track);
174   void          RemoveDuplicates(TObjArray* tracks);
175   void          RemoveWeakDecays(TObjArray* tracks, TObject* mcObj);
176   Double_t      DeltaPhi(Double_t Dphi) const;
177   TH2F*                 GetHisto2D(const Char_t* name);
178   Double_t      GetDPhiStar(Double_t phi1, Double_t pt1, Double_t charge1, Double_t phi2, Double_t pt2, Double_t charge2, Double_t radius, Double_t bSign);
179   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);
180   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);
181   void          PrintPoolManagerContents();
182   TObjArray*    CloneAndReduceTrackList(TObjArray* tracks);
183   TString       GetOutputListName() const;
184
185   //___________ Correction
186   enum ECorrStep { kStepGen = 0, kStepRec, kStepRecMatch, kNsteps };
187 //   enum ECorrVars { kVarEta, kVarPhi, kVarPt, kVarPID, kVarCent, kVarZvtx, kNvars };
188 //   enum ECorrVars { kVarEta, kVarPhi, kVarPt, kVarZvtx, kNvars };
189   enum ECorrVars { kVarEta, kVarPt, kVarPID, kVarCent, kVarZvtx, kNvars };
190   void FillCFcontainers(TObjArray* mca, TObjArray* rec, TObjArray* recmatch, Double_t cent/*, Double_t zvtx*/);
191
192   private:
193
194   AliAnalysisTaskPidPidCorrelations(const AliAnalysisTaskPidPidCorrelations&);            // not implemented
195   AliAnalysisTaskPidPidCorrelations& operator=(const AliAnalysisTaskPidPidCorrelations&); // not implemented
196
197   Bool_t fUseMC;
198
199   AliAODEvent*          fMyAODEvent; //!
200   AliAODHeader*         fMyAODHeader; //!
201   AliAODTrack*          fMyAODTrack; //!
202   AliPIDResponse*       fPIDResponse; //! PID response object
203   AliAODVertex*         fMyPrimVtx; //!
204   TClonesArray*         fMyMcArray; //!
205   AliAODMCHeader*       fMyMcHeader; //!
206   AliMCEventHandler*    fMyMcHandler; //!
207   AliEventPoolManager*  fPoolMgr; //!
208   AliCFContainer*       fMyCFCont; //!
209   
210   TObjArray*            fMyprimRecoTracksPID; //!
211   TObjArray*            fMyprimMCParticlesPID; //!
212   TObjArray*            fMyprimRecoTracksMatchedPID;  //!
213   
214   
215 //   Bool_t             fWriteCorrTree;
216 //   TTree*     fVariablesTreeCorr;
217 //   Float_t*   fCorrVariables;
218   
219   Int_t                 fTriggerType;   //  sets trigger -> AliVEvent::kMB, AliVEvent::kHighMult
220   Int_t         fMyMcType ;//
221 //   Int_t              fFilterBit;             // track selection cuts
222   UInt_t        fFilterType;    // filter type 0 = all, 1 = ITSTPC, 2 = TPC
223   Double_t      fCentrality;//
224   Double_t      fCentralityPercentileMin;
225   Double_t      fCentralityPercentileMax;
226   Int_t                 fNbinsCent;
227   TAxis*                fCentAxis; //
228   Int_t         fNbinsZvtx;
229   TAxis*                fZvtxAxis; //
230   Int_t         fNbinsPt;
231   TAxis*                fPtAxis; //
232   Int_t                 fNbinsEta;
233   TAxis*                fEtaAxis; //
234   TString       fCentralityEstimator; // Method to determine the centrality, e.g. "V0M","TRK","TKL","ZDC","FMD", "CL0", "CL1"
235   Double_t      fTrackEtaMin;
236   Double_t      fTrackEtaMax;
237   Double_t      fTrackPtMin;
238   Double_t      fTrackPtMax;
239   UInt_t                fTrackStatus;          // if non-0, the bits set in this variable are required for each track
240   Int_t         fnTracksVertex;        // QA tracks pointing to principal vertex
241   Bool_t                fRejectZeroTrackEvents;  // reject events which have no tracks (using the eta, pT cuts defined)
242   Double_t      fEtaCut;
243   Double_t      fVxMax;
244   Double_t      fVyMax;
245   Double_t      fVzMax;
246   Bool_t        fRemoveWeakDecays;   // remove secondaries from weak decays from tracks and particles
247   Bool_t        fRemoveDuplicates;   // remove particles with the same label (double reconstruction)
248
249   Double_t      fDeltaEtaMax;                           // maximum delta eta for output THnSparse
250
251   Int_t         fSelectCharge;           // (un)like sign selection when building correlations: 0: no selection; 1: unlike sign; 2: like sign
252   Int_t                 fTriggerSelectCharge;    // select charge of trigger particle: 1: positive; -1 negative
253   Int_t                 fAssociatedSelectCharge; // select charge of associated particle: 1: positive; -1 negative
254   Float_t       fTriggerRestrictEta;   // restrict eta range for trigger particle (default: -1 [off])
255   Bool_t        fCutConversions;        // cut on conversions (inv mass)
256   Bool_t        fCutResonances;         // cut on resonances (inv mass)
257   Int_t                 fRejectResonanceDaughters; // reject all daughters of all resonance candidates (1: test method (cut at m_inv=0.9); 2: k0; 3: lambda)
258   Int_t                 fOnlyOneEtaSide;       // decides that only trigger particle from one eta side are considered (0 = all; -1 = negative, 1 = positive)
259   Bool_t        fWeightPerEvent;           // weight with the number of trigger particles per event
260   Bool_t        fPtOrder;                                       // apply pT,a < pt,t condition; default: kTRUE
261   Bool_t        fQCut;                                          //cut on momentum difference to suppress femtoscopic effect correlations
262   Double_t      fDeltaPtMin;                            //delta pt cut: minimum value
263   
264   Int_t         fPIDtrigType;   // PID trigger type to correlate
265   Int_t         fPIDassocType;  // PID assoc type to correlate
266
267   TString       fCustomBinning;//for setting customized binning
268   TString       fBinningString;//final binning string   
269
270   Int_t                 fMinNumTrack; // AliEventPoolManager(), Size of track buffer for event mixing (number of tracks to fill the pool)
271   Int_t                 fPoolSize; // AliEventPoolManager(), max number of event to mix
272   Int_t                 fMinNEventsToMix; //
273
274   Bool_t        fFillpT;
275   Float_t       fTwoTrackEfficiencyCut;   // enable two-track efficiency cut
276   Float_t       twoTrackEfficiencyCutValue; // set it 0.02 as default in dphicorrelations
277   Float_t       fTwoTrackCutMinRadius;    // minimum radius for two-track efficiency cut
278   Bool_t                fEtaOrdering;           // eta ordering, see AliUEHistograms.h for documentation
279   Bool_t                fFillMixed;             // enable event mixing (default: ON)
280
281   static const Int_t fNMaxBinsCentrality = 1;
282   static const Int_t fNMaxBinsZvtx = 15;
283   static const Int_t fNMaxBinsPt = 9;
284   static const Int_t fNMaxBinsEta = 25;
285   
286   TList*                fList; //
287   
288   TH1F*         fHistQA[fNMaxBinsCentrality][14]; //!
289   TH1I*         fHistNev;//!
290   TH1F*         fHistTriggerStats; //!
291   TH1F*         fHistTriggerRun;  //!
292   TH1F*         fHistEventStat; //!
293   TH2F*         fHistRefTracks; //!
294   TH2F*         fHistRefTracksCent[fNMaxBinsCentrality][6];//!
295   TH2F*         fHistCentStats; //!
296   TH1F*         fHistCentralityPercentile;        //! centrality class
297   TH1F*         fHistCentralityClass10;           //! centrality class by 10
298   TH1F*         fHistCentralityClass5;            //! centrality class by 5
299   TH2F*         fHistV0M; //!
300   
301 //   TH1F*              fHistDeltaPhi[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt]; //!
302 //   TH1F*              fHistDeltaPhiMix[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt]; //!
303 //   TH2F*              fHistDphiDeta[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt]; //!
304 //   TH2F*              fHistDphiDetaMix[fNMaxBinsCentrality][fNMaxBinsPt][fNMaxBinsPt]; //!
305   TH2F*         fHistTracksEtaTrigVsEtaAssoc[fNMaxBinsCentrality]; //!
306   TH2F*         fHistTracksEtaTrigVsEtaAssocMixed[fNMaxBinsCentrality]; //!
307   TH1F*         fHistSingleHadronsPt[fNMaxBinsCentrality]; //!
308 //   TH1F*              fHistSingleHadronsPt_Mixed[fNMaxBinsCentrality]; //!
309   TH2F*         fHistSingleHadronsEtaPt[fNMaxBinsCentrality]; //!
310 //   TH2F*              fHistSingleHadronsEtaPt_Mixed[fNMaxBinsCentrality]; //!
311
312   //____ MC
313   TH1F*         fHistMcGenerator; //!
314   TH1F*         fHist_HijingBg; //!
315   TH1F*         fHistNumOfPartPerEvt; //!
316   TH1F*         fHistMcStats; //!
317   TH1F*         fHistMcAllPt; //!
318   TH1F*         fHistMcAllPt_Hijing; //!
319   TH1F*         fHistMcAllPt_Dec; //!
320   TH1F*         fHistMcAllPt_Inj; //!
321   TH1F*         fHistMcAllEta_NotHijing; //!
322   TH1F*         fHistMcAllEta_Hijing; //!
323   TH1F*         fHistMcAllEta; //!
324
325   //____ Correlation
326 //   AliTHn* fHistCorrSingle;
327 //   AliTHn* fHistCorrPairSame;
328 //   AliTHn* fHistCorrPairMixed;
329 //   THnSparseD* fHistCorrSingle;
330   THnSparseD* fHistCorrPair[2]; //!
331   
332 //   THnSparseD* fHistPoolMgrQA;
333
334
335   TH2F*         fHistControlConvResoncances; //!
336   
337   TH1D*         fHistTriggerWeighting; //!
338   TAxis*                fTriggerWeighting;
339
340   TH2F*         fHistTwoTrackDistancePt[fNMaxBinsPt][2];
341   
342   TH2F*         fHistHBTbefore; //! Delta Eta vs. Delta Phi before HBT inspired cuts
343   TH2F*         fHistHBTafter; //! Delta Eta vs. Delta Phi after HBT inspired cuts
344 //   TH2F*              fHistConversionbefore; //! Delta Eta vs. Delta Phi before Conversion cuts
345 //   TH2F*              fHistConversionafter; //! Delta Eta vs. Delta Phi before Conversion cuts
346 //   TH2F*              fHistPsiMinusPhi;//! psi - phi QA histogram
347 //   TH3D*              fHistResonancesBefore; //! 3D histogram (Deta,Dphi,Invmass) before resonance cuts
348 //   TH3D*              fHistResonancesRho;    //! 3D histogram (Deta,Dphi,Invmass) after removing rho 
349 //   TH3D*              fHistResonancesK0;     //! 3D histogram (Deta,Dphi,Invmass) after removing rho, K0 
350 //   TH3D*              fHistResonancesLambda; //! 3D histogram (Deta,Dphi,Invmass) after removing rho, K0, and Lambda
351 //   TH3D*              fHistQbefore; //! Delta Eta vs. Delta Phi before cut on momentum difference
352 //   TH3D*              fHistQafter; //! Delta Eta vs. Delta Phi after cut on momentum difference
353
354
355   TH2F*                 fHistoNSigma[fNMaxBinsCentrality]; //!
356   Double_t      nsigmaITS[fPartNSpeciesQA];
357   Double_t      nsigmaTPC[fPartNSpeciesQA];
358   Double_t      nsigmaTOF[fPartNSpeciesQA];
359   Double_t      nsigmaHMPID[fPartNSpeciesQA];
360
361   Double_t      fnsigmas[fPartNSpeciesQA][kMyNSigmaPIDType]; // nsigma values
362
363   TH2F*         fHistTPCdEdx[fNMaxBinsCentrality];              //! TPC dEdx
364   TH2F*         fHistTOFbeta[fNMaxBinsCentrality];              //! TOF beta
365   TH2F*         fHistTPCdEdx_selected[fNMaxBinsCentrality];     //! TPC dEdx
366   TH2F*         fHistTOFbeta_selected[fNMaxBinsCentrality];     //! TOF beta
367
368   TH2F*         fHistNSigmaTPC[fNMaxBinsCentrality][AliPID::kSPECIES];  //! nsigma TPC
369   TH2F*         fHistNSigmaTOF[fNMaxBinsCentrality][AliPID::kSPECIES];  //! nsigma TOF
370  
371   ClassDef(AliAnalysisTaskPidPidCorrelations, 1);
372 };
373
374 //_____ Reduced Tracks -- contains only quantities requires for this analysis to reduce memory consumption for event mixing
375 class AliPidPidCorrelationReducedTrack : public AliVParticle // TObject
376 {
377   public:
378     AliPidPidCorrelationReducedTrack(Int_t partID, Double_t eta, Double_t phi, Double_t pt, Short_t charge)
379     : fParticleIDReduced(partID), fEtaReduced(eta), fPhiReduced(phi), fPtReduced(pt), fChargeReduced(charge)
380     {
381     }
382     ~AliPidPidCorrelationReducedTrack() {}
383    
384   // AliVParticle functions
385   virtual Double_t      Px() const { AliFatal("Not implemented"); return 0; }
386   virtual Double_t      Py() const { AliFatal("Not implemented"); return 0; }
387   virtual Double_t      Pz() const { AliFatal("Not implemented"); return 0; }
388   virtual Double_t      Pt() const { return fPtReduced; }
389   virtual Double_t      P() const       { AliFatal("Not implemented"); return 0; }
390   virtual Bool_t                PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
391   virtual Double_t      Xv() const      { AliFatal("Not implemented"); return 0; }
392   virtual Double_t      Yv() const      { AliFatal("Not implemented"); return 0; }
393   virtual Double_t      Zv() const      { AliFatal("Not implemented"); return 0; }
394   virtual Bool_t        XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
395   virtual Double_t      OneOverPt()     const   { AliFatal("Not implemented"); return 0; }
396   virtual Double_t      Phi() const     { return fPhiReduced; }
397   virtual Double_t      Theta() const   { AliFatal("Not implemented"); return 0; }
398   virtual Double_t      E() const { AliFatal("Not implemented"); return 0; }
399   virtual Double_t      M() const       { AliFatal("Not implemented"); return 0; }
400   virtual Double_t      Eta() const     { return fEtaReduced; }
401   virtual Double_t      Y() const       { AliFatal("Not implemented"); return 0; }
402   virtual Short_t       Charge() const  { return fChargeReduced; }
403     
404   // void Print() { Printf(Form("Reduced track, eta: %lf phi: %lf pt: %lf p: %lf", fEtaReduced, fPhiReduced, fPtReduced, fPReduced)); }
405
406   //________ PID
407   Int_t                         GetMyPartID() const { return fParticleIDReduced; }
408   virtual Bool_t                        IsEqual(const TObject* obj) const { return (obj->GetUniqueID() == GetUniqueID()); }
409   virtual Int_t                 GetLabel() const { AliFatal("Not implemented"); return 0; }
410   virtual Int_t                 PdgCode() const { AliFatal("Not implemented"); return 0; }
411   virtual const Double_t*       PID() const { AliFatal("Not implemented"); return 0; }
412     
413   private:
414     
415   Int_t         fParticleIDReduced;     // particle ID 
416   Double_t      fEtaReduced;                    // eta
417   Double_t      fPhiReduced;            // phi
418   Double_t      fPtReduced;             // pT
419   Short_t       fChargeReduced;         // charge
420
421   ClassDef(AliPidPidCorrelationReducedTrack, 1); // reduced track class which contains only quantities requires for this analysis to reduce memory consumption for event mixing
422 };
423
424 #endif