Belle II Software development
TrackSZFitter.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/trackFindingCDC/findlets/minimal/TrackSZFitter.h>
9
10#include <tracking/trackingUtilities/eventdata/tracks/CDCTrack.h>
11#include <tracking/trackFindingCDC/fitting/CDCSZFitter.h>
12#include <tracking/trackFindingCDC/fitting/CDCAxialStereoFusion.h>
13
14#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
15
16#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit3D.h>
17#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit2D.h>
18
19#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectory3D.h>
20#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectory2D.h>
21#include <tracking/trackingUtilities/eventdata/trajectories/CDCTrajectorySZ.h>
22
23#include <tracking/trackingUtilities/geometry/UncertainHelix.h>
24
25#include <Math/Vector2D.h>
26
27#include <vector>
28
29using namespace Belle2;
30using namespace TrackFindingCDC;
31using namespace TrackingUtilities;
32
34{
35 return "Use an SZFitter to create the 3D trajectory out of the 2D one.";
36}
37
38void TrackSZFitter::apply(std::vector<CDCTrack>& tracks)
39{
40 // Postprocess each track (=fit)
41 for (CDCTrack& track : tracks) {
42 const CDCSZFitter& szFitter = CDCSZFitter::getFitter();
43
44 track.shiftToPositiveArcLengths2D();
45 track.sortByArcLength2D();
46
47 CDCTrajectory2D originalTrajectory2D = track.getStartTrajectory3D().getTrajectory2D();
48 ROOT::Math::XYVector localOrigin = originalTrajectory2D.getLocalOrigin();
49
50 const CDCTrajectorySZ& szTrajectory = szFitter.fitWithStereoHits(track);
51 CDCTrajectory3D preliminaryTrajectory3D{originalTrajectory2D, szTrajectory};
52 track.setStartTrajectory3D(preliminaryTrajectory3D);
53
54 // Estimate a better covariance matrix
55 CDCAxialStereoFusion axialStereoFusionFitter;
56 CDCSegment2D axialSegment2D;
57 CDCSegment2D stereoSegment2D;
58 for (const CDCRecoHit3D& recoHit3D : track) {
59 if (recoHit3D.isAxial()) {
60 axialSegment2D.push_back(recoHit3D.getRecoHit2D());
61 } else {
62 stereoSegment2D.push_back(recoHit3D.getRecoHit2D());
63 }
64 if ((axialSegment2D.size() > 6) and (stereoSegment2D.size() > 6)) break;
65 }
66
67 if (not((axialSegment2D.size() > 6) and (stereoSegment2D.size() > 6))) continue;
68
69 CDCTrajectory3D trajectory3D =
70 axialStereoFusionFitter.reconstructFuseTrajectories(axialSegment2D, stereoSegment2D, preliminaryTrajectory3D);
71 trajectory3D.setLocalOrigin({localOrigin.X(), localOrigin.Y(), 0});
72
73 // Copy only the covariance matrix, chi2 and ndf over for a conservative introduction for the moment.
74 UncertainHelix preliminaryUncertainHelix = preliminaryTrajectory3D.getLocalHelix();
75 UncertainHelix uncertainHelix = trajectory3D.getLocalHelix();
76
77 preliminaryUncertainHelix.setHelixCovariance(uncertainHelix.helixCovariance());
78 preliminaryUncertainHelix.setChi2(uncertainHelix.chi2());
79 preliminaryUncertainHelix.setNDF(uncertainHelix.ndf());
80 preliminaryTrajectory3D.setLocalHelix(preliminaryUncertainHelix);
81
82 track.setStartTrajectory3D(preliminaryTrajectory3D);
83 }
84}
Utility class implementing the Kalmanesk combination of to two dimensional trajectories to one three ...
void reconstructFuseTrajectories(const TrackingUtilities::CDCSegmentPair &segmentPair)
Combine the two trajectories of the segments in the pair and assign the resulting three dimensional t...
Class implementing the z coordinate over travel distance line fit.
Definition CDCSZFitter.h:29
TrackingUtilities::CDCTrajectorySZ fitWithStereoHits(const TrackingUtilities::CDCTrack &track) const
Returns the fitted sz trajectory of the track with the z-information of all stereo hits of the number...
static const CDCSZFitter & getFitter()
Getter for a standard sz line fitter instance.
void apply(std::vector< TrackingUtilities::CDCTrack > &tracks) final
Fit the tracks.
std::string getDescription() final
Short description of the findlet.
Class representing a three dimensional reconstructed hit.
A reconstructed sequence of two dimensional hits in one super layer.
Class representing a sequence of three dimensional reconstructed hits.
Definition CDCTrack.h:37
Particle trajectory as it is seen in xy projection represented as a circle.
const ROOT::Math::XYVector & getLocalOrigin() const
Getter for the origin of the local coordinate system.
Particle full three dimensional trajectory.
double setLocalOrigin(const ROOT::Math::XYZVector &localOrigin)
Setter for the origin of the local coordinate system.
const UncertainHelix & getLocalHelix() const
Getter for the helix in local coordinates.
This class represents an ideal helix in perigee parameterization including the covariance matrix of t...
Abstract base class for different kinds of events.