From 7ecc5733dce4714d4e38cb749d61ff61ef1d51c4 Mon Sep 17 00:00:00 2001 From: Kevin Pedro Date: Wed, 12 Jul 2017 12:02:44 -0500 Subject: [PATCH] introduce hcalSkipPacker Era and HcalRawToDigiFake --- Configuration/Eras/python/Era_Phase2_cff.py | 4 +- .../python/Modifier_hcalSkipPacker_cff.py | 5 + .../Geometry/python/dict2023Geometry.py | 2 +- .../StandardSequences/python/Eras.py | 2 +- .../StandardSequences/python/RawToDigi_cff.py | 4 - .../plugins/HcalRawToDigiFake.cc | 133 ++++++++++++++++++ .../HcalRawToDigi/python/HcalRawToDigi_cfi.py | 1 + 7 files changed, 143 insertions(+), 8 deletions(-) create mode 100644 Configuration/Eras/python/Modifier_hcalSkipPacker_cff.py create mode 100644 EventFilter/HcalRawToDigi/plugins/HcalRawToDigiFake.cc diff --git a/Configuration/Eras/python/Era_Phase2_cff.py b/Configuration/Eras/python/Era_Phase2_cff.py index 4f5109b353602..0216e2f87a6b8 100644 --- a/Configuration/Eras/python/Era_Phase2_cff.py +++ b/Configuration/Eras/python/Era_Phase2_cff.py @@ -15,9 +15,9 @@ from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM from Configuration.Eras.Modifier_stage2L1Trigger_cff import stage2L1Trigger from Configuration.Eras.Modifier_hcalHardcodeConditions_cff import hcalHardcodeConditions +from Configuration.Eras.Modifier_hcalSkipPacker_cff import hcalSkipPacker Phase2 = cms.ModifierChain(run2_common, phase2_common, phase2_tracker, trackingPhase2PU140, phase2_ecal, run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, phase2_muon, run3_GEM, stage2L1Trigger, - hcalHardcodeConditions + hcalHardcodeConditions, hcalSkipPacker, ) - diff --git a/Configuration/Eras/python/Modifier_hcalSkipPacker_cff.py b/Configuration/Eras/python/Modifier_hcalSkipPacker_cff.py new file mode 100644 index 0000000000000..475250aeb9b80 --- /dev/null +++ b/Configuration/Eras/python/Modifier_hcalSkipPacker_cff.py @@ -0,0 +1,5 @@ +import FWCore.ParameterSet.Config as cms + +# This modifier skips the HCAL packer and runs a fake unpacker so all expected collections are still available + +hcalSkipPacker = cms.Modifier() diff --git a/Configuration/Geometry/python/dict2023Geometry.py b/Configuration/Geometry/python/dict2023Geometry.py index af8ffedc6d1e9..7e9ae3dfa1992 100644 --- a/Configuration/Geometry/python/dict2023Geometry.py +++ b/Configuration/Geometry/python/dict2023Geometry.py @@ -183,7 +183,7 @@ 'from Geometry.EcalMapping.EcalMapping_cfi import *', 'from Geometry.EcalMapping.EcalMappingRecord_cfi import *', ], - "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, hcalHardcodeConditions", + "era" : "run2_HE_2017, run2_HF_2017, run2_HCAL_2017, run3_HB, phase2_hcal, phase2_hgcal, hcalHardcodeConditions, hcalSkipPacker", } } diff --git a/Configuration/StandardSequences/python/Eras.py b/Configuration/StandardSequences/python/Eras.py index 9f7d8c0929b11..0e01e6aa765d0 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -42,7 +42,7 @@ def __init__(self): 'phase2_timing_layer','phase2_hcal', 'trackingLowPU', 'trackingPhase1', 'trackingPhase1QuadProp', 'ctpps_2016', 'trackingPhase2PU140', 'tracker_apv_vfp30_2016', 'run2_miniAOD_80XLegacy', - 'hcalHardcodeConditions'] + 'hcalHardcodeConditions', 'hcalSkipPacker'] internalUseModChains = ['run2_2017_noTrackingModifier'] diff --git a/Configuration/StandardSequences/python/RawToDigi_cff.py b/Configuration/StandardSequences/python/RawToDigi_cff.py index 691ebad1e261e..1f48a25a964c8 100644 --- a/Configuration/StandardSequences/python/RawToDigi_cff.py +++ b/Configuration/StandardSequences/python/RawToDigi_cff.py @@ -79,10 +79,6 @@ from Configuration.Eras.Modifier_phase2_common_cff import phase2_common phase2_common.toReplaceWith(RawToDigi, RawToDigi.copyAndExclude([castorDigis])) -# until we have hcal raw data for phase 2... -from Configuration.Eras.Modifier_phase2_hcal_cff import phase2_hcal -phase2_hcal.toReplaceWith(RawToDigi, RawToDigi.copyAndExclude([hcalDigis])) - from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker # Remove siPixelDigis until we have phase1 pixel digis phase2_tracker.toReplaceWith(RawToDigi, RawToDigi.copyAndExclude([siPixelDigis])) # FIXME diff --git a/EventFilter/HcalRawToDigi/plugins/HcalRawToDigiFake.cc b/EventFilter/HcalRawToDigi/plugins/HcalRawToDigiFake.cc new file mode 100644 index 0000000000000..5f3e1e6849560 --- /dev/null +++ b/EventFilter/HcalRawToDigi/plugins/HcalRawToDigiFake.cc @@ -0,0 +1,133 @@ +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/HcalDigi/interface/HcalDigiCollections.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include +#include + +//helper +namespace raw_impl { + template + void get(edm::EDGetTokenT tok, edm::Event& e, const std::string& productName="") + { + edm::Handle h_coll; + e.getByToken(tok, h_coll); + auto o_coll = std::make_unique(); + if(h_coll.isValid()){ + //copy constructor + o_coll = std::make_unique(*(h_coll.product())); + } + if(productName.size()) e.put(std::move(o_coll),productName); + else e.put(std::move(o_coll)); + } +} + +class HcalRawToDigiFake : public edm::global::EDProducer<> +{ +public: + explicit HcalRawToDigiFake(const edm::ParameterSet& ps); + virtual ~HcalRawToDigiFake(); + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + virtual void produce(edm::StreamID id, edm::Event& e, const edm::EventSetup& c) const override; +private: + //members + edm::EDGetTokenT tok_QIE10DigiCollection_; + edm::EDGetTokenT tok_QIE11DigiCollection_; + edm::EDGetTokenT tok_HBHEDigiCollection_; + edm::EDGetTokenT tok_HFDigiCollection_; + edm::EDGetTokenT tok_HODigiCollection_; + edm::EDGetTokenT tok_TPDigiCollection_; + edm::EDGetTokenT tok_HOTPDigiCollection_; + edm::EDGetTokenT tok_CalibDigiCollection_; + edm::EDGetTokenT tok_ZDCDigiCollection_; + edm::EDGetTokenT tok_ZDCQIE10DigiCollection_; + edm::EDGetTokenT tok_TTPDigiCollection_; + const bool unpackCalib_, unpackZDC_, unpackTTP_; +}; + + +HcalRawToDigiFake::HcalRawToDigiFake(edm::ParameterSet const& conf): + tok_QIE10DigiCollection_ (consumes(conf.getParameter("QIE10"))), + tok_QIE11DigiCollection_ (consumes(conf.getParameter("QIE11"))), + tok_HBHEDigiCollection_ (consumes(conf.getParameter("HBHE"))), + tok_HFDigiCollection_ (consumes(conf.getParameter("HF"))), + tok_HODigiCollection_ (consumes(conf.getParameter("HO"))), + tok_TPDigiCollection_ (consumes(conf.getParameter("TRIG"))), + tok_HOTPDigiCollection_ (consumes(conf.getParameter("HOTP"))), + tok_CalibDigiCollection_ (consumes(conf.getParameter("CALIB"))), + tok_ZDCDigiCollection_ (consumes(conf.getParameter("ZDC"))), + tok_ZDCQIE10DigiCollection_(consumes(conf.getParameter("ZDCQIE10"))), + tok_TTPDigiCollection_ (consumes(conf.getParameter("TTP"))), + unpackCalib_(conf.getParameter("UnpackCalib")), + unpackZDC_(conf.getParameter("UnpackZDC")), + unpackTTP_(conf.getParameter("UnpackTTP")) +{ + // products produced... + produces(); + produces(); + produces(); + produces(); + produces(); + produces(); + produces(); + if (unpackCalib_) + produces(); + if (unpackZDC_) + produces(); + if (unpackTTP_) + produces(); + produces("ZDC"); +} + +// Virtual destructor needed. +HcalRawToDigiFake::~HcalRawToDigiFake() { } + +void HcalRawToDigiFake::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("UnpackZDC",true); + desc.add("UnpackCalib",true); + desc.add("UnpackTTP",true); + //empty tag = not usually produced by simulation + desc.add("QIE10", edm::InputTag("simHcalDigis", "HFQIE10DigiCollection")); + desc.add("QIE11", edm::InputTag("simHcalDigis", "HBHEQIE11DigiCollection")); + desc.add("HBHE", edm::InputTag("simHcalDigis")); + desc.add("HF", edm::InputTag("simHcalDigis")); + desc.add("HO", edm::InputTag("simHcalDigis")); + desc.add("TRIG", edm::InputTag("simHcalTriggerPrimitiveDigis")); + desc.add("HOTP", edm::InputTag("")); + desc.add("CALIB", edm::InputTag("")); + desc.add("ZDC", edm::InputTag("simHcalUnsuppressedDigis")); + desc.add("ZDCQIE10", edm::InputTag("")); + desc.add("TTP", edm::InputTag("")); + //not used, just for compatibility + desc.add("InputLabel",edm::InputTag("rawDataCollector")); + descriptions.add("HcalRawToDigiFake",desc); +} + + +// Functions that gets called by framework every event +void HcalRawToDigiFake::produce(edm::StreamID id, edm::Event& e, const edm::EventSetup& es) const +{ + //handle each collection + raw_impl::get(tok_QIE10DigiCollection_,e); + raw_impl::get(tok_QIE11DigiCollection_,e); + raw_impl::get(tok_HBHEDigiCollection_,e); + raw_impl::get(tok_HFDigiCollection_,e); + raw_impl::get(tok_HODigiCollection_,e); + raw_impl::get(tok_TPDigiCollection_,e); + raw_impl::get(tok_HOTPDigiCollection_,e); + if(unpackCalib_) raw_impl::get(tok_CalibDigiCollection_,e); + if(unpackZDC_) raw_impl::get(tok_ZDCDigiCollection_,e); + raw_impl::get(tok_ZDCQIE10DigiCollection_,e,"ZDC"); + if(unpackTTP_) raw_impl::get(tok_TTPDigiCollection_,e); +} + +DEFINE_FWK_MODULE(HcalRawToDigiFake); diff --git a/EventFilter/HcalRawToDigi/python/HcalRawToDigi_cfi.py b/EventFilter/HcalRawToDigi/python/HcalRawToDigi_cfi.py index 00645e014469a..96831861f299a 100644 --- a/EventFilter/HcalRawToDigi/python/HcalRawToDigi_cfi.py +++ b/EventFilter/HcalRawToDigi/python/HcalRawToDigi_cfi.py @@ -22,6 +22,7 @@ # will be copied to the digi hcalDigis.firstSample = cms.int32(0) +import EventFilter.HcalRawToDigi.HcalRawToDigiFake_cfi _hcalDigisFake = EventFilter.HcalRawToDigi.HcalRawToDigiFake_cfi.HcalRawToDigiFake.clone() from Configuration.Eras.Modifier_hcalSkipPacker_cff import hcalSkipPacker hcalSkipPacker.toReplaceWith(hcalDigis, _hcalDigisFake)