12 #include <tracking/trackFindingCDC/findlets/base/Findlet.h>
14 #include <tracking/trackFindingCDC/numerics/WeightComperator.h>
16 #include <tracking/trackFindingCDC/utilities/WeightedRelation.h>
17 #include <tracking/trackFindingCDC/utilities/Algorithms.h>
27 namespace TrackFindingCDC {
44 template <
class ACollectorItem,
class ACollectionItem>
45 class BestMatchSelector :
46 public Findlet<WeightedRelation<ACollectorItem, const ACollectionItem>> {
52 using Super = Findlet<WeightedRelation<ACollectorItem, const ACollectionItem>>;
55 void apply(std::vector<WeightedRelationItem>& weightedRelations)
override
57 std::vector<WeightedRelationItem> selectedWeightedRelations;
63 while (not weightedRelations.empty()) {
65 const auto maxElement = *(std::min_element(weightedRelations.begin(), weightedRelations.end(),
GreaterWeight()));
66 selectedWeightedRelations.push_back(maxElement);
69 return item.getFrom() == maxElement.getFrom() or item.getTo() == maxElement.getTo();
72 erase_remove_if(weightedRelations, itemSharesFromOrTo);
75 std::sort(selectedWeightedRelations.begin(), selectedWeightedRelations.end());
76 weightedRelations.swap(selectedWeightedRelations);