diff --git a/algo/ca/core/CMakeLists.txt b/algo/ca/core/CMakeLists.txt index 14f9e0306fb7cd6793710c5699fc625c55a20003..513e8138405569f2e9b32f9b74670be352625a16 100644 --- a/algo/ca/core/CMakeLists.txt +++ b/algo/ca/core/CMakeLists.txt @@ -31,7 +31,6 @@ set(SRCS ${CMAKE_CURRENT_SOURCE_DIR}/tracking/CaTrackExtender.cxx ${CMAKE_CURRENT_SOURCE_DIR}/tracking/CaTrackFinder.cxx ${CMAKE_CURRENT_SOURCE_DIR}/tracking/CaTrackFinderWindow.cxx - ${CMAKE_CURRENT_SOURCE_DIR}/tracking/CaTrackFit.cxx ${CMAKE_CURRENT_SOURCE_DIR}/tracking/CaTrackFitter.cxx ${CMAKE_CURRENT_SOURCE_DIR}/tracking/CaTripletConstructor.cxx ) @@ -115,7 +114,6 @@ install( tracking/CaTrackExtender.h tracking/CaTrackFinder.h tracking/CaTrackFinderWindow.h - tracking/CaTrackFit.h tracking/CaTrackFitter.h tracking/CaTripletConstructor.h DESTINATION diff --git a/algo/ca/core/tracking/CaCloneMerger.cxx b/algo/ca/core/tracking/CaCloneMerger.cxx index 40884abbc410b16ee373d53c1c417d72405184cf..cfc7404ef6dc3080918db70b000fc3a192acc00a 100644 --- a/algo/ca/core/tracking/CaCloneMerger.cxx +++ b/algo/ca/core/tracking/CaCloneMerger.cxx @@ -12,8 +12,8 @@ #include "CaFramework.h" #include "CaParameters.h" #include "CaTrack.h" -#include "CaTrackFit.h" #include "CaVector.h" +#include "KfTrackKalmanFilter.h" #include <iostream> @@ -80,12 +80,12 @@ void CloneMerger::Exec(const ca::InputData& input, WindowData& wData) isDownstreamNeighbour[iTr] = false; } - ca::TrackFit<fvec> fitB; + kf::TrackKalmanFilter<fvec> fitB; fitB.SetParticleMass(fDefaultMass); fitB.SetMask(fmask::One()); fitB.SetQp0(fvec(0.)); - ca::TrackFit<fvec> fitF; + kf::TrackKalmanFilter<fvec> fitF; fitF.SetParticleMass(fDefaultMass); fitF.SetMask(fmask::One()); fitF.SetQp0(fvec(0.)); diff --git a/algo/ca/core/tracking/CaTrackExtender.cxx b/algo/ca/core/tracking/CaTrackExtender.cxx index e9e8138facad5cb4346fbb6cba1f3c040919b728..7ce4d5565a515ff1aaee9091af2f5026a5449367 100644 --- a/algo/ca/core/tracking/CaTrackExtender.cxx +++ b/algo/ca/core/tracking/CaTrackExtender.cxx @@ -11,9 +11,9 @@ #include "CaGridArea.h" #include "CaInputData.h" #include "CaTrack.h" -#include "CaTrackFit.h" #include "CaUtils.h" #include "CaVector.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" #include <iostream> @@ -37,12 +37,12 @@ TrackExtender::~TrackExtender() {} // --------------------------------------------------------------------------------------------------------------------- // -void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const FitDirection direction, const fvec qp0, - const bool initParams) +void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const kf::FitDirection direction, + const fvec qp0, const bool initParams) { CBMCA_DEBUG_ASSERT(t.NHits >= 3); - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; fit.SetParticleMass(fDefaultMass); fit.SetMask(fmask::One()); fit.SetTrack(Tout); @@ -52,9 +52,9 @@ void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const const Vector<ca::HitIndex_t>& hits = t.Hits(); // array of indeses of hits of current track const int nHits = t.NofHits(); - const signed short int step = (direction == FitDirection::kUpstream ? -1 : 1); // increment for station index - const int iFirstHit = (direction == FitDirection::kUpstream) ? nHits - 1 : 0; - const int iLastHit = (direction == FitDirection::kUpstream) ? 0 : nHits - 1; + const signed short int step = (direction == kf::FitDirection::kUpstream ? -1 : 1); // increment for station index + const int iFirstHit = (direction == kf::FitDirection::kUpstream) ? nHits - 1 : 0; + const int iLastHit = (direction == kf::FitDirection::kUpstream) ? 0 : nHits - 1; const ca::Hit& hit0 = frWData->Hit(hits[iFirstHit]); const ca::Hit& hit1 = frWData->Hit(hits[iFirstHit + step]); @@ -137,7 +137,7 @@ void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const } // void ca::Framework::BranchFitterFast /// like BranchFitterFast but more precise -void TrackExtender::FitBranch(const ca::Branch& t, TrackParamV& T, const FitDirection direction, const fvec qp0, +void TrackExtender::FitBranch(const ca::Branch& t, TrackParamV& T, const kf::FitDirection direction, const fvec qp0, const bool initParams) { FitBranchFast(t, T, direction, qp0, initParams); @@ -148,19 +148,19 @@ void TrackExtender::FitBranch(const ca::Branch& t, TrackParamV& T, const FitDire } // void ca::Framework::BranchFitter -void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const FitDirection direction, const fvec qp0) +void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const kf::FitDirection direction, const fvec qp0) { Vector<ca::HitIndex_t> newHits{"ca::TrackExtender::newHits"}; newHits.reserve(fParameters.GetNstationsActive()); - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; fit.SetParticleMass(fDefaultMass); fit.SetMask(fmask::One()); fit.SetTrack(Tout); fit.SetQp0(qp0); - const signed short int step = (direction == FitDirection::kUpstream) ? -1 : 1; // increment for station index - const int iFirstHit = (direction == FitDirection::kUpstream) ? 2 : t.NofHits() - 3; + const signed short int step = (direction == kf::FitDirection::kUpstream) ? -1 : 1; // increment for station index + const int iFirstHit = (direction == kf::FitDirection::kUpstream) ? 2 : t.NofHits() - 3; // int ista = fInputData->GetHit(t.Hits[iFirstHit]).iSt + 2 * step; // current station. set to the end of track const ca::Hit& hit0 = frWData->Hit(t.Hits()[iFirstHit]); // optimize @@ -290,7 +290,7 @@ void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const FitDire const unsigned int NNewHits = newHits.size(); t.RefHits().enlarge(NNewHits + NOldHits); - if (direction == FitDirection::kUpstream) { + if (direction == kf::FitDirection::kUpstream) { for (int i = NOldHits - 1; i >= 0; i--) { t.RefHits()[NNewHits + i] = t.RefHits()[i]; } @@ -318,13 +318,13 @@ fscal TrackExtender::ExtendBranch(ca::Branch& t, WindowData& wData) // downstream - FitBranch(t, T, FitDirection::kDownstream, 0.0); - FindMoreHits(t, T, FitDirection::kDownstream, T.Qp()); + FitBranch(t, T, kf::FitDirection::kDownstream, 0.0); + FindMoreHits(t, T, kf::FitDirection::kDownstream, T.Qp()); // upstream - FitBranchFast(t, T, FitDirection::kUpstream, T.Qp(), false); - FindMoreHits(t, T, FitDirection::kUpstream, T.Qp()); + FitBranchFast(t, T, kf::FitDirection::kUpstream, T.Qp(), false); + FindMoreHits(t, T, kf::FitDirection::kUpstream, T.Qp()); return T.GetChiSq()[0]; } diff --git a/algo/ca/core/tracking/CaTrackExtender.h b/algo/ca/core/tracking/CaTrackExtender.h index 48260c0b8432ffd142c0d41ede908dfcb67a118f..0fa6f0562fa3dced3aa2d7c470cb6fa64d7dd0cc 100644 --- a/algo/ca/core/tracking/CaTrackExtender.h +++ b/algo/ca/core/tracking/CaTrackExtender.h @@ -13,9 +13,9 @@ #include "CaHit.h" #include "CaParameters.h" #include "CaSimd.h" -#include "CaTrackFit.h" #include "CaVector.h" #include "CaWindowData.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" namespace cbm::algo::ca @@ -62,7 +62,7 @@ namespace cbm::algo::ca /// \param T - track params /// \param dir - 0 - forward, 1 - backward /// \param qp0 - momentum value to linearize the extrapolation - void FindMoreHits(ca::Branch& t, TrackParamV& T, const FitDirection direction, const fvec qp0); + void FindMoreHits(ca::Branch& t, TrackParamV& T, const kf::FitDirection direction, const fvec qp0); /// Fits the branch. Does few passes over the hits. /// \param t - track branch with hits @@ -70,7 +70,7 @@ namespace cbm::algo::ca /// \param dir - false - forward, true - backward /// \param qp0 - momentum value to linearize the extrapolation /// \param initParams - should params be ititialized. 1 - yes. - void FitBranch(const ca::Branch& t, TrackParamV& T, const FitDirection direction, const fvec qp0, + void FitBranch(const ca::Branch& t, TrackParamV& T, const kf::FitDirection direction, const fvec qp0, const bool initParams = true); @@ -80,7 +80,7 @@ namespace cbm::algo::ca /// \param dir - false - forward, true - backward /// \param qp0 - momentum value to linearize the extrapolation /// \param initParams - should params be ititialized. 1 - yes. - void FitBranchFast(const ca::Branch& t, TrackParamV& T, const FitDirection direction, const fvec qp0, + void FitBranchFast(const ca::Branch& t, TrackParamV& T, const kf::FitDirection direction, const fvec qp0, const bool initParams = true); private: diff --git a/algo/ca/core/tracking/CaTrackFitter.cxx b/algo/ca/core/tracking/CaTrackFitter.cxx index a52a20986333058ded5fcc6d62d35ed5f6ee4830..1a2005d68318861e68c828ae519d89fd115985f2 100644 --- a/algo/ca/core/tracking/CaTrackFitter.cxx +++ b/algo/ca/core/tracking/CaTrackFitter.cxx @@ -5,7 +5,7 @@ #include "CaTrackFitter.h" #include "CaFramework.h" -#include "CaTrackFit.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" #include <iostream> @@ -50,7 +50,7 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData) const int nStations = fParameters.GetNstationsActive(); int nTracks_SIMD = fvec::size(); - ca::TrackFit<fvec> fit; // fit parameters coresponding to the current track + kf::TrackKalmanFilter<fvec> fit; // fit parameters coresponding to the current track TrackParamV& tr = fit.Tr(); fit.SetParticleMass(fDefaultMass); fit.SetDoFitVelocity(true); @@ -263,7 +263,7 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData) fit.SetMask(initialised); fit.Extrapolate(z[ista], fld1); fit.MultipleScattering(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y())); - fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), FitDirection::kUpstream); + fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), kf::FitDirection::kUpstream); fit.SetMask(initialised && w[ista]); fit.FilterXY(mxy[ista]); @@ -278,7 +278,7 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData) // extrapolate to the PV region - ca::TrackFit fitpv = fit; + kf::TrackKalmanFilter fitpv = fit; { fitpv.SetMask(fmask::One()); @@ -366,7 +366,7 @@ void TrackFitter::FitCaTracks(const ca::InputData& input, WindowData& wData) fit.SetMask(initialised); fit.Extrapolate(z[ista], fld); fit.MultipleScattering(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y())); - fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), FitDirection::kDownstream); + fit.EnergyLossCorrection(fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()), kf::FitDirection::kDownstream); fit.SetMask(initialised && w[ista]); fit.FilterXY(mxy[ista]); fit.FilterTime(time[ista], dt2[ista], fmask(sta[ista].timeInfo)); diff --git a/algo/ca/core/tracking/CaTripletConstructor.cxx b/algo/ca/core/tracking/CaTripletConstructor.cxx index 43bfdfee01ec0a5834b63567bb1486c6db1ca46e..cc1b935b8640cca7c0d13bfd1660a143b6b26605 100644 --- a/algo/ca/core/tracking/CaTripletConstructor.cxx +++ b/algo/ca/core/tracking/CaTripletConstructor.cxx @@ -12,7 +12,7 @@ #include <iostream> // #include "CaToolsDebugger.h" #include "AlgoFairloggerCompat.h" -#include "CaTrackFit.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" // using cbm::ca::tools::Debugger; @@ -91,7 +91,7 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut, return; } - ca::TrackFit<fvec> fit(fmask::One(), true); + kf::TrackKalmanFilter<fvec> fit(fmask::One(), true); fit.SetParticleMass(frWData.CurrentIteration()->GetElectronFlag() ? constants::phys::ElectronMass : fDefaultMass); fit.SetQp0(frWData.CurrentIteration()->GetMaxQp()); @@ -190,7 +190,7 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut, } -void TripletConstructor::FindDoublets(ca::TrackFit<fvec>& fit) +void TripletConstructor::FindDoublets(kf::TrackKalmanFilter<fvec>& fit) { // ---- Add the middle hits to parameters estimation ---- Vector<TrackParamV>& tracks = fDoubletData.first; @@ -293,7 +293,7 @@ void TripletConstructor::FindTripletHits() /// Add the middle hits to parameters estimation. Propagate to right station. /// Find the triplets(right hit). Reformat data in the portion of triplets. - ca::TrackFit<fvec> fit(fmask::One(), true); + kf::TrackKalmanFilter<fvec> fit(fmask::One(), true); fit.SetParticleMass(frWData.CurrentIteration()->GetElectronFlag() ? constants::phys::ElectronMass : fDefaultMass); fit.SetQp0(fvec(0.)); @@ -428,7 +428,7 @@ void TripletConstructor::FindTriplets() // "triplets", "ev:iter:i0:x0:y0:z0:i1:x1:y1:z1:i2:x2:y2:z2:mc:sta:p:vx:vy:vz:chi2:ndf:chi2time:ndfTime"); } - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; fit.SetMask(fmask::One()); fit.SetParticleMass(frWData.CurrentIteration()->GetElectronFlag() ? constants::phys::ElectronMass : fDefaultMass); @@ -508,7 +508,7 @@ void TripletConstructor::FindTriplets() // repeat several times in order to improve the precision for (int iiter = 0; iiter < nIterations; ++iiter) { - auto fitTrack = [&](int startIdx, int endIdx, int step, FitDirection direction) { + auto fitTrack = [&](int startIdx, int endIdx, int step, kf::FitDirection direction) { const fvec maxQp = frWData.CurrentIteration()->GetMaxQp(); fit.SetQp0(T.Qp()); fit.Qp0()(fit.Qp0() > maxQp) = maxQp; @@ -545,12 +545,12 @@ void TripletConstructor::FindTriplets() }; // Fit downstream - fitTrack(0, NHits, 1, FitDirection::kDownstream); + fitTrack(0, NHits, 1, kf::FitDirection::kDownstream); if (iiter == nIterations - 1) break; // Fit upstream - fitTrack(NHits - 1, -1, -1, FitDirection::kUpstream); + fitTrack(NHits - 1, -1, -1, kf::FitDirection::kUpstream); } // for iiter tracks.push_back(T); @@ -641,8 +641,8 @@ void TripletConstructor::SelectTriplets(Vector<ca::Triplet>& tripletsOut) } -void TripletConstructor::CollectHits(Vector<ca::HitIndex_t>& collectedHits, ca::TrackFit<fvec>& fit, const int iSta, - const double chi2Cut, const int iMC, const int maxNhits) +void TripletConstructor::CollectHits(Vector<ca::HitIndex_t>& collectedHits, kf::TrackKalmanFilter<fvec>& fit, + const int iSta, const double chi2Cut, const int iMC, const int maxNhits) { /// Collect hits on a station collectedHits.clear(); @@ -739,7 +739,7 @@ void TripletConstructor::CollectHits(Vector<ca::HitIndex_t>& collectedHits, ca:: kf::MeasurementXy<fvec> mxy(hit.X(), hit.Y(), hit.dX2(), hit.dY2(), hit.dXY(), fvec::One(), fvec::One()); const fvec C10 = fit.ExtrapolateLineDxy(z); - const auto [chi2x, chi2u] = ca::TrackFit<fvec>::GetChi2XChi2U(mxy, x, y, C00, C10, C11); + const auto [chi2x, chi2u] = kf::TrackKalmanFilter<fvec>::GetChi2XChi2U(mxy, x, y, C00, C10, C11); // TODO: adjust the cut, cut on chi2x & chi2u separately if (!frWData.CurrentIteration()->GetTrackFromTripletsFlag()) { diff --git a/algo/ca/core/tracking/CaTripletConstructor.h b/algo/ca/core/tracking/CaTripletConstructor.h index d01931491bc02036596d1b9dfb598193df78e9a6..eddba821f1c1c7a66ed2210d3f40c87917fb1459 100644 --- a/algo/ca/core/tracking/CaTripletConstructor.h +++ b/algo/ca/core/tracking/CaTripletConstructor.h @@ -11,12 +11,12 @@ #include "CaFramework.h" #include "CaGridEntry.h" #include "CaStation.h" -#include "CaTrackFit.h" #include "CaTriplet.h" #include "CaVector.h" #include "CaWindowData.h" #include "KfFieldRegion.h" #include "KfSimd.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" namespace cbm::algo::ca @@ -59,7 +59,7 @@ namespace cbm::algo::ca bool InitStations(int istal, int istam, int istar); /// Find the doublets. Reformat data in the portion of doublets. - void FindDoublets(ca::TrackFit<fvec>& fit); + void FindDoublets(kf::TrackKalmanFilter<fvec>& fit); /// Add the middle hits to parameters estimation. Propagate to right station. /// Find the triplets (right hit). Reformat data in the portion of triplets. @@ -71,7 +71,7 @@ namespace cbm::algo::ca /// Select good triplets. void SelectTriplets(Vector<ca::Triplet>& tripletsOut); - void CollectHits(Vector<ca::HitIndex_t>& collectedHits, ca::TrackFit<fvec>& fit, const int iSta, + void CollectHits(Vector<ca::HitIndex_t>& collectedHits, kf::TrackKalmanFilter<fvec>& fit, const int iSta, const double chi2Cut, const int iMC, const int maxNhits); private: diff --git a/algo/ca/core/utils/CaUtils.h b/algo/ca/core/utils/CaUtils.h index 2334616ab778f425aedd8231cfd52b40c76b9a2d..29ca44a7880db82eccab98ee2d973b85c38e520a 100644 --- a/algo/ca/core/utils/CaUtils.h +++ b/algo/ca/core/utils/CaUtils.h @@ -10,18 +10,18 @@ #pragma once // include this header only once per compilation unit #include "CaHit.h" -#include "CaTrackFit.h" #include "KfDefs.h" #include "KfMeasurementTime.h" #include "KfMeasurementXy.h" #include "KfSimd.h" +#include "KfTrackKalmanFilter.h" namespace cbm::algo::ca::utils { template<typename T> - inline void FilterHit(ca::TrackFit<T>& fit, const ca::Hit& hit, const kf::utils::masktype<T>& timeInfo) + inline void FilterHit(kf::TrackKalmanFilter<T>& fit, const ca::Hit& hit, const kf::utils::masktype<T>& timeInfo) { kf::MeasurementXy<T> m; m.SetDx2(hit.dX2()); diff --git a/algo/kf/core/CMakeLists.txt b/algo/kf/core/CMakeLists.txt index 1d6b40765e648df11add2bc32704c93ca3a8f7bc..ad1a50b2638ebc263638762f1e2b3a54af034160 100644 --- a/algo/kf/core/CMakeLists.txt +++ b/algo/kf/core/CMakeLists.txt @@ -9,6 +9,7 @@ set(INCLUDE_DIRECTORIES set(SRCS ${CMAKE_CURRENT_SOURCE_DIR}/KfFramework.cxx + ${CMAKE_CURRENT_SOURCE_DIR}/KfTrackKalmanFilter.cxx ${CMAKE_CURRENT_SOURCE_DIR}/data/KfTrackParam.cxx ${CMAKE_CURRENT_SOURCE_DIR}/data/KfMeasurementU.cxx ${CMAKE_CURRENT_SOURCE_DIR}/data/KfMeasurementXy.cxx @@ -70,10 +71,13 @@ install( FILES KfFramework.h KfDefs.h + KfTrackKalmanFilter.h + data/KfTrackParam.h data/KfMeasurementU.h data/KfMeasurementXy.h data/KfMeasurementTime.h + geo/KfField.h geo/KfFieldRegion.h geo/KfFieldSlice.h @@ -83,13 +87,16 @@ install( geo/KfSetupInitializer.h geo/KfTarget.h geo/KfField.h + pars/KfParticlePDG.h + utils/KfVector.h utils/KfSimd.h utils/KfSimdVc.h utils/KfSimdPseudo.h utils/KfUtils.h utils/KfMath.h - DESTINATION + + DESTINATION include/ ) diff --git a/algo/ca/core/tracking/CaTrackFit.cxx b/algo/kf/core/KfTrackKalmanFilter.cxx similarity index 92% rename from algo/ca/core/tracking/CaTrackFit.cxx rename to algo/kf/core/KfTrackKalmanFilter.cxx index f79e4fdb7e65138d4113383e9d234acaac4d51c9..f9bdb65f257a85338e1a043eb0c2b88ec3e73a62 100644 --- a/algo/ca/core/tracking/CaTrackFit.cxx +++ b/algo/kf/core/KfTrackKalmanFilter.cxx @@ -2,16 +2,16 @@ SPDX-License-Identifier: GPL-3.0-only Authors: Maksym Zyzak [committer], Valentina Akishina */ -#include "CaTrackFit.h" +#include "KfTrackKalmanFilter.h" #include "KfMeasurementU.h" #include "KfMeasurementXy.h" -namespace cbm::algo::ca +namespace cbm::algo::kf { template<typename DataT> - void TrackFit<DataT>::Filter1d(const kf::MeasurementU<DataT>& m) + void TrackKalmanFilter<DataT>::Filter1d(const kf::MeasurementU<DataT>& m) { DataT zeta, HCH; DataT F0, F1, F2, F3, F4, F5, F6; @@ -101,7 +101,7 @@ namespace cbm::algo::ca } template<typename DataT> - void TrackFit<DataT>::FilterTime(DataT t, DataT dt2, const DataTmask& timeInfo) + void TrackKalmanFilter<DataT>::FilterTime(DataT t, DataT dt2, const DataTmask& timeInfo) { // filter track with a time measurement @@ -185,7 +185,7 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::FilterXY(const kf::MeasurementXy<DataT>& mxy, bool skipUnmeasuredCoordinates) + void TrackKalmanFilter<DataT>::FilterXY(const kf::MeasurementXy<DataT>& mxy, bool skipUnmeasuredCoordinates) { { kf::MeasurementU<DataT> mx; @@ -326,9 +326,10 @@ namespace cbm::algo::ca } template<typename DataT> - void TrackFit<DataT>::FilterExtrapolatedXY(const kf::MeasurementXy<DataT>& m, DataT extrX, DataT extrY, - const std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jx, - const std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jy) + void + TrackKalmanFilter<DataT>::FilterExtrapolatedXY(const kf::MeasurementXy<DataT>& m, DataT extrX, DataT extrY, + const std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jx, + const std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jy) { // add a 2-D measurenent (x,y) at some z, that differs from fTr.GetZ() // extrX, extrY are extrapolated track parameters at z, Jx, Jy are derivatives of the extrapolation @@ -411,7 +412,7 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::MeasureVelocityWithQp() + void TrackKalmanFilter<DataT>::MeasureVelocityWithQp() { // measure velocity using measured qp // assuming particle mass == fMass; @@ -506,7 +507,7 @@ namespace cbm::algo::ca } template<typename DataT> - void TrackFit<DataT>::FilterVi(DataT vi) + void TrackKalmanFilter<DataT>::FilterVi(DataT vi) { // set inverse velocity to vi @@ -595,9 +596,9 @@ namespace cbm::algo::ca } template<typename DataT> - void - TrackFit<DataT>::Extrapolate // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix - (DataT z_out, // extrapolate to this z position + void TrackKalmanFilter< + DataT>::Extrapolate // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix + (DataT z_out, // extrapolate to this z position const kf::FieldRegion<DataT>& F) { // use Q/p linearisation at fQp0 @@ -617,7 +618,7 @@ namespace cbm::algo::ca } template<typename DataT> - void TrackFit< + void TrackKalmanFilter< DataT>::ExtrapolateStep // extrapolates track parameters and returns jacobian for extrapolation of CovMatrix (DataT zOut, // extrapolate to this z position const kf::FieldRegion<DataT>& Field) @@ -832,7 +833,7 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::ExtrapolateLine(DataT z_out, const kf::FieldRegion<DataT>& F) + void TrackKalmanFilter<DataT>::ExtrapolateLine(DataT z_out, const kf::FieldRegion<DataT>& F) { // extrapolate the track assuming fQp0 == 0 // TODO: write special simplified procedure @@ -844,7 +845,7 @@ namespace cbm::algo::ca } template<typename DataT> - void TrackFit<DataT>::ExtrapolateLineNoField(DataT zOut) + void TrackKalmanFilter<DataT>::ExtrapolateLineNoField(DataT zOut) { // extrapolate the track assuming no field @@ -976,7 +977,7 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::MultipleScattering(DataT radThick, DataT qp0) + void TrackKalmanFilter<DataT>::MultipleScattering(DataT radThick, DataT qp0) { cnst kONE = 1.; @@ -1002,7 +1003,7 @@ namespace cbm::algo::ca } template<typename DataT> - void TrackFit<DataT>::MultipleScatteringInThickMaterial(DataT radThick, DataT thickness, bool fDownstream) + void TrackKalmanFilter<DataT>::MultipleScatteringInThickMaterial(DataT radThick, DataT thickness, bool fDownstream) { cnst kONE = 1.; @@ -1043,7 +1044,7 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::EnergyLossCorrection(DataT radThick, FitDirection direction) + void TrackKalmanFilter<DataT>::EnergyLossCorrection(DataT radThick, FitDirection direction) { cnst qp2cut(1. / (10. * 10.)); // 10 GeV cut cnst qp02 = kf::utils::max(fQp0 * fQp0, qp2cut); @@ -1077,8 +1078,8 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::EnergyLossCorrection(int atomicZ, DataTscal atomicA, DataTscal rho, DataTscal radLen, - DataT radThick, FitDirection direction) + void TrackKalmanFilter<DataT>::EnergyLossCorrection(int atomicZ, DataTscal atomicA, DataTscal rho, DataTscal radLen, + DataT radThick, FitDirection direction) { cnst qp2cut(1. / (10. * 10.)); // 10 GeV cut cnst qp02 = kf::utils::max(fQp0 * fQp0, qp2cut); @@ -1147,9 +1148,10 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::GetExtrapolatedXYline(DataT z, const kf::FieldRegion<DataT>& F, DataT& extrX, DataT& extrY, - std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jx, - std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jy) const + void + TrackKalmanFilter<DataT>::GetExtrapolatedXYline(DataT z, const kf::FieldRegion<DataT>& F, DataT& extrX, DataT& extrY, + std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jx, + std::array<DataT, kf::TrackParamBase<DataT>::kNtrackParam>& Jy) const { // extrapolate track assuming it is straight (qp==0) // return the extrapolated X, Y and the derivatives of the extrapolated X and Y @@ -1200,8 +1202,8 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::FilterWithTargetAtLine(DataT targZ, const kf::MeasurementXy<DataT>& targXY, - const kf::FieldRegion<DataT>& F) + void TrackKalmanFilter<DataT>::FilterWithTargetAtLine(DataT targZ, const kf::MeasurementXy<DataT>& targXY, + const kf::FieldRegion<DataT>& F) { // Add the target constraint to a straight line track @@ -1212,7 +1214,7 @@ namespace cbm::algo::ca } template<typename DataT> - DataT TrackFit<DataT>::ApproximateBetheBloch(DataT bg2) + DataT TrackKalmanFilter<DataT>::ApproximateBetheBloch(DataT bg2) { // // This is the parameterization of the Bethe-Bloch formula inspired by Geant. @@ -1259,7 +1261,8 @@ namespace cbm::algo::ca } template<typename DataT> - DataT TrackFit<DataT>::ApproximateBetheBloch(DataT bg2, DataT kp0, DataT kp1, DataT kp2, DataT kp3, DataT kp4) + DataT TrackKalmanFilter<DataT>::ApproximateBetheBloch(DataT bg2, DataT kp0, DataT kp1, DataT kp2, DataT kp3, + DataT kp4) { // // This is the parameterization of the Bethe-Bloch formula inspired by Geant. @@ -1307,8 +1310,8 @@ namespace cbm::algo::ca template<typename DataT> - std::tuple<DataT, DataT> TrackFit<DataT>::GetChi2XChi2U(kf::MeasurementXy<DataT> m, DataT x, DataT y, DataT C00, - DataT C10, DataT C11) + std::tuple<DataT, DataT> TrackKalmanFilter<DataT>::GetChi2XChi2U(kf::MeasurementXy<DataT> m, DataT x, DataT y, + DataT C00, DataT C10, DataT C11) { DataT chi2x{0.}; @@ -1359,9 +1362,9 @@ namespace cbm::algo::ca template<typename DataT> - void TrackFit<DataT>::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) + void TrackKalmanFilter<DataT>::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) { // gives nice initial approximation for x,y,tx,ty - almost same as KF fit. qp - is shifted by 4%, resid_ual - ~3.5% (KF fit resid_ual - 1%). @@ -1487,8 +1490,8 @@ namespace cbm::algo::ca fQp0 = fTr.Qp(); } - template class TrackFit<kf::fvec>; - template class TrackFit<float>; - template class TrackFit<double>; + template class TrackKalmanFilter<kf::fvec>; + template class TrackKalmanFilter<float>; + template class TrackKalmanFilter<double>; -} // namespace cbm::algo::ca +} // namespace cbm::algo::kf diff --git a/algo/ca/core/tracking/CaTrackFit.h b/algo/kf/core/KfTrackKalmanFilter.h similarity index 92% rename from algo/ca/core/tracking/CaTrackFit.h rename to algo/kf/core/KfTrackKalmanFilter.h index 0328be57b618f93149fdac9a896b66fb267a3177..525ef228e98caa00ea649b40c8fd2f810f001c95 100644 --- a/algo/ca/core/tracking/CaTrackFit.h +++ b/algo/kf/core/KfTrackKalmanFilter.h @@ -3,7 +3,7 @@ Authors: Sergey Gorbunov [committer], Maksym Zyzak */ -/// \file CaTrackFit.h +/// \file KfTrackKalmanFilter.h /// \brief Track fit utilities for the CA tracking based on the Kalman filter /// \since 10.02.2023 /// \author S.Gorbunov @@ -20,7 +20,7 @@ #include <type_traits> -namespace cbm::algo::ca +namespace cbm::algo::kf { class Hit; @@ -38,20 +38,20 @@ namespace cbm::algo::ca /// Track fit utilities for the CA tracking based on the Kalman Filter /// template<typename DataT> - class TrackFit { + class TrackKalmanFilter { public: using DataTscal = kf::utils::scaltype<DataT>; using DataTmask = kf::utils::masktype<DataT>; - TrackFit() = default; + TrackKalmanFilter() = default; - TrackFit(const kf::TrackParamBase<DataT>& t) { SetTrack(t); } + TrackKalmanFilter(const kf::TrackParamBase<DataT>& t) { SetTrack(t); } - TrackFit(const DataTmask& m, bool fitV) : fMask(m), fDoFitVelocity(fitV) {} + TrackKalmanFilter(const DataTmask& m, bool fitV) : fMask(m), fDoFitVelocity(fitV) {} template<typename T> - TrackFit(const kf::TrackParamBase<T>& t) + TrackKalmanFilter(const kf::TrackParamBase<T>& t) { SetTrack(t); } @@ -73,7 +73,7 @@ namespace cbm::algo::ca void SetDoFitVelocity(bool v) { fDoFitVelocity = v; } - void SetOneEntry(const int i0, const TrackFit& T1, const int i1); + void SetOneEntry(const int i0, const TrackKalmanFilter& T1, const int i1); std::string ToString(int i = -1); @@ -259,38 +259,38 @@ namespace cbm::algo::ca // ============================================================================================= template<typename DataT> - inline std::string TrackFit<DataT>::ToString(int i) + inline std::string TrackKalmanFilter<DataT>::ToString(int i) { return fTr.ToString(i); } template<typename DataT> - inline void TrackFit<DataT>::SetOneEntry(const int i0, const TrackFit& T1, const int i1) + inline void TrackKalmanFilter<DataT>::SetOneEntry(const int i0, const TrackKalmanFilter& T1, const int i1) { fTr.SetOneEntry(i0, T1.fTr, i1); kf::utils::VecCopy<DataT, DataT, false, false>::CopyEntries(fQp0, i0, T1.fQp0, i1); } template<typename DataT> - inline std::pair<DataT, DataT> TrackFit<DataT>::ExtrapolateLineXdX2(DataT z_out) const + inline std::pair<DataT, DataT> TrackKalmanFilter<DataT>::ExtrapolateLineXdX2(DataT z_out) const { DataT dz = (z_out - fTr.GetZ()); return std::pair(fTr.GetX() + fTr.GetTx() * dz, fTr.C00() + dz * (2 * fTr.C20() + dz * fTr.C22())); } template<typename DataT> - inline std::pair<DataT, DataT> TrackFit<DataT>::ExtrapolateLineYdY2(DataT z_out) const + inline std::pair<DataT, DataT> TrackKalmanFilter<DataT>::ExtrapolateLineYdY2(DataT z_out) const { DataT dz = (z_out - fTr.GetZ()); return std::pair(fTr.GetY() + fTr.GetTy() * dz, fTr.C11() + dz * (DataT(2.) * fTr.C31() + dz * fTr.C33())); } template<typename DataT> - inline DataT TrackFit<DataT>::ExtrapolateLineDxy(DataT z_out) const + inline DataT TrackKalmanFilter<DataT>::ExtrapolateLineDxy(DataT z_out) const { DataT dz = (z_out - fTr.GetZ()); return fTr.C10() + dz * (fTr.C21() + fTr.C30() + dz * fTr.C32()); } -} // namespace cbm::algo::ca +} // namespace cbm::algo::kf diff --git a/reco/KF/CbmKfTrackFitter.cxx b/reco/KF/CbmKfTrackFitter.cxx index 60b4435c15e5ffc3544fb9ef6530768b8094cb79..28c2940f4f84443292f70424cf24781d93d0b7fe 100644 --- a/reco/KF/CbmKfTrackFitter.cxx +++ b/reco/KF/CbmKfTrackFitter.cxx @@ -8,7 +8,6 @@ #include "CaFramework.h" #include "CaSimd.h" #include "CaStation.h" -#include "CaTrackFit.h" #include "CbmGlobalTrack.h" #include "CbmL1.h" #include "CbmL1Util.h" @@ -30,6 +29,7 @@ #include "CbmTrdTrackingInterface.h" #include "FairRootManager.h" #include "KFParticleDatabase.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" #include "TClonesArray.h" #include "TDatabasePDG.h" @@ -453,7 +453,7 @@ void CbmKfTrackFitter::FilterFirstMeasurement(const FitNode& n) } -void CbmKfTrackFitter::AddMaterialEffects(CbmKfTrackFitter::FitNode& n, ca::FitDirection direction) +void CbmKfTrackFitter::AddMaterialEffects(CbmKfTrackFitter::FitNode& n, kf::FitDirection direction) { // add material effects if (n.fMaterialLayer < 0) { @@ -578,7 +578,7 @@ bool CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) fFit.SetQp0(n.fTrack.GetQp()); } - AddMaterialEffects(n, FitDirection::kDownstream); + AddMaterialEffects(n, kf::FitDirection::kDownstream); if (n.fIsXySet) { fFit.FilterXY(n.fMxy, fSkipUnmeasuredCoordinates); @@ -622,7 +622,7 @@ bool CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) fFit.Extrapolate(n.fZ, field); - AddMaterialEffects(n, FitDirection::kUpstream); + AddMaterialEffects(n, kf::FitDirection::kUpstream); if (n.fIsXySet) { fFit.FilterXY(n.fMxy, fSkipUnmeasuredCoordinates); @@ -654,7 +654,7 @@ bool CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) if (n.fIsFitted) { fFit.SetQp0(n.fTrack.GetQp()); } - AddMaterialEffects(n, FitDirection::kUpstream); + AddMaterialEffects(n, kf::FitDirection::kUpstream); } } diff --git a/reco/KF/CbmKfTrackFitter.h b/reco/KF/CbmKfTrackFitter.h index b7281881c98458a3e383eecf82c79c6507396987..00a5f11e97c317c97afecd2748b0b86c1fd4e04a 100644 --- a/reco/KF/CbmKfTrackFitter.h +++ b/reco/KF/CbmKfTrackFitter.h @@ -7,10 +7,10 @@ #include "CaDefs.h" #include "CaSimd.h" -#include "CaTrackFit.h" #include "CbmDefs.h" #include "KfMeasurementTime.h" #include "KfMeasurementXy.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" #include <vector> @@ -137,7 +137,7 @@ class CbmKfTrackFitter { private: void FilterFirstMeasurement(const FitNode& n); - void AddMaterialEffects(FitNode& n, ca::FitDirection direction); + void AddMaterialEffects(FitNode& n, kf::FitDirection direction); // combine two tracks bool Smooth(kf::TrackParamBase<double>& t1, const kf::TrackParamBase<double>& t2); @@ -160,7 +160,7 @@ class CbmKfTrackFitter { bool fIsInitialized = {false}; // is the fitter initialized bool fSkipUnmeasuredCoordinates{false}; - ca::TrackFit<double> fFit; // track fit object + kf::TrackKalmanFilter<double> fFit; // track fit object /// externally defined inverse momentum for the Multiple Scattering calculation. /// It is used for the tracks in field-free regions. @@ -169,8 +169,8 @@ class CbmKfTrackFitter { double fDefaultQpForMs{1. / 0.1}; bool fIsQpForMsFixed{false}; - double fMass{ca::constants::phys::PionMass}; // mass hypothesis for the fit - bool fIsElectron{false}; // fit track as an electron (with the bermsstrallung effect) - bool fDoSmooth{true}; // do the KF-smoothing to define track pars at all the nodes - int fVerbosityLevel{0}; // verbosity level + double fMass{kf::defs::PionMass<double>}; // mass hypothesis for the fit + bool fIsElectron{false}; // fit track as an electron (with the bermsstrallung effect) + bool fDoSmooth{true}; // do the KF-smoothing to define track pars at all the nodes + int fVerbosityLevel{0}; // verbosity level }; diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx index ade81fed64ae60c43cbc3e4ee7f08a7cd7047bf0..7b5d1929840cffe49c455b9e6f1dad0859fbffce 100644 --- a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx +++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx @@ -31,11 +31,11 @@ #include "CaSimd.h" #include "CaStation.h" #include "CaToolsField.h" -#include "CaTrackFit.h" #include "CbmKFVertex.h" #include "FairRootManager.h" #include "KFParticleDatabase.h" #include "KfFieldRegion.h" +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" #include "TDatabasePDG.h" @@ -152,7 +152,7 @@ inline int CbmL1PFFitter::GetStsStationIndex(const CbmStsHit* hit) } -void FilterFirst(ca::TrackFit<fvec>& fit, kf::MeasurementXy<fvec>& mxy, fvec& t, fvec& dt2) +void FilterFirst(kf::TrackKalmanFilter<fvec>& fit, kf::MeasurementXy<fvec>& mxy, fvec& t, fvec& dt2) { TrackParamV& tr = fit.Tr(); tr.ResetErrors(mxy.Dx2(), mxy.Dy2(), 1., 1., 1., dt2, 1.e2); @@ -178,7 +178,7 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM static int nHits = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(); int nTracks_SIMD = fvec::size(); - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; fit.SetParticleMass(CbmL1::Instance()->fpAlgo->GetDefaultParticleMass()); TrackParamV& T = fit.Tr(); // fitting parametr coresponding to current track @@ -372,7 +372,7 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM fit.Extrapolate(z[i], fld); auto radThick = CbmL1::Instance()->fpAlgo->GetParameters().GetMaterialThickness(i, fit.Tr().X(), fit.Tr().Y()); fit.MultipleScattering(radThick); - fit.EnergyLossCorrection(radThick, FitDirection::kDownstream); + fit.EnergyLossCorrection(radThick, kf::FitDirection::kDownstream); fit.SetMask(initialised && w[i]); fit.FilterXY(mxy[i]); @@ -433,7 +433,7 @@ void CbmL1PFFitter::Fit(std::vector<CbmStsTrack>& Tracks, const std::vector<CbmM fit.Extrapolate(z[i], fld); auto radThick = CbmL1::Instance()->fpAlgo->GetParameters().GetMaterialThickness(i, fit.Tr().X(), fit.Tr().Y()); fit.MultipleScattering(radThick); - fit.EnergyLossCorrection(radThick, FitDirection::kUpstream); + fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); fit.SetMask(initialised && w[i]); fit.FilterXY(mxy[i]); @@ -501,7 +501,7 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe int nTracks_SIMD = fvec::size(); - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; TrackParamV& T = fit.Tr(); // fitting parametr coresponding to current track CbmStsTrack* tr[fvec::size()]{nullptr}; @@ -602,7 +602,7 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe fit.Extrapolate(zSta[iSt], fld); auto radThick = CbmL1::Instance()->fpAlgo->GetParameters().GetMaterialThickness(iSt, fit.Tr().X(), fit.Tr().Y()); fit.MultipleScattering(radThick); - fit.EnergyLossCorrection(radThick, FitDirection::kUpstream); + fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); } fit.SetMask(fmask::One()); fit.Extrapolate(primVtx.GetRefZ(), fld); @@ -611,7 +611,7 @@ void CbmL1PFFitter::GetChiToVertex(vector<CbmStsTrack>& Tracks, vector<PFFieldRe constexpr float targetRadThick = 3.73e-2f * 2; // 250 mum Gold fit.MultipleScattering(targetRadThick); - fit.EnergyLossCorrection(targetRadThick, FitDirection::kUpstream); + fit.EnergyLossCorrection(targetRadThick, kf::FitDirection::kUpstream); Double_t Cv[3] = {primVtx.GetCovMatrix()[0], primVtx.GetCovMatrix()[1], primVtx.GetCovMatrix()[2]}; diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx index 8a3ea1070bd69096777dec2ae48d9cb7b2b7d67d..8d012fc01da836a996667b8103c4ac5adf3ff4e1 100644 --- a/reco/L1/CbmL1Performance.cxx +++ b/reco/L1/CbmL1Performance.cxx @@ -20,7 +20,6 @@ #include "CaFramework.h" #include "CaToolsDebugger.h" -#include "CaTrackFit.h" #include "CbmL1.h" #include "CbmL1Constants.h" #include "CbmL1Counters.h" @@ -40,6 +39,7 @@ #include "FairField.h" #include "FairRunAna.h" #include "FairTrackParam.h" // for vertex pulls +#include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" #include "TFile.h" #include "TH1.h" @@ -1095,7 +1095,7 @@ void CbmL1::TrackFitPerformance() static bool first_call = 1; - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; fit.SetParticleMass(fpAlgo->GetDefaultParticleMass()); fit.SetMask(fmask::One()); //fit.SetMaxExtrapolationStep(10.); @@ -1325,7 +1325,7 @@ void CbmL1::TrackFitPerformance() // LOG(info) << iSta << " " << dir; auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY()); fit.MultipleScattering(radThick); - fit.EnergyLossCorrection(radThick, FitDirection::kUpstream); + fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); } } if (mc.GetStartZ() != tr.GetZ()[0]) continue; @@ -1394,7 +1394,7 @@ void CbmL1::TrackFitPerformance() fit.Extrapolate(fpAlgo->GetParameters().GetStation(iSta).fZ, fld); auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY()); fit.MultipleScattering(radThick); - fit.EnergyLossCorrection(radThick, FitDirection::kUpstream); + fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); } fit.Extrapolate(mc.GetStartZ(), fld); } @@ -1520,7 +1520,7 @@ void CbmL1::TrackFitPerformance() void CbmL1::FillFitHistos(TrackParamV& track, const cbm::ca::tools::MCPoint& mcP, bool isTimeFitted, TH1F* h[]) { - ca::TrackFit<fvec> fit; + kf::TrackKalmanFilter<fvec> fit; fit.SetParticleMass(fpAlgo->GetDefaultParticleMass()); fit.SetMask(fmask::One()); //fit.SetMaxExtrapolationStep(10.); diff --git a/reco/L1/qa/CbmCaTrackFitQa.cxx b/reco/L1/qa/CbmCaTrackFitQa.cxx index 722460a7480aae8512cb6ca4f8737aa2f58c7ba6..4639814ea8413efa659238a6bbd867bd9f2d6ea8 100644 --- a/reco/L1/qa/CbmCaTrackFitQa.cxx +++ b/reco/L1/qa/CbmCaTrackFitQa.cxx @@ -11,11 +11,11 @@ #include "CaToolsField.h" #include "CaToolsMCData.h" -#include "CaTrackFit.h" #include "CbmL1Track.h" #include "CbmQaCanvas.h" #include "CbmQaUtil.h" #include "KfFieldRegion.h" +#include "KfTrackKalmanFilter.h" #include "TF1.h" #include "TFormula.h" #include "TH1.h" @@ -160,7 +160,7 @@ void TrackFitQa::Init() void TrackFitQa::Fill(const TrackParamV& trPar, const tools::MCPoint& mcPoint, bool bTimeMeasured, double /*weight*/) { // Probably, a bottleneck - ca::TrackFit<ca::fvec> fitter; + cbm::algo::kf::TrackKalmanFilter<ca::fvec> fitter; fitter.SetParticleMass(fMass); fitter.SetMask(fmask::One()); fitter.SetDoFitVelocity(true); diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx index 872424ab1ddc7fc1fae75833348f0047c8b45247..9b408bda74f73e0536cbafca77b7c04b70bee35d 100644 --- a/reco/L1/qa/CbmCaTrackTypeQa.cxx +++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx @@ -13,7 +13,6 @@ #include "CbmCaTrackFitQa.h" #include "CbmL1Track.h" -using cbm::algo::ca::TrackFit; using cbm::algo::kf::FieldRegion; using cbm::ca::TrackTypeQa; using cbm::ca::tools::MCPoint; @@ -339,7 +338,7 @@ void TrackTypeQa::FillRecoTrack(int iTrkReco, double weight) auto radLength = fpParameters->GetMaterialThickness(iSt, fTrackFit.Tr().GetX(), fTrackFit.Tr().GetY()); fTrackFit.MultipleScattering(radLength); fTrackFit.EnergyLossCorrection(radLength, - (direction > 0) ? FitDirection::kDownstream : FitDirection::kUpstream); + (direction > 0) ? kf::FitDirection::kDownstream : kf::FitDirection::kUpstream); } fTrackFit.Extrapolate(mcTrkVertex.GetZ(), fFieldRegion); const TrackParamV& trParExtr = fTrackFit.Tr(); diff --git a/reco/L1/qa/CbmCaTrackTypeQa.h b/reco/L1/qa/CbmCaTrackTypeQa.h index a59ee5e0f80bec58eeb262fac9860402490d6776..ef0e0a12d95c312ed72724cb0e1b30b3033d3a79 100644 --- a/reco/L1/qa/CbmCaTrackTypeQa.h +++ b/reco/L1/qa/CbmCaTrackTypeQa.h @@ -11,12 +11,12 @@ #pragma once #include "CaParameters.h" -#include "CaTrackFit.h" #include "CbmCaTrackFitQa.h" #include "CbmL1DetectorID.h" #include "CbmL1Hit.h" #include "CbmQaIO.h" #include "KfFieldRegion.h" +#include "KfTrackKalmanFilter.h" #include <map> #include <string> @@ -293,8 +293,8 @@ namespace cbm::ca TProfile* fph_stations_point = nullptr; ///< Average number of stations with MC point TProfile* fph_stations_hit = nullptr; ///< Average number of stations with hit - ca::TrackFit<ca::fvec> fTrackFit; ///< Track fitter - cbm::algo::kf::FieldRegion<ca::fvec> fFieldRegion; ///< Magnetic field + cbm::algo::kf::TrackKalmanFilter<ca::fvec> fTrackFit; ///< Track fitter + cbm::algo::kf::FieldRegion<ca::fvec> fFieldRegion; ///< Magnetic field int fCounterMC = 0; ///< Counter of MC tracks int fCounterClones = 0; ///< Counter of clone tracks