File indexing completed on 2025-02-05 03:15:14
0001
0002
0003 #include "FWCore/Framework/interface/MakerMacros.h"
0004 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0007 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0008 #include "FWCore/Utilities/interface/InputTag.h"
0009 #include "FWCore/Utilities/interface/StreamID.h"
0010 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/EDProducer.h"
0011 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
0012 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0013 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
0014 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
0015 #include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h"
0016 #include <iomanip> // for std::setw
0017 #include <future>
0018
0019
0020 #include "FWCore/Framework/interface/ESWatcher.h"
0021 #include "CondFormats/HGCalObjects/interface/HGCalConfiguration.h"
0022 #include "CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
0023 #include "CondFormats/DataRecord/interface/HGCalElectronicsMappingRcd.h"
0024 #include "CondFormats/DataRecord/interface/HGCalModuleConfigurationRcd.h"
0025 #include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h"
0026 #include "CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h" // also for HGCalConfigParamDevice
0027
0028 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0029
0030 using namespace cms::alpakatools;
0031
0032 class HGCalRecHitESProducersTest : public stream::EDProducer<> {
0033 public:
0034 explicit HGCalRecHitESProducersTest(const edm::ParameterSet&);
0035 static void fillDescriptions(edm::ConfigurationDescriptions&);
0036
0037 private:
0038 void produce(device::Event&, device::EventSetup const&) override;
0039 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0040 edm::ESWatcher<HGCalModuleConfigurationRcd> configWatcher_;
0041 edm::ESGetToken<HGCalMappingModuleIndexer, HGCalElectronicsMappingRcd> indexerToken_;
0042 edm::ESGetToken<HGCalConfiguration, HGCalModuleConfigurationRcd> configToken_;
0043 device::ESGetToken<hgcalrechit::HGCalConfigParamDevice, HGCalModuleConfigurationRcd> configParamToken_;
0044 device::ESGetToken<hgcalrechit::HGCalCalibParamDevice, HGCalModuleConfigurationRcd> calibParamToken_;
0045 };
0046
0047 HGCalRecHitESProducersTest::HGCalRecHitESProducersTest(const edm::ParameterSet& iConfig) : EDProducer(iConfig) {
0048 std::cout << "HGCalRecHitESProducersTest::HGCalRecHitESProducersTest" << std::endl;
0049 indexerToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("indexSource"));
0050 configToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("configSource"));
0051 configParamToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("configParamSource"));
0052 calibParamToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("calibParamSource"));
0053 }
0054
0055 void HGCalRecHitESProducersTest::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0056 edm::ParameterSetDescription desc;
0057 desc.add("indexSource", edm::ESInputTag{})->setComment("Label for module indexer to set SoA size");
0058 desc.add("configSource", edm::ESInputTag{})->setComment("Label for HGCal configuration for unpacking raw data");
0059 desc.add("configParamSource", edm::ESInputTag{})
0060 ->setComment("Label for ROC configuration parameters for calibrations");
0061 desc.add("calibParamSource", edm::ESInputTag{})->setComment("Label for calibration parameters");
0062 descriptions.addWithDefaultLabel(desc);
0063 }
0064
0065 void HGCalRecHitESProducersTest::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
0066 std::cout << "HGCalRecHitESProducersTest::beginRun" << std::endl;
0067 }
0068
0069 static std::string int2hex(int value) {
0070 std::stringstream stream;
0071 stream << "0x" << std::hex << value;
0072 return stream.str();
0073 }
0074
0075 void HGCalRecHitESProducersTest::produce(device::Event& iEvent, device::EventSetup const& iSetup) {
0076 std::cout << "HGCalRecHitESProducersTest::produce" << std::endl;
0077 auto queue = iEvent.queue();
0078 auto const& moduleMap = iSetup.getData(indexerToken_);
0079 auto const& config = iSetup.getData(configToken_);
0080 auto const& configParamDevice = iSetup.getData(configParamToken_);
0081
0082 auto const& calibParamDevice = iSetup.getData(calibParamToken_);
0083
0084
0085
0086 if (configWatcher_.check(iSetup)) {
0087 std::cout << "HGCalRecHitESProducersTest::produce: moduleMap.getMaxDataSize()=" << moduleMap.getMaxDataSize()
0088 << ", moduleMap.getMaxERxSize()=" << moduleMap.getMaxERxSize() << std::endl;
0089
0090
0091 auto nfeds = config.feds.size();
0092 std::cout << "HGCalRecHitESProducersTest::produce: config=" << config << std::endl;
0093 std::cout << "HGCalRecHitESProducersTest::produce: nfeds=" << nfeds << ", config=" << config << std::endl;
0094 for (std::size_t fedid = 0; fedid < nfeds; ++fedid) {
0095 auto fed = config.feds[fedid];
0096 auto nmods = fed.econds.size();
0097 std::cout << " fedid=" << fedid << ", nmods=" << nmods << ", passthroughMode=" << fed.mismatchPassthroughMode
0098 << ", cbHeaderMarker=0x" << std::hex << fed.cbHeaderMarker << ", slinkHeaderMarker=0x"
0099 << fed.slinkHeaderMarker << std::dec << std::endl;
0100 std::cout << " modid nrocs headerMarker" << std::endl;
0101 for (std::size_t modid = 0; modid < nmods; ++modid) {
0102 auto mod = fed.econds[modid];
0103 auto nrocs = mod.rocs.size();
0104 std::cout << std::setw(7) << modid << std::setw(7) << nrocs << std::setw(14) << int2hex(mod.headerMarker)
0105 << std::endl;
0106 }
0107 }
0108
0109
0110 int size = configParamDevice.view().metadata().size();
0111 std::cout << "HGCalRecHitESProducersTest::produce: device size=" << size << std::endl;
0112 std::cout << " imod gain" << std::endl;
0113 for (int imod = 0; imod < size; imod++) {
0114 if (imod >= 250)
0115 break;
0116 std::cout << std::setw(6) << imod << std::setw(6) << uint32_t(configParamDevice.view()[imod].gain())
0117 << std::endl;
0118 }
0119
0120
0121 size = calibParamDevice.view().metadata().size();
0122 std::cout << "HGCalRecHitESProducersTest::produce: device size=" << size << std::endl;
0123 std::cout << " idx hex ADC_ped CM_slope CM_ped BXm1_slope" << std::endl;
0124 for (int idx = 0; idx < size; idx++) {
0125 if (idx >= 250)
0126 break;
0127 std::cout << std::setw(6) << idx << std::setw(7) << int2hex(idx) << std::dec << std::setw(12)
0128 << calibParamDevice.view()[idx].ADC_ped() << std::setw(11) << calibParamDevice.view()[idx].CM_slope()
0129 << std::setw(9) << calibParamDevice.view()[idx].CM_ped() << std::setw(13)
0130 << calibParamDevice.view()[idx].BXm1_slope() << std::endl;
0131 }
0132 }
0133 }
0134
0135 }
0136
0137
0138 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0139 DEFINE_FWK_ALPAKA_MODULE(HGCalRecHitESProducersTest);