33 #include <boost/foreach.hpp> 44 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
true)),
47 &theParameterMap, &theShapes, ps.getParameter<
bool>(
"HcalPreMixStage1"),
false)),
63 theHFQIE10ElectronicsSim(
nullptr),
64 theHBHEQIE11ElectronicsSim(
nullptr),
66 theHBHEQIE11HitFilter(),
68 theHFQIE10HitFilter(),
86 doHFWindow_(ps.getParameter<
bool>(
"doHFWindow")),
87 killHE_(ps.getParameter<
bool>(
"killHE")),
88 debugCS_(ps.getParameter<
bool>(
"debugCaloSamples")),
89 ignoreTime_(ps.getParameter<
bool>(
"ignoreGeantTime")),
90 injectTestHits_(ps.getParameter<
bool>(
"injectTestHits")),
91 hitsProducer_(ps.getParameter<
std::
string>(
"hitsProducer")),
94 agingFlagHB(ps.getParameter<
bool>(
"HBDarkening")),
95 agingFlagHE(ps.getParameter<
bool>(
"HEDarkening")),
99 injectedHitsEnergy_(ps.getParameter<
std::vector<double>>(
"injectTestHitsEnergy")),
100 injectedHitsTime_(ps.getParameter<
std::vector<double>>(
"injectTestHitsTime")),
101 injectedHitsCells_(ps.getParameter<
std::vector<
int>>(
"injectTestHitsCells")) {
107 bool PreMix1 = ps.
getParameter<
bool>(
"HcalPreMixStage1");
108 bool PreMix2 = ps.
getParameter<
bool>(
"HcalPreMixStage2");
111 bool agingFlagHF = ps.
getParameter<
bool>(
"HFDarkening");
114 if (PreMix1 && PreMix2) {
115 throw cms::Exception(
"Configuration") <<
"HcalDigitizer cannot operate in PreMixing digitization and " 117 "digi combination modes at the same time. Please set one mode to " 119 "in the configuration file.";
133 theHFElectronicsSim = std::make_unique<HcalElectronicsSim>(theHFAmplifier.get(), theCoderFactory.get(), PreMix1);
134 theHOElectronicsSim = std::make_unique<HcalElectronicsSim>(theHOAmplifier.get(), theCoderFactory.get(), PreMix1);
135 theZDCElectronicsSim = std::make_unique<HcalElectronicsSim>(theZDCAmplifier.get(), theCoderFactory.get(), PreMix1);
137 std::make_unique<HcalElectronicsSim>(theHFQIE10Amplifier.get(),
138 theCoderFactory.get(),
141 std::make_unique<HcalElectronicsSim>(theHBHEQIE11Amplifier.get(),
142 theCoderFactory.get(),
198 if (ps.getParameter<
bool>(
"doThermalNoise")) {
205 if (theHBHEDigitizer)
206 theHBHEDigitizer->setDebugCaloSamples(
true);
214 theHFDigitizer->setDebugCaloSamples(
true);
217 theZDCDigitizer->setDebugCaloSamples(
true);
325 edm::Handle<std::vector<PCaloHit>>
const &zdcHandle,
327 CLHEP::HepRandomEngine *engine,
331 std::vector<PCaloHit> hcalHitsOrig = *hcalHandle.product();
334 std::vector<PCaloHit> hcalHits;
335 hcalHits.reserve(hcalHitsOrig.size());
348 for (
unsigned int i = 0;
i < hcalHitsOrig.size();
i++) {
352 edm::LogError(
"HcalDigitizer") <<
"bad hcal id found in digitizer. Skipping " <<
id.rawId() <<
" " << hid
363 std::cout <<
"HcalDigitizer format " << hid.
oldFormat() <<
" for " << hid << std::endl;
367 std::cout <<
"Hit " <<
i <<
" out of " << hcalHits.size() <<
" " << std::hex <<
id.rawId() <<
" --> " 370 hcalHitsOrig[
i].setID(newid.
rawId());
371 hcalHits.push_back(hcalHitsOrig[
i]);
396 edm::LogInfo(
"HcalDigitizer") <<
"We don't have HCAL hit collection available ";
404 edm::LogInfo(
"HcalDigitizer") <<
"We don't have ZDC hit collection available ";
429 CLHEP::HepRandomEngine *engine) {
486 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HBHE digis : " << hbheResult->size();
487 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HO digis : " << hoResult->size();
488 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HF digis : " << hfResult->size();
489 edm::LogInfo(
"HcalDigitizer") <<
"HCAL ZDC digis : " << zdcResult->size();
490 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size();
491 edm::LogInfo(
"HcalDigitizer") <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size();
495 std::cout <<
"HCAL HBHE digis : " << hbheResult->size() << std::endl;
496 std::cout <<
"HCAL HO digis : " << hoResult->size() << std::endl;
497 std::cout <<
"HCAL HF digis : " << hfResult->size() << std::endl;
498 std::cout <<
"HCAL ZDC digis : " << zdcResult->size() << std::endl;
499 std::cout <<
"HCAL HF QIE10 digis : " << hfQIE10Result->size() << std::endl;
500 std::cout <<
"HCAL HBHE QIE11 digis : " << hbheQIE11Result->size() << std::endl;
508 e.
put(
std::move(hfQIE10Result),
"HFQIE10DigiCollection");
509 e.
put(
std::move(hbheQIE11Result),
"HBHEQIE11DigiCollection");
518 csResult->insert(csResult->end(),
545 std::cout << std::endl <<
"========> HcalDigitizer e.put " << std::endl << std::endl;
598 if (check1
or check2) {
615 if (zdcCells.empty())
617 if (hbCells.empty() && heCells.empty())
648 std::vector<DetId> testCells;
670 throw cms::Exception(
"Configuration") <<
"Unknown subdet " << testSubdet <<
" for HCAL test hit injection";
676 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) {
735 if (qieTypes.topo() ==
nullptr) {
739 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
741 if (qieType ==
QIE8) {
743 }
else if (qieType ==
QIE11) {
777 std::vector<HcalDetId> zecotekDetIds, hamamatsuDetIds;
784 if (mcParams.topo() ==
nullptr) {
788 for (std::vector<DetId>::const_iterator detItr = allCells.begin(); detItr != allCells.end(); ++detItr) {
789 int shapeType = mcParams.getValues(*detItr)->signalShape();
791 zecotekDetIds.emplace_back(*detItr);
794 hamamatsuDetIds.emplace_back(*detItr);
827 for (
unsigned int ii = 0;
ii < hcalHits.size(); ++
ii) {
828 uint32_t tmpId = hcalHits[
ii].id();
832 bool darkened =
false;
851 hcalHits[
ii].setEnergy(hcalHits[
ii].
energy() * dweight);
HFHitFilter theHFQIE10HitFilter
std::vector< DetId > theHFQIE10DetIds
int bunchCrossing() const
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
T getParameter(std::string const &) const
std::vector< int > injectedHitsCells_
HBHEHitFilter theHBHEHitFilter
std::vector< PCaloHit > PCaloHitContainer
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
void setQIE10NoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
std::vector< CaloSamples > CaloSamplesCollection
const HcalDDDRecConstants * theRecNumber
void setParameterMap(HcalSimParameterMap *map)
HcalSubdetector subdet() const
get the subdetector
std::unique_ptr< CaloHitResponse > theHFResponse
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)
HOHitFilter theHOHitFilter
constexpr uint32_t rawId() const
get the raw id
std::unique_ptr< ZDCDigitizer > theZDCDigitizer
void darkening(std::vector< PCaloHit > &hcalHits)
std::unique_ptr< HcalHitRelabeller > theRelabeller
HFHitFilter theHFHitFilter
void checkGeometry(const edm::EventSetup &eventSetup)
bool validHcal(const HcalDetId &id) const
void buildHBHEQIECells(const std::vector< DetId > &allCells, const edm::EventSetup &eventSetup)
std::unique_ptr< HFDigitizer > theHFDigitizer
std::unique_ptr< HODigitizer > theHODigitizer
std::unique_ptr< HcalAmplifier > theHFAmplifier
edm::SortedCollection< ZDCDataFrame > ZDCDigiCollection
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
void accumulate(edm::Event const &e, edm::EventSetup const &c, CLHEP::HepRandomEngine *)
std::vector< double > injectedHitsEnergy_
void setQIE11NoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
void setHOZecotekDetIds(const std::vector< HcalDetId > &ids)
std::unique_ptr< HcalElectronicsSim > theHFQIE10ElectronicsSim
const HBHEDarkening * m_HEDarkening
std::unique_ptr< HcalElectronicsSim > theHFElectronicsSim
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
int readoutFrameSize() const
for now, the LinearFrames and trhe digis will be one-to-one.
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
HcalSimParameterMap theParameterMap
std::unique_ptr< HcalElectronicsSim > theHBHEElectronicsSim
HcalDataFrameContainer< QIE11DataFrame > QIE11DigiCollection
std::unique_ptr< CaloHitResponse > theHOResponse
std::unique_ptr< HPDIonFeedbackSim > theIonFeedback
std::unique_ptr< HcalAmplifier > theZDCAmplifier
edm::ESWatcher< CaloGeometryRecord > theGeometryWatcher_
static const int SubdetectorId
void setHOHamamatsuDetIds(const std::vector< HcalDetId > &ids)
void setDbService(const HcalDbService *service)
std::vector< DetId > theHFQIE8DetIds
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
std::vector< DetId > getValidDetIds() const
Get the list of all valid detector ids.
std::vector< DetId > hbheCells
std::vector< std::vector< double > > tmp
ESHandle< TrackerGeometry > geometry
const HBHEDarkening * m_HBDarkening
std::unique_ptr< HcalElectronicsSim > theHOElectronicsSim
HBHEHitFilter theHBHEQIE11HitFilter
bool getByLabel(edm::InputTag const &tag, edm::Handle< T > &result) const
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)
std::unique_ptr< HcalAmplifier > theHFQIE10Amplifier
const CaloSimParameters & simParameters(const DetId &id) const override
std::unique_ptr< HcalElectronicsSim > theHBHEQIE11ElectronicsSim
void updateGeometry(const edm::EventSetup &eventSetup)
void setHBHENoiseSignalGenerator(HcalBaseSignalGenerator *noiseGenerator)
void setup(const edm::EventSetup &es)
T const * product() const
std::vector< DetId > theHBHEQIE11DetIds
void setTopo(const HcalTopology *topo)
void setDbService(const HcalDbService *service)
edm::SortedCollection< HBHEDataFrame > HBHEDigiCollection
float degradation(float intlumi, int ieta, int lay) const
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)