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