8#include <tracking/ckf/cdc/filters/states/ExtrapolateAndUpdateCDCStateFilter.h>
10#include <cdc/dataobjects/CDCRecoHit.h>
12#include <tracking/ckf/cdc/entities/CDCCKFState.h>
13#include <tracking/ckf/cdc/entities/CDCCKFPath.h>
15#include <tracking/trackFindingCDC/numerics/ERightLeft.h>
16#include <tracking/trackFindingCDC/utilities/StringManipulation.h>
17#include <tracking/trackFindingCDC/topology/CDCWire.h>
19#include <framework/core/ModuleParamList.h>
24 TrackFindingCDC::ERightLeft setRLInfo(
const genfit::MeasuredStateOnPlane& mSoP,
CDCCKFState& state)
27 const auto& wire = state.getWireHit()->getWire();
30 const auto& hitPosition = wire.getWirePos3DAtZ(trackPosition.z());
33 TrackFindingCDC::ERightLeft rlInfo = trackPosToWire.
xy().
isRightOrLeftOf(mom.xy());
35 state.setRLinfo(rlInfo);
40ExtrapolateAndUpdateCDCStateFilter::ExtrapolateAndUpdateCDCStateFilter()
49 moduleParamList->
getParameter<std::string>(TrackFindingCDC::prefixed(prefix,
"direction")).setDefaultValue(
"forward");
58 genfit::MeasuredStateOnPlane mSoP = lastState.
getTrackState();
61 CDCRecoHit recoHit(wireHit->getHit(),
nullptr);
70 B2ASSERT(
"Should be exactly two measurements", measurements.size() == 2);
72 const auto& rightLeft = setRLInfo(mSoP, state);
74 if (rightLeft == TrackFindingCDC::ERightLeft::c_Right) {
75 state.setChi2(
m_updater.kalmanStep(mSoP, *(measurements[1])));
77 state.setChi2(
m_updater.kalmanStep(mSoP, *(measurements[0])));
80 delete measurements[0];
81 delete measurements[1];
83 state.setTrackState(mSoP);
84 setRLInfo(mSoP, state);
86 return 1. / state.getChi2();
87 }
catch (
const genfit::Exception& e) {
Define states for CKF algorithm, which can be seed track or CDC wire hit.
const genfit::MeasuredStateOnPlane & getTrackState() const
Get genfit track state (but first check if already present)
This class is used to transfer CDC information to the track fit.
std::vector< genfit::MeasurementOnPlane * > constructMeasurementsOnPlane(const genfit::StateOnPlane &state) const override
build MeasurementsOnPlane
genfit::SharedPlanePtr constructPlane(const genfit::StateOnPlane &state) const override
Methods that actually interface to Genfit.
TrackFindingCDC::Weight operator()(const BaseCDCStateFilter::Object &pair) final
Extrapolate along the path (pair.first) to the CDC wireHit-state (pair.second). Return 1/chi2 if Ok,...
KalmanStepper< 1 > m_updater
Kalman filter updater.
void exposeParameters(ModuleParamList *moduleParamList, const std::string &prefix) override
Expose the parameters of the sub findlets.
Advancer m_extrapolator
Kalman filter extrapolator.
The Module parameter list class.
Class representing a hit wire in the central drift chamber.
void addProcessingSignalListener(ProcessingSignalListener *psl)
std::pair< const CDCCKFPath *, CDCCKFState * > Object
ERightLeft isRightOrLeftOf(const Vector2D &rhs) const
Indicates if the given vector is more left or more right if you looked in the direction of this vecto...
A three dimensional vector.
const Vector2D & xy() const
Getter for the xy projected vector ( reference ! )
ModuleParam< T > & getParameter(const std::string &name) const
Returns a reference to a parameter.
std::vector< CDCCKFState > CDCCKFPath
Shortcut for the collection of CDC CKF-algorithm states.
Abstract base class for different kinds of events.