Belle II Software  release-08-01-10
BridgingWireHitRelationFilter Class Reference

Wire hit relation filter that is compensating for hit inefficiencies. More...

#include <BridgingWireHitRelationFilter.h>

Inheritance diagram for BridgingWireHitRelationFilter:
Collaboration diagram for BridgingWireHitRelationFilter:

Public Types

using Object = AObject
 Type of the object to be analysed.
 
using Interface = Filter< AObject >
 Mark this class as the basic interface.
 

Public Member Functions

 BridgingWireHitRelationFilter ()
 Default constructor.
 
 ~BridgingWireHitRelationFilter ()
 Default destructor.
 
void exposeParameters (ModuleParamList *moduleParamList, const std::string &prefix) override
 Expose the set of parameters of the filter to the module parameter list.
 
void initialize () override
 Receive signal at the begin of the event processing and prepare some parameters. More...
 
std::vector< CDCWireHit * > getPossibleTos (CDCWireHit *from, const std::vector< CDCWireHit * > &wireHits) const final
 Returns a vector containing the neighboring wire hits of the given wire hit out of the sorted range given by the two iterator other argumets. More...
 
virtual std::vector< CDCWireHit * > getPossibleTos (CDCWireHit *from, const std::vector< CDCWireHit * > &objects) const
 Selects the objects possibly related to the given one from the given pool of objects.
 
virtual Weight operator() (const CDCWireHit &from, const CDCWireHit &to)
 Main filter method returning the weight of the neighborhood relation. More...
 
Weight operator() (const Relation< CDCWireHit > &relation) override
 Main filter method overriding the filter interface method. More...
 
virtual Weight operator() (const Object &obj)
 Function to evaluate the object. More...
 
Weight operator() (const Object *obj)
 Function to evaluate the object. More...
 
virtual bool needsTruthInformation ()
 Indicates if the filter requires Monte Carlo information.
 
void beginRun () override
 Receive and dispatch signal for the beginning of a new run.
 
void beginEvent () override
 Receive and dispatch signal for the start of a new event.
 
void endRun () override
 Receive and dispatch signal for the end of the run.
 
void terminate () override
 Receive and dispatch Signal for termination of the event processing.
 

Protected Member Functions

void addProcessingSignalListener (ProcessingSignalListener *psl)
 Register a processing signal listener to be notified.
 
int getNProcessingSignalListener ()
 Get the number of currently registered listeners.
 

Private Types

using Super = RelationFilter< CDCWireHit >
 Type of the base class.
 

Private Attributes

std::map< int, int > m_param_missingPrimaryNeighborThresholdMap
 Parameter: A map from o'clock direction to the number of missing primary drift cells. More...
 
std::array< short, 12 > m_missingPrimaryNeighborThresholds
 Array for the number of primary drift cells to be included for the o'clock position at each index.
 
std::vector< short > m_consideredSecondaryNeighbors
 Indices of the considered o'clock positions of the secondary neighborhood.
 
std::vector< ProcessingSignalListener * > m_subordinaryProcessingSignalListeners
 References to subordinary signal processing listener contained in this findlet.
 
bool m_initialized = false
 Flag to keep track whether initialization happend before.
 
bool m_terminated = false
 Flag to keep track whether termination happend before.
 
std::string m_initializedAs
 Name of the type during initialisation.
 

Detailed Description

Wire hit relation filter that is compensating for hit inefficiencies.

The default setup counters some hits lost due to a drift time cut off if the track enters at the edge of a drift cell. The biggest effect observed in the CDC simulation was observed when the track is along the 2, 4, 8 and 10 o'clock direction since in this case two neighboring hits can be lost due to this time cut off. In an attempt to detect if this occured the primary wire hit neighborhood is slightly extended to bridge to the secondary neighborhood in the critical directions.

The criterion can be lowered such that fewer missing hits trigger the inclusion of the secondary neighbors.

Definition at line 40 of file BridgingWireHitRelationFilter.h.

Member Function Documentation

◆ getPossibleTos()

std::vector< CDCWireHit * > getPossibleTos ( CDCWireHit from,
const std::vector< CDCWireHit * > &  wireHits 
) const
final

Returns a vector containing the neighboring wire hits of the given wire hit out of the sorted range given by the two iterator other argumets.

Merge the sorted primary and secondary neighbors.

Definition at line 68 of file BridgingWireHitRelationFilter.cc.

