AliPhysics  9d9c621 (9d9c621)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliCalorimeterUtils.h
Go to the documentation of this file.
1 #ifndef ALICALORIMETERUTILS_H
2 #define ALICALORIMETERUTILS_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice */
5 
6 //_________________________________________________________________________
18 //_________________________________________________________________________
19 
20 // --- ROOT system ---
21 #include <TObject.h>
22 #include <TString.h>
23 #include <TObjArray.h>
24 class TArrayF;
25 #include <TH2I.h>
26 #include <TGeoMatrix.h>
27 
28 //--- ANALYSIS system ---
29 class AliVEvent;
30 class AliVTrack;
31 class AliAODPWG4Particle;
32 class AliAODCaloCluster;
33 class AliVCaloCells;
34 class AliPHOSGeoUtils;
35 class AliEMCALGeometry;
36 class AliAODMCParticle;
37 class TParticle;
38 
39 #include "AliEMCALRecoUtils.h"
40 
41 class AliCalorimeterUtils : public TObject {
42 
43  public:
44  AliCalorimeterUtils() ; // ctor
45  virtual ~AliCalorimeterUtils() ;//virtual dtor
46 
47  virtual void InitParameters();
48  virtual void Print(const Option_t * opt) const ;
49 
50  virtual Int_t GetDebug() const { return fDebug ; }
51  virtual void SetDebug(Int_t d) { fDebug = d ; }
52 
53  //virtual void Init();
54 
55  // Cluster contents
56 
57  Bool_t AreNeighbours(Int_t calo, Int_t absId1, Int_t absId2) const ;
58 
59  Bool_t IsClusterSharedByTwoSuperModules(const AliEMCALGeometry * geom,
60  AliVCluster* cluster);
61 
62  Int_t GetNumberOfLocalMaxima(AliVCluster* cluster, AliVCaloCells* cells) ;
63 
64  Int_t GetNumberOfLocalMaxima(AliVCluster* cluster, AliVCaloCells* cells,
65  Int_t *absIdList, Float_t *maxEList) ;
66 
67  Float_t GetLocalMaximaCutE() const { return fLocMaxCutE ; }
68  void SetLocalMaximaCutE(Float_t cut) { fLocMaxCutE = cut ; }
69 
70  Float_t GetLocalMaximaCutEDiff() const { return fLocMaxCutEDiff ; }
71  void SetLocalMaximaCutEDiff(Float_t c) { fLocMaxCutEDiff = c ; }
72 
73  Int_t GetMaxEnergyCell(AliVCaloCells* cells, AliVCluster* clu, Float_t & fraction) const ;
74 
75  void SplitEnergy(Int_t absId1, Int_t absId2, AliVCluster *cluster, AliVCaloCells* cells,
76  //Float_t & e1, Float_t & e2,
77  AliAODCaloCluster *cluster1, AliAODCaloCluster *cluster2,
78  Int_t nMax, Int_t eventNumber = 0);//, Int_t *absIdList, Float_t *maxEList,
79 
80  void SwitchOnClusterPlot() { fPlotCluster = kTRUE ; }
81  void SwitchOffClusterPlot() { fPlotCluster = kFALSE ; }
82 
83  Float_t GetMCECellClusFracCorrection(Float_t eCell, Float_t eCluster) const ;
84  void SetMCECellClusFracCorrectionParamters(Int_t i, Float_t param) { if(i<4) fMCECellClusFracCorrParam[i] = param; }
85 
89 
90  //------------------------------
91  // Calorimeters Geometry Methods
92  //------------------------------
93 
94  AliEMCALGeometry * GetEMCALGeometry() const { return fEMCALGeo ; }
95  TString EMCALGeometryName() const { return fEMCALGeoName ; }
96  void SetEMCALGeometryName(TString name) { fEMCALGeoName = name ; }
97  void InitEMCALGeometry() ;
98  Bool_t IsEMCALGeoMatrixSet() const { return fEMCALGeoMatrixSet ; }
99 
100  AliPHOSGeoUtils * GetPHOSGeometry() const { return fPHOSGeo ; }
101  TString PHOSGeometryName() const { return fPHOSGeoName ; }
102  void SetPHOSGeometryName(TString name) { fPHOSGeoName = name ; }
103  void InitPHOSGeometry() ;
104  Bool_t IsPHOSGeoMatrixSet() const { return fPHOSGeoMatrixSet ; }
105 
106  void AccessGeometry(AliVEvent* inputEvent) ;
107 
108  void SetImportGeometryFromFile(Bool_t import,
109  TString path = ""){
110  fImportGeometryFromFile = import ;
111  fImportGeometryFilePath = path ; } // EMCAL
112 
113  Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, TParticle* particle);
114  Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, AliAODMCParticle* particle);
115  Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, Float_t eta, Float_t theta, Float_t phi, Int_t & absID);
116 
119  void SetEMCALGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fEMCALMatrix[i] = m ; }
120 
123  void SetPHOSGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fPHOSMatrix[i] = m ; }
124 
125  void GetEMCALSubregion(AliVCluster* clus, AliVCaloCells* cells,
126  Int_t & regEta, Int_t & regPhi) const ;
127 
128  //------------------------------
129  // Bad channels
130  //------------------------------
131 
134  fEMCALRecoUtils->SwitchOnBadChannelsRemoval();
137  fEMCALRecoUtils->SwitchOffBadChannelsRemoval() ; }
138 
140  void SwitchOnDistToBadChannelRecalculation () { fEMCALRecoUtils->SwitchOnDistToBadChannelRecalculation() ; }
141  void SwitchOffDistToBadChannelRecalculation() { fEMCALRecoUtils->SwitchOffDistToBadChannelRecalculation(); }
142 
144 
145  Int_t GetEMCALChannelStatus(Int_t iSM , Int_t iCol, Int_t iRow) const {
146  return fEMCALRecoUtils->GetEMCALChannelStatus(iSM,iCol,iRow); }//Channel is ok by default
147 
148  Int_t GetPHOSChannelStatus (Int_t imod, Int_t iCol, Int_t iRow) const {
149  if(fPHOSBadChannelMap) return (Int_t) ((TH2I*)fPHOSBadChannelMap->At(imod))->GetBinContent(iCol,iRow);
150  else return 0 ; }//Channel is ok by default
151 
152  void SetEMCALChannelStatus(Int_t iSM , Int_t iCol, Int_t iRow, Double_t c = 1) {
153  fEMCALRecoUtils->SetEMCALChannelStatus(iSM,iCol,iRow,c) ; }
154 
155  void SetPHOSChannelStatus (Int_t imod, Int_t iCol, Int_t iRow, Double_t c = 1) {
157  ((TH2I*)fPHOSBadChannelMap->At(imod))->SetBinContent(iCol,iRow,c) ; }
158 
159  void SetEMCALChannelStatusMap(Int_t iSM , TH2I* h) { fEMCALRecoUtils->SetEMCALChannelStatusMap(iSM,h) ; }
160  void SetPHOSChannelStatusMap(Int_t imod , TH2I* h) { fPHOSBadChannelMap ->AddAt(h,imod) ; }
161 
162  TH2I * GetEMCALChannelStatusMap(Int_t iSM) const { return fEMCALRecoUtils->GetEMCALChannelStatusMap(iSM) ; }
163  TH2I * GetPHOSChannelStatusMap(Int_t imod) const { return (TH2I*)fPHOSBadChannelMap->At(imod) ; }
164 
165  void SetEMCALChannelStatusMap(TObjArray *map) { fEMCALRecoUtils->SetEMCALChannelStatusMap(map) ; }
166  void SetPHOSChannelStatusMap (TObjArray *map) { fPHOSBadChannelMap = map ; }
167 
168  Bool_t ClusterContainsBadChannel(Int_t calo,UShort_t* cellList, Int_t nCells);
169  Bool_t ClusterContainsBadChannel(TString /*calo*/,UShort_t* /*cellList*/, Int_t /*nCells*/) {return kFALSE;} // Stupid thing to do but just to avoid compilation break in AliTrackComparisonESD while I find the authors
170 
171  // Mask clusters in front of frame, EMCAL only
172  Int_t GetNMaskCellColumns() const { return fNMaskCellColumns;}
173  void SetNMaskCellColumns(Int_t n) {
174  if(n > fNMaskCellColumns) { delete [] fMaskCellColumns ; fMaskCellColumns = new Int_t[n] ; }
175  fNMaskCellColumns = n ; }
176  void SetMaskCellColumn(Int_t ipos, Int_t icol) {
177  if(ipos < fNMaskCellColumns) fMaskCellColumns[ipos] = icol;
178  else printf("Not set, position larger than allocated set size first") ; }
179  Bool_t MaskFrameCluster(Int_t iSM, Int_t ieta) const ;
180 
181  //------------------------------
182  // Calorimeter indexes information
183  //------------------------------
184 
185  Int_t GetModuleNumber(AliAODPWG4Particle * particle, AliVEvent* inputEvent) const;
186  Int_t GetModuleNumber(AliVCluster * cluster) const;
187  Int_t GetModuleNumberCellIndexes(Int_t absId, Int_t calo, Int_t & icol, Int_t & irow, Int_t &iRCU) const ;
188  Int_t GetModuleNumberCellIndexesAbsCaloMap(Int_t absId, Int_t calo, Int_t & icol, Int_t & irow, Int_t &iRCU,
189  Int_t & icolAbs, Int_t & irowAbs) const ;
190 
191  //------------------------------
192  // Modules fiducial region
193  //------------------------------
194 
195  Bool_t CheckCellFiducialRegion(AliVCluster* cluster, AliVCaloCells* cells) const ;
196  Bool_t CheckCellFiducialRegion(AliVCluster* cluster, AliVCaloCells* cells, AliVEvent* , Int_t )
197  { return CheckCellFiducialRegion(cluster, cells) ; } // Stupid thing to do but just to avoid compilation break in AliTrackComparisonESD while I find the authors
200  void SetNumberOfCellsFromEMCALBorder(Int_t n) { fEMCALRecoUtils->SetNumberOfCellsFromEMCALBorder(n) ; }
201  Int_t GetNumberOfCellsFromEMCALBorder() const { return fEMCALRecoUtils->GetNumberOfCellsFromEMCALBorder(); }
202  void SwitchOnNoFiducialBorderInEMCALEta0() { fEMCALRecoUtils->SwitchOnNoFiducialBorderInEMCALEta0() ; }
203  void SwitchOffNoFiducialBorderInEMCALEta0() { fEMCALRecoUtils->SwitchOffNoFiducialBorderInEMCALEta0() ; }
204  Bool_t IsEMCALNoBorderAtEta0() const { return fEMCALRecoUtils->IsEMCALNoBorderAtEta0() ; }
205 
206  //------------------------------
207  // Recalibration
208  //------------------------------
209 
210  Bool_t IsRecalibrationOn() const { return fRecalibration ; }
212  InitPHOSRecalibrationFactors(); fEMCALRecoUtils->SwitchOnRecalibration() ; }
214  fEMCALRecoUtils->SwitchOffRecalibration() ; }
215 
217 
218  Float_t GetEMCALChannelRecalibrationFactor(Int_t iSM , Int_t iCol, Int_t iRow) const {
219  return fEMCALRecoUtils->GetEMCALChannelRecalibrationFactor(iSM , iCol, iRow) ; }
220 
221  Float_t GetPHOSChannelRecalibrationFactor (Int_t imod, Int_t iCol, Int_t iRow) const {
223  return (Float_t) ((TH2F*)fPHOSRecalibrationFactors->At(imod))->GetBinContent(iCol,iRow);
224  else return 1 ; }
225 
226  void SetEMCALChannelRecalibrationFactor(Int_t iSM , Int_t iCol, Int_t iRow, Double_t c = 1) {
227  fEMCALRecoUtils->SetEMCALChannelRecalibrationFactor(iSM,iCol,iRow,c) ; }
228 
229  void SetPHOSChannelRecalibrationFactor (Int_t imod, Int_t iCol, Int_t iRow, Double_t c = 1) {
231  ((TH2F*)fPHOSRecalibrationFactors->At(imod))->SetBinContent(iCol,iRow,c) ; }
232 
233  void SetEMCALChannelRecalibrationFactors(Int_t iSM , TH2F* h) { fEMCALRecoUtils->SetEMCALChannelRecalibrationFactors(iSM,h) ; }
234  void SetPHOSChannelRecalibrationFactors(Int_t imod , TH2F* h) { fPHOSRecalibrationFactors ->AddAt(h,imod) ; }
235 
236  TH2F * GetEMCALChannelRecalibrationFactors(Int_t iSM) const { return fEMCALRecoUtils->GetEMCALChannelRecalibrationFactors(iSM) ; }
237  TH2F * GetPHOSChannelRecalibrationFactors(Int_t imod) const { return (TH2F*)fPHOSRecalibrationFactors->At(imod) ; }
238 
239  void SetEMCALChannelRecalibrationFactors(TObjArray *map) { fEMCALRecoUtils->SetEMCALChannelRecalibrationFactors(map) ; }
241 
242  void RecalibrateCellTime (Double_t & time, Int_t calo, Int_t absId, Int_t bunchCrossNumber) const ;
243  void RecalibrateCellTimeL1Phase(Double_t & time, Int_t calo, Int_t iSM, Int_t bunchCrossNumber) const;
244  void RecalibrateCellAmplitude(Float_t & amp, Int_t calo, Int_t absId) const ;
245  Float_t RecalibrateClusterEnergy(AliVCluster* cluster, AliVCaloCells * cells);
246  Float_t RecalibrateClusterEnergyWeightCell(AliVCluster* cluster, AliVCaloCells * cells, Float_t energyOrg);
247 
248  //------------------------------
249  // Run dependent energy calibrations (EMCAL)
250  //------------------------------
251 
254 
255  //------------------------------
256  // Time Recalibration (EMCAL)
257  //------------------------------
258 
259  Bool_t IsTimeRecalibrationOn() const { return fEMCALRecoUtils->IsTimeRecalibrationOn() ; }
260  void SwitchOffTimeRecalibration() { fEMCALRecoUtils->SwitchOffTimeRecalibration() ; }
261  void SwitchOnTimeRecalibration() { fEMCALRecoUtils->SwitchOnTimeRecalibration() ; }
262 
263  Float_t GetEMCALChannelTimeRecalibrationFactor(Int_t bc, Int_t absID) const
264  { return fEMCALRecoUtils->GetEMCALChannelTimeRecalibrationFactor(bc, absID) ; }
265 
266  void SetEMCALChannelTimeRecalibrationFactor(Int_t bc, Int_t absID, Double_t c = 0)
267  { fEMCALRecoUtils->SetEMCALChannelTimeRecalibrationFactor(bc, absID, c) ; }
268 
270  void SetEMCALChannelTimeRecalibrationFactors(TObjArray *map) { fEMCALRecoUtils->SetEMCALChannelTimeRecalibrationFactors(map) ; }
271  void SetEMCALChannelTimeRecalibrationFactors(Int_t bc , TH1F* h) { fEMCALRecoUtils->SetEMCALChannelTimeRecalibrationFactors(bc , h) ; }
272 
273  //------------------------------
274  // Time Recalibration - L1 phase (EMCAL)
275  //------------------------------
276  Bool_t IsL1PhaseInTimeRecalibrationOn() const { return fEMCALRecoUtils->IsL1PhaseInTimeRecalibrationOn() ; }
277  void SwitchOffL1PhaseInTimeRecalibration() { fEMCALRecoUtils->SwitchOffL1PhaseInTimeRecalibration() ; }
278  void SwitchOnL1PhaseInTimeRecalibration() { fEMCALRecoUtils->SwitchOnL1PhaseInTimeRecalibration() ; }
279 
280  Int_t GetEMCALL1PhaseInTimeRecalibrationForSM(Int_t iSM) const { return fEMCALRecoUtils->GetEMCALL1PhaseInTimeRecalibrationForSM(iSM) ; }
281  void SetEMCALL1PhaseInTimeRecalibrationForSM(Int_t iSM, Int_t c = 0) { return fEMCALRecoUtils->SetEMCALL1PhaseInTimeRecalibrationForSM(iSM,c) ; }
282 
283  TH1C * GetEMCALL1PhaseInTimeRecalibrationForAllSM()const { return fEMCALRecoUtils->GetEMCALL1PhaseInTimeRecalibrationForAllSM() ; }
284  void SetEMCALL1PhaseInTimeRecalibrationForAllSM(TObjArray *map) { fEMCALRecoUtils->SetEMCALL1PhaseInTimeRecalibrationForAllSM(map) ; }
285  void SetEMCALL1PhaseInTimeRecalibrationForAllSM(TH1C* h) { fEMCALRecoUtils->SetEMCALL1PhaseInTimeRecalibrationForAllSM(h) ; }
286 
287  //------------------------------
288  // EMCAL specific utils for the moment
289  //------------------------------
290 
291  void SetEMCALRecoUtils(AliEMCALRecoUtils * ru) { fEMCALRecoUtils = ru ; }
292  AliEMCALRecoUtils* GetEMCALRecoUtils() const { return fEMCALRecoUtils ; }
293 
297  void CorrectClusterEnergy(AliVCluster *cl);
298 
302  void RecalculateClusterPosition(AliVCaloCells* cells, AliVCluster* clu);
303  void RecalculateClusterShowerShapeParameters(AliVCaloCells* cells, AliVCluster* clu){
304  fEMCALRecoUtils->RecalculateClusterShowerShapeParameters((AliEMCALGeometry*)fEMCALGeo, cells, clu) ; }
305 
306  void RecalculateClusterDistanceToBadChannel(AliVCaloCells* cells, AliVCluster* clu){
307  fEMCALRecoUtils->RecalculateClusterDistanceToBadChannel((AliEMCALGeometry*)fEMCALGeo, cells, clu) ; }
308 
309  void RecalculateClusterPID(AliVCluster* clu) { fEMCALRecoUtils->RecalculateClusterPID(clu) ; }
310 
311  //------------------------------
312  // *** Track Matching ***
313  //------------------------------
314 
315  AliVTrack * GetMatchedTrack(AliVCluster * cluster, AliVEvent * event, Int_t index = -1) const ;
316 
317  // Recalculation
318 
319  void RecalculateClusterTrackMatching(AliVEvent * event, TObjArray* clusterArray = 0x0) ;
320 
321  void GetMatchedResiduals(Int_t index, Float_t &dR, Float_t &dZ) {
322  if (fRecalculateMatching) fEMCALRecoUtils->GetMatchedResiduals(index,dR,dZ) ; }
323 
324  //------------------------------
325  // This could be used for PHOS ...
326  //------------------------------
327 
331 
332  Float_t GetCutZ() const { return fCutZ ; } // PHOS only
333  void SetCutZ(Float_t z) { fCutZ = z ; } // PHOS only
334 
335 
336  Float_t GetCutR() const { return fCutR ; } // PHOS and EMCAL
337  void SetCutR(Float_t r) { fCutR = r ; // PHOS and EMCA
338  fEMCALRecoUtils->SetCutR(r) ; }
339 
340  Float_t GetCutEta() const { return fCutEta ; } // EMCAL only
341  void SetCutEta(Float_t e) { fCutEta = e ; // EMCAL only
342  fEMCALRecoUtils->SetCutEta(e) ; }
343 
344  Float_t GetCutPhi() const { return fCutPhi ; } // EMCAL only
345  void SetCutPhi(Float_t p) { fCutPhi = p ; // EMCAL only
346  fEMCALRecoUtils->SetCutPhi(p) ; }
347 
348  //------------------------------
349  // OADB options settings
350  //------------------------------
351 
352  void AccessOADB(AliVEvent * event) ;
353 
354  TString GetPass() ;
355 
356  void SwitchOnEMCALOADB() { fOADBForEMCAL = kTRUE ; }
357  void SwitchOffEMCALOADB() { fOADBForEMCAL = kFALSE ; }
358 
359  void SwitchOnPHOSOADB() { fOADBForPHOS = kTRUE ; }
360  void SwitchOffPHOSOADB() { fOADBForPHOS = kFALSE ; }
361 
362  void SetEMCALOADBFilePath(TString path) { fOADBFilePathEMCAL = path ; }
363  void SetPHOSOADBFilePath (TString path) { fOADBFilePathPHOS = path ; }
364 
365  //------------------------------
366  // Other settings
367  //------------------------------
368 
371 
372  void SetRunNumber(Int_t run) { fRunNumber = run ; }
373  Int_t GetRunNumber() const { return fRunNumber ; }
374 
375  enum detector { kEMCAL = 0, kPHOS = 1, kCTS = 2, kDCAL = 3, kDCALPHOS = 4 };
376 
377  private:
378 
379  Int_t fDebug;
380 
381  TString fEMCALGeoName;
382 
383  TString fPHOSGeoName;
384 
385  AliEMCALGeometry * fEMCALGeo ;
386 
387  AliPHOSGeoUtils * fPHOSGeo ;
388 
390 
392 
394 
395  TGeoHMatrix * fEMCALMatrix[22];
396 
398 
399  TGeoHMatrix * fPHOSMatrix[5];
400 
402 
403  TObjArray * fPHOSBadChannelMap;
404 
406 
408 
410  Int_t * fMaskCellColumns; //[fNMaskCellColumns]
411 
412  Bool_t fRecalibration;
413 
415 
417 
418  AliEMCALRecoUtils* fEMCALRecoUtils;
419 
421 
423 
425 
426  Float_t fCutR;
427 
428  Float_t fCutZ;
429 
430  Float_t fCutEta;
431 
432  Float_t fCutPhi;
433 
434  Float_t fLocMaxCutE;
435 
436  Float_t fLocMaxCutEDiff;
437 
438  Bool_t fPlotCluster;
439 
440  Bool_t fOADBSet ;
441 
442  Bool_t fOADBForEMCAL ;
443 
444  Bool_t fOADBForPHOS ;
445 
447 
448  TString fOADBFilePathPHOS ;
449 
451 
453 
455 
456  Int_t fRunNumber;
457 
459 
461 
464 
467 
469  ClassDef(AliCalorimeterUtils,19) ;
471 
472 } ;
473 
474 
475 #endif //ALICALORIMETERUTILS_H
476 
477 
478 
void SetCutEta(Float_t e)
Bool_t fRecalculatePosition
Recalculate cluster position.
Float_t GetCutZ() const
void SetNumberOfCellsFromPHOSBorder(Int_t n)
AliEMCALGeometry * fEMCALGeo
! EMCAL geometry pointer.
void InitPHOSRecalibrationFactors()
Init PHOS recalibration factors.
void SetRunNumber(Int_t run)
Bool_t IsRecalculationOfClusterTrackMatchingOn() const
TGeoHMatrix * fEMCALMatrix[22]
Geometry matrices with alignments.
Int_t GetPHOSChannelStatus(Int_t imod, Int_t iCol, Int_t iRow) const
Float_t fLocMaxCutEDiff
Local maxima cut, when aggregating cells, next can be a bit higher.
Bool_t IsCorrectionOfClusterEnergyOn() const
void SetEMCALOADBFilePath(TString path)
TGeoHMatrix * fPHOSMatrix[5]
Geometry matrices with alignments.
Bool_t ClusterContainsBadChannel(Int_t calo, UShort_t *cellList, Int_t nCells)
void SwitchOnLoadOwnEMCALGeometryMatrices()
AliPHOSGeoUtils * fPHOSGeo
! PHOS geometry pointer.
TH2F * GetPHOSChannelRecalibrationFactors(Int_t imod) const
void SetImportGeometryFromFile(Bool_t import, TString path="")
AliEMCALRecoUtils * GetEMCALRecoUtils() const
Int_t GetEMCALL1PhaseInTimeRecalibrationForSM(Int_t iSM) const
TString EMCALGeometryName() const
void SetEMCALL1PhaseInTimeRecalibrationForAllSM(TObjArray *map)
void SwitchOnDistToBadChannelRecalculation()
void SwitchOnNoFiducialBorderInEMCALEta0()
void SwitchOnMCECellClusFracCorrection()
Float_t GetCutPhi() const
void SetEMCALChannelStatus(Int_t iSM, Int_t iCol, Int_t iRow, Double_t c=1)
void SetPHOSChannelRecalibrationFactors(Int_t imod, TH2F *h)
AliPHOSGeoUtils * GetPHOSGeometry() const
Bool_t fOADBForEMCAL
Get calibration from OADB for EMCAL.
TString PHOSGeometryName() const
Float_t GetPHOSChannelRecalibrationFactor(Int_t imod, Int_t iCol, Int_t iRow) const
void SetEMCALChannelTimeRecalibrationFactors(Int_t bc, TH1F *h)
void SwitchOffRecalculateClusterPosition()
void SwitchOffDistToBadChannelRecalculation()
Bool_t ClusterContainsBadChannel(TString, UShort_t *, Int_t)
void RecalculateClusterTrackMatching(AliVEvent *event, TObjArray *clusterArray=0x0)
Float_t fLocMaxCutE
Local maxima cut must have more than this energy.
Float_t GetMCECellClusFracCorrection(Float_t eCell, Float_t eCluster) const
void RecalculateClusterDistanceToBadChannel(AliVCaloCells *cells, AliVCluster *clu)
Bool_t CheckCellFiducialRegion(AliVCluster *cluster, AliVCaloCells *cells, AliVEvent *, Int_t)
void SetEMCALChannelStatusMap(Int_t iSM, TH2I *h)
Bool_t fRunDependentCorrection
Switch on or off the recalibration dependent on T.
void SetLocalMaximaCutEDiff(Float_t c)
void SetNumberOfCellsFromEMCALBorder(Int_t n)
TObjArray * fPHOSRecalibrationFactors
Array of histograms with map of recalibration factors, PHOS.
TString fEMCALGeoName
Name of geometry to use for EMCAL.
void SetEMCALL1PhaseInTimeRecalibrationForAllSM(TH1C *h)
TH2F * GetEMCALChannelRecalibrationFactors(Int_t iSM) const
void SetPHOSChannelStatus(Int_t imod, Int_t iCol, Int_t iRow, Double_t c=1)
Bool_t fRecalibration
Switch on or off the recalibration.
Float_t GetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow) const
TH1F * GetEMCALChannelTimeRecalibrationFactors(Int_t bc) const
void SwitchOnLoadOwnPHOSGeometryMatrices()
Int_t fDebug
Debugging level.
TH1C * GetEMCALL1PhaseInTimeRecalibrationForAllSM() const
Int_t GetNumberOfCellsFromPHOSBorder() const
Bool_t IsRecalibrationOn() const
void SetMCECellClusFracCorrectionParamters(Int_t i, Float_t param)
Bool_t IsMCParticleInCalorimeterAcceptance(Int_t calo, TParticle *particle)
void SetPHOSGeometryName(TString name)
virtual void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
void SetMaskCellColumn(Int_t ipos, Int_t icol)
void RecalculateClusterPID(AliVCluster *clu)
Float_t GetEMCALChannelTimeRecalibrationFactor(Int_t bc, Int_t absID) const
void SwitchOffRecalculateClusterTrackMatching()
Float_t fCutEta
dEta cut on matching (EMCAL).
Float_t GetLocalMaximaCutE() const
void SetCutPhi(Float_t p)
Int_t GetModuleNumber(AliAODPWG4Particle *particle, AliVEvent *inputEvent) const
Get the EMCAL/PHOS module number that corresponds to this particle.
Bool_t fLoadEMCALMatrices
Matrices set from configuration, not get from geometry.root or from ESDs/AODs.
virtual void SetDebug(Int_t d)
AliEMCALGeometry * GetEMCALGeometry() const
void RecalculateClusterShowerShapeParameters(AliVCaloCells *cells, AliVCluster *clu)
void SwitchOffMCECellClusFracCorrection()
void SetNMaskCellColumns(Int_t n)
Float_t GetLocalMaximaCutEDiff() const
Bool_t IsL1PhaseInTimeRecalibrationOn() const
Bool_t fRecalculateMatching
Recalculate cluster position.
Bool_t MaskFrameCluster(Int_t iSM, Int_t ieta) const
AliCalorimeterUtils & operator=(const AliCalorimeterUtils &cu)
Assignment operator not implemented.
Bool_t fOADBForPHOS
Get calibration from OADB for PHOS.
Bool_t IsBadChannelsRemovalSwitchedOn() const
Int_t * fMaskCellColumns
List of masked cells collumn index.
Bool_t fRemoveBadChannels
Check the channel status provided and remove clusters with bad channels.
void InitPHOSBadChannelStatusMap()
Init PHOS bad channels map.
virtual Int_t GetDebug() const
Int_t GetRunNumber() const
AliCalorimeterUtils()
Constructor. Initialize parameters.
void SetEMCALChannelTimeRecalibrationFactor(Int_t bc, Int_t absID, Double_t c=0)
virtual void InitParameters()
Initialize the parameters of the analysis.
void SwitchOnRecalculateClusterTrackMatching()
void SetEMCALChannelRecalibrationFactors(TObjArray *map)
Int_t fNMaskCellColumns
Number of masked columns.
Float_t GetCutR() const
Bool_t IsMCECellClusFracCorrectionOn() const
void SetPHOSGeometryMatrixInSM(TGeoHMatrix *m, Int_t i)
Int_t GetNumberOfSuperModulesUsed() const
Bool_t IsEMCALNoBorderAtEta0() const
Bool_t IsClusterSharedByTwoSuperModules(const AliEMCALGeometry *geom, AliVCluster *cluster)
Bool_t IsRecalculationOfClusterPositionOn() const
Float_t fMCECellClusFracCorrParam[4]
Parameters for the function correcting the weight of the cells in the cluster.
Int_t GetNumberOfLocalMaxima(AliVCluster *cluster, AliVCaloCells *cells)
Find the number of local maxima in cluster.
Bool_t fEMCALGeoMatrixSet
Check if the transformation matrix is set for EMCAL.
void SetEMCALGeometryName(TString name)
void SetPHOSOADBFilePath(TString path)
void SetNumberOfSuperModulesUsed(Int_t nSM)
void SwitchOffNoFiducialBorderInEMCALEta0()
TH2I * GetPHOSChannelStatusMap(Int_t imod) const
void SetEMCALChannelRecalibrationFactor(Int_t iSM, Int_t iCol, Int_t iRow, Double_t c=1)
Float_t GetCutEta() const
TString GetPass()
Get passx from filename.
void RecalculateClusterPosition(AliVCaloCells *cells, AliVCluster *clu)
Bool_t fImportGeometryFromFile
Import geometry settings in geometry.root file.
Int_t GetNMaskCellColumns() const
Bool_t fCorrectELinearity
Correct cluster energy linearity.
Bool_t fPHOSGeoMatrixSet
Check if the transformation matrix is set for PHOS.
TString fOADBFilePathPHOS
Default path $ALICE_PHYSICS/OADB/PHOS, if needed change.
void CorrectClusterEnergy(AliVCluster *cl)
Correct cluster energy non linearity.
void SetEMCALGeometryMatrixInSM(TGeoHMatrix *m, Int_t i)
void GetMatchedResiduals(Int_t index, Float_t &dR, Float_t &dZ)
Float_t fCutZ
dZ cut on matching (EMCAL/PHOS).
Bool_t fLoadPHOSMatrices
Matrices set from configuration, not get from geometry.root or from ESDs/AODs.
void SetPHOSChannelStatusMap(Int_t imod, TH2I *h)
Int_t fNCellsFromPHOSBorder
Number of cells from PHOS border the cell with maximum amplitude has to be.
AliVTrack * GetMatchedTrack(AliVCluster *cluster, AliVEvent *event, Int_t index=-1) const
void RecalibrateCellTimeL1Phase(Double_t &time, Int_t calo, Int_t iSM, Int_t bunchCrossNumber) const
Recalculate time L1 phase shift if time recalibration available for EMCAL.
Bool_t fMCECellClusFracCorrOn
Correct or not the weight of cells in cluster.
void SetPHOSChannelStatusMap(TObjArray *map)
Int_t fNSuperModulesUsed
Number of supermodules to be used in analysis, can be different than the real geo, to be used at initialization of histograms.
TString fImportGeometryFilePath
Path fo geometry.root file.
Bool_t fPlotCluster
Plot cluster in splitting method.
Int_t fRunNumber
Run number of the data, take it from data itself unless set by user.
void SwitchOffLoadOwnPHOSGeometryMatrices()
void RecalibrateCellAmplitude(Float_t &amp, Int_t calo, Int_t absId) const
Recalculate cell energy if recalibration factor.
void SetEMCALChannelTimeRecalibrationFactors(TObjArray *map)
Bool_t IsPHOSGeoMatrixSet() const
void SwitchOffLoadOwnEMCALGeometryMatrices()
void SetEMCALChannelStatusMap(TObjArray *map)
Bool_t IsTimeRecalibrationOn() const
Bool_t IsDistanceToBadChannelRecalculated() const
Bool_t fOADBSet
AODB parameters already set.
TObjArray * fPHOSBadChannelMap
Array of histograms with map of bad channels, PHOS.
TString fPHOSGeoName
Name of geometry to use for PHOS.
Bool_t AreNeighbours(Int_t calo, Int_t absId1, Int_t absId2) const
Int_t GetEMCALChannelStatus(Int_t iSM, Int_t iCol, Int_t iRow) const
Float_t fCutPhi
dPhi cut on matching (EMCAL).
Bool_t IsEMCALGeoMatrixSet() const
Class with utils specific to calorimeter clusters/cells.
Int_t GetNumberOfCellsFromEMCALBorder() const
void AccessGeometry(AliVEvent *inputEvent)
void SetPHOSChannelRecalibrationFactors(TObjArray *map)
void SetEMCALRecoUtils(AliEMCALRecoUtils *ru)
AliEMCALRecoUtils * fEMCALRecoUtils
EMCAL utils for cluster rereconstruction.
void SetEMCALL1PhaseInTimeRecalibrationForSM(Int_t iSM, Int_t c=0)
void SetEMCALChannelRecalibrationFactors(Int_t iSM, TH2F *h)
void AccessOADB(AliVEvent *event)
TString fOADBFilePathEMCAL
Default path $ALICE_PHYSICS/OADB/EMCAL, if needed change.
void RecalibrateCellTime(Double_t &time, Int_t calo, Int_t absId, Int_t bunchCrossNumber) const
Recalculate time if time recalibration available for EMCAL not ready for PHOS.
Int_t GetMaxEnergyCell(AliVCaloCells *cells, AliVCluster *clu, Float_t &fraction) const
For a given CaloCluster, it gets the absId of the cell with maximum energy deposit.
Float_t fCutR
dR cut on matching (PHOS).
void SwitchOffL1PhaseInTimeRecalibration()
void SetLocalMaximaCutE(Float_t cut)
Float_t RecalibrateClusterEnergyWeightCell(AliVCluster *cluster, AliVCaloCells *cells, Float_t energyOrg)
void SplitEnergy(Int_t absId1, Int_t absId2, AliVCluster *cluster, AliVCaloCells *cells, AliAODCaloCluster *cluster1, AliAODCaloCluster *cluster2, Int_t nMax, Int_t eventNumber=0)
Int_t GetModuleNumberCellIndexes(Int_t absId, Int_t calo, Int_t &icol, Int_t &irow, Int_t &iRCU) const
Get the EMCAL/PHOS module, columns, row and RCU/DDL number that corresponds to this absId...
TH2I * GetEMCALChannelStatusMap(Int_t iSM) const
void SetPHOSChannelRecalibrationFactor(Int_t imod, Int_t iCol, Int_t iRow, Double_t c=1)
Float_t RecalibrateClusterEnergy(AliVCluster *cluster, AliVCaloCells *cells)
Recalibrate the cluster energy, considering the recalibration map and the energy of the cells that co...
void GetEMCALSubregion(AliVCluster *clus, AliVCaloCells *cells, Int_t &regEta, Int_t &regPhi) const
Bool_t CheckCellFiducialRegion(AliVCluster *cluster, AliVCaloCells *cells) const
Int_t GetModuleNumberCellIndexesAbsCaloMap(Int_t absId, Int_t calo, Int_t &icol, Int_t &irow, Int_t &iRCU, Int_t &icolAbs, Int_t &irowAbs) const