CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
HcalDigitizer Class Reference

#include <HcalDigitizer.h>

Public Member Functions

void accumulate (edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *)
 
void accumulate (PileUpEventPrincipal const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *)
 
void finalizeEvent (edm::Event &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *)
 
 HcalDigitizer (const edm::ParameterSet &ps, edm::ConsumesCollector &iC)
 
void initializeEvent (edm::Event const &e, edm::EventSetup const &c)
 
void setHBHENoiseSignalGenerator (HcalBaseSignalGenerator *noiseGenerator)
 
void setHFNoiseSignalGenerator (HcalBaseSignalGenerator *noiseGenerator)
 
void setHONoiseSignalGenerator (HcalBaseSignalGenerator *noiseGenerator)
 
void setQIE10NoiseSignalGenerator (HcalBaseSignalGenerator *noiseGenerator)
 
void setQIE11NoiseSignalGenerator (HcalBaseSignalGenerator *noiseGenerator)
 
void setZDCNoiseSignalGenerator (HcalBaseSignalGenerator *noiseGenerator)
 
virtual ~HcalDigitizer ()
 

Private Types

typedef CaloTDigitizer< HBHEDigitizerTraits, CaloTDigitizerQIE8RunHBHEDigitizer
 
typedef CaloTDigitizer< HFDigitizerTraits, CaloTDigitizerQIE8RunHFDigitizer
 
typedef CaloTDigitizer< HODigitizerTraits, CaloTDigitizerQIE8RunHODigitizer
 
typedef CaloTDigitizer< HcalQIE10DigitizerTraits, CaloTDigitizerQIE1011RunQIE10Digitizer
 
typedef CaloTDigitizer< HcalQIE11DigitizerTraits, CaloTDigitizerQIE1011RunQIE11Digitizer
 
typedef CaloTDigitizer< ZDCDigitizerTraits, CaloTDigitizerQIE8RunZDCDigitizer
 

Private Member Functions

void accumulateCaloHits (edm::Handle< std::vector< PCaloHit >> const &hcalHits, edm::Handle< std::vector< PCaloHit >> const &zdcHits, int bunchCrossing, CLHEP::HepRandomEngine *, const HcalTopology *h)
 
