ROOT logo
#ifndef ALIANLYSISTASKGAMMACONVFLOW_cxx
#define ALIANLYSISTASKGAMMACONVFLOW_cxx

#include "AliAnalysisTaskSE.h"
#include "AliESDtrack.h"
#include "AliV0ReaderV1.h"
#include "AliConvEventCuts.h"
#include "AliKFConversionPhoton.h"
#include "AliGammaConversionAODBGHandler.h"
#include "AliConversionAODBGHandlerRP.h"
#include "AliConversionMesonCuts.h"
#include "AliAnalysisManager.h"
#include "TProfile2D.h"
#include "TH3.h"
#include "TH3F.h"


class AliFlowTrackCuts;
class AliFlowTrack;
class AliFlowEvent;
class AliFlowCandidateTrack;
class AliFlowEventSimple;


class AliAnalysisTaskGammaConvFlow : public AliAnalysisTaskSE {
    
public:
    AliAnalysisTaskGammaConvFlow();
    AliAnalysisTaskGammaConvFlow(const char *name);
    virtual ~AliAnalysisTaskGammaConvFlow();
    
    virtual void   UserCreateOutputObjects();
    virtual Bool_t Notify();
    virtual void   UserExec(Option_t *);
    virtual void   Terminate(const Option_t*);
    
    void SetIsHeavyIon(Int_t flag){
        fIsHeavyIon = flag;
        
    }
    
    void SetDoMesonAnalysis(Bool_t flag){fDoMesonAnalysis = flag;}
    void SetDoMesonQA(Int_t flag){fDoMesonQA = flag;}
    void SetDoPhotonQA(Int_t flag){fDoPhotonQA = flag;}
    void ProcessPhotonCandidates();
  //  void CalculatePi0Candidates();
    //void CalculateBackground();
  //  void CalculateBackgroundRP();

//     void RelabelAODPhotonCandidates(Bool_t mode);

    //void RotateParticle(AliAODConversionPhoton *gamma);
    //void RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP);
    
    void SetEventCutList(Int_t nCuts, TList *CutArray){
        fnCuts = nCuts;
        fEventCutArray = CutArray;
    }
    void SetConversionCutList(Int_t nCuts, TList *CutArray){
        fnCuts = nCuts;
        fCutArray = CutArray;
    }
 //   void SetMesonCutList(Int_t nCuts, TList *CutArray){
 //       fnCuts = nCuts;
 //       fMesonCutArray = CutArray;
 //   }
    
