Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-17 08:21:03

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2025 Minho Kim
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 /* run_number */, uint64_t /* event_number */) {
0050     m_algo->process({m_pulse_input()}, {m_digi_output().get()});
0051   }
0052 };
0053 } // namespace eicrecon