Skip to content

Commit

Permalink
rename 'HGCal.*(Device|Host)Collection -> (Device|Host)' for readabil…
Browse files Browse the repository at this point in the history
…ity; move calib SoAs to CondFormats/HGCalObjects/; move TestHGCalRecHitESProducers to test
  • Loading branch information
IzaakWN authored and pfs committed Jul 24, 2024
1 parent b59f356 commit 2ebc1fb
Show file tree
Hide file tree
Showing 14 changed files with 106 additions and 94 deletions.
19 changes: 19 additions & 0 deletions CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef CondFormats_HGCalObjects_interface_HGCalCalibrationParameterHost_h
#define CondFormats_HGCalObjects_interface_HGCalCalibrationParameterHost_h

#include "DataFormats/Portable/interface/PortableHostCollection.h"
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterSoA.h"

namespace hgcalrechit {

// SoA with channel-level calibration parameters in host memory:
// pedestal, CM_slope, CM_ped, BXm1_kappa
using HGCalCalibParamHost = PortableHostCollection<HGCalCalibParamSoA>;

// SoA with ROC-level configuration parameters in host memory:
// gain
using HGCalConfigParamHost = PortableHostCollection<HGCalConfigParamSoA>;

} // namespace hgcalrechit

#endif // CondFormats_HGCalObjects_interface_HGCalCalibrationParameterHost_h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef RecoLocalCalo_HGCalRecAlgos_interface_HGCalCalibrationParameterSoA_h
#define RecoLocalCalo_HGCalRecAlgos_interface_HGCalCalibrationParameterSoA_h
#ifndef CondFormats_HGCalObjects_interface_HGCalCalibrationParameterSoA_h
#define CondFormats_HGCalObjects_interface_HGCalCalibrationParameterSoA_h

