don't sort clusters after local reco, do this in AliITSUTrackerGlo
[u/mrichter/AliRoot.git] / PWGJE / AliPWG4HighPtSpectra.h
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //-----------------------------------------------------------------------
17 // Author : Marta Verweij, D. Keijdener - UU
18 //-----------------------------------------------------------------------
19
20 #ifndef ALIPWG4HIGHPTSPECTRA_H
21 #define ALIPWG4HIGHPTSPECTRA_H
22
23 #include "AliAnalysisTask.h"
24 #include "AliCFManager.h"
25
26 class TH1I;
27 class TH1F;
28 class TH1D;
29 class TH2F;
30 class TProfile;
31 class TFile;
32 class TList;
33
34 //class AliCFManager;
35 class AliESDtrackCuts;
36 class AliESDEvent;
37 class AliAODEvent;
38 class AliVEvent;
39 class AliVVertex;
40 class AliMCEvent;
41 class AliStack;
42 class AliGenPythiaEventHeader;
43 class AliGenHijingEventHeader;
44
45 class AliPWG4HighPtSpectra : public AliAnalysisTask {
46  public:
47
48   enum {
49     kStepReconstructed          = 0,
50     kStepSecondaries            = 1,
51     kStepReconstructedMC        = 2,
52     kStepMCAcceptance           = 3
53   };
54
55   AliPWG4HighPtSpectra();
56   AliPWG4HighPtSpectra(const Char_t* name);
57   // AliPWG4HighPtSpectra& operator= (const AliPWG4HighPtSpectra& c);
58   //  AliPWG4HighPtSpectra(const AliPWG4HighPtSpectra& c);
59   ~AliPWG4HighPtSpectra() {;};
60
61   // ANALYSIS FRAMEWORK STUFF to loop on data and fill output objects
62   virtual void   LocalInit();
63   virtual void   ConnectInputData(Option_t *);
64   virtual void   CreateOutputObjects();
65   virtual void   Exec(Option_t *option);
66   virtual void   Terminate(Option_t *);
67   virtual Bool_t Notify(); //Copied from AliAnalysisTaskJetSpectrum2
68
69   Bool_t IsPbPb() {return fIsPbPb;}  //is PbPb data?
70   Bool_t SelectEvent();    //decides if event is used for analysis
71   Int_t CalculateCentrality(AliVEvent *event);
72
73   //Setters
74   void SetIsPbPb(Bool_t cs)                {fIsPbPb = cs;}
75   void SetCentralityClass(int cent)        {fCentClass=cent;}
76   void SetTriggerMask(UInt_t t)             {fTriggerMask=t;}
77  
78   // CORRECTION FRAMEWORK RELATED FUNCTIONS
79   void     SetCFManagerPos(const AliCFManager* io1) {fCFManagerPos = io1;}   // global correction manager 
80   const AliCFManager * GetCFManagerPos() const {return fCFManagerPos;}           // get corr manager 
81   void     SetCFManagerNeg(const AliCFManager* io2) {fCFManagerNeg = io2;}   // global correction manager 
82   const AliCFManager * GetCFManagerNeg() const {return fCFManagerNeg;}            // get corr manager
83
84   //if fTrackType=0 (Global)
85   //if fTrackType=1 (TPConly)
86   //if fTrackType=2 (TPConly constrained)
87   void SetTrackType(Int_t trackType) {fTrackType = trackType;}
88   //AliESDtrackCuts setters
89   void SetCuts(AliESDtrackCuts* trackCuts) {fTrackCuts = trackCuts;} // Needs to be specified for ESD analysis, not for AOD analysis
90   void SetFilterMask(Int_t filtermask) {fFilterMask = filtermask;} // Needs to be specified for AOD analysis, not for ESD analysis
91   void SetCutsReject(AliESDtrackCuts* trackCuts) {fTrackCutsReject = trackCuts;}
92   void SelectHIJINGOnly(Bool_t b)    {fbSelectHIJING = b;}
93
94   Bool_t IsHIJINGParticle(Int_t label);
95
96   void SetSigmaConstrainedMax(Double_t sigma) {fSigmaConstrainedMax=sigma;}
97
98   // Data types
99   Bool_t IsReadAODData()   const {return fReadAODData;}
100   void   SetReadAODData(Bool_t flag=kTRUE) {fReadAODData=flag;}
101
102   Bool_t   IsUsingPythiaInfo() const {return fNoPythiaInfo;}
103   void   SetNoPythiaInfo() {fNoPythiaInfo=kTRUE;}
104
105   static AliGenPythiaEventHeader*  GetPythiaEventHeader(AliMCEvent *mcEvent);
106   static AliGenHijingEventHeader*  GetHijingEventHeader(AliMCEvent *mcEvent);
107   static AliGenHijingEventHeader*  GetHijingEventHeaderAOD(AliAODEvent *aodEvent);
108
109   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
110
111
112   
113  protected:
114   Bool_t              fReadAODData      ;  // flag for AOD/ESD input files
115   Bool_t              fNoPythiaInfo     ;  // flag to skip reading pyxsec.root and plotting output
116   const AliCFManager  *fCFManagerPos    ;  // pointer to the CF manager for positive charged particles
117   const AliCFManager  *fCFManagerNeg    ;  // pointer to the CF manager for negative charged particles
118  
119   AliESDEvent *fESD;      //! ESD object
120   AliAODEvent *fAOD;      //! AOD object
121   AliMCEvent  *fMC;       //! MC event object, only used in ESD analysis
122   AliStack    *fStack;    //! stack object, only used in ESD analysis
123   TClonesArray *fArrayMCAOD;  //! TClonesArray of AliAODMCParticles, only used in AOD analysis
124
125   const AliVVertex   *fVtx;     //! vertex object
126
127   UInt_t      fTriggerMask;          // Trigger mask to select events 
128   Bool_t      fIsPbPb;               // kTRUE if PbPb
129   Int_t       fCentClass;            // Select only events from predefined centrality class
130
131   Int_t   fTrackType;     // Type of track to be used in analysis
132   //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.
133   AliESDtrackCuts *fTrackCuts;           // trackCuts applied to global tracks
134   AliESDtrackCuts *fTrackCutsReject;     // trackCuts to reject tracks (hybrid case)
135   Int_t   fFilterMask;     // Filtermask specifying track cuts. See https://twiki.cern.ch/twiki/bin/view/ALICE/PWGPPAODTrackCuts for values.
136
137   Bool_t fbSelectHIJING; //Select only particles from HIJING event
138
139   Double_t fSigmaConstrainedMax;  // max sigma on constrained fit
140
141  private:
142   AliPWG4HighPtSpectra(const AliPWG4HighPtSpectra&);
143   AliPWG4HighPtSpectra& operator=(const AliPWG4HighPtSpectra&);
144
145   Float_t fAvgTrials;             // Average number of trials
146
147   // Histograms
148   //Number of events
149   TList *fHistList;             //! List of output histograms
150   TH1F  *fNEventAll;            //! Event counter
151   TH1F  *fNEventSel;            //! Event counter: Selected events for analysis
152   TH1F  *fNEventReject;         //! Book keeping of reason of rejecting events
153
154   TH1F *fh1Centrality;                         //! Centrality
155
156   TProfile*     fh1Xsec;                       //! pythia cross section and trials
157   TH1F*         fh1Trials;                     //! trials which are added
158   TH1F*         fh1PtHard;                     //! pt hard of the event
159   TH1F*         fh1PtHardTrials;               //! pt hard of the event
160
161   TH2F *fPtRelUncertainty1PtPrim;              //! Pt vs relUncertainty1Pt for primary particles
162   TH2F *fPtRelUncertainty1PtSec;               //! Pt vs relUncertainty1Pt for secondary particles
163
164   ClassDef(AliPWG4HighPtSpectra,5);
165 };
166
167 #endif