Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-06-06 08:35:08

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2025 Minho Kim, Sylvester Joosten, Derek Anderson, Wouter Deconinck
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   // a reference value for attenuation
0050   std::optional<double> m_attenuationReferencePosition;
0051 
0052 private:
0053   // attenuation function
0054   double get_attenuation(double zpos) const;
0055 };
0056 
0057 } // namespace eicrecon