]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h
Code clean-up in dN/deta calculation.
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliAnaPartCorrBaseClass.h
CommitLineData
1c5acb87 1#ifndef ALIANAPARTCORRBASECLASS_H
2#define ALIANAPARTCORRBASECLASS_H
3/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
5/* $Id: $ */
6
c8fe2783 7 //_________________________________________________________________________
8 // Base class for analysis algorithms
9 //-- Author: Gustavo Conesa (INFN-LNF)
5025c139 10//-Add the possibality for event selection analysis based on vertex and multiplicity bins (Yaxian Mao, 10/10/2010)
fbeaf916 11#include <cstdlib>
12
c8fe2783 13 //ROOT
1c5acb87 14class TClonesArray ;
591cc579 15class TObjArray ;
a3aebfff 16#include <TList.h>
1c5acb87 17#include <TObject.h>
0c1383b5 18class TObjString;
1c5acb87 19
c8fe2783 20 //Analysis
f37fa8d2 21class AliVCaloCells;
e6e63685 22#include "AliCaloTrackReader.h"
decca433 23#include "AliCaloPID.h"
24#include "AliFiducialCut.h"
25#include "AliIsolationCut.h"
26#include "AliMCAnalysisUtils.h"
27#include "AliNeutralMesonSelection.h"
8cfc6870 28#include "AliCalorimeterUtils.h"
1c5acb87 29class AliStack ;
30class AliHeader ;
31class AliGenEventHeader ;
a3aebfff 32#include "AliAODPWG4ParticleCorrelation.h"
765d44e7 33class AliEMCALGeoUtils;
34class AliPHOSGeoUtils;
c8fe2783 35#include "AliMixedEvent.h"
b6dd6ad2 36#include "AliCentrality.h"
1c5acb87 37
38class AliAnaPartCorrBaseClass : public TObject {
39
c8fe2783 40public:
477d6cee 41 AliAnaPartCorrBaseClass() ; // default ctor
78219bac 42 virtual ~AliAnaPartCorrBaseClass() ; //virtual dtor
43
c8fe2783 44private:
477d6cee 45 AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & g) ; // cpy ctor
46 AliAnaPartCorrBaseClass & operator = (const AliAnaPartCorrBaseClass & g) ;//cpy assignment
477d6cee 47
c8fe2783 48public:
f37fa8d2 49
477d6cee 50
be518ab0 51 //General methods, to be declared in deriving classes if needed
a3aebfff 52
477d6cee 53 virtual void Init() {;}
54 virtual void InitParameters() ;
55
56 virtual void Print(const Option_t * ) const ;
57
58 virtual void MakeAnalysisFillAOD() {;}
59
60 virtual void MakeAnalysisFillHistograms() {;}
f37fa8d2 61
be518ab0 62 virtual void Terminate(TList * /*outputList*/) {;}
63
64
65 //Histograms, cuts
a0348d55 66 virtual TList * GetCreateOutputObjects() { return (new TList) ; }
0c1383b5 67
a0348d55 68 virtual void AddToHistogramsName(TString add) { fAddToHistogramsName = add ; }
69 virtual TString GetAddedHistogramsStringToName()const { return fAddToHistogramsName ; }
477d6cee 70
a0348d55 71 virtual TObjString * GetAnalysisCuts() { return 0x0 ; }
be518ab0 72 TString GetBaseParametersList();
73
74 //Getters, setters
a0348d55 75 virtual Int_t GetDebug() const { return fDebug ; }
76 virtual void SetDebug(Int_t d) { fDebug = d ; }
be518ab0 77
477d6cee 78 virtual Int_t GetEventNumber() const ;
be518ab0 79
80 virtual AliCaloTrackReader * GetReader() const { return fReader ; }
42dc8e7d 81 virtual void SetReader(AliCaloTrackReader * const reader) { fReader = reader ; }
798a9b04 82
be518ab0 83 //Calorimeter specific access methods
84 AliCalorimeterUtils * GetCaloUtils() const { return fCaloUtils ; }
85 void SetCaloUtils(AliCalorimeterUtils * caloutils) { fCaloUtils = caloutils ; }
86
87 AliEMCALGeoUtils * GetEMCALGeometry() const { return fCaloUtils->GetEMCALGeometry() ; }
88 AliPHOSGeoUtils * GetPHOSGeometry() const { return fCaloUtils->GetPHOSGeometry() ; }
c8fe2783 89
e6e63685 90 Int_t GetModuleNumberCellIndexes(const Int_t absId, const TString calo, Int_t & icol, Int_t & irow, Int_t &iRCU) const {
765d44e7 91 return fCaloUtils->GetModuleNumberCellIndexes(absId, calo, icol, irow,iRCU);}
b05a14a3 92 Int_t GetModuleNumber(AliAODPWG4Particle * part) const {
765d44e7 93 return fCaloUtils->GetModuleNumber(part, fReader->GetInputEvent());}
be518ab0 94 Int_t GetModuleNumber(AliVCluster * cluster) const {
765d44e7 95 return fCaloUtils->GetModuleNumber(cluster);}
f37fa8d2 96
3ff76907 97 //Centrality
32fd29fe 98 AliCentrality* GetCentrality() const { return fReader->GetCentrality() ;}
99 Int_t GetEventCentrality() const { return fReader->GetEventCentrality() ;}
a5cc4f03 100
be518ab0 101 //AOD branch
102 virtual void AddAODParticle(AliAODPWG4Particle part) ;
103 virtual void ConnectInputOutputAODBranches();
104
477d6cee 105 virtual TClonesArray * GetCreateOutputAODBranch() ;
be518ab0 106 virtual TString GetInputAODName() const { return fInputAODName ; }
107 virtual void SetInputAODName(TString name) { fInputAODName = name ; }
108 virtual TString GetOutputAODName() const { return fOutputAODName ; }
109 virtual void SetOutputAODName(TString name) { fNewAOD = kTRUE ; fOutputAODName = name; }
110 virtual Bool_t NewOutputAOD() const { return fNewAOD ; }
111 virtual TString GetOutputAODClassName() const { return fOutputAODClassName ; }
112 virtual void SetOutputAODClassName(TString name) { fOutputAODClassName = name ; }
113
114 virtual TString GetAODObjArrayName() const { return fAODObjArrayName ; }
115 virtual void SetAODObjArrayName(TString name) { fAODObjArrayName = name ; }
c8fe2783 116
be518ab0 117 virtual TClonesArray* GetInputAODBranch() const { return fInputAODBranch ; }
118 virtual TClonesArray* GetOutputAODBranch() const { if(fNewAOD) return fOutputAODBranch; else return fInputAODBranch ; }
42dc8e7d 119 virtual TClonesArray* GetAODBranch(TString aodBranchName) const ;
120
be518ab0 121 //Track cluster arrays access methods
122 virtual TClonesArray* GetAODCaloClusters() const ;
123 virtual TClonesArray* GetAODTracks() const ;
124 virtual AliVCaloCells* GetPHOSCells() const { return fReader->GetPHOSCells() ;}
125 virtual AliVCaloCells* GetEMCALCells() const { return fReader->GetEMCALCells() ;}
126 virtual TObjArray* GetCTSTracks() const ;
127 virtual TObjArray* GetEMCALClusters() const ;
128 virtual TObjArray* GetPHOSClusters() const ;
129
130 //MC event acces methods
131 virtual AliStack * GetMCStack() const ;
132 virtual AliHeader* GetMCHeader() const ;
133 virtual AliGenEventHeader * GetMCGenEventHeader() const ;
477d6cee 134
f37fa8d2 135 //Analysis helpers classes pointers setters and getters
be518ab0 136 virtual AliCaloPID * GetCaloPID() { if(!fCaloPID) fCaloPID = new AliCaloPID(); return fCaloPID ; }
137 virtual AliFiducialCut * GetFiducialCut() { if(!fFidCut) fFidCut = new AliFiducialCut(); return fFidCut ; }
138 virtual AliIsolationCut * GetIsolationCut() { if(!fIC) fIC = new AliIsolationCut(); return fIC ; }
139 virtual AliMCAnalysisUtils * GetMCAnalysisUtils() { if(!fMCUtils) fMCUtils = new AliMCAnalysisUtils(); return fMCUtils ; }
140 virtual AliNeutralMesonSelection * GetNeutralMesonSelection() { if(!fNMS) fNMS = new AliNeutralMesonSelection(); return fNMS ; }
141
142 virtual void SetCaloPID(AliCaloPID * const pid) { fCaloPID = pid ; }
143 virtual void SetFiducialCut(AliFiducialCut * const fc) { fFidCut = fc ; }
144 virtual void SetIsolationCut(AliIsolationCut * const ic) { fIC = ic ; }
145 virtual void SetMCAnalysisUtils(AliMCAnalysisUtils * const mcutils) { fMCUtils = mcutils ; }
146 virtual void SetNeutralMesonSelection(AliNeutralMesonSelection * const nms) { fNMS = nms ; }
765d44e7 147
be518ab0 148 virtual Bool_t IsDataMC() const { return fDataMC ; }
149 virtual void SwitchOnDataMC() { fDataMC = kTRUE ; if(!fMCUtils)fMCUtils = new AliMCAnalysisUtils();}
150 virtual void SwitchOffDataMC() { fDataMC = kFALSE ; }
151
152 virtual Bool_t IsFiducialCutOn() const { return fCheckFidCut ; }
153 virtual void SwitchOnFiducialCut() { fCheckFidCut = kTRUE; if(!fFidCut)fFidCut = new AliFiducialCut();}
154 virtual void SwitchOffFiducialCut() { fCheckFidCut = kFALSE ; }
155
156 virtual Bool_t IsCaloPIDOn() const { return fCheckCaloPID ; }
157 virtual void SwitchOnCaloPID() { fCheckCaloPID = kTRUE; if(!fCaloPID)fCaloPID = new AliCaloPID();}
158 virtual void SwitchOffCaloPID() { fCheckCaloPID = kFALSE ; }
159
160 virtual Bool_t IsCaloPIDRecalculationOn() const { return fRecalculateCaloPID ; }
161 virtual void SwitchOnCaloPIDRecalculation() { fRecalculateCaloPID = kTRUE ; }
162 virtual void SwitchOffCaloPIDRecalculation() { fRecalculateCaloPID = kFALSE ; }
163
164 virtual Float_t GetMaxPt() const { return fMaxPt ; }
165 virtual Float_t GetMinPt() const { return fMinPt ; }
166 virtual void SetMaxPt(Float_t pt) { fMaxPt = pt ; }
167 virtual void SetMinPt(Float_t pt) { fMinPt = pt ; }
168 virtual void SetPtCutRange(Double_t ptmin, Double_t ptmax)
477d6cee 169 { fMaxPt=ptmax; fMinPt=ptmin;}
be518ab0 170
5025c139 171 //Setters for parameters of event buffers
be518ab0 172 virtual void SetMultiBin(Int_t n=1) { fMultiBin = n ;} //number of bins in Multiplicity
173 virtual void SetNZvertBin(Int_t n=1) { fNZvertBin = n ;} //number of bins for vertex position
174 virtual void SetNRPBin(Int_t n=1) { fNrpBin = n ;} //number of bins in reaction plain
5025c139 175 virtual void SetMultiplicity(Int_t multimin, Int_t multimax) {fMinMulti = multimin ; fMaxMulti = multimax ; }
be518ab0 176 virtual void SwitchOnEventSelection() { fUseSelectEvent = kTRUE ; }
177 virtual void SwitchOffEventSelection() { fUseSelectEvent = kFALSE ; }
5025c139 178 //Getters for event selection
be518ab0 179 virtual Int_t GetMultiBin() const { return fMultiBin ; } //number of bins in Multiplicity
180 virtual Int_t GetNZvertBin() const { return fNZvertBin ; } //number of bins in vertex
181 virtual Int_t GetNRPBin() const { return fNrpBin ; } //number of bins in reaction plain
5025c139 182 //Getters for event selection
be518ab0 183 virtual Float_t GetZvertexCut() const { return GetReader()->GetZvertexCut();} //cut on vertex position
184 virtual Int_t GetMaxMulti() const { return fMaxMulti ; }
185 virtual Int_t GetMinMulti() const { return fMinMulti ; }
5025c139 186
187 // Do correlation analysis with different event buffers
be518ab0 188 virtual Bool_t DoEventSelect() const { return fUseSelectEvent ; }
189
190 //Mixed event
191 virtual AliMixedEvent * GetMixedEvent() { return GetReader()->GetMixedEvent() ; }
192 virtual Int_t GetNMixedEvent() const { return GetReader()->GetNMixedEvent() ; }
193
194 //Vertex methods
195 virtual void GetVertex(Double_t vertex[3]) const { GetReader()->GetVertex(vertex) ; }
196 virtual void GetVertex(Double_t vertex[3],const Int_t evtIndex) const { GetReader()->GetVertex(vertex,evtIndex) ; }
197 virtual Double_t* GetVertex(const Int_t evtIndex) const { return GetReader()->GetVertex(evtIndex) ; }
198
199 virtual Bool_t IsTrackMatched(const AliVCluster * cluster) const { return fCaloPID->IsTrackMatched(cluster, fCaloUtils) ; }
200
201 //MULTIPLICITY
202 Int_t GetTrackMultiplicity() const { return fReader->GetTrackMultiplicity() ; }
203 //VZERO
204 Int_t GetV0Signal(Int_t i ) const { return fReader->GetV0Signal(i) ; }
205 Int_t GetV0Multiplicity(Int_t i ) const { return fReader->GetV0Multiplicity(i) ; }
206
207
477d6cee 208
f37fa8d2 209 //Histogrammes setters and getters
210 //Pt, Energy
477d6cee 211 virtual void SetHistoPtRangeAndNBins(Float_t min, Float_t max, Int_t n) {
5a2dbc3c 212 fHistoPtBins = n ;
477d6cee 213 fHistoPtMax = max ;
214 fHistoPtMin = min ;
215 }
216
be518ab0 217 virtual Int_t GetHistoPtBins() const { return fHistoPtBins ; }
218 virtual Float_t GetHistoPtMin() const { return fHistoPtMin ; }
219 virtual Float_t GetHistoPtMax() const { return fHistoPtMax ; }
477d6cee 220
c8fe2783 221 //Azimuthal angle
477d6cee 222 virtual void SetHistoPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) {
5a2dbc3c 223 fHistoPhiBins = n ;
224 fHistoPhiMax = max ;
225 fHistoPhiMin = min ;
477d6cee 226 }
227
765d44e7 228 virtual Int_t GetHistoPhiBins() const { return fHistoPhiBins; }
229 virtual Float_t GetHistoPhiMin() const { return fHistoPhiMin ; }
230 virtual Float_t GetHistoPhiMax() const { return fHistoPhiMax ; }
477d6cee 231
f37fa8d2 232 //Pseudorapidity-rapidity
477d6cee 233 virtual void SetHistoEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) {
5a2dbc3c 234 fHistoEtaBins = n ;
235 fHistoEtaMax = max ;
236 fHistoEtaMin = min ;
477d6cee 237 }
238
765d44e7 239 virtual Int_t GetHistoEtaBins() const { return fHistoEtaBins; }
240 virtual Float_t GetHistoEtaMin() const { return fHistoEtaMin ; }
241 virtual Float_t GetHistoEtaMax() const { return fHistoEtaMax ; }
5a2dbc3c 242
f37fa8d2 243 //Mass
5a2dbc3c 244 virtual void SetHistoMassRangeAndNBins(Float_t min, Float_t max, Int_t n) {
c8fe2783 245 fHistoMassBins = n ;
246 fHistoMassMax = max ;
247 fHistoMassMin = min ;
5a2dbc3c 248 }
249
765d44e7 250 virtual Int_t GetHistoMassBins() const { return fHistoMassBins ; }
be518ab0 251 virtual Float_t GetHistoMassMin() const { return fHistoMassMin ; }
252 virtual Float_t GetHistoMassMax() const { return fHistoMassMax ; }
5a2dbc3c 253
f37fa8d2 254 //Asymetry
5a2dbc3c 255 virtual void SetHistoAsymmetryRangeAndNBins(Float_t min, Float_t max, Int_t n) {
c8fe2783 256 fHistoAsymBins = n ;
257 fHistoAsymMax = max ;
258 fHistoAsymMin = min ;
5a2dbc3c 259 }
260
765d44e7 261 virtual Int_t GetHistoAsymmetryBins() const { return fHistoAsymBins ; }
be518ab0 262 virtual Float_t GetHistoAsymmetryMin() const { return fHistoAsymMin ; }
263 virtual Float_t GetHistoAsymmetryMax() const { return fHistoAsymMax ; }
c8fe2783 264
798a9b04 265
266 //VZero
267 virtual void SetHistoV0SignalRangeAndNBins(Int_t min, Int_t max, Int_t n) {
268 fHistoV0SBins = n ;
269 fHistoV0SMax = max ;
270 fHistoV0SMin = min ;
271 }
272
c75defdf 273 virtual Int_t GetHistoV0SignalBins() const { return fHistoV0SBins ; }
be518ab0 274 virtual Int_t GetHistoV0SignalMin() const { return fHistoV0SMin ; }
275 virtual Int_t GetHistoV0SignalMax() const { return fHistoV0SMax ; }
798a9b04 276
277 virtual void SetHistoV0MultiplicityRangeAndNBins(Int_t min, Int_t max, Int_t n) {
278 fHistoV0MBins = n ;
279 fHistoV0MMax = max ;
280 fHistoV0MMin = min ;
281 }
282
c75defdf 283 virtual Int_t GetHistoV0MultiplicityBins() const { return fHistoV0MBins ; }
be518ab0 284 virtual Int_t GetHistoV0MultiplicityMin() const { return fHistoV0MMin ; }
285 virtual Int_t GetHistoV0MultiplicityMax() const { return fHistoV0MMax ; }
798a9b04 286
287 virtual void SetHistoTrackMultiplicityRangeAndNBins(Int_t min, Int_t max, Int_t n) {
288 fHistoTrMBins = n ;
289 fHistoTrMMax = max ;
290 fHistoTrMMin = min ;
291 }
292
c75defdf 293 virtual Int_t GetHistoTrackMultiplicityBins() const { return fHistoTrMBins ; }
be518ab0 294 virtual Int_t GetHistoTrackMultiplicityMin() const { return fHistoTrMMin ; }
295 virtual Int_t GetHistoTrackMultiplicityMax() const { return fHistoTrMMax ; }
798a9b04 296
be518ab0 297 void SwitchOnPlotsMaking() { fMakePlots = kTRUE ; }
298 void SwitchOffPlotsMaking() { fMakePlots = kFALSE ; }
299 Bool_t MakePlotsOn() const { return fMakePlots ; }
f8006433 300
c8fe2783 301private:
477d6cee 302
798a9b04 303 Bool_t fDataMC ; // Flag to access MC data when using ESD or AOD
304 Int_t fDebug ; // Debug level
305 Bool_t fCheckFidCut ; // Do analysis for clusters in defined region
306 Bool_t fCheckCaloPID ; // Do analysis for calorimeters
307 Bool_t fRecalculateCaloPID ; // Recalculate PID or use PID weights in calorimeters
308 Float_t fMinPt ; // Maximum pt of (trigger) particles in the analysis
309 Float_t fMaxPt ; // Minimum pt of (trigger) particles in the analysis
310 Int_t fMultiBin ; // Number of bins in event container for multiplicity
311 Int_t fNZvertBin ; // Number of bins in event container for vertex position
312 Int_t fNrpBin ; // Number of bins in event container for reaction plain
798a9b04 313 Int_t fMaxMulti ; // Maximum multiplicity of particles in the analysis
314 Int_t fMinMulti ; // Maximum multiplicity of particles in the analysis
315 Bool_t fUseSelectEvent ; // Select events based on multiplicity and vertex cuts
316 Bool_t fMakePlots ; // Print plots
d7c10d78 317
591cc579 318
39ffdc47 319 AliCaloTrackReader * fReader; // Acces to ESD/AOD/MC data
477d6cee 320
321 TClonesArray* fInputAODBranch ; //! Selected input particles branch
322 TString fInputAODName ; // Name of input AOD branch;
323 TClonesArray* fOutputAODBranch ; //! Selected output particles branch
324 Bool_t fNewAOD ; // Flag, new aod branch added to the analysis or not.
325 TString fOutputAODName ; // Name of output AOD branch;
326 TString fOutputAODClassName; // Type of aod objects to be stored in the TClonesArray (AliAODPWG4Particle, AliAODPWG4ParticleCorrelation ...)
3ff76907 327 TString fAODObjArrayName ; // Name of ref array kept in a TList in AliAODParticleCorrelation with clusters or track references.
328 TString fAddToHistogramsName;// Add this string to histograms name
329
f37fa8d2 330 //Analysis helper classes access pointers
a0348d55 331 AliCaloPID * fCaloPID; // PID calculation
332 AliFiducialCut * fFidCut; // Acceptance cuts
333 AliIsolationCut * fIC; // Isolation cut
334 AliMCAnalysisUtils * fMCUtils; // MonteCarlo Analysis utils
335 AliNeutralMesonSelection * fNMS; // Neutral Meson Selection
765d44e7 336 AliCalorimeterUtils * fCaloUtils ; // Pointer to CalorimeterUtils
f37fa8d2 337
338 //Histograms binning and range
5a2dbc3c 339 Int_t fHistoPtBins ; // Number of bins in pt axis
340 Float_t fHistoPtMax ; // Maximum value of pt histogram range
341 Float_t fHistoPtMin ; // Minimum value of pt histogram range
342 Int_t fHistoPhiBins ; // Number of bins in phi axis
343 Float_t fHistoPhiMax ; // Maximum value of phi histogram range
344 Float_t fHistoPhiMin ; // Minimum value of phi histogram range
345 Int_t fHistoEtaBins ; // Number of bins in eta axis
346 Float_t fHistoEtaMax ; // Maximum value of eta histogram range
347 Float_t fHistoEtaMin ; // Minimum value of eta histogram range
348 Int_t fHistoMassBins ; // Number of bins in mass axis
349 Float_t fHistoMassMax ; // Maximum value of mass histogram range
350 Float_t fHistoMassMin ; // Minimum value of mass histogram range
351 Int_t fHistoAsymBins ; // Number of bins in asymmetry axis
352 Float_t fHistoAsymMax ; // Maximum value of asymmetry histogram range
353 Float_t fHistoAsymMin ; // Minimum value of asymmetry histogram range
798a9b04 354 Int_t fHistoV0SBins ; // Number of bins in V0 signal axis
355 Int_t fHistoV0SMax ; // Maximum value of V0 signal histogram range
356 Int_t fHistoV0SMin ; // Minimum value of V0 signal histogram range
357 Int_t fHistoV0MBins ; // Number of bins in V0 multiplicity axis
358 Int_t fHistoV0MMax ; // Maximum value of V0 multiplicity histogram range
359 Int_t fHistoV0MMin ; // Minimum value of V0 multiplicity histogram range
360 Int_t fHistoTrMBins ; // Number of bins in V0 multiplicity axis
361 Int_t fHistoTrMMax ; // Maximum value of track multiplicity histogram range
362 Int_t fHistoTrMMin ; // Minimum value of track multiplicity histogram range
363
be518ab0 364 ClassDef(AliAnaPartCorrBaseClass,16)
c8fe2783 365} ;
1c5acb87 366
367
368#endif //ALIANAPARTCORRBASECLASS_H
369
370
371