ROOT logo
#ifndef ALIANALYSISTASKPTEMCALTRIGGER_H_
#define ALIANALYSISTASKPTEMCALTRIGGER_H_
/* Copyright(c) 1998-2014, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

// Author: Markus Fasel

#include "AliAnalysisTaskEmcalJet.h"
#include "AliESDtrackCuts.h"
#include <TClonesArray.h>
#include <TList.h>
#include "AliCutValueRange.h"

class TArrayD;
class Axis;
class AliClusterContainer;
class AliEmcalJet;
class AliESDtrack;
class AliJetContainer;
class AliParticleContainer;
class AliVTrack;
class AliVParticle;

namespace EMCalTriggerPtAnalysis {
class AliEMCalHistoContainer;

class AliAnalysisTaskPtEMCalTrigger : public AliAnalysisTaskEmcalJet {
public:
  enum EEMCalTriggerType_t{
    kEMCalJetLow = 0,
    kEMCalJetHigh = 1,
    kEMCalGammaLow = 2,
    kEMCalGammaHigh = 3
  };
  static const Int_t kNJetRadii;
  static const Double_t *kJetRadii;

  AliAnalysisTaskPtEMCalTrigger();
  AliAnalysisTaskPtEMCalTrigger(const char *name);
  ~AliAnalysisTaskPtEMCalTrigger();

  virtual void UserCreateOutputObjects();
  virtual Bool_t Run();

  void AddESDTrackCuts(AliESDtrackCuts *trackCuts);
  void AddCutsForAOD(AliESDtrackCuts *trackCuts, UInt_t filterBits);
  void SetEtaRange(double etamin, double etamax) { fEtaRange.SetLimits(etamin, etamax); }
  void SetPtRange(double ptmin, double ptmax) { fPtRange.SetLimits(ptmin, ptmax); }
  void SetVertexRange(double vmin, double vmax) { fVertexRange.SetLimits(vmin, vmax); }
  void SetClusterEnergyRange(double emin, double emax) { fEnergyRange.SetLimits(emin,emax); }
  void SetSwapEta() { fSwapEta = kTRUE; }
  void UseTriggersFromTriggerMaker() { fUseTriggersFromTriggerMaker = kTRUE; }
  void AddJetContainerName(const Char_t * contname, Bool_t isMC = kFALSE);
  void SelectAllTracks(Bool_t doAll) { fSelectAllTracks = doAll; }

private:
  AliAnalysisTaskPtEMCalTrigger(const AliAnalysisTaskPtEMCalTrigger &);
  AliAnalysisTaskPtEMCalTrigger &operator=(const AliAnalysisTaskPtEMCalTrigger &);
  void CreateDefaultPtBinning(TArrayD &binning) const;
  void CreateDefaultZVertexBinning(TArrayD &binning) const;
  void CreateDefaultEtaBinning(TArrayD &binning) const;
  void DefineAxis(TAxis &axis, const char *name, const char *title, const TArrayD &binning, const char **labels = NULL);
  void DefineAxis(TAxis &axis, const char *name, const char *title, int nbins, double min, double max, const char **labels = NULL);
  void FillEventHist(const char *trigger, double vz, bool isPileup);
  void FillTrackHist(const char *trigger, const AliVTrack *track, double vz, bool isPileup, int cut, bool isMinBias, double jetradius = -1.);
  void FillClusterHist(const char *trigger, const AliVCluster *clust, double vz, bool isPileup, bool isMinBias);
  void FillMCParticleHist(const char *histname, const AliVParticle * const part, double vz, bool isPileup);
  bool IsTrueTrack(const AliVTrack *const) const;
  TString BuildTriggerString();
  const AliVVertex *GetSPDVertex() const;
  const AliEmcalJet *FoundTrackInJet(const AliVParticle * const track, AliJetContainer *const jets) const;
  const AliEmcalJet *FoundClusterInJet(const AliVCluster * const clust, AliJetContainer *const jets) const;
  bool TrackInJet(const AliVParticle *const track, const AliEmcalJet *reconstructedJet, const AliParticleContainer *const particles) const;
  bool ClusterInJet(const AliVCluster *const clust, const AliEmcalJet *reconstructedJet, const AliClusterContainer *const particles) const;
  bool IsInRadius(const AliVParticle *const track, const AliEmcalJet *reconstructedJet, Double_t radius) const;
  bool IsInRadius(const AliVCluster *const clust, const AliEmcalJet *reconstructedJet, Double_t radius) const;

  AliEMCalHistoContainer        *fHistos;                 //! Histogram container for the task
  TList 						            *fListTrackCuts;		      // List of track cuts

  // Cuts
  AliCutValueRange<double>      fEtaRange;                // Eta Selection Range
  AliCutValueRange<double>	    fPtRange;				          // Pt Selection Range
  AliCutValueRange<double>      fEnergyRange;             // Cluster energy selection range
  AliCutValueRange<double>      fVertexRange;             // Vertex cut

  // Jet containers
  TList                         fJetContainersMC;          // List of jet containers for MC
  TList                         fJetContainersData;        // List of jet containers for Data

  // Settings
  Bool_t                        fSelectAllTracks;         // Loop over all tracks
  Bool_t						            fSwapEta;				          // Allow swapping of the eta sign in asymmetric collision systems
  Bool_t 						            fUseTriggersFromTriggerMaker; // Use trigger classes from trigger maker

  ClassDef(AliAnalysisTaskPtEMCalTrigger, 1);           // Analysis of EMCal triggered events
};

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