]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskChargedJetsPA.h
Charged jets (pPb): Updates
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskChargedJetsPA.h
1 #ifndef ALIANALYSISTASKCHARGEDJETSPA_H
2 #define ALIANALYSISTASKCHARGEDJETSPA_H
3
4 //#define DEBUGMODE
5
6 class TList;
7 class TClonesArray;
8 class TString;
9 class AliEmcalJet;
10 class AliRhoParameter;
11 class AliVParticle;
12 class AliLog;
13 class AliAnalysisUtils;
14 class TRandom3;
15 class AliESDtrack;
16
17 #include "AliESDtrackCuts.h"
18 #include "THn.h"
19
20 const int kMaxMatch=5;
21 const double kMaxChi2 = 200;
22
23 // Class for the hybrid track cuts
24 class AliESDHybridTrackcuts {
25  public:
26   AliESDHybridTrackcuts() : fMainCuts(0), fAdditionalCuts(0) {};
27   AliESDHybridTrackcuts(const AliESDHybridTrackcuts& pd) : fMainCuts(0), fAdditionalCuts(0) {((AliESDHybridTrackcuts &) pd).Copy(*this);};
28   virtual ~AliESDHybridTrackcuts() {delete fAdditionalCuts; delete fMainCuts;};
29
30   virtual void Copy(AliESDHybridTrackcuts &c) const
31   {
32     AliESDHybridTrackcuts& target = (AliESDHybridTrackcuts &) c;
33     target.fAdditionalCuts = fAdditionalCuts;
34     target.fMainCuts = fMainCuts;
35   };
36
37   // Meta function to accept hybrid tracks
38   Int_t AcceptTrack (const AliESDtrack* esdTrack) {
39     if (AcceptNormalTrack(esdTrack))
40       return 1;
41     else if (AcceptAdditionalTrack(esdTrack))
42       return 2;
43     else
44       return 0;
45   };
46
47   Bool_t  AcceptNormalTrack (const AliESDtrack* esdTrack) {if(fMainCuts) return fMainCuts->AcceptTrack(esdTrack); else return kFALSE;};
48   Bool_t  AcceptAdditionalTrack (const AliESDtrack* esdTrack) {if(fAdditionalCuts) return fAdditionalCuts->AcceptTrack(esdTrack); else return kFALSE;};
49   void    SetMainCuts (AliESDtrackCuts* trackCuts) {fMainCuts = trackCuts;};
50   void    SetAdditionalCuts (AliESDtrackCuts* trackCuts) {fAdditionalCuts = trackCuts;};
51   AliESDtrackCuts* GetAdditionalCuts () {return fAdditionalCuts;};
52   AliESDtrackCuts* GetMainCuts () {return fMainCuts;};
53
54   AliESDHybridTrackcuts &operator=(const AliESDHybridTrackcuts &c) {if (this != &c) ((AliESDHybridTrackcuts &) c).Copy(*this); return *this;};
55  protected:
56   AliESDtrackCuts*  fMainCuts;          // trackcut object for the global tracks
57   AliESDtrackCuts*  fAdditionalCuts;    // trackcut object for the complementary tracks
58
59 // ClassDef(AliESDHybridTrackcuts, 2); 
60 };
61
62 class AliAnalysisTaskChargedJetsPA : public AliAnalysisTaskSE {
63  public:
64   // ######### CONTRUCTORS/DESTRUCTORS AND STD FUNCTIONS
65   AliAnalysisTaskChargedJetsPA() : AliAnalysisTaskSE(), fOutputLists(), fCurrentOutputList(0), fDoJetAnalysis(1), fAnalyzeJetProfile(0), fAnalyzeTrackcuts(0), fAnalyzeJetConstituents(1), fParticleLevel(0), fUseDefaultVertexCut(1), fUsePileUpCut(1), fSetCentralityToOne(0), fNoExternalBackground(0), fBackgroundForJetProfile(0), fPartialAnalysisNParts(1), fPartialAnalysisIndex(0), fJetArray(0), fTrackArray(0), fBackgroundJetArray(0), fJetArrayName(), fTrackArrayName(), fBackgroundJetArrayName(), fRhoTaskName(), fRandConeRadius(0.4), fSignalJetRadius(0.4), fBackgroundJetRadius(0.4), fNumberExcludedJets(-1), fMinEta(-0.9), fMaxEta(0.9), fMinJetEta(-0.5), fMaxJetEta(0.5), fMinTrackPt(0.150), fMinJetPt(5.0), fMinJetArea(0.5), fMinBackgroundJetPt(0.0), fMinNCrossedRows(70), fUsePtDepCrossedRowsCut(0), fNumberOfCentralityBins(20), fCentralityType("V0A"), fMatchTr(), fMatchChi(), fPrimaryVertex(0), fFirstLeadingJet(0), fSecondLeadingJet(0), fFirstLeadingKTJet(0), fSecondLeadingKTJet(0), fNumberSignalJets(0), fNumberSignalJetsAbove5GeV(0), fRandom(0), fHelperClass(0), fInitialized(0), fTaskInstanceCounter(0), fIsDEBUG(0), fIsPA(1), fNoTerminate(1), fEventCounter(0), fHybridESDtrackCuts(0), fHybridESDtrackCuts_variedPtDep(0), fHybridESDtrackCuts_variedPtDep2(0)
66   {
67   // dummy
68   }
69
70   AliAnalysisTaskChargedJetsPA(const char *name, const char* trackArrayName, const char* jetArrayName, const char* backgroundJetArrayName, Bool_t analyzeJetProfile, Bool_t analyzeTrackcuts);
71   virtual ~AliAnalysisTaskChargedJetsPA();
72   virtual void     UserCreateOutputObjects();
73   virtual void     UserExec(Option_t *option);
74   virtual Bool_t   UserNotify();
75   virtual void     Terminate(Option_t *);
76
77   // ######### SETTERS/GETTERS
78   void        SetDoJetAnalysis(Bool_t val) {fDoJetAnalysis = val;}
79   void        SetAnalyzeJetProfile(Bool_t val) {fAnalyzeJetProfile = val;}
80   void        SetAnalyzeTrackcuts(Bool_t val) {fAnalyzeTrackcuts = val;}
81   void        SetAnalyzeJetConstituents(Bool_t val) {fAnalyzeJetConstituents = val;}
82   void        SetAnalyzePartialEvents(Int_t nParts, Int_t index) {fPartialAnalysisNParts = nParts; fPartialAnalysisIndex = index;}
83   void        SetUseDefaultVertexCut (Bool_t val) {fUseDefaultVertexCut = val;}
84   void        SetUsePileUpCut (Bool_t val) {fUsePileUpCut = val;}
85   void        SetNoTerminate (Bool_t val) {fNoTerminate = val;}
86   void        SetIsPA (Bool_t val) {fIsPA = val;}
87   void        SetCentralityToOne (Bool_t val) {fSetCentralityToOne = val;}
88   void        SetNoExternalBackground (Bool_t val) {fNoExternalBackground = val;}
89   void        SetBackgroundForJetProfile (Bool_t val) {fBackgroundForJetProfile = val;}
90   void        SetMinNCrossedRows(Int_t val) {fMinNCrossedRows = val;}
91   void        SetUsePtDepCrossedRowsCut(Bool_t val) {fUsePtDepCrossedRowsCut = val;}
92
93   void        SetNumberOfCentralityBins(Int_t val) {fNumberOfCentralityBins = val;} 
94   void        SetTrackMinPt(Double_t minPt) {fMinJetPt = minPt;}
95   void        SetSignalJetMinPt(Double_t minPt) {fMinJetPt = minPt;}
96   void        SetSignalJetMinArea(Double_t minArea) {fMinJetArea = minArea;}
97   void        SetBackgroundJetMinPt(Double_t minPt) {fMinBackgroundJetPt = minPt;}
98   void        SetRandConeRadius(Double_t radius) {fRandConeRadius = radius;}
99   void        SetSignalJetRadius(Double_t radius) {fSignalJetRadius = radius;}
100   void        SetBackgroundJetRadius(Double_t radius) {fBackgroundJetRadius = radius;}
101   void        SetCentralityType(const char* type) {fCentralityType = type;}
102   void        SetExternalRhoTaskName(const char* name) {fRhoTaskName = name;}
103   void        SetAcceptanceEta(Double_t minEta, Double_t maxEta) {fMinEta = minEta; fMaxEta = maxEta;}
104   void        SetAcceptanceJetEta(Double_t minEta, Double_t maxEta) {fMinJetEta = minEta; fMaxJetEta = maxEta;}
105   Int_t       GetInstanceCounter() {return fTaskInstanceCounter;}
106   void        SetCurrentOutputList(Int_t i)
107   {
108     if(i==0)
109     {
110       fCurrentOutputList = fOutputLists[0];
111     }
112     else if(i==1)
113     {
114       if(fAnalyzeJetProfile)
115         fCurrentOutputList = fOutputLists[1];
116       else
117         AliError("Non-existing output list demanded!");
118     }
119     else if(i==2)
120     {
121       if(!fAnalyzeJetProfile && fAnalyzeTrackcuts)
122         fCurrentOutputList = fOutputLists[1];
123       else if(fAnalyzeJetProfile && fAnalyzeTrackcuts)
124         fCurrentOutputList = fOutputLists[2];
125       else
126         AliError("Non-existing output list demanded!");
127     }
128   }
129
130  private:
131
132   // ######### MAIN CALCULATION FUNCTIONS
133   void        InitializeTrackcuts();
134   void        GetLeadingJets();
135   Double_t    GetCorrectedJetPt(AliEmcalJet* jet, Double_t background);
136   Double_t    GetDeltaPt(Double_t rho, Double_t leadingJetExclusionProbability = 0);
137
138   void        GetKTBackgroundDensityAll(Int_t numberExcludeLeadingJets, Double_t& rhoPbPb, Double_t& rhoPbPbWithGhosts, Double_t& rhoCMS, Double_t& rhoImprovedCMS, Double_t& rhoMean, Double_t& rhoTrackLike);
139   void        GetTRBackgroundDensity(Int_t numberExcludeLeadingJets, Double_t& rhoNoExclusion, Double_t& rhoConeExclusion02, Double_t& rhoConeExclusion04, Double_t& rhoConeExclusion06, Double_t& rhoConeExclusion08, Double_t& rhoExactExclusion);
140   void        GetPPBackgroundDensity(Double_t& background);
141
142   Double_t    GetConePt(Double_t eta, Double_t phi, Double_t radius);
143   Double_t    GetCorrectedConePt(Double_t eta, Double_t phi, Double_t radius, Double_t background);
144   Int_t       GetConeConstituentCount(Double_t eta, Double_t phi, Double_t radius);
145   Double_t    GetExternalRho();
146   void        CreateJetProfilePlots(Double_t bgrd);
147   void        CreateCutHistograms();
148   void        CreateITSTPCMatchingHistograms();
149   void        GetPerpendicularCone(Double_t vecPhi, Double_t vecTheta, Double_t& conePt);
150
151   // ######### CHECK FUNCTIONS
152   Bool_t      IsTrackInAcceptance(AliVParticle* track);
153   Bool_t      IsTrackInCone(AliVTrack* track, Double_t eta, Double_t phi, Double_t radius);
154   Bool_t      IsTrackInJet(AliEmcalJet* jet, Int_t trackIndex);
155   Bool_t      IsJetOverlapping(AliEmcalJet* jet1, AliEmcalJet* jet2);
156
157   Bool_t      IsEventInAcceptance(AliVEvent* event);
158   Bool_t      IsBackgroundJetInAcceptance(AliEmcalJet* jet);
159   Bool_t      IsSignalJetInAcceptance(AliEmcalJet* jet, Bool_t usePtCut = kFALSE);
160   
161   // ######### HELPER FUNCTIONS
162   Double_t    EtaToTheta(Double_t arg);
163   Double_t    ThetaToEta(Double_t arg);
164   Double_t    GetDeltaPhi(Double_t phi1, Double_t phi2);
165   Double_t    MCGetOverlapCircleRectancle(Double_t cPosX, Double_t cPosY, Double_t cRadius, Double_t rPosXmin, Double_t rPosXmax, Double_t rPosYmin, Double_t rPosYmax);
166   Double_t    MCGetOverlapMultipleCirclesRectancle(Int_t numCircles, std::vector<Double_t> cPosX, std::vector<Double_t> cPosY, Double_t cRadius, Double_t rPosXmin, Double_t rPosXmax, Double_t rPosYmin, Double_t rPosYmax);
167   void        Match(AliESDtrack* tr0, AliESDtrack* tr1, Int_t& nmatch, Bool_t excludeMom = kFALSE, Double_t rotate=0);
168
169   // ######### HISTOGRAM FUNCTIONS
170   void        FillHistogram(const char * key, Double_t x);
171   void        FillHistogram(const char * key, Double_t x, Double_t y);
172   void        FillHistogram(const char * key, Double_t x, Double_t y, Double_t add);
173   void        FillCutHistogram(const char * key, Double_t cut, Double_t pT, Double_t eta, Double_t phi, Int_t isAdditionalTrack);
174
175   const char* GetHistoName(const char* name)
176   {
177     if (fParticleLevel)    
178       return Form("%s_MC", name);
179     return Form("%s", name);
180   }
181   template <class T> T* AddHistogram1D(const char* name = "CustomHistogram", const char* title = "NO_TITLE", const char* options = "", Int_t xBins = 100, Double_t xMin = 0.0, Double_t xMax = 20.0, const char* xTitle = "x axis", const char* yTitle = "y axis");
182   template <class T> T* AddHistogram2D(const char* name = "CustomHistogram", const char* title = "NO_TITLE", const char* options = "", Int_t xBins = 100, Double_t xMin = 0.0, Double_t xMax = 20.0, Int_t yBins = 100, Double_t yMin = 0.0, Double_t yMax = 20.0, const char* xTitle = "x axis", const char* yTitle = "y axis", const char* zTitle = "z axis");
183   THnF* AddCutHistogram(const char* name, const char* title, const char* cutName, Int_t nBins, Double_t xMin, Double_t xMax);
184   void  BinLogAxis(const THn *h, Int_t axisNumber);
185
186   // ######### STANDARD FUNCTIONS
187   void      Calculate(AliVEvent* event);
188   void      ExecOnce();
189   void      Init ();
190
191   std::vector<TList*> fOutputLists;           //! Output lists
192   TList*              fCurrentOutputList;     //! Currently selected list where the histograms will be saved to
193   // ########## USAGE TRIGGERS 
194   Bool_t              fDoJetAnalysis;         // trigger if jets/tracks etc. should be analyzed
195   Bool_t              fAnalyzeJetProfile;     // trigger if jet profile should be analyzed
196   Bool_t              fAnalyzeTrackcuts;      // trigger if trackcuts should be analyzed
197   Bool_t              fAnalyzeJetConstituents;// trigger if constituents should be analyzed
198   Bool_t              fParticleLevel;         // trigger if data is kinematics only (for naming reasons)
199   Bool_t              fUseDefaultVertexCut;   // trigger if automatic vertex cut from helper class should be done
200   Bool_t              fUsePileUpCut;          // trigger if pileup cut should be done
201   Bool_t              fSetCentralityToOne;    // trigger if centrality val. should be set to one for every event (failsafe)
202   Bool_t              fNoExternalBackground;  // External background is set to 0 (e.g. for PP)
203   Int_t               fBackgroundForJetProfile; // Which background will be subtracted for the profile calculation (0=External,1=Improved CMS,2=CMS,3=PP,4=TR,5=None)
204   Int_t               fPartialAnalysisNParts; // take only every Nth event
205   Int_t               fPartialAnalysisIndex;  // using e.g. only every 5th event, this specifies which one
206   
207
208   // ########## SOURCE INFORMATION
209   TClonesArray*       fJetArray;              //! object containing the jets
210   TClonesArray*       fTrackArray;            //! object containing the tracks
211   TClonesArray*       fBackgroundJetArray;    //! object containing background jets
212   TString             fJetArrayName;          // name of object containing the jets
213   TString             fTrackArrayName;        // name of object containing the tracks
214   TString             fBackgroundJetArrayName;// name of object containing event wise bckgrds
215   TString             fRhoTaskName;           // name of rho task for this analysis
216   // ########## JET/DIJET/RC PROPERTIES
217   Double_t            fRandConeRadius;        // Radius for the random cones
218   Double_t            fSignalJetRadius;       // Radius for the signal jets
219   Double_t            fBackgroundJetRadius;   // Radius for the KT background jets
220   Int_t               fNumberExcludedJets;    // Number of jets to be excluded from backgrounds
221   // ########## CUTS 
222   Double_t            fMinEta;                // min eta of tracks
223   Double_t            fMaxEta;                // max eta of tracks
224   Double_t            fMinJetEta;             // min eta of jets
225   Double_t            fMaxJetEta;             // max eta of jets
226   Double_t            fMinTrackPt;            // Min track pt to be accepted
227   Double_t            fMinJetPt;              // Min jet pt to be accepted
228   Double_t            fMinJetArea;            // Min jet area to be accepted
229   Double_t            fMinBackgroundJetPt;    // Min jet pt to be accepted as background jet
230   Int_t               fMinNCrossedRows;       // Min number of crossed TPC rows for trackcut analysis
231   Bool_t              fUsePtDepCrossedRowsCut;// Trigger if linear pT dep. for crossed rows cut should be applied
232   Int_t               fNumberOfCentralityBins;// Number of centrality bins used for histograms
233   TString             fCentralityType;        // Used centrality estimate (V0A, V0C, V0M, ...)
234
235   AliESDtrack*        fMatchTr[kMaxMatch];    //! Helper variables track matching
236   Double_t            fMatchChi[kMaxMatch];   //! Helper variables track matching
237
238
239   // ########## EVENT PROPERTIES
240   const AliVVertex*   fPrimaryVertex;         //! Vertex found per event
241   AliEmcalJet*        fFirstLeadingJet;       //! leading jet in event
242   AliEmcalJet*        fSecondLeadingJet;      //! next to leading jet in event
243   AliEmcalJet*        fFirstLeadingKTJet;     //! leading kT jet in event
244   AliEmcalJet*        fSecondLeadingKTJet;    //! next to leading kT jet in event
245   Int_t               fNumberSignalJets;      // Number of signal jets in event
246   Int_t               fNumberSignalJetsAbove5GeV; // Number of signal jets in event > 5GeV
247   // ########## GENERAL VARS
248   TRandom3*           fRandom;                //! A random number
249   AliAnalysisUtils*   fHelperClass;           //! Vertex selection helper
250   Bool_t              fInitialized;           // trigger if tracks/jets are loaded
251   Int_t               fTaskInstanceCounter;   // for naming reasons
252   Bool_t              fIsDEBUG;               // Debug trigger
253   Bool_t              fIsPA;                  // pPb trigger
254   Bool_t              fNoTerminate;           // don't use terminate routines
255   ULong_t             fEventCounter;          // Internal event counter
256   AliESDHybridTrackcuts* fHybridESDtrackCuts; //! these trackcuts are applied
257   AliESDHybridTrackcuts* fHybridESDtrackCuts_variedPtDep; //! these trackcuts are applied
258   AliESDHybridTrackcuts* fHybridESDtrackCuts_variedPtDep2; //! these trackcuts are applied
259
260   AliAnalysisTaskChargedJetsPA(const AliAnalysisTaskChargedJetsPA&);
261   AliAnalysisTaskChargedJetsPA& operator=(const AliAnalysisTaskChargedJetsPA&);
262
263   ClassDef(AliAnalysisTaskChargedJetsPA, 3); // Charged jet analysis for pA
264
265 };
266 #endif