Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2023, Christopher Dilks
0003 
0004 // Merge CherenkovParticleID results from each radiator, for a given Cherenkov PID subsystem
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 // algorithms
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   // Underlying algorithm
0027   using AlgoT = eicrecon::MergeParticleID;
0028   std::unique_ptr<AlgoT> m_algo;
0029 
0030   // Declare inputs
0031   VariadicPodioInput<edm4eic::CherenkovParticleID> m_particleID_input{this};
0032 
0033   // Declare outputs
0034   PodioOutput<edm4eic::CherenkovParticleID> m_particleID_output{this};
0035 
0036   // Declare parameters
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 /* run_number */) {}
0048 
0049   void Process(int32_t /* run_number */, uint64_t /* event_number */) {
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 } // namespace eicrecon