85 std::vector<Super::WeightedRelationItem>& relationsForCollector)
93 const CDCTrajectory2D& trajectory2D = track.getStartTrajectory3D().getTrajectory2D();
94 const bool isCurler = trajectory2D.
isCurler();
96 using CDCRecoHitWithRLPointer = std::pair<CDCRecoHit3D, const CDCRLWireHit*>;
97 std::vector<CDCRecoHitWithRLPointer> recoHits;
98 recoHits.reserve(rlWireHits.size() + track.size());
105 if (rlWireHit.getWireHit().getAutomatonCell().hasTakenFlag())
continue;
107 const CDCWire& wire = rlWireHit.getWire();
109 double signedDriftLength = rlWireHit.getSignedRefDriftLength();
112 for (
const double recoZ : trajectory2D.
reconstructBothZ(wireLine, signedDriftLength)) {
130 recoHits.emplace_back(
CDCRecoHit3D(rlWireHit, recoPos3D, perpS), &rlWireHit);
136 if (not recoHit.isAxial()) {
137 recoHit.getWireHit().getAutomatonCell().setAssignedFlag();
139 recoHits.emplace_back(recoHit, &rlWireHit);
153 if (foundStereoHitsWithNode.size() != 1) {
158 auto foundStereoHits = foundStereoHitsWithNode[0].second;
159 const auto& node = foundStereoHitsWithNode[0].first;
162 std::vector<CDCRecoHit3D> allHits;
163 std::vector<CDCRecoHit3D> foundHits;
165 for (
const CDCRecoHitWithRLPointer& recoHitWithRL : recoHits) {
167 allHits.push_back(recoHit3D);
169 for (
const CDCRecoHitWithRLPointer& recoHitWithRL : foundStereoHits) {
171 foundHits.push_back(recoHit3D);
177 const auto& isAssignedHit = [](
const CDCRecoHitWithRLPointer & recoHitWithRLPointer) {
178 const CDCRecoHit3D& recoHit3D = recoHitWithRLPointer.first;
183 foundStereoHits.erase(std::remove_if(foundStereoHits.begin(),
184 foundStereoHits.end(),
186 foundStereoHits.end());
189 auto sortByHitAndNodeCenterDistance = [node](
const CDCRecoHitWithRLPointer & lhs,
190 const CDCRecoHitWithRLPointer & rhs) {
199 if (lhsWireHit < rhsWireHit) {
201 }
else if (rhsWireHit < lhsWireHit) {
204 return AQuadTree::DecisionAlgorithm::BoxAlgorithm::compareDistances(node, lhsRecoHit, rhsRecoHit);
208 const auto& sameHitComparer = [](
const CDCRecoHitWithRLPointer & lhs,
209 const CDCRecoHitWithRLPointer & rhs) {
216 std::sort(foundStereoHits.begin(),
217 foundStereoHits.end(),
218 sortByHitAndNodeCenterDistance);
221 foundStereoHits.erase(std::unique(foundStereoHits.begin(),
222 foundStereoHits.end(),
224 foundStereoHits.end());
227 for (
const CDCRecoHitWithRLPointer& recoHitWithRLPointer : foundStereoHits) {
228 const CDCRLWireHit* rlWireHit = recoHitWithRLPointer.second;
229 relationsForCollector.emplace_back(&track, foundStereoHits.size(), rlWireHit);