ROOT logo
// This class contains common elements for the analysis in the First Physics Group.
// based on the code by Arvinder Palaha
// written by Andras Agocs and Anton Alkin

#ifndef ALIANALYSISTASKFIRSTPHYSICS_H
#define ALIANALYSISTASKFIRSTPHYSICS_H

class TH1D;
class TH2D;
class TList;
class AliESDtrackCuts;
class AliESDEvent;

#include "AliAnalysisTaskSE.h"
#include "AliTriggerAnalysis.h"

#include <string>

class AliAnalysisTaskFirstPhysics : public AliAnalysisTaskSE {
 public:
  // indexing various track cuts
  enum {
    kTrackCutQGlo,
    kTrackCutQITS,
    kTrackCutDCAwSPD,
    kTrackCutDCAwoSPD,
    kTrackCutNoSPD,
    kTrackCutTPConly,
    knTrackCuts}; // this must always the last

  // recognised MC process types
  enum ProcessType {
    kProcSD1, // single diffractive AB->XB
    kProcSD2, // single diffractive AB->AX
    kProcDD, // double diffractive
    kProcEL, // elastic
    kProcCD, // central diffractive
    kProcND, // non-diffractive
    kProcIndef};

  AliAnalysisTaskFirstPhysics(const char *name = "You should have given a name to this analysis");
  virtual ~AliAnalysisTaskFirstPhysics();

  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t *option);
  virtual void Terminate(Option_t *);

  void SetCutTrackPt(Double_t min, Double_t max) {fCutTrackPtMin = min; fCutTrackPtMax = max;}
  Double_t GetCutTrackPtMin() const {return fCutTrackPtMin;}
  Double_t GetCutTrackPtMax() const {return fCutTrackPtMax;}
  void SetCutEta(Double_t x) {fCutEta = x;}
  Double_t GetCutEta() const {return fCutEta;}
  void SetCutVertexZ(Double_t x) {fCutVertexZ = x;}
  Double_t GetCutVertexZ() const {return fCutVertexZ;}

 protected:
  void PrepareOutputList(); // create fOutput
  void PrepareDefaultTrackCuts(); // create cut objects
  bool PrepareMCInfo(); // check whether MC info is available and read process type
  bool GetESDEvent(); // sets fESD to the current ESD
  bool CheckVertex(); // checks for an appropriate vertex
  bool CheckVertexMC(); // checks for an appropriate vertex in the MC truth

  TH1D* UserHisto1d(const char *name, const char *title, const char *xlabel, Int_t nbinsx, Double_t xlow, Double_t xup);
  TH2D* UserHisto2d(const char *name, const char *title, const char *xlabel, Int_t nbinsx, Double_t xlow, Double_t xup, const char *ylabel, Int_t nbinsy, Double_t ylow, Double_t yup);
  bool GetHisto1FromOutput(const char *name, TH1D *&h) const; // read a histogram from fOutput; use this in Terminate()
  bool GetHisto2FromOutput(const char *name, TH2D *&h) const; // read a 2d histogram from fOutput

  AliESDEvent *fESD; //! the ESD information of the event
  AliMCEvent *fMCEvent; //! the MC information is available
  TList *fOutput; // Output list
  bool fbReadMC; //! indicates if MC information could be read; see PrepareMCInfo()
  ProcessType fMCProcessType; //! indicates the process type used in MC
  AliESDtrackCuts *fTrackCuts[knTrackCuts]; // Track cuts
  AliTriggerAnalysis* fTrigger; //!

 private:
  // simplest cut parameters
  Double_t fCutTrackPtMin;
  Double_t fCutTrackPtMax;
  Double_t fCutEta;
  Double_t fCutVertexZ;

  AliAnalysisTaskFirstPhysics(const AliAnalysisTaskFirstPhysics&); // not implemented
  AliAnalysisTaskFirstPhysics& operator=(const AliAnalysisTaskFirstPhysics&); // not implemented

  ClassDef(AliAnalysisTaskFirstPhysics, 1);
};

#endif

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