Back to home page

Project CMSSW displayed by LXR

 
 

    


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   // prepare output
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   // put into event
0084   iEvent.put(std::move(out));
0085 }
0086 
0087 #include "FWCore/Framework/interface/MakerMacros.h"
0088 DEFINE_FWK_MODULE(MaskedMeasurementTrackerEventProducer);