void buildHBHEQIECells (const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
 
void buildHFQIECells (const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
 
void buildHOSiPMCells (const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
 
void checkGeometry (const edm::EventSetup &eventSetup)
 
void darkening (std::vector< PCaloHit > &hcalHits)
 
void fillFakeHits ()
 some hits in each subdetector, just for testing purposes More...
 
void setup (const edm::EventSetup &es)
 
void updateGeometry (const edm::EventSetup &eventSetup)
 

Private Attributes

bool agingFlagHB
 
bool agingFlagHE
 
const edm::ESGetToken< HcalDbService, HcalDbRecordconditionsToken_
 
bool debugCS_
 
double deliveredLumi
 
bool doHFWindow_
 
std::vector< DetIdhbheCells
 
bool hbhegeo
 
const HcalTimeSlewhcalTimeSlew_delay_
 
const edm::ESGetToken< HcalTimeSlew, HcalTimeSlewRecordhcalTimeSlew_delay_token_
 
edm::EDGetTokenT< std::vector< PCaloHit > > hcalToken_
 
bool hfgeo
 
std::string hitsProducer_
 
bool hogeo
 
bool ignoreTime_
 
std::vector< PCaloHitinjectedHits_
 
std::vector< int > injectedHitsCells_
 
std::vector< double > injectedHitsEnergy_
 
std::vector< double > injectedHitsTime_
 
bool injectTestHits_
 
bool isHCAL
 
bool isZDC
 
bool killHE_
 
const HBHEDarkeningm_HBDarkening
 
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecordm_HBDarkeningToken
 
const HBHEDarkeningm_HEDarkening
 
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecordm_HEDarkeningToken
 
std::unique_ptr< HFRecalibrationm_HFRecalibration
 
edm::ESGetToken< HcalMCParams, HcalMCParamsRcdmcParamsToken_
 
const edm::ESGetToken< HcalQIETypes, HcalQIETypesRcdqieTypesToken_
 
bool testNumbering_
 
std::unique_ptr< HcalCoderFactorytheCoderFactory
 
const CaloGeometrytheGeometry
 
const edm::ESGetToken< CaloGeometry, CaloGeometryRecordtheGeometryToken
 
edm::ESWatcher< CaloGeometryRecordtheGeometryWatcher_
 
std::unique_ptr< HcalAmplifiertheHBHEAmplifier
 
std::unique_ptr< HBHEDigitizertheHBHEDigitizer
 
std::unique_ptr< HcalElectronicsSimtheHBHEElectronicsSim
 
HBHEHitFilter theHBHEHitFilter
 
std::unique_ptr< HcalAmplifiertheHBHEQIE11Amplifier
 
std::vector< DetIdtheHBHEQIE11DetIds
 
std::unique_ptr< QIE11DigitizertheHBHEQIE11Digitizer
 
std::unique_ptr< HcalElectronicsSimtheHBHEQIE11ElectronicsSim
 
HBHEHitFilter theHBHEQIE11HitFilter
 
std::vector< DetIdtheHBHEQIE8DetIds
 
std::unique_ptr< CaloHitResponsetheHBHEResponse
 
std::unique_ptr< HcalSiPMHitResponsetheHBHESiPMResponse
 
std::unique_ptr< HcalAmplifiertheHFAmplifier
 
std::unique_ptr< HFDigitizertheHFDigitizer
 
std::unique_ptr< HcalElectronicsSimtheHFElectronicsSim
 
HFHitFilter theHFHitFilter
 
std::unique_ptr< HcalAmplifiertheHFQIE10Amplifier
 
std::vector< DetIdtheHFQIE10DetIds
 
std::unique_ptr< QIE10DigitizertheHFQIE10Digitizer
 
std::unique_ptr< HcalElectronicsSimtheHFQIE10ElectronicsSim
 
HFHitFilter theHFQIE10HitFilter
 
std::unique_ptr< CaloHitResponsetheHFQIE10Response
 
std::vector< DetIdtheHFQIE8DetIds
 
std::unique_ptr< CaloHitResponsetheHFResponse
 
std::unique_ptr< HcalAmplifiertheHOAmplifier
 
std::unique_ptr< HODigitizertheHODigitizer
 
std::unique_ptr< HcalElectronicsSimtheHOElectronicsSim
 
HOHitFilter theHOHitFilter
 
std::vector< DetIdtheHOHPDDetIds
 
std::unique_ptr< CaloHitResponsetheHOResponse
 
int theHOSiPMCode
 
std::vector< DetIdtheHOSiPMDetIds
 
std::unique_ptr< HODigitizertheHOSiPMDigitizer
 
HOHitFilter theHOSiPMHitFilter
 
std::unique_ptr< HcalSiPMHitResponsetheHOSiPMResponse
 
std::unique_ptr< HPDIonFeedbackSimtheIonFeedback
 
HcalSimParameterMap theParameterMap
 
const HcalDDDRecConstantstheRecNumber
 
const edm::ESGetToken< HcalDDDRecConstants, HcalRecNumberingRecordtheRecNumberToken
 
edm::ESWatcher< HcalRecNumberingRecordtheRecNumberWatcher_
 
std::unique_ptr< HcalHitRelabellertheRelabeller
 
HcalShapes theShapes
 
std::unique_ptr< HcalTimeSlewSimtheTimeSlewSim
 
std::unique_ptr< HcalAmplifiertheZDCAmplifier
 
std::unique_ptr< ZDCDigitizertheZDCDigitizer
 
std::unique_ptr< HcalElectronicsSimtheZDCElectronicsSim
 
ZDCHitFilter theZDCHitFilter
 
std::unique_ptr< CaloHitResponsetheZDCResponse
 
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecordtopoToken_
 
bool zdcgeo
 
edm::EDGetTokenT< std::vector< PCaloHit > > zdcToken_
 

Detailed Description

Definition at line 46 of file HcalDigitizer.h.

Member Typedef Documentation

◆ HBHEDigitizer

Reconstruction algorithm

Definition at line 103 of file HcalDigitizer.h.

◆ HFDigitizer

Definition at line 105 of file HcalDigitizer.h.

◆ HODigitizer

Definition at line 104 of file HcalDigitizer.h.

◆ QIE10Digitizer

Definition at line 107 of file HcalDigitizer.h.

◆ QIE11Digitizer

Definition at line 108 of file HcalDigitizer.h.

◆ ZDCDigitizer

Definition at line 106 of file HcalDigitizer.h.

Constructor & Destructor Documentation

◆ HcalDigitizer()

HcalDigitizer::HcalDigitizer ( const edm::ParameterSet ps,
edm::ConsumesCollector iC 
)
explicit

Definition at line 34 of file HcalDigitizer.cc.

References agingFlagHB, agingFlagHE, HcalCoderFactory::DB, debugCS_, deliveredLumi, DataMixerDataOnData_cff::doEmpty, DigiDM_cff::doNoise, hcalUnsuppressedDigis_cfi::doTimeSlew, edm::ConsumesCollector::esConsumes(), Exception, edm::ParameterSet::getParameter(), hcalTimeSlew_delay_, ignoreTime_, m_HBDarkeningToken, m_HEDarkeningToken, m_HFRecalibration, mcParamsToken_, hcalUnsuppressedDigis_cfi::minFCToDelay, testNumbering_, theCoderFactory, theHBHEAmplifier, theHBHEDigitizer, theHBHEElectronicsSim, theHBHEHitFilter, theHBHEQIE11Amplifier, theHBHEQIE11Digitizer, theHBHEQIE11ElectronicsSim, theHBHEQIE11HitFilter, theHBHEResponse, theHBHESiPMResponse, theHFAmplifier, theHFDigitizer, theHFElectronicsSim, theHFHitFilter, theHFQIE10Amplifier, theHFQIE10Digitizer, theHFQIE10ElectronicsSim, theHFQIE10HitFilter, theHFQIE10Response, theHFResponse, theHOAmplifier, theHODigitizer, theHOElectronicsSim, theHOHitFilter, theHOResponse, theHOSiPMCode, theHOSiPMDigitizer, theHOSiPMHitFilter, theHOSiPMResponse, theIonFeedback, theParameterMap, theRelabeller, theShapes, theTimeSlewSim, theZDCAmplifier, theZDCDigitizer, theZDCElectronicsSim, theZDCHitFilter, and theZDCResponse.

36  topoToken_(iC.esConsumes()),
41  theGeometry(nullptr),
42  theRecNumber(nullptr),
43  theParameterMap(ps),
44  theShapes(),
45  theHBHEResponse(std::make_unique<CaloHitResponse>(&theParameterMap, &theShapes)),
46  theHBHESiPMResponse(std::make_unique<HcalSiPMHitResponse>(
47  &theParameterMap, &theShapes, ps.getParameter<bool>("HcalPreMixStage1"), true)),
48  theHOResponse(std::make_unique<CaloHitResponse>(&theParameterMap, &theShapes)),
49  theHOSiPMResponse(std::make_unique<HcalSiPMHitResponse>(
50  &theParameterMap, &theShapes, ps.getParameter<bool>("HcalPreMixStage1"), false)),
51  theHFResponse(std::make_unique<CaloHitResponse>(&theParameterMap, &theShapes)),
52  theHFQIE10Response(std::make_unique<CaloHitResponse>(
53  &theParameterMap, &theShapes, ps.getParameter<bool>("HcalPreMixStage1"), true)),
54  theZDCResponse(std::make_unique<CaloHitResponse>(
55  &theParameterMap, &theShapes, ps.getParameter<bool>("HcalPreMixStage1"), false)),
56  theHBHEAmplifier(nullptr),
57  theHFAmplifier(nullptr),
58  theHOAmplifier(nullptr),
59  theZDCAmplifier(nullptr),
60  theHFQIE10Amplifier(nullptr),
61  theHBHEQIE11Amplifier(nullptr),
62  theIonFeedback(nullptr),
63  theCoderFactory(nullptr),
64  theHBHEElectronicsSim(nullptr),
65  theHFElectronicsSim(nullptr),
66  theHOElectronicsSim(nullptr),
67  theZDCElectronicsSim(nullptr),
68  theHFQIE10ElectronicsSim(nullptr),
77  theHBHEDigitizer(nullptr),
78  theHODigitizer(nullptr),
79  theHOSiPMDigitizer(nullptr),
80  theHFDigitizer(nullptr),
81  theZDCDigitizer(nullptr),
82  theHFQIE10Digitizer(nullptr),
83  theHBHEQIE11Digitizer(nullptr),
84  theRelabeller(nullptr),
85  isZDC(true),
86  isHCAL(true),
87  zdcgeo(true),
88  hbhegeo(true),
89  hogeo(true),
90  hfgeo(true),
91  doHFWindow_(ps.getParameter<bool>("doHFWindow")),
92  killHE_(ps.getParameter<bool>("killHE")),
93  debugCS_(ps.getParameter<bool>("debugCaloSamples")),
94  ignoreTime_(ps.getParameter<bool>("ignoreGeantTime")),
95  injectTestHits_(ps.getParameter<bool>("injectTestHits")),
96  hitsProducer_(ps.getParameter<std::string>("hitsProducer")),
97  theHOSiPMCode(ps.getParameter<edm::ParameterSet>("ho").getParameter<int>("siPMCode")),
98  deliveredLumi(0.),
99  agingFlagHB(ps.getParameter<bool>("HBDarkening")),
100  agingFlagHE(ps.getParameter<bool>("HEDarkening")),
103  m_HBDarkening(nullptr),
104  m_HEDarkening(nullptr),
105  m_HFRecalibration(nullptr),
106  injectedHitsEnergy_(ps.getParameter<std::vector<double>>("injectTestHitsEnergy")),
107  injectedHitsTime_(ps.getParameter<std::vector<double>>("injectTestHitsTime")),
108  injectedHitsCells_(ps.getParameter<std::vector<int>>("injectTestHitsCells")) {
109  if (agingFlagHB) {
111  }
112  if (agingFlagHE) {
114  }
115  if (theHOSiPMCode == 2) {
116  mcParamsToken_ = iC.esConsumes();
117  }
118 
119  bool doNoise = ps.getParameter<bool>("doNoise");
120 
121  bool PreMix1 = ps.getParameter<bool>("HcalPreMixStage1"); // special threshold/pedestal treatment
122  bool PreMix2 = ps.getParameter<bool>("HcalPreMixStage2"); // special threshold/pedestal treatment
123  bool doEmpty = ps.getParameter<bool>("doEmpty");
124  deliveredLumi = ps.getParameter<double>("DelivLuminosity");
125  bool agingFlagHF = ps.getParameter<bool>("HFDarkening");
126  double minFCToDelay = ps.getParameter<double>("minFCToDelay");
127 
128  if (PreMix1 && PreMix2) {
129  throw cms::Exception("Configuration") << "HcalDigitizer cannot operate in PreMixing digitization and "
130  "PreMixing\n"
131  "digi combination modes at the same time. Please set one mode to "
132  "False\n"
133  "in the configuration file.";
134  }
135 
136  // need to make copies, because they might get different noise generators
137  theHBHEAmplifier = std::make_unique<HcalAmplifier>(&theParameterMap, doNoise, PreMix1, PreMix2);
138  theHFAmplifier = std::make_unique<HcalAmplifier>(&theParameterMap, doNoise, PreMix1, PreMix2);
139  theHOAmplifier = std::make_unique<HcalAmplifier>(&theParameterMap, doNoise, PreMix1, PreMix2);
140  theZDCAmplifier = std::make_unique<HcalAmplifier>(&theParameterMap, doNoise, PreMix1, PreMix2);
141  theHFQIE10Amplifier = std::make_unique<HcalAmplifier>(&theParameterMap, doNoise, PreMix1, PreMix2);
142  theHBHEQIE11Amplifier = std::make_unique<HcalAmplifier>(&theParameterMap, doNoise, PreMix1, PreMix2);
143 
144  theCoderFactory = std::make_unique<HcalCoderFactory>(HcalCoderFactory::DB);
145 
147  std::make_unique<HcalElectronicsSim>(&theParameterMap, theHBHEAmplifier.get(), theCoderFactory.get(), PreMix1);
149  std::make_unique<HcalElectronicsSim>(&theParameterMap, theHFAmplifier.get(), theCoderFactory.get(), PreMix1);
151  std::make_unique<HcalElectronicsSim>(&theParameterMap, theHOAmplifier.get(), theCoderFactory.get(), PreMix1);
153  std::make_unique<HcalElectronicsSim>(&theParameterMap, theZDCAmplifier.get(), theCoderFactory.get(), PreMix1);
155  std::make_unique<HcalElectronicsSim>(&theParameterMap,
156  theHFQIE10Amplifier.get(),
157  theCoderFactory.get(),
158  PreMix1); // should this use a different coder factory?
160  std::make_unique<HcalElectronicsSim>(&theParameterMap,
161  theHBHEQIE11Amplifier.get(),
162  theCoderFactory.get(),
163  PreMix1); // should this use a different coder factory?
164 
165  bool doHOHPD = (theHOSiPMCode != 1);
166  bool doHOSiPM = (theHOSiPMCode != 0);
167  if (doHOHPD) {
168  theHOResponse = std::make_unique<CaloHitResponse>(&theParameterMap, &theShapes);
169  theHOResponse->setHitFilter(&theHOHitFilter);
170  theHODigitizer = std::make_unique<HODigitizer>(theHOResponse.get(), theHOElectronicsSim.get(), doEmpty);
171  }
172  if (doHOSiPM) {
173  theHOSiPMResponse->setHitFilter(&theHOSiPMHitFilter);
174  theHOSiPMDigitizer = std::make_unique<HODigitizer>(theHOSiPMResponse.get(), theHOElectronicsSim.get(), doEmpty);
175  }
176 
177  theHBHEResponse->setHitFilter(&theHBHEHitFilter);
179 
180  // QIE8 and QIE11 can coexist in HBHE
182  std::make_unique<QIE11Digitizer>(theHBHESiPMResponse.get(), theHBHEQIE11ElectronicsSim.get(), doEmpty);
183  theHBHEDigitizer = std::make_unique<HBHEDigitizer>(theHBHEResponse.get(), theHBHEElectronicsSim.get(), doEmpty);
184 
185  bool doTimeSlew = ps.getParameter<bool>("doTimeSlew");
186  // initialize: they won't be called later if flag is set
187  hcalTimeSlew_delay_ = nullptr;
188  theTimeSlewSim.reset(nullptr);
189  if (doTimeSlew) {
190  // no time slewing for HF
191  theTimeSlewSim = std::make_unique<HcalTimeSlewSim>(&theParameterMap, minFCToDelay);
192  theHBHEAmplifier->setTimeSlewSim(theTimeSlewSim.get());
193  theHBHEQIE11Amplifier->setTimeSlewSim(theTimeSlewSim.get());
194  theHOAmplifier->setTimeSlewSim(theTimeSlewSim.get());
195  theZDCAmplifier->setTimeSlewSim(theTimeSlewSim.get());
196  }
197 
198  theHFResponse->setHitFilter(&theHFHitFilter);
199  theHFQIE10Response->setHitFilter(&theHFQIE10HitFilter);
200  theZDCResponse->setHitFilter(&theZDCHitFilter);
201 
202  // QIE8 and QIE10 can coexist in HF
204  std::make_unique<QIE10Digitizer>(theHFQIE10Response.get(), theHFQIE10ElectronicsSim.get(), doEmpty);
205  theHFDigitizer = std::make_unique<HFDigitizer>(theHFResponse.get(), theHFElectronicsSim.get(), doEmpty);
206 
207  // temporary switching off, until Run3 ZDC will be added
208  // theZDCDigitizer = std::make_unique<ZDCDigitizer>(theZDCResponse.get(), theZDCElectronicsSim.get(), doEmpty);
209 
210  testNumbering_ = ps.getParameter<bool>("TestNumbering");
211  // edm::LogVerbatim("HcalSim") << "Flag to see if Hit Relabeller to be initiated " << testNumbering_;
212  if (testNumbering_)
213  theRelabeller = std::make_unique<HcalHitRelabeller>(ps.getParameter<bool>("doNeutralDensityFilter"));
214 
215  if (ps.getParameter<bool>("doIonFeedback") && theHBHEResponse) {
216  theIonFeedback = std::make_unique<HPDIonFeedbackSim>(ps, &theShapes);
217  theHBHEResponse->setPECorrection(theIonFeedback.get());
218  if (ps.getParameter<bool>("doThermalNoise")) {
219  theHBHEAmplifier->setIonFeedbackSim(theIonFeedback.get());
220  }
221  }
222 
223  // option to save CaloSamples as event product for debugging
224  if (debugCS_) {
225  if (theHBHEDigitizer)
226  theHBHEDigitizer->setDebugCaloSamples(true);
228  theHBHEQIE11Digitizer->setDebugCaloSamples(true);
229  if (theHODigitizer)
230  theHODigitizer->setDebugCaloSamples(true);
231  if (theHOSiPMDigitizer)
232  theHOSiPMDigitizer->setDebugCaloSamples(true);
233  if (theHFDigitizer)
234  theHFDigitizer->setDebugCaloSamples(true);
236  theHFQIE10Digitizer->setDebugCaloSamples(true);
237  if (theZDCDigitizer)
238  theZDCDigitizer->setDebugCaloSamples(true);
239  }
240 
241  // option to ignore Geant time distribution in SimHits, for debugging
242  if (ignoreTime_) {
243  theHBHEResponse->setIgnoreGeantTime(ignoreTime_);
244  theHBHESiPMResponse->setIgnoreGeantTime(ignoreTime_);
245  theHOResponse->setIgnoreGeantTime(ignoreTime_);
246  theHOSiPMResponse->setIgnoreGeantTime(ignoreTime_);
247  theHFResponse->setIgnoreGeantTime(ignoreTime_);
248  theHFQIE10Response->setIgnoreGeantTime(ignoreTime_);
249  theZDCResponse->setIgnoreGeantTime(ignoreTime_);
250  }
251 
252  if (agingFlagHF)
253  m_HFRecalibration = std::make_unique<HFRecalibration>(ps.getParameter<edm::ParameterSet>("HFRecalParameterBlock"));
254 }
HFHitFilter theHFQIE10HitFilter
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
std::vector< int > injectedHitsCells_
HBHEHitFilter theHBHEHitFilter
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
const HcalDDDRecConstants * theRecNumber
std::unique_ptr< CaloHitResponse > theHFResponse
const edm::ESGetToken< HcalDDDRecConstants, HcalRecNumberingRecord > theRecNumberToken
Definition: HcalDigitizer.h:93
std::unique_ptr< HcalTimeSlewSim > theTimeSlewSim
std::unique_ptr< HcalAmplifier > theHBHEAmplifier
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
HOHitFilter theHOHitFilter
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
std::unique_ptr< HcalHitRelabeller > theRelabeller
HFHitFilter theHFHitFilter
std::unique_ptr< HFDigitizer > theHFDigitizer
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > theGeometryToken
Definition: HcalDigitizer.h:92
std::unique_ptr< HODigitizer > theHODigitizer
std::unique_ptr< HcalAmplifier > theHFAmplifier
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecord > m_HBDarkeningToken
Definition: HcalDigitizer.h:89
std::unique_ptr< HcalCoderFactory > theCoderFactory
std::unique_ptr< HcalElectronicsSim > theZDCElectronicsSim
std::unique_ptr< HFRecalibration > m_HFRecalibration
edm::EDGetTokenT< std::vector< PCaloHit > > zdcToken_
std::vector< double > injectedHitsEnergy_
std::unique_ptr< HcalElectronicsSim > theHFQIE10ElectronicsSim
const HBHEDarkening * m_HEDarkening
std::unique_ptr< HcalElectronicsSim > theHFElectronicsSim
std::string hitsProducer_
double deliveredLumi
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
const HcalTimeSlew * hcalTimeSlew_delay_
std::unique_ptr< HcalAmplifier > theHBHEQIE11Amplifier
ZDCHitFilter theZDCHitFilter
std::unique_ptr< HcalSiPMHitResponse > theHBHESiPMResponse
std::vector< double > injectedHitsTime_
HcalShapes theShapes
std::unique_ptr< CaloHitResponse > theHBHEResponse
edm::EDGetTokenT< std::vector< PCaloHit > > hcalToken_
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecord > m_HEDarkeningToken
Definition: HcalDigitizer.h:90
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalElectronicsSim > theHBHEElectronicsSim
const edm::ESGetToken< HcalQIETypes, HcalQIETypesRcd > qieTypesToken_
Definition: HcalDigitizer.h:94
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
Definition: HcalDigitizer.h:88
std::unique_ptr< CaloHitResponse > theHOResponse
std::unique_ptr< HPDIonFeedbackSim > theIonFeedback
std::unique_ptr< HcalAmplifier > theZDCAmplifier
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
HOHitFilter theHOSiPMHitFilter
std::unique_ptr< CaloHitResponse > theZDCResponse
const CaloGeometry * theGeometry
Definition: HcalDigitizer.h:99
std::unique_ptr< HcalAmplifier > theHOAmplifier
std::unique_ptr< HcalSiPMHitResponse > theHOSiPMResponse
const HBHEDarkening * m_HBDarkening
std::unique_ptr< HcalElectronicsSim > theHOElectronicsSim
HBHEHitFilter theHBHEQIE11HitFilter
std::unique_ptr< CaloHitResponse > theHFQIE10Response
edm::ESGetToken< HcalMCParams, HcalMCParamsRcd > mcParamsToken_
Definition: HcalDigitizer.h:95
const edm::ESGetToken< HcalDbService, HcalDbRecord > conditionsToken_
Definition: HcalDigitizer.h:87
std::unique_ptr< HcalAmplifier > theHFQIE10Amplifier
std::unique_ptr< HcalElectronicsSim > theHBHEQIE11ElectronicsSim
const edm::ESGetToken< HcalTimeSlew, HcalTimeSlewRecord > hcalTimeSlew_delay_token_
Definition: HcalDigitizer.h:91

◆ ~HcalDigitizer()

HcalDigitizer::~HcalDigitizer ( )
virtual

Definition at line 256 of file HcalDigitizer.cc.

256 {}

Member Function Documentation

◆ accumulate() [1/2]

void HcalDigitizer::accumulate ( edm::Event const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 430 of file HcalDigitizer.cc.

References accumulateCaloHits(), MillePedeFileConverter_cfg::e, options_cfi::eventSetup, hcalToken_, injectTestHits_, isHCAL, edm::HandleBase::isValid(), isZDC, or, topoToken_, and zdcToken_.

Referenced by HcalDigiProducer::accumulate().

430  {
431  // Step A: Get Inputs
432  const edm::Handle<std::vector<PCaloHit>> &zdcHandle = e.getHandle(zdcToken_);
433  isZDC = zdcHandle.isValid();
434 
435  const edm::Handle<std::vector<PCaloHit>> &hcalHandle = e.getHandle(hcalToken_);
436  isHCAL = hcalHandle.isValid() or injectTestHits_;
437 
438  const HcalTopology *htopoP = &eventSetup.getData(topoToken_);
439 
440  accumulateCaloHits(hcalHandle, zdcHandle, 0, engine, htopoP);
441 }
edm::EDGetTokenT< std::vector< PCaloHit > > zdcToken_
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
edm::EDGetTokenT< std::vector< PCaloHit > > hcalToken_
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
Definition: HcalDigitizer.h:88
bool isValid() const
Definition: HandleBase.h:70
void accumulateCaloHits(edm::Handle< std::vector< PCaloHit >> const &hcalHits, edm::Handle< std::vector< PCaloHit >> const &zdcHits, int bunchCrossing, CLHEP::HepRandomEngine *, const HcalTopology *h)

◆ accumulate() [2/2]

void HcalDigitizer::accumulate ( PileUpEventPrincipal const &  e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 443 of file HcalDigitizer.cc.

References accumulateCaloHits(), MillePedeFileConverter_cfg::e, options_cfi::eventSetup, hitsProducer_, isHCAL, edm::HandleBase::isValid(), isZDC, and topoToken_.

445  {
446  // Step A: Get Inputs
447  edm::InputTag zdcTag(hitsProducer_, "ZDCHITS");
449  e.getByLabel(zdcTag, zdcHandle);
450  isZDC = zdcHandle.isValid();
451 
452  edm::InputTag hcalTag(hitsProducer_, "HcalHits");
454  e.getByLabel(hcalTag, hcalHandle);
455  isHCAL = hcalHandle.isValid();
456 
457  const HcalTopology *htopoP = &eventSetup.getData(topoToken_);
458 
459  accumulateCaloHits(hcalHandle, zdcHandle, e.bunchCrossing(), engine, htopoP);
460 }
std::string hitsProducer_
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
Definition: HcalDigitizer.h:88
bool isValid() const
Definition: HandleBase.h:70
void accumulateCaloHits(edm::Handle< std::vector< PCaloHit >> const &hcalHits, edm::Handle< std::vector< PCaloHit >> const &zdcHits, int bunchCrossing, CLHEP::HepRandomEngine *, const HcalTopology *h)

◆ accumulateCaloHits()

void HcalDigitizer::accumulateCaloHits ( edm::Handle< std::vector< PCaloHit >> const &  hcalHits,
edm::Handle< std::vector< PCaloHit >> const &  zdcHits,
int  bunchCrossing,
CLHEP::HepRandomEngine *  engine,
const HcalTopology h 
)
private

Definition at line 347 of file HcalDigitizer.cc.

References darkening(), TauDecayModes::dec, doHFWindow_, hbhegeo, HcalEndcap, HcalForward, hfgeo, hogeo, mps_fire::i, l1ctLayer2EG_cff::id, injectedHits_, injectTestHits_, isHCAL, isZDC, killHE_, m_HBDarkening, m_HEDarkening, m_HFRecalibration, HcalDetId::newForm(), HcalDetId::oldFormat(), DetId::rawId(), HcalDetId::subdet(), testNumbering_, theHBHEDigitizer, theHBHEQIE11Digitizer, theHFDigitizer, theHFQIE10Digitizer, theHODigitizer, theHOSiPMDigitizer, theRelabeller, theZDCDigitizer, HcalTopology::validHcal(), and zdcgeo.

Referenced by accumulate().

351  {
352  // Step A: pass in inputs, and accumulate digis
353  if (isHCAL) {
354  std::vector<PCaloHit> hcalHitsOrig = *hcalHandle.product();
355  if (injectTestHits_)
356  hcalHitsOrig = injectedHits_;
357  std::vector<PCaloHit> hcalHits;
358  hcalHits.reserve(hcalHitsOrig.size());
359 
360  // evaluate darkening before relabeling
361  if (testNumbering_) {
363  darkening(hcalHitsOrig);
364  }
365  // Relabel PCaloHits if necessary
366  edm::LogInfo("HcalDigitizer") << "Calling Relabeller";
367  theRelabeller->process(hcalHitsOrig);
368  }
369 
370  // eliminate bad hits
371  for (unsigned int i = 0; i < hcalHitsOrig.size(); i++) {
372  DetId id(hcalHitsOrig[i].id());
373  HcalDetId hid(id);
374  if (!htopoP->validHcal(hid)) {
375  edm::LogError("HcalDigitizer") << "bad hcal id found in digitizer. Skipping " << id.rawId() << " " << hid;
376  continue;
377  } else if (hid.subdet() == HcalForward && !doHFWindow_ && hcalHitsOrig[i].depth() != 0) {
378  // skip HF window hits unless desired
379  continue;
380  } else if (killHE_ && hid.subdet() == HcalEndcap) {
381  // remove HE hits if asked for (phase 2)
382  continue;
383  } else {
384 #ifdef EDM_ML_DEBUG
385  edm::LogVerbatim("HcalSim") << "HcalDigitizer format " << hid.oldFormat() << " for " << hid;
386 #endif
387  DetId newid = DetId(hid.newForm());
388 #ifdef EDM_ML_DEBUG
389  edm::LogVerbatim("HcalSim") << "Hit " << i << " out of " << hcalHits.size() << " " << std::hex << id.rawId()
390  << " --> " << newid.rawId() << std::dec << " " << HcalDetId(newid.rawId()) << '\n';
391 #endif
392  hcalHitsOrig[i].setID(newid.rawId());
393  hcalHits.push_back(hcalHitsOrig[i]);
394  }
395  }
396 
397  if (hbhegeo) {
398  if (theHBHEDigitizer)
399  theHBHEDigitizer->add(hcalHits, bunchCrossing, engine);
401  theHBHEQIE11Digitizer->add(hcalHits, bunchCrossing, engine);
402  }
403 
404  if (hogeo) {
405  if (theHODigitizer)
406  theHODigitizer->add(hcalHits, bunchCrossing, engine);
407  if (theHOSiPMDigitizer)
408  theHOSiPMDigitizer->add(hcalHits, bunchCrossing, engine);
409  }
410 
411  if (hfgeo) {
412  if (theHFDigitizer)
413  theHFDigitizer->add(hcalHits, bunchCrossing, engine);
415  theHFQIE10Digitizer->add(hcalHits, bunchCrossing, engine);
416  }
417  } else {
418  edm::LogInfo("HcalDigitizer") << "We don't have HCAL hit collection available ";
419  }
420 
421  if (isZDC) {
422  if (zdcgeo && theZDCDigitizer) {
423  theZDCDigitizer->add(*zdcHandle.product(), bunchCrossing, engine);
424  }
425  } else {
426  edm::LogInfo("HcalDigitizer") << "We don't have ZDC hit collection available ";
427  }
428 }
Log< level::Info, true > LogVerbatim
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
void darkening(std::vector< PCaloHit > &hcalHits)
std::unique_ptr< HcalHitRelabeller > theRelabeller
Log< level::Error, false > LogError
std::unique_ptr< HFDigitizer > theHFDigitizer
std::unique_ptr< HODigitizer > theHODigitizer
std::unique_ptr< HFRecalibration > m_HFRecalibration
const HBHEDarkening * m_HEDarkening
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
Log< level::Info, false > LogInfo
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
const HBHEDarkening * m_HBDarkening
std::vector< PCaloHit > injectedHits_

◆ buildHBHEQIECells()

void HcalDigitizer::buildHBHEQIECells ( const std::vector< DetId > &  allCells,
const edm::EventSetup eventSetup 
)
private

Definition at line 723 of file HcalDigitizer.cc.

References options_cfi::eventSetup, HcalQIEType::getValue(), HcalCondObjectContainer< Item >::getValues(), QIE11, QIE8, qieTypesToken_, HcalHitFilter< subdets >::setDetIds(), HcalCondObjectContainerBase::setTopo(), theHBHEDigitizer, theHBHEHitFilter, theHBHEQIE11DetIds, theHBHEQIE11Digitizer, theHBHEQIE11HitFilter, theHBHEQIE8DetIds, HcalCondObjectContainerBase::topo(), and topoToken_.

Referenced by updateGeometry().

723  {
724  // if results are already cached, no need to look again
725  if (!theHBHEQIE8DetIds.empty() || !theHBHEQIE11DetIds.empty())
726  return;
727 
728  // get the QIETypes
729  // intentional copy
730  HcalQIETypes qieTypes = eventSetup.getData(qieTypesToken_);
731  if (qieTypes.topo() == nullptr) {
732  qieTypes.setTopo(&eventSetup.getData(topoToken_));
733  }
734 
735  for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
736  HcalQIENum qieType = HcalQIENum(qieTypes.getValues(*detItr)->getValue());
737  if (qieType == QIE8) {
738  theHBHEQIE8DetIds.push_back(*detItr);
739  } else if (qieType == QIE11) {
740  theHBHEQIE11DetIds.push_back(*detItr);
741  } else { // default is QIE8
742  theHBHEQIE8DetIds.push_back(*detItr);
743  }
744  }
745 
746  if (!theHBHEQIE8DetIds.empty())
748  else {
749  theHBHEDigitizer.reset();
750  }
751 
752  if (!theHBHEQIE11DetIds.empty())
754  else {
755  theHBHEQIE11Digitizer.reset();
756  }
757 
758  if (!theHBHEQIE8DetIds.empty() && !theHBHEQIE11DetIds.empty()) {
761  }
762 }
HBHEHitFilter theHBHEHitFilter
int getValue() const
Definition: HcalQIEType.h:19
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
Definition: HcalQIENum.h:4
const Item * getValues(DetId fId, bool throwOnFail=true) const
const HcalTopology * topo() const
HcalQIENum
Definition: HcalQIENum.h:4
const edm::ESGetToken< HcalQIETypes, HcalQIETypesRcd > qieTypesToken_
Definition: HcalDigitizer.h:94
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
Definition: HcalDigitizer.h:88
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
void setDetIds(const std::vector< DetId > &detIds)
Definition: HcalHitFilter.h:17
HBHEHitFilter theHBHEQIE11HitFilter
std::vector< DetId > theHBHEQIE8DetIds
std::vector< DetId > theHBHEQIE11DetIds
void setTopo(const HcalTopology *topo)

◆ buildHFQIECells()

void HcalDigitizer::buildHFQIECells ( const std::vector< DetId > &  allCells,
const edm::EventSetup eventSetup 
)
private

Definition at line 687 of file HcalDigitizer.cc.

References options_cfi::eventSetup, HcalQIEType::getValue(), HcalCondObjectContainer< Item >::getValues(), QIE10, QIE8, qieTypesToken_, HcalCondObjectContainerBase::setTopo(), theHFDigitizer, theHFQIE10DetIds, theHFQIE10Digitizer, theHFQIE8DetIds, HcalCondObjectContainerBase::topo(), and topoToken_.

Referenced by updateGeometry().

687  {
688  // if results are already cached, no need to look again
689  if (!theHFQIE8DetIds.empty() || !theHFQIE10DetIds.empty())
690  return;
691 
692  // get the QIETypes
693  // intentional copy
694  HcalQIETypes qieTypes = eventSetup.getData(qieTypesToken_);
695  if (qieTypes.topo() == nullptr) {
696  qieTypes.setTopo(&eventSetup.getData(topoToken_));
697  }
698 
699  for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
700  HcalQIENum qieType = HcalQIENum(qieTypes.getValues(*detItr)->getValue());
701  if (qieType == QIE8) {
702  theHFQIE8DetIds.push_back(*detItr);
703  } else if (qieType == QIE10) {
704  theHFQIE10DetIds.push_back(*detItr);
705  } else { // default is QIE8
706  theHFQIE8DetIds.push_back(*detItr);
707  }
708  }
709 
710  if (!theHFQIE8DetIds.empty())
711  theHFDigitizer->setDetIds(theHFQIE8DetIds);
712  else {
713  theHFDigitizer.reset();
714  }
715 
716  if (!theHFQIE10DetIds.empty())
718  else {
719  theHFQIE10Digitizer.reset();
720  }
721 }
std::vector< DetId > theHFQIE10DetIds
int getValue() const
Definition: HcalQIEType.h:19
Definition: HcalQIENum.h:4
std::unique_ptr< HFDigitizer > theHFDigitizer
const Item * getValues(DetId fId, bool throwOnFail=true) const
const HcalTopology * topo() const
HcalQIENum
Definition: HcalQIENum.h:4
const edm::ESGetToken< HcalQIETypes, HcalQIETypesRcd > qieTypesToken_
Definition: HcalDigitizer.h:94
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
Definition: HcalDigitizer.h:88
std::vector< DetId > theHFQIE8DetIds
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
void setTopo(const HcalTopology *topo)

◆ buildHOSiPMCells()

void HcalDigitizer::buildHOSiPMCells ( const std::vector< DetId > &  allCells,
const edm::EventSetup eventSetup 
)
private

Definition at line 764 of file HcalDigitizer.cc.

References options_cfi::eventSetup, HcalCondObjectContainer< Item >::getValues(), HcalShapes::HAMAMATSU, mcParamsToken_, HcalHitFilter< subdets >::setDetIds(), HcalSimParameterMap::setHOHamamatsuDetIds(), HcalSimParameterMap::setHOZecotekDetIds(), HcalCondObjectContainerBase::setTopo(), HcalMCParam::signalShape(), theHODigitizer, theHOHitFilter, theHOHPDDetIds, theHOSiPMCode, theHOSiPMDetIds, theHOSiPMDigitizer, theHOSiPMHitFilter, theParameterMap, HcalCondObjectContainerBase::topo(), topoToken_, and HcalShapes::ZECOTEK.

Referenced by updateGeometry().

764  {
765  // all HPD
766 
767  if (theHOSiPMCode == 0) {
768  theHODigitizer->setDetIds(allCells);
769  } else if (theHOSiPMCode == 1) {
770  theHOSiPMDigitizer->setDetIds(allCells);
771  // FIXME pick Zecotek or hamamatsu?
772  } else if (theHOSiPMCode == 2) {
773  std::vector<HcalDetId> zecotekDetIds, hamamatsuDetIds;
774 
775  // intentional copy
776  HcalMCParams mcParams = eventSetup.getData(mcParamsToken_);
777  if (mcParams.topo() == nullptr) {
778  mcParams.setTopo(&eventSetup.getData(topoToken_));
779  }
780 
781  for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
782  int shapeType = mcParams.getValues(*detItr)->signalShape();
783  if (shapeType == HcalShapes::ZECOTEK) {
784  zecotekDetIds.emplace_back(*detItr);
785  theHOSiPMDetIds.push_back(*detItr);
786  } else if (shapeType == HcalShapes::HAMAMATSU) {
787  hamamatsuDetIds.emplace_back(*detItr);
788  theHOSiPMDetIds.push_back(*detItr);
789  } else {
790  theHOHPDDetIds.push_back(*detItr);
791  }
792  }
793 
794  if (!theHOHPDDetIds.empty())
795  theHODigitizer->setDetIds(theHOHPDDetIds);
796  else {
797  theHODigitizer.reset();
798  }
799 
800  if (!theHOSiPMDetIds.empty())
802  else {
803  theHOSiPMDigitizer.reset();
804  }
805 
806  if (!theHOHPDDetIds.empty() && !theHOSiPMDetIds.empty()) {
809  }
810 
811  theParameterMap.setHOZecotekDetIds(zecotekDetIds);
812  theParameterMap.setHOHamamatsuDetIds(hamamatsuDetIds);
813 
814  // make sure we don't got through this exercise again
815  theHOSiPMCode = -2;
816  }
817 }
HOHitFilter theHOHitFilter
std::unique_ptr< HODigitizer > theHODigitizer
const Item * getValues(DetId fId, bool throwOnFail=true) const
void setHOZecotekDetIds(const std::vector< HcalDetId > &ids)
const HcalTopology * topo() const
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
std::vector< DetId > theHOHPDDetIds
unsigned int signalShape() const
Definition: HcalMCParam.h:38
HcalSimParameterMap theParameterMap
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
Definition: HcalDigitizer.h:88
void setHOHamamatsuDetIds(const std::vector< HcalDetId > &ids)
void setDetIds(const std::vector< DetId > &detIds)
Definition: HcalHitFilter.h:17
std::vector< DetId > theHOSiPMDetIds
HOHitFilter theHOSiPMHitFilter
edm::ESGetToken< HcalMCParams, HcalMCParamsRcd > mcParamsToken_
Definition: HcalDigitizer.h:95
void setTopo(const HcalTopology *topo)

◆ checkGeometry()

void HcalDigitizer::checkGeometry ( const edm::EventSetup eventSetup)
private

make sure the digitizer has the correct list of all cells that exist in the geometry

Definition at line 581 of file HcalDigitizer.cc.

References edm::ESWatcher< T >::check(), options_cfi::eventSetup, or, theGeometry, theGeometryToken, theGeometryWatcher_, theHBHEResponse, theHBHESiPMResponse, theHFQIE10Response, theHFResponse, theHOResponse, theHOSiPMResponse, theRecNumber, theRecNumberToken, theRecNumberWatcher_, theRelabeller, theZDCResponse, and updateGeometry().

Referenced by setup().

581  {
584 
585  if (theHBHEResponse)
586  theHBHEResponse->setGeometry(theGeometry);
588  theHBHESiPMResponse->setGeometry(theGeometry);
589  if (theHOResponse)
590  theHOResponse->setGeometry(theGeometry);
591  if (theHOSiPMResponse)
592  theHOSiPMResponse->setGeometry(theGeometry);
593  theHFResponse->setGeometry(theGeometry);
594  theHFQIE10Response->setGeometry(theGeometry);
595  theZDCResponse->setGeometry(theGeometry);
596  if (theRelabeller)
597  theRelabeller->setGeometry(theRecNumber);
598 
599  // See if it's been updated
600  bool check1 = theGeometryWatcher_.check(eventSetup);
601  bool check2 = theRecNumberWatcher_.check(eventSetup);
602  if (check1 or check2) {
604  }
605 }
const HcalDDDRecConstants * theRecNumber
std::unique_ptr< CaloHitResponse > theHFResponse
const edm::ESGetToken< HcalDDDRecConstants, HcalRecNumberingRecord > theRecNumberToken
Definition: HcalDigitizer.h:93
std::unique_ptr< HcalHitRelabeller > theRelabeller
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > theGeometryToken
Definition: HcalDigitizer.h:92
edm::ESWatcher< HcalRecNumberingRecord > theRecNumberWatcher_
Definition: HcalDigitizer.h:97
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
std::unique_ptr< HcalSiPMHitResponse > theHBHESiPMResponse
std::unique_ptr< CaloHitResponse > theHBHEResponse
std::unique_ptr< CaloHitResponse > theHOResponse
edm::ESWatcher< CaloGeometryRecord > theGeometryWatcher_
Definition: HcalDigitizer.h:96
std::unique_ptr< CaloHitResponse > theZDCResponse
bool check(const edm::EventSetup &iSetup)
Definition: ESWatcher.h:57
const CaloGeometry * theGeometry
Definition: HcalDigitizer.h:99
std::unique_ptr< HcalSiPMHitResponse > theHOSiPMResponse
std::unique_ptr< CaloHitResponse > theHFQIE10Response
void updateGeometry(const edm::EventSetup &eventSetup)

◆ darkening()

void HcalDigitizer::darkening ( std::vector< PCaloHit > &  hcalHits)
private

Definition at line 819 of file HcalDigitizer.cc.

References HBHEDarkening::degradation(), deliveredLumi, hcalRecHitTable_cff::depth, hcalRecHitTable_cff::energy, HcalBarrel, HcalEndcap, HcalForward, hcalRecHitTable_cff::ieta, cuy::ii, m_HBDarkening, m_HEDarkening, m_HFRecalibration, phi, HcalTestNumbering::unpackHcalIndex(), and z.

Referenced by accumulateCaloHits().

819  {
820  for (unsigned int ii = 0; ii < hcalHits.size(); ++ii) {
821  uint32_t tmpId = hcalHits[ii].id();
822  int det, z, depth, ieta, phi, lay;
823  HcalTestNumbering::unpackHcalIndex(tmpId, det, z, depth, ieta, phi, lay);
824 
825  bool darkened = false;
826  float dweight = 1.;
827 
828  if (det == int(HcalBarrel) && m_HBDarkening) {
829  // HB darkening
830  dweight = m_HBDarkening->degradation(deliveredLumi, ieta, lay);
831  darkened = true;
832  } else if (det == int(HcalEndcap) && m_HEDarkening) {
833  // HE darkening
834  dweight = m_HEDarkening->degradation(deliveredLumi, ieta, lay);
835  darkened = true;
836  } else if (det == int(HcalForward) && m_HFRecalibration) {
837  // HF darkening - approximate: invert recalibration factor
838  dweight = 1.0 / m_HFRecalibration->getCorr(ieta, depth, deliveredLumi);
839  darkened = true;
840  }
841 
842  // reset hit energy
843  if (darkened)
844  hcalHits[ii].setEnergy(hcalHits[ii].energy() * dweight);
845  }
846 }
float degradation(float intlumi, int ieta, int lay) const
std::unique_ptr< HFRecalibration > m_HFRecalibration
const HBHEDarkening * m_HEDarkening
double deliveredLumi
static void unpackHcalIndex(const uint32_t &idx, int &det, int &z, int &depth, int &eta, int &phi, int &lay)
ii
Definition: cuy.py:589
const HBHEDarkening * m_HBDarkening

◆ fillFakeHits()

void HcalDigitizer::fillFakeHits ( )
private

some hits in each subdetector, just for testing purposes

◆ finalizeEvent()

void HcalDigitizer::finalizeEvent ( edm::Event e,
edm::EventSetup const &  c,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 462 of file HcalDigitizer.cc.

References debugCS_, MillePedeFileConverter_cfg::e, hbhegeo, hfgeo, hogeo, injectedHits_, injectTestHits_, isHCAL, isZDC, HcalDataFrameContainer< Digi >::MAXSAMPLES, eostools::move(), theHBHEDigitizer, theHBHEQIE11DetIds, theHBHEQIE11Digitizer, theHBHESiPMResponse, theHFDigitizer, theHFQIE10DetIds, theHFQIE10Digitizer, theHFQIE10Response, theHODigitizer, theHOSiPMDigitizer, theZDCDigitizer, and zdcgeo.

Referenced by HcalDigiProducer::finalizeEvent().

462  {
463  // Step B: Create empty output
464  std::unique_ptr<HBHEDigiCollection> hbheResult(new HBHEDigiCollection());
465  std::unique_ptr<HODigiCollection> hoResult(new HODigiCollection());
466  std::unique_ptr<HFDigiCollection> hfResult(new HFDigiCollection());
467  std::unique_ptr<ZDCDigiCollection> zdcResult(new ZDCDigiCollection());
468  std::unique_ptr<QIE10DigiCollection> hfQIE10Result(new QIE10DigiCollection(
469  !theHFQIE10DetIds.empty() ? theHFQIE10Response.get()->getReadoutFrameSize(theHFQIE10DetIds[0])
471  std::unique_ptr<QIE11DigiCollection> hbheQIE11Result(new QIE11DigiCollection(
472  !theHBHEQIE11DetIds.empty() ? theHBHESiPMResponse.get()->getReadoutFrameSize(theHBHEQIE11DetIds[0]) :
473  // theParameterMap->simParameters(theHBHEQIE11DetIds[0]).readoutFrameSize()
474  // :
476 
477  // Step C: Invoke the algorithm, getting back outputs.
478  if (isHCAL && hbhegeo) {
479  if (theHBHEDigitizer)
480  theHBHEDigitizer->run(*hbheResult, engine);
482  theHBHEQIE11Digitizer->run(*hbheQIE11Result, engine);
483  }
484  if (isHCAL && hogeo) {
485  if (theHODigitizer)
486  theHODigitizer->run(*hoResult, engine);
487  if (theHOSiPMDigitizer)
488  theHOSiPMDigitizer->run(*hoResult, engine);
489  }
490  if (isHCAL && hfgeo) {
491  if (theHFDigitizer)
492  theHFDigitizer->run(*hfResult, engine);
494  theHFQIE10Digitizer->run(*hfQIE10Result, engine);
495  }
496  if (isZDC && zdcgeo && theZDCDigitizer) {
497  theZDCDigitizer->run(*zdcResult, engine);
498  }
499 
500  edm::LogInfo("HcalDigitizer") << "HCAL HBHE digis : " << hbheResult->size();
501  edm::LogInfo("HcalDigitizer") << "HCAL HO digis : " << hoResult->size();
502  edm::LogInfo("HcalDigitizer") << "HCAL HF digis : " << hfResult->size();
503  edm::LogInfo("HcalDigitizer") << "HCAL ZDC digis : " << zdcResult->size();
504  edm::LogInfo("HcalDigitizer") << "HCAL HF QIE10 digis : " << hfQIE10Result->size();
505  edm::LogInfo("HcalDigitizer") << "HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
506 
507 #ifdef EDM_ML_DEBUG
508  edm::LogVerbatim("HcalSim") << "\nHCAL HBHE digis : " << hbheResult->size();
509  edm::LogVerbatim("HcalSim") << "HCAL HO digis : " << hoResult->size();
510  edm::LogVerbatim("HcalSim") << "HCAL HF digis : " << hfResult->size();
511  edm::LogVerbatim("HcalSim") << "HCAL ZDC digis : " << zdcResult->size();
512  edm::LogVerbatim("HcalSim") << "HCAL HF QIE10 digis : " << hfQIE10Result->size();
513  edm::LogVerbatim("HcalSim") << "HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
514 #endif
515 
516  // Step D: Put outputs into event
517  e.put(std::move(hbheResult));
518  e.put(std::move(hoResult));
519  e.put(std::move(hfResult));
520  e.put(std::move(zdcResult));
521  e.put(std::move(hfQIE10Result), "HFQIE10DigiCollection");
522  e.put(std::move(hbheQIE11Result), "HBHEQIE11DigiCollection");
523 
524  if (debugCS_) {
525  std::unique_ptr<CaloSamplesCollection> csResult(new CaloSamplesCollection());
526  // smush together all the results
527  if (theHBHEDigitizer)
528  csResult->insert(
529  csResult->end(), theHBHEDigitizer->getCaloSamples().begin(), theHBHEDigitizer->getCaloSamples().end());
531  csResult->insert(csResult->end(),
532  theHBHEQIE11Digitizer->getCaloSamples().begin(),
533  theHBHEQIE11Digitizer->getCaloSamples().end());
534  if (theHODigitizer)
535  csResult->insert(
536  csResult->end(), theHODigitizer->getCaloSamples().begin(), theHODigitizer->getCaloSamples().end());
537  if (theHOSiPMDigitizer)
538  csResult->insert(
539  csResult->end(), theHOSiPMDigitizer->getCaloSamples().begin(), theHOSiPMDigitizer->getCaloSamples().end());
540  if (theHFDigitizer)
541  csResult->insert(
542  csResult->end(), theHFDigitizer->getCaloSamples().begin(), theHFDigitizer->getCaloSamples().end());
544  csResult->insert(
545  csResult->end(), theHFQIE10Digitizer->getCaloSamples().begin(), theHFQIE10Digitizer->getCaloSamples().end());
546  if (theZDCDigitizer)
547  csResult->insert(
548  csResult->end(), theZDCDigitizer->getCaloSamples().begin(), theZDCDigitizer->getCaloSamples().end());
549  e.put(std::move(csResult), "HcalSamples");
550  }
551 
552  if (injectTestHits_) {
553  std::unique_ptr<edm::PCaloHitContainer> pcResult(new edm::PCaloHitContainer());
554  pcResult->insert(pcResult->end(), injectedHits_.begin(), injectedHits_.end());
555  e.put(std::move(pcResult), "HcalHits");
556  }
557 
558 #ifdef EDM_ML_DEBUG
559  edm::LogVerbatim("HcalSim") << "\n========> HcalDigitizer e.put\n";
560 #endif
561 }
std::vector< DetId > theHFQIE10DetIds
Log< level::Info, true > LogVerbatim
std::vector< PCaloHit > PCaloHitContainer
std::vector< CaloSamples > CaloSamplesCollection
Definition: CaloSamples.h:99
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
std::unique_ptr< HFDigitizer > theHFDigitizer
std::unique_ptr< HODigitizer > theHODigitizer
edm::SortedCollection< ZDCDataFrame > ZDCDigiCollection
HcalDataFrameContainer< QIE10DataFrame > QIE10DigiCollection
edm::SortedCollection< HODataFrame > HODigiCollection
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
std::unique_ptr< HcalSiPMHitResponse > theHBHESiPMResponse
static const size_type MAXSAMPLES
HcalDataFrameContainer< QIE11DataFrame > QIE11DigiCollection
Log< level::Info, false > LogInfo
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
std::unique_ptr< CaloHitResponse > theHFQIE10Response
edm::SortedCollection< HFDataFrame > HFDigiCollection
std::vector< DetId > theHBHEQIE11DetIds
def move(src, dest)
Definition: eostools.py:511
edm::SortedCollection< HBHEDataFrame > HBHEDigiCollection
std::vector< PCaloHit > injectedHits_

◆ initializeEvent()

void HcalDigitizer::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)

Produces the EDM products,

Definition at line 309 of file HcalDigitizer.cc.

References submitPVValidationJobs::conditions, conditionsToken_, options_cfi::eventSetup, HcalShapes::setDbService(), HcalSimParameterMap::setDbService(), setup(), theCoderFactory, theHBHEAmplifier, theHBHEDigitizer, theHBHEQIE11Amplifier, theHBHEQIE11Digitizer, theHBHEQIE11ElectronicsSim, theHFAmplifier, theHFDigitizer, theHFQIE10Amplifier, theHFQIE10Digitizer, theHFQIE10ElectronicsSim, theHOAmplifier, theHODigitizer, theHOSiPMDigitizer, theParameterMap, theShapes, theZDCAmplifier, and theZDCDigitizer.

Referenced by HcalDigiProducer::initializeEvent().

309  {
310  setup(eventSetup);
311 
312  // get the appropriate gains, noises, & widths for this event
314 
316 
317  theHBHEAmplifier->setDbService(conditions);
318  theHFAmplifier->setDbService(conditions);
319  theHOAmplifier->setDbService(conditions);
320  theZDCAmplifier->setDbService(conditions);
321  theHFQIE10Amplifier->setDbService(conditions);
322  theHBHEQIE11Amplifier->setDbService(conditions);
323 
324  theHFQIE10ElectronicsSim->setDbService(conditions);
325  theHBHEQIE11ElectronicsSim->setDbService(conditions);
326 
327  theCoderFactory->setDbService(conditions);
329 
330  // initialize hits
331  if (theHBHEDigitizer)
332  theHBHEDigitizer->initializeHits();
334  theHBHEQIE11Digitizer->initializeHits();
335  if (theHODigitizer)
336  theHODigitizer->initializeHits();
337  if (theHOSiPMDigitizer)
338  theHOSiPMDigitizer->initializeHits();
340  theHFQIE10Digitizer->initializeHits();
341  if (theHFDigitizer)
342  theHFDigitizer->initializeHits();
343  if (theZDCDigitizer)
344  theZDCDigitizer->initializeHits();
345 }
std::unique_ptr< HcalAmplifier > theHBHEAmplifier
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
std::unique_ptr< HFDigitizer > theHFDigitizer
std::unique_ptr< HODigitizer > theHODigitizer
std::unique_ptr< HcalAmplifier > theHFAmplifier
std::unique_ptr< HcalCoderFactory > theCoderFactory
std::unique_ptr< HcalElectronicsSim > theHFQIE10ElectronicsSim
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
std::unique_ptr< HcalAmplifier > theHBHEQIE11Amplifier
HcalShapes theShapes
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalAmplifier > theZDCAmplifier
void setDbService(const HcalDbService *service)
Definition: HcalShapes.h:24
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
std::unique_ptr< HcalAmplifier > theHOAmplifier
const edm::ESGetToken< HcalDbService, HcalDbRecord > conditionsToken_
Definition: HcalDigitizer.h:87
std::unique_ptr< HcalAmplifier > theHFQIE10Amplifier
std::unique_ptr< HcalElectronicsSim > theHBHEQIE11ElectronicsSim
void setup(const edm::EventSetup &es)
void setDbService(const HcalDbService *service)

◆ setHBHENoiseSignalGenerator()

void HcalDigitizer::setHBHENoiseSignalGenerator ( HcalBaseSignalGenerator noiseGenerator)

Definition at line 258 of file HcalDigitizer.cc.

References HcalBaseSignalGenerator::setElectronicsSim(), HcalBaseSignalGenerator::setParameterMap(), theHBHEAmplifier, theHBHEDigitizer, theHBHEElectronicsSim, and theParameterMap.

Referenced by HcalDigiProducer::setHBHENoiseSignalGenerator().

258  {
259  noiseGenerator->setParameterMap(&theParameterMap);
260  noiseGenerator->setElectronicsSim(theHBHEElectronicsSim.get());
261  if (theHBHEDigitizer)
262  theHBHEDigitizer->setNoiseSignalGenerator(noiseGenerator);
263  theHBHEAmplifier->setNoiseSignalGenerator(noiseGenerator);
264 }
void setParameterMap(HcalSimParameterMap *map)
std::unique_ptr< HcalAmplifier > theHBHEAmplifier
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalElectronicsSim > theHBHEElectronicsSim

◆ setHFNoiseSignalGenerator()

void HcalDigitizer::setHFNoiseSignalGenerator ( HcalBaseSignalGenerator noiseGenerator)

Definition at line 274 of file HcalDigitizer.cc.

References HcalBaseSignalGenerator::setElectronicsSim(), HcalBaseSignalGenerator::setParameterMap(), theHFAmplifier, theHFDigitizer, theHFElectronicsSim, and theParameterMap.

Referenced by HcalDigiProducer::setHFNoiseSignalGenerator().

274  {
275  noiseGenerator->setParameterMap(&theParameterMap);
276  noiseGenerator->setElectronicsSim(theHFElectronicsSim.get());
277  if (theHFDigitizer)
278  theHFDigitizer->setNoiseSignalGenerator(noiseGenerator);
279  theHFAmplifier->setNoiseSignalGenerator(noiseGenerator);
280 }
void setParameterMap(HcalSimParameterMap *map)
std::unique_ptr< HFDigitizer > theHFDigitizer
std::unique_ptr< HcalAmplifier > theHFAmplifier
std::unique_ptr< HcalElectronicsSim > theHFElectronicsSim
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
HcalSimParameterMap theParameterMap

◆ setHONoiseSignalGenerator()

void HcalDigitizer::setHONoiseSignalGenerator ( HcalBaseSignalGenerator noiseGenerator)

Definition at line 290 of file HcalDigitizer.cc.

References HcalBaseSignalGenerator::setElectronicsSim(), HcalBaseSignalGenerator::setParameterMap(), theHOAmplifier, theHODigitizer, theHOElectronicsSim, theHOSiPMDigitizer, and theParameterMap.

Referenced by HcalDigiProducer::setHONoiseSignalGenerator().

290  {
291  noiseGenerator->setParameterMap(&theParameterMap);
292  noiseGenerator->setElectronicsSim(theHOElectronicsSim.get());
293  if (theHODigitizer)
294  theHODigitizer->setNoiseSignalGenerator(noiseGenerator);
295  if (theHOSiPMDigitizer)
296  theHOSiPMDigitizer->setNoiseSignalGenerator(noiseGenerator);
297  theHOAmplifier->setNoiseSignalGenerator(noiseGenerator);
298 }
void setParameterMap(HcalSimParameterMap *map)
std::unique_ptr< HODigitizer > theHODigitizer
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalAmplifier > theHOAmplifier
std::unique_ptr< HcalElectronicsSim > theHOElectronicsSim

◆ setQIE10NoiseSignalGenerator()

void HcalDigitizer::setQIE10NoiseSignalGenerator ( HcalBaseSignalGenerator noiseGenerator)

Definition at line 282 of file HcalDigitizer.cc.

References HcalBaseSignalGenerator::setElectronicsSim(), HcalBaseSignalGenerator::setParameterMap(), theHFQIE10Amplifier, theHFQIE10Digitizer, theHFQIE10ElectronicsSim, and theParameterMap.

Referenced by HcalDigiProducer::setQIE10NoiseSignalGenerator().

282  {
283  noiseGenerator->setParameterMap(&theParameterMap);
284  noiseGenerator->setElectronicsSim(theHFQIE10ElectronicsSim.get());
286  theHFQIE10Digitizer->setNoiseSignalGenerator(noiseGenerator);
287  theHFQIE10Amplifier->setNoiseSignalGenerator(noiseGenerator);
288 }
void setParameterMap(HcalSimParameterMap *map)
std::unique_ptr< HcalElectronicsSim > theHFQIE10ElectronicsSim
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
HcalSimParameterMap theParameterMap
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
std::unique_ptr< HcalAmplifier > theHFQIE10Amplifier

◆ setQIE11NoiseSignalGenerator()

void HcalDigitizer::setQIE11NoiseSignalGenerator ( HcalBaseSignalGenerator noiseGenerator)

Definition at line 266 of file HcalDigitizer.cc.

References HcalBaseSignalGenerator::setElectronicsSim(), HcalBaseSignalGenerator::setParameterMap(), theHBHEQIE11Amplifier, theHBHEQIE11Digitizer, theHBHEQIE11ElectronicsSim, and theParameterMap.

Referenced by HcalDigiProducer::setQIE11NoiseSignalGenerator().

266  {
267  noiseGenerator->setParameterMap(&theParameterMap);
268  noiseGenerator->setElectronicsSim(theHBHEQIE11ElectronicsSim.get());
270  theHBHEQIE11Digitizer->setNoiseSignalGenerator(noiseGenerator);
271  theHBHEQIE11Amplifier->setNoiseSignalGenerator(noiseGenerator);
272 }
void setParameterMap(HcalSimParameterMap *map)
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
std::unique_ptr< HcalAmplifier > theHBHEQIE11Amplifier
HcalSimParameterMap theParameterMap
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
std::unique_ptr< HcalElectronicsSim > theHBHEQIE11ElectronicsSim

◆ setup()

void HcalDigitizer::setup ( const edm::EventSetup es)
private

Definition at line 563 of file HcalDigitizer.cc.

References agingFlagHB, agingFlagHE, checkGeometry(), edm::EventSetup::getData(), hcalTimeSlew_delay_, hcalTimeSlew_delay_token_, m_HBDarkening, m_HBDarkeningToken, m_HEDarkening, m_HEDarkeningToken, theHBHEAmplifier, theHBHEQIE11Amplifier, theHOAmplifier, and theZDCAmplifier.

Referenced by initializeEvent().

563  {
564  checkGeometry(es);
565 
566  if (agingFlagHB) {
568  }
569  if (agingFlagHE) {
571  }
572 
574 
577  theHOAmplifier->setTimeSlew(hcalTimeSlew_delay_);
578  theZDCAmplifier->setTimeSlew(hcalTimeSlew_delay_);
579 }
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
std::unique_ptr< HcalAmplifier > theHBHEAmplifier
void checkGeometry(const edm::EventSetup &eventSetup)
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecord > m_HBDarkeningToken
Definition: HcalDigitizer.h:89
const HBHEDarkening * m_HEDarkening
const HcalTimeSlew * hcalTimeSlew_delay_
std::unique_ptr< HcalAmplifier > theHBHEQIE11Amplifier
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecord > m_HEDarkeningToken
Definition: HcalDigitizer.h:90
std::unique_ptr< HcalAmplifier > theZDCAmplifier
std::unique_ptr< HcalAmplifier > theHOAmplifier
const HBHEDarkening * m_HBDarkening
const edm::ESGetToken< HcalTimeSlew, HcalTimeSlewRecord > hcalTimeSlew_delay_token_
Definition: HcalDigitizer.h:91

◆ setZDCNoiseSignalGenerator()

void HcalDigitizer::setZDCNoiseSignalGenerator ( HcalBaseSignalGenerator noiseGenerator)

Definition at line 300 of file HcalDigitizer.cc.

References HcalBaseSignalGenerator::setElectronicsSim(), HcalBaseSignalGenerator::setParameterMap(), theParameterMap, theZDCAmplifier, theZDCDigitizer, and theZDCElectronicsSim.

Referenced by HcalDigiProducer::setZDCNoiseSignalGenerator().

300  {
301  noiseGenerator->setParameterMap(&theParameterMap);
302  noiseGenerator->setElectronicsSim(theZDCElectronicsSim.get());
303  if (theZDCDigitizer) {
304  theZDCDigitizer->setNoiseSignalGenerator(noiseGenerator);
305  theZDCAmplifier->setNoiseSignalGenerator(noiseGenerator);
306  }
307 }
void setParameterMap(HcalSimParameterMap *map)
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
std::unique_ptr< HcalElectronicsSim > theZDCElectronicsSim
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalAmplifier > theZDCAmplifier

◆ updateGeometry()

void HcalDigitizer::updateGeometry ( const edm::EventSetup eventSetup)
private

Definition at line 607 of file HcalDigitizer.cc.

References buildHBHEQIECells(), buildHFQIECells(), buildHOSiPMCells(), DetId::Calo, options_cfi::eventSetup, Exception, CaloGeometry::getValidDetIds(), hbheCells, hbhegeo, DetId::Hcal, HcalBarrel, HcalEndcap, HcalForward, HcalOuter, hfgeo, hogeo, injectedHits_, injectedHitsCells_, injectedHitsEnergy_, injectedHitsTime_, injectTestHits_, killHE_, HcalZDCDetId::SubdetectorId, theGeometry, theHBHEQIE11DetIds, theHBHESiPMResponse, theHOSiPMDigitizer, theHOSiPMResponse, theZDCDigitizer, createJobs::tmp, and zdcgeo.

Referenced by checkGeometry().

607  {
608  const std::vector<DetId> &hbCells = theGeometry->getValidDetIds(DetId::Hcal, HcalBarrel);
609  const std::vector<DetId> &heCells = theGeometry->getValidDetIds(DetId::Hcal, HcalEndcap);
610  const std::vector<DetId> &hoCells = theGeometry->getValidDetIds(DetId::Hcal, HcalOuter);
611  const std::vector<DetId> &hfCells = theGeometry->getValidDetIds(DetId::Hcal, HcalForward);
612  const std::vector<DetId> &zdcCells = theGeometry->getValidDetIds(DetId::Calo, HcalZDCDetId::SubdetectorId);
613  // const std::vector<DetId>& hcalTrigCells =
614  // geometry->getValidDetIds(DetId::Hcal, HcalTriggerTower); const
615  // std::vector<DetId>& hcalCalib = geometry->getValidDetIds(DetId::Calo,
616  // HcalCastorDetId::SubdetectorId);
617  // edm::LogVerbatim("HcalSim") <<"HcalDigitizer::CheckGeometry number of cells: << zdcCells.size();
618  if (zdcCells.empty())
619  zdcgeo = false;
620  if (hbCells.empty() && heCells.empty())
621  hbhegeo = false;
622  if (hoCells.empty())
623  hogeo = false;
624  if (hfCells.empty())
625  hfgeo = false;
626  // combine HB & HE
627 
628  hbheCells = hbCells;
629  if (!killHE_) {
630  hbheCells.insert(hbheCells.end(), heCells.begin(), heCells.end());
631  }
632  // handle mixed QIE8/11 scenario in HBHE
636 
637  if (theHOSiPMDigitizer) {
638  buildHOSiPMCells(hoCells, eventSetup);
639  if (theHOSiPMResponse)
640  theHOSiPMResponse->setDetIds(hoCells);
641  }
642 
643  // handle mixed QIE8/10 scenario in HF
644  buildHFQIECells(hfCells, eventSetup);
645 
646  if (theZDCDigitizer)
647  theZDCDigitizer->setDetIds(zdcCells);
648 
649  // fill test hits collection if desired and empty
650  if (injectTestHits_ && injectedHits_.empty() && !injectedHitsCells_.empty() && !injectedHitsEnergy_.empty()) {
651  // make list of specified cells if desired
652  std::vector<DetId> testCells;
653  if (injectedHitsCells_.size() >= 4) {
654  testCells.reserve(injectedHitsCells_.size() / 4);
655  for (unsigned ic = 0; ic < injectedHitsCells_.size(); ic += 4) {
656  if (ic + 4 > injectedHitsCells_.size())
657  break;
658  testCells.push_back(HcalDetId((HcalSubdetector)injectedHitsCells_[ic],
659  injectedHitsCells_[ic + 1],
660  injectedHitsCells_[ic + 2],
661  injectedHitsCells_[ic + 3]));
662  }
663  } else {
664  int testSubdet = injectedHitsCells_[0];
665  if (testSubdet == HcalBarrel)
666  testCells = hbCells;
667  else if (testSubdet == HcalEndcap)
668  testCells = heCells;
669  else if (testSubdet == HcalForward)
670  testCells = hfCells;
671  else if (testSubdet == HcalOuter)
672  testCells = hoCells;
673  else
674  throw cms::Exception("Configuration") << "Unknown subdet " << testSubdet << " for HCAL test hit injection";
675  }
676  bool useHitTimes = (injectedHitsTime_.size() == injectedHitsEnergy_.size());
677  injectedHits_.reserve(testCells.size() * injectedHitsEnergy_.size());
678  for (unsigned ih = 0; ih < injectedHitsEnergy_.size(); ++ih) {
679  double tmp = useHitTimes ? injectedHitsTime_[ih] : 0.;
680  for (auto &aCell : testCells) {
681  injectedHits_.emplace_back(aCell, injectedHitsEnergy_[ih], tmp);
682  }
683  }
684  }
685 }
std::vector< int > injectedHitsCells_
void buildHFQIECells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
void buildHBHEQIECells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
std::vector< double > injectedHitsEnergy_
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
void buildHOSiPMCells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
std::unique_ptr< HcalSiPMHitResponse > theHBHESiPMResponse
HcalSubdetector
Definition: HcalAssistant.h:31
std::vector< double > injectedHitsTime_
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
Definition: CaloGeometry.cc:75
const CaloGeometry * theGeometry
Definition: HcalDigitizer.h:99
std::unique_ptr< HcalSiPMHitResponse > theHOSiPMResponse
std::vector< DetId > hbheCells
static constexpr int32_t SubdetectorId
Definition: HcalZDCDetId.h:35
tmp
align.sh
Definition: createJobs.py:716
std::vector< DetId > theHBHEQIE11DetIds
std::vector< PCaloHit > injectedHits_

Member Data Documentation

◆ agingFlagHB

bool HcalDigitizer::agingFlagHB
private

Definition at line 180 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setup().

◆ agingFlagHE

bool HcalDigitizer::agingFlagHE
private

Definition at line 180 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setup().

◆ conditionsToken_

const edm::ESGetToken<HcalDbService, HcalDbRecord> HcalDigitizer::conditionsToken_
private

Definition at line 87 of file HcalDigitizer.h.

Referenced by initializeEvent().

◆ debugCS_

bool HcalDigitizer::debugCS_
private

Definition at line 171 of file HcalDigitizer.h.

Referenced by finalizeEvent(), and HcalDigitizer().

◆ deliveredLumi

double HcalDigitizer::deliveredLumi
private

Definition at line 179 of file HcalDigitizer.h.

Referenced by darkening(), and HcalDigitizer().

◆ doHFWindow_

bool HcalDigitizer::doHFWindow_
private

Definition at line 169 of file HcalDigitizer.h.

Referenced by accumulateCaloHits().

◆ hbheCells

std::vector<DetId> HcalDigitizer::hbheCells
private

Definition at line 161 of file HcalDigitizer.h.

Referenced by updateGeometry().

◆ hbhegeo

bool HcalDigitizer::hbhegeo
private

Definition at line 167 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), finalizeEvent(), and updateGeometry().

◆ hcalTimeSlew_delay_

const HcalTimeSlew* HcalDigitizer::hcalTimeSlew_delay_
private

Definition at line 188 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setup().

◆ hcalTimeSlew_delay_token_

const edm::ESGetToken<HcalTimeSlew, HcalTimeSlewRecord> HcalDigitizer::hcalTimeSlew_delay_token_
private

Definition at line 91 of file HcalDigitizer.h.

Referenced by setup().

◆ hcalToken_

edm::EDGetTokenT<std::vector<PCaloHit> > HcalDigitizer::hcalToken_
private

Definition at line 183 of file HcalDigitizer.h.

Referenced by accumulate().

◆ hfgeo

bool HcalDigitizer::hfgeo
private

Definition at line 167 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), finalizeEvent(), and updateGeometry().

◆ hitsProducer_

std::string HcalDigitizer::hitsProducer_
private

Definition at line 175 of file HcalDigitizer.h.

Referenced by accumulate().

◆ hogeo

bool HcalDigitizer::hogeo
private

Definition at line 167 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), finalizeEvent(), and updateGeometry().

◆ ignoreTime_

bool HcalDigitizer::ignoreTime_
private

Definition at line 172 of file HcalDigitizer.h.

Referenced by HcalDigitizer().

◆ injectedHits_

std::vector<PCaloHit> HcalDigitizer::injectedHits_
private

Definition at line 193 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), finalizeEvent(), and updateGeometry().

◆ injectedHitsCells_

std::vector<int> HcalDigitizer::injectedHitsCells_
private

Definition at line 192 of file HcalDigitizer.h.

Referenced by updateGeometry().

◆ injectedHitsEnergy_

std::vector<double> HcalDigitizer::injectedHitsEnergy_
private

Definition at line 190 of file HcalDigitizer.h.

Referenced by updateGeometry().

◆ injectedHitsTime_

std::vector<double> HcalDigitizer::injectedHitsTime_
private

Definition at line 191 of file HcalDigitizer.h.

Referenced by updateGeometry().

◆ injectTestHits_

bool HcalDigitizer::injectTestHits_
private

Definition at line 173 of file HcalDigitizer.h.

Referenced by accumulate(), accumulateCaloHits(), finalizeEvent(), and updateGeometry().

◆ isHCAL

bool HcalDigitizer::isHCAL
private

Definition at line 167 of file HcalDigitizer.h.

Referenced by accumulate(), accumulateCaloHits(), and finalizeEvent().

◆ isZDC

bool HcalDigitizer::isZDC
private

Definition at line 167 of file HcalDigitizer.h.

Referenced by accumulate(), accumulateCaloHits(), and finalizeEvent().

◆ killHE_

bool HcalDigitizer::killHE_
private

Definition at line 170 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), and updateGeometry().