#include <Eigen/Core>
#include <Eigen/Dense>
Expand All @@ -18,7 +18,7 @@ namespace hgcalrechit {

// Generate structure of channel-level arrays (SoA) layout with RecHit dataformat
GENERATE_SOA_LAYOUT(HGCalCalibParamSoALayout,
SOA_SCALAR(HGCalMappingModuleIndexer, map), // map elecId <-> dense idx
//SOA_SCALAR(HGCalMappingModuleIndexer, map), // dense idx map: now redundant & NOT thread safe !?
SOA_COLUMN(float, ADC_ped), // ADC pedestals, O(91)
SOA_COLUMN(float, CM_slope), // common mode slope, O(0.25)
SOA_COLUMN(float, CM_ped), // common mode pedestal (offset), O(92)
Expand All @@ -32,17 +32,18 @@ namespace hgcalrechit {
SOA_COLUMN(float, TOT_P1), // coefficient pol2 in nonlinear region, O(1.0)
SOA_COLUMN(float, TOT_P2), // coefficient pol2 in nonlinear region, O(0.004)
SOA_COLUMN(float, TOAtops), // TOA conversion to time (ps)
SOA_COLUMN(float, MIPS_scale), // MIPS scale
SOA_COLUMN(mybool,valid) // if false: mask dead channel
)
using HGCalCalibParamSoA = HGCalCalibParamSoALayout<>;

// Generate structure of ROC-level arrays (SoA) layout with RecHit dataformat
GENERATE_SOA_LAYOUT(HGCalConfigParamSoALayout,
SOA_SCALAR(HGCalMappingModuleIndexer, map), // map elecId <-> dense idx
//SOA_SCALAR(HGCalMappingModuleIndexer, map), // dense idx map: now redundant & NOT thread safe !?
SOA_COLUMN(uint8_t, gain) // for ADC to charge (fC) conversion (80, 160, 320 fC)
)
using HGCalConfigParamSoA = HGCalConfigParamSoALayout<>;

} // namespace hgcalrechit

#endif // RecoLocalCalo_HGCalRecAlgos_interface_HGCalCalibrationParameterSoA_h
#endif // CondFormats_HGCalObjects_interface_HGCalCalibrationParameterSoA_h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#ifndef CondFormats_HGCalObjects_interface_alpaka_HGCalCalibrationParameterDevice_h
#define CondFormats_HGCalObjects_interface_alpaka_HGCalCalibrationParameterDevice_h

#include "DataFormats/Portable/interface/alpaka/PortableCollection.h"
#include "HeterogeneousCore/AlpakaInterface/interface/config.h"
#include "HeterogeneousCore/AlpakaInterface/interface/memory.h"
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterSoA.h"
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h"

namespace ALPAKA_ACCELERATOR_NAMESPACE {

namespace hgcalrechit {

using namespace ::hgcalrechit;
using HGCalCalibParamDevice = PortableCollection<HGCalCalibParamSoA>;
//using HGCalChannelConfigParamDeviceCollection = PortableCollection<HGCalChannelConfigParamSoA>;
using HGCalConfigParamDevice = PortableCollection<HGCalConfigParamSoA>;

} // namespace hgcalrechit

} // namespace ALPAKA_ACCELERATOR_NAMESPACE

#endif // CondFormats_HGCalObjects_interface_alpaka_HGCalCalibrationParameterDevice_h
5 changes: 5 additions & 0 deletions CondFormats/HGCalObjects/src/HGCalCalibrationParameterHost.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include "FWCore/Utilities/interface/typelookup.h"
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h"

TYPELOOKUP_DATA_REG(hgcalrechit::HGCalCalibParamHost);
TYPELOOKUP_DATA_REG(hgcalrechit::HGCalConfigParamHost);
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "HeterogeneousCore/AlpakaCore/interface/alpaka/typelookup.h"
#include "CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h"

//TYPELOOKUP_ALPAKA_DATA_REG(hgcalrechit::HGCalCalibParamHost); // redundant ?
//TYPELOOKUP_ALPAKA_DATA_REG(hgcalrechit::HGCalConfigParamHost); // redundant ?
TYPELOOKUP_ALPAKA_DATA_REG(hgcalrechit::HGCalCalibParamDevice);
TYPELOOKUP_ALPAKA_DATA_REG(hgcalrechit::HGCalConfigParamDevice);

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
//#include "DataFormats/HGCalDigi/interface/HGCalElectronicsId.h"
#include "CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
#include "CondFormats/DataRecord/interface/HGCalMappingModuleIndexerRcd.h"
#include "RecoLocalCalo/HGCalRecAlgos/interface/HGCalCalibrationParameterHostCollection.h"
#include "RecoLocalCalo/HGCalRecAlgos/interface/alpaka/HGCalCalibrationParameterDeviceCollection.h"
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h"
#include "CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h"

#include <string>
#include <iostream>
Expand All @@ -47,7 +47,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {

static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<std::string>("filename", "/home/hgcdaq00/DPG/test/hackathon_2024Mar/ineuteli/calibration_parameters_v2.json");
desc.add<std::string>("filename","HGCalCommissioning/LocalCalibration/data/calibration_parameters_v2.json");
desc.add<edm::ESInputTag>("moduleIndexerSource",edm::ESInputTag(""))->setComment("Label for module info to set SoA size");
descriptions.addWithDefaultLabel(desc);
}
Expand All @@ -65,13 +65,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
return values;
}

