]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrBase/AliCalorimeterUtils.h
All: Add possibility to recalculate track matching in EMCAL
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliCalorimeterUtils.h
CommitLineData
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"
19class TArrayF;
20#include "TH2I.h"
21
22//--- ANALYSIS system ---
23class AliVEvent;
24class AliAODPWG4Particle;
c8fe2783 25class AliVCluster;
26class AliVCaloCells;
765d44e7 27#include "AliPHOSGeoUtils.h"
5ef94e1b 28#include "AliEMCALGeometry.h"
19db8f8c 29#include "AliEMCALRecoUtils.h"
765d44e7 30
31class 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