]>
Commit | Line | Data |
---|---|---|
765d44e7 | 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 | /* $Id: $ */ | |
6 | ||
7 | //_________________________________________________________________________ | |
8 | // Class utility for Calorimeter specific selection methods /// | |
9 | // | |
10 | // | |
11 | // | |
12 | //-- Author: Gustavo Conesa (LPSC-Grenoble) | |
13 | ////////////////////////////////////////////////////////////////////////////// | |
14 | ||
15 | // --- ROOT system --- | |
16 | #include "TObject.h" | |
17 | #include "TString.h" | |
18 | #include "TObjArray.h" | |
19 | class TArrayF; | |
20 | #include "TH2I.h" | |
21 | ||
22 | //--- ANALYSIS system --- | |
23 | class AliVEvent; | |
24 | class AliAODPWG4Particle; | |
c8fe2783 | 25 | class AliVCluster; |
26 | class AliVCaloCells; | |
765d44e7 | 27 | #include "AliPHOSGeoUtils.h" |
5ef94e1b | 28 | #include "AliEMCALGeometry.h" |
19db8f8c | 29 | #include "AliEMCALRecoUtils.h" |
765d44e7 | 30 | |
31 | class AliCalorimeterUtils : public TObject { | |
32 | ||
78219bac | 33 | public: |
765d44e7 | 34 | AliCalorimeterUtils() ; // ctor |
765d44e7 | 35 | virtual ~AliCalorimeterUtils() ;//virtual dtor |
78219bac | 36 | private: |
37 | AliCalorimeterUtils(const AliCalorimeterUtils & g) ; // cpy ctor | |
765d44e7 | 38 | AliCalorimeterUtils & operator = (const AliCalorimeterUtils & g) ;//cpy assignment |
39 | ||
78219bac | 40 | public: |
765d44e7 | 41 | |
42 | virtual void InitParameters(); | |
43 | virtual void Print(const Option_t * opt) const; | |
44 | ||
45 | virtual Int_t GetDebug() const { return fDebug ; } | |
46 | virtual void SetDebug(Int_t d) { fDebug = d ; } | |
47 | ||
48 | //virtual void Init(); | |
49 | ||
50 | //Calorimeters Geometry Methods | |
51 | AliEMCALGeoUtils * GetEMCALGeometry() const { return fEMCALGeo;} | |
52 | TString EMCALGeometryName() const { return fEMCALGeoName ; } | |
53 | void SetEMCALGeometryName(TString name) { fEMCALGeoName = name ; } | |
54 | void InitEMCALGeometry() ; | |
55 | Bool_t IsEMCALGeoMatrixSet() const { return fEMCALGeoMatrixSet; } | |
56 | ||
57 | AliPHOSGeoUtils * GetPHOSGeometry() const { return fPHOSGeo;} | |
58 | TString PHOSGeometryName() const { return fPHOSGeoName ; } | |
59 | void SetPHOSGeometryName(TString name) { fPHOSGeoName = name ; } | |
60 | void InitPHOSGeometry() ; | |
61 | Bool_t IsPHOSGeoMatrixSet() const {return fPHOSGeoMatrixSet ; } | |
62 | ||
63 | void SetGeometryTransformationMatrices(AliVEvent* inputEvent) ; | |
64 | ||
65 | // Bad channels | |
66 | Bool_t IsBadChannelsRemovalSwitchedOn() const { return fRemoveBadChannels ; } | |
247abff4 | 67 | void SwitchOnBadChannelsRemoval () {fRemoveBadChannels = kTRUE ; fEMCALRecoUtils->SwitchOnBadChannelsRemoval(); InitPHOSBadChannelStatusMap();} |
68 | void SwitchOffBadChannelsRemoval() {fRemoveBadChannels = kFALSE ; fEMCALRecoUtils->SwitchOffBadChannelsRemoval();} | |
765d44e7 | 69 | |
765d44e7 | 70 | void InitPHOSBadChannelStatusMap () ; |
71 | ||
72 | Int_t GetEMCALChannelStatus(Int_t iSM , Int_t iCol, Int_t iRow) const { | |
247abff4 | 73 | return fEMCALRecoUtils->GetEMCALChannelStatus(iSM,iCol,iRow); }//Channel is ok by default |
765d44e7 | 74 | |
75 | Int_t GetPHOSChannelStatus (Int_t imod, Int_t iCol, Int_t iRow) const { | |
37c0bcde | 76 | if(fPHOSBadChannelMap)return (Int_t) ((TH2I*)fPHOSBadChannelMap->At(imod))->GetBinContent(iCol,iRow); |
fa991e42 | 77 | else return 0;}//Channel is ok by default |
765d44e7 | 78 | |
79 | void SetEMCALChannelStatus(Int_t iSM , Int_t iCol, Int_t iRow, Double_t c = 1) { | |
247abff4 | 80 | fEMCALRecoUtils->SetEMCALChannelStatus(iSM,iCol,iRow,c);} |
765d44e7 | 81 | |
82 | void SetPHOSChannelStatus (Int_t imod, Int_t iCol, Int_t iRow, Double_t c = 1) { | |
37c0bcde | 83 | if(!fPHOSBadChannelMap) InitPHOSBadChannelStatusMap() ; |
765d44e7 | 84 | ((TH2I*)fPHOSBadChannelMap->At(imod))->SetBinContent(iCol,iRow,c);} |
85 | ||
247abff4 | 86 | TH2I * GetEMCALChannelStatusMap(Int_t iSM) const {return fEMCALRecoUtils->GetEMCALChannelStatusMap(iSM);} |
765d44e7 | 87 | TH2I * GetPHOSChannelStatusMap(Int_t imod) const {return (TH2I*)fPHOSBadChannelMap->At(imod);} |
88 | ||
247abff4 | 89 | void SetEMCALChannelStatusMap(TObjArray *map) {fEMCALRecoUtils->SetEMCALChannelStatusMap(map);} |
765d44e7 | 90 | void SetPHOSChannelStatusMap (TObjArray *map) {fPHOSBadChannelMap = map;} |
91 | ||
92 | Bool_t ClusterContainsBadChannel(TString calorimeter,UShort_t* cellList, Int_t nCells); | |
93 | ||
94 | //Calorimeter indexes information | |
95 | Int_t GetModuleNumber(AliAODPWG4Particle * particle, AliVEvent* inputEvent) const; | |
c8fe2783 | 96 | Int_t GetModuleNumber(AliVCluster * cluster) const; |
765d44e7 | 97 | Int_t GetModuleNumberCellIndexes(const Int_t absId, const TString calo, Int_t & icol, Int_t & irow, Int_t &iRCU) const ; |
98 | ||
99 | //Modules fiducial region | |
c8fe2783 | 100 | Bool_t CheckCellFiducialRegion(AliVCluster* cluster, AliVCaloCells* cells, AliVEvent * event, Int_t iev=0) const ; |
765d44e7 | 101 | void SetNumberOfCellsFromPHOSBorder(Int_t n) {fNCellsFromPHOSBorder = n; } |
d7c10d78 | 102 | Int_t GetNumberOfCellsFromPHOSBorder() const {return fNCellsFromPHOSBorder; } |
103 | void SetNumberOfCellsFromEMCALBorder(Int_t n) {fEMCALRecoUtils->SetNumberOfCellsFromEMCALBorder(n) ;} | |
104 | Int_t GetNumberOfCellsFromEMCALBorder() const {return fEMCALRecoUtils->GetNumberOfCellsFromEMCALBorder();} | |
105 | void SwitchOnNoFiducialBorderInEMCALEta0() {fEMCALRecoUtils->SwitchOnNoFiducialBorderInEMCALEta0() ;} | |
106 | void SwitchOffNoFiducialBorderInEMCALEta0() {fEMCALRecoUtils->SwitchOffNoFiducialBorderInEMCALEta0() ;} | |
107 | Bool_t IsEMCALNoBorderAtEta0() const {return fEMCALRecoUtils->IsEMCALNoBorderAtEta0() ;} | |
247abff4 | 108 | |
09e819c9 | 109 | // Recalibration |
110 | Bool_t IsRecalibrationOn() const { return fRecalibration ; } | |
19db8f8c | 111 | void SwitchOnRecalibration() {fRecalibration = kTRUE ; InitPHOSRecalibrationFactors(); fEMCALRecoUtils->SwitchOnRecalibration();} |
112 | void SwitchOffRecalibration() {fRecalibration = kFALSE;fEMCALRecoUtils->SwitchOffRecalibration();} | |
09e819c9 | 113 | |
09e819c9 | 114 | void InitPHOSRecalibrationFactors () ; |
115 | ||
19db8f8c | 116 | Float_t GetEMCALChannelRecalibrationFactor(Int_t iSM , Int_t iCol, Int_t iRow) const { return fEMCALRecoUtils->GetEMCALChannelRecalibrationFactor(iSM , iCol, iRow);} |
78219bac | 117 | |
09e819c9 | 118 | Float_t GetPHOSChannelRecalibrationFactor (Int_t imod, Int_t iCol, Int_t iRow) const { |
78219bac | 119 | if(fPHOSRecalibrationFactors)return (Float_t) ((TH2F*)fPHOSRecalibrationFactors->At(imod))->GetBinContent(iCol,iRow); |
120 | else return 1;} | |
121 | ||
09e819c9 | 122 | void SetEMCALChannelRecalibrationFactor(Int_t iSM , Int_t iCol, Int_t iRow, Double_t c = 1) { |
19db8f8c | 123 | fEMCALRecoUtils->SetEMCALChannelRecalibrationFactor(iSM,iCol,iRow,c);} |
09e819c9 | 124 | |
125 | void SetPHOSChannelRecalibrationFactor (Int_t imod, Int_t iCol, Int_t iRow, Double_t c = 1) { | |
78219bac | 126 | if(!fPHOSRecalibrationFactors) InitPHOSRecalibrationFactors(); |
127 | ((TH2F*)fPHOSRecalibrationFactors->At(imod))->SetBinContent(iCol,iRow,c);} | |
09e819c9 | 128 | |
19db8f8c | 129 | void SetEMCALChannelRecalibrationFactors(Int_t iSM , TH2F* h) {fEMCALRecoUtils->SetEMCALChannelRecalibrationFactors(iSM,h);} |
09e819c9 | 130 | void SetPHOSChannelRecalibrationFactors(Int_t imod , TH2F* h) {fPHOSRecalibrationFactors ->AddAt(h,imod);} |
131 | ||
19db8f8c | 132 | TH2F * GetEMCALChannelRecalibrationFactors(Int_t iSM) const {return fEMCALRecoUtils->GetEMCALChannelRecalibrationFactors(iSM);} |
09e819c9 | 133 | TH2F * GetPHOSChannelRecalibrationFactors(Int_t imod) const {return (TH2F*)fPHOSRecalibrationFactors->At(imod);} |
134 | ||
19db8f8c | 135 | void SetEMCALChannelRecalibrationFactors(TObjArray *map) {fEMCALRecoUtils->SetEMCALChannelRecalibrationFactors(map);} |
09e819c9 | 136 | void SetPHOSChannelRecalibrationFactors (TObjArray *map) {fPHOSRecalibrationFactors = map;} |
137 | ||
c8fe2783 | 138 | Float_t RecalibrateClusterEnergy(AliVCluster* cluster, AliVCaloCells * cells); |
765d44e7 | 139 | |
f2ccb5b8 | 140 | //EMCAL specific utils for the moment |
9584c261 | 141 | void SetEMCALRecoUtils(AliEMCALRecoUtils * ru) {fEMCALRecoUtils = ru;} |
142 | AliEMCALRecoUtils* GetEMCALRecoUtils() const {return fEMCALRecoUtils;} | |
143 | ||
144 | Bool_t IsCorrectionOfClusterEnergyOn() const { return fCorrectELinearity ; } | |
145 | void SwitchOnCorrectClusterLinearity() { fCorrectELinearity = kTRUE; } | |
146 | void SwitchOffCorrectClusterLinearity() { fCorrectELinearity = kFALSE; } | |
147 | void CorrectClusterEnergy(AliVCluster *cl); | |
148 | ||
149 | Bool_t IsRecalculationOfClusterPositionOn() const { return fRecalculatePosition ; } | |
150 | void SwitchOnRecalculateClusterPosition() { fRecalculatePosition = kTRUE; } | |
151 | void SwitchOffRecalculateClusterPosition() { fRecalculatePosition = kFALSE; } | |
152 | void RecalculateClusterPosition(AliVCaloCells* cells, AliVCluster* clu); | |
5ef94e1b | 153 | void RecalculateClusterShowerShapeParameters(AliVCaloCells* cells, AliVCluster* clu){ |
154 | fEMCALRecoUtils->RecalculateClusterShowerShapeParameters((AliEMCALGeometry*)fEMCALGeo, cells, clu); | |
155 | } | |
156 | void RecalculateClusterPID(AliVCluster* clu) {fEMCALRecoUtils->RecalculateClusterPID(clu);} | |
9584c261 | 157 | |
f2ccb5b8 | 158 | //Track matching recalculation |
159 | void RecalculateClusterTrackMatching(AliVEvent * event) {if (fRecalculateMatching) fEMCALRecoUtils->FindMatches(event);} | |
160 | void GetMatchedResiduals(Int_t index, Float_t &dR, Float_t &dZ) {if (fRecalculateMatching) fEMCALRecoUtils->GetMatchedResiduals(index,dR,dZ);} | |
161 | //This could be used for PHOS ... | |
162 | void SwitchOnRecalculateClusterTrackMatching() { fRecalculateMatching = kTRUE; } | |
163 | void SwitchOffRecalculateClusterTrackMatching() { fRecalculateMatching = kFALSE; } | |
164 | Bool_t IsRecalculationOfClusterTrackMatchingOn() const { return fRecalculateMatching ; } | |
165 | Float_t GetCutR() const { return fCutR; } | |
166 | Float_t GetCutZ() const { return fCutZ; } | |
167 | ||
168 | void SetCutR(Float_t cutR) { fCutR=cutR; fEMCALRecoUtils->SetCutR(cutR); } | |
169 | void SetCutZ(Float_t cutZ) { fCutZ=cutZ; fEMCALRecoUtils->SetCutZ(cutZ);} | |
170 | ||
765d44e7 | 171 | private: |
172 | ||
09e819c9 | 173 | Int_t fDebug; // Debugging level |
174 | TString fEMCALGeoName; // Name of geometry to use for EMCAL. | |
175 | TString fPHOSGeoName; // Name of geometry to use for PHOS. | |
176 | AliEMCALGeoUtils * fEMCALGeo ; //! EMCAL geometry pointer | |
177 | AliPHOSGeoUtils * fPHOSGeo ; //! PHOS geometry pointer | |
178 | Bool_t fEMCALGeoMatrixSet; // Check if the transformation matrix is set for EMCAL | |
179 | Bool_t fPHOSGeoMatrixSet ; // Check if the transformation matrix is set for PHOS | |
180 | Bool_t fRemoveBadChannels; // Check the channel status provided and remove clusters with bad channels | |
2be3914b | 181 | TObjArray * fPHOSBadChannelMap; // Array of histograms with map of bad channels, PHOS |
09e819c9 | 182 | Int_t fNCellsFromPHOSBorder; // Number of cells from PHOS border the cell with maximum amplitude has to be. |
09e819c9 | 183 | Bool_t fRecalibration; // Switch on or off the recalibration |
2be3914b | 184 | TObjArray * fPHOSRecalibrationFactors; // Array of histograms with map of recalibration factors, PHOS |
9584c261 | 185 | AliEMCALRecoUtils* fEMCALRecoUtils; // EMCAL utils for cluster rereconstruction |
186 | Bool_t fRecalculatePosition; // Recalculate cluster position | |
187 | Bool_t fCorrectELinearity ; // Correct cluster energy linearity | |
f2ccb5b8 | 188 | Bool_t fRecalculateMatching; // Recalculate cluster position |
189 | Float_t fCutR; // dR cut on matching | |
190 | Float_t fCutZ; // dZ cut on matching | |
191 | ||
192 | ClassDef(AliCalorimeterUtils,4) | |
765d44e7 | 193 | } ; |
194 | ||
195 | ||
196 | #endif //ALICALORIMETERUTILS_H | |
197 | ||
198 | ||
199 |