◆ m_HBDarkening

const HBHEDarkening* HcalDigitizer::m_HBDarkening
private

Definition at line 184 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), darkening(), and setup().

◆ m_HBDarkeningToken

edm::ESGetToken<HBHEDarkening, HBHEDarkeningRecord> HcalDigitizer::m_HBDarkeningToken
private

Definition at line 89 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setup().

◆ m_HEDarkening

const HBHEDarkening* HcalDigitizer::m_HEDarkening
private

Definition at line 185 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), darkening(), and setup().

◆ m_HEDarkeningToken

edm::ESGetToken<HBHEDarkening, HBHEDarkeningRecord> HcalDigitizer::m_HEDarkeningToken
private

Definition at line 90 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setup().

◆ m_HFRecalibration

std::unique_ptr<HFRecalibration> HcalDigitizer::m_HFRecalibration
private

Definition at line 186 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), darkening(), and HcalDigitizer().

◆ mcParamsToken_

edm::ESGetToken<HcalMCParams, HcalMCParamsRcd> HcalDigitizer::mcParamsToken_
private

Definition at line 95 of file HcalDigitizer.h.

Referenced by buildHOSiPMCells(), and HcalDigitizer().

◆ qieTypesToken_

const edm::ESGetToken<HcalQIETypes, HcalQIETypesRcd> HcalDigitizer::qieTypesToken_
private

