Belle II Software development
HitGapSegmentRelationVarSet.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/segmentRelation/HitGapSegmentRelationVarSet.h>
9
10#include <tracking/trackingUtilities/eventdata/segments/CDCSegment2D.h>
11#include <tracking/trackingUtilities/geometry/VectorUtil.h>
12#include <tracking/trackingUtilities/numerics/Angle.h>
13
14#include <framework/geometry/VectorUtil.h>
15
16#include <Math/Vector2D.h>
17
18using namespace Belle2;
19using namespace TrackFindingCDC;
20using namespace TrackingUtilities;
21
23{
24 if (not ptrSegmentRelation) return false;
25
26 const Relation<const CDCSegment2D>& segmentPair = *ptrSegmentRelation;
27
28 const CDCSegment2D* ptrFromSegment = segmentPair.getFrom();
29 const CDCSegment2D* ptrToSegment = segmentPair.getTo();
30
31 const CDCSegment2D& fromSegment = *ptrFromSegment;
32 const CDCSegment2D& toSegment = *ptrToSegment;
33
34 const CDCRecoHit2D& fromFirstHit = fromSegment.front();
35 const CDCRecoHit2D& fromLastHit = fromSegment.back();
36
37 const CDCRecoHit2D& toFirstHit = toSegment.front();
38 const CDCRecoHit2D& toLastHit = toSegment.back();
39
40 const ROOT::Math::XYVector fromLastHitPos = fromLastHit.getRecoPos2D();
41 const ROOT::Math::XYVector fromFirstHitPos = fromFirstHit.getRecoPos2D();
42
43 const ROOT::Math::XYVector toFirstHitPos = toFirstHit.getRecoPos2D();
44 const ROOT::Math::XYVector toLastHitPos = toLastHit.getRecoPos2D();
45
46 const ROOT::Math::XYVector hitPosGap = toFirstHitPos - fromLastHitPos;
47 const ROOT::Math::XYVector longHitPosGap = toLastHitPos - fromFirstHitPos;
48
49 const double hitDistance = hitPosGap.R();
50 const double longHitDistance = longHitPosGap.R();
51
52 const ROOT::Math::XYVector fromLastHitMom = fromLastHit.getFlightDirection2D();
53 const ROOT::Math::XYVector toFirstHitMom = toFirstHit.getFlightDirection2D();
54
55 finitevar<named("delta_hit_pos_phi")>() = ROOT::Math::VectorUtil::DeltaPhi(fromLastHitPos, toFirstHitPos);
56 finitevar<named("delta_hit_mom_phi")>() = ROOT::Math::VectorUtil::DeltaPhi(fromLastHitMom, toFirstHitMom);
57
58 double fromLastHitAlpha = fromLastHit.getAlpha();
59 double toFirstHitAlpha = toFirstHit.getAlpha();
60 finitevar<named("delta_hit_alpha")>() = AngleUtil::normalised(toFirstHitAlpha - fromLastHitAlpha);
61
62 finitevar<named("hit_distance")>() = hitDistance;
63 finitevar<named("hit_long_distance")>() = longHitDistance;
64
65 finitevar<named("delta_hit_distance")>() = longHitDistance - hitDistance;
66
67 finitevar<named("from_hit_forward")>() = hitPosGap.Dot(fromLastHitMom);
68 finitevar<named("to_hit_forward")>() = hitPosGap.Dot(toFirstHitMom);
69 finitevar<named("hit_forward")>() = hitPosGap.Dot(VectorUtil::average(fromLastHitMom, toFirstHitMom));
70
71 const ROOT::Math::XYVector fromStretch = fromLastHitPos - fromFirstHitPos;
72 const ROOT::Math::XYVector toStretch = toLastHitPos - toFirstHitPos;
73
74 const double fromLength = fromStretch.R();
75 const double toLength = toStretch.R();
76
77 const ROOT::Math::XYVector firstPosGap = toFirstHitPos - fromFirstHitPos;
78 const ROOT::Math::XYVector lastPosGap = toLastHitPos - fromLastHitPos;
79
80 const double firstOffset = firstPosGap.R();
81 const double lastOffset = lastPosGap.R();
82
83 finitevar<named("hit_ptolemy")>() =
84 firstOffset * lastOffset - longHitDistance * hitDistance - fromLength * toLength;
85
86 return true;
87}
bool extract(const TrackingUtilities::Relation< const TrackingUtilities::CDCSegment2D > *ptrSegmentRelation) override
Generate and assign the contained variables.
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.
Type for two related objects.
Definition Relation.h:21
From * getFrom() const
Getter for the pointer to the from side object.
Definition Relation.h:59
To * getTo() const
Getter for the pointer to the to side object.
Definition Relation.h:65
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