Belle II Software  release-08-01-10
FourHitFilter.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 #include <tracking/vxdHoughTracking/filters/pathFilters/FourHitFilter.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>
13 
14 using namespace Belle2;
15 using namespace TrackFindingCDC;
16 using namespace vxdHoughTracking;
17 
18 void FourHitFilter::exposeParameters(ModuleParamList* moduleParamList, const std::string& prefix)
19 {
20  moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "circleRadiusDifferenceCut"), m_CircleRadiusDifferenceCut,
21  "Cut on the difference of the radii of the two circles that can be defined by two hit triplets.",
22  m_CircleRadiusDifferenceCut);
23 
24  moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix, "circleCenterPositionDifferenceCut"),
25  m_CircleCenterPositionDifferenceCut,
26  "Cut on the difference between the center positions of the two circles that can be defined by two hit triplets.",
27  m_CircleCenterPositionDifferenceCut);
28 }
29 
30 void FourHitFilter::beginRun()
31 {
32  const double bFieldZ = BFieldManager::getField(0, 0, 0).Z() / Unit::T;
33  m_fourHitVariables.setBFieldZ(bFieldZ);
34 }
35 
36 TrackFindingCDC::Weight
37 FourHitFilter::operator()(const BasePathFilter::Object& pair)
38 {
39  const std::vector<TrackFindingCDC::WithWeight<const VXDHoughState*>>& previousHits = pair.first;
40 
41  // Do nothing if path is too short or too long
42  if (previousHits.size() != 3) {
43  return NAN;
44  }
45 
46  const B2Vector3D& firstHitPos = previousHits.at(0)->getHit()->getPosition();
47  const B2Vector3D& secondHitPos = previousHits.at(1)->getHit()->getPosition();
48  const B2Vector3D& thirdHitPos = previousHits.at(2)->getHit()->getPosition();
49  const B2Vector3D& currentHitPos = pair.second->getHit()->getPosition();
50 
51  m_fourHitVariables.setHits(firstHitPos, secondHitPos, thirdHitPos, currentHitPos);
52 
53  if (m_fourHitVariables.getCircleRadiusDifference() > m_CircleRadiusDifferenceCut) {
54  return NAN;
55  }
56  if (m_fourHitVariables.getCircleCenterPositionDifference() > m_CircleCenterPositionDifferenceCut) {
57  return NAN;
58  }
59 
60  return fabs(1.0 / m_fourHitVariables.getCircleRadiusDifference());
61 }
The Module parameter list class.
AObject Object
Type of the object to be analysed.
Definition: Filter.dcl.h:33
static const double T
[tesla]
Definition: Unit.h:120
void addParameter(const std::string &name, T &paramVariable, 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!)
Definition: B2Vector3.h:751
static void getField(const double *pos, double *field)
return the magnetic field at a given position.
Definition: BFieldManager.h:91
Abstract base class for different kinds of events.