    // BG HandlerSettings
   // void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
//     void FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[]);
   // void MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex);
    void UpdateEventByEventData();
    void SetLogBinningXTH2(TH2* histoRebin);
  //  Int_t GetSourceClassification(Int_t daughter, Int_t pdgCode);
    
    
    template <typename T> void           SetNullCuts(T* aod);
    void                                 PrepareFlowEvent(Int_t iMulti, AliFlowEvent *FlowEv) const;
    void                                 SetRPCuts(AliFlowTrackCuts *cutsRP) { fCutsRP = cutsRP; }
    void                                 ProcessPhotonCandidatesforV2();
    
    
protected:
	AliV0ReaderV1 						*fV0Reader;											//
	AliGammaConversionAODBGHandler 		**fBGHandler;										//
	AliConversionAODBGHandlerRP    		**fBGHandlerRP;										//
	AliVEvent 							*fInputEvent;										//
//    AliMCEvent 							*fMCEvent;											//
//    AliStack 							*fMCStack;											//
	TList 								**fCutFolder;										//
	TList 								**fESDList;											//
	TList 								**fBackList;										//
	TList 								**fMotherList;										//
	TList 								**fPhotonDCAList;									//
	TList 								**fMesonDCAList;		 							//
//   TList 								**fTrueList;										//
//   TList 								**fMCList;											//
	TList 								**fHeaderNameList;									//
	TList 								*fOutputContainer;									//
	TClonesArray 						*fReaderGammas;										//
	TList 								*fGammaCandidates;									//
	TList 								*fEventCutArray;									//
	AliConvEventCuts 					*fEventCuts;										//
	TList 								*fCutArray;											//
	AliConversionPhotonCuts 			*fConversionCuts;									//
	TList 								*fMesonCutArray;									//
	AliConversionMesonCuts 				*fMesonCuts;										//
	TH1F 								**hESDConvGammaPt;									//
	TH1F 								**hESDConvGammaR;									//
	TH1F 								**hESDConvGammaEta;									//
	Float_t 							fPtGamma;											//
	Float_t 							fDCAzPhoton;										//
	Float_t 							fRConvPhoton;										//
	Float_t 							fEtaPhoton;											//
	UChar_t 							iCatPhoton;											//
	UChar_t 							iPhotonMCInfo; 										//
	// 0: garbage,
	// 1: background
	// 2: secondary photon not from eta or k0s,
	// 3: secondary photon from eta,
	// 4: secondary photon from k0s,
	// 5: dalitz
	// 6: primary gamma
	TH2F 								**hESDMotherInvMassPt;								//
//  THnSparseF 							**sESDMotherInvMassPtZM;							//
	TH2F 								**hESDMotherBackInvMassPt;							//
//  THnSparseF 							**sESDMotherBackInvMassPtZM;						//
	TH2F 								**hESDMotherInvMassEalpha;							//
	TH2F 								**hESDMotherPi0PtY;									//
	TH2F 								**hESDMotherEtaPtY;									//
	TH2F 								**hESDMotherPi0PtAlpha;								//
	TH2F 								**hESDMotherEtaPtAlpha;								//
	TH2F 								**hESDMotherPi0PtOpenAngle;							//
	TH2F 								**hESDMotherEtaPtOpenAngle;							//

	TH1I 								**hNEvents;											//
	TH1I 								**hNGoodESDTracks;									//
	TH1I 								**hNGammaCandidates;								//
	TH2F 								**hNGoodESDTracksVsNGammaCanditates;				//
	TH1I 								**hNV0Tracks;										//
	TProfile 							**hEtaShift;										//
	TTree 								**tESDMesonsInvMassPtDcazMinDcazMaxFlag;			//
	Float_t 							fInvMass;											//
	Float_t 							fPt;												//
	Float_t 							fDCAzGammaMin;										//
	Float_t 							fDCAzGammaMax;										//
	UChar_t 							iFlag;												//
	UChar_t 							iMesonMCInfo; 										//
	// 0: garbage,
	// 1: background
	// 2: secondary meson not from eta or k0s,
	// 3: secondary meson from eta,
	// 4: secondary meson from k0s,
	// 5: dalitz
	// 6: primary meson gamma-gamma-channel
	Double_t 							fEventPlaneAngle; 									// EventPlaneAngle
	TRandom3 							fRandom;											//
	Int_t 								fnGammaCandidates;									//
	Double_t 							*fUnsmearedPx;										//[fnGammaCandidates]
	Double_t 							*fUnsmearedPy;										//[fnGammaCandidates]
	Double_t 							*fUnsmearedPz;										//[fnGammaCandidates]
	Double_t 							*fUnsmearedE;										//[fnGammaCandidates]
	Int_t 								*fMCStackPos;										//[fnGammaCandidates]
	Int_t								*fMCStackNeg;										//[fnGammaCandidates]
	Int_t 								*fESDArrayPos;										//[fnGammaCandidates]
	Int_t 								*fESDArrayNeg;										//[fnGammaCandidates]
	Int_t 								fnCuts;												//
	Int_t 								fiCut;												//
	Bool_t 								fMoveParticleAccordingToVertex;						//
	Int_t 								fIsHeavyIon;										//
	Bool_t 								fDoMesonAnalysis;									//
	Int_t 								fDoMesonQA;											//
	Int_t 								fDoPhotonQA;										//
	Bool_t 								fIsFromMBHeader;									//
	TH1D                               	*fhistoEPVZ;										//!

    
private:
	Bool_t               fDebug; //! enable debug mode
	AliFlowTrackCuts     *fCutsRP; // track cuts for reference particles
	AliFlowTrackCuts     *fNullCuts; // dummy cuts for flow event tracks
	AliFlowEvent         *fFlowEvent; //! flow events Inclusive e

