File indexing completed on 2025-05-27 01:56:30
0001
0002
0003
0004
0005 #include "FWCore/Framework/interface/MakerMacros.h"
0006 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0010 #include "FWCore/Utilities/interface/InputTag.h"
0011
0012
0013 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/stream/EDProducer.h"
0014 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h"
0015 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h"
0016 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/Event.h"
0017 #include "HeterogeneousCore/AlpakaInterface/interface/config.h"
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"
0027 #include "RecoLocalCalo/HGCalRecAlgos/interface/HGCalESProducerTools.h" // for json, search_fedkey
0028
0029
0030 #include <string>
0031 #include <vector>
0032 #include <iomanip> // for std::setw
0033
0034 namespace ALPAKA_ACCELERATOR_NAMESPACE {
0035
0036 using namespace cms::alpakatools;
0037
0038 class HGCalRecHitESProducersTest : public stream::EDProducer<> {
0039 public:
0040 explicit HGCalRecHitESProducersTest(const edm::ParameterSet&);
0041 static void fillDescriptions(edm::ConfigurationDescriptions&);
0042
0043 private:
0044 const int maxchans_, maxfeds_;
0045 const std::string fedjson_;
0046 void produce(device::Event&, device::EventSetup const&) override;
0047 void beginRun(edm::Run const&, edm::EventSetup const&) override;
0048 edm::ESWatcher<HGCalModuleConfigurationRcd> configWatcher_;
0049 edm::ESGetToken<HGCalMappingModuleIndexer, HGCalElectronicsMappingRcd> indexerToken_;
0050 edm::ESGetToken<HGCalConfiguration, HGCalModuleConfigurationRcd> configToken_;
0051 device::ESGetToken<hgcalrechit::HGCalCalibParamDevice, HGCalModuleConfigurationRcd> calibParamToken_;
0052 };
0053
0054 HGCalRecHitESProducersTest::HGCalRecHitESProducersTest(const edm::ParameterSet& iConfig)
0055 : EDProducer(iConfig),
0056 maxchans_(iConfig.getParameter<int>("maxchans")),
0057 maxfeds_(iConfig.getParameter<int>("maxfeds")),
0058 fedjson_(iConfig.getParameter<std::string>("fedjson")) {
0059 std::cout << "HGCalRecHitESProducersTest::HGCalRecHitESProducersTest" << std::endl;
0060 indexerToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("indexSource"));
0061 configToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("configSource"));
0062 calibParamToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("calibParamSource"));
0063 }
0064
0065 void HGCalRecHitESProducersTest::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0066 edm::ParameterSetDescription desc;
0067 desc.add("indexSource", edm::ESInputTag{})->setComment("Label for module indexer to set SoA size");
0068 desc.add("configSource", edm::ESInputTag{})->setComment("Label for HGCal configuration for unpacking raw data");
0069 desc.add("calibParamSource", edm::ESInputTag{})->setComment("Label for calibration parameters");
0070 desc.add<int>("maxchans", 200)->setComment("Maximum number of channels to print");
0071 desc.add<int>("maxfeds", 25)->setComment("Maximum number of FED IDs to test");
0072 desc.add<std::string>("fedjson", "")->setComment("JSON file with FED configuration parameters");
0073 descriptions.addWithDefaultLabel(desc);
0074 }
0075
0076 void HGCalRecHitESProducersTest::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
0077 std::cout << "HGCalRecHitESProducersTest::beginRun" << std::endl;
0078 }
0079
0080 static std::string int2hex(int value) {
0081 std::stringstream stream;
0082 stream << "0x" << std::hex << value;
0083 return stream.str();
0084 }
0085
0086 void HGCalRecHitESProducersTest::produce(device::Event& iEvent, device::EventSetup const& iSetup) {
0087 std::cout << "HGCalRecHitESProducersTest::produce" << std::endl;
0088 auto queue = iEvent.queue();
0089 auto const& moduleMap = iSetup.getData(indexerToken_);
0090 auto const& config = iSetup.getData(configToken_);
0091 auto const& calibParamDevice = iSetup.getData(calibParamToken_);
0092
0093
0094
0095 std::string line = "HGCalRecHitESProducersTest::produce " + std::string(90, '-');
0096 if (configWatcher_.check(iSetup)) {
0097 std::cout << line << std::endl;
0098 std::cout << "HGCalRecHitESProducersTest::produce: moduleMap.getMaxDataSize()=" << moduleMap.getMaxDataSize()
0099 << ", moduleMap.getMaxERxSize()=" << moduleMap.getMaxERxSize() << std::endl;
0100
0101
0102 auto nfeds = config.feds.size();
0103 std::cout << "HGCalRecHitESProducersTest::produce: config=" << config << std::endl;
0104 std::cout << "HGCalRecHitESProducersTest::produce: nfeds=" << nfeds << ", config=" << config << std::endl;
0105 std::cout << "HGCalRecHitESProducersTest::produce: configuration:" << std::endl;
0106 for (std::size_t fedid = 0; fedid < nfeds; ++fedid) {
0107 auto fed = config.feds[fedid];
0108 auto nmods = fed.econds.size();
0109 std::cout << " fedid=" << fedid << ", nmods=" << nmods << ", passthroughMode=" << fed.mismatchPassthroughMode
0110 << ", cbHeaderMarker=0x" << std::hex << fed.cbHeaderMarker << ", slinkHeaderMarker=0x"
0111 << fed.slinkHeaderMarker << std::dec << std::endl;
0112 std::cout << " modid nrocs headerMarker" << std::endl;
0113 for (std::size_t modid = 0; modid < nmods; ++modid) {
0114 auto mod = fed.econds[modid];
0115 auto nrocs = mod.rocs.size();
0116 std::cout << std::setw(7) << modid << std::setw(7) << nrocs << std::setw(14) << int2hex(mod.headerMarker)
0117 << std::endl;
0118 }
0119 }
0120
0121
0122 std::cout << line << std::endl;
0123 int size = calibParamDevice.view().metadata().size();
0124 std::cout << "HGCalRecHitESProducersTest::produce: device size=" << size << std::endl;
0125 std::cout << "HGCalRecHitESProducersTest::produce: calibration constants:" << std::endl;
0126 std::cout << " idx hex ADC_ped CM_slope CM_ped BXm1_slope" << std::endl;
0127 for (int idx = 0; idx < size; idx++) {
0128 if (idx >= maxchans_)
0129 break;
0130 std::cout << std::setw(6) << idx << std::setw(7) << int2hex(idx) << std::dec << std::setw(12)
0131 << calibParamDevice.view()[idx].ADC_ped() << std::setw(11) << calibParamDevice.view()[idx].CM_slope()
0132 << std::setw(9) << calibParamDevice.view()[idx].CM_ped() << std::setw(13)
0133 << calibParamDevice.view()[idx].BXm1_slope() << std::endl;
0134 }
0135 }
0136
0137
0138 json fed_data;
0139 std::cout << line << std::endl;
0140 std::cout << "HGCalRecHitESProducersTest::produce: testing search_fedkey with " << fedjson_ << std::endl;
0141 if (fedjson_ == "") {
0142 fed_data = json::parse(R"({
0143 // numerical range
0144 "8-20": { },
0145 // glob pattern
0146 "[0-9]": { },
0147 // glob pattern
0148 "2[0-9]": { },
0149 // glob wildcard (default)
0150 "*": { }
0151 })",
0152 nullptr,
0153 true,
0154 true);
0155 } else {
0156 edm::FileInPath fedfip(fedjson_);
0157 std::ifstream fedfile(fedjson_);
0158 fed_data = json::parse(fedfile, nullptr, true, true);
0159 }
0160 std::vector<std::string> fedkeys;
0161 for (int fedid = 0; fedid <= maxfeds_; fedid++) {
0162 const auto fedkey = hgcal::search_fedkey(fedid, fed_data, fedjson_);
0163 fedkeys.push_back(fedkey);
0164 }
0165 std::cout << " fedid fedkey" << std::endl;
0166 for (int fedid = 0; fedid <= maxfeds_; fedid++) {
0167 std::cout << std::setw(8) << fedid << " '" + fedkeys[fedid] + "'" << std::endl;
0168 }
0169
0170 std::cout << line << std::endl;
0171 }
0172
0173 }
0174
0175
0176 #include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h"
0177 DEFINE_FWK_ALPAKA_MODULE(HGCalRecHitESProducersTest);