ROOT logo
/* $Id$ */

#ifndef AlidNdEtaTask_H
#define AlidNdEtaTask_H

#include "AliAnalysisTaskSE.h"
#include "AliPWG0Helper.h"
#include "AliTriggerAnalysis.h"
#include <TString.h>

class AliESDtrackCuts;
class dNdEtaAnalysis;
class TH1F;
class TH2F;
class TH3F;
class AliESDEvent;
class AliTriggerAnalysis;
class TH1D;

class AlidNdEtaTask : public AliAnalysisTaskSE {
  public:
    AlidNdEtaTask(const char* opt = "");
    virtual ~AlidNdEtaTask();

    virtual void   ConnectInputData(Option_t *opt);
    virtual void   UserCreateOutputObjects();
    virtual void   UserExec(Option_t*);
    virtual void   Terminate(Option_t*);
    virtual Bool_t UserNotify();
    
    Bool_t IsEventInBinZero();

    void SetTrackCuts(AliESDtrackCuts* cuts) { fEsdTrackCuts = cuts; }
    void SetAnalysisMode(AliPWG0Helper::AnalysisMode mode) { fAnalysisMode = mode; }
    void SetReadMC(Bool_t flag = kTRUE) { fReadMC = flag; }
    void SetUseMCVertex(Bool_t flag = kTRUE) { fUseMCVertex = flag; }
    void SetOnlyPrimaries(Bool_t flag = kTRUE) { fOnlyPrimaries = flag; }
    void SetUseMCKine(Bool_t flag = kTRUE) { fUseMCKine = flag; }
    void SetTrigger(AliTriggerAnalysis::Trigger trigger) { fTrigger = trigger; }
    void SetFillPhi(Bool_t flag = kTRUE) { fFillPhi = flag; }
    void SetDeltaPhiCut(Float_t cut) { fDeltaPhiCut = cut; }
    void SetSymmetrize(Bool_t flag = kTRUE) { fSymmetrize = flag; }
    void SetMultAxisEta1(Bool_t flag = kTRUE) { fMultAxisEta1 = flag; }
    void SetDiffTreatment(AliPWG0Helper::DiffTreatment diffTreatment) { fDiffTreatment = diffTreatment; }
    
    void SetOption(const char* opt) { fOption = opt; }
    void SetPtMin(Float_t ptMin) { fPtMin = ptMin;}

 protected:
    AliESDEvent *fESD;                         //! ESD object
    TList* fOutput;                            //! list send on output slot 0

    TString fOption;                           // option string
    AliPWG0Helper::AnalysisMode fAnalysisMode; // detector that is used for analysis
    AliTriggerAnalysis::Trigger fTrigger;      // trigger that is used
    Bool_t fFillPhi;                           // if true phi is filled as 3rd coordinate in all maps
    Float_t fDeltaPhiCut;                      // cut in delta phi (only SPD)

    Bool_t  fReadMC;          // if true reads MC data (to build correlation maps)
    Bool_t  fUseMCVertex;     // the MC vtx is used instead of the ESD vertex (for syst. check)
    Bool_t  fOnlyPrimaries;   // Process only primaries by using the MC information (for syst. check)
    Bool_t  fUseMCKine;       // use the MC values for each found track/tracklet (for syst. check)
    Bool_t  fSymmetrize;      // move all negative to positive eta
    Bool_t  fMultAxisEta1;    // restrict multiplicity count to |eta| < 1
    AliPWG0Helper::DiffTreatment  fDiffTreatment;  // how to identify SD events (see AliPWG0Helper::GetEventProcessType)

    AliESDtrackCuts* fEsdTrackCuts;         // Object containing the parameters of the esd track cuts

    // Gathered from ESD
    dNdEtaAnalysis* fdNdEtaAnalysisESD;     //! contains the dndeta from the ESD
    // control hists
    TH1F* fMult;                            //! raw multiplicity histogram
    TH1F* fMultVtx;                            //! raw multiplicity histogram of evts with vtx (control histogram)
    TH1F* fPartEta[3];            //! counted particles as function of eta (full vertex range, below 0 range, above 0 range)
    TH1F* fEvents;                //! events counted as function of vtx
    TH2F* fVertexResolution;      //! z resolution of the vertex 

