11#include " FWCore/Framework/interface/MakerMacros.h"
22#include " FWCore/ParameterSet/interface/ParameterSet.h"
33
4+ #include " CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h"
5+
46#include " CondFormats/DataRecord/interface/HcalSiPMCharacteristicsRcd.h"
57#include " CondFormats/HcalObjects/interface/alpaka/HcalSiPMCharacteristicsDevice.h"
68#include " CondFormats/DataRecord/interface/HcalMahiConditionsRcd.h"
79#include " CondFormats/HcalObjects/interface/alpaka/HcalMahiConditionsDevice.h"
810#include " CondFormats/DataRecord/interface/HcalRecoParamsRcd.h"
911#include " CondFormats/HcalObjects/interface/alpaka/HcalRecoParamWithPulseShapeDevice.h"
10- #include " CondFormats/HcalObjects/interface/alpaka/HcalMahiPulseOffsetsDevice.h"
1112
1213#include " DataFormats/HcalDigi/interface/alpaka/HcalDigiDeviceCollection.h"
1314#include " DataFormats/HcalRecHit/interface/alpaka/HcalRecHitDeviceCollection.h"
1415
1516#include " HeterogeneousCore/AlpakaInterface/interface/config.h"
17+ #include " HeterogeneousCore/AlpakaCore/interface/MoveToDeviceCache.h"
1618#include " HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
1719#include " HeterogeneousCore/AlpakaCore/interface/alpaka/EventSetup.h"
1820#include " HeterogeneousCore/AlpakaCore/interface/alpaka/EDGetToken.h"
1921#include " HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
2022#include " HeterogeneousCore/AlpakaCore/interface/alpaka/stream/EDProducer.h"
2123#include " HeterogeneousCore/CUDACore/interface/JobConfigurationGPURecord.h"
2224
25+ #include " HcalMahiPulseOffsetsSoA.h"
2326#include " Mahi.h"
24- #include " CalibCalorimetry/HcalAlgos/interface/HcalTimeSlew.h"
2527
2628namespace ALPAKA_ACCELERATOR_NAMESPACE {
29+ namespace {
30+ using HcalMahiPulseOffsetsCache =
31+ cms::alpakatools::MoveToDeviceCache<Device, PortableHostCollection<hcal::HcalMahiPulseOffsetsSoA>>;
32+ }
2733
28- class HBHERecHitProducerPortable : public stream ::EDProducer<> {
34+ class HBHERecHitProducerPortable : public stream ::EDProducer<edm::GlobalCache<HcalMahiPulseOffsetsCache> > {
2935 public:
30- explicit HBHERecHitProducerPortable (edm::ParameterSet const &);
36+ explicit HBHERecHitProducerPortable (edm::ParameterSet const &, HcalMahiPulseOffsetsCache const * );
3137 ~HBHERecHitProducerPortable () override = default ;
3238 static void fillDescriptions (edm::ConfigurationDescriptions&);
39+ static std::unique_ptr<HcalMahiPulseOffsetsCache> initializeGlobalCache (edm::ParameterSet const & ps);
40+
41+ static void globalEndJob (HcalMahiPulseOffsetsCache*) {}
3342
3443 private:
3544 void produce (device::Event&, device::EventSetup const &) override ;
@@ -50,21 +59,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
5059 const device::ESGetToken<hcal::HcalSiPMCharacteristicsPortableDevice, HcalSiPMCharacteristicsRcd>
5160 sipmCharacteristicsToken_;
5261 const device::ESGetToken<hcal::HcalRecoParamWithPulseShapeDevice, HcalRecoParamsRcd> recoParamsToken_;
53- const device::ESGetToken<hcal::HcalMahiPulseOffsetsPortableDevice, JobConfigurationGPURecord> mahiPulseOffsetsToken_;
5462 //
5563
5664 hcal::reconstruction::ConfigParameters configParameters_;
5765 };
5866
59- HBHERecHitProducerPortable::HBHERecHitProducerPortable (edm::ParameterSet const & ps)
67+ HBHERecHitProducerPortable::HBHERecHitProducerPortable (edm::ParameterSet const & ps, HcalMahiPulseOffsetsCache const * )
6068 : digisTokenF01HE_{consumes (ps.getParameter <edm::InputTag>(" digisLabelF01HE" ))},
6169 digisTokenF5HB_{consumes (ps.getParameter <edm::InputTag>(" digisLabelF5HB" ))},
6270 digisTokenF3HB_{consumes (ps.getParameter <edm::InputTag>(" digisLabelF3HB" ))},
6371 rechitsM0Token_{produces ()},
6472 mahiConditionsToken_{esConsumes ()},
6573 sipmCharacteristicsToken_{esConsumes ()},
66- recoParamsToken_{esConsumes ()},
67- mahiPulseOffsetsToken_{esConsumes (ps.getParameter <edm::ESInputTag>(" mahiPulseOffSets" ))} {
74+ recoParamsToken_{esConsumes ()} {
6875 configParameters_.maxTimeSamples = ps.getParameter <uint32_t >(" maxTimeSamples" );
6976 configParameters_.kprep1dChannelsPerBlock = ps.getParameter <uint32_t >(" kprep1dChannelsPerBlock" );
7077 configParameters_.sipmQTSShift = ps.getParameter <int >(" sipmQTSShift" );
@@ -95,7 +102,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
95102
96103 void HBHERecHitProducerPortable::fillDescriptions (edm::ConfigurationDescriptions& cdesc) {
97104 edm::ParameterSetDescription desc;
98- desc.add <edm::ESInputTag>(" mahiPulseOffSets" , edm::ESInputTag (" " ));
99105 desc.add <uint32_t >(" maxTimeSamples" , 10 );
100106 desc.add <uint32_t >(" kprep1dChannelsPerBlock" , 32 );
101107 desc.add <edm::InputTag>(" digisLabelF01HE" , edm::InputTag{" hcalRawToDigiGPU" , " f01HEDigisGPU" });
@@ -118,9 +124,25 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
118124 desc.add <std::vector<double >>(" tmaxTimeSlewParameters" , {16.00 , 10.00 , 6.25 });
119125 desc.add <std::vector<uint32_t >>(" kernelMinimizeThreads" , {16 , 1 , 1 });
120126
127+ desc.add <std::vector<int >>(" pulseOffsets" , {-3 , -2 , -1 , 0 , 1 , 2 , 3 , 4 });
128+
121129 cdesc.addWithDefaultLabel (desc);
122130 }
123131
132+ std::unique_ptr<HcalMahiPulseOffsetsCache> HBHERecHitProducerPortable::initializeGlobalCache (
133+ edm::ParameterSet const & ps) {
134+ std::vector<int > offsets = ps.getParameter <std::vector<int >>(" pulseOffsets" );
135+
136+ PortableHostCollection<hcal::HcalMahiPulseOffsetsSoA> obj (offsets.size (), cms::alpakatools::host ());
137+ auto view = obj.view ();
138+
139+ for (uint32_t i = 0 ; i < offsets.size (); i++) {
140+ view[i] = offsets[i];
141+ }
142+
143+ return std::make_unique<HcalMahiPulseOffsetsCache>(std::move (obj));
144+ }
145+
124146 void HBHERecHitProducerPortable::produce (device::Event& event, device::EventSetup const & setup) {
125147 auto & queue = event.queue ();
126148
@@ -141,7 +163,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
141163 auto const & mahiConditionsDev = setup.getData (mahiConditionsToken_);
142164 auto const & sipmCharacteristicsDev = setup.getData (sipmCharacteristicsToken_);
143165 auto const & recoParamsWithPulseShapeDev = setup.getData (recoParamsToken_);
144- auto const & mahiPulseOffsetsDev = setup. getData (mahiPulseOffsetsToken_ );
166+ auto const & mahiPulseOffsetsDev = globalCache ()-> get (queue );
145167
146168 //
147169 // schedule algorithms
0 commit comments