12 #include <tracking/trackFindingCDC/collectors/matchers/MatcherInterface.h>
14 #include <tracking/trackFindingCDC/ca/AutomatonCell.h>
24 namespace TrackFindingCDC {
33 template <
class ACollectorItem,
class ACollectionItem>
34 class SharingHitsMatcher :
public MatcherInterface<ACollectorItem, ACollectionItem> {
37 using Super = MatcherInterface<ACollectorItem, ACollectionItem>;
47 void apply(std::vector<ACollectorItem>& collectorItems,
const std::vector<ACollectionItem>& collectionItems,
48 std::vector<typename Super::WeightedRelationItem>& weightedRelations)
override
51 for (
const ACollectionItem& collectionItem : collectionItems) {
52 const AutomatonCell& automatonCell = collectionItem.getAutomatonCell();
54 if (automatonCell.
hasTakenFlag() or collectionItem.empty()) {
58 for (
const auto& hit : collectionItem) {
61 m_hitLookup.insert(std::make_pair(&wireHit, &collectionItem));
65 Super::apply(collectorItems, collectionItems, weightedRelations);
73 void match(ACollectorItem& collectorItem,
const std::vector<ACollectionItem>& collectionItems,
74 std::vector<typename Super::WeightedRelationItem>& relationsForCollector)
override
76 std::map<const ACollectionItem*, unsigned int> numberOfIntersectionsMap;
79 for (
const ACollectionItem& collectionItem : collectionItems) {
80 numberOfIntersectionsMap[&collectionItem] = 0;
84 for (
const auto& hit : collectorItem) {
88 const auto& relatedCollectionItems =
m_hitLookup.equal_range(&wireHit);
90 for (
auto& relatedCollectionItemIterator : asRange(relatedCollectionItems)) {
91 const ACollectionItem* collectionItem = relatedCollectionItemIterator.second;
92 numberOfIntersectionsMap[collectionItem] += 1;
97 for (
const auto& collectionWithIntersections : numberOfIntersectionsMap) {
98 const ACollectionItem* collectionItem = collectionWithIntersections.first;
99 unsigned int numberOfIntersections = collectionWithIntersections.second;
101 relationsForCollector.emplace_back(&collectorItem, numberOfIntersections, collectionItem);
106 std::multimap<const CDCWireHit*, const ACollectionItem*>
m_hitLookup;