83 std::vector<Super::WeightedRelationItem>& relationsForCollector)
91 const CDCTrajectory2D& trajectory2D = track.getStartTrajectory3D().getTrajectory2D();
92 const bool isCurler = trajectory2D.
isCurler();
94 using CDCRecoHitWithRLPointer = std::pair<CDCRecoHit3D, const CDCRLWireHit*>;
95 std::vector<CDCRecoHitWithRLPointer> recoHits;
96 recoHits.reserve(rlWireHits.size() + track.size());
103 if (rlWireHit.getWireHit().getAutomatonCell().hasTakenFlag())
continue;
105 const CDCWire& wire = rlWireHit.getWire();
107 double signedDriftLength = rlWireHit.getSignedRefDriftLength();
124 recoHits.emplace_back(
CDCRecoHit3D(rlWireHit, recoPos3D, perpS), &rlWireHit);
130 if (not recoHit.isAxial()) {
131 recoHit.getWireHit().getAutomatonCell().setAssignedFlag();
133 recoHits.emplace_back(recoHit, &rlWireHit);
147 if (foundStereoHitsWithNode.size() != 1) {
152 auto foundStereoHits = foundStereoHitsWithNode[0].second;
153 const auto& node = foundStereoHitsWithNode[0].first;
156 std::vector<CDCRecoHit3D> allHits;
157 std::vector<CDCRecoHit3D> foundHits;
159 for (
const CDCRecoHitWithRLPointer& recoHitWithRL : recoHits) {
161 allHits.push_back(recoHit3D);
163 for (
const CDCRecoHitWithRLPointer& recoHitWithRL : foundStereoHits) {
165 foundHits.push_back(recoHit3D);
171 const auto& isAssignedHit = [](
const CDCRecoHitWithRLPointer & recoHitWithRLPointer) {
172 const CDCRecoHit3D& recoHit3D = recoHitWithRLPointer.first;
177 foundStereoHits.erase(std::remove_if(foundStereoHits.begin(),
178 foundStereoHits.end(),
180 foundStereoHits.end());
183 auto sortByHitAndNodeCenterDistance = [node](
const CDCRecoHitWithRLPointer & lhs,
184 const CDCRecoHitWithRLPointer & rhs) {
193 if (lhsWireHit < rhsWireHit) {
195 }
else if (rhsWireHit < lhsWireHit) {
198 return AQuadTree::DecisionAlgorithm::BoxAlgorithm::compareDistances(node, lhsRecoHit, rhsRecoHit);
202 const auto& sameHitComparer = [](
const CDCRecoHitWithRLPointer & lhs,
203 const CDCRecoHitWithRLPointer & rhs) {
210 std::sort(foundStereoHits.begin(),
211 foundStereoHits.end(),
212 sortByHitAndNodeCenterDistance);
215 foundStereoHits.erase(std::unique(foundStereoHits.begin(),
216 foundStereoHits.end(),
218 foundStereoHits.end());
221 for (
const CDCRecoHitWithRLPointer& recoHitWithRLPointer : foundStereoHits) {
222 const CDCRLWireHit* rlWireHit = recoHitWithRLPointer.second;
223 relationsForCollector.emplace_back(&track, foundStereoHits.size(), rlWireHit);