23 return StatusCode::SUCCESS;
29 std::vector<const xAOD::AFPTrack*> trackNearContainer;
30 const int nearId =
m_side + 1;
31 std::copy_if(trackContainer->begin(), trackContainer->end(), std::back_inserter(trackNearContainer),
32 [&nearId](
auto track) { return track->stationID() == nearId; });
35 std::vector<const xAOD::AFPTrack*> trackFarContainer;
36 const int farId = 3 *
m_side;
37 std::copy_if(trackContainer->begin(), trackContainer->end(), std::back_inserter(trackFarContainer),
38 [&farId](
auto track) { return track->stationID() == farId; });
45 bool foundMatchingTrack =
false;
49 const double dx = trackFar->xLocal() - trackNear->xLocal();
50 const double dy = trackFar->yLocal() - trackNear->yLocal();
51 const double r2 = dx*dx + dy*dy;
53 if (r2 > trackDistanceRadiusSq) {
55 "Tracks too far away from each other (xNear, yNear; xFar, yFar; distance) [mm]: "
56 << trackNear->xLocal() <<
", " << trackNear->yLocal() <<
"; "
57 << trackFar->xLocal() <<
", " << trackFar->yLocal() <<
"; " << r2);
68 foundMatchingTrack =
true;
90 return StatusCode::SUCCESS;
98 if ( std::any_of(begin(momentum), end(momentum), [](
auto& el) {
return !std::isfinite(el); }) )
101 const auto [px, py, pz] = momentum;
103 auto * proton = outputContainer->push_back(std::make_unique<xAOD::AFPProton>());
106 constexpr double protonMass = 0.938;
108 proton->setPxPyPzE(px, py, pz, sqrt(px*px + py*py + pz*pz + protonMass*protonMass));
109 proton->setChi2(
chi2(px, py, pz, my_measAFP));
111 proton->setMethodID(algID);
113 ATH_MSG_DEBUG(
"Reconstructed proton (px, py, pz): " << proton->px() <<
", " << proton->py() <<
", " << proton->pz()<<
", chi2 "<<proton->chi2()<<
", side "<<proton->side());
xAOD::AFPProton * createProton(const Momentum &momentum, const Measurement &my_measAFP, const int algID, std::unique_ptr< xAOD::AFPProtonContainer > &outputContainer) const
Creates and sets up a proton.
bool toContainedElement(BaseConstReference data, ElementType element, IProxyDict *sg=0)
Set from element pointer and a reference to the container (storable)