File indexing completed on 2025-10-29 07:57:52
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 <edm4hep/EventHeaderCollection.h>
0020 #include <edm4hep/RawCalorimeterHitCollection.h>
0021 #include <edm4hep/SimCalorimeterHitCollection.h>
0022 #include <stdint.h>
0023 #include <functional>
0024 #include <string>
0025 #include <string_view>
0026 
0027 #include "CalorimeterHitDigiConfig.h"
0028 #include "algorithms/interfaces/UniqueIDGenSvc.h"
0029 #include "algorithms/interfaces/WithPodConfig.h"
0030 
0031 namespace eicrecon {
0032 
0033 using CalorimeterHitDigiAlgorithm = algorithms::Algorithm<
0034     algorithms::Input<edm4hep::EventHeaderCollection, edm4hep::SimCalorimeterHitCollection>,
0035     algorithms::Output<edm4hep::RawCalorimeterHitCollection,
0036                        edm4eic::MCRecoCalorimeterHitAssociationCollection>>;
0037 
0038 class CalorimeterHitDigi : public CalorimeterHitDigiAlgorithm,
0039                            public WithPodConfig<CalorimeterHitDigiConfig> {
0040 
0041 public:
0042   CalorimeterHitDigi(std::string_view name)
0043       : CalorimeterHitDigiAlgorithm{
0044             name,
0045             {"eventHeader", "inputHitCollection"},
0046             {"outputRawHitCollection", "outputRawHitAssociationCollection"},
0047             "Smear energy deposit, digitize within ADC range, add pedestal, "
0048             "convert time with smearing resolution, and sum signals."} {}
0049 
0050   void init() final;
0051   void process(const Input&, const Output&) const final;
0052 
0053 private:
0054   
0055   double stepTDC{0}, tRes{0};
0056 
0057   uint64_t id_mask{0};
0058 
0059   std::function<double(const edm4hep::SimCalorimeterHit& h)> corrMeanScale;
0060 
0061   dd4hep::IDDescriptor id_spec;
0062 
0063   enum readout_enum { kSimpleReadout, kPoissonPhotonReadout, kSipmReadout };
0064   enum readout_enum readoutType { kSimpleReadout };
0065 
0066 private:
0067   const algorithms::GeoSvc& m_geo         = algorithms::GeoSvc::instance();
0068   const algorithms::UniqueIDGenSvc& m_uid = algorithms::UniqueIDGenSvc::instance();
0069 };
0070 
0071 }