Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-09-27 07:03:00

0001 // SPDX-License-Identifier: LGPL-3.0-or-later
0002 // Copyright (C) 2022 Sylvester Joosten, Whitney Armstrong, Wouter Deconinck, Dmitry Romanov
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         // make sure we keep types consistent
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()); // @TODO: determine type codes
0039         rec_part.setEnergy(mc_particle.getEnergy());
0040         rec_part.setMomentum({px, py, pz});
0041         rec_part.setReferencePoint({vx, vy, vz}); // @FIXME: probably not what we want?
0042         rec_part.setCharge(mc_particle.getCharge());
0043         rec_part.setMass(mc_particle.getMass());
0044         rec_part.setGoodnessOfPID(1); // Perfect PID
0045         rec_part.setCovMatrix({0, 0, 0, 0});
0046         rec_part.setPDG(mc_particle.getPDG());
0047     }
0048     return std::move(rec_particles);
0049 }