ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//-----------------------------------------------------------------------
// Author : Marta Verweij, D. Keijdener - UU
//-----------------------------------------------------------------------

#ifndef ALIPWG4HIGHPTSPECTRA_H
#define ALIPWG4HIGHPTSPECTRA_H

#include "AliAnalysisTask.h"
#include "AliCFManager.h"

class TH1I;
class TH1F;
class TH1D;
class TH2F;
class TProfile;
class TFile;
class TList;

//class AliCFManager;
class AliESDtrackCuts;
class AliESDEvent;
class AliAODEvent;
class AliVEvent;
class AliVVertex;
class AliMCEvent;
class AliStack;
class AliGenPythiaEventHeader;
class AliGenHijingEventHeader;

class AliPWG4HighPtSpectra : public AliAnalysisTask {
 public:

  enum {
    kStepReconstructed          = 0,
    kStepSecondaries            = 1,
    kStepReconstructedMC        = 2,
    kStepMCAcceptance           = 3
  };

  AliPWG4HighPtSpectra();
  AliPWG4HighPtSpectra(const Char_t* name);
  // AliPWG4HighPtSpectra& operator= (const AliPWG4HighPtSpectra& c);
  //  AliPWG4HighPtSpectra(const AliPWG4HighPtSpectra& c);
  ~AliPWG4HighPtSpectra() {;};

  // ANALYSIS FRAMEWORK STUFF to loop on data and fill output objects
  virtual void   LocalInit();
  virtual void   ConnectInputData(Option_t *);
  virtual void   CreateOutputObjects();
  virtual void   Exec(Option_t *option);
  virtual void   Terminate(Option_t *);
  virtual Bool_t Notify(); //Copied from AliAnalysisTaskJetSpectrum2

  Bool_t IsPbPb() {return fIsPbPb;}  //is PbPb data?
  Bool_t SelectEvent();    //decides if event is used for analysis
  Int_t CalculateCentrality(AliVEvent *event);

  //Setters
  void SetIsPbPb(Bool_t cs)                {fIsPbPb = cs;}
  void SetCentralityClass(int cent)        {fCentClass=cent;}
  void SetTriggerMask(UInt_t t)             {fTriggerMask=t;}
 
  // CORRECTION FRAMEWORK RELATED FUNCTIONS
  void     SetCFManagerPos(const AliCFManager* io1) {fCFManagerPos = io1;}   // global correction manager 
  const AliCFManager * GetCFManagerPos() const {return fCFManagerPos;}           // get corr manager 
  void     SetCFManagerNeg(const AliCFManager* io2) {fCFManagerNeg = io2;}   // global correction manager 
  const AliCFManager * GetCFManagerNeg() const {return fCFManagerNeg;}            // get corr manager

  //if fTrackType=0 (Global)
  //if fTrackType=1 (TPConly)
  //if fTrackType=2 (TPConly constrained)
  void SetTrackType(Int_t trackType) {fTrackType = trackType;}
  //AliESDtrackCuts setters
  void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;} // Needs to be specified for ESD analysis, not for AOD analysis
  void SetFilterMask(Int_t filtermask) {fFilterMask = filtermask;} // Needs to be specified for AOD analysis, not for ESD analysis
  void SetCutsReject(AliESDtrackCuts* trackCuts) {fTrackCutsReject = trackCuts;}
  void SelectHIJINGOnly(Bool_t b)    {fbSelectHIJING = b;}

  Bool_t IsHIJINGParticle(Int_t label);

  void SetSigmaConstrainedMax(Double_t sigma) {fSigmaConstrainedMax=sigma;}

  // Data types
  Bool_t IsReadAODData()   const {return fReadAODData;}
  void   SetReadAODData(Bool_t flag=kTRUE) {fReadAODData=flag;}

  Bool_t   IsUsingPythiaInfo() const {return fNoPythiaInfo;}
  void   SetNoPythiaInfo() {fNoPythiaInfo=kTRUE;}

  static AliGenPythiaEventHeader*  GetPythiaEventHeader(AliMCEvent *mcEvent);
  static AliGenHijingEventHeader*  GetHijingEventHeader(AliMCEvent *mcEvent);
  static AliGenHijingEventHeader*  GetHijingEventHeaderAOD(AliAODEvent *aodEvent);

  static Bool_t PythiaInfoFromFile(const char* currFile,Float_t &fXsec,Float_t &fTrials);// get the cross section and the trails either from pyxsec.root or from pysec_hists.root


  
 protected:
  Bool_t              fReadAODData      ;  // flag for AOD/ESD input files
  Bool_t              fNoPythiaInfo     ;  // flag to skip reading pyxsec.root and plotting output
  const AliCFManager  *fCFManagerPos    ;  // pointer to the CF manager for positive charged particles
  const AliCFManager  *fCFManagerNeg    ;  // pointer to the CF manager for negative charged particles
 
  AliESDEvent *fESD;      //! ESD object
  AliAODEvent *fAOD;      //! AOD object
  AliMCEvent  *fMC;       //! MC event object, only used in ESD analysis
  AliStack    *fStack;    //! stack object, only used in ESD analysis
  TClonesArray *fArrayMCAOD;  //! TClonesArray of AliAODMCParticles, only used in AOD analysis

  const AliVVertex   *fVtx;     //! vertex object

  UInt_t      fTriggerMask;          // Trigger mask to select events 
  Bool_t      fIsPbPb;               // kTRUE if PbPb
  Int_t       fCentClass;            // Select only events from predefined centrality class

  Int_t   fTrackType;     // Type of track to be used in analysis
  //AliESDtrackCuts options and FilterMask. The former is must be setted in AddTaskPWG4HighPTSpectra.C for ESD analysis, the latter must be setted in AddTaskPWG4HighPTSpectra.C for AOD analysis. The AliESDtrackCuts correspond with different steps in container.
  AliESDtrackCuts *fTrackCuts;           // trackCuts applied to global tracks
  AliESDtrackCuts *fTrackCutsReject;     // trackCuts to reject tracks (hybrid case)
  Int_t   fFilterMask;     // Filtermask specifying track cuts. See https://twiki.cern.ch/twiki/bin/view/ALICE/PWGPPAODTrackCuts for values.

  Bool_t fbSelectHIJING; //Select only particles from HIJING event

  Double_t fSigmaConstrainedMax;  // max sigma on constrained fit

 private:
  AliPWG4HighPtSpectra(const AliPWG4HighPtSpectra&);
  AliPWG4HighPtSpectra& operator=(const AliPWG4HighPtSpectra&);

  Float_t fAvgTrials;             // Average number of trials

  // Histograms
  //Number of events
  TList *fHistList;             //! List of output histograms
  TH1F  *fNEventAll;            //! Event counter
  TH1F  *fNEventSel;            //! Event counter: Selected events for analysis
  TH1F  *fNEventReject;         //! Book keeping of reason of rejecting events

  TH1F *fh1Centrality;                         //! Centrality

  TProfile*     fh1Xsec;                       //! pythia cross section and trials
  TH1F*         fh1Trials;                     //! trials which are added
  TH1F*         fh1PtHard;                     //! pt hard of the event
  TH1F*         fh1PtHardTrials;               //! pt hard of the event

  TH2F *fPtRelUncertainty1PtPrim;              //! Pt vs relUncertainty1Pt for primary particles
  TH2F *fPtRelUncertainty1PtSec;               //! Pt vs relUncertainty1Pt for secondary particles

  ClassDef(AliPWG4HighPtSpectra,5);
};

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