]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/totEt/AliAnalysisEt.h
Bug fix: clone data member pointers in assignment operator
[u/mrichter/AliRoot.git] / PWGLF / totEt / AliAnalysisEt.h
1 #ifndef ALIANALYSISET_H
2 #define ALIANALYSISET_H
3 //_________________________________________________________________________
4 //  Utility Class for transverse energy studies
5 //  Base class for ESD & MC analysis
6 //  - reconstruction and MonteCarlo output
7 //
8 //*-- Authors: Oystein Djuvsland (Bergen), David Silvermyr (ORNL)
9 //_________________________________________________________________________
10
11 #include "AliAnalysisEtCommon.h"
12 #include "THnSparse.h"
13 #include "AliESDCaloCluster.h"
14 #include "AliAnalysisEtCuts.h"
15 #include "AliAnalysisEtTrackMatchCorrections.h"
16 #include <vector>
17 #include "Rtypes.h"
18 #include "AliAnalysisEtSelector.h"
19 #include "AliAnalysisEtSelectorEmcal.h"
20 #include "AliAnalysisEtSelectorPhos.h"
21
22 class AliAnalysisEtRecEffCorrection;
23 class AliAnalysisEtTrackMatchCorrections;
24 class AliAnalysisEtSelector;
25 class AliCentrality;
26 class TString;
27 class TTree;
28 class TH2F;
29 class TH1F;
30 class TH1I;
31 class AliVEvent;
32 class TList;
33 class TString;
34 class AliESDtrackCuts;
35 class AliAnalysisEtCuts;
36 class AliESDCaloCluster;
37 //class THnSparseD;
38 class AliPIDResponse;
39
40 class AliAnalysisEt : public AliAnalysisEtCommon
41 {
42 public:
43
44     AliAnalysisEt();
45     virtual ~AliAnalysisEt();
46
47 public:
48
49     /** Analyse the event! */
50
51     virtual Int_t AnalyseEvent(AliVEvent *event);
52
53     /** Fill the objects you want to output, classes which add new histograms should overload this. */
54     virtual void FillOutputList(TList* list);
55
56     /** Initialise the analysis, must be overloaded. */
57     virtual void Init();
58
59     /**
60     * Creates the histograms, must be overloaded if you want to add your own.
61     * Uses the fHistogramNameSuffix to create proper histogram names
62     */
63     virtual void CreateHistograms();
64     virtual void CreateTrees();
65     TH2F* CreateEtaEHisto2D(TString name, TString title, TString ztitle);
66     TH2F* CreateEtaPtHisto2D(TString name, TString title, TString ztitle);
67     TH2F* CreateEtaEtHisto2D(TString name, TString title, TString ztitle);
68     TH2F* CreateResEHisto2D(TString name, TString title, TString ztitle);
69     TH2F* CreateResPtHisto2D(TString name, TString title, TString ztitle);
70     THnSparseF* CreateClusterHistoSparse(TString name, TString title);
71     THnSparseF* CreateNeutralPartHistoSparse(TString name, TString title);
72     THnSparseF* CreateChargedPartHistoSparse(TString name, TString title);
73
74     /** Fills the histograms, must be overloaded if you want to add your own */
75     virtual void FillHistograms();
76
77     /** Reset event specific values (Et etc.) */
78     virtual void ResetEventValues();
79
80     /** Total Et in the event (without acceptance cuts) */
81     Double_t GetTotEt() const {
82         return fTotEt;
83     }
84
85     /** Total neutral Et in the event (without acceptance cuts) */
86     Double_t GetTotNeutralEt() const {
87         return fTotNeutralEt;
88     }
89
90     /** Total charged Et in the event (without acceptance cuts) */
91     Double_t GetTotChargedEt() const {
92         return fTotChargedEt;
93     }
94
95     void SetTPCOnlyTrackCuts(const AliESDtrackCuts *cuts) {
96         fEsdtrackCutsTPC = (AliESDtrackCuts *) cuts;
97     }
98
99     /** Set the centrality object */
100     void SetCentralityObject(AliCentrality *cent) {
101         fCentrality = cent;
102     }
103
104     /** Get min ET correction */
105     Double_t GetMinEtCorrection(Int_t clusterMultiplicity) {
106         return fTmCorrections->GetMinEtCorrection(clusterMultiplicity);
107     }
108     /** Get contribution from non-removed neutrons */
109     Double_t GetNeutronContribution(Int_t clusterMultiplicity) {
110         return fTmCorrections->GetNeutronCorrection(clusterMultiplicity);
111     }
112     /** Get contribution from non-removed hadrons */
113     Double_t GetHadronContribution(Int_t clusterMultiplicity) {
114         return fTmCorrections->GetHadronCorrection(clusterMultiplicity);
115     }
116     /** Get contribution from non-removed kaons */
117     Double_t GetKaonContribution(Int_t clusterMultiplicity) {
118         return fTmCorrections->GetKaonCorrection(clusterMultiplicity);
119     }//hadron
120     /** Get contribution from non-removed secondarys */
121     Double_t GetSecondaryContribution(Int_t clusterMultiplicity) {
122         return fTmCorrections->GetSecondaryCorrection(clusterMultiplicity);
123     }//hadron
124
125
126     /** Get contribution from non-removed charged particles */
127     Double_t GetChargedContribution(Int_t clusterMultiplicity) {
128         return fTmCorrections->ChargedContr(clusterMultiplicity);
129     }
130
131     /** Get contribution from non-removed neutral particles */
132     Double_t GetNeutralContribution(Int_t clusterMultiplicity) {
133         return fTmCorrections->NeutralContr(clusterMultiplicity);
134     }
135
136     /** Get contribution from removed gammas */
137     Double_t GetGammaContribution(Int_t clusterMultiplicity) {
138         return fTmCorrections->GammaContr(clusterMultiplicity);
139     }
140
141     void MakeSparseHistograms() {
142         fMakeSparse=kTRUE;
143     }
144     
145     AliAnalysisEtCuts * GetCuts() const { return fCuts; }
146     AliAnalysisEtSelector *GetSelector() const {return fSelector;}
147     
148
149     // Read in corrections
150     Int_t ReadCorrections(TString filename);  // Read in corrections
151     
152     void SetFsub(Float_t val){fsub=val;};//function for setting fsub for EMCal/PHOS hadronic corrections
153     void SetFsubForMeanHadE(Float_t val){fsubmeanhade=val;};//function for setting fsub for EMCal/PHOS hadronic corrections
154
155 protected:
156
157     //AliAnalysisEtCuts *fCuts; // keeper of basic cuts
158     
159     // Return corrected cluster E_T
160     Double_t CorrectForReconstructionEfficiency(const AliESDCaloCluster &cluster,Int_t cent = 0);
161     Double_t CorrectForReconstructionEfficiency(const AliESDCaloCluster &cluster, Float_t eReco,Int_t cent = 0);
162     
163     // Track matching (hadrdonic contamination) corrections
164     AliAnalysisEtTrackMatchCorrections *fTmCorrections;
165     
166     // Reconstruction efficiency corrections
167     AliAnalysisEtRecEffCorrection *fReCorrections;
168     
169     TTree *fEventSummaryTree; //! Contains event level information
170
171     TTree *fAcceptedTree; //! Tree for information about accepted particles
172     
173     TTree *fDepositTree; //! optional TTree for energy deposit measurements
174     
175     Double_t fTotEt;/** Total Et in the event (without acceptance cuts) */
176
177     Double_t fTotEtAcc;/** Total Et in the event (without acceptance cuts) */
178
179     Double_t fTotNeutralEt;/** Total neutral Et in the event */
180
181     Double_t fTotNeutralEtAcc;/** Total neutral Et in the event */
182
183     Double_t fTotChargedEt;/** Total charged Et in the event */
184
185     Double_t fTotChargedEtAcc;/** Total charged Et in the event */
186
187     Int_t fMultiplicity;/** Multiplicity of particles in the event */
188     Int_t fChargedMultiplicity;/** Multiplicity of charged particles in the event */
189     Int_t fNeutralMultiplicity; /** Multiplicity of neutral particles in the event */
190
191     Double_t fProtonEt; /** Et of identified protons */
192     Double_t fAntiProtonEt; /** Et of identified protons */
193
194     Double_t fNeutronEt; /** Et of neutrons (MC only for now) */
195     Double_t fAntiNeutronEt; /** Et of anti-neutrons (MC only for now) */
196     
197     Double_t fPi0Et; // Et of identified pi0
198     Double_t fPiPlusEt; // Et of identified pi+
199     Double_t fPiMinusEt; // Et of identified pi-
200     
201     Double_t fKPlusEt; // Et of identified K+ 
202     Double_t fKMinusEt; // Et of identified K- 
203     Double_t fK0sEt; // Et of identified K0 short
204     Double_t fK0lEt; // Et of identified K0 long
205     
206     Double_t fMuMinusEt; // Et of identified mu- 
207     Double_t fMuPlusEt; // Et of identified mu+ 
208
209     Double_t fEMinusEt; // Et of identified e-
210     Double_t fEPlusEt; // Et of identified e+
211     
212     Double_t fGammaEt; /** Et of identified electrons (MC only for now) */
213
214     Double_t fProtonRemovedEt; /** Et of identified protons */
215     Double_t fAntiProtonRemovedEt; /** Et of identified protons */
216
217     Double_t fNeutronRemovedEt; /** Et of neutrons (MC only for now) */
218     Double_t fAntiNeutronRemovedEt; /** Et of anti-neutrons (MC only for now) */
219     
220     Double_t fPi0RemovedEt; // Removed Et of identified pi0
221     Double_t fPiPlusRemovedEt; // Removed Et of identified pi+
222     Double_t fPiMinusRemovedEt; // Removed Et of identified pi-
223
224     Double_t fKPlusRemovedEt; // Removed Et of identified K+ 
225     Double_t fKMinusRemovedEt; // Removed Et of identified K- 
226     Double_t fK0sRemovedEt; // Removed Et of identified K0 short
227     Double_t fK0lRemovedEt; // Removed Et of identified K0 long
228     
229     Double_t fMuMinusRemovedEt; // Removed Et of identified mu- 
230     Double_t fMuPlusRemovedEt; // Removed Et of identified mu+ 
231     
232     Double_t fEMinusRemovedEt; // Removed Et of identified e-
233     Double_t fEPlusRemovedEt; // Removed Et of identified e+
234     
235     Double_t fGammaRemovedEt; /** Removed Et of identified electrons (MC only for now) */
236
237     Double_t fProtonMult; /** Mult of identified protons */
238     Double_t fAntiProtonMult; /** Mult of identified protons */
239
240     Double_t fNeutronMult; /** Mult of neutrons (MC only for now) */
241     Double_t fAntiNeutronMult; /** Mult of anti-neutrons (MC only for now) */
242     
243     Double_t fPi0Mult; // Mult of identified pi0
244     Double_t fPiPlusMult; // Mult of identified pi+
245     Double_t fPiMinusMult; // Mult of identified pi-
246     
247     Double_t fKPlusMult; // Mult of identified K+ 
248     Double_t fKMinusMult; // Mult of identified K- 
249     Double_t fK0sMult; // Mult of identified K0 short
250     Double_t fK0lMult; // Mult of identified K0 long
251     
252     Double_t fMuMinusMult; // Mult of identified mu- 
253     Double_t fMuPlusMult; // Mult of identified mu+ 
254
255     Double_t fEMinusMult; // Mult of identified e-
256     Double_t fEPlusMult; // Mult of identified e+
257     
258     Double_t fGammaMult; /** Mult of identified electrons (MC only for now) */
259
260     Double_t fProtonRemovedMult; /** Mult of identified protons */
261     Double_t fAntiProtonRemovedMult; /** Mult of identified protons */
262
263     Double_t fNeutronRemovedMult; /** Mult of neutrons (MC only for now) */
264     Double_t fAntiNeutronRemovedMult; /** Mult of anti-neutrons (MC only for now) */
265     
266     Double_t fPi0RemovedMult; // Removed Mult of identified pi0
267     Double_t fPiPlusRemovedMult; // Removed Mult of identified pi+
268     Double_t fPiMinusRemovedMult; // Removed Mult of identified pi-
269
270     Double_t fKPlusRemovedMult; // Removed Mult of identified K+ 
271     Double_t fKMinusRemovedMult; // Removed Mult of identified K- 
272     Double_t fK0sRemovedMult; // Removed Mult of identified K0 short
273     Double_t fK0lRemovedMult; // Removed Mult of identified K0 long
274     
275     Double_t fMuMinusRemovedMult; // Removed Mult of identified mu- 
276     Double_t fMuPlusRemovedMult; // Removed Mult of identified mu+ 
277     
278     Double_t fEMinusRemovedMult; // Removed Mult of identified e-
279     Double_t fEPlusRemovedMult; // Removed Mult of identified e+
280     
281     Double_t fGammaRemovedMult; /** Removed Mult of identified electrons (MC only for now) */
282
283     Float_t fEnergyDeposited; /** Energy deposited in calorimeter */
284     Float_t fMomentumTPC; /** Momentum measured in TPC */
285     Short_t fCharge; /** Charge of the particle */
286     Short_t fParticlePid; /** Particle PID */
287     Float_t fPidProb; /** Probability of PID */
288     Bool_t fTrackPassedCut; /** The track is accepted by ESDTrackCuts */
289
290     Int_t fCentClass; // centrality class
291
292     /** Detector radius */
293     Double_t fDetectorRadius; // Detector radius
294
295     /** Minimum energy to cut on single cell cluster */
296     Double_t fSingleCellEnergyCut;  // Minimum energy to cut on single cell cluster
297
298     Double_t fChargedEnergyRemoved; // Charged energy removed
299     Double_t fNeutralEnergyRemoved; // Neutral energy removed
300     Double_t fGammaEnergyAdded; // gamma energy added
301
302     // Declare the histograms
303
304     /** The EM Et spectrum measured */
305     TH1F *fHistEt; //!Et spectrum
306
307     /** Multiplicity of neutral particles in the events */
308     TH1F *fHistNeutralMult; //!Multiplicity
309
310     // Acceptance plots 
311     TH2F *fHistPhivsPtPos; //!phi vs pT plot for positive tracks
312     TH2F *fHistPhivsPtNeg; //!phi vs pT plot for negative tracks
313
314     /* Auxiliary Histogram variables */
315     static Float_t fgEtaAxis[17];//bins for eta axis of histograms
316     static Int_t fgnumOfEtaBins;//number of eta bins
317     static Float_t fgPtAxis[117];//bins for pt axis of histograms
318     static Int_t fgNumOfPtBins;//number of pt bins
319     static Float_t fgEAxis[79];//bins for pt axis of histograms
320     static Int_t fgNumOfEBins;//number of pt bins
321     static Float_t fgRAxis[48];//bins for R axis
322     static Int_t fgNumOfRBins;//number of R bins
323
324     /** Centrality object */
325     AliCentrality *fCentrality; //!Centrality object
326
327     Bool_t fMakeSparse;//Boolean for whether or not to make sparse histograms
328
329     TH1I *fCutFlow; //! Cut flow
330     
331     AliAnalysisEtSelector *fSelector; // Selector class
332
333     AliPIDResponse *fPIDResponse;//
334
335     Float_t fsub;
336     Float_t fsubmeanhade;
337     
338
339
340 private:
341    
342   
343     
344     //Declare private to avoid compilation warning
345     AliAnalysisEt & operator = (const AliAnalysisEt & g) ;//cpy assignment
346     AliAnalysisEt(const AliAnalysisEt & g) ; // cpy ctor
347
348     ClassDef(AliAnalysisEt, 3);
349 };
350
351 #endif // ALIANALYSISET_H