EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
PulseGeneration.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// Copyright (C) 2024-2025 Simon Gardner, Chun Yuen Tsang, Prithwish Tribedy,
3// Minho Kim, Sylvester Joosten, Wouter Deconinck, Dmitry Kalinkin
4//
5// Convert energy deposition into analog pulses
6
7#pragma once
8
9#include <algorithms/algorithm.h>
10#include <edm4eic/EDM4eicVersion.h>
11#include <edm4eic/unit_system.h>
12#include <edm4hep/SimCalorimeterHitCollection.h>
13#include <edm4hep/SimTrackerHitCollection.h>
14#if EDM4EIC_VERSION_MAJOR > 8 || (EDM4EIC_VERSION_MAJOR == 8 && EDM4EIC_VERSION_MINOR >= 1)
15#include <edm4eic/SimPulseCollection.h>
16#else
17#include <edm4hep/TimeSeriesCollection.h>
18#endif
19#include <memory>
20#include <string_view>
21#include <tuple>
22#include <variant>
23
26
27namespace eicrecon {
28
29#if EDM4EIC_VERSION_MAJOR > 8 || (EDM4EIC_VERSION_MAJOR == 8 && EDM4EIC_VERSION_MINOR >= 1)
30using PulseType = edm4eic::SimPulse;
31using MutablePulseType = edm4eic::MutableSimPulse;
32#else
33using PulseType = edm4hep::TimeSeries;
34using MutablePulseType = edm4hep::MutableTimeSeries;
35#endif
36
37template <typename HitT> struct HitAdapter;
38
39template <> struct HitAdapter<edm4hep::SimTrackerHit> {
40 static std::tuple<double, double> getPulseSources(const edm4hep::SimTrackerHit& hit);
41#if EDM4EIC_VERSION_MAJOR > 8 || (EDM4EIC_VERSION_MAJOR == 8 && EDM4EIC_VERSION_MINOR >= 1)
42 static void addRelations(MutablePulseType& pulse, const edm4hep::SimTrackerHit& hit);
43#endif
44};
45
46template <> struct HitAdapter<edm4hep::SimCalorimeterHit> {
47 static std::tuple<double, double> getPulseSources(const edm4hep::SimCalorimeterHit& hit);
48#if EDM4EIC_VERSION_MAJOR > 8 || (EDM4EIC_VERSION_MAJOR == 8 && EDM4EIC_VERSION_MINOR >= 1)
49 static void addRelations(MutablePulseType& pulse, const edm4hep::SimCalorimeterHit& hit);
50#endif
51};
52
53template <typename HitT>
55 algorithms::Algorithm<algorithms::Input<typename HitT::collection_type>,
56 algorithms::Output<PulseType::collection_type>>;
57
58class SignalPulse;
59
60template <typename HitT>
62 public WithPodConfig<PulseGenerationConfig> {
63
64public:
65 PulseGeneration(std::string_view name)
66 : PulseGenerationAlgorithm<HitT>{name, {"RawHits"}, {"OutputPulses"}, {}} {}
67 void init() final;
68 void process(const typename PulseGenerationAlgorithm<HitT>::Input&,
69 const typename PulseGenerationAlgorithm<HitT>::Output&) const final;
70
71private:
72 std::shared_ptr<SignalPulse> m_pulse;
73 float m_min_sampling_time = 0 * edm4eic::unit::ns;
74};
75
76} // namespace eicrecon
Definition PulseGeneration.h:62
void process(const typename PulseGenerationAlgorithm< HitT >::Input &, const typename PulseGenerationAlgorithm< HitT >::Output &) const final
Definition PulseGeneration.cc:218
PulseGeneration(std::string_view name)
Definition PulseGeneration.h:65
void init() final
Definition PulseGeneration.cc:209
Definition PulseGeneration.cc:32
Definition WithPodConfig.h:22
edm4hep::TimeSeries PulseType
Definition digi_PulseGeneration.cc:29
-client
Definition CalorimeterClusterRecoCoG.cc:37
edm4hep::MutableTimeSeries MutablePulseType
Definition PulseGeneration.h:34
algorithms::Algorithm< algorithms::Input< typename HitT::collection_type >, algorithms::Output< PulseType::collection_type > > PulseGenerationAlgorithm
Definition PulseGeneration.h:56
Definition SimCalorimeterHitProcessor.cc:35
Definition PulseGeneration.h:37