File indexing completed on 2024-04-06 12:20:48
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
0038 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0039
0040 private:
0041 void produce(edm::Event&, const edm::EventSetup&) override;
0042
0043 edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_barrelTfInputToken;
0044 edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_overlapTfInputToken;
0045 edm::EDGetTokenT<l1t::RegionalMuonCandBxCollection> m_endCapTfInputToken;
0046
0047 edm::InputTag m_barrelTfInputTag;
0048 edm::InputTag m_overlapTfInputTag;
0049 edm::InputTag m_endCapTfInputTag;
0050 int m_bmtfBxOffset;
0051 };
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
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
0073 produces<RegionalMuonCandBxCollection>("BMTF");
0074 produces<RegionalMuonCandBxCollection>("OMTF");
0075 produces<RegionalMuonCandBxCollection>("EMTF");
0076 }
0077
0078
0079
0080
0081
0082
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
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
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
0142 }
0143
0144
0145
0146
0147
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
0155 void L1TMuonQualityAdjuster::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0156
0157
0158 edm::ParameterSetDescription desc;
0159 desc.setUnknown();
0160 descriptions.addDefault(desc);
0161 }
0162
0163
0164 DEFINE_FWK_MODULE(L1TMuonQualityAdjuster);