Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:28

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 //#define EDM_ML_DEBUG
0015 
0016 EcalTimeDigiProducer::EcalTimeDigiProducer(const edm::ParameterSet &params,
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   //    checkCalibrations( event, eventSetup );
0046   // here the methods to clean the maps
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   // accumulate the simHits and do the averages in a given layer per bunch
0056   // crossing
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   // Step A: Get Inputs
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   // here basically just put everything in the final collections
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 }