1 #ifndef ALIANACALOTRACKCORRBASECLASS_H
2 #define ALIANACALOTRACKCORRBASECLASS_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 //_________________________________________________________________________
7 // Base class for CaloTrackCorr analysis algorithms
8 //-- Author: Gustavo Conesa (INFN-LNF, LPSC-Grenoble)
9 //-- Add the possibility for event selection analysis based on
10 // vertex and multiplicity bins (Yaxian Mao, 10/10/2010)
12 //_________________________________________________________________________
24 #include "AliCaloTrackReader.h"
25 #include "AliCaloPID.h"
26 #include "AliFiducialCut.h"
27 #include "AliIsolationCut.h"
28 #include "AliMCAnalysisUtils.h"
29 #include "AliNeutralMesonSelection.h"
30 #include "AliCalorimeterUtils.h"
31 #include "AliHistogramRanges.h"
32 #include "AliAODPWG4ParticleCorrelation.h"
33 #include "AliMixedEvent.h"
37 class AliGenEventHeader ;
38 class AliEMCALGeometry;
39 class AliPHOSGeoUtils;
42 #include "AliAnalysisManager.h"
46 class AliAODJetEventBackground;
48 class AliAnaCaloTrackCorrBaseClass : public TObject {
51 AliAnaCaloTrackCorrBaseClass() ; // default ctor
52 virtual ~AliAnaCaloTrackCorrBaseClass() ; // virtual dtor
54 //General methods, to be declared in deriving classes if needed
56 virtual TList * GetCreateOutputObjects() { return (new TList) ; }
58 virtual void Init() { ; }
59 virtual void InitDebug() ;
60 virtual void InitParameters() ;
62 virtual void FillEventMixPool() { ; }
64 virtual void MakeAnalysisFillAOD() { ; }
66 virtual void MakeAnalysisFillHistograms() { ; }
68 virtual void Print(const Option_t * ) const ;
70 virtual void Terminate(TList * /*outputList*/) { ; }
74 virtual void AddToHistogramsName(TString add) { fAddToHistogramsName = add ; }
75 virtual TString GetAddedHistogramsStringToName() const { return fAddToHistogramsName ; }
77 virtual TObjString * GetAnalysisCuts() { return 0x0 ; }
78 virtual TString GetBaseParametersList();
81 virtual Int_t GetDebug() const { return fDebug ; }
82 virtual void SetDebug(Int_t d) { fDebug = d ; }
84 virtual Int_t GetEventNumber() const ;
87 virtual Int_t GetTrackMultiplicity() const { return fReader->GetTrackMultiplicity() ; }
90 virtual AliCentrality* GetCentrality() const { return fReader->GetCentrality() ; }
91 virtual Int_t GetEventCentrality() const { if(fUseTrackMultBins)
92 return GetTrackMultiplicity();
93 else return fReader->GetEventCentrality(); }
96 virtual AliEventplane* GetEventPlane() const { return fReader->GetEventPlane() ; }
97 virtual Double_t GetEventPlaneAngle() const { return fReader->GetEventPlaneAngle() ; }
98 virtual TString GetEventPlaneMethod() const { return fReader->GetEventPlaneMethod() ; }
101 virtual void AddAODParticle(AliAODPWG4Particle part) ;
103 virtual void ConnectInputOutputAODBranches();
105 virtual TClonesArray * GetCreateOutputAODBranch() ;
107 virtual TString GetInputAODName() const { return fInputAODName ; }
108 virtual void SetInputAODName(TString name) { fInputAODName = name ; }
110 virtual TString GetOutputAODName() const { return fOutputAODName ; }
111 virtual void SetOutputAODName(TString name) { fNewAOD = kTRUE ; fOutputAODName = name; }
113 virtual Bool_t NewOutputAOD() const { return fNewAOD ; }
115 virtual TString GetOutputAODClassName() const { return fOutputAODClassName ; }
116 virtual void SetOutputAODClassName(TString name) { fOutputAODClassName = name ; }
118 virtual TString GetAODObjArrayName() const { return fAODObjArrayName ; }
119 virtual void SetAODObjArrayName(TString name) { fAODObjArrayName = name ; }
121 virtual TClonesArray * GetInputAODBranch() const { return fInputAODBranch ; }
122 virtual TClonesArray * GetOutputAODBranch() const { if(fNewAOD) return fOutputAODBranch; else return fInputAODBranch ; }
123 virtual TClonesArray * GetAODBranch(const TString & aodBranchName) const ;
125 //Track cluster arrays access methods
126 virtual TClonesArray* GetAODCaloClusters() const ; // Output AOD clusters, not used?
127 virtual TClonesArray* GetAODTracks() const ; // Output AOD tracks, not used?
128 virtual AliVCaloCells* GetPHOSCells() const { return fReader->GetPHOSCells() ; }
129 virtual AliVCaloCells* GetEMCALCells() const { return fReader->GetEMCALCells() ; }
130 virtual TObjArray* GetCTSTracks() const ;
131 virtual TObjArray* GetEMCALClusters() const ;
132 virtual TObjArray* GetPHOSClusters() const ;
136 virtual TClonesArray* GetNonStandardJets() const { return fReader->GetNonStandardJets() ;}
137 virtual AliAODJetEventBackground* GetBackgroundJets() const { return fReader->GetBackgroundJets() ;}
139 // Common analysis switchs
141 enum detector { kEMCAL = AliFiducialCut::kEMCAL, kPHOS = AliFiducialCut::kPHOS,
142 kCTS = AliFiducialCut::kCTS , kDCAL = AliFiducialCut::kDCAL,
143 kDCALPHOS = AliFiducialCut::kDCALPHOS } ;
145 virtual Int_t GetCalorimeter() const { return fCalorimeter ; }
146 virtual TString GetCalorimeterString() const { return fCalorimeterString ; }
147 virtual void SetCalorimeter(TString & calo);
148 virtual void SetCalorimeter(Int_t calo) ;
150 virtual Bool_t IsDataMC() const { return fDataMC ; }
151 virtual void SwitchOnDataMC() { fDataMC = kTRUE ;
152 if(!fMCUtils) fMCUtils = new AliMCAnalysisUtils() ; }
153 virtual void SwitchOffDataMC() { fDataMC = kFALSE ; }
155 virtual Bool_t IsFiducialCutOn() const { return fCheckFidCut ; }
156 virtual void SwitchOnFiducialCut() { fCheckFidCut = kTRUE ;
157 if(!fFidCut) fFidCut = new AliFiducialCut() ; }
158 virtual void SwitchOffFiducialCut() { fCheckFidCut = kFALSE ; }
160 virtual Bool_t IsRealCaloAcceptanceOn() const { return fCheckRealCaloAcc ; }
161 virtual void SwitchOnRealCaloAcceptance() { fCheckRealCaloAcc = kTRUE; }
162 virtual void SwitchOffRealCaloAcceptance() { fCheckRealCaloAcc = kFALSE ; }
164 virtual Bool_t IsCaloPIDOn() const { return fCheckCaloPID ; }
165 virtual void SwitchOnCaloPID() { fCheckCaloPID = kTRUE ;
166 if(!fCaloPID) fCaloPID = new AliCaloPID() ; }
167 virtual void SwitchOffCaloPID() { fCheckCaloPID = kFALSE ; }
169 virtual Bool_t MakePlotsOn() const { return fMakePlots ; }
170 virtual void SwitchOnPlotsMaking() { fMakePlots = kTRUE ; }
171 virtual void SwitchOffPlotsMaking() { fMakePlots = kFALSE ; }
173 virtual Bool_t IsPileUpAnalysisOn() const { return fFillPileUpHistograms ; }
174 virtual void SwitchOnFillPileUpHistograms() { fFillPileUpHistograms = kTRUE ; }
175 virtual void SwitchOffFillPileUpHistograms() { fFillPileUpHistograms = kFALSE; }
177 virtual Bool_t IsHighMultiplicityAnalysisOn() const { return fFillHighMultHistograms ; }
178 virtual void SwitchOnFillHighMultiplicityHistograms() { fFillHighMultHistograms = kTRUE ; }
179 virtual void SwitchOffFillHighMultiplicityHistograms(){ fFillHighMultHistograms = kFALSE ; }
181 // Cluster energy/momentum cut
183 virtual Float_t GetMaxPt() const { return fMaxPt ; }
184 virtual Float_t GetMinPt() const { return fMinPt ; }
185 virtual void SetMaxPt(Float_t pt) { fMaxPt = pt ; }
186 virtual void SetMinPt(Float_t pt) { fMinPt = pt ; }
187 virtual void SetPtCutRange(Double_t mi, Double_t ma) { fMaxPt = ma; fMinPt=mi; }
189 virtual Float_t GetMaxEnergy() const { return fMaxPt ; }
190 virtual Float_t GetMinEnergy() const { return fMinPt ; }
191 virtual void SetMaxEnergy(Float_t e) { fMaxPt = e ; }
192 virtual void SetMinEnergy(Float_t e) { fMinPt = e ; }
193 virtual void SetEnergyCutRange(Double_t mi, Double_t ma) { fMaxPt = ma; fMinPt = mi; }
195 //Cluster Pairs Time cut
196 virtual void SetPairTimeCut(Float_t t) { fPairTimeCut = t ; } //ns
197 virtual Float_t GetPairTimeCut() const { return fPairTimeCut ; } //ns
199 // Number of TRD modules in front of EMCAL (year <=2012)
200 Int_t GetFirstSMCoveredByTRD() const { return fTRDSMCovered ; }
201 void SetFirstSMCoveredByTRD(Int_t n) { fTRDSMCovered = n ; }
203 //Getters / Setters for parameters of event buffers
205 virtual Int_t GetNZvertBin() const { return fNZvertBin ; } // number of bins in vertex
206 virtual Int_t GetNRPBin() const { return fNrpBin ; } // number of bins in reaction plain
207 virtual Int_t GetNCentrBin() const { return fNCentrBin ; } // number of bins in centrality
208 virtual Int_t GetNTrackMultBin() const { return GetNCentrBin(); } // number of bins in track multiplicity
209 virtual Int_t GetNMaxEvMix() const { return fNmaxMixEv ; } // maximal number of events for mixin
210 virtual Float_t GetZvertexCut() const { return GetReader()->GetZvertexCut();} // cut on vertex position
211 virtual Int_t GetTrackMultiplicityBin() const ;
212 virtual Int_t GetEventCentralityBin() const ;
213 virtual Int_t GetEventRPBin() const ;
214 virtual Int_t GetEventVzBin() const ;
215 virtual Int_t GetEventMixBin() const ;
216 virtual Int_t GetEventMixBin(Int_t iCen, Int_t iVz, Int_t iRP) const;
218 virtual void SetNZvertBin(Int_t n = 1 ) { fNZvertBin = n ; if(n < 1) fNZvertBin = 1 ; } // number of bins for vertex position
219 virtual void SetNRPBin (Int_t n = 1 ) { fNrpBin = n ; if(n < 1) fNrpBin = 1 ; } // number of bins in reaction plain
220 virtual void SetNCentrBin(Int_t n = 1 ) { fNCentrBin = n ; if(n < 1) fNCentrBin = 1 ; } // number of bins in centrality
221 virtual void SetNTrackMultBin(Int_t n = 1 ) { SetNCentrBin(n); } // number of bins in track multiplicity
222 virtual void SetNMaxEvMix(Int_t n = 20) { fNmaxMixEv = n ; if(n < 1) fNmaxMixEv = 1 ; } // maximal number of events for mixing
223 virtual void SetTrackMultiplicityBin(Int_t bin, Int_t mult) { if(bin < 20) fTrackMultBins[bin] = mult ; }
225 virtual void SwitchOnTrackMultBins() { fUseTrackMultBins = kTRUE ; }
226 virtual void SwitchOffTrackMultBins() { fUseTrackMultBins = kFALSE ; }
228 virtual void SwitchOnOwnMix() { fDoOwnMix = kTRUE ; }
229 virtual void SwitchOffOwnMix() { fDoOwnMix = kFALSE ; }
231 virtual Bool_t DoOwnMix() const { return fDoOwnMix ; }
232 virtual Bool_t UseTrackMultBins() const { return fUseTrackMultBins ; }
235 virtual Int_t CheckMixedEventVertex(Int_t caloLabel, Int_t trackLabel) ;
236 virtual AliMixedEvent * GetMixedEvent() const { return GetReader()->GetMixedEvent() ; }
237 virtual Int_t GetNMixedEvent() const { return GetReader()->GetNMixedEvent() ; }
240 virtual void GetVertex(Double_t vertex[3]) const { GetReader()->GetVertex(vertex) ; }
241 virtual Double_t* GetVertex(Int_t evtIndex) const { return GetReader()->GetVertex(evtIndex) ; }
242 virtual void GetVertex(Double_t vertex[3],
243 Int_t evtIndex) const { GetReader()->GetVertex(vertex,evtIndex) ; }
246 virtual Int_t GetV0Signal(Int_t i ) const { return fReader->GetV0Signal(i) ; }
248 virtual Int_t GetV0Multiplicity(Int_t i ) const { return fReader->GetV0Multiplicity(i) ; }
251 //MC event acces methods
252 virtual AliStack * GetMCStack() const ;
254 virtual AliHeader* GetMCHeader() const ;
256 virtual AliGenEventHeader * GetMCGenEventHeader() const ;
258 //Analysis helpers classes pointers setters and getters
260 virtual AliCaloPID * GetCaloPID() { if(!fCaloPID) fCaloPID = new AliCaloPID(); return fCaloPID ; }
262 virtual AliCalorimeterUtils * GetCaloUtils() const { return fCaloUtils ; }
264 virtual AliFiducialCut * GetFiducialCut() { if(!fFidCut) fFidCut = new AliFiducialCut(); return fFidCut ; }
266 virtual AliHistogramRanges * GetHistogramRanges() { if(!fHisto) fHisto = new AliHistogramRanges(); return fHisto ; }
268 virtual AliIsolationCut * GetIsolationCut() { if(!fIC) fIC = new AliIsolationCut(); return fIC ; }
270 virtual AliMCAnalysisUtils * GetMCAnalysisUtils() { if(!fMCUtils) fMCUtils = new AliMCAnalysisUtils(); return fMCUtils ; }
272 virtual AliNeutralMesonSelection * GetNeutralMesonSelection() { if(!fNMS) fNMS = new AliNeutralMesonSelection(); return fNMS ; }
274 virtual AliCaloTrackReader * GetReader() const { return fReader ; }
276 virtual AliEMCALGeometry * GetEMCALGeometry() const { return fCaloUtils->GetEMCALGeometry() ; }
278 virtual AliPHOSGeoUtils * GetPHOSGeometry() const { return fCaloUtils->GetPHOSGeometry() ; }
280 virtual void SetCaloPID(AliCaloPID * pid) { delete fCaloPID; fCaloPID = pid ; }
282 virtual void SetCaloUtils(AliCalorimeterUtils * caloutils) { fCaloUtils = caloutils ; }
284 virtual void SetFiducialCut(AliFiducialCut * fc) { delete fFidCut; fFidCut = fc ; }
286 virtual void SetHistogramRanges(AliHistogramRanges * hr) { delete fHisto; fHisto = hr ; }
288 virtual void SetIsolationCut(AliIsolationCut * ic) { delete fIC; fIC = ic ; }
290 virtual void SetMCAnalysisUtils(AliMCAnalysisUtils * mcutils) { delete fMCUtils; fMCUtils = mcutils ; }
292 virtual void SetNeutralMesonSelection(AliNeutralMesonSelection * const nms) { delete fNMS; fNMS = nms ; }
294 virtual void SetReader(AliCaloTrackReader * reader) { fReader = reader ; }
296 //Calorimeter specific access methods and calculations
298 virtual Bool_t IsTrackMatched(AliVCluster * cluster, AliVEvent* event) {
299 return GetCaloPID()->IsTrackMatched(cluster, fCaloUtils, event) ; }
301 virtual Int_t GetModuleNumberCellIndexes(Int_t absId, Int_t calo, Int_t & icol, Int_t & irow, Int_t &iRCU) const {
302 return fCaloUtils->GetModuleNumberCellIndexes(absId, calo, icol, irow,iRCU) ; }
304 virtual Int_t GetModuleNumber(AliAODPWG4Particle * part) const {
305 return fCaloUtils->GetModuleNumber(part, fReader->GetInputEvent()) ; }
307 virtual Int_t GetModuleNumber(AliVCluster * cluster) const {
308 return fCaloUtils->GetModuleNumber(cluster) ; }
310 virtual AliVCluster* FindCluster(TObjArray* clusters, const Int_t id, Int_t & iclus, const Int_t first=0) ;
314 Bool_t fDataMC ; // Flag to access MC data when using ESD or AOD
315 Int_t fDebug ; // Debug level
316 Int_t fCalorimeter ; // Calorimeter selection
317 TString fCalorimeterString ; // Calorimeter selection
318 Bool_t fCheckFidCut ; // Do analysis for clusters in defined region
319 Bool_t fCheckRealCaloAcc ; // When analysis of MC particle kinematics, check their hit in Calorimeter in Real Geometry or use FidCut
320 Bool_t fCheckCaloPID ; // Do analysis for calorimeters
321 Bool_t fRecalculateCaloPID ; // Recalculate PID or use PID weights in calorimeters
322 Float_t fMinPt ; // Maximum pt of (trigger) particles in the analysis
323 Float_t fMaxPt ; // Minimum pt of (trigger) particles in the analysis
324 Float_t fPairTimeCut; // Maximum difference between time of cluster pairs (ns)
325 Int_t fTRDSMCovered; // From which SM EMCal is covered by TRD
327 Int_t fNZvertBin ; // Number of bins in event container for vertex position
328 Int_t fNrpBin ; // Number of bins in event container for reaction plain
329 Int_t fNCentrBin ; // Number of bins in event container for centrality
330 Int_t fNmaxMixEv ; // Maximal number of events stored in buffer for mixing
331 Bool_t fDoOwnMix; // Do combinatorial background not the one provided by the frame
332 Bool_t fUseTrackMultBins; // Use track multiplicity and not centrality bins in mixing
333 Int_t fTrackMultBins[20]; // Multiplicity bins limits. Number of bins set with SetNTrackMult() that calls SetNCentrBin().
334 Bool_t fFillPileUpHistograms; // Fill pile-up related histograms
335 Bool_t fFillHighMultHistograms; // Histograms with centrality and event plane for triggers pT
336 Bool_t fMakePlots ; // Print plots
338 TClonesArray* fInputAODBranch ; //! Selected input particles branch
339 TString fInputAODName ; // Name of input AOD branch;
340 TClonesArray* fOutputAODBranch ; //! Selected output particles branch
341 Bool_t fNewAOD ; // Flag, new aod branch added to the analysis or not.
342 TString fOutputAODName ; // Name of output AOD branch;
343 TString fOutputAODClassName; // Type of aod objects to be stored in the TClonesArray (AliAODPWG4Particle, AliAODPWG4ParticleCorrelation ...)
344 TString fAODObjArrayName ; // Name of ref array kept in a TList in AliAODParticleCorrelation with clusters or track references.
345 TString fAddToHistogramsName; // Add this string to histograms name
347 //Analysis helper classes access pointers
348 AliCaloPID * fCaloPID; // PID calculation
349 AliCalorimeterUtils * fCaloUtils ; // Pointer to CalorimeterUtils
350 AliFiducialCut * fFidCut; // Acceptance cuts
351 AliHistogramRanges * fHisto ; // Histogram ranges container
352 AliIsolationCut * fIC; // Isolation cut
353 AliMCAnalysisUtils * fMCUtils; // MonteCarlo Analysis utils
354 AliNeutralMesonSelection * fNMS; // Neutral Meson Selection
355 AliCaloTrackReader * fReader; // Acces to ESD/AOD/MC data
357 AliAnaCaloTrackCorrBaseClass( const AliAnaCaloTrackCorrBaseClass & bc) ; // cpy ctor
358 AliAnaCaloTrackCorrBaseClass & operator = (const AliAnaCaloTrackCorrBaseClass & bc) ; // cpy assignment
360 ClassDef(AliAnaCaloTrackCorrBaseClass,26)
364 #endif //ALIANACALOTRACKCORRBASECLASS_H