68 for (
auto& curVtx: ge.vertices()) {
69 if (curVtx->particles_in().size()!=1 || curVtx->particles_out().size()!=1) {
continue; }
70 const int pdgIn=curVtx->particles_in().front()->pdg_id();
71 const int pdgOut=curVtx->particles_out().front()->pdg_id();
73 std::find(pdgCodesBegin, pdgCodesEnd, std::abs(pdgIn))== pdgCodesEnd) {
77 if(!nextVtx) {
continue; }
78 ATH_MSG_DEBUG(
"Found a vertex to correct with incoming PDG code = " << pdgIn);
81 HepMC::Print::line(nextVtx);
86 const HepMC::FourVector &nextVec = (nextVtx->has_set_position()) ? nextVtx->position() : HepMC::FourVector::ZERO_VECTOR();
87 const CLHEP::HepLorentzVector nextPos( nextVec.x(), nextVec.y(), nextVec.z(), nextVec.t() );
90 HepMC::Print::line(curVtx);
96 HepMC::Print::line(prevVtx);
101 const HepMC::FourVector &prevVec = (prevVtx->has_set_position()) ? prevVtx->position() : HepMC::FourVector::ZERO_VECTOR();
102 const CLHEP::HepLorentzVector prevPos( prevVec.x(), prevVec.y(), prevVec.z(), prevVec.t() );
103 CLHEP::HepLorentzVector newPos = 0.5*(prevPos+nextPos);
104 curVtx->set_position(
HepMC::FourVector(newPos.x(),newPos.y(),newPos.z(),newPos.t()));
107 HepMC::Print::line(curVtx);
111 CLHEP::HepLorentzVector newPos = nextPos;
112 curVtx->set_position(
HepMC::FourVector(newPos.x(),newPos.y(),newPos.z(),newPos.t()));
115 HepMC::Print::line(curVtx);
120 return StatusCode::SUCCESS;