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.";
218 if (ps.getParameter<
bool>(
"doThermalNoise")) {
348 edm::Handle<std::vector<PCaloHit>>
const &zdcHandle,
350 CLHEP::HepRandomEngine *engine,
354 std::vector<PCaloHit> hcalHitsOrig = *hcalHandle.product();
357 std::vector<PCaloHit> hcalHits;
358 hcalHits.reserve(hcalHitsOrig.size());
371 for (
unsigned int i = 0;
i < hcalHitsOrig.size();
i++) {
375 edm::LogError(
"HcalDigitizer") <<
"bad hcal id found in digitizer. Skipping " <<
id.rawId() <<
" " << hid;
389 edm::LogVerbatim(
"HcalSim") <<
"Hit " <<
i <<
" out of " << hcalHits.size() <<
" " << std::hex <<
id.rawId()
392 hcalHitsOrig[
i].setID(newid.
rawId());
393 hcalHits.push_back(hcalHitsOrig[
i]);
418 edm::LogInfo(
"HcalDigitizer") <<
"We don't have HCAL hit collection available ";
426 edm::LogInfo(
"HcalDigitizer") <<
"We don't have ZDC hit collection available ";
445 CLHEP::HepRandomEngine *engine) {
449 e.getByLabel(zdcTag, zdcHandle);
454 e.getByLabel(hcalTag, hcalHandle);
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();
508 edm::LogVerbatim(
"HcalSim") <<
"\nHCAL HBHE digis : " << hbheResult->size();
512 edm::LogVerbatim(
"HcalSim") <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size();
513 edm::LogVerbatim(
"HcalSim") <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
521 e.put(
std::move(hfQIE10Result),
"HFQIE10DigiCollection");
522 e.put(
std::move(hbheQIE11Result),
"HBHEQIE11DigiCollection");
531 csResult->insert(csResult->end(),
602 if (check1
or check2) {
618 if (zdcCells.empty())
620 if (hbCells.empty() && heCells.empty())
652 std::vector<DetId> testCells;
674 throw cms::Exception(
"Configuration") <<
"Unknown subdet " << testSubdet <<
" for HCAL test hit injection";
680 for (
auto &aCell : testCells) {
695 if (qieTypes.
topo() ==
nullptr) {
699 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
701 if (qieType ==
QIE8) {
703 }
else if (qieType ==
QIE10) {
731 if (qieTypes.
topo() ==
nullptr) {
735 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
737 if (qieType ==
QIE8) {
739 }
else if (qieType ==
QIE11) {
773 std::vector<HcalDetId> zecotekDetIds, hamamatsuDetIds;
777 if (mcParams.
topo() ==
nullptr) {
781 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
784 zecotekDetIds.emplace_back(*detItr);
787 hamamatsuDetIds.emplace_back(*detItr);
820 for (
unsigned int ii = 0;
ii < hcalHits.size(); ++
ii) {
821 uint32_t tmpId = hcalHits[
ii].id();
825 bool darkened =
false;
844 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_