diff --git a/CondFormats/DataRecord/interface/EcalMultifitParametersRcd.h b/CondFormats/DataRecord/interface/EcalMultifitParametersRcd.h deleted file mode 100644 index 9d1a843a5cfe9..0000000000000 --- a/CondFormats/DataRecord/interface/EcalMultifitParametersRcd.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CondFormats_DataRecord_EcalMultifitParametersRcd_h -#define CondFormats_DataRecord_EcalMultifitParametersRcd_h - -#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" - -class EcalMultifitParametersRcd : public edm::eventsetup::EventSetupRecordImplementation {}; - -#endif diff --git a/CondFormats/DataRecord/src/EcalMultifitParametersRcd.cc b/CondFormats/DataRecord/src/EcalMultifitParametersRcd.cc deleted file mode 100644 index 2a3ceabc08734..0000000000000 --- a/CondFormats/DataRecord/src/EcalMultifitParametersRcd.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/DataRecord/interface/EcalMultifitParametersRcd.h" -#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" - -EVENTSETUP_RECORD_REG(EcalMultifitParametersRcd); diff --git a/CondFormats/EcalObjects/interface/EcalMultifitParametersHost.h b/CondFormats/EcalObjects/interface/EcalMultifitParametersHost.h deleted file mode 100644 index f2cddfc64dc17..0000000000000 --- a/CondFormats/EcalObjects/interface/EcalMultifitParametersHost.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef CondFormats_EcalObjects_interface_EcalMultifitParametersHost_h -#define CondFormats_EcalObjects_interface_EcalMultifitParametersHost_h - -#include "CondFormats/EcalObjects/interface/EcalMultifitParametersSoA.h" -#include "DataFormats/Portable/interface/PortableHostCollection.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" - -using EcalMultifitParametersHost = PortableHostCollection; - -#endif diff --git a/CondFormats/EcalObjects/interface/EcalMultifitParametersSoA.h b/CondFormats/EcalObjects/interface/EcalMultifitParametersSoA.h deleted file mode 100644 index 04237db356209..0000000000000 --- a/CondFormats/EcalObjects/interface/EcalMultifitParametersSoA.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef CondFormats_EcalObjects_EcalMultifitParametersSoA_h -#define CondFormats_EcalObjects_EcalMultifitParametersSoA_h - -#include -#include "DataFormats/SoATemplate/interface/SoACommon.h" -#include "DataFormats/SoATemplate/interface/SoALayout.h" -#include "DataFormats/SoATemplate/interface/SoAView.h" - -constexpr size_t kNTimeFitParams = 8; -constexpr size_t kNAmplitudeFitParams = 2; -using TimeFitParamsArray = std::array; -using AmplitudeFitParamsArray = std::array; - -GENERATE_SOA_LAYOUT(EcalMultifitParametersSoALayout, - SOA_SCALAR(TimeFitParamsArray, timeFitParamsEB), - SOA_SCALAR(TimeFitParamsArray, timeFitParamsEE), - SOA_SCALAR(AmplitudeFitParamsArray, amplitudeFitParamsEB), - SOA_SCALAR(AmplitudeFitParamsArray, amplitudeFitParamsEE)) - -using EcalMultifitParametersSoA = EcalMultifitParametersSoALayout<>; - -#endif diff --git a/CondFormats/EcalObjects/interface/EcalRecHitParametersHost.h b/CondFormats/EcalObjects/interface/EcalRecHitParametersHost.h deleted file mode 100644 index 290cffe351a5a..0000000000000 --- a/CondFormats/EcalObjects/interface/EcalRecHitParametersHost.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef CondFormats_EcalObjects_interface_EcalRecHitParametersHost_h -#define CondFormats_EcalObjects_interface_EcalRecHitParametersHost_h - -#include "CondFormats/EcalObjects/interface/EcalRecHitParameters.h" -#include "DataFormats/Portable/interface/PortableHostObject.h" - -using EcalRecHitParametersHost = PortableHostObject; - -#endif diff --git a/CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h b/CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h deleted file mode 100644 index 491f33f068714..0000000000000 --- a/CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef CondFormats_EcalObjects_interface_alpaka_EcalMultifitParametersDevice_h -#define CondFormats_EcalObjects_interface_alpaka_EcalMultifitParametersDevice_h - -#include "CondFormats/EcalObjects/interface/EcalMultifitParametersHost.h" -#include "CondFormats/EcalObjects/interface/EcalMultifitParametersSoA.h" -#include "DataFormats/Portable/interface/alpaka/PortableCollection.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - - using ::EcalMultifitParametersHost; - using EcalMultifitParametersDevice = PortableCollection; - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -#endif diff --git a/CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h b/CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h deleted file mode 100644 index f63c8ac34b800..0000000000000 --- a/CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef CondFormats_EcalObjects_interface_alpaka_EcalRecHitParametersDevice_h -#define CondFormats_EcalObjects_interface_alpaka_EcalRecHitParametersDevice_h - -#include "CondFormats/EcalObjects/interface/EcalRecHitParameters.h" -#include "CondFormats/EcalObjects/interface/EcalRecHitParametersHost.h" -#include "DataFormats/Portable/interface/alpaka/PortableObject.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - - using ::EcalRecHitParametersHost; - using EcalRecHitParametersDevice = PortableObject; - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -ASSERT_DEVICE_MATCHES_HOST_COLLECTION(EcalRecHitParametersDevice, EcalRecHitParametersHost); - -#endif diff --git a/CondFormats/EcalObjects/src/ES_EcalMultifitParametersHost.cc b/CondFormats/EcalObjects/src/ES_EcalMultifitParametersHost.cc deleted file mode 100644 index 313b26e2bb22a..0000000000000 --- a/CondFormats/EcalObjects/src/ES_EcalMultifitParametersHost.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/EcalObjects/interface/EcalMultifitParametersHost.h" -#include "FWCore/Utilities/interface/typelookup.h" - -TYPELOOKUP_DATA_REG(EcalMultifitParametersHost); diff --git a/CondFormats/EcalObjects/src/ES_EcalRecHitParametersHost.cc b/CondFormats/EcalObjects/src/ES_EcalRecHitParametersHost.cc deleted file mode 100644 index aa6bfbe86371e..0000000000000 --- a/CondFormats/EcalObjects/src/ES_EcalRecHitParametersHost.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/EcalObjects/interface/EcalRecHitParametersHost.h" -#include "FWCore/Utilities/interface/typelookup.h" - -TYPELOOKUP_DATA_REG(EcalRecHitParametersHost); diff --git a/CondFormats/EcalObjects/src/alpaka/ES_EcalMultifitParametersDevice.cc b/CondFormats/EcalObjects/src/alpaka/ES_EcalMultifitParametersDevice.cc deleted file mode 100644 index 582b78c84df3f..0000000000000 --- a/CondFormats/EcalObjects/src/alpaka/ES_EcalMultifitParametersDevice.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/typelookup.h" - -#include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h" -TYPELOOKUP_ALPAKA_DATA_REG(EcalMultifitParametersDevice); diff --git a/CondFormats/EcalObjects/src/alpaka/ES_EcalRecHitParametersDevice.cc b/CondFormats/EcalObjects/src/alpaka/ES_EcalRecHitParametersDevice.cc deleted file mode 100644 index ab43d28e35dcf..0000000000000 --- a/CondFormats/EcalObjects/src/alpaka/ES_EcalRecHitParametersDevice.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/typelookup.h" - -#include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h" -TYPELOOKUP_ALPAKA_DATA_REG(EcalRecHitParametersDevice); diff --git a/CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsHost.h b/CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsHost.h deleted file mode 100644 index c1ca23ac6d897..0000000000000 --- a/CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsHost.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef CondFormats_HcalObjects_interface_HcalMahiPulseOffsetsPortable_h -#define CondFormats_HcalObjects_interface_HcalMahiPulseOffsetsPortable_h - -#include "CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsSoA.h" -#include "DataFormats/Portable/interface/PortableHostCollection.h" - -namespace hcal { - using HcalMahiPulseOffsetsPortableHost = PortableHostCollection; -} -#endif diff --git a/CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h b/CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h deleted file mode 100644 index 1799141c80c91..0000000000000 --- a/CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef CondFormats_HcalObjects_interface_alpaka_HcalMahiPulseOffsetsPortable_h -#define CondFormats_HcalObjects_interface_alpaka_HcalMahiPulseOffsetsPortable_h - -#include "CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsHost.h" -#include "CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsSoA.h" -#include "DataFormats/Portable/interface/alpaka/PortableCollection.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - - namespace hcal { - using ::hcal::HcalMahiPulseOffsetsPortableHost; - using HcalMahiPulseOffsetsPortableDevice = PortableCollection<::hcal::HcalMahiPulseOffsetsSoA>; - - } // namespace hcal - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -#endif diff --git a/CondFormats/HcalObjects/src/ES_HcalMahiPulseOffsetsHost.cc b/CondFormats/HcalObjects/src/ES_HcalMahiPulseOffsetsHost.cc deleted file mode 100644 index 1611ee29aa7d8..0000000000000 --- a/CondFormats/HcalObjects/src/ES_HcalMahiPulseOffsetsHost.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsHost.h" -#include "FWCore/Utilities/interface/typelookup.h" - -TYPELOOKUP_DATA_REG(hcal::HcalMahiPulseOffsetsPortableHost); diff --git a/CondFormats/HcalObjects/src/alpaka/ES_HcalMahiPulseOffsetsDevice.cc b/CondFormats/HcalObjects/src/alpaka/ES_HcalMahiPulseOffsetsDevice.cc deleted file mode 100644 index 32fa3bb0e3410..0000000000000 --- a/CondFormats/HcalObjects/src/alpaka/ES_HcalMahiPulseOffsetsDevice.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/typelookup.h" - -TYPELOOKUP_ALPAKA_DATA_REG(hcal::HcalMahiPulseOffsetsPortableDevice); diff --git a/HLTrigger/Configuration/python/customizeHLTforCMSSW.py b/HLTrigger/Configuration/python/customizeHLTforCMSSW.py index dd28b63d73517..3f800fab9336c 100644 --- a/HLTrigger/Configuration/python/customizeHLTforCMSSW.py +++ b/HLTrigger/Configuration/python/customizeHLTforCMSSW.py @@ -127,6 +127,47 @@ def customizeHLTfor47079(process): return process + +def customizeHLTfor47047(process): + """Migrates many ESProducers to MoveToDeviceCache""" + import copy + if hasattr(process, "ecalMultifitParametersSource"): + del process.ecalMultifitParametersSource + esProducer = None + for prod in esproducers_by_type(process, "EcalMultifitParametersHostESProducer@alpaka"): + if esProducer is not None: + raise Exception("Assumption of only one EcalMultifitParametersHostESProducer@alpaka in a process broken") + esProducer = prod + if esProducer is not None: + for prod in producers_by_type(process, "EcalUncalibRecHitProducerPortable@alpaka", "alpaka_serial_sync::EcalUncalibRecHitProducerPortable"): + for attr in ["EBtimeFitParameters", "EEtimeFitParameters", "EBamplitudeFitParameters", "EEamplitudeFitParameters"]: + setattr(prod, attr, copy.deepcopy(getattr(esProducer, attr))) + delattr(process, esProducer.label()) + + for prod in producers_by_type(process, "HBHERecHitProducerPortable@alpaka", "alpaka_serial_sync::HBHERecHitProducerPortable"): + pulseOffsetLabel = prod.mahiPulseOffSets.getModuleLabel() + if hasattr(process, pulseOffsetLabel): + esProducer = getattr(process, pulseOffsetLabel) + prod.pulseOffsets = copy.deepcopy(esProducer.pulseOffsets) + del prod.mahiPulseOffSets + for prod in list(esproducers_by_type(process, "HcalMahiPulseOffsetsESProducer@alpaka")): + delattr(process, prod.label()) + + for prod in producers_by_type(process, "PFClusterSoAProducer@alpaka", "alpaka_serial_sync::PFClusterSoAProducer"): + clusterParamsLabel = prod.pfClusterParams.getModuleLabel() + if hasattr(process, clusterParamsLabel): + esProducer = getattr(process, clusterParamsLabel) + for attr in ["seedFinder", "initialClusteringStep", "pfClusterBuilder"]: + setattr(prod, attr, copy.deepcopy(getattr(esProducer, attr).copy())) + del prod.pfClusterParams + for prod in list(esproducers_by_type(process, "PFClusterParamsESProducer@alpaka")): + delattr(process, prod.label()) + + if hasattr(process, "hltESSJobConfigurationGPURecord"): + del process.hltESSJobConfigurationGPURecord + + return process + # CMSSW version specific customizations def customizeHLTforCMSSW(process, menuType="GRun"): @@ -138,6 +179,7 @@ def customizeHLTforCMSSW(process, menuType="GRun"): process = customizeHLTfor46935(process) process = customizeHLTfor47017(process) process = customizeHLTfor47079(process) + process = customizeHLTfor47047(process) return process diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalMultifitParameters.h b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalMultifitParameters.h new file mode 100644 index 0000000000000..859518948db94 --- /dev/null +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalMultifitParameters.h @@ -0,0 +1,18 @@ +#ifndef RecoLocalcalo_EcalRecProducers_plugins_alpaka_EcalMultifitParameters_h +#define RecoLocalcalo_EcalRecProducers_plugins_alpaka_EcalMultifitParameters_h + +#include + +struct EcalMultifitParameters { + static constexpr size_t kNTimeFitParams = 8; + static constexpr size_t kNAmplitudeFitParams = 2; + using TimeFitParamsArray = std::array; + using AmplitudeFitParamsArray = std::array; + + TimeFitParamsArray timeFitParamsEB; + TimeFitParamsArray timeFitParamsEE; + AmplitudeFitParamsArray amplitudeFitParamsEB; + AmplitudeFitParamsArray amplitudeFitParamsEE; +}; + +#endif diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalMultifitParametersHostESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalMultifitParametersHostESProducer.cc deleted file mode 100644 index 809dacdabc43e..0000000000000 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalMultifitParametersHostESProducer.cc +++ /dev/null @@ -1,99 +0,0 @@ -#include - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h" -#include "CondFormats/EcalObjects/interface/EcalMultifitParametersSoA.h" -#include "CondFormats/DataRecord/interface/EcalMultifitParametersRcd.h" - -#include "DataFormats/EcalDigi/interface/EcalConstants.h" - -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/host.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - class EcalMultifitParametersHostESProducer : public ESProducer { - public: - EcalMultifitParametersHostESProducer(edm::ParameterSet const&); - ~EcalMultifitParametersHostESProducer() override = default; - - static void fillDescriptions(edm::ConfigurationDescriptions&); - std::unique_ptr produce(EcalMultifitParametersRcd const&); - - private: - std::vector ebTimeFitParameters_; - std::vector eeTimeFitParameters_; - std::vector ebAmplitudeFitParameters_; - std::vector eeAmplitudeFitParameters_; - }; - - EcalMultifitParametersHostESProducer::EcalMultifitParametersHostESProducer(edm::ParameterSet const& iConfig) - : ESProducer(iConfig) { - setWhatProduced(this); - - auto const ebTimeFitParamsFromPSet = iConfig.getParameter>("EBtimeFitParameters"); - auto const eeTimeFitParamsFromPSet = iConfig.getParameter>("EEtimeFitParameters"); - // Assert that there are as many parameters as the EcalMultiFitParametersSoA expects - assert(ebTimeFitParamsFromPSet.size() == kNTimeFitParams); - assert(eeTimeFitParamsFromPSet.size() == kNTimeFitParams); - ebTimeFitParameters_.assign(ebTimeFitParamsFromPSet.begin(), ebTimeFitParamsFromPSet.end()); - eeTimeFitParameters_.assign(eeTimeFitParamsFromPSet.begin(), eeTimeFitParamsFromPSet.end()); - - auto const ebAmplFitParamsFromPSet = iConfig.getParameter>("EBamplitudeFitParameters"); - auto const eeAmplFitParamsFromPSet = iConfig.getParameter>("EEamplitudeFitParameters"); - // Assert that there are as many parameters as the EcalMultiFitParametersSoA expects - assert(ebAmplFitParamsFromPSet.size() == kNAmplitudeFitParams); - assert(eeAmplFitParamsFromPSet.size() == kNAmplitudeFitParams); - ebAmplitudeFitParameters_.assign(ebAmplFitParamsFromPSet.begin(), ebAmplFitParamsFromPSet.end()); - eeAmplitudeFitParameters_.assign(eeAmplFitParamsFromPSet.begin(), eeAmplFitParamsFromPSet.end()); - } - - void EcalMultifitParametersHostESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - desc.add>("EBtimeFitParameters", - {-2.015452e+00, - 3.130702e+00, - -1.234730e+01, - 4.188921e+01, - -8.283944e+01, - 9.101147e+01, - -5.035761e+01, - 1.105621e+01}); - desc.add>("EEtimeFitParameters", - {-2.390548e+00, - 3.553628e+00, - -1.762341e+01, - 6.767538e+01, - -1.332130e+02, - 1.407432e+02, - -7.541106e+01, - 1.620277e+01}); - desc.add>("EBamplitudeFitParameters", {1.138, 1.652}); - desc.add>("EEamplitudeFitParameters", {1.890, 1.400}); - descriptions.addWithDefaultLabel(desc); - } - - std::unique_ptr EcalMultifitParametersHostESProducer::produce( - EcalMultifitParametersRcd const& iRecord) { - size_t const sizeone = 1; - auto product = std::make_unique(sizeone, cms::alpakatools::host()); - auto view = product->view(); - - std::memcpy(view.timeFitParamsEB().data(), ebTimeFitParameters_.data(), sizeof(float) * kNTimeFitParams); - std::memcpy(view.timeFitParamsEE().data(), eeTimeFitParameters_.data(), sizeof(float) * kNTimeFitParams); - - std::memcpy( - view.amplitudeFitParamsEB().data(), ebAmplitudeFitParameters_.data(), sizeof(float) * kNAmplitudeFitParams); - std::memcpy( - view.amplitudeFitParamsEE().data(), eeAmplitudeFitParameters_.data(), sizeof(float) * kNAmplitudeFitParams); - - return product; - } - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(EcalMultifitParametersHostESProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.dev.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.dev.cc index 574d0755f4987..4b0e645dc08f2 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.dev.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.dev.cc @@ -19,7 +19,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { OutputProduct& ebRecHits, OutputProduct& eeRecHits, EcalRecHitConditionsDevice const& conditionsDev, - EcalRecHitParametersDevice const& parametersDev, + EcalRecHitParameters const* parametersDev, edm::TimeValue_t const& eventTime, ConfigurationParameters const& configParams, bool const isPhase2) { @@ -44,7 +44,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { ebRecHits.view(), eeRecHits.view(), conditionsDev.const_view(), - parametersDev.const_data(), + parametersDev, eventTime, configParams); } else { @@ -54,7 +54,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { ebUncalibRecHits->const_view(), ebRecHits.view(), conditionsDev.const_view(), - parametersDev.const_data(), + parametersDev, eventTime, configParams); } diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.h b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.h index 42c2ae51c6e0e..c792948820b3f 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitBuilder.h @@ -5,8 +5,8 @@ // Builder of ECAL RecHits on GPU // +#include "CondFormats/EcalObjects/interface/EcalRecHitParameters.h" #include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitConditionsDevice.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalRecHitDeviceCollection.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalUncalibratedRecHitDeviceCollection.h" #include "DataFormats/Provenance/interface/Timestamp.h" @@ -26,7 +26,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { OutputProduct& ebRecHits, OutputProduct& eeRecHits, EcalRecHitConditionsDevice const& conditionsDev, - EcalRecHitParametersDevice const& parametersDev, + EcalRecHitParameters const* parametersDev, edm::TimeValue_t const& eventTime, ConfigurationParameters const& configParams, bool const isPhase2); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitParametersESProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitParametersESProducer.cc deleted file mode 100644 index a87a1675f2038..0000000000000 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitParametersESProducer.cc +++ /dev/null @@ -1,98 +0,0 @@ -#include "CommonTools/Utils/interface/StringToEnumValue.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "CondFormats/EcalObjects/interface/EcalChannelStatusCode.h" -#include "CondFormats/EcalObjects/interface/EcalRecHitParameters.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h" - -#include "DataFormats/EcalRecHit/interface/EcalRecHit.h" - -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/host.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" -#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - class EcalRecHitParametersESProducer : public ESProducer { - public: - EcalRecHitParametersESProducer(edm::ParameterSet const&); - ~EcalRecHitParametersESProducer() override = default; - - static void fillDescriptions(edm::ConfigurationDescriptions&); - std::unique_ptr produce(JobConfigurationGPURecord const&); - - private: - std::bitset channelStatusCodesToBeExcluded_; - RecoFlagBitsArray recoFlagBitsArray_; - }; - - EcalRecHitParametersESProducer::EcalRecHitParametersESProducer(edm::ParameterSet const& iConfig) - : ESProducer(iConfig), recoFlagBitsArray_() { - setWhatProduced(this); - - // Translate string representation of ChannelStatusToBeExcluded to enum values and pack into bitset - auto const& channelStatusToBeExcluded = StringToEnumValue( - iConfig.getParameter>("ChannelStatusToBeExcluded")); - for (auto const& st : channelStatusToBeExcluded) { - channelStatusCodesToBeExcluded_.set(st); - } - - // Generate map of channel status codes and corresponding recoFlag bits - auto const& fmdbRecoPset = iConfig.getParameter("flagsMapDBReco"); - auto const& recoFlagStrings = fmdbRecoPset.getParameterNames(); - for (auto const& recoFlagString : recoFlagStrings) { - auto const recoFlag = static_cast(StringToEnumValue(recoFlagString)); - auto const& channelStatusCodeStrings = fmdbRecoPset.getParameter>(recoFlagString); - for (auto const& channelStatusCodeString : channelStatusCodeStrings) { - auto const chStatCode = StringToEnumValue(channelStatusCodeString); - // set recoFlagBits for this channel status code - recoFlagBitsArray_.at(chStatCode) = static_cast(recoFlag); - } - } - } - - void EcalRecHitParametersESProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - // channel statuses to be exluded from reconstruction - desc.add>("ChannelStatusToBeExcluded", - {"kDAC", - "kNoisy", - "kNNoisy", - "kFixedG6", - "kFixedG1", - "kFixedG0", - "kNonRespondingIsolated", - "kDeadVFE", - "kDeadFE", - "kNoDataNoTP"}); - - // reco flags association to channel status flags - edm::ParameterSetDescription psd0; - psd0.add>("kGood", {"kOk", "kDAC", "kNoLaser", "kNoisy"}); - psd0.add>("kNeighboursRecovered", {"kFixedG0", "kNonRespondingIsolated", "kDeadVFE"}); - psd0.add>("kDead", {"kNoDataNoTP"}); - psd0.add>("kNoisy", {"kNNoisy", "kFixedG6", "kFixedG1"}); - psd0.add>("kTowerRecovered", {"kDeadFE"}); - desc.add("flagsMapDBReco", psd0); - - descriptions.addWithDefaultLabel(desc); - } - - std::unique_ptr EcalRecHitParametersESProducer::produce( - JobConfigurationGPURecord const& iRecord) { - auto product = std::make_unique(cms::alpakatools::host()); - auto value = product->value(); - - std::memcpy(value.recoFlagBits.data(), recoFlagBitsArray_.data(), sizeof(uint32_t) * recoFlagBitsArray_.size()); - - value.channelStatusCodesToBeExcluded = channelStatusCodesToBeExcluded_; - - return product; - } - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(EcalRecHitParametersESProducer); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitProducerPortable.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitProducerPortable.cc index cc212188a16f0..56a76b9dd811b 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitProducerPortable.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalRecHitProducerPortable.cc @@ -1,34 +1,44 @@ +#include "CommonTools/Utils/interface/StringToEnumValue.h" #include "CondFormats/DataRecord/interface/EcalRecHitConditionsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalChannelStatusCode.h" +#include "CondFormats/EcalObjects/interface/EcalRecHitParameters.h" #include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitConditionsDevice.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h" #include "DataFormats/EcalRecHit/interface/EcalRecHit.h" #include "DataFormats/EcalRecHit/interface/RecoTypes.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalUncalibratedRecHitDeviceCollection.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalRecHitDeviceCollection.h" +#include "DataFormats/Portable/interface/PortableObject.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/EmptyGroupDescription.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "HeterogeneousCore/AlpakaCore/interface/MoveToDeviceCache.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDGetToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/EDProducer.h" -#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" #include "DeclsForKernels.h" #include "EcalRecHitBuilder.h" namespace ALPAKA_ACCELERATOR_NAMESPACE { + namespace { + using EcalRecHitParametersCache = + cms::alpakatools::MoveToDeviceCache>; + } - class EcalRecHitProducerPortable : public stream::EDProducer<> { + class EcalRecHitProducerPortable : public stream::EDProducer> { public: - explicit EcalRecHitProducerPortable(edm::ParameterSet const& ps); + explicit EcalRecHitProducerPortable(edm::ParameterSet const& ps, EcalRecHitParametersCache const*); ~EcalRecHitProducerPortable() override = default; static void fillDescriptions(edm::ConfigurationDescriptions&); + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& ps); void produce(device::Event&, device::EventSetup const&) override; + static void globalEndJob(EcalRecHitParametersCache*) {} + private: bool const isPhase2_; // input @@ -45,7 +55,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // conditions tokens const device::ESGetToken recHitConditionsToken_; - const device::ESGetToken recHitParametersToken_; }; void EcalRecHitProducerPortable::fillDescriptions(edm::ConfigurationDescriptions& confDesc) { @@ -75,17 +84,65 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { edm::ParameterDescription("EELaserMAX", 8.0, true)) or true >> edm::EmptyGroupDescription()); + // channel statuses to be exluded from reconstruction + desc.add>("ChannelStatusToBeExcluded", + {"kDAC", + "kNoisy", + "kNNoisy", + "kFixedG6", + "kFixedG1", + "kFixedG0", + "kNonRespondingIsolated", + "kDeadVFE", + "kDeadFE", + "kNoDataNoTP"}); + + // reco flags association to channel status flags + edm::ParameterSetDescription psd0; + psd0.add>("kGood", {"kOk", "kDAC", "kNoLaser", "kNoisy"}); + psd0.add>("kNeighboursRecovered", {"kFixedG0", "kNonRespondingIsolated", "kDeadVFE"}); + psd0.add>("kDead", {"kNoDataNoTP"}); + psd0.add>("kNoisy", {"kNNoisy", "kFixedG6", "kFixedG1"}); + psd0.add>("kTowerRecovered", {"kDeadFE"}); + desc.add("flagsMapDBReco", psd0); + confDesc.addWithDefaultLabel(desc); } - EcalRecHitProducerPortable::EcalRecHitProducerPortable(const edm::ParameterSet& ps) + std::unique_ptr EcalRecHitProducerPortable::initializeGlobalCache( + edm::ParameterSet const& ps) { + PortableHostObject params(cms::alpakatools::host()); + + // Translate string representation of ChannelStatusToBeExcluded to enum values and pack into bitset + auto const& channelStatusToBeExcluded = StringToEnumValue( + ps.getParameter>("ChannelStatusToBeExcluded")); + for (auto const& st : channelStatusToBeExcluded) { + params->channelStatusCodesToBeExcluded.set(st); + } + + // Generate map of channel status codes and corresponding recoFlag bits + auto const& fmdbRecoPset = ps.getParameter("flagsMapDBReco"); + auto const& recoFlagStrings = fmdbRecoPset.getParameterNames(); + for (auto const& recoFlagString : recoFlagStrings) { + auto const recoFlag = static_cast(StringToEnumValue(recoFlagString)); + auto const& channelStatusCodeStrings = fmdbRecoPset.getParameter>(recoFlagString); + for (auto const& channelStatusCodeString : channelStatusCodeStrings) { + auto const chStatCode = StringToEnumValue(channelStatusCodeString); + // set recoFlagBits for this channel status code + params->recoFlagBits.at(chStatCode) = static_cast(recoFlag); + } + } + + return std::make_unique(std::move(params)); + } + + EcalRecHitProducerPortable::EcalRecHitProducerPortable(const edm::ParameterSet& ps, EcalRecHitParametersCache const*) : isPhase2_{ps.getParameter("isPhase2")}, uncalibRecHitsTokenEB_{consumes(ps.getParameter("uncalibrecHitsInLabelEB"))}, uncalibRecHitsTokenEE_{isPhase2_ ? device::EDGetToken{} : consumes(ps.getParameter("uncalibrecHitsInLabelEE"))}, recHitsTokenEB_{produces(ps.getParameter("recHitsLabelEB"))}, - recHitConditionsToken_{esConsumes()}, - recHitParametersToken_{esConsumes()} { + recHitConditionsToken_{esConsumes()} { if (!isPhase2_) { recHitsTokenEE_ = produces(ps.getParameter("recHitsLabelEE")); } @@ -147,7 +204,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // conditions auto const& recHitConditionsDev = setup.getData(recHitConditionsToken_); - auto const& recHitParametersDev = setup.getData(recHitParametersToken_); + auto const* recHitParametersDev = globalCache()->get(queue).const_data(); // // schedule algorithms diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.dev.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.dev.cc index 3d0b5576c90f7..68e515c0b0c9b 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.dev.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.dev.cc @@ -22,7 +22,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { OutputProduct& uncalibRecHitsDevEB, OutputProduct& uncalibRecHitsDevEE, EcalMultifitConditionsDevice const& conditionsDev, - EcalMultifitParametersDevice const& paramsDev, + EcalMultifitParameters const* paramsDev, ConfigurationParameters const& configParams) { using digis_type = std::vector; using dids_type = std::vector; @@ -172,7 +172,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { scratch.accTimeMaxDevBuf.value().data(), scratch.accTimeWgtDevBuf.value().data(), scratch.tcStateDevBuf.value().data(), - paramsDev.const_view(), + paramsDev, configParams.timeFitLimitsFirstEB, configParams.timeFitLimitsFirstEE, configParams.timeFitLimitsSecondEB, @@ -201,7 +201,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { scratch.ampMaxErrorDevBuf.value().data(), scratch.timeMaxDevBuf.value().data(), scratch.timeErrorDevBuf.value().data(), - paramsDev.const_view()); + paramsDev); auto const threads_timecorr = 32; auto const blocks_timecorr = cms::alpakatools::divide_up_by(totalChannels, threads_timecorr); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.h b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.h index b12352c3733dd..0fe3e5464eed1 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitMultiFitAlgoPortable.h @@ -4,11 +4,12 @@ #include #include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitConditionsDevice.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h" #include "DataFormats/EcalDigi/interface/alpaka/EcalDigiDeviceCollection.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalUncalibratedRecHitDeviceCollection.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" + #include "DeclsForKernels.h" +#include "EcalMultifitParameters.h" namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { @@ -21,7 +22,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { OutputProduct& uncalibRecHitsDevEB, OutputProduct& uncalibRecHitsDevEE, EcalMultifitConditionsDevice const& conditionsDev, - EcalMultifitParametersDevice const& paramsDev, + EcalMultifitParameters const* paramsDev, ConfigurationParameters const& configParams); } // namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitProducerPortable.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitProducerPortable.cc index b12064e6a5c99..b90f82489de6e 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitProducerPortable.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EcalUncalibRecHitProducerPortable.cc @@ -1,12 +1,12 @@ #include "CondFormats/DataRecord/interface/EcalMultifitConditionsRcd.h" -#include "CondFormats/DataRecord/interface/EcalMultifitParametersRcd.h" #include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitConditionsDevice.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h" #include "DataFormats/EcalDigi/interface/alpaka/EcalDigiDeviceCollection.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalUncalibratedRecHitDeviceCollection.h" +#include "DataFormats/Portable/interface/PortableObject.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "HeterogeneousCore/AlpakaCore/interface/MoveToDeviceCache.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDGetToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h" @@ -14,19 +14,30 @@ #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/SynchronizingEDProducer.h" #include "DeclsForKernels.h" +#include "EcalMultifitParameters.h" #include "EcalUncalibRecHitMultiFitAlgoPortable.h" +#include + namespace ALPAKA_ACCELERATOR_NAMESPACE { + namespace { + using EcalMultifitParametersCache = + cms::alpakatools::MoveToDeviceCache>; + } - class EcalUncalibRecHitProducerPortable : public stream::SynchronizingEDProducer<> { + class EcalUncalibRecHitProducerPortable + : public stream::SynchronizingEDProducer> { public: - explicit EcalUncalibRecHitProducerPortable(edm::ParameterSet const& ps); + explicit EcalUncalibRecHitProducerPortable(edm::ParameterSet const& ps, EcalMultifitParametersCache const*); ~EcalUncalibRecHitProducerPortable() override = default; static void fillDescriptions(edm::ConfigurationDescriptions&); + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& ps); void acquire(device::Event const&, device::EventSetup const&) override; void produce(device::Event&, device::EventSetup const&) override; + static void globalEndJob(EcalMultifitParametersCache*) {} + private: using InputProduct = EcalDigiDeviceCollection; const device::EDGetToken digisTokenEB_; @@ -37,7 +48,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // conditions tokens const device::ESGetToken multifitConditionsToken_; - const device::ESGetToken multifitParametersToken_; // configuration parameters ecal::multifit::ConfigurationParameters configParameters_; @@ -73,18 +83,66 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { desc.add("outOfTimeThresholdGain61mEE", 1000); desc.add("amplitudeThresholdEB", 10); desc.add("amplitudeThresholdEE", 10); + + desc.add>("EBtimeFitParameters", + {-2.015452e+00, + 3.130702e+00, + -1.234730e+01, + 4.188921e+01, + -8.283944e+01, + 9.101147e+01, + -5.035761e+01, + 1.105621e+01}); + desc.add>("EEtimeFitParameters", + {-2.390548e+00, + 3.553628e+00, + -1.762341e+01, + 6.767538e+01, + -1.332130e+02, + 1.407432e+02, + -7.541106e+01, + 1.620277e+01}); + desc.add>("EBamplitudeFitParameters", {1.138, 1.652}); + desc.add>("EEamplitudeFitParameters", {1.890, 1.400}); + desc.addUntracked>("kernelMinimizeThreads", {32, 1, 1}); desc.add("shouldRunTimingComputation", true); + confDesc.addWithDefaultLabel(desc); } - EcalUncalibRecHitProducerPortable::EcalUncalibRecHitProducerPortable(const edm::ParameterSet& ps) + std::unique_ptr EcalUncalibRecHitProducerPortable::initializeGlobalCache( + edm::ParameterSet const& ps) { + PortableHostObject params(cms::alpakatools::host()); + + auto const ebTimeFitParamsFromPSet = ps.getParameter>("EBtimeFitParameters"); + auto const eeTimeFitParamsFromPSet = ps.getParameter>("EEtimeFitParameters"); + // Assert that there are as many parameters as the EcalMultiFitParametersSoA expects + assert(ebTimeFitParamsFromPSet.size() == EcalMultifitParameters::kNTimeFitParams); + assert(eeTimeFitParamsFromPSet.size() == EcalMultifitParameters::kNTimeFitParams); + std::ranges::copy(ebTimeFitParamsFromPSet, params->timeFitParamsEB.begin()); + std::ranges::copy(eeTimeFitParamsFromPSet, params->timeFitParamsEE.begin()); + + std::vector ebAmplitudeFitParameters_; + std::vector eeAmplitudeFitParameters_; + auto const ebAmplFitParamsFromPSet = ps.getParameter>("EBamplitudeFitParameters"); + auto const eeAmplFitParamsFromPSet = ps.getParameter>("EEamplitudeFitParameters"); + // Assert that there are as many parameters as the EcalMultiFitParametersSoA expects + assert(ebAmplFitParamsFromPSet.size() == EcalMultifitParameters::kNAmplitudeFitParams); + assert(eeAmplFitParamsFromPSet.size() == EcalMultifitParameters::kNAmplitudeFitParams); + std::ranges::copy(ebAmplFitParamsFromPSet, params->amplitudeFitParamsEB.begin()); + std::ranges::copy(eeAmplFitParamsFromPSet, params->amplitudeFitParamsEE.begin()); + + return std::make_unique(std::move(params)); + } + + EcalUncalibRecHitProducerPortable::EcalUncalibRecHitProducerPortable(const edm::ParameterSet& ps, + EcalMultifitParametersCache const*) : digisTokenEB_{consumes(ps.getParameter("digisLabelEB"))}, digisTokenEE_{consumes(ps.getParameter("digisLabelEE"))}, uncalibRecHitsTokenEB_{produces(ps.getParameter("recHitsLabelEB"))}, uncalibRecHitsTokenEE_{produces(ps.getParameter("recHitsLabelEE"))}, multifitConditionsToken_{esConsumes()}, - multifitParametersToken_{esConsumes()}, ebDigisSizeHostBuf_{cms::alpakatools::make_host_buffer()}, eeDigisSizeHostBuf_{cms::alpakatools::make_host_buffer()} { std::pair EBtimeFitLimits, EEtimeFitLimits; @@ -196,7 +254,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { if (ebDigisSize + eeDigisSize > 0) { // conditions auto const& multifitConditionsDev = setup.getData(multifitConditionsToken_); - auto const& multifitParametersDev = setup.getData(multifitParametersToken_); + auto const* multifitParametersDev = globalCache()->get(queue).const_data(); // // schedule algorithms diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.dev.cc b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.dev.cc index aa6c6ecdef1df..437119a32b3c3 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.dev.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.dev.cc @@ -22,7 +22,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { uint32_t* flagBits, uint32_t* extra, EcalRecHitConditionsDevice::ConstView conditionsDev, - EcalRecHitParametersDevice::Product const* parametersDev, + EcalRecHitParameters const* parametersDev, // time, used for time dependent corrections edm::TimeValue_t const& eventTime, // configuration diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.h index 1f9f73cc8236b..8cdc13960e70a 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/EnergyComputationKernels.h @@ -3,8 +3,8 @@ #include +#include "CondFormats/EcalObjects/interface/EcalRecHitParameters.h" #include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitConditionsDevice.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalRecHitParametersDevice.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalRecHitDeviceCollection.h" #include "DataFormats/EcalRecHit/interface/alpaka/EcalUncalibratedRecHitDeviceCollection.h" #include "DataFormats/EcalRecHit/interface/EcalRecHit.h" @@ -42,7 +42,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { uint32_t* flagBits, uint32_t* extra, EcalRecHitConditionsDevice::ConstView conditionsDev, - EcalRecHitParametersDevice::Product const* parametersDev, + EcalRecHitParameters const* parametersDev, // time, used for time dependent corrections edm::TimeValue_t const& eventTime, // configuration @@ -61,7 +61,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { EcalUncalibratedRecHitDeviceCollection::ConstView uncalibRecHits, EcalRecHitDeviceCollection::View recHits, EcalRecHitConditionsDevice::ConstView conditionsDev, - EcalRecHitParametersDevice::Product const* parametersDev, + EcalRecHitParameters const* parametersDev, // time, used for time dependent corrections edm::TimeValue_t const& eventTime, ConfigurationParameters const& configParams) const { @@ -110,7 +110,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::rechit { EcalRecHitDeviceCollection::View ebRecHits, EcalRecHitDeviceCollection::View eeRecHits, EcalRecHitConditionsDevice::ConstView conditionsDev, - EcalRecHitParametersDevice::Product const* parametersDev, + EcalRecHitParameters const* parametersDev, // time, used for time dependent corrections edm::TimeValue_t const& eventTime, ConfigurationParameters const& configParams) const { diff --git a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/TimeComputationKernels.h b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/TimeComputationKernels.h index 942a1500ead9a..50b8f0174cd2f 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/alpaka/TimeComputationKernels.h +++ b/RecoLocalCalo/EcalRecProducers/plugins/alpaka/TimeComputationKernels.h @@ -6,7 +6,6 @@ #include #include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitConditionsDevice.h" -#include "CondFormats/EcalObjects/interface/alpaka/EcalMultifitParametersDevice.h" #include "DataFormats/EcalDigi/interface/EcalDataFrame.h" #include "DataFormats/EcalDigi/interface/EcalMGPASample.h" #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h" @@ -17,6 +16,7 @@ #include "DeclsForKernels.h" #include "KernelHelpers.h" +#include "EcalMultifitParameters.h" //#define ECAL_RECO_ALPAKA_DEBUG @@ -135,7 +135,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { ScalarType* g_accTimeMax, ScalarType* g_accTimeWgt, TimeComputationState* g_state, - EcalMultifitParametersDevice::ConstView paramsDev, + EcalMultifitParameters const* paramsDev, ConfigurationParameters::type const timeFitLimits_firstEB, ConfigurationParameters::type const timeFitLimits_firstEE, ConfigurationParameters::type const timeFitLimits_secondEB, @@ -175,11 +175,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { auto const did = DetId{dids[inputCh]}; auto const isBarrel = did.subdetId() == EcalBarrel; auto* const amplitudeFitParameters = - isBarrel ? paramsDev.amplitudeFitParamsEB().data() : paramsDev.amplitudeFitParamsEE().data(); + isBarrel ? paramsDev->amplitudeFitParamsEB.data() : paramsDev->amplitudeFitParamsEE.data(); auto* const timeFitParameters = - isBarrel ? paramsDev.timeFitParamsEB().data() : paramsDev.timeFitParamsEE().data(); + isBarrel ? paramsDev->timeFitParamsEB.data() : paramsDev->timeFitParamsEE.data(); auto const timeFitParameters_size = - isBarrel ? paramsDev.timeFitParamsEB().size() : paramsDev.timeFitParamsEE().size(); + isBarrel ? paramsDev->timeFitParamsEB.size() : paramsDev->timeFitParamsEE.size(); auto const timeFitLimits_first = isBarrel ? timeFitLimits_firstEB : timeFitLimits_firstEE; auto const timeFitLimits_second = isBarrel ? timeFitLimits_secondEB : timeFitLimits_secondEE; @@ -542,7 +542,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { ScalarType* g_ampMaxError, ScalarType* g_timeMax, ScalarType* g_timeError, - EcalMultifitParametersDevice::ConstView paramsDev) const { + EcalMultifitParameters const* paramsDev) const { /// launch ctx parameters are /// 10 threads per channel, N channels per block, Y blocks /// TODO: do we need to keep the state around or can be removed?! @@ -573,8 +573,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::ecal::multifit { auto state = g_state[ch]; auto const did = DetId{dids[inputCh]}; - auto* const amplitudeFitParameters = did.subdetId() == EcalBarrel ? paramsDev.amplitudeFitParamsEB().data() - : paramsDev.amplitudeFitParamsEE().data(); + auto* const amplitudeFitParameters = did.subdetId() == EcalBarrel ? paramsDev->amplitudeFitParamsEB.data() + : paramsDev->amplitudeFitParamsEE.data(); // TODO is that better than storing into global and launching another kernel // for the first 10 threads diff --git a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py index 051dd04a6be02..be974b00996f0 100644 --- a/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py +++ b/RecoLocalCalo/EcalRecProducers/python/ecalMultiFitUncalibRecHit_cff.py @@ -73,13 +73,6 @@ # ECAL conditions used by the multifit running on the accelerator from RecoLocalCalo.EcalRecProducers.ecalMultifitConditionsHostESProducer_cfi import ecalMultifitConditionsHostESProducer -from RecoLocalCalo.EcalRecProducers.ecalMultifitParametersHostESProducer_cfi import ecalMultifitParametersHostESProducer - -ecalMultifitParametersSource = cms.ESSource("EmptyESSource", - recordName = cms.string('EcalMultifitParametersRcd'), - iovIsRunNotTime = cms.bool(True), - firstValid = cms.vuint32(1) -) # ECAL multifit running on the accelerator from RecoLocalCalo.EcalRecProducers.ecalUncalibRecHitProducerPortable_cfi import ecalUncalibRecHitProducerPortable as _ecalUncalibRecHitProducerPortable @@ -97,7 +90,6 @@ alpaka.toReplaceWith(ecalMultiFitUncalibRecHitTask, cms.Task( # ECAL conditions used by the multifit running on the accelerator ecalMultifitConditionsHostESProducer, - ecalMultifitParametersHostESProducer, # ECAL multifit running on device ecalMultiFitUncalibRecHitPortable, # ECAL multifit running on CPU, or convert the uncalibrated rechits from SoA to legacy format diff --git a/RecoLocalCalo/EcalRecProducers/python/ecalRecHit_cff.py b/RecoLocalCalo/EcalRecProducers/python/ecalRecHit_cff.py index 432a8b550e547..aaedce22ffdac 100644 --- a/RecoLocalCalo/EcalRecProducers/python/ecalRecHit_cff.py +++ b/RecoLocalCalo/EcalRecProducers/python/ecalRecHit_cff.py @@ -23,7 +23,6 @@ from RecoLocalCalo.EcalRecProducers.ecalLaserAPDPNRatiosRefGPUESProducer_cfi import ecalLaserAPDPNRatiosRefGPUESProducer from RecoLocalCalo.EcalRecProducers.ecalLaserAlphasGPUESProducer_cfi import ecalLaserAlphasGPUESProducer from RecoLocalCalo.EcalRecProducers.ecalLinearCorrectionsGPUESProducer_cfi import ecalLinearCorrectionsGPUESProducer -from RecoLocalCalo.EcalRecProducers.ecalRecHitParametersGPUESProducer_cfi import ecalRecHitParametersGPUESProducer # ECAL rechits running on GPU from RecoLocalCalo.EcalRecProducers.ecalRecHitGPU_cfi import ecalRecHitGPU as _ecalRecHitGPU @@ -60,7 +59,6 @@ ecalLaserAPDPNRatiosRefGPUESProducer, ecalLaserAlphasGPUESProducer, ecalLinearCorrectionsGPUESProducer, - ecalRecHitParametersGPUESProducer, # ECAL rechits running on GPU ecalRecHitGPU, # copy the rechits from GPU to CPU @@ -74,13 +72,6 @@ # ECAL conditions used by the rechit producer running on the accelerator from RecoLocalCalo.EcalRecProducers.ecalRecHitConditionsESProducer_cfi import ecalRecHitConditionsESProducer -from RecoLocalCalo.EcalRecProducers.ecalRecHitParametersESProducer_cfi import ecalRecHitParametersESProducer - -ecalRecHitParametersSource = cms.ESSource("EmptyESSource", - recordName = cms.string('JobConfigurationGPURecord'), - iovIsRunNotTime = cms.bool(True), - firstValid = cms.vuint32(1) -) # ECAL rechit producer running on the accelerator from RecoLocalCalo.EcalRecProducers.ecalRecHitProducerPortable_cfi import ecalRecHitProducerPortable as _ecalRecHitProducerPortable @@ -100,7 +91,6 @@ alpaka.toReplaceWith(ecalCalibratedRecHitTask, cms.Task( # ECAL conditions and parameters used by the rechit producer running on the accelerator ecalRecHitConditionsESProducer, - ecalRecHitParametersESProducer, # ECAL rechit producer running on device ecalRecHitPortable, # ECAL rechit producer running on CPU, or convert the rechits from SoA to legacy format diff --git a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HBHERecHitProducerPortable.cc b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HBHERecHitProducerPortable.cc index 6575b6d95964d..a9faa617df250 100644 --- a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HBHERecHitProducerPortable.cc +++ b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HBHERecHitProducerPortable.cc @@ -1,18 +1,20 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h" + #include "CondFormats/DataRecord/interface/HcalSiPMCharacteristicsRcd.h" #include "CondFormats/HcalObjects/interface/alpaka/HcalSiPMCharacteristicsDevice.h" #include "CondFormats/DataRecord/interface/HcalMahiConditionsRcd.h" #include "CondFormats/HcalObjects/interface/alpaka/HcalMahiConditionsDevice.h" #include "CondFormats/DataRecord/interface/HcalRecoParamsRcd.h" #include "CondFormats/HcalObjects/interface/alpaka/HcalRecoParamWithPulseShapeDevice.h" -#include "CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h" #include "DataFormats/HcalDigi/interface/alpaka/HcalDigiDeviceCollection.h" #include "DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" +#include "HeterogeneousCore/AlpakaCore/interface/MoveToDeviceCache.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDGetToken.h" @@ -20,16 +22,23 @@ #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/EDProducer.h" #include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" +#include "HcalMahiPulseOffsetsSoA.h" #include "Mahi.h" -#include "CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h" namespace ALPAKA_ACCELERATOR_NAMESPACE { + namespace { + using HcalMahiPulseOffsetsCache = + cms::alpakatools::MoveToDeviceCache>; + } - class HBHERecHitProducerPortable : public stream::EDProducer<> { + class HBHERecHitProducerPortable : public stream::EDProducer> { public: - explicit HBHERecHitProducerPortable(edm::ParameterSet const&); + explicit HBHERecHitProducerPortable(edm::ParameterSet const&, HcalMahiPulseOffsetsCache const*); ~HBHERecHitProducerPortable() override = default; static void fillDescriptions(edm::ConfigurationDescriptions&); + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& ps); + + static void globalEndJob(HcalMahiPulseOffsetsCache*) {} private: void produce(device::Event&, device::EventSetup const&) override; @@ -50,21 +59,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { const device::ESGetToken sipmCharacteristicsToken_; const device::ESGetToken recoParamsToken_; - const device::ESGetToken mahiPulseOffsetsToken_; // hcal::reconstruction::ConfigParameters configParameters_; }; - HBHERecHitProducerPortable::HBHERecHitProducerPortable(edm::ParameterSet const& ps) + HBHERecHitProducerPortable::HBHERecHitProducerPortable(edm::ParameterSet const& ps, HcalMahiPulseOffsetsCache const*) : digisTokenF01HE_{consumes(ps.getParameter("digisLabelF01HE"))}, digisTokenF5HB_{consumes(ps.getParameter("digisLabelF5HB"))}, digisTokenF3HB_{consumes(ps.getParameter("digisLabelF3HB"))}, rechitsM0Token_{produces()}, mahiConditionsToken_{esConsumes()}, sipmCharacteristicsToken_{esConsumes()}, - recoParamsToken_{esConsumes()}, - mahiPulseOffsetsToken_{esConsumes(ps.getParameter("mahiPulseOffSets"))} { + recoParamsToken_{esConsumes()} { configParameters_.maxTimeSamples = ps.getParameter("maxTimeSamples"); configParameters_.kprep1dChannelsPerBlock = ps.getParameter("kprep1dChannelsPerBlock"); configParameters_.sipmQTSShift = ps.getParameter("sipmQTSShift"); @@ -95,7 +102,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void HBHERecHitProducerPortable::fillDescriptions(edm::ConfigurationDescriptions& cdesc) { edm::ParameterSetDescription desc; - desc.add("mahiPulseOffSets", edm::ESInputTag("")); desc.add("maxTimeSamples", 10); desc.add("kprep1dChannelsPerBlock", 32); desc.add("digisLabelF01HE", edm::InputTag{"hcalRawToDigiGPU", "f01HEDigisGPU"}); @@ -118,9 +124,25 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { desc.add>("tmaxTimeSlewParameters", {16.00, 10.00, 6.25}); desc.add>("kernelMinimizeThreads", {16, 1, 1}); + desc.add>("pulseOffsets", {-3, -2, -1, 0, 1, 2, 3, 4}); + cdesc.addWithDefaultLabel(desc); } + std::unique_ptr HBHERecHitProducerPortable::initializeGlobalCache( + edm::ParameterSet const& ps) { + std::vector offsets = ps.getParameter>("pulseOffsets"); + + PortableHostCollection obj(offsets.size(), cms::alpakatools::host()); + auto view = obj.view(); + + for (uint32_t i = 0; i < offsets.size(); i++) { + view[i] = offsets[i]; + } + + return std::make_unique(std::move(obj)); + } + void HBHERecHitProducerPortable::produce(device::Event& event, device::EventSetup const& setup) { auto& queue = event.queue(); @@ -141,7 +163,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { auto const& mahiConditionsDev = setup.getData(mahiConditionsToken_); auto const& sipmCharacteristicsDev = setup.getData(sipmCharacteristicsToken_); auto const& recoParamsWithPulseShapeDev = setup.getData(recoParamsToken_); - auto const& mahiPulseOffsetsDev = setup.getData(mahiPulseOffsetsToken_); + auto const& mahiPulseOffsetsDev = globalCache()->get(queue); // // schedule algorithms diff --git a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HcalMahiPulseOffsetsESProducer.cc b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HcalMahiPulseOffsetsESProducer.cc deleted file mode 100644 index 483cff8d6ec3b..0000000000000 --- a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HcalMahiPulseOffsetsESProducer.cc +++ /dev/null @@ -1,44 +0,0 @@ -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h" -#include "CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsSoA.h" -#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" - -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/host.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - class HcalMahiPulseOffsetsESProducer : public ESProducer { - public: - HcalMahiPulseOffsetsESProducer(edm::ParameterSet const& iConfig) : ESProducer(iConfig) { - std::vector offsets = iConfig.getParameter>("pulseOffsets"); - - product = std::make_unique(offsets.size(), cms::alpakatools::host()); - - auto view = product->view(); - - for (uint32_t i = 0; i < offsets.size(); i++) { - view[i] = offsets[i]; - } - setWhatProduced(this); - } - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription desc; - desc.add>("pulseOffsets", {-3, -2, -1, 0, 1, 2, 3, 4}); - descriptions.addWithDefaultLabel(desc); - } - - std::shared_ptr produce(JobConfigurationGPURecord const& iRecord) { - return product; - } - - private: - std::shared_ptr product; - }; -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(HcalMahiPulseOffsetsESProducer); diff --git a/CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsSoA.h b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HcalMahiPulseOffsetsSoA.h similarity index 69% rename from CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsSoA.h rename to RecoLocalCalo/HcalRecProducers/plugins/alpaka/HcalMahiPulseOffsetsSoA.h index 33fecb3d1e27a..97d74adbdf648 100644 --- a/CondFormats/HcalObjects/interface/HcalMahiPulseOffsetsSoA.h +++ b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/HcalMahiPulseOffsetsSoA.h @@ -1,5 +1,5 @@ -#ifndef CondFormats_HcalObjects_HcalMahiPulseOffsetsSoA_h -#define CondFormats_HcalObjects_HcalMahiPulseOffsetsSoA_h +#ifndef RecoLocalCalo_HcalRecProducers_plugins_alpaka_HcalMahiPulseOffsetsSoA_h +#define RecoLocalCalo_HcalRecProducers_plugins_alpaka_HcalMahiPulseOffsetsSoA_h #include "DataFormats/SoATemplate/interface/SoACommon.h" #include "DataFormats/SoATemplate/interface/SoALayout.h" diff --git a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.dev.cc b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.dev.cc index 5f4b721d31ae1..b2551a4ce51e2 100644 --- a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.dev.cc +++ b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.dev.cc @@ -753,7 +753,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { float* pulseMatrices, float* pulseMatricesM, float* pulseMatricesP, - HcalMahiPulseOffsetsPortableDevice::ConstView pulseOffsets, + HcalMahiPulseOffsetsSoA::ConstView pulseOffsets, float const* amplitudes, IProductTypef01::ConstView f01HEDigis, IProductTypef5::ConstView f5HBDigis, @@ -975,7 +975,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { float* pulseMatrices, float* pulseMatricesM, float* pulseMatricesP, - HcalMahiPulseOffsetsPortableDevice::ConstView pulseOffsetsView, + HcalMahiPulseOffsetsSoA::ConstView pulseOffsetsView, float* noiseTerms, float* electronicNoiseTerms, int8_t* soiSamples, @@ -1290,7 +1290,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { HcalMahiConditionsPortableDevice::ConstView const& mahi, HcalSiPMCharacteristicsPortableDevice::ConstView const& sipmCharacteristics, HcalRecoParamWithPulseShapeDevice::ConstView const& recoParamsWithPS, - HcalMahiPulseOffsetsPortableDevice::ConstView const& mahiPulseOffsets, + HcalMahiPulseOffsetsSoA::ConstView const& mahiPulseOffsets, ConfigParameters const& configParameters) { auto const totalChannels = f01HEDigis.metadata().size() + f5HBDigis.metadata().size() + f3HBDigis.metadata().size(); diff --git a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.h b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.h index baa13effe532a..3ff6fe63abcb3 100644 --- a/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.h +++ b/RecoLocalCalo/HcalRecProducers/plugins/alpaka/Mahi.h @@ -11,7 +11,8 @@ #include "CondFormats/HcalObjects/interface/alpaka/HcalMahiConditionsDevice.h" #include "CondFormats/HcalObjects/interface/alpaka/HcalSiPMCharacteristicsDevice.h" #include "CondFormats/HcalObjects/interface/alpaka/HcalRecoParamWithPulseShapeDevice.h" -#include "CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h" + +#include "HcalMahiPulseOffsetsSoA.h" namespace ALPAKA_ACCELERATOR_NAMESPACE::hcal::reconstruction { @@ -50,7 +51,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE::hcal::reconstruction { HcalMahiConditionsPortableDevice::ConstView const& mahi, HcalSiPMCharacteristicsPortableDevice::ConstView const& sipmCharacteristics, HcalRecoParamWithPulseShapeDevice::ConstView const& recoParams, - HcalMahiPulseOffsetsPortableDevice::ConstView const& mahiPulseOffsets, + HcalMahiPulseOffsetsSoA::ConstView const& mahiPulseOffsets, ConfigParameters const& configParameters); } // namespace ALPAKA_ACCELERATOR_NAMESPACE::hcal::reconstruction diff --git a/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerPortableTask_cff.py b/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerPortableTask_cff.py index 17bec3f3caabe..6226fe37fe118 100644 --- a/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerPortableTask_cff.py +++ b/RecoLocalCalo/HcalRecProducers/python/hbheRecHitProducerPortableTask_cff.py @@ -5,16 +5,9 @@ # EventSetup modules used by HBHERecHitProducerPortable from RecoLocalCalo.HcalRecProducers.hcalMahiConditionsESProducer_cfi import hcalMahiConditionsESProducer -from RecoLocalCalo.HcalRecProducers.hcalMahiPulseOffsetsESProducer_cfi import hcalMahiPulseOffsetsESProducer from RecoLocalCalo.HcalRecProducers.hcalSiPMCharacteristicsESProducer_cfi import hcalSiPMCharacteristicsESProducer from RecoLocalCalo.HcalRecAlgos.hcalRecoParamWithPulseShapeESProducer_cfi import hcalRecoParamWithPulseShapeESProducer -hcalMahiPulseOffSetAlpakaESRcdSource = cms.ESSource('EmptyESSource', - recordName = cms.string('JobConfigurationGPURecord'), - iovIsRunNotTime = cms.bool(True), - firstValid = cms.vuint32(1) -) - # convert the HBHE digis into SoA format from EventFilter.HcalRawToDigi.hcalDigisSoAProducer_cfi import hcalDigisSoAProducer as _hcalDigisSoAProducer hcalDigisPortable = _hcalDigisSoAProducer.clone( @@ -33,7 +26,6 @@ digisLabelF5HB = ("hcalDigisPortable", "f5HBDigis"), digisLabelF3HB = ("hcalDigisPortable","f3HBDigis"), recHitsLabelM0HBHE = "", - mahiPulseOffSets = "hcalMahiPulseOffsetsESProducer:" ) hbheRecHitProducerSerial = makeSerialClone(hbheRecHitProducerPortable, digisLabelF01HE = ("hcalDigisSerial","f01HEDigis"), @@ -44,8 +36,6 @@ # Tasks and Sequences hbheRecHitProducerPortableTask = cms.Task( hcalMahiConditionsESProducer, - hcalMahiPulseOffSetAlpakaESRcdSource, - hcalMahiPulseOffsetsESProducer, hcalRecoParamWithPulseShapeESProducer, hcalSiPMCharacteristicsESProducer, hcalDigisPortable, diff --git a/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsHostCollection.h b/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsHostCollection.h deleted file mode 100644 index 775adb4a8638e..0000000000000 --- a/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsHostCollection.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef RecoParticleFlow_PFClusterProducer_interface_PFClusterParamsHostCollection_h -#define RecoParticleFlow_PFClusterProducer_interface_PFClusterParamsHostCollection_h - -#include "DataFormats/Portable/interface/PortableHostCollection.h" - -#include "RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h" - -namespace reco { - - using PFClusterParamsHostCollection = PortableHostCollection; - -} - -#endif diff --git a/RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h b/RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h deleted file mode 100644 index 228246a940101..0000000000000 --- a/RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef RecoParticleFlow_PFClusterProducer_interface_alpaka_PFClusterParamsDeviceCollection_h -#define RecoParticleFlow_PFClusterProducer_interface_alpaka_PFClusterParamsDeviceCollection_h - -#include "DataFormats/Portable/interface/alpaka/PortableCollection.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" - -#include "RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsHostCollection.h" -#include "RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h" - -namespace ALPAKA_ACCELERATOR_NAMESPACE::reco { - - using ::reco::PFClusterParamsHostCollection; - - using PFClusterParamsDeviceCollection = PortableCollection<::reco::PFClusterParamsSoA>; - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE::reco - -// check that the portable device collection for the host device is the same as the portable host collection -ASSERT_DEVICE_MATCHES_HOST_COLLECTION(reco::PFClusterParamsDeviceCollection, reco::PFClusterParamsHostCollection); - -#endif diff --git a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc index 3ab90658ae02c..6534444c56bd2 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc @@ -30,7 +30,6 @@ #include "DataFormats/ParticleFlowReco/interface/PFRecHitHostCollection.h" #include "DataFormats/ParticleFlowReco/interface/PFClusterHostCollection.h" #include "DataFormats/ParticleFlowReco/interface/PFRecHitFractionHostCollection.h" -#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" #include "RecoParticleFlow/PFClusterProducer/interface/PFCPositionCalculatorBase.h" class LegacyPFClusterProducer : public edm::stream::EDProducer<> { diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc deleted file mode 100644 index 36d4b025c3a48..0000000000000 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc +++ /dev/null @@ -1,249 +0,0 @@ -#include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h" -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "FWCore/Utilities/interface/Exception.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" -#include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" -#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" -#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h" - -#include - -namespace ALPAKA_ACCELERATOR_NAMESPACE { - - class PFClusterParamsESProducer : public ESProducer { - public: - PFClusterParamsESProducer(edm::ParameterSet const& iConfig) : ESProducer(iConfig) { - constexpr static uint32_t kMaxDepth_barrel = 4; - constexpr static uint32_t kMaxDepth_endcap = 7; - product = std::make_shared(std::max(kMaxDepth_barrel, kMaxDepth_endcap), - cms::alpakatools::host()); - auto view = product->view(); - - // seedFinder - auto const& sfConf = iConfig.getParameterSet("seedFinder"); - view.nNeigh() = sfConf.getParameter("nNeighbours"); - auto const& seedFinderConfs = sfConf.getParameterSetVector("thresholdsByDetector"); - for (auto const& pset : seedFinderConfs) { - auto const& det = pset.getParameter("detector"); - auto seedPt2Threshold = std::pow(pset.getParameter("seedingThresholdPt"), 2.); - auto const& thresholds = pset.getParameter>("seedingThreshold"); - if (det == "HCAL_BARREL1") { - if (thresholds.size() != kMaxDepth_barrel) - throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_barrel - << ") for \"\" vector of det = \"" << det << "\""; - view.seedPt2ThresholdHB() = seedPt2Threshold; - for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.seedEThresholdHB_vec()[idx] = thresholds[idx]; - } - } else if (det == "HCAL_ENDCAP") { - if (thresholds.size() != kMaxDepth_endcap) - throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_endcap - << ") for \"\" vector of det = \"" << det << "\""; - view.seedPt2ThresholdHE() = seedPt2Threshold; - for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.seedEThresholdHE_vec()[idx] = thresholds[idx]; - } - } else { - throw cms::Exception("Configuration") << "Unknown detector when parsing seedFinder: " << det; - } - } - - // initialClusteringStep - auto const& initConf = iConfig.getParameterSet("initialClusteringStep"); - auto const& topoThresholdConf = initConf.getParameterSetVector("thresholdsByDetector"); - for (auto const& pset : topoThresholdConf) { - auto const& det = pset.getParameter("detector"); - auto const& thresholds = pset.getParameter>("gatheringThreshold"); - if (det == "HCAL_BARREL1") { - if (thresholds.size() != kMaxDepth_barrel) - throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_barrel - << ") for \"\" vector of det = \"" << det << "\""; - for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.topoEThresholdHB_vec()[idx] = thresholds[idx]; - } - } else if (det == "HCAL_ENDCAP") { - if (thresholds.size() != kMaxDepth_endcap) - throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_endcap - << ") for \"\" vector of det = \"" << det << "\""; - for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.topoEThresholdHE_vec()[idx] = thresholds[idx]; - } - } else { - throw cms::Exception("Configuration") << "Unknown detector when parsing initClusteringStep: " << det; - } - } - - // pfClusterBuilder - auto const& pfClusterPSet = iConfig.getParameterSet("pfClusterBuilder"); - view.showerSigma2() = std::pow(pfClusterPSet.getParameter("showerSigma"), 2.); - view.minFracToKeep() = pfClusterPSet.getParameter("minFractionToKeep"); - view.minFracTot() = pfClusterPSet.getParameter("minFracTot"); - view.maxIterations() = pfClusterPSet.getParameter("maxIterations"); - view.excludeOtherSeeds() = pfClusterPSet.getParameter("excludeOtherSeeds"); - view.stoppingTolerance() = pfClusterPSet.getParameter("stoppingTolerance"); - auto const& pcPSet = pfClusterPSet.getParameterSet("positionCalc"); - view.minFracInCalc() = pcPSet.getParameter("minFractionInCalc"); - view.minAllowedNormalization() = pcPSet.getParameter("minAllowedNormalization"); - - auto const& recHitEnergyNormConf = pfClusterPSet.getParameterSetVector("recHitEnergyNorms"); - for (auto const& pset : recHitEnergyNormConf) { - auto const& recHitNorms = pset.getParameter>("recHitEnergyNorm"); - auto const& det = pset.getParameter("detector"); - if (det == "HCAL_BARREL1") { - if (recHitNorms.size() != kMaxDepth_barrel) - throw cms::Exception("Configuration") - << "Invalid size (" << recHitNorms.size() << " != " << kMaxDepth_barrel - << ") for \"\" vector of det = \"" << det << "\""; - for (size_t idx = 0; idx < recHitNorms.size(); ++idx) { - view.recHitEnergyNormInvHB_vec()[idx] = 1. / recHitNorms[idx]; - } - } else if (det == "HCAL_ENDCAP") { - if (recHitNorms.size() != kMaxDepth_endcap) - throw cms::Exception("Configuration") - << "Invalid size (" << recHitNorms.size() << " != " << kMaxDepth_endcap - << ") for \"\" vector of det = \"" << det << "\""; - for (size_t idx = 0; idx < recHitNorms.size(); ++idx) { - view.recHitEnergyNormInvHE_vec()[idx] = 1. / recHitNorms[idx]; - } - } else { - throw cms::Exception("Configuration") << "Unknown detector when parsing recHitEnergyNorms: " << det; - } - } - - auto const& barrelTimeResConf = pfClusterPSet.getParameterSet("timeResolutionCalcBarrel"); - view.barrelTimeResConsts_corrTermLowE() = barrelTimeResConf.getParameter("corrTermLowE"); - view.barrelTimeResConsts_threshLowE() = barrelTimeResConf.getParameter("threshLowE"); - view.barrelTimeResConsts_noiseTerm() = barrelTimeResConf.getParameter("noiseTerm"); - view.barrelTimeResConsts_constantTermLowE2() = - std::pow(barrelTimeResConf.getParameter("constantTermLowE"), 2.); - view.barrelTimeResConsts_noiseTermLowE() = barrelTimeResConf.getParameter("noiseTermLowE"); - view.barrelTimeResConsts_threshHighE() = barrelTimeResConf.getParameter("threshHighE"); - view.barrelTimeResConsts_constantTerm2() = std::pow(barrelTimeResConf.getParameter("constantTerm"), 2.); - view.barrelTimeResConsts_resHighE2() = - std::pow(view.barrelTimeResConsts_noiseTerm() / view.barrelTimeResConsts_threshHighE(), 2.) + - view.barrelTimeResConsts_constantTerm2(); - - auto const& endcapTimeResConf = pfClusterPSet.getParameterSet("timeResolutionCalcEndcap"); - view.endcapTimeResConsts_corrTermLowE() = endcapTimeResConf.getParameter("corrTermLowE"); - view.endcapTimeResConsts_threshLowE() = endcapTimeResConf.getParameter("threshLowE"); - view.endcapTimeResConsts_noiseTerm() = endcapTimeResConf.getParameter("noiseTerm"); - view.endcapTimeResConsts_constantTermLowE2() = - std::pow(endcapTimeResConf.getParameter("constantTermLowE"), 2.); - view.endcapTimeResConsts_noiseTermLowE() = endcapTimeResConf.getParameter("noiseTermLowE"); - view.endcapTimeResConsts_threshHighE() = endcapTimeResConf.getParameter("threshHighE"); - view.endcapTimeResConsts_constantTerm2() = std::pow(endcapTimeResConf.getParameter("constantTerm"), 2.); - view.endcapTimeResConsts_resHighE2() = - std::pow(view.endcapTimeResConsts_noiseTerm() / view.endcapTimeResConsts_threshHighE(), 2.) + - view.endcapTimeResConsts_constantTerm2(); - - setWhatProduced(this); - } - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - edm::ParameterSetDescription psetDesc; - { - auto const psetName = "seedFinder"; - edm::ParameterSetDescription foo; - foo.add("nNeighbours", 4); - { - edm::ParameterSetDescription validator; - validator.add("detector", ""); - validator.add>("seedingThreshold", {}); - validator.add("seedingThresholdPt", 0.); - std::vector vDefaults(2); - vDefaults[0].addParameter("detector", "HCAL_BARREL1"); - vDefaults[0].addParameter>("seedingThreshold", {0.125, 0.25, 0.35, 0.35}); - vDefaults[0].addParameter("seedingThresholdPt", 0.); - vDefaults[1].addParameter("detector", "HCAL_ENDCAP"); - vDefaults[1].addParameter>("seedingThreshold", - {0.1375, 0.275, 0.275, 0.275, 0.275, 0.275, 0.275}); - vDefaults[1].addParameter("seedingThresholdPt", 0.); - foo.addVPSet("thresholdsByDetector", validator, vDefaults); - } - psetDesc.add(psetName, foo); - } - { - auto const psetName = "initialClusteringStep"; - edm::ParameterSetDescription foo; - { - edm::ParameterSetDescription validator; - validator.add("detector", ""); - validator.add>("gatheringThreshold", {}); - std::vector vDefaults(2); - vDefaults[0].addParameter("detector", "HCAL_BARREL1"); - vDefaults[0].addParameter>("gatheringThreshold", {0.1, 0.2, 0.3, 0.3}); - vDefaults[1].addParameter("detector", "HCAL_ENDCAP"); - vDefaults[1].addParameter>("gatheringThreshold", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2}); - foo.addVPSet("thresholdsByDetector", validator, vDefaults); - } - psetDesc.add(psetName, foo); - } - { - auto const psetName = "pfClusterBuilder"; - edm::ParameterSetDescription foo; - foo.add("maxIterations", 50); - foo.add("minFracTot", 1e-20); - foo.add("minFractionToKeep", 1e-7); - foo.add("excludeOtherSeeds", true); - foo.add("showerSigma", 10.); - foo.add("stoppingTolerance", 1e-8); - { - edm::ParameterSetDescription validator; - validator.add("detector", ""); - validator.add>("recHitEnergyNorm", {}); - std::vector vDefaults(2); - vDefaults[0].addParameter("detector", "HCAL_BARREL1"); - vDefaults[0].addParameter>("recHitEnergyNorm", {0.1, 0.2, 0.3, 0.3}); - vDefaults[1].addParameter("detector", "HCAL_ENDCAP"); - vDefaults[1].addParameter>("recHitEnergyNorm", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2}); - foo.addVPSet("recHitEnergyNorms", validator, vDefaults); - } - { - edm::ParameterSetDescription bar; - bar.add("minFractionInCalc", 1e-9); - bar.add("minAllowedNormalization", 1e-9); - foo.add("positionCalc", bar); - } - { - edm::ParameterSetDescription bar; - bar.add("corrTermLowE", 0.); - bar.add("threshLowE", 6.); - bar.add("noiseTerm", 21.86); - bar.add("constantTermLowE", 4.24); - bar.add("noiseTermLowE", 8.); - bar.add("threshHighE", 15.); - bar.add("constantTerm", 2.82); - foo.add("timeResolutionCalcBarrel", bar); - } - { - edm::ParameterSetDescription bar; - bar.add("corrTermLowE", 0.); - bar.add("threshLowE", 6.); - bar.add("noiseTerm", 21.86); - bar.add("constantTermLowE", 4.24); - bar.add("noiseTermLowE", 8.); - bar.add("threshHighE", 15.); - bar.add("constantTerm", 2.82); - foo.add("timeResolutionCalcEndcap", bar); - } - psetDesc.add(psetName, foo); - } - - descriptions.addWithDefaultLabel(psetDesc); - } - - std::shared_ptr produce(JobConfigurationGPURecord const& iRecord) { - return product; - } - - private: - std::shared_ptr product; - }; - -} // namespace ALPAKA_ACCELERATOR_NAMESPACE - -DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(PFClusterParamsESProducer); diff --git a/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsSoA.h similarity index 94% rename from RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h rename to RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsSoA.h index 9003ce1c527b7..4c35ef11ccdaa 100644 --- a/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsSoA.h @@ -1,5 +1,5 @@ -#ifndef RecoParticleFlow_PFClusterProducer_interface_PFClusterParamsSoA_h -#define RecoParticleFlow_PFClusterProducer_interface_PFClusterParamsSoA_h +#ifndef RecoParticleFlow_PFClusterProducer_plugins_alpaka_PFClusterParamsSoA_h +#define RecoParticleFlow_PFClusterProducer_plugins_alpaka_PFClusterParamsSoA_h #include "DataFormats/SoATemplate/interface/SoACommon.h" #include "DataFormats/SoATemplate/interface/SoALayout.h" diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc index ac5cbe5ab6ba2..c7cebd21059bd 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc @@ -8,20 +8,151 @@ #include "FWCore/Utilities/interface/EDGetToken.h" #include "FWCore/Utilities/interface/InputTag.h" #include "FWCore/Utilities/interface/StreamID.h" +#include "HeterogeneousCore/AlpakaCore/interface/MoveToDeviceCache.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/SynchronizingEDProducer.h" -#include "HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h" #include "RecoParticleFlow/PFClusterProducer/interface/PFCPositionCalculatorBase.h" -#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h" #include "RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h" #include "RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h" +#include "PFClusterParamsSoA.h" + namespace ALPAKA_ACCELERATOR_NAMESPACE { + namespace { + using PFClusterParamsCache = + cms::alpakatools::MoveToDeviceCache>; + } - class PFClusterSoAProducer : public stream::SynchronizingEDProducer<> { + class PFClusterSoAProducer : public stream::SynchronizingEDProducer> { public: - PFClusterSoAProducer(edm::ParameterSet const& config) - : pfClusParamsToken(esConsumes(config.getParameter("pfClusterParams"))), - topologyToken_(esConsumes(config.getParameter("topology"))), + static std::unique_ptr initializeGlobalCache(edm::ParameterSet const& config) { + constexpr static uint32_t kMaxDepth_barrel = 4; + constexpr static uint32_t kMaxDepth_endcap = 7; + PortableHostCollection<::reco::PFClusterParamsSoA> obj(std::max(kMaxDepth_barrel, kMaxDepth_endcap), + cms::alpakatools::host()); + auto view = obj.view(); + + // seedFinder + auto const& sfConf = config.getParameterSet("seedFinder"); + view.nNeigh() = sfConf.getParameter("nNeighbours"); + auto const& seedFinderConfs = sfConf.getParameterSetVector("thresholdsByDetector"); + for (auto const& pset : seedFinderConfs) { + auto const& det = pset.getParameter("detector"); + auto seedPt2Threshold = std::pow(pset.getParameter("seedingThresholdPt"), 2.); + auto const& thresholds = pset.getParameter>("seedingThreshold"); + if (det == "HCAL_BARREL1") { + if (thresholds.size() != kMaxDepth_barrel) + throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_barrel + << ") for \"\" vector of det = \"" << det << "\""; + view.seedPt2ThresholdHB() = seedPt2Threshold; + for (size_t idx = 0; idx < thresholds.size(); ++idx) { + view.seedEThresholdHB_vec()[idx] = thresholds[idx]; + } + } else if (det == "HCAL_ENDCAP") { + if (thresholds.size() != kMaxDepth_endcap) + throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_endcap + << ") for \"\" vector of det = \"" << det << "\""; + view.seedPt2ThresholdHE() = seedPt2Threshold; + for (size_t idx = 0; idx < thresholds.size(); ++idx) { + view.seedEThresholdHE_vec()[idx] = thresholds[idx]; + } + } else { + throw cms::Exception("Configuration") << "Unknown detector when parsing seedFinder: " << det; + } + } + + // initialClusteringStep + auto const& initConf = config.getParameterSet("initialClusteringStep"); + auto const& topoThresholdConf = initConf.getParameterSetVector("thresholdsByDetector"); + for (auto const& pset : topoThresholdConf) { + auto const& det = pset.getParameter("detector"); + auto const& thresholds = pset.getParameter>("gatheringThreshold"); + if (det == "HCAL_BARREL1") { + if (thresholds.size() != kMaxDepth_barrel) + throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_barrel + << ") for \"\" vector of det = \"" << det << "\""; + for (size_t idx = 0; idx < thresholds.size(); ++idx) { + view.topoEThresholdHB_vec()[idx] = thresholds[idx]; + } + } else if (det == "HCAL_ENDCAP") { + if (thresholds.size() != kMaxDepth_endcap) + throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_endcap + << ") for \"\" vector of det = \"" << det << "\""; + for (size_t idx = 0; idx < thresholds.size(); ++idx) { + view.topoEThresholdHE_vec()[idx] = thresholds[idx]; + } + } else { + throw cms::Exception("Configuration") << "Unknown detector when parsing initClusteringStep: " << det; + } + } + + // pfClusterBuilder + auto const& pfClusterPSet = config.getParameterSet("pfClusterBuilder"); + view.showerSigma2() = std::pow(pfClusterPSet.getParameter("showerSigma"), 2.); + view.minFracToKeep() = pfClusterPSet.getParameter("minFractionToKeep"); + view.minFracTot() = pfClusterPSet.getParameter("minFracTot"); + view.maxIterations() = pfClusterPSet.getParameter("maxIterations"); + view.excludeOtherSeeds() = pfClusterPSet.getParameter("excludeOtherSeeds"); + view.stoppingTolerance() = pfClusterPSet.getParameter("stoppingTolerance"); + auto const& pcPSet = pfClusterPSet.getParameterSet("positionCalc"); + view.minFracInCalc() = pcPSet.getParameter("minFractionInCalc"); + view.minAllowedNormalization() = pcPSet.getParameter("minAllowedNormalization"); + + auto const& recHitEnergyNormConf = pfClusterPSet.getParameterSetVector("recHitEnergyNorms"); + for (auto const& pset : recHitEnergyNormConf) { + auto const& recHitNorms = pset.getParameter>("recHitEnergyNorm"); + auto const& det = pset.getParameter("detector"); + if (det == "HCAL_BARREL1") { + if (recHitNorms.size() != kMaxDepth_barrel) + throw cms::Exception("Configuration") + << "Invalid size (" << recHitNorms.size() << " != " << kMaxDepth_barrel + << ") for \"\" vector of det = \"" << det << "\""; + for (size_t idx = 0; idx < recHitNorms.size(); ++idx) { + view.recHitEnergyNormInvHB_vec()[idx] = 1. / recHitNorms[idx]; + } + } else if (det == "HCAL_ENDCAP") { + if (recHitNorms.size() != kMaxDepth_endcap) + throw cms::Exception("Configuration") + << "Invalid size (" << recHitNorms.size() << " != " << kMaxDepth_endcap + << ") for \"\" vector of det = \"" << det << "\""; + for (size_t idx = 0; idx < recHitNorms.size(); ++idx) { + view.recHitEnergyNormInvHE_vec()[idx] = 1. / recHitNorms[idx]; + } + } else { + throw cms::Exception("Configuration") << "Unknown detector when parsing recHitEnergyNorms: " << det; + } + } + + auto const& barrelTimeResConf = pfClusterPSet.getParameterSet("timeResolutionCalcBarrel"); + view.barrelTimeResConsts_corrTermLowE() = barrelTimeResConf.getParameter("corrTermLowE"); + view.barrelTimeResConsts_threshLowE() = barrelTimeResConf.getParameter("threshLowE"); + view.barrelTimeResConsts_noiseTerm() = barrelTimeResConf.getParameter("noiseTerm"); + view.barrelTimeResConsts_constantTermLowE2() = + std::pow(barrelTimeResConf.getParameter("constantTermLowE"), 2.); + view.barrelTimeResConsts_noiseTermLowE() = barrelTimeResConf.getParameter("noiseTermLowE"); + view.barrelTimeResConsts_threshHighE() = barrelTimeResConf.getParameter("threshHighE"); + view.barrelTimeResConsts_constantTerm2() = std::pow(barrelTimeResConf.getParameter("constantTerm"), 2.); + view.barrelTimeResConsts_resHighE2() = + std::pow(view.barrelTimeResConsts_noiseTerm() / view.barrelTimeResConsts_threshHighE(), 2.) + + view.barrelTimeResConsts_constantTerm2(); + + auto const& endcapTimeResConf = pfClusterPSet.getParameterSet("timeResolutionCalcEndcap"); + view.endcapTimeResConsts_corrTermLowE() = endcapTimeResConf.getParameter("corrTermLowE"); + view.endcapTimeResConsts_threshLowE() = endcapTimeResConf.getParameter("threshLowE"); + view.endcapTimeResConsts_noiseTerm() = endcapTimeResConf.getParameter("noiseTerm"); + view.endcapTimeResConsts_constantTermLowE2() = + std::pow(endcapTimeResConf.getParameter("constantTermLowE"), 2.); + view.endcapTimeResConsts_noiseTermLowE() = endcapTimeResConf.getParameter("noiseTermLowE"); + view.endcapTimeResConsts_threshHighE() = endcapTimeResConf.getParameter("threshHighE"); + view.endcapTimeResConsts_constantTerm2() = std::pow(endcapTimeResConf.getParameter("constantTerm"), 2.); + view.endcapTimeResConsts_resHighE2() = + std::pow(view.endcapTimeResConsts_noiseTerm() / view.endcapTimeResConsts_threshHighE(), 2.) + + view.endcapTimeResConsts_constantTerm2(); + + return std::make_unique(std::move(obj)); + } + + PFClusterSoAProducer(edm::ParameterSet const& config, PFClusterParamsCache const*) + : topologyToken_(esConsumes(config.getParameter("topology"))), inputPFRecHitSoA_Token_{consumes(config.getParameter("pfRecHits"))}, inputPFRecHitNum_Token_{consumes(config.getParameter("pfRecHits"))}, outputPFClusterSoA_Token_{produces()}, @@ -30,10 +161,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { synchronise_(config.getParameter("synchronise")) {} void acquire(device::Event const& event, device::EventSetup const& setup) override { - const reco::PFClusterParamsDeviceCollection& params = setup.getData(pfClusParamsToken); const reco::PFRecHitHCALTopologyDeviceCollection& topology = setup.getData(topologyToken_); const reco::PFRecHitDeviceCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_); int nRH = event.get(inputPFRecHitNum_Token_); + const auto& params = globalCache()->get(event.queue()); pfClusteringVars_.emplace(nRH, event.queue()); pfClusteringEdgeVars_.emplace(nRH * 8, event.queue()); @@ -44,7 +175,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { if (nRH != 0) { PFClusterProducerKernel kernel(event.queue()); kernel.seedTopoAndContract(event.queue(), - params, + params.const_view(), topology, *pfClusteringVars_, *pfClusteringEdgeVars_, @@ -56,7 +187,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } void produce(device::Event& event, device::EventSetup const& setup) override { - const reco::PFClusterParamsDeviceCollection& params = setup.getData(pfClusParamsToken); + const auto& params = globalCache()->get(event.queue()); const reco::PFRecHitHCALTopologyDeviceCollection& topology = setup.getData(topologyToken_); const reco::PFRecHitDeviceCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_); @@ -67,7 +198,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { pfrhFractions.emplace(*numRHF_, event.queue()); PFClusterProducerKernel kernel(event.queue()); kernel.cluster(event.queue(), - params, + params.const_view(), topology, *pfClusteringVars_, *pfClusteringEdgeVars_, @@ -89,14 +220,103 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("pfRecHits", edm::InputTag("")); - desc.add("pfClusterParams", edm::ESInputTag("")); desc.add("topology", edm::ESInputTag("")); + + { + auto const psetName = "seedFinder"; + edm::ParameterSetDescription foo; + foo.add("nNeighbours", 4); + { + edm::ParameterSetDescription validator; + validator.add("detector", ""); + validator.add>("seedingThreshold", {}); + validator.add("seedingThresholdPt", 0.); + std::vector vDefaults(2); + vDefaults[0].addParameter("detector", "HCAL_BARREL1"); + vDefaults[0].addParameter>("seedingThreshold", {0.125, 0.25, 0.35, 0.35}); + vDefaults[0].addParameter("seedingThresholdPt", 0.); + vDefaults[1].addParameter("detector", "HCAL_ENDCAP"); + vDefaults[1].addParameter>("seedingThreshold", + {0.1375, 0.275, 0.275, 0.275, 0.275, 0.275, 0.275}); + vDefaults[1].addParameter("seedingThresholdPt", 0.); + foo.addVPSet("thresholdsByDetector", validator, vDefaults); + } + desc.add(psetName, foo); + } + { + auto const psetName = "initialClusteringStep"; + edm::ParameterSetDescription foo; + { + edm::ParameterSetDescription validator; + validator.add("detector", ""); + validator.add>("gatheringThreshold", {}); + std::vector vDefaults(2); + vDefaults[0].addParameter("detector", "HCAL_BARREL1"); + vDefaults[0].addParameter>("gatheringThreshold", {0.1, 0.2, 0.3, 0.3}); + vDefaults[1].addParameter("detector", "HCAL_ENDCAP"); + vDefaults[1].addParameter>("gatheringThreshold", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2}); + foo.addVPSet("thresholdsByDetector", validator, vDefaults); + } + desc.add(psetName, foo); + } + { + auto const psetName = "pfClusterBuilder"; + edm::ParameterSetDescription foo; + foo.add("maxIterations", 50); + foo.add("minFracTot", 1e-20); + foo.add("minFractionToKeep", 1e-7); + foo.add("excludeOtherSeeds", true); + foo.add("showerSigma", 10.); + foo.add("stoppingTolerance", 1e-8); + { + edm::ParameterSetDescription validator; + validator.add("detector", ""); + validator.add>("recHitEnergyNorm", {}); + std::vector vDefaults(2); + vDefaults[0].addParameter("detector", "HCAL_BARREL1"); + vDefaults[0].addParameter>("recHitEnergyNorm", {0.1, 0.2, 0.3, 0.3}); + vDefaults[1].addParameter("detector", "HCAL_ENDCAP"); + vDefaults[1].addParameter>("recHitEnergyNorm", {0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2}); + foo.addVPSet("recHitEnergyNorms", validator, vDefaults); + } + { + edm::ParameterSetDescription bar; + bar.add("minFractionInCalc", 1e-9); + bar.add("minAllowedNormalization", 1e-9); + foo.add("positionCalc", bar); + } + { + edm::ParameterSetDescription bar; + bar.add("corrTermLowE", 0.); + bar.add("threshLowE", 6.); + bar.add("noiseTerm", 21.86); + bar.add("constantTermLowE", 4.24); + bar.add("noiseTermLowE", 8.); + bar.add("threshHighE", 15.); + bar.add("constantTerm", 2.82); + foo.add("timeResolutionCalcBarrel", bar); + } + { + edm::ParameterSetDescription bar; + bar.add("corrTermLowE", 0.); + bar.add("threshLowE", 6.); + bar.add("noiseTerm", 21.86); + bar.add("constantTermLowE", 4.24); + bar.add("noiseTermLowE", 8.); + bar.add("threshHighE", 15.); + bar.add("constantTerm", 2.82); + foo.add("timeResolutionCalcEndcap", bar); + } + desc.add(psetName, foo); + } + desc.add("synchronise", false); descriptions.addWithDefaultLabel(desc); } + static void globalEndJob(PFClusterParamsCache*) {} + private: - const device::ESGetToken pfClusParamsToken; const device::ESGetToken topologyToken_; const device::EDGetToken inputPFRecHitSoA_Token_; const edm::EDGetTokenT inputPFRecHitNum_Token_; diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc index b9ec4e557009c..9dd1c4b7172a0 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc @@ -59,7 +59,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // Cluster position calculation template - ALPAKA_FN_ACC static void updateClusterPos(reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + ALPAKA_FN_ACC static void updateClusterPos(::reco::PFClusterParamsSoA::ConstView pfClusParams, Position4& pos4, float frac, int rhInd, @@ -89,7 +89,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC static void hcalFastCluster_singleSeed( const TAcc& acc, - reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, // from selection int nRHTopo, // from selection @@ -257,7 +257,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC static void hcalFastCluster_multiSeedParallel( const TAcc& acc, - reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, // from selection int nSeeds, // from selection @@ -543,7 +543,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // Device function designed to be called by all threads of a given block template >> ALPAKA_FN_ACC static void hcalFastCluster_exotic(const TAcc& acc, - reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, int nSeeds, @@ -818,7 +818,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC static void hcalFastCluster_multiSeedIterative( const TAcc& acc, - reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, int nSeeds, @@ -1085,7 +1085,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC void operator()(const TAcc& acc, reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, - const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, const reco::PFRecHitDeviceCollection::ConstView pfRecHits, reco::PFClusterDeviceCollection::View clusterView, @@ -1350,7 +1350,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC void operator()(const TAcc& acc, const reco::PFRecHitDeviceCollection::ConstView pfRecHits, - const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, reco::PFClusterDeviceCollection::View clusterView, @@ -1412,7 +1412,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC void operator()(const TAcc& acc, const reco::PFRecHitDeviceCollection::ConstView pfRecHits, - const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const ::reco::PFClusterParamsSoA::ConstView pfClusParams, const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, reco::PFClusterDeviceCollection::View clusterView, @@ -1468,7 +1468,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } void PFClusterProducerKernel::seedTopoAndContract(Queue& queue, - const reco::PFClusterParamsDeviceCollection& params, + const ::reco::PFClusterParamsSoA::ConstView params, const reco::PFRecHitHCALTopologyDeviceCollection& topology, reco::PFClusteringVarsDeviceCollection& pfClusteringVars, reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars, @@ -1484,7 +1484,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { make_workdiv(blocks, threadsPerBlock), SeedingTopoThresh{}, pfClusteringVars.view(), - params.view(), + params, topology.view(), pfRecHits.view(), pfClusters.view(), @@ -1528,7 +1528,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } void PFClusterProducerKernel::cluster(Queue& queue, - const reco::PFClusterParamsDeviceCollection& params, + const ::reco::PFClusterParamsSoA::ConstView params, const reco::PFRecHitHCALTopologyDeviceCollection& topology, reco::PFClusteringVarsDeviceCollection& pfClusteringVars, reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars, @@ -1549,7 +1549,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { make_workdiv(nRH, threadsPerBlockForClustering), FastCluster{}, pfRecHits.view(), - params.view(), + params, topology.view(), pfClusteringVars.view(), pfClusters.view(), @@ -1560,7 +1560,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { threadsPerBlockForClustering), // uses 4 blocks to minimize memory usage FastClusterExotic{}, pfRecHits.view(), - params.view(), + params, topology.view(), pfClusteringVars.view(), pfClusters.view(), diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h index cfc79b8d7ad69..3c768cdfb51ad 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h @@ -5,11 +5,12 @@ #include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitDeviceCollection.h" #include "DataFormats/ParticleFlowReco/interface/alpaka/PFRecHitFractionDeviceCollection.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h" #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringEdgeVarsDeviceCollection.h" #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h" #include "RecoParticleFlow/PFRecHitProducer/interface/alpaka/PFRecHitTopologyDeviceCollection.h" +#include "PFClusterParamsSoA.h" + namespace ALPAKA_ACCELERATOR_NAMESPACE { namespace reco::pfClustering { @@ -39,7 +40,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { explicit PFClusterProducerKernel(Queue& queue); void seedTopoAndContract(Queue& queue, - const reco::PFClusterParamsDeviceCollection& params, + const ::reco::PFClusterParamsSoA::ConstView params, const reco::PFRecHitHCALTopologyDeviceCollection& topology, reco::PFClusteringVarsDeviceCollection& pfClusteringVars, reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars, @@ -49,7 +50,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { uint32_t* __restrict__ nRHF); void cluster(Queue& queue, - const reco::PFClusterParamsDeviceCollection& params, + const ::reco::PFClusterParamsSoA::ConstView params, const reco::PFRecHitHCALTopologyDeviceCollection& topology, reco::PFClusteringVarsDeviceCollection& pfClusteringVars, reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars, diff --git a/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py b/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py index 30fc5672153c1..61d6c36c714d0 100644 --- a/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py +++ b/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py @@ -7,7 +7,6 @@ from RecoParticleFlow.PFRecHitProducer.pfRecHitHCALTopologyESProducer_cfi import pfRecHitHCALTopologyESProducer as _pfRecHitHCALTopologyESProducer from RecoParticleFlow.PFRecHitProducer.pfRecHitSoAProducerHCAL_cfi import pfRecHitSoAProducerHCAL as _pfRecHitSoAProducerHCAL from RecoParticleFlow.PFRecHitProducer.legacyPFRecHitProducer_cfi import legacyPFRecHitProducer as _legacyPFRecHitProducer -from RecoParticleFlow.PFClusterProducer.pfClusterParamsESProducer_cfi import pfClusterParamsESProducer as _pfClusterParamsESProducer from RecoParticleFlow.PFClusterProducer.pfClusterSoAProducer_cfi import pfClusterSoAProducer as _pfClusterSoAProducer from RecoParticleFlow.PFClusterProducer.legacyPFClusterProducer_cfi import legacyPFClusterProducer as _legacyPFClusterProducer @@ -30,12 +29,6 @@ firstValid = cms.vuint32(1) ) -pfClusterParamsRecordSource = cms.ESSource('EmptyESSource', - recordName = cms.string('JobConfigurationGPURecord'), - iovIsRunNotTime = cms.bool(True), - firstValid = cms.vuint32(1) - ) - hbheRecHitToSoA = _hcalRecHitSoAProducer.clone( src = "hbhereco" ) @@ -61,11 +54,9 @@ src = "pfRecHitSoAProducerHCAL" ) -pfClusterParamsESProducer = _pfClusterParamsESProducer.clone() pfClusterSoAProducer = _pfClusterSoAProducer.clone( pfRecHits = 'pfRecHitSoAProducerHCAL', topology = "pfRecHitHCALTopologyESProducer:", - pfClusterParams = 'pfClusterParamsESProducer:', synchronise = cms.bool(False) ) @@ -80,13 +71,11 @@ #Full Reco _alpaka_pfClusteringHBHEHFTask.add(pfRecHitHCALParamsRecordSource) _alpaka_pfClusteringHBHEHFTask.add(pfRecHitHCALTopologyRecordSource) -_alpaka_pfClusteringHBHEHFTask.add(pfClusterParamsRecordSource) _alpaka_pfClusteringHBHEHFTask.add(hbheRecHitToSoA) _alpaka_pfClusteringHBHEHFTask.add(pfRecHitHCALParamsESProducer) _alpaka_pfClusteringHBHEHFTask.add(pfRecHitHCALTopologyESProducer) _alpaka_pfClusteringHBHEHFTask.add(pfRecHitSoAProducerHCAL) _alpaka_pfClusteringHBHEHFTask.add(legacyPFRecHitProducer) -_alpaka_pfClusteringHBHEHFTask.add(pfClusterParamsESProducer) _alpaka_pfClusteringHBHEHFTask.add(pfClusterSoAProducer) _alpaka_pfClusteringHBHEHFTask.add(legacyPFClusterProducer) @@ -128,7 +117,6 @@ pfClusterSoAProducerHBHEOnly = _pfClusterSoAProducer.clone( pfRecHits = 'pfRecHitSoAProducerHBHEOnly', topology = "pfRecHitHCALTopologyESProducer:", - pfClusterParams = 'pfClusterParamsESProducer:', synchronise = cms.bool(False) ) @@ -141,13 +129,11 @@ _alpaka_pfClusteringHBHEHFOnlyTask.add(pfRecHitHCALParamsRecordSource) _alpaka_pfClusteringHBHEHFOnlyTask.add(pfRecHitHCALTopologyRecordSource) -_alpaka_pfClusteringHBHEHFOnlyTask.add(pfClusterParamsRecordSource) _alpaka_pfClusteringHBHEHFOnlyTask.add(hbheOnlyRecHitToSoA) _alpaka_pfClusteringHBHEHFOnlyTask.add(pfRecHitHCALParamsESProducer) _alpaka_pfClusteringHBHEHFOnlyTask.add(pfRecHitHCALTopologyESProducer) _alpaka_pfClusteringHBHEHFOnlyTask.add(pfRecHitSoAProducerHBHEOnly) _alpaka_pfClusteringHBHEHFOnlyTask.add(legacyPFRecHitProducerHBHEOnly) -_alpaka_pfClusteringHBHEHFOnlyTask.add(pfClusterParamsESProducer) _alpaka_pfClusteringHBHEHFOnlyTask.add(pfClusterSoAProducerHBHEOnly) _alpaka_pfClusteringHBHEHFOnlyTask.add(legacyPFClusterProducerHBHEOnly) diff --git a/RecoParticleFlow/PFClusterProducer/src/PFClusterParamsHostCollection.cc b/RecoParticleFlow/PFClusterProducer/src/PFClusterParamsHostCollection.cc deleted file mode 100644 index 4d88391c4b5c1..0000000000000 --- a/RecoParticleFlow/PFClusterProducer/src/PFClusterParamsHostCollection.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "FWCore/Utilities/interface/typelookup.h" -#include "RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsHostCollection.h" - -TYPELOOKUP_DATA_REG(reco::PFClusterParamsHostCollection); diff --git a/RecoParticleFlow/PFClusterProducer/src/alpaka/PFClusterParamsDeviceCollection.cc b/RecoParticleFlow/PFClusterProducer/src/alpaka/PFClusterParamsDeviceCollection.cc deleted file mode 100644 index 54a63b04ad9c0..0000000000000 --- a/RecoParticleFlow/PFClusterProducer/src/alpaka/PFClusterParamsDeviceCollection.cc +++ /dev/null @@ -1,4 +0,0 @@ -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/typelookup.h" - -#include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h" -TYPELOOKUP_ALPAKA_DATA_REG(reco::PFClusterParamsDeviceCollection); diff --git a/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py b/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py index 7cf551884a504..819d9ca0f5d7c 100644 --- a/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py +++ b/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py @@ -140,7 +140,7 @@ ##################################### import sys import argparse -parser = argparse.ArgumentParser(prog=f"{sys.argv[0]} {sys.argv[1]} --", description='Test and validation of PFRecHitProducer with Alpaka') +parser = argparse.ArgumentParser(prog=f"{sys.argv[0]}", description='Test and validation of PFRecHitProducer with Alpaka') parser.add_argument('-c', '--cal', type=str, default='HCAL', help='Calorimeter type. Possible options: HCAL, ECAL. Default: HCAL') parser.add_argument('-b', '--backend', type=str, default='auto', @@ -404,42 +404,31 @@ ) #Move Onto Clustering - -process.pfClusterParamsAlpakaESRcdSource = cms.ESSource('EmptyESSource', - recordName = cms.string('JobConfigurationGPURecord'), - iovIsRunNotTime = cms.bool(True), - firstValid = cms.vuint32(1) +import RecoParticleFlow.PFClusterProducer.modules as _modules +process.hltParticleFlowPFClusterAlpaka = getattr(_modules, (alpaka_backend_str % "PFClusterSoAProducer").replace("::", "_").replace("@", "_"))( + pfRecHits = "hltParticleFlowPFRecHitAlpaka", + topology = "hltParticleFlowRecHitTopologyESProducer:", + pfClusterBuilder = dict(maxIterations = 5), + synchronise = args.synchronise ) - -from RecoParticleFlow.PFClusterProducer.pfClusterParamsESProducer_cfi import pfClusterParamsESProducer as _pfClusterParamsESProducer - -process.hltParticleFlowClusterParamsESProducer = _pfClusterParamsESProducer.clone() -process.hltParticleFlowClusterParamsESProducer.pfClusterBuilder.maxIterations = 5 - -for idx, x in enumerate(process.hltParticleFlowClusterParamsESProducer.initialClusteringStep.thresholdsByDetector): +for idx, x in enumerate(process.hltParticleFlowPFClusterAlpaka.initialClusteringStep.thresholdsByDetector): for idy, y in enumerate(process.hltParticleFlowClusterHBHE.initialClusteringStep.thresholdsByDetector): if x.detector == y.detector: x.gatheringThreshold = y.gatheringThreshold -for idx, x in enumerate(process.hltParticleFlowClusterParamsESProducer.pfClusterBuilder.recHitEnergyNorms): +for idx, x in enumerate(process.hltParticleFlowPFClusterAlpaka.pfClusterBuilder.recHitEnergyNorms): for idy, y in enumerate(process.hltParticleFlowClusterHBHE.pfClusterBuilder.recHitEnergyNorms): if x.detector == y.detector: x.recHitEnergyNorm = y.recHitEnergyNorm -for idx, x in enumerate(process.hltParticleFlowClusterParamsESProducer.seedFinder.thresholdsByDetector): +for idx, x in enumerate(process.hltParticleFlowPFClusterAlpaka.seedFinder.thresholdsByDetector): for idy, y in enumerate(process.hltParticleFlowClusterHBHE.seedFinder.thresholdsByDetector): if x.detector == y.detector: x.seedingThreshold = y.seedingThreshold -process.hltParticleFlowPFClusterAlpaka = cms.EDProducer(alpaka_backend_str % "PFClusterSoAProducer", - pfClusterParams = cms.ESInputTag("hltParticleFlowClusterParamsESProducer:"), - topology = cms.ESInputTag("hltParticleFlowRecHitTopologyESProducer:"), - synchronise = cms.bool(args.synchronise)) -process.hltParticleFlowPFClusterAlpaka.pfRecHits = cms.InputTag("hltParticleFlowPFRecHitAlpaka") # Create legacy PFClusters process.hltParticleFlowAlpakaToLegacyPFClusters = cms.EDProducer("LegacyPFClusterProducer", src = cms.InputTag("hltParticleFlowPFClusterAlpaka"), - pfClusterParams = cms.ESInputTag("hltParticleFlowClusterParamsESProducer:"), pfClusterBuilder = process.hltParticleFlowClusterHBHE.pfClusterBuilder, usePFThresholdsFromDB = cms.bool(True), recHitsSource = cms.InputTag("hltParticleFlowAlpakaToLegacyPFRecHits"))