Definition at line 94 of file HcalDigitizer.h.

Referenced by buildHBHEQIECells(), and buildHFQIECells().

◆ testNumbering_

bool HcalDigitizer::testNumbering_
private

Definition at line 168 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), and HcalDigitizer().

◆ theCoderFactory

std::unique_ptr<HcalCoderFactory> HcalDigitizer::theCoderFactory
private

Definition at line 131 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and initializeEvent().

◆ theGeometry

const CaloGeometry* HcalDigitizer::theGeometry
private

Definition at line 99 of file HcalDigitizer.h.

Referenced by checkGeometry(), and updateGeometry().

◆ theGeometryToken

const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> HcalDigitizer::theGeometryToken
private

Definition at line 92 of file HcalDigitizer.h.

Referenced by checkGeometry().

◆ theGeometryWatcher_

edm::ESWatcher<CaloGeometryRecord> HcalDigitizer::theGeometryWatcher_
private

Definition at line 96 of file HcalDigitizer.h.

Referenced by checkGeometry().

◆ theHBHEAmplifier

std::unique_ptr<HcalAmplifier> HcalDigitizer::theHBHEAmplifier
private

◆ theHBHEDigitizer

std::unique_ptr<HBHEDigitizer> HcalDigitizer::theHBHEDigitizer
private

