1 #ifndef DIGITIZER_ILDCCALODIGI_H
2 #define DIGITIZER_ILDCCALODIGI_H 1
4 #include "marlin/Processor.h"
5 #include <IMPL/CalorimeterHitImpl.h>
6 #include <IMPL/LCFlagImpl.h>
7 #include "CalorimeterHitType.h"
15 #include "CLHEP/Random/MTwistEngine.h"
17 using namespace lcio ;
18 using namespace marlin ;
96 virtual void processRunHeader( LCRunHeader* run ) ;
98 virtual void processEvent( LCEvent * evt ) ;
100 virtual void check( LCEvent * evt ) ;
104 virtual void fillECALGaps() ;
106 float digitalHcalCalibCoeff(CHT::Layout,
float energy );
108 float analogueHcalCalibCoeff(CHT::Layout,
int layer );
110 float digitalEcalCalibCoeff(
int layer );
112 float analogueEcalCalibCoeff(
int layer );
116 float ecalEnergyDigi(
float energy,
int id0,
int id1);
117 float ahcalEnergyDigi(
float energy,
int id0,
int id1);
119 float siliconDigi(
float energy);
120 float scintillatorDigi(
float energy,
bool isEcal);
121 LCCollection* combineVirtualStripCells(LCCollection* col,
bool isBarrel,
int orientation );
123 int getNumberOfVirtualCells();
124 std::vector < std::pair <int, int> > & getLayerConfig();
125 void checkConsistency(std::string colName,
int layer);
126 std::pair < int, int > getLayerProperties( std::string colName,
int layer );
127 int getStripOrientationFromColName( std::string colName );
135 std::vector<std::string> _ecalCollections{};
136 std::vector<std::string> _hcalCollections{};
137 std::vector<std::string> _outputEcalCollections{};
138 std::vector<std::string> _outputHcalCollections{};
140 std::string _outputRelCollection{};
142 float _thresholdEcal{};
143 std::string _unitThresholdEcal{};
144 std::vector<float> _thresholdHcal{};
145 std::string _unitThresholdHcal{};
148 int _mapsEcalCorrection{};
151 bool _ECAL_stripHits{};
153 std::vector<float> _calibrCoeffEcal{};
154 std::vector<float> _calibrCoeffHcalBarrel{};
155 std::vector<float> _calibrCoeffHcalEndCap{};
156 std::vector<float> _calibrCoeffHcalOther{};
158 std::vector<int> _ecalLayers{};
159 std::vector<int> _hcalLayers{};
161 int _ecalGapCorrection{};
162 float _ecalGapCorrectionFactor{};
163 float _ecalModuleGapCorrectionFactor{};
164 float _ecalEndcapCorrectionFactor{};
165 float _hcalEndcapCorrectionFactor{};
166 int _hcalGapCorrection{};
167 float _hcalModuleGapCorrectionFactor{};
172 float _zOfEcalEndcap{};
182 int _useEcalTiming{};
183 int _ecalCorrectTimesForPropagation{};
184 float _ecalTimeWindowMin{};
185 float _ecalBarrelTimeWindowMax{};
186 float _ecalEndcapTimeWindowMax{};
187 float _ecalDeltaTimeHitResolution{};
188 float _ecalTimeResolution{};
189 bool _ecalSimpleTimingCut{};
191 int _useHcalTiming{};
192 int _hcalCorrectTimesForPropagation{};
193 float _hcalTimeWindowMin{};
194 float _hcalBarrelTimeWindowMax{};
195 float _hcalEndcapTimeWindowMax{};
196 float _hcalDeltaTimeHitResolution{};
197 float _hcalTimeResolution{};
198 bool _hcalSimpleTimingCut{};
205 float _calibEcalMip{};
206 int _applyEcalDigi{};
207 float _ecal_PPD_pe_per_mip{};
208 int _ecal_PPD_n_pixels{};
210 float _ecal_misCalibNpix{};
212 float _misCalibEcal_uncorrel{};
213 bool _misCalibEcal_uncorrel_keep{};
214 float _misCalibEcal_correl{};
216 float _deadCellFractionEcal{};
217 bool _deadCellEcal_keep{};
219 float _strip_abs_length{};
220 float _ecal_pixSpread{};
221 float _ecal_elec_noise{};
222 float _ecalMaxDynMip{};
223 int _ecalStrip_default_nVirt{};
224 std::string _ecal_deafult_layer_config{};
227 float _calibHcalMip{};
228 int _applyHcalDigi{};
229 float _hcal_PPD_pe_per_mip{};
230 int _hcal_PPD_n_pixels{};
231 float _hcal_misCalibNpix{};
233 float _misCalibHcal_uncorrel{};
234 bool _misCalibHcal_uncorrel_keep{};
235 float _misCalibHcal_correl{};
237 float _deadCellFractionHcal{};
238 bool _deadCellHcal_keep{};
239 float _hcal_pixSpread{};
240 float _hcal_elec_noise{};
241 float _hcalMaxDynMip{};
246 std::vector < std::pair <int, int> > _layerTypes{};
247 int _strip_virt_cells{};
248 int _countWarnings{};
249 std::string _ecalLayout{};
251 float _event_correl_miscalib_ecal{};
252 float _event_correl_miscalib_hcal{};
254 CLHEP::MTwistEngine *_randomEngineDeadCellEcal{};
255 CLHEP::MTwistEngine *_randomEngineDeadCellHcal{};
257 std::map < std::pair <int, int> ,
float > _ECAL_cell_miscalibs{};
258 std::map < std::pair <int, int> ,
bool > _ECAL_cell_dead{};
259 std::map < std::pair <int, int> ,
float > _HCAL_cell_miscalibs{};
260 std::map < std::pair <int, int> ,
bool > _HCAL_cell_dead{};
270 std::string _cellIDLayerString{};
271 std::string _cellIDModuleString{};
272 std::string _cellIDStaveString{};
273 std::string _cellIDIndexIString{};
274 std::string _cellIDIndexJString{};
286 TH2F* fHcalLayer11{};
287 TH2F* fHcalLayer21{};
288 TH2F* fHcalLayer31{};
289 TH2F* fHcalLayer41{};
290 TH2F* fHcalLayer51{};
291 TH2F* fHcalLayer61{};
292 TH2F* fHcalLayer71{};
293 TH1F* fHcalRLayer1{};
294 TH1F* fHcalRLayer11{};
295 TH1F* fHcalRLayer21{};
296 TH1F* fHcalRLayer31{};
297 TH1F* fHcalRLayer41{};
298 TH1F* fHcalRLayer51{};
299 TH1F* fHcalRLayer61{};
300 TH1F* fHcalRLayer71{};
301 TH1F* fHcalRLayerNorm{};
303 TH1F* fEcalRLayerNorm{};
305 TH2F* fEcalLayer11{};
306 TH2F* fEcalLayer21{};
307 TH1F* fEcalRLayer1{};
308 TH1F* fEcalRLayer11{};
309 TH1F* fEcalRLayer21{};
virtual Processor * newProcessor()