changes from gsi. Using mult if no centrality. testfilterbit 128
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvDalitz.h
1 #ifndef ALIANALYSISTASKGAMMACONVDALITZ_H
2 #define ALIANALYSISTASKGAMMACONVDALITZ_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 // Analysis task for pi0->e+e-gamma (Dalitz decay)
8
9 #include "AliAnalysisTaskSE.h"
10
11 class AliESDInputHandler;
12 class AliMCEventHandler;
13 class AliESDEvent;
14 class AliESDtrack;
15 class AliESDtrackCuts;
16 class AliESDpidCuts;
17 class AliV0Reader;
18 class AliGammaConversionHistograms;
19
20 class AliAnalysisTaskGammaConvDalitz: public AliAnalysisTaskSE
21 {
22   public:
23
24         AliAnalysisTaskGammaConvDalitz();
25         AliAnalysisTaskGammaConvDalitz( const char* name );
26         virtual ~AliAnalysisTaskGammaConvDalitz();
27
28         virtual void UserExec(Option_t *option);
29         virtual void UserCreateOutputObjects();
30         virtual void ConnectInputData(Option_t *option);
31         virtual void Terminate(Option_t *option);
32         
33         enum TrackSelectionCriteria { kITSsaTrack=0, kGlobalTrack=1, kITSsaGlobalTrack=2 };
34         
35         void SetRunStandalone( Bool_t flag=kFALSE ) { fStandalone = flag; }
36         void SetComputeBackground( Bool_t flag=kTRUE ) { fComputeBkg = flag; }
37         void SetUseBayesPID( Bool_t flag=kTRUE ) { fUseBayesPID = flag; }
38         void SetUseESDtrackIndexCut( Bool_t flag=kTRUE) { fUseTrackIndexCut = flag; }
39         void SetUsePsiPairCut(Bool_t flag=kTRUE) { fUsePsiPairCut = flag; }
40         void SetUseMassCut(Bool_t flag=kTRUE) { fUseMassCut = flag; }
41         void SetUseGammaCut(Bool_t flag=kTRUE) { fUseGammaCut = flag; }
42         void SetUseAliKF(Bool_t flag=kFALSE) { fUseAliKF = flag; }
43         void SetTrackSelectionCriteria(AliAnalysisTaskGammaConvDalitz::TrackSelectionCriteria sel=kGlobalTrack) { fTrkSelectionCriteria = sel; }
44         
45         void SetPsiPairCut(Double_t psi=0.45, Double_t phiMin=0., Double_t phiMax=0.12, Bool_t readMagFieldSgn=kTRUE){fPsiPairCut = psi; fDeltaPhiCutMin = phiMin; fDeltaPhiCutMax = phiMax; fReadMagFieldSign = readMagFieldSgn;}
46         void SetMassCut(Double_t min, Double_t max) {fMassCutMin = min; fMassCutMax = max; }
47
48         void SetNSigmasElecTPC( Double_t min, Double_t max) { fNSigmaBelowElecTPCbethe = min; fNSigmaAboveElecTPCbethe = max; }
49         void SetNSigmasPionTPC( Double_t max )   {  fNSigmaAbovePionTPCbethe = max; }
50         void SetNSigmasKaonTPC( Double_t max )   {  fNSigmaAboveKaonTPCbethe    = max; }
51         void SetNSigmasProtonTPC( Double_t max ) {  fNSigmaAboveProtonTPCbethe  = max; }
52         
53         void SetV0Reader( AliV0Reader* reader ) { fV0Reader = reader; }
54         void SetDoMC(Bool_t flag) { fDoMC = flag; }
55         void SetBGHandler( AliGammaConversionBGHandler* BG ) {  fBGEventHandler = BG; }
56         
57         void AdoptHistograms( AliGammaConversionHistograms* histograms ) { fHistograms = histograms; }
58         void AdoptITSsaTrackCuts( AliESDtrackCuts* esdCuts = 0 );
59         void AdoptESDtrackCuts( AliESDtrackCuts* esdCuts = 0 );
60         void AdoptESDpidCuts( AliESDpidCuts* esdPIDCuts = 0 );
61         
62   private:
63
64         void ProcessMCData();
65         void CreateListOfDalitzPairCandidates();
66         void ProcessGammaElectronsForDalitzAnalysis();
67         
68         void ESDtrackIndexCut(vector<Int_t>& pos, vector<Int_t>& neg, const TClonesArray* gamma);
69         void PsiPairCut(vector<Int_t>& pos, vector<Int_t>& neg);
70         void MassCut(vector<Int_t>& pos, vector<Int_t>& neg);
71         void CleanArray(vector<Int_t>& x, const vector<Bool_t>& tag);
72         
73         TClonesArray* IndexToAliKFParticle(const vector<Int_t>& v, Int_t PDG);
74         TClonesArray* FindElectronFromPi0Dalitz(const vector<Int_t>& candidates, const Int_t PDG);
75         TClonesArray* FindGammaFromPi0Dalitz(const TClonesArray* candidates, const vector<Int_t>& pos, const vector<Int_t>& neg);
76         TClonesArray* FindGamma(const TClonesArray* candidates, const vector<Int_t>& pos, const vector<Int_t>& neg);
77         TClonesArray* FindDalitzPair(const TClonesArray* pos, const TClonesArray* neg);
78         TClonesArray* FindDalitzPair(const vector<Int_t>& pos, const vector<Int_t>& neg,Int_t motherOpc);
79         TClonesArray* FindJpsi(const vector<Int_t>& posIdx, const vector<Int_t>& negIdx,Int_t motherOpc);
80         TClonesArray* FindParticleDalitz(const TClonesArray* pos, const TClonesArray* neg, const TClonesArray* gamma,Int_t opc);
81         TClonesArray* FindParticleDalitz(const vector<Int_t>& pos, const vector<Int_t>& neg, const TClonesArray* gamma, const vector<Int_t>& posGam, const vector<Int_t>& negGam,Int_t motherOpc);
82         TClonesArray* FindParticleChic(const vector<Int_t>& posIdx, const vector<Int_t>& negIdx, const TClonesArray* gamma, const vector<Int_t>& posGam, const vector<Int_t>& negGam,Int_t motherOpc);
83
84         void SetGammaPoolMaxSize(UInt_t maxSize=10) { fPoolMaxSize = maxSize; }
85         void UpdateGammaPool(const TClonesArray* gamma);
86         void UpdateElectronPool(TClonesArray* elec);
87         TClonesArray* GammasFromBGHandler() const;
88         TClonesArray* ElectronFromBGHandler() const;
89
90         Bool_t IsPi0DalitzDaughter( Int_t label ) const;
91         Bool_t IsDalitzPair( Int_t labelPos, Int_t labelNeg, Int_t motherOpc ) const;
92         Bool_t IsFromGammaConversion( Int_t labelPos, Int_t labelNeg  ) const;
93         Bool_t IsFromGammaConversion( Double_t psiPair, Double_t deltaPhi ) const;
94         Bool_t HaveSameMother( Int_t label1, Int_t label2 ) const;
95         
96         Double_t GetPsiPair( const AliKFParticle* pos, const AliKFParticle* neg ) const;
97         Double_t GetPsiPair( const TLorentzVector* pos, const TLorentzVector* neg ) const;
98         Double_t GetPsiPair( const AliESDtrack* trackPos, const AliESDtrack* trackNeg ) const;
99         
100         Int_t GetMonteCarloPid(const AliESDtrack* t) const;
101         Int_t GetBayesPid(const AliESDtrack* t, Int_t trackType ) const;
102         Int_t GetNSigmaPid(const AliESDtrack* t, Int_t trackType ) const;
103         
104         void GetGammaCandidates(TClonesArray*& gamma, vector<Int_t>& posIndex, vector<Int_t>& negIndex);
105         void AngleEposEnegGammaCut( const vector<Int_t>& xPosIndex, const vector<Int_t>& yNegIndex, const TClonesArray* zGamma, TClonesArray*& gamma, vector<Int_t>& posIndex, vector<Int_t>& negIndex);
106         void FillPsiPair(const TClonesArray* pos, const TClonesArray* neg, const TString& hName);
107         void FillAngle(const TClonesArray* x, const TClonesArray* y, const TString& hName);
108         Double_t Rapidity(const TParticle* p) const;
109         void FillPidTable(const TParticle* p, Int_t pid);
110
111         
112   // protected:
113   private:
114
115         AliStack*   fStack;                 //! MC particle stack
116         AliMCEvent* fGCMCEvent;               //! for CF pointer to the MC Event
117
118         AliESDEvent* fESDEvent;             //! ESD event
119
120         vector<Int_t> fEposCandidateIndex;  //! track indexes of e+ candidates
121         vector<Int_t> fEnegCandidateIndex;  //! track indexes of e- candidates
122         vector<Int_t> fGammaCandidatePosIndex; //! track indexes for gamma candidates positive track
123         vector<Int_t> fGammaCandidateNegIndex; //! track indexes for gamma candidates negative track
124
125         TClonesArray* fGammaCandidates;     //! AliKFParticle gamma candidates
126         TClonesArray* fGammaPool;           //! AliKFParticle gamma pool of previous events
127         Int_t fPoolMaxSize; // size of the gamma pool
128         Int_t fGamPoolPos; // Posisiton of last added gamma in the pool
129         
130         AliGammaConversionBGHandler* fBGEventHandler; // Background event handler
131
132         TList* fOutputContainer;           // Histogram container
133         AliMCEventHandler* fMCTruth;       // for CF pointer to MCTruth
134         AliV0Reader* fV0Reader;            // The V0 reader object
135         AliESDpid* fESDpid;                // for dEdx cut based on nSigma to a particle line
136         AliESDtrackCuts* fESDtrackCuts;    // ESD global track cuts
137         AliESDtrackCuts* fITSsaTrackCuts;  // ITS standalone ESD track cuts
138         AliESDpidCuts* fESDpidCuts;        // ESD PID cuts
139         AliGammaConversionHistograms* fHistograms;  // histogram container
140         
141         Bool_t fStandalone;        // Run the task as standalone for the V0reader
142         Bool_t fDoMC;              // process montecarlo simulation
143         Bool_t fComputeBkg;        // Compute combinatorial background
144         Bool_t fUseBayesPID;       // use bayesian pid
145         Bool_t fUseTrackIndexCut;  // use esd track index cut
146         Bool_t fUsePsiPairCut;     // use psi pair cut
147         Bool_t fUseMassCut;        // use mass cut
148         Bool_t fUseGammaCut;       // use e+e- plane angle gamma cut
149         Bool_t fReadMagFieldSign;  // Read the magnetic field sign from the ESD for Psi pair cut
150         Bool_t fUseAliKF;          // Use AliKFParticle to reconstruct the pi0 instead of TLorentzVector class
151         
152         Int_t fMagFieldSign;                 // Magnetic field sign
153         const Double_t fkElectronMass;        // Electron mass
154         Double_t fPsiPairCut;                // Psi pair cut value
155         Double_t fDeltaPhiCutMin;              // Delta_Phi minimum cut value
156         Double_t fDeltaPhiCutMax;              // Delta_Phi maximum cut value
157         Double_t fMassCutMin;                // Minimum value of e+e- mass (GeV/c2)
158         Double_t fMassCutMax;                // Maximum value of e+e- mass (GeV/c2)
159         Double_t fNSigmaBelowElecTPCbethe;   // Number of sigmas below the electron BB in the TPC
160         Double_t fNSigmaAboveElecTPCbethe;   // Number of sigmas above the electron BB in the TPC
161         Double_t fNSigmaAbovePionTPCbethe;   // Number of sigmas above the Pion BB in the TPC
162         Double_t fNSigmaAboveKaonTPCbethe;   // Number of sigmas above the Kaon BB in the TPC
163         Double_t fNSigmaAboveProtonTPCbethe; // Number of sigmas above the Proton BB in the TPC
164
165         TrackSelectionCriteria fTrkSelectionCriteria;      // Selected criteria for track cuts
166
167  private:
168  
169         AliAnalysisTaskGammaConvDalitz( const AliAnalysisTaskGammaConvDalitz& ); // Not implemented
170         AliAnalysisTaskGammaConvDalitz& operator=( const AliAnalysisTaskGammaConvDalitz& ); // Not implemented
171         
172         ClassDef( AliAnalysisTaskGammaConvDalitz, 2 );
173 };
174
175 #endif // ALIANALYSISTASKGAMMACONVDALITZ_H