EICrecon
JANA based reconstruction for the EPIC detector
Loading...
Searching...
No Matches
PhotoMultiplierHitDigi_factory.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-3.0-or-later
2// Copyright (C) 2022, 2023, Christopher Dilks
3
4#pragma once
5
6#include <JANA/JEvent.h>
7#include <edm4eic/MCRecoTrackerHitAssociationCollection.h>
8#include <edm4eic/EDM4eicVersion.h>
9#include <edm4eic/RawTrackerHitCollection.h>
10#include <memory>
11#include <string>
12#include <utility>
13#include <vector>
14
15// algorithms
18// JANA
20// services
25
26namespace eicrecon {
27
29 : public JOmniFactory<PhotoMultiplierHitDigi_factory, PhotoMultiplierHitDigiConfig> {
30
31public:
33
34private:
35 std::unique_ptr<AlgoT> m_algo;
36
37 PodioInput<edm4hep::EventHeader> m_event_headers_input{this};
38 PodioInput<edm4hep::SimTrackerHit> m_sim_hits_input{this};
39 PodioOutput<edm4eic::RawTrackerHit> m_raw_hits_output{this};
40#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
41 PodioOutput<edm4eic::MCRecoTrackerHitLink> m_links_output{this};
42#endif
43 PodioOutput<edm4eic::MCRecoTrackerHitAssociation> m_raw_assocs_output{this};
44
45 ParameterRef<std::string> m_detectorName{this, "detectorName", config().detectorName, ""};
46 ParameterRef<std::string> m_readoutClass{this, "readoutClass", config().readoutClass, ""};
47 ParameterRef<double> m_hitTimeWindow{this, "hitTimeWindow", config().hitTimeWindow, ""};
48 ParameterRef<double> m_timeResolution{this, "timeResolution", config().timeResolution, ""};
49 ParameterRef<double> m_speMean{this, "speMean", config().speMean, ""};
50 ParameterRef<double> m_speError{this, "speError", config().speError, ""};
51 ParameterRef<double> m_pedMean{this, "pedMean", config().pedMean, ""};
52 ParameterRef<double> m_pedError{this, "pedError", config().pedError, ""};
53 ParameterRef<bool> m_enablePixelGaps{this, "enablePixelGaps", config().enablePixelGaps,
54 "enable/disable removal of hits in gaps between pixels"};
55 ParameterRef<double> m_safetyFactor{this, "safetyFactor", config().safetyFactor,
56 "overall safety factor"};
57 ParameterRef<bool> m_enableNoise{this, "enableNoise", config().enableNoise, ""};
58 ParameterRef<double> m_noiseRate{this, "noiseRate", config().noiseRate, ""};
59 ParameterRef<double> m_noiseTimeWindow{this, "noiseTimeWindow", config().noiseTimeWindow, ""};
60 //ParameterRef<std::vector<std::pair<double, double>>> m_quantumEfficiency {this, "quantumEfficiency", config().quantumEfficiency, ""};
61
62 Service<AlgorithmsInit_service> m_algorithmsInit{this};
63 Service<RichGeo_service> m_RichGeoSvc{this};
64
65public:
66 void Configure() {
67 m_algo = std::make_unique<AlgoT>(GetPrefix());
68 m_algo->level(static_cast<algorithms::LogLevel>(logger()->level()));
69
70 // Initialize richgeo ReadoutGeo and set random CellID visitor lambda (if a RICH)
71 if (GetPluginName() == "DRICH" || GetPluginName() == "PFRICH") {
72 m_RichGeoSvc().GetReadoutGeo(config().detectorName, config().readoutClass);
73 m_algo->SetVisitRngCellIDs(
74 [this](std::function<void(PhotoMultiplierHitDigi::CellIDType)> lambda, float p) {
75 m_RichGeoSvc()
76 .GetReadoutGeo(config().detectorName, config().readoutClass)
77 ->VisitAllRngPixels(lambda, p);
78 });
79 m_algo->SetPixelGapMask(
80 [this](PhotoMultiplierHitDigi::CellIDType cellID, dd4hep::Position pos) {
81 return m_RichGeoSvc()
82 .GetReadoutGeo(config().detectorName, config().readoutClass)
83 ->PixelGapMask(cellID, pos);
84 });
85 }
86
87 m_algo->applyConfig(config());
88 m_algo->init();
89 }
90
91 void Process(int32_t /* run_number */, uint64_t /* event_number */) {
92 m_algo->process({m_event_headers_input(), m_sim_hits_input()}, {m_raw_hits_output().get(),
93#if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
94 m_links_output().get(),
95#endif
96 m_raw_assocs_output().get()});
97 }
98};
99
100} // namespace eicrecon
Definition JOmniFactory.h:30
PhotoMultiplierHitDigiConfig & config()
Retrieve reference to embedded config object.
Definition JOmniFactory.h:576
std::shared_ptr< spdlog::logger > & logger()
Retrieve reference to already-configured logger.
Definition JOmniFactory.h:573
Definition PhotoMultiplierHitDigi_factory.h:29
void Configure()
Definition PhotoMultiplierHitDigi_factory.h:66
void Process(int32_t, uint64_t)
Definition PhotoMultiplierHitDigi_factory.h:91
Definition PhotoMultiplierHitDigi.h:62
decltype(edm4hep::SimTrackerHitData::cellID) CellIDType
Definition PhotoMultiplierHitDigi.h:81
-client
Definition CalorimeterClusterRecoCoG.cc:37