Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef SimCalorimetry_EcalSimProducers_EcalDigiProducer_h
0002 #define SimCalorimetry_EcalSimProducers_EcalDigiProducer_h
0003 
0004 #include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbRecord.h"
0005 #include "CalibCalorimetry/EcalLaserCorrection/interface/EcalLaserDbService.h"
0006 #include "CondFormats/DataRecord/interface/EcalADCToGeVConstantRcd.h"
0007 #include "CondFormats/DataRecord/interface/EcalGainRatiosRcd.h"
0008 #include "CondFormats/DataRecord/interface/EcalIntercalibConstantsMCRcd.h"
0009 #include "CondFormats/DataRecord/interface/ESGainRcd.h"
0010 #include "CondFormats/DataRecord/interface/ESIntercalibConstantsRcd.h"
0011 #include "CondFormats/DataRecord/interface/ESMIPToGeVConstantRcd.h"
0012 #include "CondFormats/DataRecord/interface/ESPedestalsRcd.h"
0013 #include "CondFormats/DataRecord/interface/EcalPedestalsRcd.h"
0014 #include "CondFormats/EcalObjects/interface/EcalADCToGeVConstant.h"
0015 #include "CondFormats/EcalObjects/interface/EcalGainRatios.h"
0016 #include "CondFormats/EcalObjects/interface/EcalIntercalibConstantsMC.h"
0017 #include "CondFormats/EcalObjects/interface/EcalPedestals.h"
0018 #include "CondFormats/ESObjects/interface/ESGain.h"
0019 #include "CondFormats/ESObjects/interface/ESIntercalibConstants.h"
0020 #include "CondFormats/ESObjects/interface/ESMIPToGeVConstant.h"
0021 #include "CondFormats/ESObjects/interface/ESPedestals.h"
0022 #include "DataFormats/Math/interface/Error.h"
0023 #include "CalibFormats/CaloObjects/interface/CaloTSamples.h"
0024 #include "FWCore/Framework/interface/ESWatcher.h"
0025 #include "FWCore/Framework/interface/ProducesCollector.h"
0026 #include "Geometry/Records/interface/CaloGeometryRecord.h"
0027 #include "SimCalorimetry/EcalSimAlgos/interface/APDShape.h"
0028 #include "SimCalorimetry/EcalSimAlgos/interface/ComponentShapeCollection.h"
0029 #include "SimCalorimetry/EcalSimAlgos/interface/EBShape.h"
0030 #include "SimCalorimetry/EcalSimAlgos/interface/EEShape.h"
0031 #include "SimCalorimetry/EcalSimAlgos/interface/EcalElectronicsSim.h"
0032 #include "SimCalorimetry/EcalSimAlgos/interface/ESElectronicsSim.h"
0033 #include "SimCalorimetry/EcalSimAlgos/interface/ESShape.h"
0034 #include "SimCalorimetry/EcalSimAlgos/interface/EcalCorrelatedNoiseMatrix.h"
0035 #include "SimGeneral/NoiseGenerators/interface/CorrelatedNoisifier.h"
0036 
0037 #include "SimCalorimetry/CaloSimAlgos/interface/CaloTDigitizer.h"
0038 #include "SimCalorimetry/EcalSimAlgos/interface/EcalDigitizerTraits.h"
0039 #include "SimCalorimetry/EcalSimAlgos/interface/EcalTDigitizer.h"
0040 #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h"
0041 
0042 #include "SimCalorimetry/EcalSimAlgos/interface/EBHitResponse.h"
0043 #include "SimDataFormats/CaloHit/interface/PCaloHit.h"
0044 #include <vector>
0045 
0046 typedef EcalTDigitizer<EBDigitizerTraits> EBDigitizer;
0047 typedef EcalTDigitizer<EEDigitizerTraits> EEDigitizer;
0048 typedef CaloTDigitizer<ESOldDigitizerTraits> ESOldDigitizer;
0049 
0050 class ESDigitizer;
0051 
0052 class APDSimParameters;
0053 class ComponentSimParameterMap;
0054 class EEHitResponse;
0055 class ESHitResponse;
0056 class CaloHitResponse;
0057 class EcalSimParameterMap;
0058 class EcalCoder;
0059 class ESElectronicsSim;
0060 class ESElectronicsSimFast;
0061 class EcalBaseSignalGenerator;
0062 class CaloGeometry;
0063 class EBDigiCollection;
0064 class EEDigiCollection;
0065 class ESDigiCollection;
0066 class PileUpEventPrincipal;
0067 
0068 namespace edm {
0069   class ConsumesCollector;
0070   class Event;
0071   class EventSetup;
0072   template <typename T>
0073   class Handle;
0074   class ParameterSet;
0075   class StreamID;
0076 }  // namespace edm
0077 
0078 namespace CLHEP {
0079   class HepRandomEngine;
0080 }
0081 
0082 class EcalDigiProducer : public DigiAccumulatorMixMod {
0083 public:
0084   EcalDigiProducer(const edm::ParameterSet &params, edm::ProducesCollector, edm::ConsumesCollector &iC);
0085   EcalDigiProducer(const edm::ParameterSet &params, edm::ConsumesCollector &iC);
0086   ~EcalDigiProducer() override;
0087 
0088   void initializeEvent(edm::Event const &e, edm::EventSetup const &c) override;
0089   void accumulate(edm::Event const &e, edm::EventSetup const &c) override;
0090   void accumulate(PileUpEventPrincipal const &e, edm::EventSetup const &c, edm::StreamID const &) override;
0091   void finalizeEvent(edm::Event &e, edm::EventSetup const &c) override;
0092   void beginLuminosityBlock(edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) override;
0093 
0094   void setEBNoiseSignalGenerator(EcalBaseSignalGenerator *noiseGenerator);
0095   void setEENoiseSignalGenerator(EcalBaseSignalGenerator *noiseGenerator);
0096   void setESNoiseSignalGenerator(EcalBaseSignalGenerator *noiseGenerator);
0097 
0098 private:
0099   virtual void cacheEBDigis(const EBDigiCollection *ebDigiPtr) const {}
0100   virtual void cacheEEDigis(const EEDigiCollection *eeDigiPtr) const {}
0101 
0102   typedef edm::Handle<std::vector<PCaloHit>> HitsHandle;
0103   void accumulateCaloHits(HitsHandle const &ebHandle,
0104                           HitsHandle const &eeHandle,
0105                           HitsHandle const &esHandle,
0106                           int bunchCrossing);
0107 
0108   void checkGeometry(const edm::EventSetup &eventSetup);
0109 
0110   void updateGeometry();
0111 
0112   void checkCalibrations(const edm::Event &event, const edm::EventSetup &eventSetup);
0113 
0114   APDShape m_APDShape;
0115   ComponentShapeCollection m_ComponentShapes;
0116   EBShape m_EBShape;
0117   EEShape m_EEShape;
0118   ESShape m_ESShape;  // no const because gain must be set
0119 
0120   const std::string m_EBdigiCollection;
0121   const std::string m_EEdigiCollection;
0122   const std::string m_ESdigiCollection;
0123   const std::string m_hitsProducerTag;
0124 
0125   const edm::EDGetTokenT<std::vector<PCaloHit>> m_HitsEBToken_;
0126   const edm::EDGetTokenT<std::vector<PCaloHit>> m_HitsEEToken_;
0127   const edm::EDGetTokenT<std::vector<PCaloHit>> m_HitsESToken_;
0128 
0129   const edm::ESGetToken<EcalPedestals, EcalPedestalsRcd> m_pedestalsToken;
0130   const edm::ESGetToken<EcalIntercalibConstantsMC, EcalIntercalibConstantsMCRcd> m_icalToken;
0131   const edm::ESGetToken<EcalLaserDbService, EcalLaserDbRecord> m_laserToken;
0132   const edm::ESGetToken<EcalADCToGeVConstant, EcalADCToGeVConstantRcd> m_agcToken;
0133   const edm::ESGetToken<EcalGainRatios, EcalGainRatiosRcd> m_grToken;
0134   const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> m_geometryToken;
0135   edm::ESGetToken<ESGain, ESGainRcd> m_esGainToken;
0136   edm::ESGetToken<ESMIPToGeVConstant, ESMIPToGeVConstantRcd> m_esMIPToGeVToken;
0137   edm::ESGetToken<ESPedestals, ESPedestalsRcd> m_esPedestalsToken;
0138   edm::ESGetToken<ESIntercalibConstants, ESIntercalibConstantsRcd> m_esMIPsToken;
0139   edm::ESWatcher<CaloGeometryRecord> m_geometryWatcher;
0140 
0141   bool m_useLCcorrection;
0142 
0143   const bool m_apdSeparateDigi;
0144   const bool m_componentSeparateDigi;
0145 
0146   const double m_EBs25notCont;
0147   const double m_EEs25notCont;
0148 
0149   const unsigned int m_readoutFrameSize;
0150 
0151 protected:
0152   std::unique_ptr<const EcalSimParameterMap> m_ParameterMap;
0153 
0154 private:
0155   const std::string m_apdDigiTag;
0156   std::unique_ptr<const APDSimParameters> m_apdParameters;
0157 
0158   const std::string m_componentDigiTag;
0159   std::unique_ptr<const ComponentSimParameterMap> m_componentParameters;
0160 
0161   std::unique_ptr<EBHitResponse> m_APDResponse;
0162 
0163   std::unique_ptr<EBHitResponse> m_ComponentResponse;
0164 
0165 protected:
0166   std::unique_ptr<EBHitResponse> m_EBResponse;
0167   std::unique_ptr<EEHitResponse> m_EEResponse;
0168 
0169 private:
0170   std::unique_ptr<ESHitResponse> m_ESResponse;
0171   std::unique_ptr<CaloHitResponse> m_ESOldResponse;
0172 
0173   const bool m_addESNoise;
0174   const bool m_PreMix1;
0175   const bool m_PreMix2;
0176 
0177   const bool m_doFastES;
0178 
0179   const bool m_doEB, m_doEE, m_doES;
0180 
0181   std::unique_ptr<ESElectronicsSim> m_ESElectronicsSim;
0182   std::unique_ptr<ESOldDigitizer> m_ESOldDigitizer;
0183   std::unique_ptr<ESElectronicsSimFast> m_ESElectronicsSimFast;
0184   std::unique_ptr<ESDigitizer> m_ESDigitizer;
0185 
0186   std::unique_ptr<EBDigitizer> m_APDDigitizer;
0187   std::unique_ptr<EBDigitizer> m_ComponentDigitizer;
0188   std::unique_ptr<EBDigitizer> m_BarrelDigitizer;
0189   std::unique_ptr<EEDigitizer> m_EndcapDigitizer;
0190 
0191   typedef CaloTSamples<float, 10> EcalSamples;
0192 
0193   typedef EcalElectronicsSim<EcalCoder, EcalSamples, EcalDataFrame> EcalElectronicsSim_Ph1;
0194   std::unique_ptr<EcalElectronicsSim_Ph1> m_ElectronicsSim;
0195   std::unique_ptr<EcalCoder> m_Coder;
0196 
0197   std::unique_ptr<EcalElectronicsSim_Ph1> m_APDElectronicsSim;
0198   std::unique_ptr<EcalCoder> m_APDCoder;
0199   std::unique_ptr<EcalElectronicsSim_Ph1> m_ComponentElectronicsSim;
0200   std::unique_ptr<EcalCoder> m_ComponentCoder;
0201 
0202   const CaloGeometry *m_Geometry;
0203 
0204   std::array<std::unique_ptr<CorrelatedNoisifier<EcalCorrMatrix>>, 3> m_EBCorrNoise;
0205   std::array<std::unique_ptr<CorrelatedNoisifier<EcalCorrMatrix>>, 3> m_EECorrNoise;
0206 
0207   CLHEP::HepRandomEngine *randomEngine_ = nullptr;
0208 };
0209 
0210 #endif