ROOT logo
#ifndef ALIANALYSISTASKSOH_H
#define ALIANALYSISTASKSOH_H

// $Id$

class TList;
class TH1F;
class TH2F;
class TH3F;
class THnSparse;
class TArrayI;
class AliESDEvent;
class AliMCEvent;
class AliESDtrack;
class AliESDCaloCluster;
class AliESDtrackCuts;

#include "AliAnalysisTaskSE.h"

class AliAnalysisTaskSOH : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskSOH();
  AliAnalysisTaskSOH(const char *name);
  virtual ~AliAnalysisTaskSOH();
  
  void                UserCreateOutputObjects();
  void                UserExec(Option_t *option);
  void                Terminate(Option_t *);
  
  void SetMcProcess(Bool_t p)                                        { fMcProcess=p;              }
  void SetTrackProcess(Bool_t p)                                     { fTrackProcess=p;           }
  void SetSFProcess(Bool_t p)                                        { fSFProcess=p;              }
  void SetClusterProcess(Bool_t p)                                   { fClusterProcess=p;         }
  void SetZvtx(Double_t zvtx)                                        { fZVtxMax = zvtx;           }

  void                SetEsdTrackCuts(AliESDtrackCuts *cuts)         { fEsdTrackCuts     = cuts ; }
  void                SetHybridTrackCuts1(AliESDtrackCuts *cuts)     { fHybridTrackCuts1 = cuts ; }
  void                SetHybridTrackCuts2(AliESDtrackCuts *cuts)     { fHybridTrackCuts2 = cuts ; }

 private:

  AliESDtrack         *GetAcceptTrack(AliESDtrack *esdtrack)                ;
  Bool_t              IsGoodCluster(AliESDCaloCluster *cluster)             ;
  Bool_t              IsGoodMcParticle(AliVParticle* vParticle, Int_t ipart);
  Bool_t              EsdVertexOk() const                  ;
  void                ProcessTrack()                       ;
  void                ProcessCluster()                     ;
  void                ProcessMc()                          ;
  void                ProcessScaleFactor()                 ;

  AliESDEvent        *fESD;                      //!esd event
  AliMCEvent         *fMC;                       //!mv event
  Double_t           fZVtxMax;                  //  Max vertex z cut
  AliESDtrackCuts    *fEsdTrackCuts;             // esd track cuts
  AliESDtrackCuts    *fHybridTrackCuts1;         // hybrid track cuts
  AliESDtrackCuts    *fHybridTrackCuts2;         // hybrid track cuts
  TArrayI            *fTrackIndices;             //!selected track index
  TArrayI            *fClusterIndices;           //!cluster with two matched MC track index
  TObjArray          *fClusterArray;             //!selected cluster array
  Bool_t             fMcProcess;
  Bool_t             fTrackProcess;  
  Bool_t             fSFProcess;
  Bool_t             fClusterProcess;

  TList              *fOutputList;               //!output list

  TH1F               *fHEventStat;               //!statistics histo
  TH1F               *fHScaleFactor;             //!scale factor spectrum
  TH1F               *fHScaleFactor100HC;        //!scale factor with 100% HC spectrum
  TH2F               *fHEOverPVsPt;              //!(cluster energy over reconstructed track p) vs. track pt
  TH2F               *fHEMCalResponsePion;       //!same as above for pions 
  TH2F               *fHEMCalResponseElec;       //!same as above for electrons
  TH2F               *fHEMCalResponseProton;     //!same as above for protons
  TH2F               *fHEMCalRecdPhidEta;        //!(EMCal cluster phi - track phi) vs. (EMCal cluster eta - track eta)
  TH2F               *fHEMCalRecdPhidEtaP;       //!same as above for positive charge tracks
  TH2F               *fHEMCalRecdPhidEtaM;       //!same as above for negative charge tracks
  TH2F               *fHEMCalRecdPhidEta_Truth;  //!same as above with mc truth matching
  TH2F               *fHEMCalRecdPhidEtaP_Truth; //!same as above with positive truth charge matching
  TH2F               *fHEMCalRecdPhidEtaM_Truth; //!same as above with negative truth charge matching
  TH2F               *fHEMCalRecdPhidEtaposEta;  //!same as above for positive eta
  TH2F               *fHEMCalRecdPhidEtanegEta;  //!same as above for negative eta
  TH2F               *fHPhotonEdiff100HC;        //!(truth E - calculated E in 100% HC)/truth E vs. truth E with photon
  TH2F               *fHPhotonEdiff70HC;         //!(truth E - calculated E in 70% HC)/truth E vs. truth E with photon
  TH2F               *fHPhotonEdiff30HC;         //!(truth E - calculated E in 30% HC)/truth E vs. truth E with photon
  TH2F               *fHPhotonEdiff0HC;          //!(truth E - cluster E)/truth E vs. truth E with photon
  TH2F               *fHPhotonEVsClsE;           //!cluster E vs. truth photon E
  TH2F               *fHistEsub1Pch;             //!(subtracted E in 100% HC) vs. total track P, clusters with 1 matching track
  TH2F               *fHistEsub2Pch;             //!(subtracted E in 100% HC) vs. total track P, clusters with 2 matching tracks
  TH2F               *fHistEsub1PchRat;          //!(subtracted E in 100% HC)/total track P vs. total track P, clusters with 1 matching track
  TH2F               *fHistEsub2PchRat;          //!(subtracted E in 100% HC)/total track P vs. total track P, clusters with 2 matching tracks
  THnSparse          *fHClsEoverMcE_All;         //!cluster E/MC particle E, cluster with only one matching particle
  THnSparse          *fHClsEoverMcE_Photon;      //!above for photon
  THnSparse          *fHClsEoverMcE_Elec;        //!above for electron
  THnSparse          *fHClsEoverMcE_Pion;        //!above for pion
  TH3F               *fHParGenPion_p;            //!plus pion mc truth pt, phi, eta spectrum
  TH3F               *fHParGenPion_m;            //!minus pion mc truth pt, phi, eta spectrum
  TH3F               *fHParGenPion_rmInj_p;      //!plus charged mc truth(pion) without injected signal pt, phi, eta spectrum
  TH3F               *fHParGenPion_rmInj_m;      //!minus charged mc truth(pion) without injected signal pt, phi, eta spectrum
  TH3F               *fHDetGenFakePion;          //!fake pion tracks pt, phi, eta spectrum
  TH3F               *fHDetRecFakePion;          //!fake pion tracks pt, phi, eta spectrum
  TH3F               *fHDetGenSecPion;           //!secondary pion tracks pt, phi, eta spectrum
  TH3F               *fHDetRecSecPion;           //!secondary pion tracks pt, phi, eta spectrum
  TH3F               *fHDetGenPion_p[3];         //!plus pion mc detector level pt, phi, eta spectrum
  TH3F               *fHDetRecPion_p[3];         //!plus pion reconstructed detector level pt, phi, eta spectrum
  TH3F               *fHDetGenPion_m[3];         //!minus pion mc detector level pt, phi, eta spectrum
  TH3F               *fHDetRecPion_m[3];         //!minus pion reconstructed detector level pt, phi, eta spectrum
  TH3F               *fHDetGenPion_rmInj_p[3];   //!plus charged generated detector level particle(pion) without injected signal pt, phi, eta spectrum 
  TH3F               *fHDetRecPion_rmInj_p[3];   //!plus charged reconstructed detector level pion+ track without injected signal pt, phi, eta spectrum
  TH3F               *fHDetGenPion_rmInj_m[3];   //!minus charged generated detector level particle(pion) without injected signal pt, phi, eta spectrum 
  TH3F               *fHDetRecPion_rmInj_m[3];   //!minus charged reconstructed detector level pion- track without injected signal pt, phi, eta spectrum
  
  AliAnalysisTaskSOH(const AliAnalysisTaskSOH&); // not implemented
  AliAnalysisTaskSOH& operator=(const AliAnalysisTaskSOH&); // not implemented
  
  ClassDef(AliAnalysisTaskSOH, 13); // Analysis task Saehanseul Oh
};
#endif
 AliAnalysisTaskSOH.h:1
 AliAnalysisTaskSOH.h:2
 AliAnalysisTaskSOH.h:3
 AliAnalysisTaskSOH.h:4
 AliAnalysisTaskSOH.h:5
 AliAnalysisTaskSOH.h:6
 AliAnalysisTaskSOH.h:7
 AliAnalysisTaskSOH.h:8
 AliAnalysisTaskSOH.h:9
 AliAnalysisTaskSOH.h:10
 AliAnalysisTaskSOH.h:11
 AliAnalysisTaskSOH.h:12
 AliAnalysisTaskSOH.h:13
 AliAnalysisTaskSOH.h:14
 AliAnalysisTaskSOH.h:15
 AliAnalysisTaskSOH.h:16
 AliAnalysisTaskSOH.h:17
 AliAnalysisTaskSOH.h:18
 AliAnalysisTaskSOH.h:19
 AliAnalysisTaskSOH.h:20
 AliAnalysisTaskSOH.h:21
 AliAnalysisTaskSOH.h:22
 AliAnalysisTaskSOH.h:23
 AliAnalysisTaskSOH.h:24
 AliAnalysisTaskSOH.h:25
 AliAnalysisTaskSOH.h:26
 AliAnalysisTaskSOH.h:27
 AliAnalysisTaskSOH.h:28
 AliAnalysisTaskSOH.h:29
 AliAnalysisTaskSOH.h:30
 AliAnalysisTaskSOH.h:31
 AliAnalysisTaskSOH.h:32
 AliAnalysisTaskSOH.h:33
 AliAnalysisTaskSOH.h:34
 AliAnalysisTaskSOH.h:35
 AliAnalysisTaskSOH.h:36
 AliAnalysisTaskSOH.h:37
 AliAnalysisTaskSOH.h:38
 AliAnalysisTaskSOH.h:39
 AliAnalysisTaskSOH.h:40
 AliAnalysisTaskSOH.h:41
 AliAnalysisTaskSOH.h:42
 AliAnalysisTaskSOH.h:43
 AliAnalysisTaskSOH.h:44
 AliAnalysisTaskSOH.h:45
 AliAnalysisTaskSOH.h:46
 AliAnalysisTaskSOH.h:47
 AliAnalysisTaskSOH.h:48
 AliAnalysisTaskSOH.h:49
 AliAnalysisTaskSOH.h:50
 AliAnalysisTaskSOH.h:51
 AliAnalysisTaskSOH.h:52
 AliAnalysisTaskSOH.h:53
 AliAnalysisTaskSOH.h:54
 AliAnalysisTaskSOH.h:55
 AliAnalysisTaskSOH.h:56
 AliAnalysisTaskSOH.h:57
 AliAnalysisTaskSOH.h:58
 AliAnalysisTaskSOH.h:59
 AliAnalysisTaskSOH.h:60
 AliAnalysisTaskSOH.h:61
 AliAnalysisTaskSOH.h:62
 AliAnalysisTaskSOH.h:63
 AliAnalysisTaskSOH.h:64
 AliAnalysisTaskSOH.h:65
 AliAnalysisTaskSOH.h:66
 AliAnalysisTaskSOH.h:67
 AliAnalysisTaskSOH.h:68
 AliAnalysisTaskSOH.h:69
 AliAnalysisTaskSOH.h:70
 AliAnalysisTaskSOH.h:71
 AliAnalysisTaskSOH.h:72
 AliAnalysisTaskSOH.h:73
 AliAnalysisTaskSOH.h:74
 AliAnalysisTaskSOH.h:75
 AliAnalysisTaskSOH.h:76
 AliAnalysisTaskSOH.h:77
 AliAnalysisTaskSOH.h:78
 AliAnalysisTaskSOH.h:79
 AliAnalysisTaskSOH.h:80
 AliAnalysisTaskSOH.h:81
 AliAnalysisTaskSOH.h:82
 AliAnalysisTaskSOH.h:83
 AliAnalysisTaskSOH.h:84
 AliAnalysisTaskSOH.h:85
 AliAnalysisTaskSOH.h:86
 AliAnalysisTaskSOH.h:87
 AliAnalysisTaskSOH.h:88
 AliAnalysisTaskSOH.h:89
 AliAnalysisTaskSOH.h:90
 AliAnalysisTaskSOH.h:91
 AliAnalysisTaskSOH.h:92
 AliAnalysisTaskSOH.h:93
 AliAnalysisTaskSOH.h:94
 AliAnalysisTaskSOH.h:95
 AliAnalysisTaskSOH.h:96
 AliAnalysisTaskSOH.h:97
 AliAnalysisTaskSOH.h:98
 AliAnalysisTaskSOH.h:99
 AliAnalysisTaskSOH.h:100
 AliAnalysisTaskSOH.h:101
 AliAnalysisTaskSOH.h:102
 AliAnalysisTaskSOH.h:103
 AliAnalysisTaskSOH.h:104
 AliAnalysisTaskSOH.h:105
 AliAnalysisTaskSOH.h:106
 AliAnalysisTaskSOH.h:107
 AliAnalysisTaskSOH.h:108
 AliAnalysisTaskSOH.h:109
 AliAnalysisTaskSOH.h:110
 AliAnalysisTaskSOH.h:111
 AliAnalysisTaskSOH.h:112
 AliAnalysisTaskSOH.h:113
 AliAnalysisTaskSOH.h:114
 AliAnalysisTaskSOH.h:115
 AliAnalysisTaskSOH.h:116
 AliAnalysisTaskSOH.h:117