8 #include <tracking/vxdHoughTracking/filters/pathFilters/ThreeHitFilter.h>
9 #include <tracking/trackFindingCDC/filters/base/Filter.icc.h>
10 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
11 #include <framework/core/ModuleParamList.templateDetails.h>
12 #include <framework/geometry/BFieldManager.h>
15 using namespace TrackFindingCDC;
16 using namespace vxdHoughTracking;
18 void ThreeHitFilter::exposeParameters(
ModuleParamList* moduleParamList,
const std::string& prefix)
20 moduleParamList->
addParameter(TrackFindingCDC::prefixed(prefix,
"cosRZCut"), m_cosRZCut,
21 "Cut on the absolute value of cosine between the vectors (oHit - cHit) and (cHit - iHit).",
23 moduleParamList->
addParameter(TrackFindingCDC::prefixed(prefix,
"circleIPDistanceCut"), m_circleIPDistanceCut,
24 "Cut on the difference between circle radius and circle center to check whether the circle is compatible with passing through the IP.",
25 m_circleIPDistanceCut);
28 void ThreeHitFilter::beginRun()
31 m_threeHitVariables.setBFieldZ(bFieldZ);
34 TrackFindingCDC::Weight
37 const std::vector<TrackFindingCDC::WithWeight<const VXDHoughState*>>& previousHits = pair.first;
40 if (previousHits.size() != 2) {
44 const B2Vector3D& firstHitPos = previousHits.
at(0)->getHit()->getPosition();
45 const B2Vector3D& secondHitPos = previousHits.
at(1)->getHit()->getPosition();
46 const B2Vector3D& currentHitPos = pair.second->getHit()->getPosition();
48 m_threeHitVariables.setHits(firstHitPos, secondHitPos, currentHitPos);
50 if (m_threeHitVariables.getCosAngleRZSimple() < m_cosRZCut) {
54 const double circleDistanceIP = m_threeHitVariables.getCircleDistanceIP();
56 if (circleDistanceIP > m_circleIPDistanceCut) {
60 return fabs(1.0 / circleDistanceIP);
The Module parameter list class.
AObject Object
Type of the object to be analysed.
static const double T
[tesla]
void addParameter(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
DataType at(unsigned i) const
safe member access (with boundary check!)
static void getField(const double *pos, double *field)
return the magnetic field at a given position.
Abstract base class for different kinds of events.