File indexing completed on 2023-04-08 00:13:13
0001 #include "FWCore/Framework/interface/Event.h"
0002 #include "SimCalorimetry/EcalSimAlgos/interface/EcalTimeMapDigitizer.h"
0003 #include "SimCalorimetry/EcalSimProducers/interface/EcalTimeDigiProducer.h"
0004 #include "CalibFormats/CaloObjects/interface/CaloSamples.h"
0005 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
0006 #include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h"
0007 #include "DataFormats/Common/interface/Handle.h"
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Framework/interface/EventSetup.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012 #include "SimGeneral/MixingModule/interface/PileUpEventPrincipal.h"
0013
0014
0015
0016 EcalTimeDigiProducer::EcalTimeDigiProducer(const edm::ParameterSet ¶ms,
0017 edm::ProducesCollector producesCollector,
0018 edm::ConsumesCollector &sumes)
0019 : DigiAccumulatorMixMod(),
0020 m_EBdigiCollection(params.getParameter<std::string>("EBtimeDigiCollection")),
0021 m_hitsProducerTagEB(params.getParameter<edm::InputTag>("hitsProducerEB")),
0022 m_hitsProducerTokenEB(sumes.consumes<std::vector<PCaloHit>>(m_hitsProducerTagEB)),
0023 m_geometryToken(sumes.esConsumes()),
0024 m_timeLayerEB(params.getParameter<int>("timeLayerBarrel")),
0025 m_Geometry(nullptr),
0026 m_componentWaveform(params.getParameter<bool>("componentWaveform")) {
0027 producesCollector.produces<EcalTimeDigiCollection>(m_EBdigiCollection);
0028
0029 if (m_componentWaveform)
0030 m_ComponentShapes = new ComponentShapeCollection(sumes);
0031 m_BarrelDigitizer = new EcalTimeMapDigitizer(EcalBarrel, m_ComponentShapes);
0032
0033 #ifdef EDM_ML_DEBUG
0034 edm::LogVerbatim("TimeDigiInfo") << "[EcalTimeDigiProducer]::Create EB " << m_EBdigiCollection
0035 << " collection and digitizer";
0036 #endif
0037
0038 m_BarrelDigitizer->setTimeLayerId(m_timeLayerEB);
0039 }
0040
0041 EcalTimeDigiProducer::~EcalTimeDigiProducer() {}
0042
0043 void EcalTimeDigiProducer::initializeEvent(edm::Event const &event, edm::EventSetup const &eventSetup) {
0044 checkGeometry(eventSetup);
0045
0046
0047 m_BarrelDigitizer->initializeMap();
0048 if (m_componentWaveform) {
0049 m_ComponentShapes->setEventSetup(eventSetup);
0050 m_BarrelDigitizer->setEventSetup(eventSetup);
0051 }
0052 }
0053
0054 void EcalTimeDigiProducer::accumulateCaloHits(HitsHandle const &ebHandle, int bunchCrossing) {
0055
0056
0057 if (ebHandle.isValid()) {
0058 m_BarrelDigitizer->add(*ebHandle.product(), bunchCrossing);
0059 }
0060 }
0061
0062 void EcalTimeDigiProducer::accumulate(edm::Event const &e, edm::EventSetup const &eventSetup) {
0063
0064 const edm::Handle<std::vector<PCaloHit>> &ebHandle = e.getHandle(m_hitsProducerTokenEB);
0065
0066 #ifdef EDM_ML_DEBUG
0067 edm::LogVerbatim("TimeDigiInfo") << "[EcalTimeDigiProducer]::Accumulate Hits HS event";
0068 #endif
0069
0070 if (m_componentWaveform) {
0071 m_BarrelDigitizer->setEventSetup(eventSetup);
0072 }
0073 accumulateCaloHits(ebHandle, 0);
0074 }
0075
0076 void EcalTimeDigiProducer::accumulate(PileUpEventPrincipal const &e,
0077 edm::EventSetup const &eventSetup,
0078 edm::StreamID const &) {
0079 edm::Handle<std::vector<PCaloHit>> ebHandle;
0080 e.getByLabel(m_hitsProducerTagEB, ebHandle);
0081
0082 #ifdef EDM_ML_DEBUG
0083 edm::LogVerbatim("TimeDigiInfo") << "[EcalTimeDigiProducer]::Accumulate Hits for BC " << e.bunchCrossing();
0084 #endif
0085 if (m_componentWaveform) {
0086 m_BarrelDigitizer->setEventSetup(eventSetup);
0087 }
0088 accumulateCaloHits(ebHandle, e.bunchCrossing());
0089 }
0090
0091 void EcalTimeDigiProducer::finalizeEvent(edm::Event &event, edm::EventSetup const &eventSetup) {
0092 std::unique_ptr<EcalTimeDigiCollection> barrelResult = std::make_unique<EcalTimeDigiCollection>();
0093
0094 #ifdef EDM_ML_DEBUG
0095 edm::LogVerbatim("TimeDigiInfo") << "[EcalTimeDigiProducer]::finalizeEvent";
0096 #endif
0097
0098
0099 m_BarrelDigitizer->run(*barrelResult);
0100
0101 #ifdef EDM_ML_DEBUG
0102 edm::LogVerbatim("TimeDigiInfo") << "[EcalTimeDigiProducer]::EB Digi size " << barrelResult->size();
0103 #endif
0104
0105 edm::LogInfo("TimeDigiInfo") << "EB time Digis: " << barrelResult->size();
0106
0107 #ifdef EDM_ML_DEBUG
0108 edm::LogVerbatim("TimeDigiInfo") << "[EcalTimeDigiProducer]::putting EcalTimeDigiCollection into the event ";
0109 #endif
0110
0111 event.put(std::move(barrelResult), m_EBdigiCollection);
0112 }
0113
0114 void EcalTimeDigiProducer::checkGeometry(const edm::EventSetup &eventSetup) {
0115 if (m_geometryWatcher.check(eventSetup)) {
0116 m_Geometry = &eventSetup.getData(m_geometryToken);
0117 updateGeometry();
0118 }
0119 }
0120
0121 void EcalTimeDigiProducer::updateGeometry() {
0122 m_BarrelDigitizer->setGeometry(m_Geometry->getSubdetectorGeometry(DetId::Ecal, EcalBarrel));
0123 }