]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/AliAnalysisTaskGammaConversion.h
Transition PWG4 --> PWGGA
[u/mrichter/AliRoot.git] / PWGGA / 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 "AliGammaConversionBGHandler.h"
17 #include "TRandom3.h"
18 #include "TF1.h"
19 #include "TTreeStream.h"
20 #include "AliMultiplicity.h"
21 //#include "AliCFManager.h"  // for CF
22 //#include "AliCFContainer.h"   // for CF
23 #include "AliAODConversionMother.h"
24
25
26 class AliAODPWG4Particle;
27 class AliAODConversionPhoton;
28 class AliAODConversionMother;
29 class AliKFConversionPhoton;
30 class AliKFConversionMother;
31 class TNtuple;
32 class AliGammaConversionHistograms;
33 class AliESDv0;
34 class AliV0;
35 class AliKFParticle;
36 class AliKFVertex;
37 class AliESDInputHandler;
38 class AliESDEvent;
39 class AliAODEvent;
40 class AliMCEvent;
41 class TList;
42 class AliStack;
43 class AliESDtrackCuts;
44 class AliTriggerAnalysis;
45 class AliCFManager; // for CF
46 class AliCFContainer; // for CF
47 class TRandom3;
48 class TF1;
49
50 class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
51 {
52         
53 public:
54         typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t; 
55         AliAnalysisTaskGammaConversion();
56         AliAnalysisTaskGammaConversion(const char* name);
57         virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
58                         
59         // Implementation of interface methods
60         virtual void UserCreateOutputObjects();
61         virtual void Init();
62         virtual void LocalInit() {Init();}
63         virtual void UserExec(Option_t *option);
64         virtual void Terminate(Option_t *option);
65         //virtual void ConnectInputData(Option_t * option);
66         void CheckMesonProcessTypeEventQuality(Int_t evtQ);
67         Int_t GetProcessType(const AliMCEvent * mcEvt) ;
68         void ProcessMCData();
69         void ProcessV0sNoCut();
70         void ProcessV0s();
71         void ProcessGammasForNeutralMesonAnalysis();
72         void ProcessGammasForOmegaMesonAnalysis();
73     Bool_t DoEventSelection();
74   //  void ProcessConvPHOSGammasForNeutralMesonAnalysis();
75         //  void RecalculateV0ForGamma();
76         // for CF
77         void SetCFManager(AliCFManager * const io) {fCFManager = io;};
78         AliCFManager *GetCFManager() const {return fCFManager;}
79                         
80                         
81         // AOD
82         TString GetAODBranchName() const {return  fAODBranchName;}
83         void SetAODBranchName(TString name)  {fAODBranchName = name ;}  
84         void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
85         void FillAODWithConversionGammas();
86         void AddGammaToAOD(AliKFConversionPhoton * kfParticle);
87     void PostAODEvent();
88         // void AddPionToAOD(AliKFConversionMother * kfParticle);
89         // void AddOmegaToAOD(AliKFParticle * kfParticle, Int_t daughter1, Int_t daughter2);
90         void TagDaughter(Int_t gammaIndex);
91
92         // end AOD
93                         
94         static Bool_t IsGoodImpPar(const AliESDtrack *const track);
95                 
96         // for GammaJetAnalysis
97         void ProcessGammasForGammaJetAnalysis();
98         void CreateListOfChargedParticles();
99         Double_t GetMinimumDistanceToCharge(Int_t indexHighestPtGamma);
100         void CalculateJetCone(Int_t gammaIndex);
101         Int_t GetIndexHighestPtGamma();
102         void SetESDtrackCuts();
103         // end of Gamma Jet
104                         
105         void SetMinPtForGammaJet(Double_t minPtForGammaJet){fMinPtForGammaJet=minPtForGammaJet;}
106         void SetMinIsoConeSize(Double_t minIsoConeSize){fMinIsoConeSize=minIsoConeSize;}
107         void SetMinPtIsoCone(Double_t minPtIsoCone){fMinPtIsoCone=minPtIsoCone;}
108         void SetMinPtGamChargedCorr(Double_t minPtGamChargedCorr){fMinPtGamChargedCorr=minPtGamChargedCorr;}
109         void SetMinPtJetCone(Double_t minPtJetCone){fMinPtJetCone=minPtJetCone;}
110
111         void SetLowPtMapping(Double_t lowPtMapping){fLowPtMapping=lowPtMapping;}
112         void SetHighPtMapping(Double_t highPtMapping){fHighPtMapping=highPtMapping;}
113
114                         
115         void SetHistograms(AliGammaConversionHistograms *const histograms){fHistograms=histograms;}
116         void SetTriggerCINT1B(Bool_t flag){fTriggerCINT1B=flag;}
117         void SetDoMCTruth(Bool_t flag){fDoMCTruth=flag;}
118         void SetDoNeutralMeson(Bool_t flag){fDoNeutralMeson=flag;}
119         void SetDoOmegaMeson(Bool_t flag){fDoOmegaMeson=flag;}
120         void SetDoNeutralMesonV0MCCheck(Bool_t flag){fDoNeutralMesonV0MCCheck=flag;}
121         void SetDoJet(Bool_t flag){fDoJet=flag;}
122         void SetDoChic(Bool_t flag){fDoChic=flag;}
123         void SetDoHadInt(Bool_t flag){fDoHadInt=flag;}
124         void SetRecalculateV0ForGamma(Bool_t flag){fRecalculateV0ForGamma=flag;}                
125
126         void SetElectronMass(Double_t electronMass){fElectronMass = electronMass;}
127         void SetGammaMass(Double_t gammaMass){fGammaMass = gammaMass;}
128         void SetGammaWidth(Double_t gammaWidth){fGammaWidth = gammaWidth;}
129         void SetPi0Mass(Double_t pi0Mass){fPi0Mass = pi0Mass;}
130         void SetPi0Width(Double_t pi0Width){fPi0Width = pi0Width;}
131         void SetEtaMass(Double_t etaMass){fEtaMass = etaMass;}
132         void SetEtaWidth(Double_t etaWidth){fEtaWidth = etaWidth;}
133         void SetMinOpeningAngleGhostCut(Double_t ghostCut){fMinOpeningAngleGhostCut = ghostCut;}
134         void SetV0Reader(AliV0Reader* const reader){fV0Reader=reader; fV0Reader->SetESDtrackCuts(fEsdTrackCuts);}
135         void SetCalculateBackground(Bool_t bg){fCalculateBackground=bg;}
136         void CalculateBackground();
137         void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
138         void FillNtuple();
139         Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
140         void CheckV0Efficiency();
141         void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
142     void SetCreateAOD(Bool_t doAod) { fKFCreateAOD = doAod; };
143     void SetExchangeAOD(Bool_t xchAOD) { fKFExchangeAOD = xchAOD; };
144         TString GetDeltaAODFileName() const { return fKFDeltaAODFileName; };
145         //////////////////Chi_c Analysis////////////////////////////
146         void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);     
147         double GetSigmaToVertex(const AliESDtrack* t);
148         void ElectronBackground(TString hBg, TClonesArray e);
149         void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
150         void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
151         void FillGammaElectronInvMass(TString histoMass,TString histoDiff, TClonesArray const fKFGammas, TClonesArray const tlVeNeg,TClonesArray const tlVePos);
152         void CleanWithAngleCuts(TClonesArray const negativeElectrons, TClonesArray const positiveElectrons, TClonesArray const gammas);
153         TClonesArray GetTLorentzVector(TClonesArray* esdTrack); 
154         void ProcessGammaElectronsForChicAnalysis();
155         void ProcessHadronicInteraction(AliESDEvent *event);
156         Bool_t CheckLooper(Int_t index, AliESDEvent *event);
157         Bool_t CheckV0(Int_t index, AliESDEvent *event);
158         ///////////////////////////////////////////////////////////////
159
160         void SetDoCF(Bool_t flag){fDoCF = flag;}
161
162         void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}              
163
164         void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
165
166         void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
167
168         void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
169
170         void SetDoRotation(Bool_t flag){fDoRotation = flag;}
171
172         void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
173
174         void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
175
176         void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
177
178         void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
179
180         void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
181
182         void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
183         void SetUseMultiplicity(Int_t useMultiplicity) {fUseMultiplicity=useMultiplicity;}
184         void SetUseMultiplicityBin(Int_t useMultiplicityBin) {fUseMultiplicityBin=useMultiplicityBin;}
185         void SetUseHBTMultiplicity(Int_t useHBTMultiplicity) {fUseHBTMultiplicity=useHBTMultiplicity;}
186         void SetUseHBTMultiplicityBin(Int_t useHBTMultiplicityBin) {fUseHBTMultiplicityBin=useHBTMultiplicityBin;}
187
188         Int_t CalculateMultiplicityBin();
189         void SetUseCentrality(Int_t useCentrality) {fUseCentrality=useCentrality;}
190         void SetUseCentralityBin(Int_t useCentralityBin) {fUseCentralityBin=useCentralityBin;}
191
192         void SetMaxChi2HadIntCut(Float_t chi2HadInt){fMaxChi2HadInt = chi2HadInt; }
193         void SetMaxErr2DHadIntCut(Float_t err2DHadInt){fMaxErr2DHadInt =err2DHadInt ;}
194         void SetMinPtHadIntCut(Float_t ptMinHadInt){fPtMinHadInt =ptMinHadInt ;}
195         
196
197
198
199  private:
200         AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
201         AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
202   
203         TTreeSRedirector *fpcstream;
204                                 
205   // for CF
206  enum{
207                 kStepGenerated = 0,
208                 kStepReconstructable = 1, 
209                 kStepGetOnFly = 2,
210                 kStepLikeSign = 3,
211                 kStepTPCRefit = 4,
212                 kStepKinks = 5,
213                 kStepdEdxElectronSelection = 6,
214                 kStepdEdxPpionRejection = 7,
215                 kStepNContributors = 8,
216                 kStepTPCPID = 9,
217                 kStepR = 10,
218                 kStepLine = 11,
219                 kStepZ = 12,
220                 kStepMinClsTPC = 13,
221                 kStepSinglePt = 14,
222                 kStepNDF = 15,
223                 kStepChi2 = 16,
224                 kStepEta = 17,
225                 kStepPt = 18,
226                 kStepTrueGamma = 19
227         };
228         
229         AliV0Reader* fV0Reader; // The V0 reader object 
230                         
231         AliStack * fStack; // pointer to the MC particle stack
232         AliMCEventHandler *fMCTruth; // for CF   pointer to MCTruth
233         AliMCEvent *fGCMCEvent;  // for CF    pointer to the MC Event
234         AliESDEvent* fESDEvent; //pointer to the ESDEvent
235         TList * fOutputContainer; // Histogram container
236         AliCFManager *fCFManager;  // for CF
237         //  AliCFContainer *container;   // for CF
238
239                         
240                         
241         AliGammaConversionHistograms *fHistograms; // Pointer to the histogram handling class
242         Bool_t fTriggerCINT1B; //Flag to select trigger CINT1B
243         Bool_t fDoMCTruth; // Flag to switch on/off MC truth 
244         Bool_t fDoNeutralMeson; // flag
245         Bool_t fDoOmegaMeson; // flag
246         Bool_t fDoJet; // flag
247         Bool_t fDoChic; // flag
248         Bool_t fDoHadInt; // flag
249                 
250         Bool_t fRecalculateV0ForGamma;//flag
251                         
252         TClonesArray * fKFReconstructedGammasTClone; //! transient
253         TClonesArray * fKFReconstructedPi0sTClone; //! transient
254         TClonesArray * fKFRecalculatedGammasTClone; //! transient
255         TClonesArray * fCurrentEventPosElectronTClone; //! transient
256         TClonesArray * fCurrentEventNegElectronTClone; //! transient
257         TClonesArray * fKFReconstructedGammasCutTClone; //! transient
258         TClonesArray * fPreviousEventTLVNegElectronTClone; //! transient
259         TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
260                         
261         //  vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
262                         
263         //  AliESDpid * fESDpid; // esd pid
264
265
266         ///////Chi_c Analysis///////////////////////////
267         //  vector<AliESDtrack*> fCurrentEventPosElectron;       // comment here
268         //  vector<AliESDtrack*> fCurrentEventNegElectron;       // comment here
269         //  vector<AliKFParticle> fKFReconstructedGammasCut;     // comment here
270         //  vector<TLorentzVector> fPreviousEventTLVNegElectron; // comment here
271         //  vector<TLorentzVector> fPreviousEventTLVPosElectron; // comment here
272         //////////////////////////////////////////////////      
273                         
274         //mass defines
275         Double_t fElectronMass; //electron mass
276         Double_t fGammaMass;    //gamma mass
277         Double_t fPi0Mass;      //pi0mass
278         Double_t fEtaMass;      //eta mass
279                         
280         // width defines
281         Double_t fGammaWidth; //gamma width cut
282         Double_t fPi0Width;   // pi0 width cut
283         Double_t fEtaWidth;   // eta width cut
284                         
285         Double_t fMinOpeningAngleGhostCut; // minimum angle cut
286                         
287         AliESDtrackCuts* fEsdTrackCuts;           // Object containing the parameters of the esd track cuts
288                         
289         Bool_t fCalculateBackground; //flag to set backgrount calculation on/off
290         Bool_t fWriteNtuple;         // flag to set if writing to ntuple on/off
291         TNtuple *fGammaNtuple;       // Ntuple for gamma values
292         TNtuple *fNeutralMesonNtuple;// NTuple for mesons
293                         
294         Int_t fTotalNumberOfAddedNtupleEntries; // number of added ntuple entries
295                         
296         TClonesArray* fChargedParticles;  //! transient
297         vector<Int_t> fChargedParticlesId;  //! transient
298                         
299         Double_t fGammaPtHighest;  //! transient
300         Double_t fMinPtForGammaJet;  //! transient
301         Double_t fMinIsoConeSize; //! transient
302         Double_t fMinPtIsoCone; //! transient
303         Double_t fMinPtGamChargedCorr; //! transient
304         Double_t fMinPtJetCone; //! transient
305         Int_t    fLeadingChargedIndex; //! transient
306         Double_t fLowPtMapping; //! transient
307         Double_t fHighPtMapping; //! transient
308         Bool_t fDoCF; //! transient
309                         
310         TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
311         //TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
312         //TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
313         TString fAODBranchName; // New AOD branch name
314         Bool_t fKFCreateAOD; //Create the AOD tclones? (regardless if storing or not)
315         Bool_t fKFExchangeAOD; //Create the AOD tclones? (regardless if storing or not)
316         Bool_t fKFForceAOD;  //Set the Analysis Manager FillAOD variable to true every event
317         TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
318         Bool_t fDoNeutralMesonV0MCCheck; //flag
319         Bool_t fUseTrackMultiplicityForBG; //flag
320         Bool_t fMoveParticleAccordingToVertex; //flag
321         Bool_t fApplyChi2Cut; //flag
322         Int_t fNRandomEventsForBG; //number of random events to use in rotation method
323         Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
324         Bool_t fDoRotation; //flag
325         Bool_t fCheckBGProbability; //flag
326         //  vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
327         Bool_t fRemovePileUp;                 // Remove Pile Up
328         Bool_t fSelectV0AND;                 // Select V0AND
329         AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
330         Int_t fMultiplicity;
331         Int_t fUseMultiplicity;
332         Int_t fUseMultiplicityBin;
333         Int_t fUseHBTMultiplicity;
334         Int_t fUseHBTMultiplicityBin;
335         Int_t fUseCentrality;
336         Int_t fUseCentralityBin;
337         TRandom3 fRandom;
338         Float_t fMaxChi2HadInt;         
339         Float_t fMaxErr2DHadInt;                
340         Float_t fPtMinHadInt;
341
342         ClassDef(AliAnalysisTaskGammaConversion, 22); // Analysis task for gamma conversions
343 };
344
345 #endif //ALIANALYSISTASKGAMMA_H