30 #include <boost/foreach.hpp> 44 theRecNumber(nullptr),
49 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
true)),
52 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
false)),
55 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
true)),
57 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
false)),
58 theHBHEAmplifier(nullptr),
59 theHFAmplifier(nullptr),
60 theHOAmplifier(nullptr),
61 theZDCAmplifier(nullptr),
62 theHFQIE10Amplifier(nullptr),
63 theHBHEQIE11Amplifier(nullptr),
64 theIonFeedback(nullptr),
65 theCoderFactory(nullptr),
66 theHBHEElectronicsSim(nullptr),
67 theHFElectronicsSim(nullptr),
68 theHOElectronicsSim(nullptr),
69 theZDCElectronicsSim(nullptr),
70 theHFQIE10ElectronicsSim(nullptr),
71 theHBHEQIE11ElectronicsSim(nullptr),
73 theHBHEQIE11HitFilter(),
75 theHFQIE10HitFilter(),
79 theHBHEDigitizer(nullptr),
80 theHODigitizer(nullptr),
81 theHOSiPMDigitizer(nullptr),
82 theHFDigitizer(nullptr),
83 theZDCDigitizer(nullptr),
84 theHFQIE10Digitizer(nullptr),
85 theHBHEQIE11Digitizer(nullptr),
86 theRelabeller(nullptr),
93 doHFWindow_(ps.getParameter<
bool>(
"doHFWindow")),
94 killHE_(ps.getParameter<
bool>(
"killHE")),
95 debugCS_(ps.getParameter<
bool>(
"debugCaloSamples")),
96 ignoreTime_(ps.getParameter<
bool>(
"ignoreGeantTime")),
97 injectTestHits_(ps.getParameter<
bool>(
"injectTestHits")),
98 hitsProducer_(ps.getParameter<
std::
string>(
"hitsProducer")),
101 agingFlagHB(ps.getParameter<
bool>(
"HBDarkening")),
102 agingFlagHE(ps.getParameter<
bool>(
"HEDarkening")),
103 zdcToken_(iC.consumes(
edm::
InputTag(hitsProducer_,
"ZDCHITS"))),
104 hcalToken_(iC.consumes(
edm::
InputTag(hitsProducer_,
"HcalHits"))),
105 m_HBDarkening(nullptr),
106 m_HEDarkening(nullptr),
107 m_HFRecalibration(nullptr),
108 injectedHitsEnergy_(ps.getParameter<
std::
vector<double>>(
"injectTestHitsEnergy")),
109 injectedHitsTime_(ps.getParameter<
std::
vector<double>>(
"injectTestHitsTime")),
110 injectedHitsCells_(ps.getParameter<
std::
vector<
int>>(
"injectTestHitsCells")) {
123 bool PreMix1 = ps.
getParameter<
bool>(
"HcalPreMixStage1");
124 bool PreMix2 = ps.
getParameter<
bool>(
"HcalPreMixStage2");
127 bool agingFlagHF = ps.
getParameter<
bool>(
"HFDarkening");
130 if (PreMix1 && PreMix2) {
131 throw cms::Exception(
"Configuration") <<
"HcalDigitizer cannot operate in PreMixing digitization and " 133 "digi combination modes at the same time. Please set one mode to " 135 "in the configuration file.";
220 if (ps.getParameter<
bool>(
"doThermalNoise")) {
350 edm::Handle<std::vector<PCaloHit>>
const &zdcHandle,
352 CLHEP::HepRandomEngine *engine,
357 std::vector<PCaloHit> hcalHitsOrig = *hcalHandle.product();
360 std::vector<PCaloHit> hcalHits;
361 hcalHits.reserve(hcalHitsOrig.size());
374 for (
unsigned int i = 0;
i < hcalHitsOrig.size();
i++) {
378 edm::LogError(
"HcalDigitizer") <<
"bad hcal id found in digitizer. Skipping " <<
id.rawId() <<
" " << hid;
392 edm::LogVerbatim(
"HcalSim") <<
"Hit " <<
i <<
" out of " << hcalHits.size() <<
" " << std::hex <<
id.rawId()
395 hcalHitsOrig[
i].setID(newid.
rawId());
396 hcalHits.push_back(hcalHitsOrig[
i]);
421 edm::LogInfo(
"HcalDigitizer") <<
"We don't have HCAL hit collection available ";
426 std::vector<PCaloHit> zdcHitsOrig = *zdcHandle.product();
427 std::vector<PCaloHit> zdcHits;
428 zdcHits.reserve(zdcHitsOrig.size());
430 for (
unsigned int i = 0;
i < zdcHitsOrig.size();
i++) {
433 if (!ztopoP->
valid(hid)) {
434 edm::LogError(
"HcalDigitizer") <<
"bad zdc id found in digitizer. Skipping " << std::hex <<
id.rawId()
438 zdcHits.push_back(zdcHitsOrig[
i]);
440 edm::LogVerbatim(
"HcalSim") <<
"Hit " <<
i <<
" out of " << zdcHitsOrig.size() <<
" " << std::hex <<
id.rawId()
447 edm::LogInfo(
"HcalDigitizer") <<
"We don't have ZDC hit collection available ";
467 CLHEP::HepRandomEngine *engine) {
471 e.getByLabel(zdcTag, zdcHandle);
476 e.getByLabel(hcalTag, hcalHandle);
523 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HBHE digis : " << hbheResult->size();
524 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HO digis : " << hoResult->size();
525 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HF digis : " << hfResult->size();
526 edm::LogInfo(
"HcalDigitizer") <<
"HCAL ZDC digis : " << zdcResult->size();
527 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size();
528 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
531 edm::LogVerbatim(
"HcalSim") <<
"\nHCAL HBHE digis : " << hbheResult->size();
535 edm::LogVerbatim(
"HcalSim") <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size();
536 edm::LogVerbatim(
"HcalSim") <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
544 e.put(
std::move(hfQIE10Result),
"HFQIE10DigiCollection");
545 e.put(
std::move(hbheQIE11Result),
"HBHEQIE11DigiCollection");
554 csResult->insert(csResult->end(),
625 if (check1
or check2) {
641 if (zdcCells.empty())
643 if (hbCells.empty() && heCells.empty())
675 std::vector<DetId> testCells;
697 throw cms::Exception(
"Configuration") <<
"Unknown subdet " << testSubdet <<
" for HCAL test hit injection";
703 for (
auto &aCell : testCells) {
718 if (qieTypes.
topo() ==
nullptr) {
722 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
724 if (qieType ==
QIE8) {
726 }
else if (qieType ==
QIE10) {
754 if (qieTypes.
topo() ==
nullptr) {
758 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
760 if (qieType ==
QIE8) {
762 }
else if (qieType ==
QIE11) {
796 std::vector<HcalDetId> zecotekDetIds, hamamatsuDetIds;
800 if (mcParams.
topo() ==
nullptr) {
804 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
807 zecotekDetIds.emplace_back(*detItr);
810 hamamatsuDetIds.emplace_back(*detItr);
843 for (
unsigned int ii = 0;
ii < hcalHits.size(); ++
ii) {
844 uint32_t tmpId = hcalHits[
ii].id();
848 bool darkened =
false;
867 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
virtual bool valid(const HcalZDCDetId &id) const
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
void accumulateCaloHits(edm::Handle< std::vector< PCaloHit >> const &hcalHits, edm::Handle< std::vector< PCaloHit >> const &zdcHits, int bunchCrossing, CLHEP::HepRandomEngine *, const HcalTopology *h, const ZdcTopology *z)
std::unique_ptr< HcalElectronicsSim > theHOElectronicsSim
HBHEHitFilter theHBHEQIE11HitFilter
void setZDCNoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
std::vector< DetId > theHBHEQIE8DetIds
std::unique_ptr< CaloHitResponse > theHFQIE10Response
edm::SortedCollection< HFDataFrame > HFDigiCollection
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)
const edm::ESGetToken< ZdcTopology, HcalRecNumberingRecord > topoZToken_
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_