EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
CalorimeterHitsMerger.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// Copyright (C) 2022 - 2025 Chao Peng, Jihee Kim, Sylvester Joosten, Whitney Armstrong, Wouter Deconinck, David Lawrence, Derek Anderson
3
4/*
5 * An algorithm to group readout hits from a calorimeter
6 * Energy is summed
7 *
8 * Author: Chao Peng (ANL), 03/31/2021
9 */
10
11#pragma once
12
13#include <DD4hep/Detector.h>
14#include <DD4hep/IDDescriptor.h>
15#include <DDRec/CellIDPositionConverter.h>
16#include <Parsers/Primitives.h>
17#include <algorithms/algorithm.h>
18#include <algorithms/geo.h>
19#include <edm4eic/CalorimeterHitCollection.h>
20#include <stdint.h>
21#include <cstddef>
22#include <functional>
23#include <gsl/pointers>
24#include <iterator>
25#include <map>
26#include <string>
27#include <string_view>
28#include <unordered_map>
29#include <utility>
30#include <vector>
31
34
35namespace eicrecon {
36
37// aliases for convenience
38using MergeMap = std::unordered_map<uint64_t, std::vector<std::size_t>>;
39using RefField = std::pair<std::string, int>;
40using MapFunc = std::function<int(const edm4eic::CalorimeterHit&)>;
41
43 algorithms::Algorithm<algorithms::Input<edm4eic::CalorimeterHitCollection>,
44 algorithms::Output<edm4eic::CalorimeterHitCollection>>;
45
47 public WithPodConfig<CalorimeterHitsMergerConfig> {
48
49public:
50 CalorimeterHitsMerger(std::string_view name)
52 {"inputHitCollection"},
53 {"outputHitCollection"},
54 "Group readout hits from a calorimeter."} {}
55
56 void init() final;
57 void process(const Input&, const Output&) const final;
58
59private:
60 uint64_t ref_mask{0};
61
62private:
63 mutable std::map<std::string, MapFunc> ref_maps;
64 dd4hep::IDDescriptor id_desc;
65 dd4hep::BitFieldCoder* id_decoder;
66
67private:
68 const dd4hep::Detector* m_detector{algorithms::GeoSvc::instance().detector()};
69 const dd4hep::rec::CellIDPositionConverter* m_converter{
70 algorithms::GeoSvc::instance().cellIDPositionConverter()};
71
72private:
73 void build_merge_map(const edm4eic::CalorimeterHitCollection* in_hits, MergeMap& merge_map) const;
74};
75
76} // namespace eicrecon
Definition CalorimeterHitsMerger.h:47
CalorimeterHitsMerger(std::string_view name)
Definition CalorimeterHitsMerger.h:50
Definition WithPodConfig.h:22
-client
Definition CalorimeterClusterRecoCoG.cc:37
algorithms::Algorithm< algorithms::Input< edm4eic::CalorimeterHitCollection >, algorithms::Output< edm4eic::CalorimeterHitCollection > > CalorimeterHitsMergerAlgorithm
Definition CalorimeterHitsMerger.h:44
std::function< int(const edm4eic::CalorimeterHit &)> MapFunc
Definition CalorimeterHitsMerger.h:40
std::pair< std::string, int > RefField
Definition CalorimeterHitsMerger.h:39
std::unordered_map< uint64_t, std::vector< std::size_t > > MergeMap
Definition CalorimeterHitsMerger.h:38