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();
126 recoHits.emplace_back(
CDCRecoHit3D(rlWireHit, recoPos3D, perpS), &rlWireHit);
132 if (not recoHit.isAxial()) {
133 recoHit.getWireHit().getAutomatonCell().setAssignedFlag();
135 recoHits.emplace_back(recoHit, &rlWireHit);
149 if (foundStereoHitsWithNode.size() != 1) {
154 auto foundStereoHits = foundStereoHitsWithNode[0].second;
155 const auto& node = foundStereoHitsWithNode[0].first;
158 std::vector<CDCRecoHit3D> allHits;
159 std::vector<CDCRecoHit3D> foundHits;
161 for (
const CDCRecoHitWithRLPointer& recoHitWithRL : recoHits) {
163 allHits.push_back(recoHit3D);
165 for (
const CDCRecoHitWithRLPointer& recoHitWithRL : foundStereoHits) {
167 foundHits.push_back(recoHit3D);
173 const auto& isAssignedHit = [](
const CDCRecoHitWithRLPointer & recoHitWithRLPointer) {
174 const CDCRecoHit3D& recoHit3D = recoHitWithRLPointer.first;
179 foundStereoHits.erase(std::remove_if(foundStereoHits.begin(),
180 foundStereoHits.end(),
182 foundStereoHits.end());
185 auto sortByHitAndNodeCenterDistance = [node](
const CDCRecoHitWithRLPointer & lhs,
186 const CDCRecoHitWithRLPointer & rhs) {
195 if (lhsWireHit < rhsWireHit) {
197 }
else if (rhsWireHit < lhsWireHit) {
200 return AQuadTree::DecisionAlgorithm::BoxAlgorithm::compareDistances(node, lhsRecoHit, rhsRecoHit);
204 const auto& sameHitComparer = [](
const CDCRecoHitWithRLPointer & lhs,
205 const CDCRecoHitWithRLPointer & rhs) {
212 std::sort(foundStereoHits.begin(),
213 foundStereoHits.end(),
214 sortByHitAndNodeCenterDistance);
217 foundStereoHits.erase(std::unique(foundStereoHits.begin(),
218 foundStereoHits.end(),
220 foundStereoHits.end());
223 for (
const CDCRecoHitWithRLPointer& recoHitWithRLPointer : foundStereoHits) {
224 const CDCRLWireHit* rlWireHit = recoHitWithRLPointer.second;
225 relationsForCollector.emplace_back(&track, foundStereoHits.size(), rlWireHit);