◆ theHBHEElectronicsSim

std::unique_ptr<HcalElectronicsSim> HcalDigitizer::theHBHEElectronicsSim
private

Definition at line 133 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setHBHENoiseSignalGenerator().

◆ theHBHEHitFilter

HBHEHitFilter HcalDigitizer::theHBHEHitFilter
private

Definition at line 140 of file HcalDigitizer.h.

Referenced by buildHBHEQIECells(), and HcalDigitizer().

◆ theHBHEQIE11Amplifier

std::unique_ptr<HcalAmplifier> HcalDigitizer::theHBHEQIE11Amplifier
private

◆ theHBHEQIE11DetIds

std::vector<DetId> HcalDigitizer::theHBHEQIE11DetIds
private

Definition at line 162 of file HcalDigitizer.h.

Referenced by buildHBHEQIECells(), finalizeEvent(), and updateGeometry().

◆ theHBHEQIE11Digitizer

std::unique_ptr<QIE11Digitizer> HcalDigitizer::theHBHEQIE11Digitizer
private

◆ theHBHEQIE11ElectronicsSim

std::unique_ptr<HcalElectronicsSim> HcalDigitizer::theHBHEQIE11ElectronicsSim
private

Definition at line 138 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), initializeEvent(), and setQIE11NoiseSignalGenerator().

