File indexing completed on 2025-06-06 08:35:12
0001
0002
0003
0004
0005
0006 #pragma once
0007
0008 #include <JANA/JEvent.h>
0009 #include <edm4eic/CherenkovParticleIDCollection.h>
0010 #include <memory>
0011 #include <string>
0012 #include <utility>
0013 #include <vector>
0014
0015
0016 #include "algorithms/pid/MergeParticleID.h"
0017 #include "algorithms/pid/MergeParticleIDConfig.h"
0018 #include "extensions/jana/JOmniFactory.h"
0019
0020 namespace eicrecon {
0021
0022 class MergeCherenkovParticleID_factory
0023 : public JOmniFactory<MergeCherenkovParticleID_factory, MergeParticleIDConfig> {
0024
0025 private:
0026
0027 using AlgoT = eicrecon::MergeParticleID;
0028 std::unique_ptr<AlgoT> m_algo;
0029
0030
0031 VariadicPodioInput<edm4eic::CherenkovParticleID> m_particleID_input{this};
0032
0033
0034 PodioOutput<edm4eic::CherenkovParticleID> m_particleID_output{this};
0035
0036
0037 ParameterRef<int> m_mergeMode{this, "mergeMode", config().mergeMode};
0038
0039 public:
0040 void Configure() {
0041 m_algo = std::make_unique<AlgoT>(GetPrefix());
0042 m_algo->level(static_cast<algorithms::LogLevel>(logger()->level()));
0043 m_algo->applyConfig(config());
0044 m_algo->init();
0045 }
0046
0047 void ChangeRun(int32_t ) {}
0048
0049 void Process(int32_t , uint64_t ) {
0050 auto in1 = m_particleID_input();
0051 std::vector<gsl::not_null<const edm4eic::CherenkovParticleIDCollection*>> in2;
0052 std::copy(in1.cbegin(), in1.cend(), std::back_inserter(in2));
0053 m_algo->process({in2}, {m_particleID_output().get()});
0054 }
0055 };
0056 }