]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskChargedJetsPA.h
Up from Ruediger
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / UserTasks / AliAnalysisTaskChargedJetsPA.h
1 #ifndef ALIANALYSISTASKCHARGEDJETSPA_H
2 #define ALIANALYSISTASKCHARGEDJETSPA_H
3
4 //#define DEBUGMODE
5
6 class TH1F;
7 class TH2F;
8 class TList;
9 class TClonesArray;
10 class TString;
11 class AliEmcalJet;
12 class AliRhoParameter;
13 class AliVParticle;
14 class AliLog;
15 class AliAnalysisUtils;
16
17 class AliAnalysisTaskChargedJetsPA : public AliAnalysisTaskSE {
18  public:
19   // ######### CONTRUCTORS/DESTRUCTORS AND STD FUNCTIONS
20   AliAnalysisTaskChargedJetsPA() : AliAnalysisTaskSE(), fOutputList(0), fAnalyzeJets(1), fAnalyzeBackground(1), fAnalyzePythia(0), fHasTracks(0), fHasJets(0), fHasBackgroundJets(0), fIsMC(0), fJetArray(0), fTrackArray(0), fBackgroundJetArray(0), fJetArrayName(0), fTrackArrayName(0), fBackgroundJetArrayName(0), fNumPtHardBins(11), fRandConeRadius(0.4), fSignalJetRadius(0.4), fBackgroundJetRadius(0.4), fTRBackgroundConeRadius(0.4), fNumberRandCones(8), fNumberExcludedJets(2), fDijetMaxAngleDeviation(10.0), fJetKTEtaCorrection(0), fJetRCEtaCorrection(0), fJetTREtaCorrection(0), fSignalJetEtaWindow(0.5), fBackgroundJetEtaWindow(0.5), fTrackEtaWindow(0.9), fVertexWindow(10.0), fVertexMaxR(1.0), fMinTrackPt(0.150), fMinJetPt(1.0), fMinJetArea(0.4), fMinBackgroundJetPt(0.15), fMinDijetLeadingPt(10.0), fCentralityType("V0A"), fFirstLeadingJet(0), fSecondLeadingJet(0), fNumberSignalJets(0), fCrossSection(0.0), fTrials(0.0),  fRandom(0), fHelperClass(0), fInitialized(0), fTaskInstanceCounter(0), fHistList(0), fHistCount(0) {}
21
22   AliAnalysisTaskChargedJetsPA(const char *name, const char* trackArrayName, const char* jetArrayName, const char* backgroundJetArrayName);
23   virtual ~AliAnalysisTaskChargedJetsPA();
24   virtual void     UserCreateOutputObjects();
25   virtual void     UserExec(Option_t *option);
26   virtual void     Terminate(Option_t *);
27
28   // ######### SETTERS/GETTERS
29   void        SetAnalyzeJets(Bool_t val) {fAnalyzeJets = val;}
30   void        SetAnalyzeBackground(Bool_t val) {fAnalyzeBackground = val;}
31   void        SetAnalyzePythia(Bool_t val) {fAnalyzePythia = val;}
32
33   void        SetTrackMinPt(Double_t minPt) {fMinJetPt = minPt;}
34   void        SetSignalJetMinPt(Double_t minPt) {fMinJetPt = minPt;}
35   void        SetSignalJetMinArea(Double_t minArea) {fMinJetArea = minArea;}
36   void        SetBackgroundJetMinPt(Double_t minPt) {fMinBackgroundJetPt = minPt;}
37   void        SetDijetLeadingMinPt(Double_t minPt) {fMinDijetLeadingPt = minPt;}
38   void        SetNumberOfPtHardBins(Int_t count) {fNumPtHardBins = count;}
39   void        SetNumberOfRandConesPerEvent(Int_t count) {fNumberRandCones = count;}
40   void        SetRandConeRadius(Double_t radius) {fRandConeRadius = radius;}
41   void        SetSignalJetRadius(Double_t radius) {fSignalJetRadius = radius;}
42   void        SetBackgroundJetRadius(Double_t radius) {fBackgroundJetRadius = radius;}
43   void        SetTRBackgroundConeRadius(Double_t radius) {fTRBackgroundConeRadius = radius;}
44   void        SetCentralityType(const char* type) {fCentralityType = type;}
45
46   void        SetDijetMaxAngleDeviation(Double_t degrees) {fDijetMaxAngleDeviation = degrees/360.0 * TMath::TwoPi();} // degrees are more comfortable
47   void        SetAcceptanceWindows(Double_t trackEta, Double_t vertexZ, Double_t vertexMaxR, Double_t signalJetRadius, Double_t bgrdJetRadius){fVertexWindow = vertexZ; fVertexMaxR = vertexMaxR; fTrackEtaWindow = trackEta; fSignalJetRadius = signalJetRadius; fBackgroundJetRadius = bgrdJetRadius; fSignalJetEtaWindow = fTrackEtaWindow-fSignalJetRadius; fBackgroundJetEtaWindow = fTrackEtaWindow-fBackgroundJetRadius;}
48   void        SetKTEtaCorrectionFactors(TH1D* histo);
49   void        SetRCEtaCorrectionFactors(TH1D* histo);
50   void        SetTREtaCorrectionFactors(TH1D* histo);
51   Int_t       GetInstanceCounter() {return fTaskInstanceCounter;}
52
53  private:
54   enum EtaCorrectionMode {kNoEtaCorrection, kKTEtaCorrection, kRCEtaCorrection, kTREtaCorrection};
55
56   // ######### MAIN CALCULATION FUNCTIONS
57   void        GetSignalJets();
58   Int_t       GetLeadingJets(TClonesArray* jetArray, Int_t* jetIDArray, Bool_t isSignalJets);
59   Double_t    GetBackgroundEtaCorrFactor(EtaCorrectionMode mode, Double_t eta);
60   Double_t    GetBackgroundEtaBinCorrFactor(EtaCorrectionMode mode, Int_t eta);
61   Double_t    GetCorrectedJetPt(AliEmcalJet* jet, Double_t background, EtaCorrectionMode mode);
62   void        GetDeltaPt(Double_t& deltaPt, Double_t rho, EtaCorrectionMode mode, Bool_t leadingJetExclusion = kTRUE);
63
64   void        GetKTBackgroundDensity(Int_t numberExcludeLeadingJets, Double_t& rhoMedian, Double_t& areaMean, Double_t etaMin = 0, Double_t etaMax = 0);
65   Int_t       GetRCBackgroundDensity(Int_t numberExcludeLeadingJets, Double_t& rhoMean, Double_t& rhoMedian, Double_t etaMin = 0, Double_t etaMax = 0, Int_t numberRandCones = 0);
66   void        GetTRBackgroundDensity(Int_t numberExcludeLeadingJets, Double_t& rhoMean, Double_t& area, Double_t etaMin = 0, Double_t etaMax = 0);
67   void        GetTRBackgroundDensity(Int_t numberExcludeLeadingJets, Double_t& rhoMean, Double_t& area, AliEmcalJet* excludeJet1, AliEmcalJet* excludeJet2, Bool_t doSearchPerpendicular);
68   Double_t    GetConePt(Double_t eta, Double_t phi, Double_t radius);
69   Double_t    GetPtHard();
70   Int_t       GetPtHardBin();
71   void        GetPerpendicularCone(Double_t vecPhi, Double_t vecTheta, Double_t& conePt);
72
73   // ######### CHECK FUNCTIONS
74   Bool_t      IsTrackInAcceptance(AliVParticle* track);
75   Bool_t      IsTrackInCone(AliVTrack* track, Double_t eta, Double_t phi, Double_t radius);
76
77   Bool_t      IsBackgroundJetInAcceptance(AliEmcalJet* jet);
78   Bool_t      IsSignalJetInAcceptance(AliEmcalJet* jet);
79   Bool_t      IsDijet(AliEmcalJet* jet1, AliEmcalJet* jet2);
80   
81   // ######### HELPER FUNCTIONS
82   Double_t    EtaToTheta(Double_t arg);
83   Double_t    ThetaToEta(Double_t arg);
84   Double_t    GetDeltaPhi(Double_t phi1, Double_t phi2);
85   Double_t    MCGetOverlapCircleRectancle(Double_t cPosX, Double_t cPosY, Double_t cRadius, Double_t rPosXmin, Double_t rPosXmax, Double_t rPosYmin, Double_t rPosYmax);
86
87   // ######### HISTOGRAM FUNCTIONS
88   void        FillHistogram(const char * key, Double_t x);
89   void        FillHistogram(const char * key, Double_t x, Double_t y);
90   void        FillHistogram(const char * key, Double_t x, Double_t y, Double_t add);
91   const char* GetHistoName(const char* name)
92   {
93     if (fIsMC)    
94       return Form("H%d_%s_MC", fTaskInstanceCounter, name);
95     return Form("H%d_%s", fTaskInstanceCounter, name);
96   }
97   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");
98   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");
99
100   // ######### STANDARD FUNCTIONS
101   Bool_t    Notify();
102   void      Calculate(AliVEvent* event);
103   void      ExecOnce();
104   void      Init ();
105
106   TList*              fOutputList;            //! Output list
107   // ########## USAGE TRIGGERS 
108   Bool_t              fAnalyzeJets;           // trigger if jets should be processed
109   Bool_t              fAnalyzeBackground;     // trigger if background should be processed
110   Bool_t              fAnalyzePythia;         // trigger if pythia properties should be processed
111   Bool_t              fHasTracks;             // trigger if tracks are actually valid
112   Bool_t              fHasJets;               // trigger if jets are actually valid
113   Bool_t              fHasBackgroundJets;     // trigger if background is actually valid
114   Bool_t              fIsMC;                  // trigger if data is MC (for naming reasons)
115
116   // ########## SOURCE INFORMATION
117   TClonesArray*       fJetArray;              //! object containing the jets
118   TClonesArray*       fTrackArray;            //! object containing the tracks
119   TClonesArray*       fBackgroundJetArray;    //! object containing background jets
120   TString*            fJetArrayName;          // name of object containing the jets
121   TString*            fTrackArrayName;        // name of object containing the tracks
122   TString*            fBackgroundJetArrayName;// name of object containing event wise bckgrds
123   Int_t               fNumPtHardBins;         // Number of used pt hard bins
124
125   // ########## JET/DIJET/RC PROPERTIES
126   Double_t            fRandConeRadius;        // Radius for the random cones
127   Double_t            fSignalJetRadius;       // Radius for the signal jets
128   Double_t            fBackgroundJetRadius;   // Radius for the KT background jets
129   Double_t            fTRBackgroundConeRadius;// Radius for the jets excluded in track background
130   Int_t               fNumberRandCones;       // Number of random cones to be put into one event
131   Int_t               fNumberExcludedJets;    // Number of jets to be excluded from backgrounds
132   Double_t            fDijetMaxAngleDeviation;// Max angle deviation from pi between two jets to be accept. as dijet
133   TH1D*               fJetKTEtaCorrection;    // Correction factors in bins of rho and eta to correct the eta dependence of the jet background
134   TH1D*               fJetRCEtaCorrection;    // Correction factors in bins of rho and eta to correct the eta dependence of the jet background
135   TH1D*               fJetTREtaCorrection;    // Correction factors in bins of rho and eta to correct the eta dependence of the jet background
136
137   // ########## CUTS 
138   Double_t            fSignalJetEtaWindow;    // +- window in eta for signal jets
139   Double_t            fBackgroundJetEtaWindow;// +- window in eta for background jets
140   Double_t            fTrackEtaWindow;        // +- window in eta for tracks
141   Double_t            fVertexWindow;          // +- window in Z for the vertex
142   Double_t            fVertexMaxR;            // +- window in R for the vertex (distance in xy-plane)
143   Double_t            fMinTrackPt;            // Min track pt to be accepted
144   Double_t            fMinJetPt;              // Min jet pt to be accepted
145   Double_t            fMinJetArea;            // Min jet area to be accepted
146   Double_t            fMinBackgroundJetPt;    // Min jet pt to be accepted as background jet
147   Double_t            fMinDijetLeadingPt;     // Min jet pt to be accepted as constituent of dijet 
148   TString             fCentralityType;        // Used centrality estimate (V0A, V0C, V0M, ...)
149
150   // ########## EVENT PROPERTIES
151   AliEmcalJet*        fFirstLeadingJet;       //! leading jet in event
152   AliEmcalJet*        fSecondLeadingJet;      //! next to leading jet in event
153   Int_t               fNumberSignalJets;      //! Number of signal jets in event
154   AliEmcalJet*        fSignalJets[1024];      //! memory for signal jet pointers
155   Double_t            fCrossSection;          //! value is filled, if pythia header is accessible
156   Double_t            fTrials;                //! value is filled, if pythia header is accessible
157
158   // ########## GENERAL VARS
159   TRandom3*           fRandom;                //! A random number
160   AliAnalysisUtils*   fHelperClass;           //! Vertex selection helper
161   Bool_t              fInitialized;           //! trigger if tracks/jets are loaded
162   Int_t               fTaskInstanceCounter;   // for naming reasons
163   TList*              fHistList;              // Histogram list
164   Int_t               fHistCount;             // Histogram count
165
166   AliAnalysisTaskChargedJetsPA(const AliAnalysisTaskChargedJetsPA&);
167   AliAnalysisTaskChargedJetsPA& operator=(const AliAnalysisTaskChargedJetsPA&);
168
169   ClassDef(AliAnalysisTaskChargedJetsPA, 2); // Charged jet analysis for pA
170
171 };
172 #endif