◆ theHBHEQIE11HitFilter

HBHEHitFilter HcalDigitizer::theHBHEQIE11HitFilter
private

Definition at line 141 of file HcalDigitizer.h.

Referenced by buildHBHEQIECells(), and HcalDigitizer().

◆ theHBHEQIE8DetIds

std::vector<DetId> HcalDigitizer::theHBHEQIE8DetIds
private

Definition at line 162 of file HcalDigitizer.h.

Referenced by buildHBHEQIECells().

◆ theHBHEResponse

std::unique_ptr<CaloHitResponse> HcalDigitizer::theHBHEResponse
private

Definition at line 113 of file HcalDigitizer.h.

Referenced by checkGeometry(), and HcalDigitizer().

◆ theHBHESiPMResponse

std::unique_ptr<HcalSiPMHitResponse> HcalDigitizer::theHBHESiPMResponse
private

Definition at line 114 of file HcalDigitizer.h.

Referenced by checkGeometry(), finalizeEvent(), HcalDigitizer(), and updateGeometry().

◆ theHFAmplifier

std::unique_ptr<HcalAmplifier> HcalDigitizer::theHFAmplifier
private

Definition at line 124 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), initializeEvent(), and setHFNoiseSignalGenerator().

◆ theHFDigitizer

std::unique_ptr<HFDigitizer> HcalDigitizer::theHFDigitizer
private

