35 auto const containers = recoParams.getAllContainers();
36 size_t const totalChannels =
37 recoParams.getAllContainers()[0].second.size() + recoParams.getAllContainers()[1].second.size();
41 std::unordered_map<unsigned int, uint32_t> idCache;
43 auto const& barrelValues = containers[0].second;
44 for (
uint64_t i = 0;
i < barrelValues.size(); ++
i) {
45 auto const pulseShapeId = barrelValues[
i].pulseShapeID();
46 if (pulseShapeId == 0)
48 if (
auto const iter = idCache.find(pulseShapeId); iter == idCache.end()) {
49 idCache[pulseShapeId] = idCache.size();
52 auto const& endcapValues = containers[1].second;
53 for (
uint64_t i = 0;
i < endcapValues.size(); ++
i) {
54 auto const pulseShapeId = endcapValues[
i].pulseShapeID();
55 if (pulseShapeId == 0)
57 if (
auto const iter = idCache.find(pulseShapeId); iter == idCache.end()) {
58 idCache[pulseShapeId] = idCache.size();
63 auto product = std::make_unique<hcal::HcalRecoParamWithPulseShapeHost>(
65 auto recoView = product->recoParamView();
66 auto pulseShapeView = product->pulseShapeView();
67 for (
uint64_t i = 0;
i < barrelValues.size(); ++
i) {
68 auto vi = recoView[
i];
69 vi.param1() = barrelValues[
i].param1();
70 vi.param2() = barrelValues[
i].param2();
71 vi.ids() = (barrelValues[
i].pulseShapeID() == 0)
73 : idCache.at(barrelValues[
i].pulseShapeID());
76 auto const offset = barrelValues.size();
77 for (
uint64_t i = 0;
i < endcapValues.size(); ++
i) {
79 vi.param1() = endcapValues[
i].param1();
80 vi.param2() = endcapValues[
i].param2();
81 vi.ids() = (endcapValues[
i].pulseShapeID() == 0)
83 : idCache.at(endcapValues[
i].pulseShapeID());
87 for (
auto&
it : idCache) {
88 auto const pulseShapeId =
it.first;
89 auto const arrId =
it.second;
90 auto const& pulseShape = pulseShapes.
getShape(pulseShapeId);
94 pulseShapeView[arrId].acc25nsVec()[
i] =
functor.acc25nsVec()[
i];
95 pulseShapeView[arrId].diff25nsItvlVec()[
i] =
functor.diff25nsItvlVec()[
i];
98 pulseShapeView[arrId].accVarLenIdxMinusOneVec()[
i] =
functor.accVarLenIdxMinusOneVec()[
i];
99 pulseShapeView[arrId].diffVarItvlIdxMinusOneVec()[
i] =
functor.diffVarItvlIdxMinusOneVec()[
i];
100 pulseShapeView[arrId].accVarLenIdxZEROVec()[
i] =
functor.accVarLenIdxZEROVec()[
i];
101 pulseShapeView[arrId].diffVarItvlIdxZEROVec()[
i] =
functor.diffVarItvlIdxZEROVec()[
i];
auto setWhatProduced(T *iThis, const es::Label &iLabel={})
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
uint32_t cc[maxCellsPerHit]
HcalRecoParamWithPulseShapeESProducer(edm::ParameterSet const &iConfig)
constexpr int maxPSshapeBin
edm::ESGetToken< HcalRecoParams, HcalRecoParamsRcd > recoParamsToken_
std::unique_ptr< hcal::HcalRecoParamWithPulseShapeHost > produce(HcalRecoParamsRcd const &iRecord)
const Shape & getShape(int shapeType) const
unsigned long long uint64_t
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
#define DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(type)
def functor(code, kwds, debug=0)
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const