File indexing completed on 2023-03-17 11:12:30
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <memory>
0011 #include <fstream>
0012
0013
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
0032
0033
0034 class L1TMuonQualityAdjuster : public edm::stream::EDProducer<> {
0035 public:
0036 explicit L1TMuonQualityAdjuster(const edm::ParameterSet&);
0037 ~L1TMuonQualityAdjuster() override;
0038
0039 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0040
0041 private:
0042 void produce(edm::Event&, const edm::EventSetup&) override;
0043 void beginRun(const edm::Run&, edm::EventSetup const&) override;
0044 void endRun(const edm::Run&, edm::EventSetup const&) override;
0045 void beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override;
0046 void endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override;
0047
0048 edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_barrelTfInputToken;
0049 edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_overlapTfInputToken;
0050 edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_endCapTfInputToken;
0051
0052 edm::InputTag m_barrelTfInputTag;
0053 edm::InputTag m_overlapTfInputTag;
0054 edm::InputTag m_endCapTfInputTag;
0055 int m_bmtfBxOffset;
0056 };
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069 L1TMuonQualityAdjuster::L1TMuonQualityAdjuster(const edm::ParameterSet& iConfig) {
0070 m_barrelTfInputTag = iConfig.getParameter<edm::InputTag>("bmtfInput");
0071 m_overlapTfInputTag = iConfig.getParameter<edm::InputTag>("omtfInput");
0072 m_endCapTfInputTag = iConfig.getParameter<edm::InputTag>("emtfInput");
0073 m_bmtfBxOffset = iConfig.getParameter<int>("bmtfBxOffset");
0074 m_barrelTfInputToken = consumes<l1t::RegionalMuonCandBxCollection>(m_barrelTfInputTag);
0075 m_overlapTfInputToken = consumes<l1t::RegionalMuonCandBxCollection>(m_overlapTfInputTag);
0076 m_endCapTfInputToken = consumes<l1t::RegionalMuonCandBxCollection>(m_endCapTfInputTag);
0077
0078 produces<RegionalMuonCandBxCollection>("BMTF");
0079 produces<RegionalMuonCandBxCollection>("OMTF");
0080 produces<RegionalMuonCandBxCollection>("EMTF");
0081 }
0082
0083 L1TMuonQualityAdjuster::~L1TMuonQualityAdjuster() {
0084
0085
0086 }
0087
0088
0089
0090
0091
0092
0093 void L1TMuonQualityAdjuster::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
0094 using namespace edm;
0095
0096 std::unique_ptr<l1t::RegionalMuonCandBxCollection> filteredBMTFMuons(new l1t::RegionalMuonCandBxCollection());
0097 std::unique_ptr<l1t::RegionalMuonCandBxCollection> filteredOMTFMuons(new l1t::RegionalMuonCandBxCollection());
0098 std::unique_ptr<l1t::RegionalMuonCandBxCollection> filteredEMTFMuons(new l1t::RegionalMuonCandBxCollection());
0099
0100 Handle<l1t::RegionalMuonCandBxCollection> bmtfMuons;
0101 Handle<l1t::RegionalMuonCandBxCollection> omtfMuons;
0102 Handle<l1t::RegionalMuonCandBxCollection> emtfMuons;
0103
0104 iEvent.getByToken(m_barrelTfInputToken, bmtfMuons);
0105 iEvent.getByToken(m_overlapTfInputToken, omtfMuons);
0106 iEvent.getByToken(m_endCapTfInputToken, emtfMuons);
0107
0108 if (bmtfMuons.isValid()) {
0109 filteredBMTFMuons->setBXRange(bmtfMuons->getFirstBX(), bmtfMuons->getLastBX());
0110 for (int bx = bmtfMuons->getFirstBX(); bx <= bmtfMuons->getLastBX(); ++bx) {
0111 for (auto mu = bmtfMuons->begin(bx); mu != bmtfMuons->end(bx); ++mu) {
0112 int newqual = 12;
0113 l1t::RegionalMuonCand newMu((*mu));
0114 newMu.setHwQual(newqual);
0115 filteredBMTFMuons->push_back(bx + m_bmtfBxOffset, newMu);
0116 }
0117 }
0118 } else {
0119
0120 }
0121
0122 if (emtfMuons.isValid()) {
0123 filteredEMTFMuons->setBXRange(emtfMuons->getFirstBX(), emtfMuons->getLastBX());
0124 for (int bx = emtfMuons->getFirstBX(); bx <= emtfMuons->getLastBX(); ++bx) {
0125 for (auto mu = emtfMuons->begin(bx); mu != emtfMuons->end(bx); ++mu) {
0126 int newqual = 0;
0127 if (mu->hwQual() == 11 || mu->hwQual() > 12)
0128 newqual = 12;
0129 l1t::RegionalMuonCand newMu((*mu));
0130 newMu.setHwQual(newqual);
0131 filteredEMTFMuons->push_back(bx, newMu);
0132 }
0133 }
0134 } else {
0135
0136 }
0137
0138 if (omtfMuons.isValid()) {
0139 filteredOMTFMuons->setBXRange(omtfMuons->getFirstBX(), omtfMuons->getLastBX());
0140 for (int bx = omtfMuons->getFirstBX(); bx <= omtfMuons->getLastBX(); ++bx) {
0141 for (auto mu = omtfMuons->begin(bx); mu != omtfMuons->end(bx); ++mu) {
0142 int newqual = 0;
0143 if (mu->hwQual() > 0)
0144 newqual = 12;
0145 l1t::RegionalMuonCand newMu((*mu));
0146 newMu.setHwQual(newqual);
0147 filteredOMTFMuons->push_back(bx, newMu);
0148 }
0149 }
0150 } else {
0151
0152 }
0153
0154
0155
0156
0157
0158
0159 iEvent.put(std::move(filteredBMTFMuons), "BMTF");
0160 iEvent.put(std::move(filteredOMTFMuons), "OMTF");
0161 iEvent.put(std::move(filteredEMTFMuons), "EMTF");
0162 }
0163
0164
0165 void L1TMuonQualityAdjuster::beginRun(const edm::Run&, edm::EventSetup const&) {}
0166
0167
0168 void L1TMuonQualityAdjuster::endRun(const edm::Run&, edm::EventSetup const&) {}
0169
0170
0171 void L1TMuonQualityAdjuster::beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {}
0172
0173
0174 void L1TMuonQualityAdjuster::endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {}
0175
0176
0177 void L1TMuonQualityAdjuster::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0178
0179
0180 edm::ParameterSetDescription desc;
0181 desc.setUnknown();
0182 descriptions.addDefault(desc);
0183 }
0184
0185
0186 DEFINE_FWK_MODULE(L1TMuonQualityAdjuster);