std::optional<hgcalrechit::HGCalCalibParamHostCollection> produce(const HGCalMappingModuleIndexerRcd& iRecord) {
std::optional<hgcalrechit::HGCalCalibParamHost> produce(const HGCalMappingModuleIndexerRcd& iRecord) {
auto const& moduleMap = iRecord.get(moduleIndexerToken_);

// load dense indexing
const uint32_t size = moduleMap.getMaxDataSize(); // channel-level size
hgcalrechit::HGCalCalibParamHostCollection product(size, cms::alpakatools::host());
product.view().map() = moduleMap; // set dense indexing in SoA
hgcalrechit::HGCalCalibParamHost product(size, cms::alpakatools::host());
//product.view().map() = moduleMap; // set dense indexing in SoA (now redundant & NOT thread safe !?)
std::cout << "HGCalCalibrationESProducer::produce: moduleMap.getMaxDataSize()=" << size
<< ", moduleMap.getMaxERxSize()=" << moduleMap.getMaxERxSize() << std::endl;

Expand All @@ -98,6 +98,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
fill_SoA_column<float>(product.view().TOT_P1(), calib_data[module]["TOT_P1"], offset,nrows);
fill_SoA_column<float>(product.view().TOT_P2(), calib_data[module]["TOT_P2"], offset,nrows);
fill_SoA_column<float>(product.view().TOAtops(), calib_data[module]["TOAtops"], offset,nrows);
//fill_SoA_column<float>(product.view().MIPS_scale(),calib_data[module]["MIPS_scale"],offset,nrows);
fill_SoA_column<mybool>(product.view().valid(), calib_data[module]["Valid"], offset,nrows); // mybool (=std::byte) defined in HGCalCalibrationParameterSoA.h
std::cout << "HGCalCalibrationESProducer::produce: memcpied all columns !" << std::endl;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@
#include "HeterogeneousCore/AlpakaInterface/interface/host.h"
#include "HeterogeneousCore/AlpakaInterface/interface/memory.h"

//#include "DataFormats/HGCalDigi/interface/HGCalElectronicsId.h"
#include "CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
#include "CondFormats/DataRecord/interface/HGCalMappingModuleIndexerRcd.h"
#include "CondFormats/DataRecord/interface/HGCalModuleConfigurationRcd.h"
#include "RecoLocalCalo/HGCalRecAlgos/interface/HGCalCalibrationParameterHostCollection.h" // for HGCalConfigParamHostCollection
#include "RecoLocalCalo/HGCalRecAlgos/interface/alpaka/HGCalCalibrationParameterDeviceCollection.h"
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h" // for HGCalConfigParamHost
#include "CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h"

#include <string>
#include <iostream> // for std::cout
Expand Down Expand Up @@ -52,15 +51,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
descriptions.addWithDefaultLabel(desc);
}

std::optional<hgcalrechit::HGCalConfigParamHostCollection> produce(const HGCalModuleConfigurationRcd& iRecord) {
std::optional<hgcalrechit::HGCalConfigParamHost> produce(const HGCalModuleConfigurationRcd& iRecord) {
//std::cout << "HGCalConfigurationESProducer::produce" << std::endl;
//const auto& config = iRecord.get(configToken_);
auto const& moduleMap = iRecord.get(moduleIndexerToken_);

// load dense indexing
const uint32_t nmod = moduleMap.getMaxERxSize(); // ROC-level size
hgcalrechit::HGCalConfigParamHostCollection product(nmod, cms::alpakatools::host());
product.view().map() = moduleMap; // set dense indexing in SoA (causes segfault !?)
hgcalrechit::HGCalConfigParamHost product(nmod, cms::alpakatools::host());
//product.view().map() = moduleMap; // set dense indexing in SoA (now redundant & NOT thread safe !?)
std::cout << "HGCalConfigurationESProducer::produce: moduleMap.getMaxDataSize()=" << moduleMap.getMaxDataSize()
<< ", moduleMap.getMaxERxSize()=" << nmod
<< ", moduleMap.getMaxModuleSize()=" << moduleMap.getMaxModuleSize() << std::endl;
Expand Down

This file was deleted.

This file was deleted.

7 changes: 7 additions & 0 deletions RecoLocalCalo/HGCalRecAlgos/test/BuildFile.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,10 @@
<flags EDM_PLUGIN="1"/>
<library name="RecoLocalCaloHGCalRecAlgosTestPlugin" file="*.cc">
</library>
<library name="RecoLocalCaloHGCalRecAlgosTestPluginAlpaka" file="alpaka/*.cc">
<use name="alpaka"/>
<use name="HeterogeneousCore/AlpakaCore"/>
<use name="HeterogeneousCore/AlpakaInterface"/>
<flags ALPAKA_BACKENDS="1"/>
<flags EDM_PLUGIN="1"/>
</library>
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
// Author: Izaak Neutelings (March 2024)
// Based on: https://github.com/CMS-HGCAL/cmssw/blob/hgcal-condformat-HGCalNANO-13_2_0_pre3_linearity/RecoLocalCalo/HGCalRecAlgos/plugins/alpaka/HGCalRecHitProducer.cc
// CMSSW includes
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
Expand All @@ -22,8 +21,8 @@
#include "CondFormats/HGCalObjects/interface/HGCalMappingModuleIndexer.h"
#include "CondFormats/DataRecord/interface/HGCalMappingModuleIndexerRcd.h"
#include "CondFormats/DataRecord/interface/HGCalModuleConfigurationRcd.h"
#include "RecoLocalCalo/HGCalRecAlgos/interface/HGCalCalibrationParameterHostCollection.h"
#include "RecoLocalCalo/HGCalRecAlgos/interface/alpaka/HGCalCalibrationParameterDeviceCollection.h" // also for HGCalConfigParamDeviceCollection
#include "CondFormats/HGCalObjects/interface/HGCalCalibrationParameterHost.h"
#include "CondFormats/HGCalObjects/interface/alpaka/HGCalCalibrationParameterDevice.h" // also for HGCalConfigParamDevice

//template<class T> double duration(T t0,T t1) {
// auto elapsed_secs = t1-t0;
Expand Down Expand Up @@ -51,14 +50,16 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
void beginRun(edm::Run const&, edm::EventSetup const&) override;
edm::ESWatcher<HGCalModuleConfigurationRcd> configWatcher_;
edm::ESWatcher<HGCalMappingModuleIndexerRcd> calibWatcher_;
device::ESGetToken<hgcalrechit::HGCalConfigParamDeviceCollection, HGCalModuleConfigurationRcd> configToken_;
device::ESGetToken<hgcalrechit::HGCalCalibParamDeviceCollection, HGCalMappingModuleIndexerRcd> calibToken_;
edm::ESGetToken<HGCalMappingModuleIndexer, HGCalMappingModuleIndexerRcd> moduleIndexerToken_;
device::ESGetToken<hgcalrechit::HGCalConfigParamDevice, HGCalModuleConfigurationRcd> configToken_;
device::ESGetToken<hgcalrechit::HGCalCalibParamDevice, HGCalMappingModuleIndexerRcd> calibToken_;
};

TestHGCalRecHitESProducers::TestHGCalRecHitESProducers(const edm::ParameterSet& iConfig) {
std::cout << "TestHGCalRecHitESProducers::TestHGCalRecHitESProducers" << std::endl;
configToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("configSource"));
calibToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("calibSource"));
moduleIndexerToken_ = esConsumes(iConfig.getParameter<edm::ESInputTag>("calibSource"));
}

