File indexing completed on 2023-10-25 10:03:52
0001 #ifndef FastTimingSimProducers_FastTimingCommon_MTDDigitizerBase_h
0002 #define FastTimingSimProducers_FastTimingCommon_MTDDigitizerBase_h
0003
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/Utilities/interface/InputTag.h"
0006 #include "FWCore/Framework/interface/ConsumesCollector.h"
0007 #include "FWCore/Framework/interface/ProducesCollector.h"
0008
0009 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0010 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0011
0012 #include "DataFormats/FTLDigi/interface/FTLDigiCollections.h"
0013 #include "DataFormats/FTLDigi/interface/PMTDSimAccumulator.h"
0014 #include "SimFastTiming/FastTimingCommon/interface/MTDDigitizerTypes.h"
0015
0016 #include "CLHEP/Units/GlobalPhysicalConstants.h"
0017
0018 #include <string>
0019
0020 namespace CLHEP {
0021 class HepRandomEngine;
0022 }
0023
0024 namespace edm {
0025 class Event;
0026 class EventSetup;
0027 }
0028
0029 class PileUpEventPrincipal;
0030
0031 class MTDDigitizerBase {
0032 public:
0033 MTDDigitizerBase(const edm::ParameterSet& config,
0034 edm::ProducesCollector producesCollector,
0035 edm::ConsumesCollector& iC)
0036 : inputSimHits_(config.getParameter<edm::InputTag>("inputSimHits")),
0037 digiCollection_(config.getParameter<std::string>("digiCollectionTag")),
0038 verbosity_(config.getUntrackedParameter<uint32_t>("verbosity", 0)),
0039 refSpeed_(0.1 * CLHEP::c_light),
0040 premixStage1MinCharge_(config.getParameter<double>("premixStage1MinCharge")),
0041 premixStage1MaxCharge_(config.getParameter<double>("premixStage1MaxCharge")),
0042 premixStage1_(config.getParameter<bool>("premixStage1")),
0043 name_(config.getParameter<std::string>("digitizerName")) {
0044 iC.consumes<std::vector<PSimHit> >(inputSimHits_);
0045
0046 if (name_ == "BTLDigitizer") {
0047 if (premixStage1_) {
0048 producesCollector.produces<PMTDSimAccumulator>(digiCollection_);
0049 } else {
0050 producesCollector.produces<BTLDigiCollection>(digiCollection_);
0051 }
0052 } else if (name_ == "ETLDigitizer")
0053 if (premixStage1_) {
0054 producesCollector.produces<PMTDSimAccumulator>(digiCollection_);
0055 } else {
0056 producesCollector.produces<ETLDigiCollection>(digiCollection_);
0057 }
0058 else
0059 throw cms::Exception("[MTDDigitizerBase::MTDDigitizerBase]") << name_ << " is an invalid MTD digitizer name";
0060 }
0061
0062 virtual ~MTDDigitizerBase() {}
0063
0064
0065
0066
0067 virtual void accumulate(edm::Event const& e, edm::EventSetup const& c, CLHEP::HepRandomEngine* hre) = 0;
0068 virtual void accumulate(PileUpEventPrincipal const& e, edm::EventSetup const& c, CLHEP::HepRandomEngine* hre) = 0;
0069 virtual void accumulate(edm::Handle<edm::PSimHitContainer> const& hits,
0070 int bxCrossing,
0071 CLHEP::HepRandomEngine* hre) = 0;
0072
0073 virtual void accumulate(const PMTDSimAccumulator& simAccumulator) = 0;
0074
0075
0076
0077
0078 virtual void initializeEvent(edm::Event const& e, edm::EventSetup const& c) = 0;
0079 virtual void finalizeEvent(edm::Event& e, edm::EventSetup const& c, CLHEP::HepRandomEngine* hre) = 0;
0080
0081 const std::string& name() const { return name_; }
0082
0083 protected:
0084
0085 const edm::InputTag inputSimHits_;
0086 const std::string digiCollection_;
0087
0088
0089 const uint32_t verbosity_;
0090
0091
0092 const float refSpeed_;
0093
0094
0095 double premixStage1MinCharge_;
0096
0097 double premixStage1MaxCharge_;
0098
0099
0100 const bool premixStage1_;
0101
0102 private:
0103 std::string name_;
0104 };
0105
0106 #include "FWCore/PluginManager/interface/PluginFactory.h"
0107 typedef edmplugin::PluginFactory<MTDDigitizerBase*(
0108 const edm::ParameterSet&, edm::ProducesCollector, edm::ConsumesCollector&)>
0109 MTDDigitizerFactory;
0110
0111 #endif