]>
Commit | Line | Data |
---|---|---|
6d67b5a7 | 1 | #ifndef ALIEMCALTENDERSUPPLY_H |
2 | #define ALIEMCALTENDERSUPPLY_H | |
3 | ||
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
5 | * See cxx source for full Copyright notice */ | |
6 | ||
7 | //////////////////////////////////////////////////////////////////////// | |
8 | // // | |
9 | // EMCAL tender, apply corrections to EMCAl clusters // | |
766cc9de | 10 | // and do track matching. // |
11 | // Author: Deepa Thomas (Utrecht University) // | |
c05ffa77 | 12 | // Later mods/rewrite: Jiri Kral (University of Jyvaskyla) // |
dd8e12d1 | 13 | // S. Aiola, C. Loizides : Make it work for AODs // |
6d67b5a7 | 14 | // // |
15 | //////////////////////////////////////////////////////////////////////// | |
16 | ||
766cc9de | 17 | #include "AliTenderSupply.h" |
6d67b5a7 | 18 | |
b20bc239 | 19 | class TTree; |
20 | class TClonesArray; | |
21 | ||
6d67b5a7 | 22 | class AliVCluster; |
23 | class AliEMCALRecoUtils; | |
24 | class AliEMCALGeometry; | |
25 | class TGeoHMatrix; | |
26 | class TTree; | |
27 | class TFile; | |
28 | class TString; | |
b20bc239 | 29 | class AliEMCALClusterizer; |
b20bc239 | 30 | class AliEMCALAfterBurnerUF; |
4d3c549c | 31 | class AliEMCALRecParam; |
dd8e12d1 | 32 | class AliAnalysisTaskSE; |
33 | class AliVEvent; | |
acf53135 | 34 | |
6d67b5a7 | 35 | class AliEMCALTenderSupply: public AliTenderSupply { |
36 | ||
37 | public: | |
38 | AliEMCALTenderSupply(); | |
39 | AliEMCALTenderSupply(const char *name, const AliTender *tender=NULL); | |
dd8e12d1 | 40 | AliEMCALTenderSupply(const char *name, AliAnalysisTaskSE *task); |
6d67b5a7 | 41 | virtual ~AliEMCALTenderSupply(); |
42 | ||
ef51b5f7 | 43 | enum NonlinearityFunctions{kPi0MC=0,kPi0GammaGamma=1,kPi0GammaConversion=2,kNoCorrection=3,kBeamTest=4,kBeamTestCorrected=5}; |
a0beb012 | 44 | enum MisalignSettings{kdefault=0,kSurveybyS=1,kSurveybyM=2}; |
ef51b5f7 | 45 | |
766cc9de | 46 | virtual void Init(); |
47 | virtual void ProcessEvent(); | |
dd8e12d1 | 48 | |
49 | void SetTask(AliAnalysisTaskSE *task) { fTask = task ;} | |
98e8eede | 50 | void SetDefaults(); |
dd8e12d1 | 51 | |
e768f43c | 52 | void SetEMCALGeometryName(const char *name) { fEMCALGeoName = name ;} |
766cc9de | 53 | TString EMCALGeometryName() const { return fEMCALGeoName ;} |
6d67b5a7 | 54 | |
766cc9de | 55 | void SetDebugLevel(Int_t level) { fDebugLevel=level ;} |
6d67b5a7 | 56 | |
766cc9de | 57 | void SetBasePath(const Char_t *basePath) { fBasePath = basePath ;} |
b20bc239 | 58 | |
e768f43c | 59 | void SetConfigFileName(const char *name) { fConfigName = name ;} |
413a7463 | 60 | |
766cc9de | 61 | void SetNonLinearityFunction(Int_t fun) { fNonLinearFunc = fun ;} |
62 | Int_t GetNonLinearityFunction() const { return fNonLinearFunc ;} | |
6d67b5a7 | 63 | |
766cc9de | 64 | void SetNonLinearityThreshold(Int_t threshold) { fNonLinearThreshold = threshold ;} //only for Alexei's non linearity correction |
65 | Int_t GetNonLinearityThreshold() const { return fNonLinearThreshold ;} | |
6d67b5a7 | 66 | |
50b7a951 | 67 | void SwitchOnNonLinearityCorrection() { fDoNonLinearity = kTRUE ;} |
68 | void SwitchOffNonLinearityCorrection() { fDoNonLinearity = kFALSE ;} | |
69 | ||
766cc9de | 70 | void SwitchOnReCalibrateCluster() { fReCalibCluster = kTRUE ;} |
71 | void SwitchOffReCalibrateCluster() { fReCalibCluster = kFALSE ;} | |
c958a2f7 | 72 | |
766cc9de | 73 | void SwitchOnRecalculateClusPos() { fRecalClusPos = kTRUE ;} |
74 | void SwitchOffRecalculateClusPos() { fRecalClusPos = kFALSE ;} | |
6d67b5a7 | 75 | |
dd8e12d1 | 76 | void SetMisalignmentMatrixSurvey(Int_t misalignSurvey) { fMisalignSurvey = misalignSurvey ;} |
77 | Int_t GetMisalignmentMatrixSurvey() const { return fMisalignSurvey ;} | |
acf53135 | 78 | |
766cc9de | 79 | void SwitchOnCellFiducialRegion() { fFiducial = kTRUE ;} |
80 | void SwitchOffCellFiducialRegion() { fFiducial = kFALSE ;} | |
6d67b5a7 | 81 | |
50b7a951 | 82 | void SetNumberOfCellsFromEMCALBorder(Int_t n) { fNCellsFromEMCALBorder = n ;} |
83 | Int_t GetNumberOfCellsFromEMCALBorder() const { return fNCellsFromEMCALBorder ;} | |
6d67b5a7 | 84 | |
766cc9de | 85 | void SwitchOnRecalDistBadChannel() { fRecalDistToBadChannels = kTRUE ;} |
86 | void SwitchOffRecalDistBadChannel() { fRecalDistToBadChannels = kFALSE ;} | |
6d67b5a7 | 87 | |
50b7a951 | 88 | void SwitchOnRecalShowerShape() { fRecalShowerShape = kTRUE ;} |
89 | void SwitchOffRecalShowerShape() { fRecalShowerShape = kFALSE ;} | |
90 | ||
766cc9de | 91 | Float_t GetRCut() const { return fRcut ;} |
92 | void SetRCut(Float_t rcut) { fRcut = rcut ;} | |
6d67b5a7 | 93 | |
766cc9de | 94 | Double_t GetMass() const { return fMass ;} |
95 | void SetMass(Double_t mass) { fMass = mass ;} | |
6d67b5a7 | 96 | |
766cc9de | 97 | Double_t GetStep() const { return fStep ;} |
98 | void SetStep(Double_t step) { fStep = step ;} | |
6d67b5a7 | 99 | |
6b7df55d | 100 | Double_t GetEtaCut() const { return fEtacut ;} |
50b7a951 | 101 | void SetEtaCut(Double_t eta) { fEtacut = eta ;} |
102 | ||
103 | Double_t GetPhiCut() const { return fPhicut ;} | |
104 | void SetPhiCut(Double_t phi) { fPhicut = phi ;} | |
105 | ||
106 | Float_t GetExoticCellFraction() const { return fExoticCellFraction ;} | |
107 | void SetExoticCellFraction(Float_t f) { fExoticCellFraction = f ;} | |
428f69ce | 108 | |
50b7a951 | 109 | Float_t GetExoticCellDiffTime() const { return fExoticCellDiffTime ;} |
110 | void SetExoticCellDiffTime(Float_t f) { fExoticCellDiffTime = f ;} | |
111 | ||
112 | Float_t GetExoticCellMinAmplitude() const { return fExoticCellMinAmplitude ;} | |
113 | void SetExoticCellMinAmplitude(Float_t f) { fExoticCellMinAmplitude = f ;} | |
428f69ce | 114 | |
6b7df55d | 115 | void SwitchOnReclustering() { fReClusterize = kTRUE ;} |
116 | void SwitchOffReclustering() { fReClusterize = kFALSE ;} | |
428f69ce | 117 | |
766cc9de | 118 | void SwitchOnCutEtaPhiSum() { fCutEtaPhiSum=kTRUE; fCutEtaPhiSeparate=kFALSE ;} |
119 | void SwitchOnCutEtaPhiSeparate() { fCutEtaPhiSeparate=kTRUE; fCutEtaPhiSum=kFALSE ;} | |
b20bc239 | 120 | |
766cc9de | 121 | void SwitchOnLoadOwnGeometryMatrices() { fLoadGeomMatrices = kTRUE ;} |
122 | void SwitchOffLoadOwnGeometryMatrices() { fLoadGeomMatrices = kFALSE ;} | |
123 | void SetGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fEMCALMatrix[i] = m ;} | |
3b233502 | 124 | |
8b775c10 | 125 | AliEMCALRecParam *GetRecParam() const { return fRecParam ;} |
a0beb012 | 126 | void SetRecParam(AliEMCALRecParam *p) { fRecParam = p ;} |
8b775c10 | 127 | |
acf53135 | 128 | AliEMCALRecoUtils *GetRecoUtils() const { return fEMCALRecoUtils ;} |
5b6de4be | 129 | void SetRecoUtils(AliEMCALRecoUtils *r) { fEMCALRecoUtils = r ;} |
130 | ||
8b775c10 | 131 | void SwitchOnUpdateCell() { fUpdateCell = kTRUE ;} |
50b7a951 | 132 | void SwitchOffUpdateCell() { fUpdateCell = kFALSE ;} |
133 | ||
134 | void SwitchOnBadCellRemove() { fBadCellRemove = kTRUE ;} | |
135 | void SwitchOffBadCellRemove() { fBadCellRemove = kFALSE ;} | |
136 | ||
137 | void SwitchOnClusterBadChannelCheck() { fClusterBadChannelCheck = kTRUE ;} | |
138 | void SwitchOffClusterBadChannelCheck() { fClusterBadChannelCheck = kFALSE ;} | |
139 | ||
140 | void SwitchOnExoticCellRemove() { fRejectExoticCells = kTRUE ;} | |
141 | void SwitchOffExoticCellRemove() { fRejectExoticCells = kFALSE ;} | |
142 | ||
143 | void SwitchOnClusterExoticChannelCheck() { fRejectExoticClusters = kTRUE ;} | |
144 | void SwitchOffClusterExoticChannelCheck() { fRejectExoticClusters = kFALSE ;} | |
145 | ||
146 | void SwitchOnCalibrateEnergy() { fCalibrateEnergy = kTRUE ;} | |
147 | void SwitchOffCalibrateEnergy() { fCalibrateEnergy = kFALSE ;} | |
148 | ||
149 | void SwitchOnCalibrateTime() { fCalibrateTime = kTRUE ;} | |
150 | void SwitchOffCalibrateTime() { fCalibrateTime = kFALSE ;} | |
a0beb012 | 151 | |
152 | void SwitchOnUpdateCellOnly() { fDoUpdateOnly = kTRUE ;} | |
50b7a951 | 153 | void SwitchOffUpdateCellOnly() { fDoUpdateOnly = kFALSE ;} |
a0beb012 | 154 | |
155 | void SwitchOnTrackMatch() { fDoTrackMatch = kTRUE ;} | |
50b7a951 | 156 | void SwitchOffTrackMatch() { fDoTrackMatch = kFALSE ;} |
6d67b5a7 | 157 | |
158 | private: | |
159 | ||
dd8e12d1 | 160 | AliVEvent* GetEvent(); |
dd8e12d1 | 161 | TString GetBeamType(); |
dd8e12d1 | 162 | Bool_t RunChanged() const; |
dd8e12d1 | 163 | Int_t InitBadChannels(); |
dd8e12d1 | 164 | Bool_t InitClusterization(); |
dd8e12d1 | 165 | Int_t InitRecParam(); |
dd8e12d1 | 166 | Bool_t InitMisalignMatrix(); |
dd8e12d1 | 167 | Int_t InitRecalib(); |
7bf608c9 | 168 | Int_t InitRunDepRecalib(); |
dd8e12d1 | 169 | Int_t InitTimeCalibration(); |
dd8e12d1 | 170 | void Clusterize(); |
dd8e12d1 | 171 | void FillDigitsArray(); |
dd8e12d1 | 172 | void GetPass(); |
dd8e12d1 | 173 | void RecPoints2Clusters(TClonesArray *clus); |
dd8e12d1 | 174 | void RecalibrateCells(); |
dd8e12d1 | 175 | void UpdateCells(); |
dd8e12d1 | 176 | void UpdateClusters(); |
766cc9de | 177 | |
98e8eede | 178 | AliAnalysisTaskSE *fTask; // analysis task |
179 | Int_t fRun; // current run number | |
6931af96 | 180 | AliEMCALGeometry *fEMCALGeo; // EMCAL geometry |
98e8eede | 181 | TString fEMCALGeoName; // name of geometry to use. |
182 | AliEMCALRecoUtils *fEMCALRecoUtils; // pointer to EMCAL utilities for clusterization | |
183 | TString fConfigName; // name of analysis configuration file | |
184 | Int_t fDebugLevel; // debug level | |
185 | Int_t fNonLinearFunc; // non linearity function | |
186 | Int_t fNonLinearThreshold; // non linearity threshold value for kBeamTesh non linearity function | |
187 | Bool_t fReCalibCluster; // switch for Recalibrate clusters | |
188 | Bool_t fUpdateCell; // flag cell update | |
189 | Bool_t fCalibrateEnergy; // flag cell energy clibration | |
190 | Bool_t fCalibrateTime; // flag cell time clSibration | |
191 | Bool_t fDoNonLinearity; // nNon linearity correction flag | |
192 | Bool_t fBadCellRemove; // zero bad cells | |
50b7a951 | 193 | Bool_t fRejectExoticCells; // reject exotic cells |
194 | Bool_t fRejectExoticClusters; // recect clusters with exotic cells | |
98e8eede | 195 | Bool_t fClusterBadChannelCheck; // check clusters for bad channels |
196 | TGeoHMatrix *fEMCALMatrix[12]; // geometry matrices with misalignments | |
197 | Bool_t fRecalClusPos; // switch for applying missalignment | |
198 | Bool_t fFiducial; // switch for checking cells in the fiducial region | |
199 | Int_t fNCellsFromEMCALBorder; // number os cells from EMCAL border | |
200 | Bool_t fRecalDistToBadChannels; // switch for recalculation cluster position from bad channel | |
201 | Bool_t fRecalShowerShape; // switch for recalculation of the shower shape | |
202 | TTree *fInputTree; //!input data tree | |
203 | TFile *fInputFile; //!input data file | |
204 | TString fFilepass; //!input data pass number | |
205 | Double_t fMass; // mass for track matching | |
206 | Double_t fStep; // step size during track matching | |
207 | Bool_t fCutEtaPhiSum; // swicth to apply residual cut together | |
208 | Bool_t fCutEtaPhiSeparate; // swicth to apply residual cut separately | |
209 | Float_t fRcut; // residual cut for track matching | |
210 | Float_t fEtacut; // eta cut for track matching | |
211 | Float_t fPhicut; // phi cut for track matching | |
212 | TString fBasePath; // base folder path to get root files | |
213 | Bool_t fReClusterize; // switch for reclustering | |
214 | AliEMCALClusterizer *fClusterizer; //!clusterizer | |
215 | Bool_t fGeomMatrixSet; // set geometry matrices only once, for the first event. | |
216 | Bool_t fLoadGeomMatrices; // matrices set from configuration, not get from geometry.root or from ESDs/AODs | |
217 | AliEMCALRecParam *fRecParam; // reconstruction parameters container | |
218 | Bool_t fDoTrackMatch; // do track matching | |
219 | Bool_t fDoUpdateOnly; // do only update of cells | |
220 | AliEMCALAfterBurnerUF *fUnfolder; //!unfolding procedure | |
221 | TClonesArray *fDigitsArr; //!digits array | |
222 | TObjArray *fClusterArr; //!recpoints array | |
6931af96 | 223 | Int_t fMisalignSurvey; // misalignment matrix survey |
98e8eede | 224 | Float_t fExoticCellFraction; // good cell if fraction < 1-ecross/ecell |
225 | Float_t fExoticCellDiffTime; // if time of candidate to exotic and close cell is too different (in ns), it must be noisy, set amp to 0 | |
226 | Float_t fExoticCellMinAmplitude; // check for exotic only if amplitud is larger than this value | |
8b775c10 | 227 | |
6d67b5a7 | 228 | AliEMCALTenderSupply(const AliEMCALTenderSupply&c); |
229 | AliEMCALTenderSupply& operator= (const AliEMCALTenderSupply&c); | |
230 | ||
98e8eede | 231 | ClassDef(AliEMCALTenderSupply, 12); // EMCAL tender task |
6d67b5a7 | 232 | }; |
6d67b5a7 | 233 | #endif |