ROOT logo
#ifndef ALIANALYSISTASKNORM_H
#define ALIANALYSISTASKNORM_H
 
/* $Id$ */ 
//
// AliAnalysisTaskNorm
// Analysis task for muon trigger normalization 
// 
// author: C. Hadjidakis 
//

#ifndef ALIANALYSISTASKSE_H
#  include "AliAnalysisTaskSE.h"
#endif

class AliCounterCollection;
class AliMuonEventCuts;
class AliVEvent;

class AliAnalysisTaskNorm : public AliAnalysisTaskSE
{
 public:

  AliAnalysisTaskNorm(const char *name = "<default name>");
  virtual ~AliAnalysisTaskNorm();

  virtual void Print(Option_t *opt="") const;
  void Print(TObjArray *obj) const;
  virtual void Terminate(Option_t *);
  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t* opt);

  //
  static Bool_t IsAODEvent( const AliVEvent *event);
  static TString GetFiredTriggerClasses( const AliVEvent *event);

  //build list of counters
  TList *BuildListOfNormFactor(const TObjArray*);
  TList *BuildListOfTrigger(const TObjArray*);
  TList *BuildListOfCentrality(AliCentrality *centrality);  
  TList *BuildListOfPileUp( const AliVEvent *event);
  TList *BuildListOfTracklets( const AliVEvent *event);
  TList *BuildListOfV0AMult( const AliVEvent *event);

  //fill histograms
  void FillHistoPileUpVertices( const AliVEvent *event, const TObjArray*);
  void FillHistoMult( const AliVEvent *event, const TObjArray*);

  Bool_t CheckPattern(TString, TObjArray*, TObjArray*);
  TObjArray *BuildArrayOfTrigger(const TObjArray*, TString keepPattern="", TString rejectPattern="OTHER,TRUE,PHI,ANY,EMC,-ACE-,-ABCE-,WU,MUP,SPI,SHM");
  //
  Bool_t IsPileupFromSPDInMultBins(const AliVEvent *event) const; 

  TString GetOCDBPath() {return "raw://";}; // OCDB to be used (raw:// by default)

  //Fill object methods
  void FillEventCounters(Int_t, TList*,TList*,TList*,TList*,TList*,TList*,Bool_t,Bool_t,TString,Bool_t);

  //
  AliMuonEventCuts* GetMuonEventCuts() { return fMuonEventCuts;}
  void SetIsMC(Bool_t isMC) { fIsMC = isMC;};
  void SetIsESD(Bool_t isESD) { fIsESD = isESD;};
  void SetBeamConf(TString sBeamConf) { fBeamConf = sBeamConf;};

 private:

  enum eListV0A {
    kV0AMB  = 0, ///<V0A mult for CINT7 trigger
    kV0AMUL = 1, ///<V0A mult for CMUL7 trigger
    kV0AMultvsCentMB = 2, ///<V0A mult vs centrality for CMUL7 trigger
    kV0ACentvsV0CCentMUL = 3, ///<V0A vs V0C centrality for CMUL7 trigger
    kV0ACentvsCL1CentMUL = 4, ///<V0A vs CL1 centrality for CMUL7 trigger
    kV0ACentvsV0CCentMB = 5, ///<V0A vs V0C centrality for CINT7 trigger
    kV0ACentvsCL1CentMB = 6, ///<V0A vs CL1 centrality for CINT7 trigger
    kV0CCentvsCL1CentMB = 7, ///<V0A vs CL1 centrality for CINT7 trigger
    kV0ACentMB  = 8, ///<V0A centrality for CINT7 trigger
    kV0ACentMUL = 9 ///<V0A centrality for CMUL7 trigger
  };
  
  enum eListZN {
    kZNMB  = 0, ///<ZN energy for CINT7 trigger
    kZNMUL = 1, ///<ZN energy for CMUL7 trigger
    kZNCentMB  = 2, ///<ZN cent for CINT7 trigger
    kZNCentMUL = 3, ///<ZN cent for CMUL7 trigger
    kZNMultvsCentMB = 4 ///<ZN mult vs centrality for CINT7 trigger
   };

  enum eListVertex {
    kVZMB = 0, ///< primary vertex Z
    kVnCMB = 1, ///<primary vertex nContributors
    kPileupVZMB = 2, ///< pileup vertices Z
    kPileupnCMB = 3, ///< pileup nContributors
    kVZMUL = 4, ///< primary vertex Z
    kVnCMUL = 5, ///<primary vertex nContributors
    kPileupVZMUL = 6, ///< pileup vertices Z
    kPileupnCMUL = 7, ///< pileup nContributors
    kDeltaZMB = 8,///<distrance between primary and pileupvertices
    kDeltaZMUL = 9,///<distrance between primary and pileupvertices
    kNPileupMB = 10,///<number of pileupvertices
    kNPileupMUL = 11///<number of pileupvertices
  };

  AliCounterCollection *fRunCounters;//! run counters
  AliCounterCollection *fEventCounters;//! event counters
  TObjArray *fListVertex; //!list of objects vertex related
  TObjArray *fListV0A; //!list of objects V0A related
  TObjArray *fListZN; //!list of objects ZN related
  Bool_t fIsESD; //ESD or AOD
  Bool_t fIsMC; //MC or data
  TString fBeamConf; //Beam configuration (p-Pb,Pb-p)
  AliMuonEventCuts *fMuonEventCuts; // cuts for muon events 

  TObjArray *fSCentEst; // array of centrality estimators
  TArrayI fCentBin; //centrality range for event counters
  TObjArray *fSCentBin; // array of centrality bins
  TArrayI fTrackletsBin; //ntracklets range for event counters
  TObjArray *fSTrackletsBin; //array of ntracklets bins
  TArrayI fV0AMultBin; //V0Amult range for event counters
  TObjArray *fSV0AMultBin; //array of V0Amult bins
  
  AliAnalysisTaskNorm(const AliAnalysisTaskNorm&);// not implemented
  AliAnalysisTaskNorm& operator=(const AliAnalysisTaskNorm&); //not implemented;

  ClassDef(AliAnalysisTaskNorm,4); 

};

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