File indexing completed on 2025-01-08 03:36:32
0001 #include "FWCore/Framework/interface/Frameworkfwd.h"
0002 #include "FWCore/Framework/interface/stream/EDProducer.h"
0003 #include "FWCore/Framework/interface/Event.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0006 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0007 #include "RecoTracker/MeasurementDet/interface/MeasurementTrackerEvent.h"
0008
0009 class dso_hidden MaskedMeasurementTrackerEventProducer final : public edm::stream::EDProducer<> {
0010 public:
0011 explicit MaskedMeasurementTrackerEventProducer(const edm::ParameterSet &iConfig);
0012 ~MaskedMeasurementTrackerEventProducer() override = default;
0013 static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
0014
0015 private:
0016 void produce(edm::Event &, const edm::EventSetup &) override;
0017
0018 typedef edm::ContainerMask<edmNew::DetSetVector<SiStripCluster> > StripMask;
0019 typedef edm::ContainerMask<edmNew::DetSetVector<SiPixelCluster> > PixelMask;
0020 typedef edm::ContainerMask<edmNew::DetSetVector<Phase2TrackerCluster1D> > Phase2OTMask;
0021
0022 const edm::EDGetTokenT<MeasurementTrackerEvent> src_;
0023
0024 const bool skipClusters_;
0025 const bool phase2skipClusters_;
0026
0027 edm::EDGetTokenT<StripMask> maskStrips_;
0028 edm::EDGetTokenT<PixelMask> maskPixels_;
0029 edm::EDGetTokenT<Phase2OTMask> maskPhase2OTs_;
0030 };
0031
0032 void MaskedMeasurementTrackerEventProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) {
0033 edm::ParameterSetDescription desc;
0034 desc.add<edm::InputTag>("src", edm::InputTag("MeasurementTrackerEvent"));
0035 desc.add<edm::InputTag>("clustersToSkip", edm::InputTag(""))->setComment("keep empty string for Phase2");
0036 desc.add<edm::InputTag>("phase2clustersToSkip", edm::InputTag(""))->setComment("keep empty string for Phase1");
0037 descriptions.addWithDefaultLabel(desc);
0038 }
0039
0040 MaskedMeasurementTrackerEventProducer::MaskedMeasurementTrackerEventProducer(const edm::ParameterSet &iConfig)
0041 : src_(consumes<MeasurementTrackerEvent>(iConfig.getParameter<edm::InputTag>("src"))),
0042 skipClusters_(!iConfig.getParameter<edm::InputTag>("clustersToSkip").label().empty()),
0043 phase2skipClusters_(!iConfig.getParameter<edm::InputTag>("phase2clustersToSkip").label().empty()) {
0044 if (skipClusters_) {
0045 edm::InputTag clustersToSkip = iConfig.getParameter<edm::InputTag>("clustersToSkip");
0046 maskPixels_ = consumes<PixelMask>(clustersToSkip);
0047 maskStrips_ = consumes<StripMask>(clustersToSkip);
0048 }
0049
0050 if (phase2skipClusters_) {
0051 edm::InputTag phase2clustersToSkip = iConfig.getParameter<edm::InputTag>("phase2clustersToSkip");
0052 maskPixels_ = consumes<PixelMask>(phase2clustersToSkip);
0053 maskPhase2OTs_ = consumes<Phase2OTMask>(phase2clustersToSkip);
0054 }
0055
0056 produces<MeasurementTrackerEvent>();
0057 }
0058
0059 void MaskedMeasurementTrackerEventProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) {
0060 edm::Handle<MeasurementTrackerEvent> mte;
0061 iEvent.getByToken(src_, mte);
0062
0063
0064 std::unique_ptr<MeasurementTrackerEvent> out;
0065
0066 if (skipClusters_) {
0067 edm::Handle<PixelMask> maskPixels;
0068 iEvent.getByToken(maskPixels_, maskPixels);
0069 edm::Handle<StripMask> maskStrips;
0070 iEvent.getByToken(maskStrips_, maskStrips);
0071
0072 out = std::make_unique<MeasurementTrackerEvent>(*mte, *maskStrips, *maskPixels);
0073
0074 } else if (phase2skipClusters_) {
0075 edm::Handle<PixelMask> maskPixels;
0076 iEvent.getByToken(maskPixels_, maskPixels);
0077 edm::Handle<Phase2OTMask> maskPhase2OTs;
0078 iEvent.getByToken(maskPhase2OTs_, maskPhase2OTs);
0079
0080 out = std::make_unique<MeasurementTrackerEvent>(*mte, *maskPixels, *maskPhase2OTs);
0081 }
0082
0083
0084 iEvent.put(std::move(out));
0085 }
0086
0087 #include "FWCore/Framework/interface/MakerMacros.h"
0088 DEFINE_FWK_MODULE(MaskedMeasurementTrackerEventProducer);