11 #include <tracking/ckf/pxd/filters/states/PXDStateBasicVarSet.h>
13 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory3D.h>
14 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
15 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectorySZ.h>
16 #include <tracking/trackFindingCDC/geometry/Vector3D.h>
18 #include <tracking/spacePointCreation/SpacePoint.h>
19 #include <tracking/dataobjects/RecoTrack.h>
23 using namespace TrackFindingCDC;
27 const std::vector<TrackFindingCDC::WithWeight<const CKFToPXDState*>>& previousStates = pair->first;
30 const RecoTrack* seedTrack = previousStates.front()->getSeed();
31 B2ASSERT(
"Path without seed?", seedTrack);
34 B2ASSERT(
"Path without hit?", spacePoint);
40 firstMeasurement = previousStates.back()->getMeasuredStateOnPlane();
46 const CDCTrajectory3D trajectory(position, 0, momentum, seedTrack->
getChargeSeed());
50 const double arcLength = trajectory.calcArcLength2D(hitPosition);
51 const Vector2D& trackPositionAtHit2D = trajectory.getTrajectory2D().getPos2DAtArcLength2D(arcLength);
52 double trackPositionAtHitZ = trajectory.getTrajectorySZ().mapSToZ(arcLength);
54 Vector3D trackPositionAtHit(trackPositionAtHit2D, trackPositionAtHitZ);
55 Vector3D distance = trackPositionAtHit - hitPosition;
57 var<named(
"distance")>() =
static_cast<Float_t
>(distance.norm());
58 var<named(
"xy_distance")>() =
static_cast<Float_t
>(distance.xy().norm());
59 var<named(
"z_distance")>() =
static_cast<Float_t
>(distance.z());
61 Vector3D mSoP_distance = position - hitPosition;
63 var<named(
"mSoP_distance")>() =
static_cast<Float_t
>(mSoP_distance.norm());
64 var<named(
"mSoP_xy_distance")>() =
static_cast<Float_t
>(mSoP_distance.xy().norm());
65 var<named(
"mSoP_z_distance")>() =
static_cast<Float_t
>(mSoP_distance.z());
67 var<named(
"same_hemisphere")>() = fabs(position.phi() - hitPosition.phi()) < TMath::PiOver2();
69 var<named(
"arcLengthOfHitPosition")>() =
static_cast<Float_t
>(trajectory.calcArcLength2D(hitPosition));
70 var<named(
"arcLengthOfCenterPosition")>() =
static_cast<Float_t
>(trajectory.calcArcLength2D(
Vector3D(0, 0, 0)));
73 var<named(
"number")>() = previousStates.size();
75 var<named(
"pt")>() =
static_cast<Float_t
>(momentum.xy().norm());
76 var<named(
"tan_lambda")>() =
static_cast<Float_t
>(trajectory.getTanLambda());
77 var<named(
"phi")>() =
static_cast<Float_t
>(momentum.phi());
81 var<named(
"ladder")>() = sensorInfo.getLadderNumber();
82 var<named(
"sensor")>() = sensorInfo.getSensorNumber();
83 var<named(
"segment")>() = sensorInfo.getSegmentNumber();
84 var<named(
"id")>() = sensorInfo.getID();
86 var<named(
"last_layer")>() = 0;
87 var<named(
"last_ladder")>() = 0;
88 var<named(
"last_sensor")>() = 0;
89 var<named(
"last_segment")>() = 0;
90 var<named(
"last_id")>() = 0;
93 const SpacePoint* parentSpacePoint = parent->getHit();
94 if (parentSpacePoint) {
101 var<named(
"last_id")>() = parentSensorInfo.
getID();
104 const double residual = m_kalmanStepper.calculateResidual(firstMeasurement, *state);
105 var<named(
"residual")>() = residual;
108 var<named(
"chi2")>() =
static_cast<Float_t
>(state->
getChi2());
110 var<named(
"chi2")>() = -999;
113 const TMatrixDSym& cov5 = firstMeasurement.getCov();
114 const Float_t sigmaUV = std::sqrt(std::max(cov5(4, 4), cov5(3, 3)));
115 var<named(
"sigma_uv")>() = sigmaUV;
116 var<named(
"residual_over_sigma")>() = residual / sigmaUV;