Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:20:48

0001 // -*- C++ -*-
0002 //
0003 // L1TMuonQualityAdjuster
0004 //
0005 // Fictitious module which filters/remaps TF qualities for studies
0006 //
0007 //
0008 
0009 // system include files
0010 #include <memory>
0011 #include <fstream>
0012 
0013 // user include files
0014 #include "FWCore/Framework/interface/Frameworkfwd.h"
0015 #include "FWCore/Framework/interface/stream/EDProducer.h"
0016 
0017 #include "FWCore/Framework/interface/Event.h"
0018 #include "FWCore/Framework/interface/MakerMacros.h"
0019 
0020 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0021 #include "FWCore/Utilities/interface/Exception.h"
0022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0023 
0024 #include "DataFormats/L1TMuon/interface/RegionalMuonCandFwd.h"
0025 #include "DataFormats/L1TMuon/interface/RegionalMuonCand.h"
0026 
0027 using namespace l1t;
0028 
0029 #include <iostream>
0030 //
0031 // class declaration
0032 //
0033 
0034 class L1TMuonQualityAdjuster : public edm::stream::EDProducer<> {
0035 public:
0036   explicit L1TMuonQualityAdjuster(const edm::ParameterSet&);
0037 
0038   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0039 
0040 private:
0041   void produce(edm::Event&, const edm::EventSetup&) override;
0042   // ----------member data ---------------------------
0043   edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_barrelTfInputToken;
0044   edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_overlapTfInputToken;
0045   edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_endCapTfInputToken;
0046   // edm::InputTag m_barrelTfInputTag;
0047   edm::InputTag m_barrelTfInputTag;
0048   edm::InputTag m_overlapTfInputTag;
0049   edm::InputTag m_endCapTfInputTag;
0050   int m_bmtfBxOffset;  // Hack while sorting our source of -3 BX offset when re-Emulating...
0051 };
0052 
0053 //
0054 // constants, enums and typedefs
0055 //
0056 
0057 //
0058 // static data member definitions
0059 //
0060 
0061 //
0062 // constructors and destructor
0063 //
0064 L1TMuonQualityAdjuster::L1TMuonQualityAdjuster(const edm::ParameterSet& iConfig) {
0065   m_barrelTfInputTag = iConfig.getParameter<edm::InputTag>("bmtfInput");
0066   m_overlapTfInputTag = iConfig.getParameter<edm::InputTag>("omtfInput");
0067   m_endCapTfInputTag = iConfig.getParameter<edm::InputTag>("emtfInput");
0068   m_bmtfBxOffset = iConfig.getParameter<int>("bmtfBxOffset");
0069   m_barrelTfInputToken = consumes<l1t::RegionalMuonCandBxCollection>(m_barrelTfInputTag);
0070   m_overlapTfInputToken = consumes<l1t::RegionalMuonCandBxCollection>(m_overlapTfInputTag);
0071   m_endCapTfInputToken = consumes<l1t::RegionalMuonCandBxCollection>(m_endCapTfInputTag);
0072   //register your products
0073   produces<RegionalMuonCandBxCollection>("BMTF");
0074   produces<RegionalMuonCandBxCollection>("OMTF");
0075   produces<RegionalMuonCandBxCollection>("EMTF");
0076 }
0077 
0078 //
0079 // member functions
0080 //
0081 
0082 // ------------ method called to produce the data  ------------
0083 void L1TMuonQualityAdjuster::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0084   using namespace edm;
0085 
0086   std::unique_ptr<l1t::RegionalMuonCandBxCollection> filteredBMTFMuons(new l1t::RegionalMuonCandBxCollection());
0087   std::unique_ptr<l1t::RegionalMuonCandBxCollection> filteredOMTFMuons(new l1t::RegionalMuonCandBxCollection());
0088   std::unique_ptr<l1t::RegionalMuonCandBxCollection> filteredEMTFMuons(new l1t::RegionalMuonCandBxCollection());
0089 
0090   Handle<l1t::RegionalMuonCandBxCollection> bmtfMuons;
0091   Handle<l1t::RegionalMuonCandBxCollection> omtfMuons;
0092   Handle<l1t::RegionalMuonCandBxCollection> emtfMuons;
0093 
0094   iEvent.getByToken(m_barrelTfInputToken, bmtfMuons);
0095   iEvent.getByToken(m_overlapTfInputToken, omtfMuons);
0096   iEvent.getByToken(m_endCapTfInputToken, emtfMuons);
0097 
0098   if (bmtfMuons.isValid()) {
0099     filteredBMTFMuons->setBXRange(bmtfMuons->getFirstBX(), bmtfMuons->getLastBX());
0100     for (int bx = bmtfMuons->getFirstBX(); bx <= bmtfMuons->getLastBX(); ++bx) {
0101       for (auto mu = bmtfMuons->begin(bx); mu != bmtfMuons->end(bx); ++mu) {
0102         int newqual = 12;
0103         l1t::RegionalMuonCand newMu((*mu));
0104         newMu.setHwQual(newqual);
0105         filteredBMTFMuons->push_back(bx + m_bmtfBxOffset, newMu);
0106       }
0107     }
0108   } else {
0109     //cout << "ERROR:  did not find BMTF muons in event with label:  " << m_barrelTfInputTag << "\n";
0110   }
0111 
0112   if (emtfMuons.isValid()) {
0113     filteredEMTFMuons->setBXRange(emtfMuons->getFirstBX(), emtfMuons->getLastBX());
0114     for (int bx = emtfMuons->getFirstBX(); bx <= emtfMuons->getLastBX(); ++bx) {
0115       for (auto mu = emtfMuons->begin(bx); mu != emtfMuons->end(bx); ++mu) {
0116         int newqual = 0;
0117         if (mu->hwQual() == 11 || mu->hwQual() > 12)
0118           newqual = 12;
0119         l1t::RegionalMuonCand newMu((*mu));
0120         newMu.setHwQual(newqual);
0121         filteredEMTFMuons->push_back(bx, newMu);
0122       }
0123     }
0124   } else {
0125     //cout << "ERROR:  did not find EMTF muons in event with label:  " << m_endCapTfInputTag << "\n";
0126   }
0127 
0128   if (omtfMuons.isValid()) {
0129     filteredOMTFMuons->setBXRange(omtfMuons->getFirstBX(), omtfMuons->getLastBX());
0130     for (int bx = omtfMuons->getFirstBX(); bx <= omtfMuons->getLastBX(); ++bx) {
0131       for (auto mu = omtfMuons->begin(bx); mu != omtfMuons->end(bx); ++mu) {
0132         int newqual = 0;
0133         if (mu->hwQual() > 0)
0134           newqual = 12;
0135         l1t::RegionalMuonCand newMu((*mu));
0136         newMu.setHwQual(newqual);
0137         filteredOMTFMuons->push_back(bx, newMu);
0138       }
0139     }
0140   } else {
0141     //cout << "ERROR:  did not find OMTF muons in event with label:  " << m_overlapTfInputTag << "\n";
0142   }
0143 
0144   //cout << "Size BMTF(-3):  " << filteredBMTFMuons->size(-3) << "\n";
0145   //cout << "Size BMTF:  " << filteredBMTFMuons->size(0) << "\n";
0146   //cout << "Size OMTF:  " << filteredOMTFMuons->size(0) << "\n";
0147   //cout << "Size EMTF:  " << filteredEMTFMuons->size(0) << "\n";
0148 
0149   iEvent.put(std::move(filteredBMTFMuons), "BMTF");
0150   iEvent.put(std::move(filteredOMTFMuons), "OMTF");
0151   iEvent.put(std::move(filteredEMTFMuons), "EMTF");
0152 }
0153 
0154 // ------------ method fills 'descriptions' with the allowed parameters for the module  ------------
0155 void L1TMuonQualityAdjuster::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0156   //The following says we do not know what parameters are allowed so do no validation
0157   // Please change this to state exactly what you do use, even if it is no parameters
0158   edm::ParameterSetDescription desc;
0159   desc.setUnknown();
0160   descriptions.addDefault(desc);
0161 }
0162 
0163 //define this as a plug-in
0164 DEFINE_FWK_MODULE(L1TMuonQualityAdjuster);