File indexing completed on 2025-04-04 01:27:01
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include <algorithm>
0020 #include <iostream>
0021 #include <map>
0022 #include <memory>
0023 #include <string>
0024
0025
0026 #include "FWCore/Framework/interface/ConsumesCollector.h"
0027 #include "FWCore/Framework/interface/Frameworkfwd.h"
0028 #include "FWCore/Framework/interface/global/EDProducer.h"
0029 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0030
0031 #include "DataFormats/Common/interface/Handle.h"
0032 #include "FWCore/Framework/interface/Event.h"
0033 #include "FWCore/Framework/interface/Run.h"
0034
0035 #include "FWCore/Framework/interface/ESHandle.h"
0036 #include "FWCore/Utilities/interface/ESGetToken.h"
0037 #include "FWCore/Framework/interface/EventSetup.h"
0038
0039 #include "FWCore/Framework/interface/MakerMacros.h"
0040
0041 #include "Geometry/DTGeometry/interface/DTGeometry.h"
0042 #include "Geometry/Records/interface/MuonGeometryRecord.h"
0043
0044 #include "Geometry/DTGeometry/interface/DTChamber.h"
0045 #include "Geometry/DTGeometry/interface/DTLayer.h"
0046
0047 #include "DataFormats/DTDigi/interface/DTDigiCollection.h"
0048 #include "SimDataFormats/DigiSimLinks/interface/DTDigiSimLinkCollection.h"
0049 #include "DataFormats/MuonDetId/interface/DTChamberId.h"
0050 #include "DataFormats/MuonDetId/interface/DTLayerId.h"
0051 #include "DataFormats/MuonDetId/interface/DTWireId.h"
0052
0053 #include "CondFormats/DataRecord/interface/MuonSystemAgingRcd.h"
0054 #include "CondFormats/RecoMuonObjects/interface/MuonSystemAging.h"
0055
0056 #include "CLHEP/Random/RandomEngine.h"
0057 #include "FWCore/AbstractServices/interface/RandomNumberGenerator.h"
0058 #include "FWCore/ServiceRegistry/interface/Service.h"
0059
0060
0061
0062
0063
0064 class DTChamberMasker : public edm::global::EDProducer<> {
0065 public:
0066 explicit DTChamberMasker(const edm::ParameterSet &);
0067
0068 static void fillDescriptions(edm::ConfigurationDescriptions &);
0069
0070 private:
0071 void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override;
0072
0073 void createMaskedChamberCollection(edm::ESHandle<DTGeometry> &);
0074
0075
0076
0077 const edm::EDGetTokenT<DTDigiCollection> m_digiTokenR;
0078 const edm::EDGetTokenT<DTDigiSimLinkCollection> m_linkTokenR;
0079 const edm::EDPutTokenT<DTDigiCollection> m_digiTokenP;
0080 const edm::EDPutTokenT<DTDigiSimLinkCollection> m_linkTokenP;
0081 const edm::ESGetToken<MuonSystemAging, MuonSystemAgingRcd> m_agingObjToken;
0082 };
0083
0084
0085
0086
0087
0088
0089
0090
0091 DTChamberMasker::DTChamberMasker(const edm::ParameterSet &iConfig)
0092 : m_digiTokenR(consumes(iConfig.getParameter<edm::InputTag>("digiTag"))),
0093 m_linkTokenR(consumes(iConfig.getParameter<edm::InputTag>("digiTag"))),
0094 m_digiTokenP(produces()),
0095 m_linkTokenP(produces()),
0096 m_agingObjToken(esConsumes()) {}
0097
0098
0099
0100
0101
0102
0103 void DTChamberMasker::produce(edm::StreamID, edm::Event &event, const edm::EventSetup &conditions) const {
0104 edm::Service<edm::RandomNumberGenerator> randGenService;
0105 CLHEP::HepRandomEngine &randGen = randGenService->getEngine(event.streamID());
0106
0107 MuonSystemAging const &agingObj = conditions.getData(m_agingObjToken);
0108
0109 auto const &chEffs = agingObj.m_DTChambEffs;
0110
0111 DTDigiCollection filteredDigis;
0112
0113 if (!m_digiTokenR.isUninitialized()) {
0114 edm::Handle<DTDigiCollection> dtDigis;
0115 event.getByToken(m_digiTokenR, dtDigis);
0116
0117 for (const auto &dtLayerId : (*dtDigis)) {
0118 uint32_t rawId = (dtLayerId.first).chamberId().rawId();
0119 auto chEffIt = chEffs.find(rawId);
0120
0121 if (chEffIt == chEffs.end() || randGen.flat() <= chEffIt->second)
0122 filteredDigis.put(dtLayerId.second, dtLayerId.first);
0123 }
0124 }
0125
0126 DTDigiSimLinkCollection linksCopy;
0127
0128 if (!m_linkTokenR.isUninitialized()) {
0129 edm::Handle<DTDigiSimLinkCollection> links;
0130 event.getByToken(m_linkTokenR, links);
0131 linksCopy = (*links);
0132 }
0133
0134 event.emplace(m_digiTokenP, std::move(filteredDigis));
0135 event.emplace(m_linkTokenP, std::move(linksCopy));
0136 }
0137
0138
0139
0140 void DTChamberMasker::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0141 edm::ParameterSetDescription desc;
0142 desc.add<edm::InputTag>("digiTag", edm::InputTag("simMuonDTDigis"));
0143 descriptions.add("dtChamberMasker", desc);
0144 }
0145
0146
0147 DEFINE_FWK_MODULE(DTChamberMasker);