50 {
"inputHitCollection"},
51 {
"outputProtoClusterCollection"},
52 "Topological cell clustering algorithm for imaging calorimetry."} {}
56 std::array<double, 2> sameLayerDistXY{0, 0};
57 std::array<double, 2> diffLayerDistXY{0, 0};
58 std::array<double, 2> sameLayerDistEtaPhi{0, 0};
59 std::array<double, 2> diffLayerDistEtaPhi{0, 0};
60 std::array<double, 2> sameLayerDistTZ{0, 0};
61 std::array<double, 2> diffLayerDistTZ{0, 0};
63 double minClusterHitEdep{0};
64 double minClusterCenterEdep{0};
65 double minClusterEdep{0};
69 void process(
const Input& input,
const Output& output)
const final;
73 bool is_neighbour(
const edm4eic::CalorimeterHit& h1,
const edm4eic::CalorimeterHit& h2)
const;
77 template <
typename Compare>
78 void bfs_group(
const edm4eic::CalorimeterHitCollection& hits,
79 std::set<std::size_t, Compare>& indices, std::list<std::size_t>& group,
80 const std::size_t idx)
const {
83 for (
auto idx1 = group.begin(); idx1 != group.end(); ++idx1) {
85 for (
auto idx2 = indices.begin(); idx2 != indices.end();
86 indices.empty() ? idx2 = indices.end() : idx2) {
90 if (*idx2 == *idx1 || *idx2 == idx) {
101 if (hits[*idx2].getEnergy() < m_cfg.minClusterHitEdep) {
102 idx2 = indices.erase(idx2);
106 if (is_neighbour(hits[*idx1], hits[*idx2])) {
107 group.push_back(*idx2);
108 idx2 = indices.erase(idx2);
algorithms::Algorithm< algorithms::Input< edm4eic::CalorimeterHitCollection >, algorithms::Output< edm4eic::ProtoClusterCollection > > ImagingTopoClusterAlgorithm
Definition ImagingTopoCluster.h:41