Belle II Software  release-05-01-25
AxialStraightTrackCreator.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Dmitrii Neverov *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 #include <tracking/trackFindingCDC/findlets/minimal/AxialStraightTrackCreator.h>
12 
13 #include <mdst/dataobjects/ECLCluster.h>
14 #include <tracking/trackFindingCDC/geometry/Vector2D.h>
15 #include <tracking/trackFindingCDC/geometry/UncertainPerigeeCircle.h>
16 #include <tracking/trackFindingCDC/fitting/CDCRiemannFitter.h>
17 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectorySZ.h>
18 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
19 #include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
20 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
21 
22 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
23 
24 #include <framework/core/ModuleParamList.templateDetails.h>
25 
26 using namespace Belle2;
27 using namespace TrackFindingCDC;
28 
30 
32 {
33  return "A findlet looking for straight tracks between IP and reconstructed ECL clusters.";
34 }
35 
37  const std::string& prefix)
38 {
39  moduleParamList->addParameter(prefixed(prefix, "minEnergy"),
41  "Parameter to define minimal threshold of ECL cluster energy.",
43  moduleParamList->addParameter(prefixed(prefix, "minNHits"),
45  "Parameter to define minimal threshold of track number of hits.",
47  moduleParamList->addParameter(prefixed(prefix, "maxDistance"),
49  "Parameter to define maximal threshold of hit distance to a line IP - ECL cluster.",
51 }
52 
54 {
56 }
57 
58 void AxialStraightTrackCreator::apply(const std::vector<const ECLCluster*>& eclClusters,
59  const std::vector<const CDCWireHit*>& axialWireHits,
60  std::vector<CDCTrack>& tracks)
61 {
62  for (const ECLCluster* cluster : eclClusters) {
63  if (!cluster->hasHypothesis(ECLCluster::EHypothesisBit::c_nPhotons)) continue;
64  if (cluster->getEnergy(ECLCluster::EHypothesisBit::c_nPhotons) < m_param_minEnergy) continue;
65  float phi = cluster->getPhi();
66  UncertainPerigeeCircle circle(0, Vector2D::Phi(phi), 0); //no covariance matrix (yet?)
67  CDCTrajectory2D guidingTrajectory2D(circle);
68  CDCTrack track;
69  guidingTrajectory2D.setLocalOrigin(Vector2D(0, 0));
70  std::vector<const CDCWireHit*> foundHits = search(axialWireHits, guidingTrajectory2D);
71  if (foundHits.size() < m_param_minNHits) continue;
72  // Fit trajectory
73  const CDCRiemannFitter& fitter = CDCRiemannFitter::getFitter(true, true);
74  CDCTrajectory2D trajectory2D = fitter.fit(foundHits);
75  track.setStartTrajectory3D(CDCTrajectory3D(trajectory2D, CDCTrajectorySZ::basicAssumption()));
76 
77  // Reconstruct and add hits
78  for (const CDCWireHit* wireHit : foundHits) {
79  CDCRecoHit3D recoHit3D = CDCRecoHit3D::reconstructNearest(wireHit, trajectory2D);
80  track.push_back(std::move(recoHit3D));
81  }
82  track.sortByArcLength2D();
83  tracks.emplace_back(std::move(track));
84  }
85 }
86 
87 std::vector<const CDCWireHit*> AxialStraightTrackCreator::search(const std::vector<const CDCWireHit*>& axialWireHits,
88  const CDCTrajectory2D& guidingTrajectory2D)
89 {
90  std::vector<const CDCWireHit*> foundHits;
91  for (const CDCWireHit* hit : axialWireHits) {
92  const Vector2D point = hit->reconstruct2D(guidingTrajectory2D);
93  float arc = guidingTrajectory2D.calcArcLength2D(point);
94  if (arc < 0) continue; // No b2b tracks
95  float distance = guidingTrajectory2D.getDist2D(point);
96  if (std::fabs(distance) < m_param_maxDistance) {
97  foundHits.push_back(hit);
98  }
99  }
100  return foundHits;
101 }
Belle2::TrackFindingCDC::CDCRecoHit3D
Class representing a three dimensional reconstructed hit.
Definition: CDCRecoHit3D.h:62
Belle2::TrackFindingCDC::CDCRiemannFitter
Class implementing the Riemann fit for two dimensional trajectory circle.
Definition: CDCRiemannFitter.h:34
Belle2::TrackFindingCDC::CDCTrack
Class representing a sequence of three dimensional reconstructed hits.
Definition: CDCTrack.h:51
Belle2::TrackFindingCDC::Vector2D
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:37
Belle2::ECLCluster
ECL cluster data.
Definition: ECLCluster.h:39
Belle2::TrackFindingCDC::CDCTrajectory2D::setLocalOrigin
double setLocalOrigin(const Vector2D &localOrigin)
Setter for the origin of the local coordinate system.
Definition: CDCTrajectory2D.cc:357
Belle2::TrackFindingCDC::CDCTrajectorySZ::basicAssumption
static CDCTrajectorySZ basicAssumption()
Constucts a basic assumption, what the z0 start position and the sz slope are, including some broad v...
Definition: CDCTrajectorySZ.cc:29
Belle2::ECLCluster::EHypothesisBit::c_nPhotons
@ c_nPhotons
CR is split into n photons (N1)
Belle2::TrackFindingCDC::AxialStraightTrackCreator::apply
void apply(const std::vector< const ECLCluster * > &eclClusters, const std::vector< const CDCWireHit * > &axialWireHits, std::vector< CDCTrack > &tracks) final
Execute one pass over given clusters and wirehits and create tracks.
Definition: AxialStraightTrackCreator.cc:58
Belle2::TrackFindingCDC::CDCTrajectory2D
Particle trajectory as it is seen in xy projection represented as a circle.
Definition: CDCTrajectory2D.h:46
Belle2::TrackFindingCDC::CompositeProcessingSignalListener::initialize
void initialize() override
Receive and dispatch signal before the start of the event processing.
Definition: CompositeProcessingSignalListener.cc:17
Belle2::TrackFindingCDC::CDCRecoHit3D::reconstructNearest
static CDCRecoHit3D reconstructNearest(const CDCWireHit *axialWireHit, const CDCTrajectory2D &trajectory2D)
Reconstruct a three dimensional hit from a wire hit (as in reconstruct(rlWireHit, trajectory2D)),...
Definition: CDCRecoHit3D.cc:132
Belle2::TrackFindingCDC::AxialStraightTrackCreator::getDescription
std::string getDescription() final
Short description of the findlet.
Definition: AxialStraightTrackCreator.cc:31
Belle2::TrackFindingCDC::Vector2D::Phi
static Vector2D Phi(const double phi)
Constucts a unit vector with azimuth angle equal to phi.
Definition: Vector2D.h:73
Belle2::TrackFindingCDC::UncertainPerigeeCircle
Adds an uncertainty matrix to the circle in perigee parameterisation.
Definition: UncertainPerigeeCircle.h:39
Belle2::ModuleParamList::addParameter
void addParameter(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module list.
Definition: ModuleParamList.templateDetails.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::AxialStraightTrackCreator::m_param_minEnergy
float m_param_minEnergy
ECL cluster energy threshold.
Definition: AxialStraightTrackCreator.h:69
Belle2::TrackFindingCDC::AxialStraightTrackCreator::search
std::vector< const CDCWireHit * > search(const std::vector< const CDCWireHit * > &axialWireHits, const CDCTrajectory2D &guidingTrajectory2D)
Search for hits compatible with given trajectory.
Definition: AxialStraightTrackCreator.cc:87
Belle2::TrackFindingCDC::AxialStraightTrackCreator::m_param_minNHits
unsigned int m_param_minNHits
Track number of hits threshold.
Definition: AxialStraightTrackCreator.h:72
Belle2::TrackFindingCDC::AxialStraightTrackCreator::initialize
void initialize() final
Initialisation before the event processing starts.
Definition: AxialStraightTrackCreator.cc:53
Belle2::TrackFindingCDC::AxialStraightTrackCreator::m_param_maxDistance
float m_param_maxDistance
Maximum distance from hits to the track.
Definition: AxialStraightTrackCreator.h:75
Belle2::TrackFindingCDC::CDCRiemannFitter::getFitter
static const CDCRiemannFitter & getFitter()
Static getter for a general Riemann fitter.
Definition: CDCRiemannFitter.cc:22
Belle2::TrackFindingCDC::AxialStraightTrackCreator::AxialStraightTrackCreator
AxialStraightTrackCreator()
Constructor.
Belle2::TrackFindingCDC::CDCTrajectory2D::getDist2D
double getDist2D(const Vector2D &point) const
Calculates the distance from the point to the trajectory as seen from the xy projection.
Definition: CDCTrajectory2D.h:419
Belle2::TrackFindingCDC::AxialStraightTrackCreator::exposeParameters
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) final
Expose the parameters to a module.
Definition: AxialStraightTrackCreator.cc:36
Belle2::TrackFindingCDC::CDCWireHit
Class representing a hit wire in the central drift chamber.
Definition: CDCWireHit.h:65
Belle2::ModuleParamList
The Module parameter list class.
Definition: ModuleParamList.h:46
Belle2::TrackFindingCDC::CDCTrajectory2D::calcArcLength2D
double calcArcLength2D(const Vector2D &point) const
Calculate the travel distance from the start position of the trajectory.
Definition: CDCTrajectory2D.h:270
Belle2::TrackFindingCDC::CDCTrajectory3D
Particle full three dimensional trajectory.
Definition: CDCTrajectory3D.h:47