ROOT logo
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"

#include "AliLog.h"

#include "AliAnalysisTaskSE.h"
#include "AliTRDTriggerAnalysis.h"

#define ID(x) x, #x

class TList;

class AliAnalysisTaskJetsTriggerTRD :
  public AliAnalysisTaskSE
{
public:
  AliAnalysisTaskJetsTriggerTRD(const char *name = "jets_trg_trd");
  ~AliAnalysisTaskJetsTriggerTRD();

  // analysis operations
  virtual void   UserCreateOutputObjects();
  virtual Bool_t Notify();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(const Option_t *option);

  // task configuration
  void  SetNumberOfJetPtBins(Int_t n) { fNoJetPtBins = n; }
  Int_t GetNumberOfJetPtBins() const { return fNoJetPtBins; }

  void    SetJetPtBinMax(Float_t ptmax) { fJetPtBinMax = ptmax; }
  Float_t GetJetPtBinMax() const { return fJetPtBinMax; }

  void SetJetBranchName(const char* const branchName) { strncpy(fJetBranchName, branchName, fgkStringLength-1); }
  const char* GetJetBranchName() const { return fJetBranchName; }

  Bool_t HasMC() const { return fMCEventHandler != 0; }
  Bool_t AcceptTrackMC(Int_t track) const;

  // histograms
  enum Hist_t {
      kHistStat = 0,
      kHistXsection,
      kHistPtHard,
      kHistJetPtMC,
      kHistJetEtaAvg,
      kHistNoJets,
      kHistTrackGTU,
      kHistTrackEffGTU,
      kHistTrackEffMC,
      kHistNPtMin,
      kHistLeadJetPt,
      kHistLeadJetPtEta,
      kHistLeadJetPtPhi,
      kHistLeadJetEtaPhi,
      kHistLeadJetPtTrackPt,
      kHistLeadJetPtZ,
      kHistLeadJetPtXi,
      kHistJetPt,
      kHistJetPtEta,
      kHistJetPtPhi,
      kHistJetEtaPhi,
      kHistJetPtITS,
      kHistJetPt3x3,
      kHistJetPtTrackPt,
      kHistJetPtZ,
      kHistJetPtXi,
      kHistJetPtNoTracks3,
      kHistLast
  };

  // statistics
  enum Stat_t {
      kStatSeen = 1,
      kStatTrg,
      kStatUsed,
      kStatEvCuts,
      kStatLast
  };

  // trigger conditions
  enum Trigger_t {
    // untriggered
    kTrgMinBias = 1, // CINT1
    kTrgInt7,
    kTrgInt8,
    kTrgEMC7,
    kTrgEMC8,
    // TRD jet trigger (HJT)
    kTrgInt7WUHJT,
    kTrgInt8WUHJT,
    kTrgEMC7WUHJT,
    kTrgEMC8WUHJT,
    kTrgEMCEJE,
    kTrgEMCEGA,
    // analysis-level combinations
    kTrgInt7_WU,
    kTrgInt7_WUHJT,
    kTrgEMCEJE_WU,
    kTrgEMCEJE_WUHJT,
    // PbPb
    kTrgPbPb,
    kTrgCentral,
    kTrgSemiCentral,
    //
    kTrgLast
  };	   

  enum TriggerMC_t {
    kTrgMC3x3Vtx = kTrgLast,
    kTrgMC3x3TRD,
    kTrgMC3x3TRDeff,
    kTrgMC3x3TRDeffmap,
    kTrgMCLast
  };

protected:
  UInt_t fTriggerMask;		// internal representation of trigger conditions
  AliTRDTriggerAnalysis fTrdTrg; //! TRD trigger analysis

  Bool_t DetectTriggers();
  Bool_t DetectMCTriggers();
  void   MarkTrigger(Trigger_t trg) { fTriggerMask |= (1 << trg); }
  void   MarkTrigger(TriggerMC_t trg) { fTriggerMask |= (1 << trg); }
  Bool_t IsTrigger(Trigger_t trg) const { return (fTriggerMask & (1 << trg)); }

  Float_t GetEfficiencyTRD(Float_t /* pt */, Float_t /* eta */, Float_t /* phi */) { return 0.7; }

  // output objects
  TList *fOutputList;		// list of output objects

  // histogram management
  TH1  *fHist[kHistLast];	//! pointers to histogram
  const char *fShortTaskId;	//! short identifier for the task

  Int_t fNoTriggers; 		// numbers of triggers used in histograms

  TH1*&  GetHistogram(Hist_t hist, Int_t idx = 0) { return fHist[hist + idx]; }

  TH1*   AddHistogram(Hist_t hist, const char *hid, TString title,
                      Int_t xbins, Float_t xmin, Float_t xmax, Int_t binType = 1);
  TH2*   AddHistogram(Hist_t hist, const char *hid, TString title,
                      Int_t xbins, Float_t xmin, Float_t xmax,
                      Int_t ybins, Float_t ymin, Float_t ymax, Int_t binType = 1);
  TH3*   AddHistogram(Hist_t hist, const char *hid, TString title,
                      Int_t xbins, Float_t xmin, Float_t xmax,
                      Int_t ybins, Float_t ymin, Float_t ymax,
                      Int_t zbins, Float_t zmin, Float_t zmax, Int_t binType = 1);

  void    FillH1(Hist_t hist, Float_t x, Float_t weight = 1., Int_t idx = 0)
  { GetHistogram(hist, idx)->Fill(x, weight); }
  void    FillH2(Hist_t hist, Float_t x, Float_t y, Float_t weight = 1., Int_t idx = 0)
  { ((TH2*) GetHistogram(hist, idx))->Fill(x, y, weight); }
  void    FillH3(Hist_t hist, Float_t x, Float_t y, Float_t z, Float_t weight = 1., Int_t idx = 0)
  { ((TH3*) GetHistogram(hist, idx))->Fill(x, y, z, weight); }

  // task configuration
  Int_t    fNoJetPtBins;                // number of bins for jet pt
  Float_t  fJetPtBinMax;                // max jet pt (GeV) in histograms

  Float_t  fAvgXsection;		// x-section from PYTHIA
  Float_t  fAvgTrials;			// ratio of PYTHIA events
					// over accepted events
  Float_t  fPtHard;			// pt hard
  Int_t    fNTrials;			// total number of trials

  Float_t  fGlobalEfficiencyGTU; // global efficiency used trigger emulation on MC

  static const Int_t fgkStringLength = 100; // max length for the jet branch name
  char fJetBranchName[fgkStringLength];     // jet branch name

  const Int_t fGtuLabel;		// constrain to tracks with given label

  // not implemented
  AliAnalysisTaskJetsTriggerTRD(const AliAnalysisTaskJetsTriggerTRD &rhs);
  AliAnalysisTaskJetsTriggerTRD& operator=(const AliAnalysisTaskJetsTriggerTRD &rhs);

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