File indexing completed on 2026-04-17 07:50:40
0001
0002
0003
0004 #pragma once
0005
0006 #include "algorithms/digi/CALOROCDigitization.h"
0007 #include "services/algorithms_init/AlgorithmsInit_service.h"
0008 #include "extensions/jana/JOmniFactory.h"
0009
0010 namespace eicrecon {
0011
0012 class CALOROCDigitization_factory
0013 : public JOmniFactory<CALOROCDigitization_factory, CALOROCDigitizationConfig> {
0014
0015 public:
0016 using AlgoT = eicrecon::CALOROCDigitization;
0017
0018 private:
0019 std::unique_ptr<AlgoT> m_algo;
0020
0021 PodioInput<edm4eic::SimPulse> m_pulse_input{this};
0022 PodioOutput<edm4eic::RawCALOROCHit> m_digi_output{this};
0023
0024 ParameterRef<double> m_time_window{this, "timeWindow", config().time_window};
0025 ParameterRef<double> m_adc_phase{this, "adcPhase", config().adc_phase};
0026 ParameterRef<double> m_toa_thres{this, "toaThres", config().toa_thres};
0027 ParameterRef<double> m_tot_thres{this, "totThres", config().tot_thres};
0028 ParameterRef<unsigned int> m_capADC{this, "capADC", config().capADC};
0029 ParameterRef<double> m_dyRangeSingleGainADC{this, "dyRangeSingleGainADC",
0030 config().dyRangeSingleGainADC};
0031 ParameterRef<double> m_dyRangeHighGainADC{this, "dyRangeHighGainADC",
0032 config().dyRangeHighGainADC};
0033 ParameterRef<double> m_dyRangeLowGainADC{this, "dyRangeLowGainADC", config().dyRangeLowGainADC};
0034 ParameterRef<unsigned int> m_capTOA{this, "capTOA", config().capTOA};
0035 ParameterRef<double> m_dyRangeTOA{this, "dyRangeTOA", config().dyRangeTOA};
0036 ParameterRef<unsigned int> m_capTOT{this, "capTOT", config().capTOT};
0037 ParameterRef<double> m_dyRangeTOT{this, "dyRangeTOT", config().dyRangeTOT};
0038
0039 Service<AlgorithmsInit_service> m_algorithmsInit{this};
0040
0041 public:
0042 void Configure() {
0043 m_algo = std::make_unique<AlgoT>(GetPrefix());
0044 m_algo->level(static_cast<algorithms::LogLevel>(logger()->level()));
0045 m_algo->applyConfig(config());
0046 m_algo->init();
0047 }
0048
0049 void Process(int32_t , uint64_t ) {
0050 m_algo->process({m_pulse_input()}, {m_digi_output().get()});
0051 }
0052 };
0053 }