31 edm4hep::ParticleIDCollection& out_pids,
32 bool sort_by_likelihood =
false) {
39 std::pair<std::size_t,
decltype(edm4eic::CherenkovParticleIDHypothesis::weight)>;
40 std::vector<HypIndex> hyp_indices;
41 for (std::size_t hyp_index = 0; hyp_index < in_pid.hypotheses_size(); hyp_index++)
42 hyp_indices.push_back(HypIndex{hyp_index, in_pid.getHypotheses(hyp_index).weight});
45 if (sort_by_likelihood)
46 std::sort(hyp_indices.begin(), hyp_indices.end(),
47 [](HypIndex& a, HypIndex& b) { return a.second > b.second; });
50 for (
const auto& [hyp_index, hyp_weight] : hyp_indices) {
53 auto in_hyp = in_pid.getHypotheses(hyp_index);
56 auto out_index = out_pids.size();
57 auto out_pid = out_pids.create();
58 out_indices.insert({out_index, out_pid.getObjectID().index});
61 out_pid.setPDG(
static_cast<decltype(edm4hep::ParticleIDData::PDG)
>(in_hyp.PDG));
62 out_pid.setLikelihood(
63 static_cast<decltype(edm4hep::ParticleIDData::likelihood)
>(in_hyp.weight));
65 static_cast<decltype(edm4hep::ParticleIDData::type)
>(0));
66 out_pid.setAlgorithmType(
67 static_cast<decltype(edm4hep::ParticleIDData::algorithmType)
>(0));
70 out_pid.addToParameters(
static_cast<float>(in_hyp.npe));