21 ldmx_log(debug) <<
"preparing event";
22 const auto& scoring_plane_hits{
24 std::unordered_map<int, std::vector<const ldmx::SimTrackerHit*>>
26 for (
const auto& hit : scoring_plane_hits) {
32 ldmx_log(trace) <<
"hit with plane = " <<
id.plane() <<
" is "
33 << (keep ?
"used" :
"ignored");
36 hits_by_track_id[hit.getTrackID()].push_back(&hit);
42 for (
auto& [track_id, hits] : hits_by_track_id) {
43 auto earliest_hit_it = std::min_element(
44 hits.begin(), hits.end(), [](
const auto& hit_lhs,
const auto& hit_rhs) {
45 return hit_lhs->getTime() < hit_rhs->getTime();
47 const auto* earliest_hit = (*earliest_hit_it);
49 G4PrimaryParticle* particle =
new G4PrimaryParticle;
51 particle->SetPDGcode(earliest_hit->getPdgID());
53 auto momentum{earliest_hit->getMomentum()};
54 auto energy{earliest_hit->getEnergy()};
55 particle->Set4Momentum(momentum[0], momentum[1], momentum[2], energy);
57 particle->SetProperTime(earliest_hit->getTime());
61 particle->SetUserInformation(uppi);
68 auto pos{earliest_hit->getPosition()};
69 G4PrimaryVertex* vertex =
new G4PrimaryVertex;
70 vertex->SetPosition(pos[0], pos[1], pos[2]);
72 vertex->SetPrimary(particle);