File indexing completed on 2026-03-28 07:48:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #pragma once
0014
0015 #include <DD4hep/IDDescriptor.h>
0016 #include <algorithms/algorithm.h>
0017 #include <algorithms/geo.h>
0018 #include <edm4eic/MCRecoCalorimeterHitAssociationCollection.h>
0019 #include <edm4eic/EDM4eicVersion.h>
0020 #include <edm4hep/EventHeaderCollection.h>
0021 #include <edm4hep/RawCalorimeterHitCollection.h>
0022 #include <edm4hep/SimCalorimeterHitCollection.h>
0023 #include <stdint.h>
0024 #include <functional>
0025 #include <string>
0026 #include <string_view>
0027
0028 #include "CalorimeterHitDigiConfig.h"
0029 #include "algorithms/interfaces/UniqueIDGenSvc.h"
0030 #include "algorithms/interfaces/WithPodConfig.h"
0031
0032 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0033 #include <edm4eic/MCRecoCalorimeterHitLinkCollection.h>
0034 #endif
0035
0036 namespace eicrecon {
0037
0038 using CalorimeterHitDigiAlgorithm = algorithms::Algorithm<
0039 algorithms::Input<edm4hep::EventHeaderCollection, edm4hep::SimCalorimeterHitCollection>,
0040 algorithms::Output<edm4hep::RawCalorimeterHitCollection,
0041 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0042 edm4eic::MCRecoCalorimeterHitLinkCollection,
0043 #endif
0044 edm4eic::MCRecoCalorimeterHitAssociationCollection>>;
0045
0046 class CalorimeterHitDigi : public CalorimeterHitDigiAlgorithm,
0047 public WithPodConfig<CalorimeterHitDigiConfig> {
0048
0049 public:
0050 CalorimeterHitDigi(std::string_view name)
0051 : CalorimeterHitDigiAlgorithm{
0052 name,
0053 {"eventHeader", "inputHitCollection"},
0054 {"outputRawHitCollection",
0055 #if EDM4EIC_BUILD_VERSION >= EDM4EIC_VERSION(8, 7, 0)
0056 "outputHitLinks",
0057 #endif
0058 "outputRawHitAssociationCollection"},
0059 "Smear energy deposit, digitize within ADC range, add pedestal, "
0060 "convert time with smearing resolution, and sum signals."} {
0061 }
0062
0063 void init() final;
0064 void process(const Input&, const Output&) const final;
0065
0066 private:
0067
0068 double stepTDC{0}, tRes{0};
0069
0070 uint64_t id_mask{0};
0071
0072 std::function<double(const edm4hep::SimCalorimeterHit& h)> corrMeanScale;
0073
0074 dd4hep::IDDescriptor id_spec;
0075
0076 enum readout_enum { kSimpleReadout, kPoissonPhotonReadout, kSipmReadout };
0077 enum readout_enum readoutType { kSimpleReadout };
0078
0079 private:
0080 const algorithms::GeoSvc& m_geo = algorithms::GeoSvc::instance();
0081 const algorithms::UniqueIDGenSvc& m_uid = algorithms::UniqueIDGenSvc::instance();
0082 };
0083
0084 }