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 */
7 //_________________________________________________________________________
8 // Base class for analysis algorithms
9 //-- Author: Gustavo Conesa (INFN-LNF)
10 //-Add the possibality for event selection analysis based on vertex and multiplicity bins (Yaxian Mao, 10/10/2010)
22 #include "AliCaloTrackReader.h"
23 #include "AliCaloPID.h"
24 #include "AliFiducialCut.h"
25 #include "AliIsolationCut.h"
26 #include "AliMCAnalysisUtils.h"
27 #include "AliNeutralMesonSelection.h"
28 #include "AliCalorimeterUtils.h"
31 class AliGenEventHeader ;
32 #include "AliAODPWG4ParticleCorrelation.h"
33 class AliEMCALGeoUtils;
34 class AliPHOSGeoUtils;
35 #include "AliMixedEvent.h"
36 #include "AliCentrality.h"
38 class AliAnaPartCorrBaseClass : public TObject {
41 AliAnaPartCorrBaseClass() ; // default ctor
42 virtual ~AliAnaPartCorrBaseClass() ; //virtual dtor
45 AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & g) ; // cpy ctor
46 AliAnaPartCorrBaseClass & operator = (const AliAnaPartCorrBaseClass & g) ;//cpy assignment
50 virtual void AddAODParticle(AliAODPWG4Particle part) ;
52 virtual void ConnectInputOutputAODBranches();
54 virtual TList * GetCreateOutputObjects() { return (new TList) ;}
56 virtual void AddToHistogramsName(TString add) { fAddToHistogramsName = add; }
57 virtual TString GetAddedHistogramsStringToName() {return fAddToHistogramsName ;}
59 virtual void Init() {;}
60 virtual void InitParameters() ;
62 virtual void Print(const Option_t * ) const ;
64 virtual void MakeAnalysisFillAOD() {;}
66 virtual void MakeAnalysisFillHistograms() {;}
68 virtual TObjString * GetAnalysisCuts() {return 0x0;}
70 virtual Int_t GetDebug() const { return fDebug ; }
71 virtual void SetDebug(Int_t d) { fDebug = d ; }
73 virtual Int_t GetEventNumber() const ;
75 virtual AliCaloTrackReader * GetReader() const {return fReader ; }
76 virtual void SetReader(AliCaloTrackReader * const reader) { fReader = reader ; }
78 //Calorimeter helper class access methods
79 AliEMCALGeoUtils * GetEMCALGeometry() const { return fCaloUtils->GetEMCALGeometry(); }
80 AliPHOSGeoUtils * GetPHOSGeometry() const { return fCaloUtils->GetPHOSGeometry() ; }
82 Int_t GetModuleNumberCellIndexes(const Int_t absId, const TString calo, Int_t & icol, Int_t & irow, Int_t &iRCU) const {
83 return fCaloUtils->GetModuleNumberCellIndexes(absId, calo, icol, irow,iRCU);}
84 Int_t GetModuleNumber(AliAODPWG4Particle * part) const {
85 return fCaloUtils->GetModuleNumber(part, fReader->GetInputEvent());}
86 Int_t GetModuleNumber(AliVCluster * cluster) const {
87 return fCaloUtils->GetModuleNumber(cluster);}
90 AliCentrality* GetCentrality() const { return fReader->GetCentrality() ;}
91 Int_t GetEventCentrality() const { return fReader->GetEventCentrality() ;}
93 virtual void Terminate(TList * /*outputList*/) {;}
96 virtual TClonesArray * GetCreateOutputAODBranch() ;
97 virtual TString GetInputAODName() const {return fInputAODName ; }
98 virtual void SetInputAODName(TString name) { fInputAODName = name; }
99 virtual TString GetOutputAODName() const {return fOutputAODName ; }
100 virtual void SetOutputAODName(TString name) { fNewAOD = kTRUE ; fOutputAODName = name; }
101 virtual Bool_t NewOutputAOD() const {return fNewAOD;}
102 virtual TString GetOutputAODClassName() const {return fOutputAODClassName;}
103 virtual void SetOutputAODClassName(TString name) {fOutputAODClassName = name; }
104 virtual AliCalorimeterUtils * GetCaloUtils() const {return fCaloUtils ; }
105 void SetCaloUtils(AliCalorimeterUtils * caloutils) { fCaloUtils = caloutils ; }
107 virtual TString GetAODObjArrayName() const {return fAODObjArrayName;}
108 virtual void SetAODObjArrayName(TString name) {fAODObjArrayName = name; }
110 virtual TClonesArray* GetInputAODBranch() const {return fInputAODBranch ;}
111 virtual TClonesArray* GetOutputAODBranch() const {if(fNewAOD) return fOutputAODBranch; else return fInputAODBranch ;}
112 virtual TClonesArray* GetAODBranch(TString aodBranchName) const ;
114 virtual TClonesArray* GetAODCaloClusters() const ;
115 virtual TClonesArray* GetAODTracks() const ;
116 virtual AliVCaloCells* GetPHOSCells() const {return fReader->GetPHOSCells() ;}
117 virtual AliVCaloCells* GetEMCALCells() const {return fReader->GetEMCALCells() ;}
119 virtual TObjArray* GetAODCTS() const ;
120 virtual TObjArray* GetAODEMCAL() const ;
121 virtual TObjArray* GetAODPHOS() const ;
123 virtual TString GetBaseParametersList();
125 virtual AliStack * GetMCStack() const ;
126 virtual AliHeader* GetMCHeader() const ;
127 virtual AliGenEventHeader* GetMCGenEventHeader() const ;
129 //Analysis helpers classes pointers setters and getters
130 virtual AliCaloPID * GetCaloPID() {if(!fCaloPID) fCaloPID = new AliCaloPID(); return fCaloPID ;}
131 virtual void SetCaloPID(AliCaloPID * const pid) { fCaloPID = pid ;}
133 virtual AliFiducialCut * GetFiducialCut() {if(!fFidCut) fFidCut = new AliFiducialCut(); return fFidCut ;}
134 virtual void SetFiducialCut(AliFiducialCut * const fc) { fFidCut = fc ;}
136 virtual AliIsolationCut * GetIsolationCut() {if(!fIC) fIC = new AliIsolationCut(); return fIC ;}
137 virtual void SetIsolationCut(AliIsolationCut * const ic) { fIC = ic ;}
139 virtual AliMCAnalysisUtils * GetMCAnalysisUtils() {if(!fMCUtils) fMCUtils = new AliMCAnalysisUtils(); return fMCUtils ;}
140 virtual void SetMCAnalysisUtils(AliMCAnalysisUtils * const mcutils) { fMCUtils = mcutils ;}
142 virtual AliNeutralMesonSelection * GetNeutralMesonSelection() {if(!fNMS) fNMS = new AliNeutralMesonSelection(); return fNMS ;}
143 virtual void SetNeutralMesonSelection(AliNeutralMesonSelection * const nms) { fNMS = nms ;}
145 virtual Bool_t IsDataMC() {return fDataMC ; }
146 virtual void SwitchOnDataMC() {fDataMC = kTRUE ; if(!fMCUtils)fMCUtils = new AliMCAnalysisUtils();}
147 virtual void SwitchOffDataMC() {fDataMC = kFALSE ; }
149 virtual Bool_t IsFiducialCutOn() { return fCheckFidCut ; }
150 virtual void SwitchOnFiducialCut() { fCheckFidCut = kTRUE; if(!fFidCut)fFidCut = new AliFiducialCut();}
151 virtual void SwitchOffFiducialCut() { fCheckFidCut = kFALSE;}
153 virtual Bool_t IsCaloPIDOn() { return fCheckCaloPID ; }
154 virtual void SwitchOnCaloPID() { fCheckCaloPID = kTRUE; if(!fCaloPID)fCaloPID = new AliCaloPID();}
155 virtual void SwitchOffCaloPID() { fCheckCaloPID = kFALSE;}
157 virtual Bool_t IsCaloPIDRecalculationOn() { return fRecalculateCaloPID ; }
158 virtual void SwitchOnCaloPIDRecalculation() { fRecalculateCaloPID = kTRUE;}
159 virtual void SwitchOffCaloPIDRecalculation() { fRecalculateCaloPID = kFALSE;}
161 virtual Float_t GetMaxPt() const {return fMaxPt ; }
162 virtual Float_t GetMinPt() const {return fMinPt ; }
163 virtual void SetMaxPt(Float_t pt) {fMaxPt = pt ; }
164 virtual void SetMinPt(Float_t pt) {fMinPt = pt ; }
165 virtual void SetPtCutRange(Double_t ptmin, Double_t ptmax)
166 { fMaxPt=ptmax; fMinPt=ptmin;}
167 //Setters for parameters of event buffers
168 virtual void SetMultiBin(Int_t n=1) {fMultiBin=n ;} //number of bins in Multiplicity
169 virtual void SetNZvertBin(Int_t n=1) {fNZvertBin=n ;} //number of bins for vertex position
170 virtual void SetNRPBin(Int_t n=1) {fNrpBin=n ;} //number of bins in reaction plain
171 virtual void SetMultiplicity(Int_t multimin, Int_t multimax) {fMinMulti = multimin ; fMaxMulti = multimax ; }
172 virtual void SwitchOnEventSelection() {fUseSelectEvent = kTRUE ; }
173 virtual void SwitchOffEventSelection() {fUseSelectEvent = kFALSE ; }
174 //Getters for event selection
175 virtual Int_t GetMultiBin() const {return fMultiBin ;} //number of bins in Multiplicity
176 virtual Int_t GetNZvertBin() const {return fNZvertBin ;} //number of bins in vertex
177 virtual Int_t GetNRPBin() const {return fNrpBin ;} //number of bins in reaction plain
178 //Getters for event selection
179 virtual Float_t GetZvertexCut() const {return GetReader()->GetZvertexCut();} //cut on vertex position
180 virtual Int_t GetMaxMulti() const {return fMaxMulti ; }
181 virtual Int_t GetMinMulti() const {return fMinMulti ; }
183 // Do correlation analysis with different event buffers
184 virtual Bool_t DoEventSelect() const {return fUseSelectEvent ; }
186 //Histogrammes setters and getters
188 virtual void SetHistoPtRangeAndNBins(Float_t min, Float_t max, Int_t n) {
194 virtual Int_t GetHistoPtBins() const { return fHistoPtBins; }
195 virtual Float_t GetHistoPtMin() const { return fHistoPtMin ; }
196 virtual Float_t GetHistoPtMax() const { return fHistoPtMax ; }
199 virtual void SetHistoPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) {
205 virtual Int_t GetHistoPhiBins() const { return fHistoPhiBins; }
206 virtual Float_t GetHistoPhiMin() const { return fHistoPhiMin ; }
207 virtual Float_t GetHistoPhiMax() const { return fHistoPhiMax ; }
209 //Pseudorapidity-rapidity
210 virtual void SetHistoEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) {
216 virtual Int_t GetHistoEtaBins() const { return fHistoEtaBins; }
217 virtual Float_t GetHistoEtaMin() const { return fHistoEtaMin ; }
218 virtual Float_t GetHistoEtaMax() const { return fHistoEtaMax ; }
221 virtual void SetHistoMassRangeAndNBins(Float_t min, Float_t max, Int_t n) {
223 fHistoMassMax = max ;
224 fHistoMassMin = min ;
227 virtual Int_t GetHistoMassBins() const { return fHistoMassBins ; }
228 virtual Float_t GetHistoMassMin() const { return fHistoMassMin ; }
229 virtual Float_t GetHistoMassMax() const { return fHistoMassMax ; }
232 virtual void SetHistoAsymmetryRangeAndNBins(Float_t min, Float_t max, Int_t n) {
234 fHistoAsymMax = max ;
235 fHistoAsymMin = min ;
238 virtual Int_t GetHistoAsymmetryBins() const { return fHistoAsymBins ; }
239 virtual Float_t GetHistoAsymmetryMin() const { return fHistoAsymMin ; }
240 virtual Float_t GetHistoAsymmetryMax() const { return fHistoAsymMax ; }
244 virtual void SetHistoV0SignalRangeAndNBins(Int_t min, Int_t max, Int_t n) {
250 virtual Int_t GetHistoV0SignalBins() const { return fHistoV0SBins ; }
251 virtual Int_t GetHistoV0SignalMin() const { return fHistoV0SMin ; }
252 virtual Int_t GetHistoV0SignalMax() const { return fHistoV0SMax ; }
254 virtual void SetHistoV0MultiplicityRangeAndNBins(Int_t min, Int_t max, Int_t n) {
260 virtual Int_t GetHistoV0MultiplicityBins() const { return fHistoV0MBins ; }
261 virtual Int_t GetHistoV0MultiplicityMin() const { return fHistoV0MMin ; }
262 virtual Int_t GetHistoV0MultiplicityMax() const { return fHistoV0MMax ; }
264 virtual void SetHistoTrackMultiplicityRangeAndNBins(Int_t min, Int_t max, Int_t n) {
270 virtual Int_t GetHistoTrackMultiplicityBins() const { return fHistoTrMBins ; }
271 virtual Int_t GetHistoTrackMultiplicityMin() const { return fHistoTrMMin ; }
272 virtual Int_t GetHistoTrackMultiplicityMax() const { return fHistoTrMMax ; }
274 virtual AliMixedEvent * GetMixedEvent() { return GetReader()->GetMixedEvent() ; }
275 virtual Int_t GetNMixedEvent() const { return GetReader()->GetNMixedEvent() ; }
277 virtual void GetVertex(Double_t vertex[3]) const { GetReader()->GetVertex(vertex) ; }
278 virtual void GetVertex(Double_t vertex[3],const Int_t evtIndex) const { GetReader()->GetVertex(vertex,evtIndex) ; }
279 virtual Double_t* GetVertex(const Int_t evtIndex) const { return GetReader()->GetVertex(evtIndex) ; }
281 virtual Bool_t IsTrackMatched(const AliVCluster * cluster) const { return fCaloPID->IsTrackMatched(cluster, fCaloUtils); }
283 void SwitchOnPlotsMaking() {fMakePlots = kTRUE ;}
284 void SwitchOffPlotsMaking() {fMakePlots = kFALSE ;}
285 Bool_t MakePlotsOn() const {return fMakePlots;}
288 Int_t GetTrackMultiplicity() const {return fReader->GetTrackMultiplicity();}
290 Int_t GetV0Signal(Int_t i ) const {return fReader->GetV0Signal(i);}
291 Int_t GetV0Multiplicity(Int_t i ) const {return fReader->GetV0Multiplicity(i);}
295 Bool_t fDataMC ; // Flag to access MC data when using ESD or AOD
296 Int_t fDebug ; // Debug level
297 Bool_t fCheckFidCut ; // Do analysis for clusters in defined region
298 Bool_t fCheckCaloPID ; // Do analysis for calorimeters
299 Bool_t fRecalculateCaloPID ; // Recalculate PID or use PID weights in calorimeters
300 Float_t fMinPt ; // Maximum pt of (trigger) particles in the analysis
301 Float_t fMaxPt ; // Minimum pt of (trigger) particles in the analysis
302 Int_t fMultiBin ; // Number of bins in event container for multiplicity
303 Int_t fNZvertBin ; // Number of bins in event container for vertex position
304 Int_t fNrpBin ; // Number of bins in event container for reaction plain
305 Int_t fMaxMulti ; // Maximum multiplicity of particles in the analysis
306 Int_t fMinMulti ; // Maximum multiplicity of particles in the analysis
307 Bool_t fUseSelectEvent ; // Select events based on multiplicity and vertex cuts
308 Bool_t fMakePlots ; // Print plots
311 AliCaloTrackReader * fReader; // Acces to ESD/AOD/MC data
313 TClonesArray* fInputAODBranch ; //! Selected input particles branch
314 TString fInputAODName ; // Name of input AOD branch;
315 TClonesArray* fOutputAODBranch ; //! Selected output particles branch
316 Bool_t fNewAOD ; // Flag, new aod branch added to the analysis or not.
317 TString fOutputAODName ; // Name of output AOD branch;
318 TString fOutputAODClassName; // Type of aod objects to be stored in the TClonesArray (AliAODPWG4Particle, AliAODPWG4ParticleCorrelation ...)
319 TString fAODObjArrayName ; // Name of ref array kept in a TList in AliAODParticleCorrelation with clusters or track references.
320 TString fAddToHistogramsName;// Add this string to histograms name
322 //Analysis helper classes access pointers
323 AliCaloPID * fCaloPID; //! PID calculation
324 AliFiducialCut * fFidCut; //! Acceptance cuts
325 AliIsolationCut * fIC; //! Isolation cut
326 AliMCAnalysisUtils * fMCUtils; //! MonteCarlo Analysis utils
327 AliNeutralMesonSelection * fNMS; //! Neutral Meson Selection
328 AliCalorimeterUtils * fCaloUtils ; // Pointer to CalorimeterUtils
330 //Histograms binning and range
331 Int_t fHistoPtBins ; // Number of bins in pt axis
332 Float_t fHistoPtMax ; // Maximum value of pt histogram range
333 Float_t fHistoPtMin ; // Minimum value of pt histogram range
334 Int_t fHistoPhiBins ; // Number of bins in phi axis
335 Float_t fHistoPhiMax ; // Maximum value of phi histogram range
336 Float_t fHistoPhiMin ; // Minimum value of phi histogram range
337 Int_t fHistoEtaBins ; // Number of bins in eta axis
338 Float_t fHistoEtaMax ; // Maximum value of eta histogram range
339 Float_t fHistoEtaMin ; // Minimum value of eta histogram range
340 Int_t fHistoMassBins ; // Number of bins in mass axis
341 Float_t fHistoMassMax ; // Maximum value of mass histogram range
342 Float_t fHistoMassMin ; // Minimum value of mass histogram range
343 Int_t fHistoAsymBins ; // Number of bins in asymmetry axis
344 Float_t fHistoAsymMax ; // Maximum value of asymmetry histogram range
345 Float_t fHistoAsymMin ; // Minimum value of asymmetry histogram range
346 Int_t fHistoV0SBins ; // Number of bins in V0 signal axis
347 Int_t fHistoV0SMax ; // Maximum value of V0 signal histogram range
348 Int_t fHistoV0SMin ; // Minimum value of V0 signal histogram range
349 Int_t fHistoV0MBins ; // Number of bins in V0 multiplicity axis
350 Int_t fHistoV0MMax ; // Maximum value of V0 multiplicity histogram range
351 Int_t fHistoV0MMin ; // Minimum value of V0 multiplicity histogram range
352 Int_t fHistoTrMBins ; // Number of bins in V0 multiplicity axis
353 Int_t fHistoTrMMax ; // Maximum value of track multiplicity histogram range
354 Int_t fHistoTrMMin ; // Minimum value of track multiplicity histogram range
356 ClassDef(AliAnaPartCorrBaseClass,15)
360 #endif //ALIANAPARTCORRBASECLASS_H