]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/GammaConv/AliAnalysisTaskGammaConversion.h
Updated Conversion AOD and functionality (Svein), Also a test task for od is added.
[u/mrichter/AliRoot.git] / PWG4 / GammaConv / AliAnalysisTaskGammaConversion.h
1 #ifndef ALIANALYSISTASKGAMMACONVERSION_H
2 #define ALIANALYSISTASKGAMMACONVERSION_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 ////////////////////////////////////////////////
8 //--------------------------------------------- 
9 // Class used to do analysis on conversion pairs
10 //---------------------------------------------
11 ////////////////////////////////////////////////
12
13 #include "AliAnalysisTaskSE.h"
14 #include <vector>
15 #include "AliV0Reader.h"
16 //#include "AliCFManager.h"  // for CF
17 //#include "AliCFContainer.h"   // for CF
18
19 class AliGammaConversionAODObject;
20 class TNtuple;
21 class AliGammaConversionHistograms;
22 class AliESDv0;
23 class AliV0;
24 class AliKFParticle;
25 class AliKFVertex;
26 class AliESDInputHandler;
27 class AliESDEvent;
28 class AliAODEvent;
29 class AliMCEvent;
30 class TList;
31 class AliStack;
32 class AliESDtrackCuts;
33 class AliCFManager; // for CF
34 class AliCFContainer; // for CF
35
36 class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
37 {
38         
39  public:
40   AliAnalysisTaskGammaConversion();
41   AliAnalysisTaskGammaConversion(const char* name);
42   virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
43                 
44   // Implementation of interface methods
45   virtual void UserCreateOutputObjects();
46   virtual void Init();
47   virtual void LocalInit() {Init();}
48   virtual void UserExec(Option_t *option);
49   virtual void Terminate(Option_t *option);
50   //virtual void ConnectInputData(Option_t * option);
51                 
52   void ProcessMCData();
53   void ProcessV0sNoCut();
54   void ProcessV0s();
55   void ProcessGammasForNeutralMesonAnalysis();
56   void ProcessGammasForOmegaMesonAnalysis();
57   void ProcessConvPHOSGammasForNeutralMesonAnalysis();
58   void RecalculateV0ForGamma();
59   // for CF
60   void SetCFManager(AliCFManager * const io) {fCFManager = io;};
61   AliCFManager *GetCFManager() const {return fCFManager;}
62                 
63                 
64   // AOD
65   TString GetAODBranchName() const {return  fAODBranchName;}
66   void SetAODBranchName(TString name)  {fAODBranchName = name ;}        
67   void FillAODWithConversionGammas();
68   // end AOD
69                 
70   static Bool_t IsGoodImpPar(AliESDtrack *const track);
71         
72   // for GammaJetAnalysis
73   void ProcessGammasForGammaJetAnalysis();
74   void CreateListOfChargedParticles();
75   Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
76   void CalculateJetCone(Int_t gammaIndex);
77   Int_t GetIndexHighestPtGamma();
78   void SetESDtrackCuts();
79   // end of Gamma Jet
80                 
81   void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
82   void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
83   void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
84   void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
85   void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
86
87   void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
88   void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
89
90                 
91   void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
92   void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
93   void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
94   void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
95   void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
96   void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
97   void SetDoJet(Bool_t flag){fDoJet=flag;}
98   void SetDoChic(Bool_t flag){fDoChic=flag;}
99   void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}              
100
101   void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
102   void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
103   void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
104   void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
105   void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
106   void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
107   void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
108   void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
109   void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
110   void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
111   void CalculateBackground();
112   void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
113   void FillNtuple();
114   Double_t GetMCOpeningAngle(TParticle* const daughter0, TParticle* const daughter1) const;
115   void CheckV0Efficiency();
116   void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
117                 
118   //////////////////Chi_c Analysis////////////////////////////
119   void GetPID(AliESDtrack *track, Stat_t &pid, Stat_t &weight); 
120   double GetSigmaToVertex(AliESDtrack* t);
121   void ElectronBackground(TString hBg, TClonesArray e);
122   void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
123   void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
124   void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
125   void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
126   TClonesArray GetTLorentzVector(TClonesArray* esdTrack);       
127   void ProcessGammaElectronsForChicAnalysis();
128   ///////////////////////////////////////////////////////////////
129
130   void SetDoCF(Bool_t flag){fDoCF = flag;}
131                 
132  private:
133   AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
134   AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
135                 
136   // for CF
137   enum{
138     kStepGenerated = 0,
139     kStepReconstructable = 1, 
140     kStepGetOnFly = 2,
141     kStepLikeSign = 3,
142     kStepTPCRefit = 4,
143     kStepKinks = 5,
144     kStepdEdx_electronselection = 6,
145     kStepdEdx_pionrejection = 7,
146     kStepNContributors = 8,
147     kStepTPCPID = 9,
148     kStepR = 10,
149     kStepLine = 11,
150     kStepZ = 12,
151     kStepMinClsTPC = 13,
152     kStepSinglePt = 14,
153     kStepNDF = 15,
154     kStepChi2 = 16,
155     kStepEta = 17,
156     kStepPt = 18,
157     kStepTrueGamma = 19
158   };
159   
160   AliV0Reader* fV0Reader; // The V0 reader object 
161                 
162   AliStack * fStack; // pointer to the MC particle stack
163   AliMCEventHandler *fMCTruth; // for CF   pointer to MCTruth
164   AliMCEvent *fGCMCEvent;  // for CF    pointer to the MC Event
165   AliESDEvent* fESDEvent; //pointer to the ESDEvent
166   TList * fOutputContainer; // Histogram container
167   AliCFManager *fCFManager;  // for CF
168   //  AliCFContainer *container;   // for CF
169
170                 
171                 
172   AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
173   Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
174   Bool_t fDoMCTruth; // Flag to switch on/off MC truth 
175   Bool_t fDoNeutralMeson; // flag
176   Bool_t fDoOmegaMeson; // flag
177   Bool_t fDoJet; // flag
178   Bool_t fDoChic; // flag
179   Bool_t fRecalculateV0ForGamma;//flag
180                 
181   TClonesArray * fKFReconstructedGammasTClone; //! transient
182   TClonesArray * fKFReconstructedPi0sTClone; //! transient
183   TClonesArray * fKFRecalculatedGammasTClone; //! transient
184   TClonesArray * fCurrentEventPosElectronTClone; //! transient
185   TClonesArray * fCurrentEventNegElectronTClone; //! transient
186   TClonesArray * fKFReconstructedGammasCutTClone; //! transient
187   TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
188   TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
189                 
190   //  vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
191   vector<Int_t> fElectronv1; // vector containing index of electron 1
192   vector<Int_t> fElectronv2; // vector containing index of electron 2
193                 
194   vector<Int_t> fGammav1; // vector containing index of gamma 1
195   vector<Int_t> fGammav2; // vector containing index of gamma 2
196
197   vector<Int_t> fElectronRecalculatedv1; // vector containing index of electron 1
198   vector<Int_t> fElectronRecalculatedv2; // vector containing index of electron 2
199                 
200   //  AliESDpid * fESDpid; // esd pid
201
202
203   ///////Chi_c Analysis///////////////////////////
204   //  vector<AliESDtrack*> fCurrentEventPosElectron;       // comment here
205   //  vector<AliESDtrack*> fCurrentEventNegElectron;       // comment here
206   //  vector<AliKFParticle> fKFReconstructedGammasCut;     // comment here
207   //  vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
208   //  vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
209   //////////////////////////////////////////////////    
210                 
211   //mass defines
212   Double_t fElectronMass; //electron mass
213   Double_t fGammaMass;    //gamma mass
214   Double_t fPi0Mass;      //pi0mass
215   Double_t fEtaMass;      //eta mass
216                 
217   // width defines
218   Double_t fGammaWidth; //gamma width cut
219   Double_t fPi0Width;   // pi0 width cut
220   Double_t fEtaWidth;   // eta width cut
221                 
222   Double_t fMinOpeningAngleGhostCut; // minimum angle cut
223                 
224   AliESDtrackCuts* fEsdTrackCuts;           // Object containing the parameters of the esd track cuts
225                 
226   Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
227   Bool_t fWriteNtuple;         // flag to set if writing to ntuple on/off
228   TNtuple *fGammaNtuple;       // Ntuple for gamma values
229   TNtuple *fNeutralMesonNtuple;// NTuple for mesons
230                 
231   Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
232                 
233   TClonesArray* fChargedParticles;  //! transient
234   vector<Int_t> fChargedParticlesId;  //! transient
235                 
236   Double_t fGammaPtHighest;  //! transient
237   Double_t fMinPtForGammaJet;  //! transient
238   Double_t fMinIsoConeSize; //! transient
239   Double_t fMinPtIsoCone; //! transient
240   Double_t fMinPtGamChargedCorr; //! transient
241   Double_t fMinPtJetCone; //! transient
242   Int_t    fLeadingChargedIndex; //! transient
243   Double_t fLowPtMapping; //! transient
244   Double_t fHighPtMapping; //! transient
245   Bool_t fDoCF; //! transient
246                 
247   TClonesArray* fAODBranch ;        //! selected particles branch
248   TString fAODBranchName; // New AOD branch name
249   TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
250   Bool_t fDoNeutralMesonV0MCCheck; //flag
251
252   vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
253
254   ClassDef(AliAnalysisTaskGammaConversion, 9); // Analysis task for gamma conversions
255 };
256
257 #endif //ALIANALYSISTASKGAMMA_H