class AliVEvent;
class AliVTrack;
class AliAODPWG4Particle;
-class AliVCluster;
+class AliAODCaloCluster;
class AliVCaloCells;
class AliPHOSGeoUtils;
class AliEMCALGeometry;
//virtual void Init();
+ // Cluster contents
+
+ Bool_t AreNeighbours(const TString calo, const Int_t absId1, const Int_t absId2) const ;
+
+ Int_t GetNumberOfLocalMaxima(AliVCluster* cluster, AliVCaloCells* cells) ;
+
+ Int_t GetNumberOfLocalMaxima(AliVCluster* cluster, AliVCaloCells* cells,
+ Int_t *absIdList, Float_t *maxEList) ;
+
+ Float_t GetLocalMaximaCutE() const { return fLocMaxCutE ; }
+ void SetLocalMaximaCutE(Float_t cut) { fLocMaxCutE = cut ; }
+
+ Float_t GetLocalMaximaCutEDiff() const { return fLocMaxCutEDiff ; }
+ void SetLocalMaximaCutEDiff(Float_t c) { fLocMaxCutEDiff = c ; }
+
Int_t GetMaxEnergyCell(AliVCaloCells* cells, const AliVCluster* clu, Float_t & fraction) const ;
+ void SplitEnergy(const Int_t absId1, const Int_t absId2,
+ AliVCluster *cluster,
+ AliVCaloCells* cells,
+ //Float_t & e1, Float_t & e2,
+ AliAODCaloCluster *cluster1,
+ AliAODCaloCluster *cluster2,
+ const Int_t nMax, const Int_t eventNumber = 0);//, Int_t *absIdList, Float_t *maxEList,
+
+ void SwitchOnClusterPlot() { fPlotCluster = kTRUE ; }
+ void SwitchOffClusterPlot() { fPlotCluster = kFALSE ; }
+
//Calorimeters Geometry Methods
AliEMCALGeometry * GetEMCALGeometry() const { return fEMCALGeo ; }
TString EMCALGeometryName() const { return fEMCALGeoName ; }
void SetEMCALGeometryName(TString name) { fEMCALGeoName = name ; }
- void InitEMCALGeometry() ;
+ void InitEMCALGeometry(Int_t runnumber = 180000) ;
Bool_t IsEMCALGeoMatrixSet() const { return fEMCALGeoMatrixSet ; }
AliPHOSGeoUtils * GetPHOSGeometry() const { return fPHOSGeo ; }
TString PHOSGeometryName() const { return fPHOSGeoName ; }
void SetPHOSGeometryName(TString name) { fPHOSGeoName = name ; }
- void InitPHOSGeometry() ;
+ void InitPHOSGeometry(Int_t runnumber = 180000) ;
Bool_t IsPHOSGeoMatrixSet() const { return fPHOSGeoMatrixSet ; }
- void SetGeometryTransformationMatrices(AliVEvent* inputEvent) ;
+ void AccessGeometry(AliVEvent* inputEvent) ;
void SwitchOnLoadOwnEMCALGeometryMatrices() { fLoadEMCALMatrices = kTRUE ; }
void SwitchOffLoadOwnEMCALGeometryMatrices() { fLoadEMCALMatrices = kFALSE ; }
void SetEMCALChannelRecalibrationFactors(TObjArray *map) { fEMCALRecoUtils->SetEMCALChannelRecalibrationFactors(map) ; }
void SetPHOSChannelRecalibrationFactors (TObjArray *map) { fPHOSRecalibrationFactors = map;}
+ void RecalibrateCellTime (Double_t & time, const TString calo, const Int_t absId, const Int_t bunchCrossNumber) const ;
+ void RecalibrateCellAmplitude(Float_t & amp, const TString calo, const Int_t absId) const ;
Float_t RecalibrateClusterEnergy(AliVCluster* cluster, AliVCaloCells * cells);
+ // Run dependent energy calibrations (EMCAL)
+
+ void SwitchOffRunDepCorrection() { fRunDependentCorrection = kFALSE ; }
+ void SwitchOnRunDepCorrection() { fRunDependentCorrection = kTRUE ; }
+
+ // Time Recalibration (EMCAL)
+
+ Bool_t IsTimeRecalibrationOn() const { return fEMCALRecoUtils->IsTimeRecalibrationOn() ; }
+ void SwitchOffTimeRecalibration() { fEMCALRecoUtils->SwitchOffTimeRecalibration() ; }
+ void SwitchOnTimeRecalibration() { fEMCALRecoUtils->SwitchOnTimeRecalibration() ; }
+
+ Float_t GetEMCALChannelTimeRecalibrationFactor(const Int_t bc, const Int_t absID) const
+ { return fEMCALRecoUtils->GetEMCALChannelTimeRecalibrationFactor(bc, absID) ; }
+
+ void SetEMCALChannelTimeRecalibrationFactor(const Int_t bc, const Int_t absID, Double_t c = 0)
+ { fEMCALRecoUtils->SetEMCALChannelTimeRecalibrationFactor(bc, absID, c) ; }
+
+ TH1F * GetEMCALChannelTimeRecalibrationFactors(const Int_t bc)const { return fEMCALRecoUtils-> GetEMCALChannelTimeRecalibrationFactors(bc) ; }
+ void SetEMCALChannelTimeRecalibrationFactors(TObjArray *map) { fEMCALRecoUtils->SetEMCALChannelTimeRecalibrationFactors(map) ; }
+ void SetEMCALChannelTimeRecalibrationFactors(const Int_t bc , TH1F* h) { fEMCALRecoUtils->SetEMCALChannelTimeRecalibrationFactors(bc , h) ; }
+
//EMCAL specific utils for the moment
void SetEMCALRecoUtils(AliEMCALRecoUtils * ru) { fEMCALRecoUtils = ru ; }
AliEMCALRecoUtils* GetEMCALRecoUtils() const { return fEMCALRecoUtils ; }
Float_t GetCutPhi() const { return fCutPhi ; } // EMCAL only
void SetCutPhi(Float_t p) { fCutPhi = p ; // EMCAL only
fEMCALRecoUtils->SetCutPhi(p) ; }
+ // OADB options settings
+
+ void AccessOADB(AliVEvent * event) ;
+
+ TString GetPass() ;
+
+ void SwitchOnEMCALOADB() { fOADBForEMCAL = kTRUE ; }
+ void SwitchOffEMCALOADB() { fOADBForEMCAL = kFALSE ; }
+
+ void SwitchOnPHOSOADB() { fOADBForPHOS = kTRUE ; }
+ void SwitchOffPHOSOADB() { fOADBForPHOS = kFALSE ; }
+
+ void SetEMCALOADBFilePath(TString path) { fOADBFilePathEMCAL = path ; }
+ void SetPHOSOADBFilePath (TString path) { fOADBFilePathPHOS = path ; }
+
private:
Bool_t fEMCALGeoMatrixSet; // Check if the transformation matrix is set for EMCAL
Bool_t fPHOSGeoMatrixSet ; // Check if the transformation matrix is set for PHOS
Bool_t fLoadEMCALMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
- TGeoHMatrix * fEMCALMatrix[10]; // Geometry matrices with alignments
+ TGeoHMatrix * fEMCALMatrix[12]; // Geometry matrices with alignments
Bool_t fLoadPHOSMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
TGeoHMatrix * fPHOSMatrix[5]; // Geometry matrices with alignments
Bool_t fRemoveBadChannels; // Check the channel status provided and remove clusters with bad channels
Int_t fNMaskCellColumns; // Number of masked columns
Int_t* fMaskCellColumns; //[fNMaskCellColumns] list of masked cell collumn
Bool_t fRecalibration; // Switch on or off the recalibration
+ Bool_t fRunDependentCorrection;// Switch on or off the recalibration dependent on T
TObjArray * fPHOSRecalibrationFactors; // Array of histograms with map of recalibration factors, PHOS
AliEMCALRecoUtils* fEMCALRecoUtils; // EMCAL utils for cluster rereconstruction
Bool_t fRecalculatePosition; // Recalculate cluster position
Float_t fCutZ; // dZ cut on matching (EMCAL/PHOS)
Float_t fCutEta; // dEta cut on matching (EMCAL)
Float_t fCutPhi; // dPhi cut on matching (EMCAL)
+ Float_t fLocMaxCutE; // Local maxima cut must have more than this energy
+ Float_t fLocMaxCutEDiff; // Local maxima cut, when aggregating cells, next can be a bit higher
+ Bool_t fPlotCluster; // Plot cluster in splitting method
+ Bool_t fOADBSet ; // AODB parameters already set
+ Bool_t fOADBForEMCAL ; // Get calibration from OADB for EMCAL
+ Bool_t fOADBForPHOS ; // Get calibration from OADB for PHOS
+ TString fOADBFilePathEMCAL ; // Default path $ALICE_ROOT/OADB/EMCAL, if needed change
+ TString fOADBFilePathPHOS ; // Default path $ALICE_ROOT/OADB/PHOS, if needed change
- AliCalorimeterUtils(const AliCalorimeterUtils & g) ; // cpy ctor
- AliCalorimeterUtils & operator = (const AliCalorimeterUtils & g) ;//cpy assignment
+ AliCalorimeterUtils( const AliCalorimeterUtils & cu) ; // cpy ctor
+ AliCalorimeterUtils & operator = (const AliCalorimeterUtils & cu) ; // cpy assignment
- ClassDef(AliCalorimeterUtils,8)
+ ClassDef(AliCalorimeterUtils,14)
} ;