Warning, file /EICrecon/src/factories/pid_lut/PhaseSpacePID_factory.h was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004 #pragma once
0005
0006 #include <edm4eic/MCRecoParticleAssociationCollection.h>
0007 #include <edm4eic/ReconstructedParticleCollection.h>
0008 #include <edm4hep/MCParticleCollection.h>
0009 #include <edm4hep/ParticleIDCollection.h>
0010
0011 #include "algorithms/pid_lut/PhaseSpacePID.h"
0012 #include "extensions/jana/JOmniFactory.h"
0013 #include "services/algorithms_init/AlgorithmsInit_service.h"
0014
0015 namespace eicrecon {
0016
0017 class PhaseSpacePID_factory : public JOmniFactory<PhaseSpacePID_factory, PhaseSpacePIDConfig> {
0018 public:
0019 using AlgoT = eicrecon::PhaseSpacePID;
0020
0021 private:
0022 std::unique_ptr<AlgoT> m_algo;
0023
0024 PodioInput<edm4eic::ReconstructedParticle> m_recoparticles_input{this};
0025 PodioInput<edm4eic::MCRecoParticleAssociation> m_recoparticle_assocs_input{this};
0026 PodioOutput<edm4eic::ReconstructedParticle> m_recoparticles_output{this};
0027 PodioOutput<edm4eic::MCRecoParticleAssociation> m_recoparticle_assocs_output{this};
0028 PodioOutput<edm4hep::ParticleID> m_particleids_output{this};
0029
0030 ParameterRef<std::string> m_system{this, "system", config().system, "For the ParticleID record"};
0031 ParameterRef<std::vector<float>> m_direction{
0032 this, "direction", config().direction,
0033 "Direction vector for the phase space (default is along z-axis)"};
0034 ParameterRef<double> m_opening_angle{this, "openingAngle", config().opening_angle,
0035 "Opening angle for the phase space in radians"};
0036 ParameterRef<int> m_pdg_value{
0037 this, "pdgValue", config().pdg_value,
0038 "PDG value for the particle type to identify (default is electron)"};
0039
0040 Service<AlgorithmsInit_service> m_algorithmsInit{this};
0041
0042 public:
0043 void Configure() {
0044 m_algo = std::make_unique<AlgoT>(this->GetPrefix());
0045 m_algo->level(static_cast<algorithms::LogLevel>(logger()->level()));
0046 m_algo->applyConfig(config());
0047 m_algo->init();
0048 }
0049
0050 void Process(int32_t , uint64_t ) {
0051 m_algo->process({m_recoparticles_input(), m_recoparticle_assocs_input()},
0052 {m_recoparticles_output().get(), m_recoparticle_assocs_output().get(),
0053 m_particleids_output().get()});
0054 }
0055 };
0056
0057 }