29 #include <boost/foreach.hpp> 42 theRecNumber(nullptr),
47 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
true)),
50 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
false)),
53 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
true)),
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),
69 theHBHEQIE11ElectronicsSim(nullptr),
71 theHBHEQIE11HitFilter(),
73 theHFQIE10HitFilter(),
77 theHBHEDigitizer(nullptr),
78 theHODigitizer(nullptr),
79 theHOSiPMDigitizer(nullptr),
80 theHFDigitizer(nullptr),
81 theZDCDigitizer(nullptr),
82 theHFQIE10Digitizer(nullptr),
83 theHBHEQIE11Digitizer(nullptr),
84 theRelabeller(nullptr),
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")),
99 agingFlagHB(ps.getParameter<
bool>(
"HBDarkening")),
100 agingFlagHE(ps.getParameter<
bool>(
"HEDarkening")),
101 zdcToken_(iC.consumes(
edm::
InputTag(hitsProducer_,
"ZDCHITS"))),
102 hcalToken_(iC.consumes(
edm::
InputTag(hitsProducer_,
"HcalHits"))),
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")) {
121 bool PreMix1 = ps.
getParameter<
bool>(
"HcalPreMixStage1");
122 bool PreMix2 = ps.
getParameter<
bool>(
"HcalPreMixStage2");
125 bool agingFlagHF = ps.
getParameter<
bool>(
"HFDarkening");
128 if (PreMix1 && PreMix2) {
129 throw cms::Exception(
"Configuration") <<
"HcalDigitizer cannot operate in PreMixing digitization and " 131 "digi combination modes at the same time. Please set one mode to " 133 "in the configuration file.";
217 if (ps.getParameter<
bool>(
"doThermalNoise")) {
343 edm::Handle<std::vector<PCaloHit>>
const &zdcHandle,
345 CLHEP::HepRandomEngine *engine,
349 std::vector<PCaloHit> hcalHitsOrig = *hcalHandle.product();
352 std::vector<PCaloHit> hcalHits;
353 hcalHits.reserve(hcalHitsOrig.size());
366 for (
unsigned int i = 0;
i < hcalHitsOrig.size();
i++) {
370 edm::LogError(
"HcalDigitizer") <<
"bad hcal id found in digitizer. Skipping " <<
id.rawId() <<
" " << hid;
384 edm::LogVerbatim(
"HcalSim") <<
"Hit " <<
i <<
" out of " << hcalHits.size() <<
" " << std::hex <<
id.rawId()
387 hcalHitsOrig[
i].setID(newid.
rawId());
388 hcalHits.push_back(hcalHitsOrig[
i]);
413 edm::LogInfo(
"HcalDigitizer") <<
"We don't have HCAL hit collection available ";
421 edm::LogInfo(
"HcalDigitizer") <<
"We don't have ZDC hit collection available ";
440 CLHEP::HepRandomEngine *engine) {
444 e.getByLabel(zdcTag, zdcHandle);
449 e.getByLabel(hcalTag, hcalHandle);
495 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HBHE digis : " << hbheResult->size();
496 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HO digis : " << hoResult->size();
497 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HF digis : " << hfResult->size();
498 edm::LogInfo(
"HcalDigitizer") <<
"HCAL ZDC digis : " << zdcResult->size();
499 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size();
500 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
503 edm::LogVerbatim(
"HcalSim") <<
"\nHCAL HBHE digis : " << hbheResult->size();
507 edm::LogVerbatim(
"HcalSim") <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size();
508 edm::LogVerbatim(
"HcalSim") <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
516 e.put(
std::move(hfQIE10Result),
"HFQIE10DigiCollection");
517 e.put(
std::move(hbheQIE11Result),
"HBHEQIE11DigiCollection");
526 csResult->insert(csResult->end(),
596 if (check1
or check2) {
612 if (zdcCells.empty())
614 if (hbCells.empty() && heCells.empty())
645 std::vector<DetId> testCells;
667 throw cms::Exception(
"Configuration") <<
"Unknown subdet " << testSubdet <<
" for HCAL test hit injection";
673 for (
auto &aCell : testCells) {
688 if (qieTypes.
topo() ==
nullptr) {
692 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
694 if (qieType ==
QIE8) {
696 }
else if (qieType ==
QIE10) {
724 if (qieTypes.
topo() ==
nullptr) {
728 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
730 if (qieType ==
QIE8) {
732 }
else if (qieType ==
QIE11) {
766 std::vector<HcalDetId> zecotekDetIds, hamamatsuDetIds;
770 if (mcParams.
topo() ==
nullptr) {
774 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
777 zecotekDetIds.emplace_back(*detItr);
780 hamamatsuDetIds.emplace_back(*detItr);
813 for (
unsigned int ii = 0;
ii < hcalHits.size(); ++
ii) {
814 uint32_t tmpId = hcalHits[
ii].id();
818 bool darkened =
false;
837 hcalHits[
ii].setEnergy(hcalHits[
ii].
energy() * dweight);
HFHitFilter theHFQIE10HitFilter
std::vector< DetId > theHFQIE10DetIds
Log< level::Info, true > LogVerbatim
std::vector< int > injectedHitsCells_
HBHEHitFilter theHBHEHitFilter
T getParameter(std::string const &) const
constexpr bool oldFormat() const
std::vector< PCaloHit > PCaloHitContainer
void setQIE10NoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
std::vector< CaloSamples > CaloSamplesCollection
const HcalDDDRecConstants * theRecNumber
void setParameterMap(HcalSimParameterMap *map)
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
std::unique_ptr< CaloHitResponse > theHFResponse
const edm::ESGetToken< HcalDDDRecConstants, HcalRecNumberingRecord > theRecNumberToken
std::unique_ptr< HcalTimeSlewSim > theTimeSlewSim
std::unique_ptr< HcalAmplifier > theHBHEAmplifier
std::unique_ptr< HBHEDigitizer > theHBHEDigitizer
void buildHFQIECells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
float degradation(float intlumi, int ieta, int lay) const
HOHitFilter theHOHitFilter
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
void darkening(std::vector< PCaloHit > &hcalHits)
std::unique_ptr< HcalHitRelabeller > theRelabeller
HFHitFilter theHFHitFilter
void checkGeometry(const edm::EventSetup &eventSetup)
Log< level::Error, false > LogError
void buildHBHEQIECells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
std::unique_ptr< HFDigitizer > theHFDigitizer
const edm::ESGetToken< CaloGeometry, CaloGeometryRecord > theGeometryToken
std::unique_ptr< HODigitizer > theHODigitizer
std::unique_ptr< HcalAmplifier > theHFAmplifier
edm::SortedCollection< ZDCDataFrame > ZDCDigiCollection
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecord > m_HBDarkeningToken
const Item * getValues(DetId fId, bool throwOnFail=true) const
std::unique_ptr< HcalCoderFactory > theCoderFactory
HcalDataFrameContainer< QIE10DataFrame > QIE10DigiCollection
void initializeEvent(edm::Event const &e, edm::EventSetup const &c)
std::unique_ptr< HcalElectronicsSim > theZDCElectronicsSim
std::unique_ptr< HFRecalibration > m_HFRecalibration
edm::EDGetTokenT< std::vector< PCaloHit > > zdcToken_
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *)
constexpr uint32_t newForm() const
std::vector< double > injectedHitsEnergy_
void setQIE11NoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
constexpr HcalSubdetector subdet() const
get the subdetector
void setHOZecotekDetIds(const std::vector< HcalDetId > &ids)
std::unique_ptr< HcalElectronicsSim > theHFQIE10ElectronicsSim
const HBHEDarkening * m_HEDarkening
std::unique_ptr< HcalElectronicsSim > theHFElectronicsSim
const HcalTopology * topo() const
edm::ESWatcher< HcalRecNumberingRecord > theRecNumberWatcher_
edm::SortedCollection< HODataFrame > HODigiCollection
std::string hitsProducer_
void setElectronicsSim(HcalElectronicsSim *electronicsSim)
std::unique_ptr< HODigitizer > theHOSiPMDigitizer
Creates electronics signals from hits.
const HcalTimeSlew * hcalTimeSlew_delay_
void setHFNoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
std::unique_ptr< HcalAmplifier > theHBHEQIE11Amplifier
void buildHOSiPMCells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
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
ZDCHitFilter theZDCHitFilter
std::unique_ptr< HcalSiPMHitResponse > theHBHESiPMResponse
static void unpackHcalIndex(const uint32_t &idx, int &det, int &z, int &depth, int &eta, int &phi, int &lay)
std::vector< double > injectedHitsTime_
static const size_type MAXSAMPLES
std::unique_ptr< CaloHitResponse > theHBHEResponse
std::vector< DetId > theHOHPDDetIds
edm::EDGetTokenT< std::vector< PCaloHit > > hcalToken_
unsigned int signalShape() const
edm::ESGetToken< HBHEDarkening, HBHEDarkeningRecord > m_HEDarkeningToken
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalElectronicsSim > theHBHEElectronicsSim
const edm::ESGetToken< HcalQIETypes, HcalQIETypesRcd > qieTypesToken_
HcalDataFrameContainer< QIE11DataFrame > QIE11DigiCollection
Log< level::Info, false > LogInfo
const edm::ESGetToken< HcalTopology, HcalRecNumberingRecord > topoToken_
std::unique_ptr< CaloHitResponse > theHOResponse
std::unique_ptr< HPDIonFeedbackSim > theIonFeedback
std::unique_ptr< HcalAmplifier > theZDCAmplifier
edm::ESWatcher< CaloGeometryRecord > theGeometryWatcher_
void setHOHamamatsuDetIds(const std::vector< HcalDetId > &ids)
void setDbService(const HcalDbService *service)
std::vector< DetId > theHFQIE8DetIds
constexpr uint32_t rawId() const
get the raw id
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
std::unique_ptr< QIE11Digitizer > theHBHEQIE11Digitizer
std::unique_ptr< QIE10Digitizer > theHFQIE10Digitizer
void setDetIds(const std::vector< DetId > &detIds)
std::vector< DetId > theHOSiPMDetIds
HOHitFilter theHOSiPMHitFilter
std::unique_ptr< CaloHitResponse > theZDCResponse
bool check(const edm::EventSetup &iSetup)
const CaloGeometry * theGeometry
std::unique_ptr< HcalAmplifier > theHOAmplifier
std::unique_ptr< HcalSiPMHitResponse > theHOSiPMResponse
bool validHcal(const HcalDetId &id) const
std::vector< DetId > hbheCells
const HBHEDarkening * m_HBDarkening
std::unique_ptr< HcalElectronicsSim > theHOElectronicsSim
HBHEHitFilter theHBHEQIE11HitFilter
void setZDCNoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
std::vector< DetId > theHBHEQIE8DetIds
std::unique_ptr< CaloHitResponse > theHFQIE10Response
edm::SortedCollection< HFDataFrame > HFDigiCollection
void accumulateCaloHits(edm::Handle< std::vector< PCaloHit >> const &hcalHits, edm::Handle< std::vector< PCaloHit >> const &zdcHits, int bunchCrossing, CLHEP::HepRandomEngine *, const HcalTopology *h)
edm::ESGetToken< HcalMCParams, HcalMCParamsRcd > mcParamsToken_
const edm::ESGetToken< HcalDbService, HcalDbRecord > conditionsToken_
static constexpr int32_t SubdetectorId
std::unique_ptr< HcalAmplifier > theHFQIE10Amplifier
std::unique_ptr< HcalElectronicsSim > theHBHEQIE11ElectronicsSim
void updateGeometry(const edm::EventSetup &eventSetup)
void setHBHENoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
void setup(const edm::EventSetup &es)
std::vector< DetId > theHBHEQIE11DetIds
void setTopo(const HcalTopology *topo)
void setDbService(const HcalDbService *service)
edm::SortedCollection< HBHEDataFrame > HBHEDigiCollection
std::vector< PCaloHit > injectedHits_
void finalizeEvent(edm::Event &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *)
void setHONoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
HcalDigitizer(const edm::ParameterSet &ps, edm::ConsumesCollector &iC)
const edm::ESGetToken< HcalTimeSlew, HcalTimeSlewRecord > hcalTimeSlew_delay_token_