Belle II Software development
HitGapAxialSegmentPairVarSet.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/filters/axialSegmentPair/HitGapAxialSegmentPairVarSet.h>
9
10#include <tracking/trackingUtilities/eventdata/tracks/CDCAxialSegmentPair.h>
11#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
12#include <tracking/trackingUtilities/eventdata/hits/CDCRecoHit2D.h>
13#include <tracking/trackingUtilities/geometry/VectorUtil.h>
14
15#include <tracking/trackingUtilities/numerics/Angle.h>
16
17#include <Math/Vector2D.h>
18#include <Math/VectorUtil.h>
19
20using namespace Belle2;
21using namespace TrackFindingCDC;
22using namespace TrackingUtilities;
23
25{
26 if (not ptrAxialSegmentPair) return false;
27
28 const CDCAxialSegmentPair& axialSegmentPair = *ptrAxialSegmentPair;
29
30 const CDCSegment2D* ptrFromSegment = axialSegmentPair.getStartSegment();
31 const CDCSegment2D* ptrToSegment = axialSegmentPair.getEndSegment();
32
33 const CDCSegment2D& fromSegment = *ptrFromSegment;
34 const CDCSegment2D& toSegment = *ptrToSegment;
35
36 const CDCRecoHit2D& fromFirstHit = fromSegment.front();
37 const CDCRecoHit2D& fromLastHit = fromSegment.back();
38
39 const CDCRecoHit2D& toFirstHit = toSegment.front();
40 const CDCRecoHit2D& toLastHit = toSegment.back();
41
42 const ROOT::Math::XYVector fromLastHitPos = fromLastHit.getRecoPos2D();
43 const ROOT::Math::XYVector fromFirstHitPos = fromFirstHit.getRecoPos2D();
44
45 const ROOT::Math::XYVector toFirstHitPos = toFirstHit.getRecoPos2D();
46 const ROOT::Math::XYVector toLastHitPos = toLastHit.getRecoPos2D();
47
48 const ROOT::Math::XYVector hitPosGap = toFirstHitPos - fromLastHitPos;
49 const ROOT::Math::XYVector longHitPosGap = toLastHitPos - fromFirstHitPos;
50
51 const double hitDistance = hitPosGap.R();
52 const double longHitDistance = longHitPosGap.R();
53
54 const ROOT::Math::XYVector fromLastHitMom = fromLastHit.getFlightDirection2D();
55 const ROOT::Math::XYVector toFirstHitMom = toFirstHit.getFlightDirection2D();
56
57 finitevar<named("delta_hit_pos_phi")>() = ROOT::Math::VectorUtil::DeltaPhi(fromLastHitPos, toFirstHitPos);
58 finitevar<named("delta_hit_mom_phi")>() = ROOT::Math::VectorUtil::DeltaPhi(fromLastHitMom, toFirstHitMom);
59
60 double fromLastHitAlpha = fromLastHit.getAlpha();
61 double toFirstHitAlpha = toFirstHit.getAlpha();
62 finitevar<named("delta_hit_alpha")>() = AngleUtil::normalised(toFirstHitAlpha - fromLastHitAlpha);
63
64 finitevar<named("hit_distance")>() = hitDistance;
65 finitevar<named("hit_long_distance")>() = longHitDistance;
66
67 finitevar<named("delta_hit_distance")>() = longHitDistance - hitDistance;
68
69 finitevar<named("from_hit_forward")>() = hitPosGap.Dot(fromLastHitMom);
70 finitevar<named("to_hit_forward")>() = hitPosGap.Dot(toFirstHitMom);
71 finitevar<named("hit_forward")>() = hitPosGap.Dot(VectorUtil::average(fromLastHitMom, toFirstHitMom));
72
73 const ROOT::Math::XYVector fromStretch = fromLastHitPos - fromFirstHitPos;
74 const ROOT::Math::XYVector toStretch = toLastHitPos - toFirstHitPos;
75
76 const double fromLength = fromStretch.R();
77 const double toLength = toStretch.R();
78
79 const ROOT::Math::XYVector firstPosGap = toFirstHitPos - fromFirstHitPos;
80 const ROOT::Math::XYVector lastPosGap = toLastHitPos - fromLastHitPos;
81
82 const double firstOffset = firstPosGap.R();
83 const double lastOffset = lastPosGap.R();
84
85 finitevar<named("hit_ptolemy")>() =
86 firstOffset * lastOffset - longHitDistance * hitDistance - fromLength * toLength;
87
88 return true;
89}
bool extract(const TrackingUtilities::CDCAxialSegmentPair *ptrAxialSegmentPair) override
Generate and assign the contained variables.
Class representing a pair of reconstructed axial segments in adjacent superlayer.
const CDCAxialSegment2D * getEndSegment() const
Getter for the end segment.
const CDCAxialSegment2D * getStartSegment() const
Getter for the start segment.
Class representing a two dimensional reconstructed hit in the central drift chamber.
ROOT::Math::XYVector getFlightDirection2D() const
Getter for the direction of flight.
ROOT::Math::XYVector getRecoPos2D() const
Getter for the position in the reference plane.
double getAlpha() const
Getter for the direction of flight relative to the position.
A reconstructed sequence of two dimensional hits in one super layer.
Abstract base class for different kinds of events.
static double normalised(const double angle)
Normalise an angle to lie in the range from [-pi, pi].
Definition Angle.h:33