From 2a384faee172ec1e57ca51e556726d59487f0e6c Mon Sep 17 00:00:00 2001 From: Andrea Massironi Date: Sun, 12 Jul 2020 14:59:12 +0200 Subject: [PATCH] Update ECAL and HCAL reconstruction to run on multple GPUs [3/3] (cms-patatrack#504) Fix fillDescriptions() for EcalRecHitParametersGPUESProducer. --- .../EcalRecHitParametersGPUESProducer.cc | 95 ++++++++++--------- .../plugins/EcalRecHitProducerGPU.cc | 39 ++------ .../test/testEcalRechitProducer_cfg.py | 11 +++ .../test/testEcalUncalibRechitProducer_cfg.py | 4 + 4 files changed, 72 insertions(+), 77 deletions(-) diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc index f87fae5a16d39..061ab43532f09 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitParametersGPUESProducer.cc @@ -3,80 +3,83 @@ #include #include +#include "EcalRecHitParametersGPURecord.h" #include "FWCore/Framework/interface/ESProducer.h" #include "FWCore/Framework/interface/ESProductHost.h" #include "FWCore/Framework/interface/ESTransientHandle.h" +#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/ModuleFactory.h" -#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" +#include "FWCore/Framework/interface/SourceFactory.h" #include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/ReusableObjectHolder.h" #include "FWCore/Utilities/interface/typelookup.h" - #include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h" -#include "EcalRecHitParametersGPURecord.h" - -#include "FWCore/Framework/interface/SourceFactory.h" -class EcalRecHitParametersGPUESProducer - : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { +class EcalRecHitParametersGPUESProducer : public edm::ESProducer, public edm::EventSetupRecordIntervalFinder { public: - EcalRecHitParametersGPUESProducer(edm::ParameterSet const&); - ~EcalRecHitParametersGPUESProducer() override = default; + EcalRecHitParametersGPUESProducer(edm::ParameterSet const&); + ~EcalRecHitParametersGPUESProducer() override = default; - static void fillDescriptions(edm::ConfigurationDescriptions&); - std::unique_ptr produce(EcalRecHitParametersGPURecord const&); + static void fillDescriptions(edm::ConfigurationDescriptions&); + std::unique_ptr produce(EcalRecHitParametersGPURecord const&); protected: - void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&, - const edm::IOVSyncValue&, - edm::ValidityInterval&) override; + void setIntervalFor(const edm::eventsetup::EventSetupRecordKey&, + const edm::IOVSyncValue&, + edm::ValidityInterval&) override; private: - edm::ParameterSet const& pset_; + edm::ParameterSet const& pset_; }; -EcalRecHitParametersGPUESProducer::EcalRecHitParametersGPUESProducer( - edm::ParameterSet const& pset) : pset_{pset} -{ - setWhatProduced(this); - findingRecord(); +EcalRecHitParametersGPUESProducer::EcalRecHitParametersGPUESProducer(edm::ParameterSet const& pset) : pset_{pset} { + setWhatProduced(this); + findingRecord(); } -void EcalRecHitParametersGPUESProducer::setIntervalFor( - const edm::eventsetup::EventSetupRecordKey& iKey, - const edm::IOVSyncValue& iTime, - edm::ValidityInterval& oInterval) { - oInterval = edm::ValidityInterval( - edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime()); +void EcalRecHitParametersGPUESProducer::setIntervalFor(const edm::eventsetup::EventSetupRecordKey& iKey, + const edm::IOVSyncValue& iTime, + edm::ValidityInterval& oInterval) { + oInterval = edm::ValidityInterval(edm::IOVSyncValue::beginOfTime(), edm::IOVSyncValue::endOfTime()); } -void EcalRecHitParametersGPUESProducer::fillDescriptions( - edm::ConfigurationDescriptions& desc) { - edm::ParameterSetDescription d; +void EcalRecHitParametersGPUESProducer::fillDescriptions(edm::ConfigurationDescriptions& desc) { + edm::ParameterSetDescription d; + + //---- db statuses to be exluded from reconstruction + d.add>("ChannelStatusToBeExcluded", + { + "kDAC", + "kNoisy", + "kNNoisy", + "kFixedG6", + "kFixedG1", + "kFixedG0", + "kNonRespondingIsolated", + "kDeadVFE", + "kDeadFE", + "kNoDataNoTP", + }); + + // reco flags association to DB flag + edm::ParameterSetDescription desc_list_flagsMapDBReco; + desc_list_flagsMapDBReco.add>("kGood", {"kOk", "kDAC", "kNoLaser", "kNoisy"}); + desc_list_flagsMapDBReco.add>("kNoisy", {"kNNoisy", "kFixedG6", "kFixedG1"}); + desc_list_flagsMapDBReco.add>("kNeighboursRecovered", + {"kFixedG0", "kNonRespondingIsolated", "kDeadVFE"}); + desc_list_flagsMapDBReco.add>("kTowerRecovered", {"kDeadFE"}); + desc_list_flagsMapDBReco.add>("kDead", {"kNoDataNoTP"}); - // ## db statuses to be exluded from reconstruction (some will be recovered) - edm::ParameterSetDescription desc_ChannelStatusToBeExcluded; - desc_ChannelStatusToBeExcluded.add("kDAC"); - desc_ChannelStatusToBeExcluded.add("kNoisy"); - desc_ChannelStatusToBeExcluded.add("kNNoisy"); - desc_ChannelStatusToBeExcluded.add("kFixedG6"); - desc_ChannelStatusToBeExcluded.add("kFixedG1"); - desc_ChannelStatusToBeExcluded.add("kFixedG0"); - desc_ChannelStatusToBeExcluded.add("kNonRespondingIsolated"); - desc_ChannelStatusToBeExcluded.add("kDeadVFE"); - desc_ChannelStatusToBeExcluded.add("kDeadFE"); - desc_ChannelStatusToBeExcluded.add("kNoDataNoTP"); - std::vector default_ChannelStatusToBeExcluded(1); - d.addVPSet("ChannelStatusToBeExcluded", desc_ChannelStatusToBeExcluded, default_ChannelStatusToBeExcluded); + d.add("flagsMapDBReco", desc_list_flagsMapDBReco); - desc.addWithDefaultLabel(d); + desc.addWithDefaultLabel(d); } std::unique_ptr EcalRecHitParametersGPUESProducer::produce( - EcalRecHitParametersGPURecord const&) { - return std::make_unique(pset_); + EcalRecHitParametersGPURecord const&) { + return std::make_unique(pset_); } DEFINE_FWK_EVENTSETUP_SOURCE(EcalRecHitParametersGPUESProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc index 8c5589f719b70..8000f8c39b773 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitProducerGPU.cc @@ -24,9 +24,9 @@ #include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAPDPNRatiosRefGPU.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalLaserAlphasGPU.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalLinearCorrectionsGPU.h" +#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitADCToGeVConstantGPU.h" #include "RecoLocalCalo/EcalRecAlgos/interface/EcalRechitChannelStatusGPU.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalRecHitParametersGPU.h" #include "EcalRecHitBuilderKernels.h" #include "EcalRecHitParametersGPURecord.h" @@ -73,15 +73,7 @@ class EcalRecHitProducerGPU : public edm::stream::EDProducer edm::ESHandle LinearCorrectionsHandle_; edm::ESHandle recHitParametersHandle_; - // configuration - std::vector v_chstatus_; - - // - // https://github.com/cms-sw/cmssw/blob/266e21cfc9eb409b093e4cf064f4c0a24c6ac293/RecoLocalCalo/EcalRecProducers/plugins/EcalRecHitWorkerSimple.h - // - - // Associate reco flagbit ( outer vector) to many db status flags (inner vector) - // std::vector > v_DB_reco_flags_; + // Associate reco flagbit (outer vector) to many db status flags (inner vector) std::vector expanded_v_DB_reco_flags_; // Transform a map in a vector // FIXME AM: int or uint32 to be checked std::vector expanded_Sizes_v_DB_reco_flags_; // Saving the size for each piece @@ -113,20 +105,12 @@ void EcalRecHitProducerGPU::fillDescriptions(edm::ConfigurationDescriptions& con EcalRecHitProducerGPU::EcalRecHitProducerGPU(const edm::ParameterSet& ps) { //---- input - uncalibRecHitsInEBToken_ = consumes( - ps.getParameter("uncalibrecHitsInLabelEB")); - uncalibRecHitsInEEToken_ = consumes( - ps.getParameter("uncalibrecHitsInLabelEE")); + uncalibRecHitsInEBToken_ = consumes(ps.getParameter("uncalibrecHitsInLabelEB")); + uncalibRecHitsInEEToken_ = consumes(ps.getParameter("uncalibrecHitsInLabelEE")); //---- output - recHitsTokenEB_ = - produces(ps.getParameter("recHitsLabelEB")); - recHitsTokenEE_ = - produces(ps.getParameter("recHitsLabelEE")); - - //---- db statuses to be exluded from reconstruction - v_chstatus_ = StringToEnumValue( - ps.getParameter>("ChannelStatusToBeExcluded")); + recHitsTokenEB_ = produces(ps.getParameter("recHitsLabelEB")); + recHitsTokenEE_ = produces(ps.getParameter("recHitsLabelEE")); bool killDeadChannels = ps.getParameter("killDeadChannels"); configParameters_.killDeadChannels = killDeadChannels; @@ -240,20 +224,13 @@ void EcalRecHitProducerGPU::acquire(edm::Event const& event, edm::TimeValue_t event_time = event.time().value(); - ecal::rechit::create_ecal_rehit(inputDataGPU, - eventOutputDataGPU_, - // eventDataForScratchGPU_, - conditions, - configParameters_, - nchannelsEB, - event_time, - ctx.stream()); + ecal::rechit::create_ecal_rehit( + inputDataGPU, eventOutputDataGPU_, conditions, configParameters_, nchannelsEB, event_time, ctx.stream()); cudaCheck(cudaGetLastError()); } void EcalRecHitProducerGPU::produce(edm::Event& event, edm::EventSetup const& setup) { - //DurationMeasurer timer{std::string{"produce duration"}}; cms::cuda::ScopedContextProduce ctx{cudaState_}; eventOutputDataGPU_.recHitsEB.size = neb_; diff --git a/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py b/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py index bc3d8a20ea5c1..e959d212dbcf2 100644 --- a/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py +++ b/RecoLocalCalo/EcalRecProducers/test/testEcalRechitProducer_cfg.py @@ -74,6 +74,17 @@ #process.ecalMultiFitUncalibRecHitgpu.algoPSet.threads = cms.vint32(256, 1, 1) +#from RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi import ecalMultifitParametersGPUESProducer +process.load("RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi") + +# +# +# No "EcalRecHitParametersGPURecord" record found in the EventSetup.n +# #---> +# +process.load("RecoLocalCalo.EcalRecProducers.ecalRecHitParametersGPUESProducer_cfi") +#ecalRecHitParametersGPUESProducer_cfi.py + ## ## force HLT configuration for ecalMultiFitUncalibRecHit diff --git a/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py b/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py index be1934d8e002c..ffb665d7bc96a 100644 --- a/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py +++ b/RecoLocalCalo/EcalRecProducers/test/testEcalUncalibRechitProducer_cfg.py @@ -82,6 +82,10 @@ #process.ecalMultiFitUncalibRecHitgpu.algoPSet.threads = cms.vint32(256, 1, 1) +process.load("RecoLocalCalo.EcalRecProducers.ecalMultifitParametersGPUESProducer_cfi") + + + ## ## force HLT configuration for ecalMultiFitUncalibRecHit ##