Belle II Software development
HitGapTrackRelationVarSet.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/trackRelation/HitGapTrackRelationVarSet.h>
9
10#include <tracking/trackingUtilities/eventdata/tracks/CDCTrack.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/Vector3D.h>
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 ptrTrackRelation) return false;
27
28 const Relation<const CDCTrack>& trackPair = *ptrTrackRelation;
29
30 const CDCTrack* ptrFromTrack = trackPair.getFrom();
31 const CDCTrack* ptrToTrack = trackPair.getTo();
32
33 const CDCTrack& fromTrack = *ptrFromTrack;
34 const CDCTrack& toTrack = *ptrToTrack;
35
36 const CDCRecoHit3D& fromFirstHit = fromTrack.front();
37 const CDCRecoHit3D& fromLastHit = fromTrack.back();
38
39 const CDCRecoHit3D& toFirstHit = toTrack.front();
40 const CDCRecoHit3D& toLastHit = toTrack.back();
41
42 const ROOT::Math::XYZVector& fromLastHitPos = fromLastHit.getRecoPos3D();
43 const ROOT::Math::XYZVector& fromFirstHitPos = fromFirstHit.getRecoPos3D();
44
45 const ROOT::Math::XYZVector& toFirstHitPos = toFirstHit.getRecoPos3D();
46 const ROOT::Math::XYZVector& toLastHitPos = toLastHit.getRecoPos3D();
47
48 const ROOT::Math::XYZVector hitPosGap = toFirstHitPos - fromLastHitPos;
49 const ROOT::Math::XYZVector 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("delta_hit_z")>() = fromLastHitPos.z() - toFirstHitPos.z();
65
66 finitevar<named("hit_distance")>() = hitDistance;
67 finitevar<named("hit_long_distance")>() = longHitDistance;
68
69 finitevar<named("delta_hit_distance")>() = longHitDistance - hitDistance;
70
71 finitevar<named("from_hit_forward")>() = VectorUtil::getXYVector(hitPosGap).Dot(fromLastHitMom);
72 finitevar<named("to_hit_forward")>() = VectorUtil::getXYVector(hitPosGap).Dot(toFirstHitMom);
73 finitevar<named("hit_forward")>() = VectorUtil::getXYVector(hitPosGap).Dot(VectorUtil::average(fromLastHitMom, toFirstHitMom));
74
75 const ROOT::Math::XYZVector fromStretch = fromLastHitPos - fromFirstHitPos;
76 const ROOT::Math::XYZVector toStretch = toLastHitPos - toFirstHitPos;
77
78 const double fromLength = fromStretch.R();
79 const double toLength = toStretch.R();
80
81 const ROOT::Math::XYZVector firstPosGap = toFirstHitPos - fromFirstHitPos;
82 const ROOT::Math::XYZVector lastPosGap = toLastHitPos - fromLastHitPos;
83
84 const double firstOffset = firstPosGap.R();
85 const double lastOffset = lastPosGap.R();
86
87 finitevar<named("hit_ptolemy")>() =
88 firstOffset * lastOffset - longHitDistance * hitDistance - fromLength * toLength;
89
90 return true;
91}
bool extract(const TrackingUtilities::Relation< const TrackingUtilities::CDCTrack > *ptrTrackRelation) final
Generate and assign the contained variables.
Class representing a three dimensional reconstructed hit.
const ROOT::Math::XYZVector & getRecoPos3D() const
Getter for the 3d position of the hit.
ROOT::Math::XYVector getFlightDirection2D() const
Getter for the direction of flight.
double getAlpha() const
Getter for the direction of flight relative to the position.
Class representing a sequence of three dimensional reconstructed hits.
Definition CDCTrack.h:37
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
static constexpr int named(const char *name)
Definition VarSet.h:78
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