]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskHJetDphi.h
Ch. jets in pPb: Minor improvements
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskHJetDphi.h
1 #ifndef ALIANALYSISTASKHJETDPHI_H
2 #define ALIANALYSISTASKHJETDPHI_H
3
4 #include <vector>
5
6 class TH2F;
7 class TH1F;
8 class TF1;
9 class THnSparse;
10 class TClonesArray;
11 class TObject;
12 class TString;
13 class AliAODEvent;
14 class AliESDEvent;
15 class AliAODExtension;
16 class AliMCEvent;
17 class AliRhoParameter;
18 class TRandom3;
19 class AliEmcalJet;
20 class AliVTrack;
21 class AliNamedArrayI;
22 class AliAODTrack;
23 class AliESDtrackCuts;
24 class AliAODJetEventBackground;
25 class AliNamedString;
26
27 #include "AliAnalysisTaskSE.h"
28
29 class AliAnalysisTaskHJetDphi : public AliAnalysisTaskSE {
30  public:
31   AliAnalysisTaskHJetDphi();
32   AliAnalysisTaskHJetDphi(const char *name);
33   virtual ~AliAnalysisTaskHJetDphi();
34
35   void UserCreateOutputObjects();
36   Bool_t UserNotify();
37   void UserExec(Option_t *option);
38   void Terminate(Option_t *);
39   void PrintConfig();
40
41   void SetVerbosity(Int_t i)                                   { fVerbosity = i;                 }
42   void SetIsEmbedding(Bool_t b)                                { fIsEmbedding = b;               }
43   void SetAnaType(Int_t i)                                     { fAnaType = i;                   }  
44   void SetRunPeriod(char *p)                                   { fPeriod = p;                    }
45   void SetCollisionSystem(char *s)                             { fCollisionSystem = s;           }
46   void SetIsMC(Bool_t mc)                                      { fIsMC = mc;                     }
47   void SetAnalyzeMCTruth(Bool_t mc)                            { fAnalyzeMCTruth = mc;           }
48   void SetOfflineTrgMask(AliVEvent::EOfflineTriggerTypes mask) { fOfflineTrgMask = mask;         }
49   void SetMaxVtxZ(Double_t z)                                  { fMaxVtxZ = z;                   }
50   void SetFilterMask(UInt_t filter)                            { fFilterMask = filter;           }
51   void SetRequireITSRefit(Bool_t r)                            { fRequireITSRefit = r;           }
52   void SetRequireSharedClsCut(Bool_t r)                        { fRequireSharedClsCut = r;       }
53   void SetNonStdFile(char* s)                                  { fNonStdFile = s;                }
54   void SetMcParticleArrName(char *s)                           { fMcParticleArrName = s;         }
55   void SetEmbTrkArrName(char *s)                               { fEmbTrkArrName = s;             }
56   void SetTrackArrName(char *s)                                { fTrackArrName=s;                }
57   void SetSwitchOnAvoidTpcHole(Bool_t cut)                     { fSwitchOnAvoidTpcHole=cut;      }
58   void SetAvoidTpcHole(Bool_t cut)                             { fAvoidTpcHole=cut;              }
59   void SetCutTPCBoundary(Bool_t cut)                           { fCutTPCBoundary=cut;            }
60   void SetDistToTPCBoundary(Double_t dist)                     { fDistToTPCBoundary=dist;        }
61   void SetTrkPtRange(Double_t min, Double_t max)               { fMinTrkPt=min; fMaxTrkPt=max;   }
62   void SetTrkPhiRange(Double_t min, Double_t max)              { fMinTrkPhi=min; fMaxTrkPhi=max; }
63   void SetTrkEtaRange(Double_t min, Double_t max)              { fMinTrkEta=min; fMaxTrkEta=max; }
64   void SetRadius(Double_t rad)                                 { fRadius=rad;                    }
65   void SetJetArrName(char *s)                                  { fJetArrName=s;                  }
66   void SetPLJetArrName(char *s)                                { fPLJetArrName = s;              }
67   void SetDLJetArrName(char *s)                                { fDLJetArrName = s;              }
68   void SetRhoName(char *s)                                     { fRhoName=s;                     }
69   void SetRunTrkQA(Bool_t run)                                 { fRunTrkQA=run;                  }
70   void SetRunJetQA(Bool_t run)                                 { fRunJetQA=run;                  }
71   void SetRunSingleInclHJet(Bool_t run)                        { fRunSingleInclHJet=run;         }
72   void SetTTtype(Bool_t type)                                  { fTTtype=type;                   }
73   void SetTTRange(Double_t min, Double_t max)                  { fTTMinPt=min; fTTMaxPt=max;     }
74   void SetJetPtMin(Double_t min)                               { fJetPtMin = min;                }
75   void SetRunPLHJet(Bool_t run)                                { fRunPLHJet = run;               }
76   void SetRunDLHJet(Bool_t run)                                { fRunDLHJet = run;               }
77   void SetRunLeadTrkQA(Bool_t run)                             { fRunLeadTrkQA=run;              }
78   void SetStudyKtEffects(Bool_t study)                         { fStudyKtEffects=study;          }
79   void SetKtValue(Double_t kt)                                 { fKtValue=kt;                    }
80   void SetAODfilterBits(Int_t b0 = 0, Int_t b1 = 0)            { fAODfilterBits[0] = b0  ; fAODfilterBits[1] = b1  ; }
81   void SetRunBkgFlow(Bool_t run)                               { fRunBkgFlow=run;                }
82
83
84 protected:
85   Bool_t                            RetrieveArraies();
86   void                              RunTrackQA();
87   void                              RunJetQA(const TClonesArray *jetArray, const Double_t rho, THnSparse *hJetPt, THnSparse *hJetArea, THnSparse *hJetQA);
88   Int_t                             FindSingleIncTrigger(const TClonesArray *trackArray, Double_t &trigPt, Double_t &trigPhi, Double_t &trigEta, const Int_t arrayType);
89   void                              RunSingleInclHJetCorr(Double_t trigPt, Double_t trigPhi, Double_t trigEta, const TClonesArray *jetArray, Double_t rho, THnSparse *hTT, THnSparse *hn);
90   void                              RunLeadTrkQA();
91   void                              StudyKtEffects();
92   Bool_t                            AcceptTrack(AliVParticle *track);
93   Bool_t                            IsGoodAODtrack(AliVParticle *track);
94   Bool_t                            IsGoodJet(Double_t jetEta);
95   Double_t                          GetLeadingPt(const Int_t jetIndex);
96   Double_t                          GetZ(const Double_t trkPx, const Double_t trkPy, const Double_t trkPz, const Double_t jetPx, const Double_t jetPy, const Double_t jetPz);
97   Double_t                          CalculateDPhi(const Double_t phi1, const Double_t phi2);
98   Double_t                          CalculatePhi(const Double_t py, const Double_t px);
99   Int_t                             LocateToTPCHole(const Double_t phi);
100   Int_t                             GetParticleType(Int_t pdg_input);
101   Double_t                          GetAODTrackPtRes(AliAODTrack *track);
102   Int_t                             GetPtHardBin(Double_t ptHard);
103
104  private:
105   Int_t                             fVerbosity;                  //  Control output
106   Bool_t                            fIsEmbedding;                //  Flag of embedding trains
107   Int_t                             fAnaType;                    //  0-EMCal jet framework; 1-charged jet framework
108   TString                           fPeriod;                     //  Run period
109   TString                           fCollisionSystem;            //  Collision system
110   Bool_t                            fIsMC;                       //  Flag if MC data
111   Bool_t                            fAnalyzeMCTruth;             //  Analyze MC truth
112   AliMCEvent                        *fMC;                        //! MC events
113   AliVEvent                         *fEvent;                     //! Input event 
114   AliESDEvent                       *fESD;                       //! ESD event
115   AliAODEvent                       *fAODIn;                     //! Input AOD event
116   AliAODEvent                       *fAODOut;                    //! Output AOD event
117   AliAODExtension                   *fAODExtension;              //! where we take the jets from can be input or output AOD
118   AliVEvent::EOfflineTriggerTypes   fOfflineTrgMask;             //  Mask of offline triggers to accept
119   Int_t                             fTriggerType;                //! Trigger type of the event
120   Double_t                          fCentrality;                 //! V0M for current event
121   Double_t                          fMaxVtxZ;                    //  Maximum z of vertices
122   AliESDtrackCuts                   *fEsdTrkCut;                 //! Track cuts for global tracks in ESD
123   AliESDtrackCuts                   *fEsdHybCut;                 //! Track cuts for complementary tracks in ESD
124   UInt_t                            fFilterMask;                 //  Filter mask to select AOD tracks
125   Bool_t                            fRequireITSRefit;            //  Flag to require ITS refit for AOD tracks
126   Bool_t                            fRequireSharedClsCut;        //  Flag to require cut on fraction of shared TPC clusters
127   Bool_t                            fIsInit;                     //! Flag if all the arraies are successfully retrieved
128   TString                           fNonStdFile;                 //  Name of delta aod file to catch the extension
129   TString                           fMcParticleArrName;          //  Name of the input mc particles
130   TClonesArray                      *fMcParticleArray;           //! Array of input mc particles
131   AliNamedArrayI                    *fMcParticlelMap;            //! Array of mc map for EMCal train
132   TString                           fEmbTrkArrName;              //  Name of PbPb tracks + PYTHIA tracks
133   TClonesArray                      *fEmbTrkArray;               //! Array of PbPb tracks + PYTHIA tracks
134   TString                           fTrackArrName;               //  Name of the input track array
135   TClonesArray                      *fTrackArray;                //! Array of input tracks
136   Int_t                             fTriggerTrkIndex;            //! Index of the trigger track in the event 
137   Double_t                          fTriggerTrkPt;               //! Trigger track pt
138   Bool_t                            fSwitchOnAvoidTpcHole;       //  Switch on to avoid TPC hole for the recoil jets
139   Bool_t                            fAvoidTpcHole;               //  Flag if TPC hole is present
140   Bool_t                            fCutTPCBoundary;             //  Flag of reqiring trigger tracks stay away from TPC boundary
141   Double_t                          fDistToTPCBoundary;          //  Distance to TPC boundary
142   Double_t                          fMinTrkPt;                   //  Minimum pt for tracks
143   Double_t                          fMaxTrkPt;                   //  Maximum pt for tracks
144   Double_t                          fMinTrkEta;                  //  Minimum eta for tracks
145   Double_t                          fMaxTrkEta;                  //  Maximum eta for tracks
146   Double_t                          fMinTrkPhi;                  //  Minimum phi for tracks
147   Double_t                          fMaxTrkPhi;                  //  Maximum phi for tracks
148   Double_t                          fRadius;                     //  Jet radius
149   TString                           fJetArrName;                 //  Name of the found jet array
150   TString                           fPLJetArrName;               //  Name of the embedded PYTHIA jet array on particle level
151   TString                           fDLJetArrName;               //  Name of the embedded PYTHIA jet array on detector level
152   TClonesArray                      *fJetArray;                  //! Array of the found jets
153   TClonesArray                      *fPLJetArray;                //! Array of the embedded PYTHIA jet array on particle level
154   TClonesArray                      *fDLJetArray;                //! Array of the embedded PYTHIA jet array on detector level
155   TString                           fRhoName;                    //  Name of the rho parameter
156   AliRhoParameter                   *fRho;                       //! Rho parameter
157   Double_t                          fRhoValue;                   //! Value of the rho parameter
158   AliAODJetEventBackground          *fEvtBkg;                    //! Event background for LEGO train
159   AliNamedString                    *fPtHardBinName;             //! Pt hard bin param
160   Int_t                             fPtHardBin;                  //! Pt hard bin  
161   Bool_t                            fRunTrkQA;                   //  Flag to run track QA
162   Bool_t                            fRunJetQA;                   //  Flag to run jet QA
163   Bool_t                            fRunSingleInclHJet;          //  Flag to run h+jet
164   Int_t                             fTTtype;                     //  0-single inclusive; 1-leading (not implemented yet)
165   Double_t                          fTTMinPt;                    //  Minimum pt for TT
166   Double_t                          fTTMaxPt;                    //  Maximum pt for TT
167   Double_t                          fJetPtMin;                   //  Minimum pt for jets
168   Bool_t                            fRunPLHJet;                  //  Run h+jet for detector-level jets
169   Bool_t                            fRunDLHJet;                  //  Run h+jet for particle-level jets
170   Bool_t                            fRunLeadTrkQA;               //  Run QA for trigger hadron
171   Bool_t                            fStudyKtEffects;             //  Study kt effects
172   Double_t                          fKtValue;                    //  Value of input kt 
173   TRandom3                          *fRandom;                    //! Random number generator
174   Int_t                             fAODfilterBits[2];           //  AOD track filter bit map
175   Bool_t                            fRunBkgFlow;                 //  Vary rho for recoil jets
176
177   // List of histograms
178   TList                             *fOutputList;                //! Output list
179   TH1F                              *fhEventStat;                //!
180   TH1F                              *fhNTrials;                  //!
181   TH1F                              *fhPtHardBins;               //!
182
183   // Event properties
184   TH1F                              *fhVtxZ[4];                  //!
185   TH1F                              *fhCentrality[4];            //!
186   TH2F                              *fhRhoVsCent[4];             //!
187
188   // track QA
189   TH2F                              *fhTrkPt[4];                 //!
190   THnSparse                         *fhTrkQA[4];                 //!
191   THnSparse                         *fhTrkPtRes[4];              //!
192   THnSparse                         *fhTrkPhiRes[4];             //!
193
194   // jet QA
195   THnSparse                         *fhJetPt[4][3];              //!
196   THnSparse                         *fhJetArea[4][3];            //!
197   THnSparse                         *fhJetQA[4][3];              //!
198
199   // h+jet analysis
200   TH1F                              *fhNumberOfTT[4];            //!
201   THnSparse                         *fhTTPt[4][3];               //!
202   THnSparse                         *fHJetPhiCorr[4][3];         //!
203   THnSparse                         *fHJetPhiCorrUp[4];          //!
204   THnSparse                         *fHJetPhiCorrDown[4];        //!
205
206   // additional studies
207   THnSparse                         *fhLeadTrkQA[4];             //!
208   THnSparse                         *fhKtEffects[4];             //!
209
210   AliAnalysisTaskHJetDphi(const AliAnalysisTaskHJetDphi&);            // not implemented
211   AliAnalysisTaskHJetDphi &operator=(const AliAnalysisTaskHJetDphi&); // not implemented
212
213   ClassDef(AliAnalysisTaskHJetDphi, 2);
214 };
215
216 #endif