    // Gathered from MC (when fReadMC is set)
    dNdEtaAnalysis* fdNdEtaAnalysis;        //! contains the dndeta from the full sample
    dNdEtaAnalysis* fdNdEtaAnalysisND;      //! contains the dndeta for the ND sample
    dNdEtaAnalysis* fdNdEtaAnalysisNSD;     //! contains the dndeta for the NSD sample
    dNdEtaAnalysis* fdNdEtaAnalysisOnePart; //! contains the dndeta for the one particle sample
    dNdEtaAnalysis* fdNdEtaAnalysisTr;      //! contains the dndeta from the triggered events
    dNdEtaAnalysis* fdNdEtaAnalysisTrVtx;   //! contains the dndeta from the triggered events with vertex
    dNdEtaAnalysis* fdNdEtaAnalysisTracks;  //! contains the dndeta from the triggered events with vertex counted from the mc particles associated to the tracks (comparing this to the raw values from the esd shows the effect of the detector resolution)

    // control histograms (MC)
    TH1F* fPartPt;                //! counted particles as function of pt

    // control histograms (ESD)
    TH3F* fVertex;                //! 3d vertex distribution
    TH3F* fVertexVsMult;          //! x-vtx vs y-vtx vs multiplicity
    TH1F* fPhi;                   //! raw phi distribution
    TH1F* fRawPt;                 //! raw pt distribution
    TH2F* fEtaPhi;                //! raw eta - phi distribution
    TH2F* fZPhi[2];               //! raw z - phi distribution from tracklets per layer (only SPD)
    TH1F* fModuleMap;             //! count clusters as function of module number (only SPD)
    TH1F* fDeltaPhi;              //! histogram of delta_phi values for tracklets (only for SPD analysis)
    TH1F* fDeltaTheta;            //! histogram of delta_theta values for tracklets (only for SPD analysis)
    TH2F* fFiredChips;            //! fired chips l1+l2 vs. number of tracklets (only for SPD analysis)
    TH2F* fTrackletsVsClusters;   //! number of tracklets vs. clusters in all ITS detectors (only for SPD analysis)
    TH2F* fTrackletsVsUnassigned; //! number of tracklets vs. number of unassigned clusters in L1 (only for SPD analysis)
    TH1F* fStats;                 //! further statistics : bin 1 = vertexer 3d, bin 2 = vertexer z, etc (see CreateOutputObjects)
    TH2F* fStats2;                //! V0 vs SPD statistics
    Float_t fPtMin;               // pt min, to be used in kOneTrack case
    TH1D* fEta;                   //! eta distribution from ESD
    TH1D* fEtaMC;                 //! eta distribution from MC
    TH1D* fHistEvents;            //! histo for n. of selected ESD events
    TH1D* fHistEventsMC;          //! histo for n. of selected MC events
    TH1D* fTrigEffNum;            //!
    TH1D* fTrigEffDen;            //!
    TH1D* fVtxEffNum;             //!
    TH1D* fVtxEffDen;             //!
    TH1D* fVtxTrigEffNum;         //!
    TH1D* fVtxTrigEffDen;         //!
 private:
    AlidNdEtaTask(const AlidNdEtaTask&);
    AlidNdEtaTask& operator=(const AlidNdEtaTask&);

  ClassDef(AlidNdEtaTask, 2);
};

