40 template<
typename DataT>
212 static DataT
ApproximateBetheBloch(DataT bg2, DataT kp0, DataT kp1, DataT kp2, DataT kp3, DataT kp4);
236 void GuessTrack(
const DataT& trackZ,
const DataT hitX[],
const DataT hitY[],
const DataT hitZ[],
const DataT hitT[],
261 template<
typename DataT>
268 template<
typename DataT>
271 fTr.SetOneEntry(i0, T1.
fTr, i1);
275 template<
typename DataT>
278 DataT dz = (z_out - fTr.GetZ());
279 return std::pair(fTr.GetX() + fTr.GetTx() * dz, fTr.C00() + dz * (2 * fTr.C20() + dz * fTr.C22()));
282 template<
typename DataT>
285 DataT dz = (z_out - fTr.GetZ());
286 return std::pair(fTr.GetY() + fTr.GetTy() * dz, fTr.C11() + dz * (DataT(2.) * fTr.C31() + dz * fTr.C33()));
289 template<
typename DataT>
292 DataT dz = (z_out - fTr.GetZ());
293 return fTr.C10() + dz * (fTr.C21() + fTr.C30() + dz * fTr.C32());
Magnetic flux density interpolation along the track vs. z-coordinate (header)
Definition of the KfMeasurementXy class.
Implementation selection for the SIMD utilities (VS or pseudo)
Magnetic field region, corresponding to a hit triplet.
The class describes a time measurement.
std::string ToString(int indentLevel=0) const
The class describes a 1D - measurement U in XY coordinate system.
The class describes a 2D - measurement (x, y) in XY coordinate system.
kf::TrackParam< DataT > fTr
track parameters
void Filter1d(const kf::MeasurementU< DataT > &m)
filter the track with the 1d measurement
void Extrapolate(DataT z, const kf::FieldRegion< DataT > &F)
DataT fMass
particle mass (muon mass by default)
void FilterWithTargetAtLine(DataT targZ, const kf::MeasurementXy< DataT > &targXYInfo, const kf::FieldRegion< DataT > &F)
add target measuremet to the track using linearisation at a straight line
void SetMask(const DataTmask &m)
std::pair< DataT, DataT > ExtrapolateLineYdY2(DataT z_out) const
void MeasureVelocityWithQp()
measure the track velocity with the track Qp and the mass
DataTmask fMask
mask of active elements in simd vectors
void FilterExtrapolatedXY(const kf::MeasurementXy< DataT > &m, DataT extrX, DataT extrY, const std::array< DataT, kf::TrackParam< DataT >::kNtrackParam > &Jx, const std::array< DataT, kf::TrackParam< DataT >::kNtrackParam > &Jy)
void FilterTime(kf::MeasurementTime< DataT > mt)
filter the track with the time measurement
static std::tuple< DataT, DataT > GetChi2XChi2U(kf::MeasurementXy< DataT > m, DataT x, DataT y, DataT C00, DataT C10, DataT C11)
git two chi^2 components of the track fit to measurement
void MultipleScattering(DataT radThick)
apply multiple scattering correction to the track
TrackKalmanFilter(const DataTmask &m, bool fitV)
std::string ToString(int i=-1)
void ExtrapolateStep(DataT z_out, const kf::FieldRegion< DataT > &F)
void FilterXY(const kf::MeasurementXy< DataT > &m, bool skipUnmeasuredCoordinates=false)
filter the track with the XY measurement
DataT fMaxExtraplationStep
max extrapolation step [cm]
void ExtrapolateLineNoField(DataT z_out)
extrapolate the track to the given Z assuming no magnetic field
TrackKalmanFilter(const kf::TrackParam< DataT > &t)
void MultipleScatteringInThickMaterial(DataT radThick, DataT thickness, bool fDownstream)
apply multiple scattering correction in thick material to the track
void FilterVi(DataT vi)
filter the inverse speed
kf::TrackParam< DataT > & Tr()
static DataT ApproximateBetheBloch(DataT bg2)
Approximate mean energy loss with Bethe-Bloch formula.
void MultipleScattering(DataT radThick, DataT tx0, DataT ty0, DataT qp0)
apply multiple scattering correction to the track with the given Qp0
void GetExtrapolatedXYline(DataT z, const kf::FieldRegion< DataT > &F, DataT &extrX, DataT &extrY, std::array< DataT, kf::TrackParam< DataT >::kNtrackParam > &Jx, std::array< DataT, kf::TrackParam< DataT >::kNtrackParam > &Jy) const
extrapolate track as a line, return the extrapolated X, Y and the Jacobians
void GuessTrack(const DataT &trackZ, const DataT hitX[], const DataT hitY[], const DataT hitZ[], const DataT hitT[], const DataT By[], const DataTmask hitW[], const DataTmask hitWtime[], int NHits)
fast guess of track parameterts based on its hits
kf::utils::scaltype< DataT > DataTscal
DataT GetParticleMass() const
get the particle mass
TrackKalmanFilter(const kf::TrackParam< T > &t)
void SetOneEntry(const int i0, const TrackKalmanFilter &T1, const int i1)
void EnergyLossCorrection(DataT radThick, FitDirection direction)
DataT ExtrapolateLineDxy(DataT z_out) const
DataT GetParticleMass2() const
get the particle mass squared
std::pair< DataT, DataT > ExtrapolateLineXdX2(DataT z_out) const
void FilterTime(DataT t, DataT dt2, const DataTmask &m)
filter the track with the time measurement
void SetParticleMass(DataT mass)
set particle mass for the fit
void SetTrack(const kf::TrackParam< T > &t)
void SetDoFitVelocity(bool v)
kf::utils::masktype< DataT > DataTmask
TrackKalmanFilter()=default
DataT GetMaxExtrapolationStep() const
get the particle mass
void SetMaxExtrapolationStep(double step)
set max extrapolation step [cm]
void ExtrapolateLine(DataT z_out, const kf::FieldRegion< DataT > &F)
extrapolate the track to the given Z using linearization at the straight line
T GetTy() const
Gets slope along y-axis.
T GetTx() const
Gets slope along x-axis.
T GetQp() const
Gets charge over momentum [ec/GeV].
void Set(const TrackParamBase< T1 > &Tb)
TrackParam classes of different types.
static void CopyEntries(TdataA &a, int ia, const TdataB &b, int ib)
typename std::conditional< std::is_same< T, fvec >::value, fmask, bool >::type masktype
typename std::conditional< std::is_same< T, fvec >::value, fscal, T >::type scaltype
FitDirection operator!(FitDirection d)
class cbm::algo::kf::MeasurementTime _fvecalignment