10 #include <tracking/ckf/general/filters/NonIPCrossingStateFilter.dcl.h>
12 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
13 #include <tracking/trackFindingCDC/geometry/Vector3D.h>
14 #include <tracking/trackFindingCDC/utilities/StringManipulation.h>
16 #include <tracking/ckf/general/utilities/SearchDirection.h>
18 #include <tracking/spacePointCreation/SpacePoint.h>
19 #include <tracking/dataobjects/RecoTrack.h>
21 #include <framework/core/ModuleParamList.h>
28 template <
class AllStateFilter>
31 if (std::isnan(AllStateFilter::operator()(pair))) {
35 const auto& previousStates = pair.first;
36 auto* state = pair.second;
38 const RecoTrack* cdcTrack = previousStates.front()->getSeed();
39 B2ASSERT(
"Path without seed?", cdcTrack);
41 const SpacePoint* spacePoint = state->getHit();
42 B2ASSERT(
"Path without hit?", spacePoint);
45 if (state->mSoPSet()) {
46 return state->getMeasuredStateOnPlane();
48 B2ASSERT(
"Previous state was not fitted?", previousStates.back()->mSoPSet());
49 return previousStates.back()->getMeasuredStateOnPlane();
56 const TrackFindingCDC::CDCTrajectory2D trajectory2D(position.xy(), 0, momentum.xy(), cdcTrack->
getChargeSeed());
59 const TrackFindingCDC::Vector2D origin(0, 0);
61 const double deltaArcLengthHitOrigin = trajectory2D.calcArcLength2DBetween(hitPosition.xy(), origin);
62 const double deltaArcLengthTrackHit = trajectory2D.calcArcLength2D(hitPosition.xy());
72 template <
class AllStateFilter>
75 moduleParamList->addParameter(TrackFindingCDC::prefixed(prefix,
"direction"), m_param_directionAsString,
76 "The direction where the extrapolation will happen.");
79 template <
class AllStateFilter>
83 m_param_direction =
fromString(m_param_directionAsString);