28 const std::vector<TrackingUtilities::WithWeight<const CKFToPXDState*>>& previousStates = pair->first;
31 const RecoTrack* seedTrack = previousStates.front()->getSeed();
32 B2ASSERT(
"Path without seed?", seedTrack);
35 B2ASSERT(
"Path without hit?", spacePoint);
37 genfit::MeasuredStateOnPlane firstMeasurement;
41 firstMeasurement = previousStates.back()->getMeasuredStateOnPlane();
44 ROOT::Math::XYZVector position = ROOT::Math::XYZVector(firstMeasurement.getPos());
45 ROOT::Math::XYZVector momentum = ROOT::Math::XYZVector(firstMeasurement.getMom());
49 const ROOT::Math::XYZVector& hitPosition = spacePoint->
getPosition();
55 ROOT::Math::XYZVector trackPositionAtHit(trackPositionAtHit2D.X(), trackPositionAtHit2D.Y(), trackPositionAtHitZ);
56 ROOT::Math::XYZVector distance = trackPositionAtHit - hitPosition;
58 var<
named(
"distance")>() =
static_cast<Float_t
>(distance.R());
59 var<
named(
"xy_distance")>() =
static_cast<Float_t
>(distance.Rho());
60 var<
named(
"z_distance")>() =
static_cast<Float_t
>(distance.z());
62 ROOT::Math::XYZVector mSoP_distance = position - hitPosition;
64 var<
named(
"mSoP_distance")>() =
static_cast<Float_t
>(mSoP_distance.R());
65 var<
named(
"mSoP_xy_distance")>() =
static_cast<Float_t
>(mSoP_distance.Rho());
66 var<
named(
"mSoP_z_distance")>() =
static_cast<Float_t
>(mSoP_distance.z());
68 var<
named(
"same_hemisphere")>() = fabs(position.Phi() - hitPosition.Phi()) < TMath::PiOver2();
71 var<
named(
"arcLengthOfCenterPosition")>() =
static_cast<Float_t
>(trajectory.
calcArcLength2D(ROOT::Math::XYZVector(0, 0, 0)));
74 var<
named(
"number")>() = previousStates.size();
76 var<
named(
"pt")>() =
static_cast<Float_t
>(momentum.Rho());
78 var<
named(
"phi")>() =
static_cast<Float_t
>(momentum.Phi());
88 B2ASSERT(
"Must be related to exactly 1 cluster", clusters.size() == 1);
89 var<
named(
"cluster_charge")>() = clusters[0]->getCharge();
90 var<
named(
"cluster_seed_charge")>() = clusters[0]->getSeedCharge();
91 var<
named(
"cluster_size")>() = clusters[0]->getSize();
92 var<
named(
"cluster_size_u")>() = clusters[0]->getUSize();
93 var<
named(
"cluster_size_v")>() = clusters[0]->getVSize();
100 var<
named(
"last_cluster_charge")>() = 0;
101 var<
named(
"last_cluster_seed_charge")>() = 0;
102 var<
named(
"last_cluster_size")>() = 0;
103 var<
named(
"last_cluster_size_u")>() = 0;
104 var<
named(
"last_cluster_size_v")>() = 0;
107 const SpacePoint* parentSpacePoint = parent->getHit();
108 if (parentSpacePoint) {
109 const VxdID& parentSensorInfo = parentSpacePoint->
getVxdID();
118 B2ASSERT(
"Must be related to exactly 1 cluster", parentclusters.size() == 1);
119 var<
named(
"last_cluster_charge")>() = parentclusters[0]->getCharge();
120 var<
named(
"last_cluster_seed_charge")>() = parentclusters[0]->getSeedCharge();
121 var<
named(
"last_cluster_size")>() = parentclusters[0]->getSize();
122 var<
named(
"last_cluster_size_u")>() = parentclusters[0]->getUSize();
123 var<
named(
"last_cluster_size_v")>() = parentclusters[0]->getVSize();
126 const double residual =
m_kalmanStepper.calculateResidual(firstMeasurement, *state);
127 var<
named(
"residual")>() = residual;
135 const TMatrixDSym& cov5 = firstMeasurement.getCov();
136 const Float_t sigmaUV = std::sqrt(std::max(cov5(4, 4), cov5(3, 3)));
138 var<
named(
"residual_over_sigma")>() = residual / sigmaUV;