File indexing completed on 2025-01-18 03:42:14
0001 #include "FWCore/Framework/interface/MakerMacros.h"
0002 #include "FWCore/Framework/interface/SourceFactory.h"
0003 #include "FWCore/Framework/interface/ESHandle.h"
0004 #include "FWCore/Framework/interface/ESProducer.h"
0005 #include "FWCore/Framework/interface/ESTransientHandle.h"
0006 #include "FWCore/Framework/interface/EventSetupRecordIntervalFinder.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/Utilities/interface/ESGetToken.h"
0009 #include "DataFormats/Math/interface/libminifloat.h"
0010
0011 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0012 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h"
0013 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h"
0014 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0015 #include "HeterogeneousCore/AlpakaInterface/interface/host.h"
0016 #include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
0017
0018 #include "CondFormats/HGCalObjects/interface/HGCalConfiguration.h"
0019 #include "CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
0020 #include "CondFormats/DataRecord/interface/HGCalElectronicsMappingRcd.h"
0021 #include "CondFormats/DataRecord/interface/HGCalModuleConfigurationRcd.h" // depends on HGCalElectronicsMappingRcd
0022 #include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h" // for HGCalConfigParamHost
0023 #include "CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h"
0024
0025 #include <string>
0026 #include <iostream> // for std::cout
0027 #include <iomanip> // for std::setw
0028
0029 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0030
0031 namespace hgcalrechit {
0032
0033 class HGCalConfigurationESProducer : public ESProducer {
0034 public:
0035 HGCalConfigurationESProducer(const edm::ParameterSet& iConfig) : ESProducer(iConfig) {
0036 if (iConfig.exists("gain"))
0037 gain_ = iConfig.getParameter<int>("gain");
0038 auto cc = setWhatProduced(this);
0039 indexToken_ = cc.consumes(iConfig.getParameter<edm::ESInputTag>("indexSource"));
0040 configToken_ = cc.consumes(iConfig.getParameter<edm::ESInputTag>("configSource"));
0041 }
0042
0043 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0044 edm::ParameterSetDescription desc;
0045 desc.add<edm::ESInputTag>("indexSource", edm::ESInputTag(""))
0046 ->setComment("Label for module indexer to set SoA size");
0047 desc.add<edm::ESInputTag>("configSource", edm::ESInputTag(""))
0048 ->setComment("Label for ROC configuration parameters");
0049 desc.addOptional<int>("gain", 2)->setComment(
0050 "Manual override for gain for all modules (1: 80 fC, 2: 160 fC, 4: 320 fC)");
0051 descriptions.addWithDefaultLabel(desc);
0052 }
0053
0054 std::optional<hgcalrechit::HGCalConfigParamHost> produce(const HGCalModuleConfigurationRcd& iRecord) {
0055 auto const& config = iRecord.get(configToken_);
0056 auto const& moduleMap = iRecord.get(indexToken_);
0057
0058
0059 const uint32_t nERx = moduleMap.getMaxERxSize();
0060 hgcalrechit::HGCalConfigParamHost product(nERx, cms::alpakatools::host());
0061
0062
0063 if (gain_ > 0) {
0064 for (uint32_t iroc = 0; iroc < nERx; iroc++) {
0065 product.view()[iroc].gain() = gain_;
0066 }
0067 } else {
0068 for (uint32_t ifed = 0; ifed < config.feds.size(); ++ifed) {
0069 for (uint32_t imod = 0; imod < config.feds[ifed].econds.size(); ++imod) {
0070 for (uint32_t iroc = 0; iroc < config.feds[ifed].econds[imod].rocs.size(); ++iroc) {
0071
0072 uint32_t iroc_dense = moduleMap.getIndexForModuleErx(ifed, imod, iroc);
0073 product.view()[iroc_dense].gain() = config.feds[ifed].econds[imod].rocs[iroc].gain;
0074 }
0075 }
0076 }
0077 }
0078
0079 return product;
0080 }
0081
0082 private:
0083 edm::ESGetToken<HGCalMappingModuleIndexer, HGCalElectronicsMappingRcd> indexToken_;
0084 edm::ESGetToken<HGCalConfiguration, HGCalModuleConfigurationRcd> configToken_;
0085 int32_t gain_ = -1;
0086 };
0087
0088 }
0089
0090 }
0091
0092 DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(hgcalrechit::HGCalConfigurationESProducer);