◆ theHFElectronicsSim

std::unique_ptr<HcalElectronicsSim> HcalDigitizer::theHFElectronicsSim
private

Definition at line 134 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setHFNoiseSignalGenerator().

◆ theHFHitFilter

HFHitFilter HcalDigitizer::theHFHitFilter
private

Definition at line 142 of file HcalDigitizer.h.

Referenced by HcalDigitizer().

◆ theHFQIE10Amplifier

std::unique_ptr<HcalAmplifier> HcalDigitizer::theHFQIE10Amplifier
private

Definition at line 127 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), initializeEvent(), and setQIE10NoiseSignalGenerator().

◆ theHFQIE10DetIds

std::vector<DetId> HcalDigitizer::theHFQIE10DetIds
private

Definition at line 165 of file HcalDigitizer.h.

Referenced by buildHFQIECells(), and finalizeEvent().

◆ theHFQIE10Digitizer

std::unique_ptr<QIE10Digitizer> HcalDigitizer::theHFQIE10Digitizer
private

◆ theHFQIE10ElectronicsSim

std::unique_ptr<HcalElectronicsSim> HcalDigitizer::theHFQIE10ElectronicsSim
private

Definition at line 137 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), initializeEvent(), and setQIE10NoiseSignalGenerator().

◆ theHFQIE10HitFilter