void TestHGCalRecHitESProducers::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup){
Expand All @@ -68,40 +69,41 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE {
void TestHGCalRecHitESProducers::produce(device::Event& iEvent, device::EventSetup const& iSetup) {
std::cout << "TestHGCalRecHitESProducers::produce" << std::endl;
auto queue = iEvent.queue();
auto const& deviceConfigParamProvider = iSetup.getData(configToken_);
//printf("TestHGCalRecHitESProducers::produce: time to load deviceConfigParamProvider from config ESProducers: %f seconds\n", duration(start,now()));
auto const& deviceCalibParamProvider = iSetup.getData(calibToken_);
//printf("TestHGCalRecHitESProducers::produce: time to load deviceCalibParamProvider from calib ESProducers: %f seconds\n", duration(start,now()));
auto const& moduleMap = iSetup.getData(moduleIndexerToken_);
auto const& configParamDevice = iSetup.getData(configToken_);
//printf("TestHGCalRecHitESProducers::produce: time to load configParamDevice from config ESProducers: %f seconds\n", duration(start,now()));
auto const& calibParamDevice = iSetup.getData(calibToken_);
//printf("TestHGCalRecHitESProducers::produce: time to load calibParamDevice from calib ESProducers: %f seconds\n", duration(start,now()));

// Check if there are new conditions and read them
if (configWatcher_.check(iSetup)){
int size = deviceConfigParamProvider.view().metadata().size();
std::cout << "TestHGCalRecHitESProducers::produce: moduleMap.getMaxDataSize()=" << deviceConfigParamProvider.view().map().getMaxDataSize()
<< ", moduleMap.getMaxERxSize()=" << deviceConfigParamProvider.view().map().getMaxERxSize() << std::endl;
int size = configParamDevice.view().metadata().size();
std::cout << "TestHGCalRecHitESProducers::produce: moduleMap.getMaxDataSize()=" << moduleMap.getMaxDataSize()
<< ", moduleMap.getMaxERxSize()=" << moduleMap.getMaxERxSize() << std::endl;
std::cout << "TestHGCalRecHitESProducers::produce: device size=" << size << std::endl;
std::cout << " imod gain" << std::endl;
for(int imod=0; imod<size; imod++) {
if(imod>=250) break;
std::cout << std::setw(6) << imod
<< std::setw(6) << uint32_t(deviceConfigParamProvider.view()[imod].gain()) << std::endl;
<< std::setw(6) << uint32_t(configParamDevice.view()[imod].gain()) << std::endl;
}
}

// Check if there are new conditions and read them
if(calibWatcher_.check(iSetup)){
int size = deviceCalibParamProvider.view().metadata().size();
std::cout << "TestHGCalRecHitESProducers::produce: moduleMap.getMaxDataSize()=" << deviceCalibParamProvider.view().map().getMaxDataSize()
<< ", moduleMap.getMaxERxSize()=" << deviceCalibParamProvider.view().map().getMaxERxSize() << std::endl;
int size = calibParamDevice.view().metadata().size();
std::cout << "TestHGCalRecHitESProducers::produce: moduleMap.getMaxDataSize()=" << moduleMap.getMaxDataSize()
<< ", moduleMap.getMaxERxSize()=" << moduleMap.getMaxERxSize() << std::endl;
std::cout << "TestHGCalRecHitESProducers::produce: device size=" << size << std::endl;
std::cout << " idx hex ADC_ped CM_slope CM_ped BXm1_slope" << std::endl;
for(int idx=0; idx<size; idx++) {
if(idx>=250) break;
std::cout << std::setw(5) << idx << std::hex << std::setw(5) << idx << std::dec
<< std::setw(9) << deviceCalibParamProvider.view()[idx].ADC_ped()
<< std::setw(10) << deviceCalibParamProvider.view()[idx].CM_slope()
<< std::setw(8) << deviceCalibParamProvider.view()[idx].CM_ped()
<< std::setw(12) << deviceCalibParamProvider.view()[idx].BXm1_slope()
// << std::setw(6) << deviceCalibParamProvider.view()[idx].BXm1_offset() // redundant
<< std::setw(9) << calibParamDevice.view()[idx].ADC_ped()
<< std::setw(10) << calibParamDevice.view()[idx].CM_slope()
<< std::setw(8) << calibParamDevice.view()[idx].CM_ped()
<< std::setw(12) << calibParamDevice.view()[idx].BXm1_slope()
// << std::setw(6) << calibParamDevice.view()[idx].BXm1_offset() // redundant
<< std::endl;
}
}
Expand Down
Loading

0 comments on commit 2ebc1fb

Please sign in to comment.