File indexing completed on 2025-06-06 08:35:08
0001
0002
0003
0004 #pragma once
0005
0006 #include <DD4hep/IDDescriptor.h>
0007 #include <algorithms/algorithm.h>
0008 #include <algorithms/geo.h>
0009 #include <edm4hep/CaloHitContributionCollection.h>
0010 #include <edm4hep/SimCalorimeterHitCollection.h>
0011 #include <cstdint>
0012 #include <optional>
0013 #include <string>
0014 #include <string_view>
0015
0016 #include "SimCalorimeterHitProcessorConfig.h"
0017 #include "algorithms/interfaces/WithPodConfig.h"
0018
0019 namespace eicrecon {
0020
0021 using SimCalorimeterHitProcessorAlgorithm =
0022 algorithms::Algorithm<algorithms::Input<edm4hep::SimCalorimeterHitCollection>,
0023 algorithms::Output<edm4hep::SimCalorimeterHitCollection,
0024 edm4hep::CaloHitContributionCollection>>;
0025
0026 class SimCalorimeterHitProcessor : public SimCalorimeterHitProcessorAlgorithm,
0027 public WithPodConfig<SimCalorimeterHitProcessorConfig> {
0028
0029 public:
0030 SimCalorimeterHitProcessor(std::string_view name)
0031 : SimCalorimeterHitProcessorAlgorithm{
0032 name,
0033 {"inputHitCollection"},
0034 {"outputHitCollection", "outputHitContributionCollection"},
0035 "Regroup the hits by particle, add up the hits if"
0036 "they have e z-segmentation, and attenuate."} {}
0037
0038 void init() final;
0039 void process(const Input&, const Output&) const final;
0040
0041 private:
0042 std::optional<uint64_t> m_hit_id_mask;
0043 std::optional<uint64_t> m_contribution_id_mask;
0044
0045 dd4hep::IDDescriptor m_id_spec;
0046
0047 const algorithms::GeoSvc& m_geo = algorithms::GeoSvc::instance();
0048
0049
0050 std::optional<double> m_attenuationReferencePosition;
0051
0052 private:
0053
0054 double get_attenuation(double zpos) const;
0055 };
0056
0057 }