EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
CalorimeterIslandCluster.h
Go to the documentation of this file.
1// Copyright (C) 2022, 2023 Chao Peng, Wouter Deconinck, Sylvester Joosten, Thomas Britton
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#pragma once
5
6#include <DD4hep/Detector.h>
7#include <DD4hep/IDDescriptor.h>
8#include <algorithms/algorithm.h>
9#include <algorithms/geo.h>
10#include <edm4eic/CalorimeterHitCollection.h>
11#include <edm4eic/ProtoClusterCollection.h>
12#include <edm4hep/RawCalorimeterHit.h>
13#include <edm4hep/Vector2f.h>
14#include <array>
15#include <cstddef>
16#include <functional>
17#include <gsl/pointers>
18#include <set>
19#include <string>
20#include <string_view>
21#include <vector>
22
25
26namespace eicrecon {
27
28using CaloHit = edm4eic::CalorimeterHit;
29
31 algorithms::Algorithm<algorithms::Input<edm4eic::CalorimeterHitCollection>,
32 algorithms::Output<edm4eic::ProtoClusterCollection>>;
33
35 public WithPodConfig<CalorimeterIslandClusterConfig> {
36
37public:
38 CalorimeterIslandCluster(std::string_view name)
40 {"inputProtoClusterCollection"},
41 {"outputClusterCollection"},
42 "Island clustering."} {}
43
44 void init() final;
45 void process(const Input&, const Output&) const final;
46
47private:
48 const dd4hep::Detector* m_detector{algorithms::GeoSvc::instance().detector()};
49 std::vector<double> m_localDistXY;
50
51public:
52 // neighbor checking function
53 std::function<edm4hep::Vector2f(const CaloHit&, const CaloHit&)> hitsDist;
54
55 std::function<edm4hep::Vector2f(const CaloHit& h1, const CaloHit& h2)>
59
60 // helper function to group hits
61 std::function<bool(const CaloHit& h1, const CaloHit& h2)> is_neighbour;
62
63 // helper function to define hit maximum
64 std::function<bool(const CaloHit& maximum, const CaloHit& other)> is_maximum_neighbourhood;
65
66 // unitless counterparts of the input parameters
67 std::array<double, 2> neighbourDist;
68
69 // Pointer to the geometry service
70 dd4hep::IDDescriptor m_idSpec;
71
72private:
73 // grouping function with Breadth-First Search
74 void bfs_group(const edm4eic::CalorimeterHitCollection& hits, std::set<std::size_t>& group,
75 std::size_t idx, std::vector<bool>& visits) const;
76
77 // find local maxima that above a certain threshold
78 std::vector<std::size_t> find_maxima(const edm4eic::CalorimeterHitCollection& hits,
79 const std::set<std::size_t>& group,
80 bool global = false) const;
81
82 // helper function
83 inline static void vec_normalize(std::vector<double>& vals) {
84 double total = 0.;
85 for (auto& val : vals) {
86 total += val;
87 }
88 for (auto& val : vals) {
89 val /= total;
90 }
91 }
92
93 // split a group of hits according to the local maxima
94 void split_group(const edm4eic::CalorimeterHitCollection& hits, std::set<std::size_t>& group,
95 const std::vector<std::size_t>& maxima,
96 edm4eic::ProtoClusterCollection* protoClusters) const;
97};
98
99} // namespace eicrecon
Definition CalorimeterIslandCluster.h:35
double transverseEnergyProfileScaleUnits
Definition CalorimeterIslandCluster.h:58
dd4hep::IDDescriptor m_idSpec
Definition CalorimeterIslandCluster.h:70
std::array< double, 2 > neighbourDist
Definition CalorimeterIslandCluster.h:67
std::function< edm4hep::Vector2f(const CaloHit &h1, const CaloHit &h2)> transverseEnergyProfileMetric
Definition CalorimeterIslandCluster.h:56
double u_transverseEnergyProfileScale
Definition CalorimeterIslandCluster.h:57
std::function< edm4hep::Vector2f(const CaloHit &, const CaloHit &)> hitsDist
Definition CalorimeterIslandCluster.h:53
std::function< bool(const CaloHit &maximum, const CaloHit &other)> is_maximum_neighbourhood
Definition CalorimeterIslandCluster.h:64
std::function< bool(const CaloHit &h1, const CaloHit &h2)> is_neighbour
Definition CalorimeterIslandCluster.h:61
CalorimeterIslandCluster(std::string_view name)
Definition CalorimeterIslandCluster.h:38
Definition WithPodConfig.h:22
Definition ActsGeometryProvider.h:28
-client
Definition CalorimeterClusterRecoCoG.cc:37
edm4eic::CalorimeterHit CaloHit
Definition CalorimeterIslandCluster.h:28
algorithms::Algorithm< algorithms::Input< edm4eic::CalorimeterHitCollection >, algorithms::Output< edm4eic::ProtoClusterCollection > > CalorimeterIslandClusterAlgorithm
Definition CalorimeterIslandCluster.h:32