17#include <DD4hep/Detector.h>
18#include <DD4hep/Objects.h>
19#include <DDRec/CellIDPositionConverter.h>
20#include <Math/GenVector/Cartesian3D.h>
21#include <Math/GenVector/DisplacementVector3D.h>
22#include <algorithms/algorithm.h>
23#include <algorithms/geo.h>
24#include <edm4eic/EDM4eicVersion.h>
25#include <edm4eic/MCRecoTrackerHitAssociationCollection.h>
26#include <edm4eic/RawTrackerHitCollection.h>
27#include <edm4hep/EventHeaderCollection.h>
28#include <edm4hep/SimTrackerHitCollection.h>
29#include <fmt/format.h>
33#include <gsl/pointers>
39#include <unordered_map>
47#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
48#include <edm4eic/MCRecoTrackerHitLinkCollection.h>
54 algorithms::Input<edm4hep::EventHeaderCollection, edm4hep::SimTrackerHitCollection>,
55 algorithms::Output<edm4eic::RawTrackerHitCollection,
56#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
57 edm4eic::MCRecoTrackerHitLinkCollection,
59 edm4eic::MCRecoTrackerHitAssociationCollection>>;
67 {
"eventHeaderCollection",
"inputHitCollection"},
68 {
"outputRawHitCollection",
69#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
72 "outputRawHitAssociations"},
73 "Digitize within ADC range, add pedestal, convert time "
74 "with smearing resolution."} {
78 void process(const Input&, const Output&) const final;
81 using
CellIDType = decltype(edm4hep::SimTrackerHitData::cellID);
82 using
TimeType = decltype(edm4hep::SimTrackerHitData::time);
96 m_VisitRngCellIDs = visitor;
103 m_PixelGapMask = mask;
108 std::function<void(std::function<
void(
CellIDType)>,
float)> m_VisitRngCellIDs =
113 std::function<bool(
CellIDType, dd4hep::Position)> m_PixelGapMask =
115 throw std::runtime_error(
"pixel gap cuts enabled, but none defined");
121 void InsertHit(std::unordered_map<CellIDType, std::vector<HitData>>& hit_groups, CellIDType
id,
122 double amp, TimeType time, std::size_t sim_hit_index,
123 std::default_random_engine& generator, std::normal_distribution<double>& gaussian,
124 bool is_noise_hit =
false)
const;
126 const dd4hep::Detector* m_detector{algorithms::GeoSvc::instance().detector()};
127 const dd4hep::rec::CellIDPositionConverter* m_converter{
128 algorithms::GeoSvc::instance().cellIDPositionConverter()};
135 std::vector<std::pair<double, double>> qeff;
137 template <
class RndmIter,
typename T,
class Compare>
138 RndmIter interval_search(RndmIter beg, RndmIter end,
const T& val, Compare comp)
const;
139 bool qe_pass(
double ev,
double rand)
const;
Definition UniqueIDGenSvc.h:23
Definition PhotoMultiplierHitDigi.h:62
PhotoMultiplierHitDigi(std::string_view name)
Definition PhotoMultiplierHitDigi.h:65
void SetPixelGapMask(std::function< bool(CellIDType, dd4hep::Position)> mask)
Definition PhotoMultiplierHitDigi.h:102
decltype(edm4hep::SimTrackerHitData::time) TimeType
Definition PhotoMultiplierHitDigi.h:82
decltype(edm4hep::SimTrackerHitData::cellID) CellIDType
Definition PhotoMultiplierHitDigi.h:81
void SetVisitRngCellIDs(std::function< void(std::function< void(CellIDType)>, float)> visitor)
Definition PhotoMultiplierHitDigi.h:95
Definition WithPodConfig.h:22
-client
Definition CalorimeterClusterRecoCoG.cc:37
algorithms::Algorithm< algorithms::Input< edm4hep::EventHeaderCollection, edm4hep::SimTrackerHitCollection >, algorithms::Output< edm4eic::RawTrackerHitCollection, edm4eic::MCRecoTrackerHitLinkCollection, edm4eic::MCRecoTrackerHitAssociationCollection > > PhotoMultiplierHitDigiAlgorithm
Definition PhotoMultiplierHitDigi.h:59
Definition PhotoMultiplierHitDigi.h:85
TimeType time
Definition PhotoMultiplierHitDigi.h:88
std::vector< std::size_t > sim_hit_indices
Definition PhotoMultiplierHitDigi.h:89
uint32_t npe
Definition PhotoMultiplierHitDigi.h:86
double signal
Definition PhotoMultiplierHitDigi.h:87