HFHitFilter HcalDigitizer::theHFQIE10HitFilter
private

Definition at line 143 of file HcalDigitizer.h.

Referenced by HcalDigitizer().

◆ theHFQIE10Response

std::unique_ptr<CaloHitResponse> HcalDigitizer::theHFQIE10Response
private

Definition at line 118 of file HcalDigitizer.h.

Referenced by checkGeometry(), finalizeEvent(), and HcalDigitizer().

◆ theHFQIE8DetIds

std::vector<DetId> HcalDigitizer::theHFQIE8DetIds
private

Definition at line 165 of file HcalDigitizer.h.

Referenced by buildHFQIECells().

◆ theHFResponse

std::unique_ptr<CaloHitResponse> HcalDigitizer::theHFResponse
private

Definition at line 117 of file HcalDigitizer.h.

Referenced by checkGeometry(), and HcalDigitizer().

◆ theHOAmplifier

std::unique_ptr<HcalAmplifier> HcalDigitizer::theHOAmplifier
private

Definition at line 125 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), initializeEvent(), setHONoiseSignalGenerator(), and setup().

◆ theHODigitizer

std::unique_ptr<HODigitizer> HcalDigitizer::theHODigitizer
private

◆ theHOElectronicsSim

std::unique_ptr<HcalElectronicsSim> HcalDigitizer::theHOElectronicsSim
private

Definition at line 135 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setHONoiseSignalGenerator().

◆ theHOHitFilter

HOHitFilter HcalDigitizer::theHOHitFilter
private

Definition at line 144 of file HcalDigitizer.h.

Referenced by buildHOSiPMCells(), and HcalDigitizer().

◆ theHOHPDDetIds

std::vector<DetId> HcalDigitizer::theHOHPDDetIds
private

Definition at line 163 of file HcalDigitizer.h.

Referenced by buildHOSiPMCells().

◆ theHOResponse

std::unique_ptr<CaloHitResponse> HcalDigitizer::theHOResponse
private

Definition at line 115 of file HcalDigitizer.h.

Referenced by checkGeometry(), and HcalDigitizer().

◆ theHOSiPMCode

int HcalDigitizer::theHOSiPMCode
private

Definition at line 177 of file HcalDigitizer.h.

Referenced by buildHOSiPMCells(), and HcalDigitizer().

◆ theHOSiPMDetIds

std::vector<DetId> HcalDigitizer::theHOSiPMDetIds
private

Definition at line 164 of file HcalDigitizer.h.

Referenced by buildHOSiPMCells().

◆ theHOSiPMDigitizer

std::unique_ptr<HODigitizer> HcalDigitizer::theHOSiPMDigitizer
private

◆ theHOSiPMHitFilter

HOHitFilter HcalDigitizer::theHOSiPMHitFilter
private

Definition at line 145 of file HcalDigitizer.h.

Referenced by buildHOSiPMCells(), and HcalDigitizer().

◆ theHOSiPMResponse

std::unique_ptr<HcalSiPMHitResponse> HcalDigitizer::theHOSiPMResponse
private

Definition at line 116 of file HcalDigitizer.h.

Referenced by checkGeometry(), HcalDigitizer(), and updateGeometry().

◆ theIonFeedback

std::unique_ptr<HPDIonFeedbackSim> HcalDigitizer::theIonFeedback
private

Definition at line 130 of file HcalDigitizer.h.

Referenced by HcalDigitizer().

◆ theParameterMap

HcalSimParameterMap HcalDigitizer::theParameterMap
private

◆ theRecNumber

const HcalDDDRecConstants* HcalDigitizer::theRecNumber
private

Definition at line 100 of file HcalDigitizer.h.

Referenced by checkGeometry().

◆ theRecNumberToken

const edm::ESGetToken<HcalDDDRecConstants, HcalRecNumberingRecord> HcalDigitizer::theRecNumberToken
private

Definition at line 93 of file HcalDigitizer.h.

Referenced by checkGeometry().

◆ theRecNumberWatcher_

edm::ESWatcher<HcalRecNumberingRecord> HcalDigitizer::theRecNumberWatcher_
private

Definition at line 97 of file HcalDigitizer.h.

Referenced by checkGeometry().

◆ theRelabeller

std::unique_ptr<HcalHitRelabeller> HcalDigitizer::theRelabeller
private

Definition at line 157 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), checkGeometry(), and HcalDigitizer().

◆ theShapes

HcalShapes HcalDigitizer::theShapes
private

Definition at line 111 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and initializeEvent().

◆ theTimeSlewSim

std::unique_ptr<HcalTimeSlewSim> HcalDigitizer::theTimeSlewSim
private

Definition at line 148 of file HcalDigitizer.h.

Referenced by HcalDigitizer().

◆ theZDCAmplifier

std::unique_ptr<HcalAmplifier> HcalDigitizer::theZDCAmplifier
private

Definition at line 126 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), initializeEvent(), setup(), and setZDCNoiseSignalGenerator().

◆ theZDCDigitizer

std::unique_ptr<ZDCDigitizer> HcalDigitizer::theZDCDigitizer
private

◆ theZDCElectronicsSim

std::unique_ptr<HcalElectronicsSim> HcalDigitizer::theZDCElectronicsSim
private

Definition at line 136 of file HcalDigitizer.h.

Referenced by HcalDigitizer(), and setZDCNoiseSignalGenerator().

◆ theZDCHitFilter

ZDCHitFilter HcalDigitizer::theZDCHitFilter
private

Definition at line 146 of file HcalDigitizer.h.

Referenced by HcalDigitizer().

◆ theZDCResponse

std::unique_ptr<CaloHitResponse> HcalDigitizer::theZDCResponse
private

Definition at line 119 of file HcalDigitizer.h.

Referenced by checkGeometry(), and HcalDigitizer().

◆ topoToken_

const edm::ESGetToken<HcalTopology, HcalRecNumberingRecord> HcalDigitizer::topoToken_
private

Definition at line 88 of file HcalDigitizer.h.

Referenced by accumulate(), buildHBHEQIECells(), buildHFQIECells(), and buildHOSiPMCells().

◆ zdcgeo

bool HcalDigitizer::zdcgeo
private

Definition at line 167 of file HcalDigitizer.h.

Referenced by accumulateCaloHits(), finalizeEvent(), and updateGeometry().

◆ zdcToken_

edm::EDGetTokenT<std::vector<PCaloHit> > HcalDigitizer::zdcToken_
private

Definition at line 182 of file HcalDigitizer.h.

Referenced by accumulate().