10 #include <tracking/ckf/pxd/filters/states/SimplePXDStateFilter.h>
12 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory3D.h>
13 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
14 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectorySZ.h>
15 #include <tracking/trackFindingCDC/geometry/Vector3D.h>
17 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCBFieldUtil.h>
18 #include <tracking/spacePointCreation/SpacePoint.h>
19 #include <tracking/dataobjects/RecoTrack.h>
22 using namespace TrackFindingCDC;
28 const double pT = momentum.xy().norm();
31 }
else if (pT > 0.2) {
50 const std::vector<TrackFindingCDC::WithWeight<const CKFToPXDState*>>& previousStates = pair.first;
53 const auto* spacePoint = currentState->
getHit();
59 firstMeasurement = previousStates.back()->getMeasuredStateOnPlane();
65 const Vector3D hitPosition =
static_cast<Vector3D>(spacePoint->getPosition());
67 const bool sameHemisphere = fabs(position.phi() - hitPosition.phi()) < TMath::PiOver2();
68 if (not sameHemisphere) {
77 const RecoTrack* cdcTrack = previousStates.front()->getSeed();
79 B2ASSERT(
"A path without a seed?", cdcTrack);
81 const CDCTrajectory3D trajectory(position, 0, momentum, cdcTrack->
getChargeSeed(), m_cachedBField);
83 const double arcLength = trajectory.calcArcLength2D(hitPosition);
84 const Vector2D& trackPositionAtHit2D = trajectory.getTrajectory2D().getPos2DAtArcLength2D(arcLength);
85 const double trackPositionAtHitZ = trajectory.getTrajectorySZ().mapSToZ(arcLength);
86 const Vector3D trackPositionAtHit(trackPositionAtHit2D, trackPositionAtHitZ);
87 const Vector3D differenceHelix = trackPositionAtHit - hitPosition;
89 valueToCheck = differenceHelix.xy().norm();
90 maximumValues = &m_param_maximumHelixDistanceXY;
91 }
else if (not currentState->
isFitted()) {
93 const double residual = m_kalmanStepper.calculateResidual(firstMeasurement, *currentState);
95 valueToCheck = residual;
96 maximumValues = &m_param_maximumResidual;
99 valueToCheck = currentState->
getChi2();
100 maximumValues = &m_param_maximumChi2;
104 if (valueToCheck > (*maximumValues)[layer - 1][getPTRange(momentum)]) {