71 {
72  assert(std::is_sorted(wireHits.begin(), wireHits.end(), LessOf<Deref>()) &&
73  "Expected wire hits to be sorted");
74 
75  std::vector<std::pair<const CDCWire*, int>> wireNeighbors;
76  wireNeighbors.reserve(8);
77 
78  std::vector<CDCWireHit*> wireHitNeighbors;
79  wireHitNeighbors.reserve(12);
80 
81  std::array<short, 12> missingPrimaryNeighbor = {0};
82 
83  const CDCWireTopology& wireTopology = CDCWireTopology::getInstance();
84 
85  const CDCWire& wire = from->getWire();
86 
87  // Analyse primary neighborhood - sorted such that the wire hits relations are most likely sorted.
88  for (short oClockDirection : {5, 7, 3, 9, 1, 11}) {
89  MayBePtr<const CDCWire> neighborWire = wireTopology.getPrimaryNeighbor(oClockDirection, wire);
90  if (neighborWire) wireNeighbors.emplace_back(neighborWire, oClockDirection);
91  }
92 
93  std::sort(std::begin(wireNeighbors), std::end(wireNeighbors));
94 
95  for (std::pair<const CDCWire*, int> wireAndOClockDirection : wireNeighbors) {
96  const CDCWire* neighborWire = wireAndOClockDirection.first;
97  int oClockDirection = wireAndOClockDirection.second;
98 
99  ConstVectorRange<CDCWireHit*> wireHitRange{
100  std::equal_range(wireHits.begin(), wireHits.end(), neighborWire, LessOf<Deref>())};
101  if (wireHitRange.empty()) {
102  int ccwOClockDirection = oClockDirection - 1;
103  int cwOClockDirection = oClockDirection == 11 ? 0 : oClockDirection + 1;
104  ++missingPrimaryNeighbor[ccwOClockDirection];
105  ++missingPrimaryNeighbor[oClockDirection];
106  ++missingPrimaryNeighbor[cwOClockDirection];
107  }
108  wireHitNeighbors.insert(wireHitNeighbors.end(), wireHitRange.begin(), wireHitRange.end());
109  }
110 
111  size_t nPrimaryWireHitNeighbors = wireHitNeighbors.size();
112  wireNeighbors.clear();
113 
114  // Analyse secondary neighborhood
115  for (short oClockDirection : m_consideredSecondaryNeighbors) {
116  MayBePtr<const CDCWire> neighborWire = wireTopology.getSecondaryNeighbor(oClockDirection, wire);
117  if (not neighborWire) continue;
118  if (missingPrimaryNeighbor[oClockDirection] <
119  m_missingPrimaryNeighborThresholds[oClockDirection])
120  continue;
121  wireNeighbors.emplace_back(neighborWire, oClockDirection);
122  }
123 
124  std::sort(std::begin(wireNeighbors), std::end(wireNeighbors));
125 
126  for (std::pair<const CDCWire*, int> wireAndOClockDirection : wireNeighbors) {
127  const CDCWire* neighborWire = wireAndOClockDirection.first;
128  ConstVectorRange<CDCWireHit*> wireHitRange{
129  std::equal_range(wireHits.begin(), wireHits.end(), neighborWire, LessOf<Deref>())};
130  wireHitNeighbors.insert(wireHitNeighbors.end(), wireHitRange.begin(), wireHitRange.end());
131  }
132 
134  std::inplace_merge(wireHitNeighbors.begin(),
135  wireHitNeighbors.begin() + nPrimaryWireHitNeighbors,
136  wireHitNeighbors.end(),
137  std::less<CDCWireHit*>());
138 
139  return wireHitNeighbors;
140 }
std::array< short, 12 > m_missingPrimaryNeighborThresholds
Array for the number of primary drift cells to be included for the o'clock position at each index.
std::vector< short > m_consideredSecondaryNeighbors
Indices of the considered o'clock positions of the secondary neighborhood.
Class representating the sense wire arrangement in the whole of the central drift chamber.
MayBePtr< const CDCWire > getSecondaryNeighbor(short oClockDirection, const WireID &wireID) const
Getter for the secondary neighbor of the given wire id.
MayBePtr< const CDCWire > getPrimaryNeighbor(short oClockDirection, const WireID &wireID) const
Getter for the primary neighbor of the given wire id.
static CDCWireTopology & getInstance()
Getter for the singleton instance of the wire topology.
Class representing a sense wire in the central drift chamber.
Definition: CDCWire.h:58
A pair of iterators usable with the range base for loop.
Definition: Range.h:25
std::size_t size() const
Returns the total number of objects in this range.
Definition: Range.h:76
Functor factory turning a binary functor and two functors into a new functor which executes the binar...
Definition: Functional.h:127

◆ initialize()

void initialize ( void  )
overridevirtual

Receive signal at the begin of the event processing and prepare some parameters.

Prepare the lookup such that it turns out most likely sorted.

Reimplemented from ProcessingSignalListener.

Definition at line 49 of file BridgingWireHitRelationFilter.cc.

◆ operator()() [1/4]

Weight operator() ( const CDCWireHit from,
const CDCWireHit to 
)
virtualinherited

Main filter method returning the weight of the neighborhood relation.

Return always returns NAN to reject all segment neighbors.

Definition at line 44 of file RelationFilter.icc.h.

◆ operator()() [2/4]

◆ operator()() [3/4]

Weight operator() ( const Object obj)
inherited

Function to evaluate the object.

Base implementation accepts all objects, except nullptr.

Parameters
objThe object to be accepted or rejected.
Returns
A finit float value if the object is accepted. NAN if the object is rejected. Nullptr is always rejected.

Definition at line 58 of file Filter.icc.h.

◆ operator()() [4/4]

Weight operator() ( const Relation< CDCWireHit > &  relation)
overrideinherited

Main filter method overriding the filter interface method.

Checks the validity of the pointers in the relation and unpacks the relation to the method implementing the rejection.

Definition at line 51 of file RelationFilter.icc.h.

Member Data Documentation

◆ m_param_missingPrimaryNeighborThresholdMap

std::map<int, int> m_param_missingPrimaryNeighborThresholdMap
private
Initial value:
=
{{0, 2}, {2, 2}, {4, 2}, {6, 2}, {8, 2}, {10, 2}}

Parameter: A map from o'clock direction to the number of missing primary drift cells.

Definition at line 68 of file BridgingWireHitRelationFilter.h.


The documentation for this class was generated from the following files: