8#include <tracking/trackFindingCDC/filters/segmentRelation/BaseSegmentRelationFilter.h>
10#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
11#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit2D.h>
12#include <tracking/trackingUtilities/eventdata/hits/CDCWireHit.h>
14#include <tracking/trackingUtilities/filters/base/RelationFilter.icc.h>
16#include <tracking/trackingUtilities/numerics/Weight.h>
18#include <tracking/trackingUtilities/utilities/Relation.h>
19#include <tracking/trackingUtilities/utilities/VectorRange.h>
21#include <tracking/trackingUtilities/utilities/Functional.h>
28using namespace TrackFindingCDC;
29using namespace TrackingUtilities;
39 const std::vector<const CDCSegment2D*>& segments)
const
41 assert(std::is_sorted(segments.begin(), segments.end(), LessOf<Deref>()) &&
42 "Expected segments to be sorted");
44 ConstVectorRange<const CDCSegment2D*> tos{
45 std::equal_range(segments.begin(), segments.end(), from, LessOf<Deref>())};
47 return {tos.begin(), tos.end()};
54 if (from == to)
return NAN;
55 if ((from ==
nullptr) or (to ==
nullptr))
return NAN;
58 std::vector<const CDCWireHit*> fromWireHits;
59 fromWireHits.reserve(from->size());
61 fromWireHits.push_back(&recoHit2D.getWireHit());
63 std::sort(fromWireHits.begin(), fromWireHits.end());
66 if (std::binary_search(fromWireHits.begin(), fromWireHits.end(), &recoHit2D.getWireHit())) {
71 if (1.0 * nOverlap / from->size() > 0.8) {
virtual ~BaseSegmentRelationFilter()
Default destructor.
std::vector< const TrackingUtilities::CDCSegment2D * > getPossibleTos(const TrackingUtilities::CDCSegment2D *from, const std::vector< const TrackingUtilities::CDCSegment2D * > &segments) const final
Returns all equivalent segment in the range.
TrackingUtilities::Weight operator()(const TrackingUtilities::Relation< const TrackingUtilities::CDCSegment2D > &relation) override
Main filter method overriding the filter interface method.
BaseSegmentRelationFilter()
Default constructor.
Class representing a two dimensional reconstructed hit in the central drift chamber.
A reconstructed sequence of two dimensional hits in one super layer.
Base class for filtering the neighborhood of objects.
Type for two related objects.
From * getFrom() const
Getter for the pointer to the from side object.
To * getTo() const
Getter for the pointer to the to side object.
Abstract base class for different kinds of events.