	AliAnalysisTaskGammaConvFlow(const AliAnalysisTaskGammaConvFlow&); // Prevent copy-construction
	AliAnalysisTaskGammaConvFlow &operator=(const AliAnalysisTaskGammaConvFlow&); // Prevent assignment
	ClassDef(AliAnalysisTaskGammaConvFlow, 2);
};

#endif
 AliAnalysisTaskGammaConvFlow.h:1
 AliAnalysisTaskGammaConvFlow.h:2
 AliAnalysisTaskGammaConvFlow.h:3
 AliAnalysisTaskGammaConvFlow.h:4
 AliAnalysisTaskGammaConvFlow.h:5
 AliAnalysisTaskGammaConvFlow.h:6
 AliAnalysisTaskGammaConvFlow.h:7
 AliAnalysisTaskGammaConvFlow.h:8
 AliAnalysisTaskGammaConvFlow.h:9
 AliAnalysisTaskGammaConvFlow.h:10
 AliAnalysisTaskGammaConvFlow.h:11
 AliAnalysisTaskGammaConvFlow.h:12
 AliAnalysisTaskGammaConvFlow.h:13
 AliAnalysisTaskGammaConvFlow.h:14
 AliAnalysisTaskGammaConvFlow.h:15
 AliAnalysisTaskGammaConvFlow.h:16
 AliAnalysisTaskGammaConvFlow.h:17
 AliAnalysisTaskGammaConvFlow.h:18
 AliAnalysisTaskGammaConvFlow.h:19
 AliAnalysisTaskGammaConvFlow.h:20
 AliAnalysisTaskGammaConvFlow.h:21
 AliAnalysisTaskGammaConvFlow.h:22
 AliAnalysisTaskGammaConvFlow.h:23
 AliAnalysisTaskGammaConvFlow.h:24
 AliAnalysisTaskGammaConvFlow.h:25
 AliAnalysisTaskGammaConvFlow.h:26
 AliAnalysisTaskGammaConvFlow.h:27
 AliAnalysisTaskGammaConvFlow.h:28
 AliAnalysisTaskGammaConvFlow.h:29
 AliAnalysisTaskGammaConvFlow.h:30
 AliAnalysisTaskGammaConvFlow.h:31
 AliAnalysisTaskGammaConvFlow.h:32
 AliAnalysisTaskGammaConvFlow.h:33
 AliAnalysisTaskGammaConvFlow.h:34
 AliAnalysisTaskGammaConvFlow.h:35
 AliAnalysisTaskGammaConvFlow.h:36
 AliAnalysisTaskGammaConvFlow.h:37
 AliAnalysisTaskGammaConvFlow.h:38
 AliAnalysisTaskGammaConvFlow.h:39
 AliAnalysisTaskGammaConvFlow.h:40
 AliAnalysisTaskGammaConvFlow.h:41
 AliAnalysisTaskGammaConvFlow.h:42
 AliAnalysisTaskGammaConvFlow.h:43
 AliAnalysisTaskGammaConvFlow.h:44
 AliAnalysisTaskGammaConvFlow.h:45
 AliAnalysisTaskGammaConvFlow.h:46
 AliAnalysisTaskGammaConvFlow.h:47
 AliAnalysisTaskGammaConvFlow.h:48
 AliAnalysisTaskGammaConvFlow.h:49
 AliAnalysisTaskGammaConvFlow.h:50
 AliAnalysisTaskGammaConvFlow.h:51
 AliAnalysisTaskGammaConvFlow.h:52
 AliAnalysisTaskGammaConvFlow.h:53
 AliAnalysisTaskGammaConvFlow.h:54
 AliAnalysisTaskGammaConvFlow.h:55
 AliAnalysisTaskGammaConvFlow.h:56
 AliAnalysisTaskGammaConvFlow.h:57
 AliAnalysisTaskGammaConvFlow.h:58
 AliAnalysisTaskGammaConvFlow.h:59
 AliAnalysisTaskGammaConvFlow.h:60
 AliAnalysisTaskGammaConvFlow.h:61
 AliAnalysisTaskGammaConvFlow.h:62
 AliAnalysisTaskGammaConvFlow.h:63
 AliAnalysisTaskGammaConvFlow.h:64
 AliAnalysisTaskGammaConvFlow.h:65
 AliAnalysisTaskGammaConvFlow.h:66
 AliAnalysisTaskGammaConvFlow.h:67
 AliAnalysisTaskGammaConvFlow.h:68
 AliAnalysisTaskGammaConvFlow.h:69
 AliAnalysisTaskGammaConvFlow.h:70
 AliAnalysisTaskGammaConvFlow.h:71
 AliAnalysisTaskGammaConvFlow.h:72
 AliAnalysisTaskGammaConvFlow.h:73
 AliAnalysisTaskGammaConvFlow.h:74
 AliAnalysisTaskGammaConvFlow.h:75
 AliAnalysisTaskGammaConvFlow.h:76
 AliAnalysisTaskGammaConvFlow.h:77
 AliAnalysisTaskGammaConvFlow.h:78
 AliAnalysisTaskGammaConvFlow.h:79
 AliAnalysisTaskGammaConvFlow.h:80
 AliAnalysisTaskGammaConvFlow.h:81
 AliAnalysisTaskGammaConvFlow.h:82
 AliAnalysisTaskGammaConvFlow.h:83
 AliAnalysisTaskGammaConvFlow.h:84
 AliAnalysisTaskGammaConvFlow.h:85
 AliAnalysisTaskGammaConvFlow.h:86
 AliAnalysisTaskGammaConvFlow.h:87
 AliAnalysisTaskGammaConvFlow.h:88
 AliAnalysisTaskGammaConvFlow.h:89
 AliAnalysisTaskGammaConvFlow.h:90
 AliAnalysisTaskGammaConvFlow.h:91
 AliAnalysisTaskGammaConvFlow.h:92
 AliAnalysisTaskGammaConvFlow.h:93
 AliAnalysisTaskGammaConvFlow.h:94
 AliAnalysisTaskGammaConvFlow.h:95
 AliAnalysisTaskGammaConvFlow.h:96
 AliAnalysisTaskGammaConvFlow.h:97
 AliAnalysisTaskGammaConvFlow.h:98
 AliAnalysisTaskGammaConvFlow.h:99
 AliAnalysisTaskGammaConvFlow.h:100
 AliAnalysisTaskGammaConvFlow.h:101
 AliAnalysisTaskGammaConvFlow.h:102
 AliAnalysisTaskGammaConvFlow.h:103
 AliAnalysisTaskGammaConvFlow.h:104
 AliAnalysisTaskGammaConvFlow.h:105
 AliAnalysisTaskGammaConvFlow.h:106
 AliAnalysisTaskGammaConvFlow.h:107
 AliAnalysisTaskGammaConvFlow.h:108
 AliAnalysisTaskGammaConvFlow.h:109
 AliAnalysisTaskGammaConvFlow.h:110
 AliAnalysisTaskGammaConvFlow.h:111
 AliAnalysisTaskGammaConvFlow.h:112
 AliAnalysisTaskGammaConvFlow.h:113
 AliAnalysisTaskGammaConvFlow.h:114
 AliAnalysisTaskGammaConvFlow.h:115
 AliAnalysisTaskGammaConvFlow.h:116
 AliAnalysisTaskGammaConvFlow.h:117
 AliAnalysisTaskGammaConvFlow.h:118
 AliAnalysisTaskGammaConvFlow.h:119
 AliAnalysisTaskGammaConvFlow.h:120
 AliAnalysisTaskGammaConvFlow.h:121
 AliAnalysisTaskGammaConvFlow.h:122
 AliAnalysisTaskGammaConvFlow.h:123
 AliAnalysisTaskGammaConvFlow.h:124
 AliAnalysisTaskGammaConvFlow.h:125
 AliAnalysisTaskGammaConvFlow.h:126
 AliAnalysisTaskGammaConvFlow.h:127
 AliAnalysisTaskGammaConvFlow.h:128
 AliAnalysisTaskGammaConvFlow.h:129
 AliAnalysisTaskGammaConvFlow.h:130
 AliAnalysisTaskGammaConvFlow.h:131
 AliAnalysisTaskGammaConvFlow.h:132
 AliAnalysisTaskGammaConvFlow.h:133
 AliAnalysisTaskGammaConvFlow.h:134
 AliAnalysisTaskGammaConvFlow.h:135
 AliAnalysisTaskGammaConvFlow.h:136
 AliAnalysisTaskGammaConvFlow.h:137
 AliAnalysisTaskGammaConvFlow.h:138
 AliAnalysisTaskGammaConvFlow.h:139
 AliAnalysisTaskGammaConvFlow.h:140
 AliAnalysisTaskGammaConvFlow.h:141
 AliAnalysisTaskGammaConvFlow.h:142
 AliAnalysisTaskGammaConvFlow.h:143
 AliAnalysisTaskGammaConvFlow.h:144
 AliAnalysisTaskGammaConvFlow.h:145
 AliAnalysisTaskGammaConvFlow.h:146
 AliAnalysisTaskGammaConvFlow.h:147
 AliAnalysisTaskGammaConvFlow.h:148
 AliAnalysisTaskGammaConvFlow.h:149
 AliAnalysisTaskGammaConvFlow.h:150
 AliAnalysisTaskGammaConvFlow.h:151
 AliAnalysisTaskGammaConvFlow.h:152
 AliAnalysisTaskGammaConvFlow.h:153
 AliAnalysisTaskGammaConvFlow.h:154
 AliAnalysisTaskGammaConvFlow.h:155
 AliAnalysisTaskGammaConvFlow.h:156
 AliAnalysisTaskGammaConvFlow.h:157
 AliAnalysisTaskGammaConvFlow.h:158
 AliAnalysisTaskGammaConvFlow.h:159
 AliAnalysisTaskGammaConvFlow.h:160
 AliAnalysisTaskGammaConvFlow.h:161
 AliAnalysisTaskGammaConvFlow.h:162
 AliAnalysisTaskGammaConvFlow.h:163
 AliAnalysisTaskGammaConvFlow.h:164
 AliAnalysisTaskGammaConvFlow.h:165
 AliAnalysisTaskGammaConvFlow.h:166
 AliAnalysisTaskGammaConvFlow.h:167
 AliAnalysisTaskGammaConvFlow.h:168
 AliAnalysisTaskGammaConvFlow.h:169
 AliAnalysisTaskGammaConvFlow.h:170
 AliAnalysisTaskGammaConvFlow.h:171
 AliAnalysisTaskGammaConvFlow.h:172
 AliAnalysisTaskGammaConvFlow.h:173
 AliAnalysisTaskGammaConvFlow.h:174
 AliAnalysisTaskGammaConvFlow.h:175
 AliAnalysisTaskGammaConvFlow.h:176
 AliAnalysisTaskGammaConvFlow.h:177
 AliAnalysisTaskGammaConvFlow.h:178
 AliAnalysisTaskGammaConvFlow.h:179
 AliAnalysisTaskGammaConvFlow.h:180
 AliAnalysisTaskGammaConvFlow.h:181
 AliAnalysisTaskGammaConvFlow.h:182
 AliAnalysisTaskGammaConvFlow.h:183
 AliAnalysisTaskGammaConvFlow.h:184
 AliAnalysisTaskGammaConvFlow.h:185
 AliAnalysisTaskGammaConvFlow.h:186
 AliAnalysisTaskGammaConvFlow.h:187
 AliAnalysisTaskGammaConvFlow.h:188
 AliAnalysisTaskGammaConvFlow.h:189