File indexing completed on 2024-09-27 07:03:00
0001
0002
0003
0004 #include "MC2SmearedParticle.h"
0005
0006 #include <edm4eic/ReconstructedParticleCollection.h>
0007 #include <edm4hep/Vector3d.h>
0008 #include <edm4hep/Vector3f.h>
0009 #include <fmt/core.h>
0010 #include <utility>
0011
0012
0013 void eicrecon::MC2SmearedParticle::init(std::shared_ptr<spdlog::logger> logger) {
0014 m_log = logger;
0015 }
0016
0017 std::unique_ptr<edm4eic::ReconstructedParticleCollection> eicrecon::MC2SmearedParticle::produce(const edm4hep::MCParticleCollection* mc_particles) {
0018 auto rec_particles = std::make_unique<edm4eic::ReconstructedParticleCollection>();
0019 for (const auto& mc_particle: *mc_particles) {
0020
0021 if (mc_particle.getGeneratorStatus() != 1) {
0022 m_log->debug("ignoring particle with generatorStatus = {}", mc_particle.getGeneratorStatus());
0023 continue;
0024 }
0025
0026
0027 using MomType = decltype(edm4eic::ReconstructedParticle().getMomentum().x);
0028
0029 const MomType px = mc_particle.getMomentum().x;
0030 const MomType py = mc_particle.getMomentum().y;
0031 const MomType pz = mc_particle.getMomentum().z;
0032
0033 const MomType vx = mc_particle.getVertex().x;
0034 const MomType vy = mc_particle.getVertex().y;
0035 const MomType vz = mc_particle.getVertex().z;
0036
0037 auto rec_part = rec_particles->create();
0038 rec_part.setType(mc_particle.getGeneratorStatus());
0039 rec_part.setEnergy(mc_particle.getEnergy());
0040 rec_part.setMomentum({px, py, pz});
0041 rec_part.setReferencePoint({vx, vy, vz});
0042 rec_part.setCharge(mc_particle.getCharge());
0043 rec_part.setMass(mc_particle.getMass());
0044 rec_part.setGoodnessOfPID(1);
0045 rec_part.setCovMatrix({0, 0, 0, 0});
0046 rec_part.setPDG(mc_particle.getPDG());
0047 }
0048 return std::move(rec_particles);
0049 }