37 if (not testPair or not rlWireHit or not track)
return false;
40 const CDCTrajectory2D& trajectory2D = track->getStartTrajectory3D().getTrajectory2D();
46 const double size = track->size();
47 const ROOT::Math::XYZVector& reconstructedPosition = recoHit3D.
getRecoPos3D();
51 const ERightLeft rlInformation = rlWireHit->
getRLInfo();
52 const double backArcLength2D = track->back().getArcLength2D();
53 const double frontArcLength2D = track->front().getArcLength2D();
54 const double arcLength2DSum = std::accumulate(track->begin(), track->end(), 0.0, [](
const double sum,
55 const CDCRecoHit3D & listRecoHit) { return sum + listRecoHit.getArcLength2D();});
58 ROOT::Math::XYVector wirePos = wire.
getWirePos2DAtZ(reconstructedPosition.z());
59 ROOT::Math::XYVector disp2D = VectorUtil::getXYVector(reconstructedPosition) - wirePos;
60 const double xyDistance = disp2D.R();
62 const auto nearestAxialHit = std::min_element(track->begin(), track->end(), [&reconstructedS](
const CDCRecoHit3D & lhs,
64 return std::abs(lhs.getArcLength2D() - reconstructedS) < std::abs(rhs.getArcLength2D() - reconstructedS);
69 var<
named(
"reco_s")>() = toFinite(reconstructedS, 0);
70 var<
named(
"reco_z")>() = toFinite(reconstructedPosition.z(), 0);
71 var<
named(
"phi_track")>() = toFinite(startMomentum.Phi(), 0);
72 var<
named(
"phi_hit")>() = reconstructedPosition.Phi();
73 var<
named(
"theta_hit")>() = reconstructedPosition.Theta();
74 var<
named(
"drift_length")>() = reconstructedDriftLength;
75 var<
named(
"adc_count")>() = adcCount;
76 var<
named(
"xy_distance_zero_z")>() = toFinite(xyDistance, 0);
77 var<
named(
"right_hit")>() = rlInformation == ERightLeft::c_Right;
78 var<
named(
"track_back_s")>() = toFinite(backArcLength2D, 0);
79 var<
named(
"track_front_s")>() = toFinite(frontArcLength2D, 0);
80 var<
named(
"track_mean_s")>() = toFinite(arcLength2DSum / size, 0);
81 var<
named(
"s_distance")>() = toFinite(nearestAxialHit->getArcLength2D() - reconstructedS, 0);
82 var<
named(
"track_radius")>() = toFinite(radius, 0);