Belle II Software  release-05-01-25
FitlessSegmentPairVarSet.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2015 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/trackFindingCDC/filters/segmentPair/FitlessSegmentPairVarSet.h>
11 
12 #include <tracking/trackFindingCDC/eventdata/tracks/CDCSegmentPair.h>
13 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
14 
15 #include <tracking/trackFindingCDC/topology/CDCWire.h>
16 
17 #include <tracking/trackFindingCDC/numerics/Angle.h>
18 
19 using namespace Belle2;
20 using namespace TrackFindingCDC;
21 
23 {
24  if (not ptrSegmentPair) return false;
25 
26  const CDCSegmentPair& segmentPair = *ptrSegmentPair;
27 
28  const CDCSegment2D* ptrFromSegment = segmentPair.getFromSegment();
29  const CDCSegment2D* ptrToSegment = segmentPair.getToSegment();
30 
31  const CDCSegment2D& fromSegment = *ptrFromSegment;
32  const CDCSegment2D& toSegment = *ptrToSegment;
33 
34  const CDCSegment2D* ptrAxialSegment = segmentPair.getAxialSegment();
35  const CDCSegment2D& axialSegment = *ptrAxialSegment;
36 
37  const CDCSegment2D* ptrStereoSegment = segmentPair.getStereoSegment();
38  const CDCSegment2D& stereoSegment = *ptrStereoSegment;
39 
40  // Segment fit should have been done at this point
41  const CDCTrajectory2D& fromFit = fromSegment.getTrajectory2D();
42  const CDCTrajectory2D& toFit = toSegment.getTrajectory2D();
43  const CDCTrajectory2D& axialFit = axialSegment.getTrajectory2D();
44  // const CDCTrajectory2D& stereoFit = stereoSegment.getTrajectory2D();
45 
46  finitevar<named("from_ndf")>() = fromFit.getNDF();
47  finitevar<named("to_ndf")>() = toFit.getNDF();
48 
49  finitevar<named("from_chi2_over_ndf")>() = fabs(fromFit.getChi2() / fromFit.getNDF());
50  finitevar<named("to_chi2_over_ndf")>() = fabs(toFit.getChi2() / toFit.getNDF());
51 
52  finitevar<named("from_p_value")>() = fromFit.getPValue();
53  finitevar<named("to_p_value")>() = toFit.getPValue();
54 
55  // Direction agreement
56  using namespace NPerigeeParameterIndices;
57  const double fromCurv = fromFit.isFitted() ? fromFit.getCurvature() : NAN;
58  const double fromCurvVar = fromFit.getLocalVariance(c_Curv);
59 
60  const double toCurv = toFit.isFitted() ? toFit.getCurvature() : NAN;
61  const double toCurvVar = toFit.getLocalVariance(c_Curv);
62 
63  const double deltaCurvVar = fromCurvVar + toCurvVar;
64  const double avgPrecision = 1 / fromCurvVar + 1 / toCurvVar;
65  const double deltaCurvSigma = std::sqrt(deltaCurvVar);
66 
67  finitevar<named("abs_avg_curv")>() = std::fabs(toCurv / toCurvVar + fromCurv / fromCurvVar) / avgPrecision;
68  finitevar<named("delta_curv_var")>() = deltaCurvVar;
69  finitevar<named("delta_curv")>() = toCurv - fromCurv;
70  finitevar<named("delta_curv_pull")>() = (toCurv - fromCurv) / deltaCurvSigma;
71 
72  // Hits
73  const CDCRecoHit2D& fromFirstHit = fromSegment.front();
74  const CDCRecoHit2D& fromLastHit = fromSegment.back();
75  const CDCRecoHit2D& toFirstHit = toSegment.front();
76  const CDCRecoHit2D& toLastHit = toSegment.back();
77 
78  const Vector2D fromHitPos = fromLastHit.getRecoPos2D();
79  const Vector2D toHitPos = toFirstHit.getRecoPos2D();
80 
81  // Fit
82  const Vector2D fromFitPos = fromFit.getClosest(fromHitPos);
83  const Vector2D toFitPos = toFit.getClosest(toHitPos);
84  const Vector2D fromFitMom = fromFit.getFlightDirection2D(fromHitPos);
85  const Vector2D toFitMom = toFit.getFlightDirection2D(toHitPos);
86 
87  const Vector2D fromOtherFitMom = toFit.getFlightDirection2D(fromHitPos);
88  const Vector2D toOtherFitMom = fromFit.getFlightDirection2D(toHitPos);
89 
90  const double deltaPosPhi = fromFitPos.angleWith(toFitPos);
91  const double deltaMomPhi = fromFitMom.angleWith(toFitMom);
92  const double deltaAlpha = AngleUtil::normalised(deltaMomPhi - deltaPosPhi);
93 
94  finitevar<named("delta_pos_phi")>() = deltaPosPhi;
95  finitevar<named("delta_mom_phi")>() = deltaMomPhi;
96 
97  finitevar<named("from_delta_mom_phi")>() = fromFitMom.angleWith(fromOtherFitMom);
98  finitevar<named("to_delta_mom_phi")>() = toFitMom.angleWith(toOtherFitMom);
99  finitevar<named("delta_alpha")>() = deltaAlpha;
100 
101  // Reconstructed quantities
102  // One of the fitted positions corresponds to the axial hit and one to the stereo hit.
103  const CDCRecoHit2D& nearAxialHit = toFirstHit.isAxial() ? toFirstHit : fromLastHit;
104  const CDCRecoHit2D& farStereoHit = not fromFirstHit.isAxial() ? fromFirstHit : toLastHit;
105  const CDCRecoHit2D& nearStereoHit = not toFirstHit.isAxial() ? toFirstHit : fromLastHit;
106 
107  const CDCWire& farStereoWire = farStereoHit.getWire();
108  const WireLine& farWireLine = farStereoWire.getWireLine();
109 
110  const CDCWire& nearStereoWire = nearStereoHit.getWire();
111  const WireLine& nearWireLine = nearStereoWire.getWireLine();
112 
113  const Vector3D nearAxialRecoPos = nearAxialHit.reconstruct3D(axialFit);
114  const Vector3D farStereoRecoPos = farStereoHit.reconstruct3D(axialFit);
115  const double farZ = farStereoRecoPos.z();
116 
117  const Vector3D nearStereoRecoPos = nearStereoHit.reconstruct3D(axialFit);
118  const double nearZ = nearStereoRecoPos.z();
119 
120  const double stereoArcLength2D =
121  axialFit.calcArcLength2DBetween(nearStereoRecoPos.xy(),
122  farStereoRecoPos.xy());
123 
124  const double arcLength2DGap =
125  axialFit.calcArcLength2DBetween(nearAxialRecoPos.xy(),
126  nearStereoRecoPos.xy());
127 
128  finitevar<named("reco_arc_length_gap")>() = fabs(arcLength2DGap);
129  finitevar<named("stereo_arc_length")>() = fabs(stereoArcLength2D);
130 
131  finitevar<named("near_reco_z")>() = nearZ;
132  finitevar<named("near_z_bound_factor")>() = nearWireLine.outOfZBoundsFactor(nearZ);
133 
134  finitevar<named("far_reco_z")>() = farZ;
135  finitevar<named("far_z_bound_factor")>() = farWireLine.outOfZBoundsFactor(farZ);
136 
137  finitevar<named("coarse_tanl")>() = (farZ - nearZ) / stereoArcLength2D;
138 
139  finitevar<named("stereo_rel_size")>() = fabs(stereoSegment.size() / stereoArcLength2D);
140 
141  finitevar<named("arc_length_front_offset")>() =
142  (fromFit.getArcLength2DFrontOffset(fromSegment, toSegment)
143  + toFit.getArcLength2DFrontOffset(fromSegment, toSegment)) / 2;
144 
145  finitevar<named("arc_length_back_offset")>() =
146  (fromFit.getArcLength2DBackOffset(fromSegment, toSegment)
147  + toFit.getArcLength2DBackOffset(fromSegment, toSegment)) / 2;
148 
149  finitevar<named("from_arc_length_total")>() = toFit.getTotalArcLength2D(fromSegment);
150  finitevar<named("to_arc_length_total")>() = fromFit.getTotalArcLength2D(toSegment);
151 
152  finitevar<named("arc_length_gap")>() =
153  (fromFit.getArcLength2DGap(fromSegment, toSegment)
154  + toFit.getArcLength2DGap(fromSegment, toSegment)) / 2;
155 
156  return true;
157 }
Belle2::TrackFindingCDC::CDCSegmentPair::getStereoSegment
const CDCSegment2D * getStereoSegment() const
Getter for the stereo segment.
Definition: CDCSegmentPair.h:144
Belle2::TrackFindingCDC::CDCTrajectory2D::getPValue
double getPValue() const
Getter for p-value.
Definition: CDCTrajectory2D.h:472
Belle2::TrackFindingCDC::CDCTrajectory2D::getArcLength2DFrontOffset
double getArcLength2DFrontOffset(const AFromHits &fromHits, const AToHits &toHits) const
Calculates the perpendicular travel distance from the first position of the fromHits to the first pos...
Definition: CDCTrajectory2D.h:232
Belle2::TrackFindingCDC::CDCTrajectory2D::getTotalArcLength2D
double getTotalArcLength2D(const AHits &hits) const
Calculates the perpendicular travel distance from the first position of the hits to the last position...
Definition: CDCTrajectory2D.h:254
Belle2::TrackFindingCDC::CDCTrajectory2D::getNDF
size_t getNDF() const
Getter for the number of degrees of freedom of the circle fit.
Definition: CDCTrajectory2D.h:490
Belle2::TrackFindingCDC::CDCSegmentPair
Class representing a pair of one reconstructed axial segement and one stereo segment in adjacent supe...
Definition: CDCSegmentPair.h:44
Belle2::TrackFindingCDC::Vector2D
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:37
Belle2::TrackFindingCDC::CDCRecoHit2D::getRecoPos2D
Vector2D getRecoPos2D() const
Getter for the position in the reference plane.
Definition: CDCRecoHit2D.h:248
Belle2::TrackFindingCDC::VarSet< FitlessSegmentPairVarNames >::finitevar
AssignFinite< Float_t > finitevar()
Reference getter for the value of the ith variable. Transforms non-finite values to finite value.
Definition: VarSet.h:140
Belle2::TrackFindingCDC::CDCTrajectory2D::getCurvature
double getCurvature() const
Getter for the curvature as seen from the xy projection.
Definition: CDCTrajectory2D.h:432
Belle2::TrackFindingCDC::CDCTrajectory2D::getClosest
Vector2D getClosest(const Vector2D &point) const
Calculates the closest approach on the trajectory to the given point.
Definition: CDCTrajectory2D.cc:173
Belle2::TrackFindingCDC::CDCTrajectory2D::getLocalVariance
double getLocalVariance(EPerigeeParameter i) const
Getter for an individual diagonal element of the covariance matrix of the local helix parameters.
Definition: CDCTrajectory2D.h:445
Belle2::TrackFindingCDC::CDCTrajectory2D::getChi2
double getChi2() const
Getter for the chi2 value of the circle fit.
Definition: CDCTrajectory2D.h:478
Belle2::TrackFindingCDC::CDCTrajectory2D
Particle trajectory as it is seen in xy projection represented as a circle.
Definition: CDCTrajectory2D.h:46
Belle2::TrackFindingCDC::CDCSegmentPair::getToSegment
const CDCSegment2D * getToSegment() const
Getter for the to segment.
Definition: CDCSegmentPair.h:132
Belle2::TrackFindingCDC::FitlessSegmentPairVarSet::extract
bool extract(const CDCSegmentPair *ptrSegmentPair) final
Generate and assign the contained variables.
Definition: FitlessSegmentPairVarSet.cc:22
Belle2::TrackFindingCDC::CDCRecoHit2D::getWire
const CDCWire & getWire() const
Getter for the wire the reconstructed hit assoziated to.
Definition: CDCRecoHit2D.h:185
Belle2::TrackFindingCDC::CDCTrajectory2D::calcArcLength2DBetween
double calcArcLength2DBetween(const Vector2D &fromPoint, const Vector2D &toPoint) const
Calculate the travel distance between the two given positions Returns the travel distance on the traj...
Definition: CDCTrajectory2D.h:283
Belle2::TrackFindingCDC::CDCRecoHit2D
Class representing a two dimensional reconstructed hit in the central drift chamber.
Definition: CDCRecoHit2D.h:57
Belle2::TrackFindingCDC::CDCSegment::getTrajectory2D
CDCTrajectory2D & getTrajectory2D() const
Getter for the two dimensional trajectory fitted to the segment.
Definition: CDCSegment.h:79
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::WireLine
A three dimensional limited line represented by its closest approach to the z-axes (reference positio...
Definition: WireLine.h:41
Belle2::TrackFindingCDC::CDCTrajectory2D::getFlightDirection2D
Vector2D getFlightDirection2D(const Vector2D &point) const
Get the unit direction of flight at the given point, where arcLength2D = 0.
Definition: CDCTrajectory2D.h:320
Belle2::TrackFindingCDC::Vector3D
A three dimensional vector.
Definition: Vector3D.h:34
Belle2::TrackFindingCDC::CDCWire::getWireLine
const WireLine & getWireLine() const
Getter for the wire line represenation of the wire.
Definition: CDCWire.h:190
Belle2::TrackFindingCDC::CDCRecoHit2D::isAxial
bool isAxial() const
Indicator if the underlying wire is axial.
Definition: CDCRecoHit2D.h:173
Belle2::TrackFindingCDC::Vector3D::xy
const Vector2D & xy() const
Getter for the xy projected vector ( reference ! )
Definition: Vector3D.h:500
Belle2::TrackFindingCDC::WireLine::outOfZBoundsFactor
double outOfZBoundsFactor(double z) const
Returns the amount how much the given z position is outside the bounds in units of the wire length.
Definition: WireLine.h:152
Belle2::TrackFindingCDC::CDCTrajectory2D::isFitted
bool isFitted() const
Checks if the circle is already set to a valid value.
Definition: CDCTrajectory2D.cc:85
Belle2::TrackFindingCDC::CDCTrajectory2D::getArcLength2DGap
double getArcLength2DGap(const AFromHits &fromHits, const AToHits &toHits) const
Calculates the perpendicular travel distance from the last position of the fromHits to the first posi...
Definition: CDCTrajectory2D.h:220
Belle2::TrackFindingCDC::CDCWire
Class representing a sense wire in the central drift chamber.
Definition: CDCWire.h:60
Belle2::TrackFindingCDC::CDCSegment2D
A reconstructed sequence of two dimensional hits in one super layer.
Definition: CDCSegment2D.h:40
Belle2::TrackFindingCDC::VarSet< FitlessSegmentPairVarNames >::named
constexpr static int named(const char *name)
Getter for the index from the name.
Definition: VarSet.h:88
Belle2::TrackFindingCDC::Vector2D::angleWith
double angleWith(const Vector2D &rhs) const
The angle between this and rhs.
Definition: Vector2D.h:211
Belle2::TrackFindingCDC::Vector3D::z
double z() const
Getter for the z coordinate.
Definition: Vector3D.h:488
Belle2::TrackFindingCDC::CDCSegmentPair::getFromSegment
const CDCSegment2D * getFromSegment() const
Getter for the from segment.
Definition: CDCSegmentPair.h:120
Belle2::TrackFindingCDC::CDCTrajectory2D::getArcLength2DBackOffset
double getArcLength2DBackOffset(const AFromHits &fromHits, const AToHits &toHits) const
Calculates the perpendicular travel distance from the last position of the fromHits to the last posit...
Definition: CDCTrajectory2D.h:244
Belle2::TrackFindingCDC::CDCRecoHit2D::reconstruct3D
Vector3D reconstruct3D(const CDCTrajectory2D &trajectory2D, const double z=0) const
Reconstruct the three dimensional position (especially of stereo hits) by determinating the z coordin...
Definition: CDCRecoHit2D.cc:133
Belle2::TrackFindingCDC::AngleUtil::normalised
static double normalised(const double angle)
Normalise an angle to lie in the range from [-pi, pi].
Definition: Angle.h:43
Belle2::TrackFindingCDC::CDCSegmentPair::getAxialSegment
const CDCSegment2D * getAxialSegment() const
Getter for the axial segment.
Definition: CDCSegmentPair.h:150