Belle II Software development
StereoHitVarSet.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/stereoHits/StereoHitVarSet.h>
9
10#include <tracking/trackFindingCDC/eventdata/tracks/CDCTrack.h>
11#include <tracking/trackFindingCDC/eventdata/hits/CDCRecoHit3D.h>
12#include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
13
14#include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
15
16#include <tracking/trackFindingCDC/topology/CDCWire.h>
17
18#include <tracking/trackFindingCDC/numerics/ToFinite.h>
19
20#include <cdc/dataobjects/CDCHit.h>
21
22#include <numeric>
23
24using namespace Belle2;
25using namespace TrackFindingCDC;
26
28{
29 const CDCRLWireHit* rlWireHit = testPair->getTo();
30 const CDCTrack* track = testPair->getFrom();
31
32 if (not testPair or not rlWireHit or not track) return false;
33
34
35 const CDCTrajectory2D& trajectory2D = track->getStartTrajectory3D().getTrajectory2D();
36
37 const CDCRecoHit3D& recoHit3D = CDCRecoHit3D::reconstruct(*rlWireHit, trajectory2D);
38
39 const Vector2D& startMomentum = trajectory2D.getMom2DAtSupport();
40 const double radius = trajectory2D.getLocalCircle()->radius();
41 const double size = track->size();
42 const Vector3D& reconstructedPosition = recoHit3D.getRecoPos3D();
43 const double reconstructedDriftLength = recoHit3D.getSignedRecoDriftLength();
44 const double reconstructedS = recoHit3D.getArcLength2D();
45 const unsigned short int adcCount = rlWireHit->getWireHit().getHit()->getADCCount();
46 const ERightLeft rlInformation = rlWireHit->getRLInfo();
47 const double backArcLength2D = track->back().getArcLength2D();
48 const double frontArcLength2D = track->front().getArcLength2D();
49 const double arcLength2DSum = std::accumulate(track->begin(), track->end(), 0.0, [](const double sum,
50 const CDCRecoHit3D & listRecoHit) { return sum + listRecoHit.getArcLength2D();});
51
52 const CDCWire& wire = rlWireHit->getWire();
53 Vector2D wirePos = wire.getWirePos2DAtZ(reconstructedPosition.z());
54 Vector2D disp2D = reconstructedPosition.xy() - wirePos;
55 const double xyDistance = disp2D.norm();
56
57 const auto nearestAxialHit = std::min_element(track->begin(), track->end(), [&reconstructedS](const CDCRecoHit3D & lhs,
58 const CDCRecoHit3D & rhs) {
59 return std::abs(lhs.getArcLength2D() - reconstructedS) < std::abs(rhs.getArcLength2D() - reconstructedS);
60 });
61
62 var<named("track_size")>() = size;
63 var<named("pt")>() = toFinite(trajectory2D.getAbsMom2D(), 0);
64 var<named("reco_s")>() = toFinite(reconstructedS, 0);
65 var<named("reco_z")>() = toFinite(reconstructedPosition.z(), 0);
66 var<named("phi_track")>() = toFinite(startMomentum.phi(), 0);
67 var<named("phi_hit")>() = reconstructedPosition.phi();
68 var<named("theta_hit")>() = reconstructedPosition.theta();
69 var<named("drift_length")>() = reconstructedDriftLength;
70 var<named("adc_count")>() = adcCount;
71 var<named("xy_distance_zero_z")>() = toFinite(xyDistance, 0);
72 var<named("right_hit")>() = rlInformation == ERightLeft::c_Right;
73 var<named("track_back_s")>() = toFinite(backArcLength2D, 0);
74 var<named("track_front_s")>() = toFinite(frontArcLength2D, 0);
75 var<named("track_mean_s")>() = toFinite(arcLength2DSum / size, 0);
76 var<named("s_distance")>() = toFinite(nearestAxialHit->getArcLength2D() - reconstructedS, 0);
77 var<named("track_radius")>() = toFinite(radius, 0);
78 var<named("superlayer_id")>() = rlWireHit->getISuperLayer();
79 return true;
80}
unsigned short getADCCount() const
Getter for integrated charge.
Definition CDCHit.h:230
Class representing an oriented hit wire including a hypotheses whether the causing track passes left ...
const CDCWireHit & getWireHit() const
Getter for the wire hit associated with the oriented hit.
ISuperLayer getISuperLayer() const
Getter for the superlayer id.
const CDCWire & getWire() const
Getter for the wire the oriented hit associated to.
ERightLeft getRLInfo() const
Getter for the right left passage information.
Class representing a three dimensional reconstructed hit.
const Vector3D & getRecoPos3D() const
Getter for the 3d position of the hit.
double getSignedRecoDriftLength() const
Returns the drift length next to the reconstructed position.
static CDCRecoHit3D reconstruct(const CDCRecoHit2D &recoHit2D, const CDCTrajectory2D &trajectory2D)
Reconstructs the three dimensional hit from the two dimensional and the two dimensional trajectory.
double getArcLength2D() const
Getter for the travel distance in the xy projection.
Class representing a sequence of three dimensional reconstructed hits.
Definition CDCTrack.h:41
Particle trajectory as it is seen in xy projection represented as a circle.
Vector2D getMom2DAtSupport(const double bZ) const
Get the momentum at the support point of the trajectory.
double getAbsMom2D(double bZ) const
Get the estimation for the absolute value of the transvers momentum.
const UncertainPerigeeCircle & getLocalCircle() const
Getter for the circle in local coordinates.
const CDCHit * getHit() const
Getter for the CDCHit pointer into the StoreArray.
Definition CDCWireHit.h:159
Class representing a sense wire in the central drift chamber.
Definition CDCWire.h:58
Vector2D getWirePos2DAtZ(const double z) const
Gives the xy projected position of the wire at the given z coordinate.
Definition CDCWire.h:192
double radius() const
Gives the signed radius of the circle. If it was a line this will be infinity.
bool extract(const BaseStereoHitFilter::Object *testPair) override
Generate and assign the contained variables.
static constexpr int named(const char *name)
Definition VarSet.h:78
A two dimensional vector which is equipped with functions for correct handling of orientation relate...
Definition Vector2D.h:32
double phi() const
Gives the azimuth angle being the angle to the x axes ( range -M_PI to M_PI )
Definition Vector2D.h:569
double norm() const
Calculates the length of the vector.
Definition Vector2D.h:175
A three dimensional vector.
Definition Vector3D.h:33
const Vector2D & xy() const
Getter for the xy projected vector ( reference ! )
Definition Vector3D.h:508
double phi() const
Getter for the azimuth angle.
Definition Vector3D.h:540
double z() const
Getter for the z coordinate.
Definition Vector3D.h:496
double theta() const
Getter for the polar angle.
Definition Vector3D.h:546
From * getFrom() const
Getter for the pointer to the from side object.
To * getTo() const
Getter for the pointer to the to side object.
Abstract base class for different kinds of events.