#endif
 AlidNdEtaTask.h:1
 AlidNdEtaTask.h:2
 AlidNdEtaTask.h:3
 AlidNdEtaTask.h:4
 AlidNdEtaTask.h:5
 AlidNdEtaTask.h:6
 AlidNdEtaTask.h:7
 AlidNdEtaTask.h:8
 AlidNdEtaTask.h:9
 AlidNdEtaTask.h:10
 AlidNdEtaTask.h:11
 AlidNdEtaTask.h:12
 AlidNdEtaTask.h:13
 AlidNdEtaTask.h:14
 AlidNdEtaTask.h:15
 AlidNdEtaTask.h:16
 AlidNdEtaTask.h:17
 AlidNdEtaTask.h:18
 AlidNdEtaTask.h:19
 AlidNdEtaTask.h:20
 AlidNdEtaTask.h:21
 AlidNdEtaTask.h:22
 AlidNdEtaTask.h:23
 AlidNdEtaTask.h:24
 AlidNdEtaTask.h:25
 AlidNdEtaTask.h:26
 AlidNdEtaTask.h:27
 AlidNdEtaTask.h:28
 AlidNdEtaTask.h:29
 AlidNdEtaTask.h:30
 AlidNdEtaTask.h:31
 AlidNdEtaTask.h:32
 AlidNdEtaTask.h:33
 AlidNdEtaTask.h:34
 AlidNdEtaTask.h:35
 AlidNdEtaTask.h:36
 AlidNdEtaTask.h:37
 AlidNdEtaTask.h:38
 AlidNdEtaTask.h:39
 AlidNdEtaTask.h:40
 AlidNdEtaTask.h:41
 AlidNdEtaTask.h:42
 AlidNdEtaTask.h:43
 AlidNdEtaTask.h:44
 AlidNdEtaTask.h:45
 AlidNdEtaTask.h:46
 AlidNdEtaTask.h:47
 AlidNdEtaTask.h:48
 AlidNdEtaTask.h:49
 AlidNdEtaTask.h:50
 AlidNdEtaTask.h:51
 AlidNdEtaTask.h:52
 AlidNdEtaTask.h:53
 AlidNdEtaTask.h:54
 AlidNdEtaTask.h:55
 AlidNdEtaTask.h:56
 AlidNdEtaTask.h:57
 AlidNdEtaTask.h:58
 AlidNdEtaTask.h:59
 AlidNdEtaTask.h:60
 AlidNdEtaTask.h:61
 AlidNdEtaTask.h:62
 AlidNdEtaTask.h:63
 AlidNdEtaTask.h:64
 AlidNdEtaTask.h:65
 AlidNdEtaTask.h:66
 AlidNdEtaTask.h:67
 AlidNdEtaTask.h:68
 AlidNdEtaTask.h:69
 AlidNdEtaTask.h:70
 AlidNdEtaTask.h:71
 AlidNdEtaTask.h:72
 AlidNdEtaTask.h:73
 AlidNdEtaTask.h:74
 AlidNdEtaTask.h:75
 AlidNdEtaTask.h:76
 AlidNdEtaTask.h:77
 AlidNdEtaTask.h:78
 AlidNdEtaTask.h:79
 AlidNdEtaTask.h:80
 AlidNdEtaTask.h:81
 AlidNdEtaTask.h:82
 AlidNdEtaTask.h:83
 AlidNdEtaTask.h:84
 AlidNdEtaTask.h:85
 AlidNdEtaTask.h:86
 AlidNdEtaTask.h:87
 AlidNdEtaTask.h:88
 AlidNdEtaTask.h:89
 AlidNdEtaTask.h:90
 AlidNdEtaTask.h:91
 AlidNdEtaTask.h:92
 AlidNdEtaTask.h:93
 AlidNdEtaTask.h:94
 AlidNdEtaTask.h:95
 AlidNdEtaTask.h:96
 AlidNdEtaTask.h:97
 AlidNdEtaTask.h:98
 AlidNdEtaTask.h:99
 AlidNdEtaTask.h:100
 AlidNdEtaTask.h:101
 AlidNdEtaTask.h:102
 AlidNdEtaTask.h:103
 AlidNdEtaTask.h:104
 AlidNdEtaTask.h:105
 AlidNdEtaTask.h:106
 AlidNdEtaTask.h:107
 AlidNdEtaTask.h:108
 AlidNdEtaTask.h:109
 AlidNdEtaTask.h:110
 AlidNdEtaTask.h:111
 AlidNdEtaTask.h:112
 AlidNdEtaTask.h:113
 AlidNdEtaTask.h:114
 AlidNdEtaTask.h:115
 AlidNdEtaTask.h:116
 AlidNdEtaTask.h:117
 AlidNdEtaTask.h:118
 AlidNdEtaTask.h:119
 AlidNdEtaTask.h:120
 AlidNdEtaTask.h:121
 AlidNdEtaTask.h:122
 AlidNdEtaTask.h:123