File indexing completed on 2024-04-06 12:29:47
0001
0002 #include <memory>
0003 #include <string>
0004
0005
0006 #include "FWCore/Framework/interface/global/EDProducer.h"
0007 #include "FWCore/Framework/interface/Event.h"
0008 #include "FWCore/Framework/interface/MakerMacros.h"
0009 #include "FWCore/Framework/interface/ESHandle.h"
0010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0011 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0012 #include "FWCore/Utilities/interface/EDGetToken.h"
0013
0014 #include "Geometry/MTDCommonData/interface/MTDTopologyMode.h"
0015 #include "Geometry/Records/interface/MTDDigiGeometryRecord.h"
0016 #include "Geometry/MTDGeometryBuilder/interface/MTDGeometry.h"
0017
0018 #include "MtdRecoClusterToSimLayerClusterAssociatorByHitsImpl.h"
0019
0020
0021
0022
0023
0024 class MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer : public edm::global::EDProducer<> {
0025 public:
0026 explicit MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer(const edm::ParameterSet &);
0027 ~MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer() override;
0028
0029 static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0030
0031 private:
0032 void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
0033 const double energyCut_;
0034 const double timeCut_;
0035 edm::ESGetToken<MTDGeometry, MTDDigiGeometryRecord> geomToken_;
0036 edm::ESGetToken<MTDTopology, MTDTopologyRcd> topoToken_;
0037 };
0038
0039 MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer::MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer(
0040 const edm::ParameterSet &ps)
0041 : energyCut_(ps.getParameter<double>("energyCut")), timeCut_(ps.getParameter<double>("timeCut")) {
0042 geomToken_ = esConsumes<MTDGeometry, MTDDigiGeometryRecord>();
0043 topoToken_ = esConsumes<MTDTopology, MTDTopologyRcd>();
0044
0045
0046 produces<reco::MtdRecoClusterToSimLayerClusterAssociator>();
0047 }
0048
0049 MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer::~MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer() {}
0050
0051 void MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer::produce(edm::StreamID,
0052 edm::Event &iEvent,
0053 const edm::EventSetup &es) const {
0054 auto geometryHandle = es.getTransientHandle(geomToken_);
0055 const MTDGeometry *geom = geometryHandle.product();
0056
0057 auto topologyHandle = es.getTransientHandle(topoToken_);
0058 const MTDTopology *topology = topologyHandle.product();
0059
0060 mtd::MTDGeomUtil geomTools_;
0061 geomTools_.setGeometry(geom);
0062 geomTools_.setTopology(topology);
0063
0064 auto impl = std::make_unique<MtdRecoClusterToSimLayerClusterAssociatorByHitsImpl>(
0065 iEvent.productGetter(), energyCut_, timeCut_, geomTools_);
0066 auto toPut = std::make_unique<reco::MtdRecoClusterToSimLayerClusterAssociator>(std::move(impl));
0067 iEvent.put(std::move(toPut));
0068 }
0069
0070 void MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer::fillDescriptions(edm::ConfigurationDescriptions &cfg) {
0071 edm::ParameterSetDescription desc;
0072 desc.add<double>("energyCut", 5.);
0073 desc.add<double>("timeCut", 10.);
0074
0075 cfg.add("mtdRecoClusterToSimLayerClusterAssociatorByHits", desc);
0076 }
0077
0078
0079 DEFINE_FWK_MODULE(MtdRecoClusterToSimLayerClusterAssociatorByHitsProducer);