29 throw std::invalid_argument(
"Input clusters collection is not configured");
32 throw std::invalid_argument(
33 "Input hit-particles map collection is not configured");
36 throw std::invalid_argument(
"Input hit ids collection is not configured");
46 const auto&
clusters = m_inputClusters(ctx);
47 const auto& hitParticlesMap = m_inputMeasurementParticlesMap(ctx);
48 const auto& hitIds = m_inputHitIds(ctx);
50 if (
clusters.size() != hitIds.size()) {
54 <<
" input clusters and hit ids collections have inconsistent size");
55 return ProcessCode::ABORT;
62 if (0 <
m_cfg.selectIndexLength) {
66 size_t nend = ihit +
m_cfg.selectIndexLength;
67 nend |= -
static_cast<int>(nend <
ihit);
74 <<
" hit index selection is outside the available range");
77 <<
m_cfg.inputClusters <<
"' contains "
78 << (nend - ihit) <<
" hits in index selection ["
79 <<
m_cfg.selectIndexStart <<
", "
80 <<
m_cfg.selectIndexLength <<
")");
83 for (; ihit < nend; ++
ihit) {
89 auto hitId = hitIds.at(ihit);
91 if (geoId != prevGeoId) {
95 ACTS_INFO(
" cluster " << ihit <<
" hit " << hitId <<
" size "
98 for (
auto [hid,
pid] :
makeRange(hitParticlesMap.equal_range(ihit))) {
107 if (
m_cfg.selectModule != 0
u) {
110 }
else if (
m_cfg.selectLayer != 0
u) {
112 }
else if (
m_cfg.selectVolume != 0
u) {
115 if (not geoSelection.empty()) {
117 <<
m_cfg.inputClusters <<
"' contains "
118 << geoSelection.size() <<
" hits in volume "
119 <<
m_cfg.selectVolume <<
" layer " <<
m_cfg.selectLayer
120 <<
" module " <<
m_cfg.selectModule);
124 for (
auto ic = geoSelection.begin(); ic != geoSelection.end(); ++ic) {
126 auto hitId = hitIds[
ihit];
130 if (geoId != prevGeoId) {
134 ACTS_INFO(
" cluster " <<
ihit <<
" hit " << hitId <<
" size "