diff --git a/L1Trigger/CSCTrackFinder/interface/CSCTFPtLUT.h b/L1Trigger/CSCTrackFinder/interface/CSCTFPtLUT.h index 5676d196af833..ed07274e9eb2c 100644 --- a/L1Trigger/CSCTrackFinder/interface/CSCTFPtLUT.h +++ b/L1Trigger/CSCTrackFinder/interface/CSCTFPtLUT.h @@ -1,20 +1,33 @@ #ifndef CSCTrackFinder_CSCTFPtLUT_h #define CSCTrackFinder_CSCTFPtLUT_h -#include -#include -#include -#include -#include -#include +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "L1Trigger/CSCTrackFinder/interface/CSCTrackFinderDataTypes.h" +#include "CondFormats/L1TObjects/interface/L1MuCSCPtLut.h" +#include "CondFormats/L1TObjects/interface/L1MuTriggerScales.h" +#include "CondFormats/L1TObjects/interface/L1MuTriggerPtScale.h" +#include "CondFormats/DataRecord/interface/L1MuCSCPtLutRcd.h" +#include "CondFormats/DataRecord/interface/L1MuTriggerScalesRcd.h" +#include "CondFormats/DataRecord/interface/L1MuTriggerPtScaleRcd.h" +#include "L1Trigger/CSCTrackFinder/interface/CSCTFPtMethods.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" ///KK -#include +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/EventSetup.h" /// class CSCTFPtLUT { public: + struct Tokens { + edm::ESGetToken ptLUT; + edm::ESGetToken scales; + edm::ESGetToken ptScale; + }; + + static Tokens consumes(edm::ConsumesCollector iC); + ///KK - CSCTFPtLUT(const edm::EventSetup& c); + CSCTFPtLUT(const edm::EventSetup& c, const Tokens& tokens); /// CSCTFPtLUT(const edm::ParameterSet&, const L1MuTriggerScales* scales, const L1MuTriggerPtScale* ptScale); diff --git a/L1Trigger/CSCTrackFinder/interface/CSCTFSectorProcessor.h b/L1Trigger/CSCTrackFinder/interface/CSCTFSectorProcessor.h index 326890b85a537..7c7e6ced07d8e 100644 --- a/L1Trigger/CSCTrackFinder/interface/CSCTFSectorProcessor.h +++ b/L1Trigger/CSCTrackFinder/interface/CSCTFSectorProcessor.h @@ -11,20 +11,29 @@ #include #include #include -#include -#include -#include -#include - -#include -#include -#include +#include "CondFormats/L1TObjects/interface/L1MuCSCTFConfiguration.h" +#include "CondFormats/DataRecord/interface/L1MuCSCTFConfigurationRcd.h" +#include "DataFormats/L1CSCTrackFinder/interface/L1CSCTrackCollection.h" +#include "DataFormats/L1CSCTrackFinder/interface/TrackStub.h" +#include "DataFormats/L1CSCTrackFinder/interface/CSCTriggerContainer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" + +#include "L1Trigger/CSCTrackFinder/interface/CSCSectorReceiverLUT.h" +#include "L1Trigger/CSCTrackFinder/interface/CSCTFSPCoreLogic.h" +#include "L1Trigger/CSCTrackFinder/interface/CSCTFPtLUT.h" ///KK -#include +#include "FWCore/Framework/interface/EventSetup.h" /// class CSCTFSectorProcessor { public: + struct Tokens { + CSCTFPtLUT::Tokens ptLUT; + edm::ESGetToken config; + }; + + static Tokens consumes(const edm::ParameterSet& pset, edm::ConsumesCollector iC); + CSCTFSectorProcessor(const unsigned& endcap, const unsigned& sector, const edm::ParameterSet& pset, @@ -33,7 +42,7 @@ class CSCTFSectorProcessor { const L1MuTriggerPtScale* ptScale); ///KK - void initialize(const edm::EventSetup& c); + void initialize(const edm::EventSetup& c, const Tokens& tokens); /// ~CSCTFSectorProcessor(); diff --git a/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.cc b/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.cc index 24b43a839ab66..ae94f78aa182b 100644 --- a/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.cc +++ b/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.cc @@ -26,7 +26,8 @@ CSCTFTrackProducer::CSCTFTrackProducer(const edm::ParameterSet& pset) m_scalesToken(esConsumes()), m_ptScaleToken(esConsumes()), m_pDDToken(esConsumes()), - sp_pset{pset.getParameter("SectorProcessor")} { + sp_pset{pset.getParameter("SectorProcessor")}, + m_builderTokens(CSCTFTrackBuilder::consumes(sp_pset, consumesCollector())) { m_scalesCacheID = 0ULL; m_ptScaleCacheID = 0ULL; produces(); @@ -48,10 +49,9 @@ void CSCTFTrackProducer::produce(edm::Event& e, const edm::EventSetup& c) { edm::ESHandle scales = c.getHandle(m_scalesToken); edm::ESHandle ptScale = c.getHandle(m_ptScaleToken); - c.get().get(ptScale); my_builder = std::make_unique(sp_pset, TMB07, scales.product(), ptScale.product()); - my_builder->initialize(c); + my_builder->initialize(c, m_builderTokens); m_scalesCacheID = c.get().cacheIdentifier(); m_ptScaleCacheID = c.get().cacheIdentifier(); diff --git a/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.h b/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.h index b399dcbb960d8..8e94836c7e22f 100644 --- a/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.h +++ b/L1Trigger/CSCTrackFinder/plugins/CSCTFTrackProducer.h @@ -42,6 +42,7 @@ class CSCTFTrackProducer : public edm::one::EDProducer m_ptScaleToken; const edm::ESGetToken m_pDDToken; const edm::ParameterSet sp_pset; + const CSCTFTrackBuilder::Tokens m_builderTokens; unsigned long long m_scalesCacheID; unsigned long long m_ptScaleCacheID; std::unique_ptr my_builder; diff --git a/L1Trigger/CSCTrackFinder/src/CSCTFPtLUT.cc b/L1Trigger/CSCTrackFinder/src/CSCTFPtLUT.cc index 5b9eb7ec630a0..17f3bc5956d98 100644 --- a/L1Trigger/CSCTrackFinder/src/CSCTFPtLUT.cc +++ b/L1Trigger/CSCTrackFinder/src/CSCTFPtLUT.cc @@ -20,16 +20,8 @@ bool CSCTFPtLUT::lut_read_in = false; // CSCTFPtMethods CSCTFPtLUT::ptMethods; ///KK -#include "CondFormats/L1TObjects/interface/L1MuCSCPtLut.h" -#include "CondFormats/DataRecord/interface/L1MuCSCPtLutRcd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include -#include "CondFormats/L1TObjects/interface/L1MuTriggerScales.h" -#include "CondFormats/DataRecord/interface/L1MuTriggerScalesRcd.h" -#include "CondFormats/L1TObjects/interface/L1MuTriggerPtScale.h" -#include "CondFormats/DataRecord/interface/L1MuTriggerPtScaleRcd.h" - // info for getPtScale() pt scale in GeV // low edges of pt bins /* const float ptscale[33] = { */ @@ -92,7 +84,17 @@ const int CSCTFPtLUT::dEtaCut_Open[24] = {7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, const int CSCTFPtLUT::getPtbyMLH = 0xFFFF; // all modes on -CSCTFPtLUT::CSCTFPtLUT(const edm::EventSetup& es) : read_pt_lut(true), isBinary(false) { +CSCTFPtLUT::Tokens CSCTFPtLUT::consumes(edm::ConsumesCollector iC) { + Tokens tok; + if (not lut_read_in) { + tok.ptLUT = iC.esConsumes(); + } + tok.scales = iC.esConsumes(); + tok.ptScale = iC.esConsumes(); + return tok; +} + +CSCTFPtLUT::CSCTFPtLUT(const edm::EventSetup& es, const Tokens& tokens) : read_pt_lut(true), isBinary(false) { pt_method = 34; //std::cout << "pt_method from 4 " << std::endl; lowQualityFlag = 4; @@ -100,23 +102,16 @@ CSCTFPtLUT::CSCTFPtLUT(const edm::EventSetup& es) : read_pt_lut(true), isBinary( if (!lut_read_in) { pt_lut = new ptdat[1 << 21]; - edm::ESHandle ptLUT; - es.get().get(ptLUT); - const L1MuCSCPtLut* myConfigPt_ = ptLUT.product(); + const L1MuCSCPtLut& myConfigPt_ = es.getData(tokens.ptLUT); - memcpy((void*)pt_lut, (void*)myConfigPt_->lut(), (1 << 21) * sizeof(ptdat)); + memcpy((void*)pt_lut, (void*)myConfigPt_.lut(), (1 << 21) * sizeof(ptdat)); lut_read_in = true; } - edm::ESHandle scales; - es.get().get(scales); - trigger_scale = scales.product(); - - edm::ESHandle ptScale; - es.get().get(ptScale); - trigger_ptscale = ptScale.product(); + trigger_scale = &es.getData(tokens.scales); + trigger_ptscale = &es.getData(tokens.ptScale); - ptMethods = CSCTFPtMethods(ptScale.product()); + ptMethods = CSCTFPtMethods(trigger_ptscale); } /// diff --git a/L1Trigger/CSCTrackFinder/src/CSCTFSectorProcessor.cc b/L1Trigger/CSCTrackFinder/src/CSCTFSectorProcessor.cc index bbf456b74a341..da2d720eab0ea 100644 --- a/L1Trigger/CSCTrackFinder/src/CSCTFSectorProcessor.cc +++ b/L1Trigger/CSCTrackFinder/src/CSCTFSectorProcessor.cc @@ -4,15 +4,21 @@ #include -#include "CondFormats/L1TObjects/interface/L1MuCSCTFConfiguration.h" -#include "CondFormats/DataRecord/interface/L1MuCSCTFConfigurationRcd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include #include #include const std::string CSCTFSectorProcessor::FPGAs[5] = {"F1", "F2", "F3", "F4", "F5"}; +CSCTFSectorProcessor::Tokens CSCTFSectorProcessor::consumes(const edm::ParameterSet& pset, edm::ConsumesCollector iC) { + Tokens tok; + if (not pset.getParameter("initializeFromPSet")) { + tok.ptLUT = CSCTFPtLUT::consumes(iC); + tok.config = iC.esConsumes(); + } + return tok; +} + CSCTFSectorProcessor::CSCTFSectorProcessor(const unsigned& endcap, const unsigned& sector, const edm::ParameterSet& pset, @@ -179,7 +185,7 @@ CSCTFSectorProcessor::CSCTFSectorProcessor(const unsigned& endcap, firmSP_Map.insert(std::pair(20140515, 20140515)); } -void CSCTFSectorProcessor::initialize(const edm::EventSetup& c) { +void CSCTFSectorProcessor::initialize(const edm::EventSetup& c, const Tokens& tokens) { initFail_ = false; if (!initializeFromPSet) { // Only pT lut can be initialized from EventSetup, all front LUTs are initialized locally from their parametrizations @@ -187,13 +193,12 @@ void CSCTFSectorProcessor::initialize(const edm::EventSetup& c) { << "SP:" << (m_endcap - 1) * 6 + (m_sector - 1); LogDebug("CSCTFSectorProcessor") << "Initializing pT LUT from EventSetup"; - ptLUT_ = new CSCTFPtLUT(c); + ptLUT_ = new CSCTFPtLUT(c, tokens.ptLUT); // Extract from EventSetup alternative (to the one, used in constructor) ParameterSet - edm::ESHandle config; - c.get().get(config); + const L1MuCSCTFConfiguration& config = c.getData(tokens.config); // And initialize only those parameters, which left uninitialized during construction - readParameters(config.product()->parameters((m_endcap - 1) * 6 + (m_sector - 1))); + readParameters(config.parameters((m_endcap - 1) * 6 + (m_sector - 1))); } // --------------------------------------------------------------------------- diff --git a/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.cc b/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.cc index 83c80bc1478e5..304a6fc7a4e16 100644 --- a/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.cc +++ b/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.cc @@ -11,7 +11,6 @@ #include "CondFormats/L1TObjects/interface/L1MuCSCTFConfiguration.h" #include "CondFormats/DataRecord/interface/L1MuCSCTFConfigurationRcd.h" -#include "FWCore/Framework/interface/ESHandle.h" #include #include @@ -30,11 +29,11 @@ CSCTFTrackBuilder::CSCTFTrackBuilder(const edm::ParameterSet& pset, } } -void CSCTFTrackBuilder::initialize(const edm::EventSetup& c) { +void CSCTFTrackBuilder::initialize(const edm::EventSetup& c, const Tokens& tokens) { //my_dtrc->initialize(c); for (int e = CSCDetId::minEndcapId(); e <= CSCDetId::maxEndcapId(); ++e) { for (int s = CSCTriggerNumbering::minTriggerSectorId(); s <= CSCTriggerNumbering::maxTriggerSectorId(); ++s) { - my_SPs[e - 1][s - 1]->initialize(c); + my_SPs[e - 1][s - 1]->initialize(c, tokens); } } } diff --git a/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.h b/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.h index 120565c8ef808..952a6d61428d8 100644 --- a/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.h +++ b/L1Trigger/CSCTrackFinder/src/CSCTFTrackBuilder.h @@ -10,15 +10,20 @@ #include #include #include +#include "L1Trigger/CSCTrackFinder/interface/CSCTFSectorProcessor.h" class CSCMuonPortCard; -class CSCTFSectorProcessor; class L1MuTriggerScales; class L1MuTriggerPtScale; class CSCTFTrackBuilder { public: - void initialize(const edm::EventSetup& c); + using Tokens = CSCTFSectorProcessor::Tokens; + static Tokens consumes(const edm::ParameterSet& pset, edm::ConsumesCollector iC) { + return CSCTFSectorProcessor::consumes(pset, iC); + } + + void initialize(const edm::EventSetup& c, const Tokens& tokens); enum { nEndcaps = 2, nSectors = 6 };