Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:30:45

0001 // -*- C++ -*-
0002 // Class:      ME0ChamberMasker
0003 //
0004 
0005 // system include files
0006 #include <memory>
0007 #include <string>
0008 #include <vector>
0009 #include <iostream>
0010 #include <algorithm>
0011 #include <regex>
0012 
0013 // user include files
0014 #include "FWCore/Framework/interface/Frameworkfwd.h"
0015 #include "FWCore/Framework/interface/global/EDProducer.h"
0016 #include "FWCore/Framework/interface/ConsumesCollector.h"
0017 #include "FWCore/Framework/interface/ESHandle.h"
0018 #include "FWCore/Utilities/interface/ESGetToken.h"
0019 #include "FWCore/Framework/interface/Event.h"
0020 #include "FWCore/Framework/interface/MakerMacros.h"
0021 #include "FWCore/Framework/interface/EventSetup.h"
0022 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0023 
0024 #include "Geometry/GEMGeometry/interface/ME0Geometry.h"
0025 #include "Geometry/GEMGeometry/interface/ME0EtaPartitionSpecs.h"
0026 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0027 #include "DataFormats/GEMDigi/interface/ME0DigiPreRecoCollection.h"
0028 #include "CondFormats/RecoMuonObjects/interface/MuonSystemAging.h"
0029 #include "CondFormats/DataRecord/interface/MuonSystemAgingRcd.h"
0030 //
0031 // class declaration
0032 //
0033 
0034 class ME0ChamberMasker : public edm::global::EDProducer<> {
0035 public:
0036   explicit ME0ChamberMasker(const edm::ParameterSet&);
0037 
0038   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0039 
0040 private:
0041   void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
0042 
0043   // ----------member data ---------------------------
0044   const bool me0Minus_;
0045   const bool me0Plus_;
0046   const edm::InputTag digiTag_;
0047   const edm::EDGetTokenT<ME0DigiPreRecoCollection> m_digiTag;
0048   const edm::EDPutTokenT<ME0DigiPreRecoCollection> m_putToken;
0049   const edm::ESGetToken<MuonSystemAging, MuonSystemAgingRcd> m_agingObjTag;
0050 };
0051 
0052 //
0053 // constants, enums and typedefs
0054 //
0055 
0056 //
0057 // static data member definitions
0058 //
0059 
0060 //
0061 // constructors and destructor
0062 //
0063 ME0ChamberMasker::ME0ChamberMasker(const edm::ParameterSet& iConfig)
0064     : me0Minus_(iConfig.getParameter<bool>("me0Minus")),
0065       me0Plus_(iConfig.getParameter<bool>("me0Plus")),
0066       digiTag_(iConfig.getParameter<edm::InputTag>("digiTag")),
0067       m_digiTag(consumes(digiTag_)),
0068       m_putToken(produces()),
0069       m_agingObjTag(esConsumes()) {}
0070 
0071 //
0072 // member functions
0073 //
0074 
0075 // ------------ method called to produce the data  ------------
0076 void ME0ChamberMasker::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
0077   using namespace edm;
0078 
0079   MuonSystemAging const& agingObj = iSetup.getData(m_agingObjTag);
0080 
0081   auto const& maskedME0IDs = agingObj.m_ME0ChambEffs;
0082 
0083   ME0DigiPreRecoCollection filteredDigis;
0084 
0085   if (!digiTag_.label().empty()) {
0086     ME0DigiPreRecoCollection const& me0Digis = iEvent.get(m_digiTag);
0087 
0088     for (const auto& me0LayerId : me0Digis) {
0089       auto chambId = me0LayerId.first.chamberId();
0090 
0091       bool keepDigi = (!me0Minus_ && chambId.region() < 0) || (!me0Plus_ && chambId.region() > 0);
0092 
0093       uint32_t rawId = chambId.rawId();
0094       if (keepDigi || maskedME0IDs.find(rawId) == maskedME0IDs.end()) {
0095         filteredDigis.put(me0LayerId.second, me0LayerId.first);
0096       }
0097     }
0098   }
0099 
0100   iEvent.emplace(m_putToken, std::move(filteredDigis));
0101 }
0102 
0103 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
0104 void ME0ChamberMasker::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0105   edm::ParameterSetDescription desc;
0106   desc.add<edm::InputTag>("digiTag", edm::InputTag("simMuonME0Digis"));
0107   desc.add<bool>("me0Minus", true);
0108   desc.add<bool>("me0Plus", true);
0109   descriptions.add("me0ChamberMasker", desc);
0110 }
0111 
0112 //define this as a plug-in
0113 DEFINE_FWK_MODULE(ME0ChamberMasker);