From 2f8728492b29a957bf25d759e35b2b0d89dd364d Mon Sep 17 00:00:00 2001 From: "se.gorbunov" <se.gorbunov@gsi.de> Date: Fri, 22 Mar 2024 13:19:45 +0000 Subject: [PATCH] KfTrackFitter: replace the assertion with a warning --- algo/ca/core/data/CaTrackParam.cxx | 6 ++++++ reco/KF/CbmKfTrackFitter.cxx | 22 +++++++++++++++------- reco/KF/CbmKfTrackFitter.h | 4 ++-- reco/alignment/CbmBbaAlignmentTask.cxx | 6 +++++- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/algo/ca/core/data/CaTrackParam.cxx b/algo/ca/core/data/CaTrackParam.cxx index 0704037dc7..d41bf80f26 100644 --- a/algo/ca/core/data/CaTrackParam.cxx +++ b/algo/ca/core/data/CaTrackParam.cxx @@ -40,6 +40,9 @@ namespace cbm::algo::ca s << " c55 " << C55()[i] << std::endl; s << " c66 " << C66()[i] << std::endl; s << ToStringCorrelations(i); + + s << " chi2 " << fChiSq[i]; + s << " ndf " << fNdf[i] << std::endl; return s.str(); } } @@ -63,6 +66,9 @@ namespace cbm::algo::ca s << " c55 " << C55() << std::endl; s << " c66 " << C66() << std::endl; s << ToStringCorrelations(i); + + s << " chi2 " << fChiSq << std::endl; + s << " ndf " << fNdf << std::endl; } return s.str(); } diff --git a/reco/KF/CbmKfTrackFitter.cxx b/reco/KF/CbmKfTrackFitter.cxx index 9e61f26bb9..83eb7960c2 100644 --- a/reco/KF/CbmKfTrackFitter.cxx +++ b/reco/KF/CbmKfTrackFitter.cxx @@ -489,10 +489,12 @@ void CbmKfTrackFitter::AddMaterialEffects(const CbmKfTrackFitter::Track& t, CbmK } -void CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) +bool CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) { // fit the track + bool ok = true; + // ensure that the fitter is initialized Init(); @@ -549,7 +551,6 @@ void CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) for (int iNode = t.fLastHitNode - 1; iNode >= 0; iNode--) { FitNode& n = t.fNodes[iNode]; fFit.Extrapolate(n.fZ, field); - if (n.fIsXySet) { fFit.FilterXY(n.fMxy, fSkipUnmeasuredCoordinates); } @@ -558,13 +559,16 @@ void CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) } // combine partially fitted downstream and upstream tracks + n.fIsFitted = true; if (iNode > t.fFirstHitNode) { - Smooth(n.fTrack, fFit.Tr()); + n.fIsFitted = Smooth(n.fTrack, fFit.Tr()); } else { n.fTrack = fFit.Tr(); } - n.fIsFitted = true; + if (!n.fIsFitted) { + ok = false; + } fFit.SetQp0(n.fTrack.GetQp()); AddMaterialEffects(t, n, true); } @@ -578,10 +582,12 @@ void CbmKfTrackFitter::FitTrack(CbmKfTrackFitter::Track& t) n.fTrack.SetChiSq(tt.GetChiSq()); n.fTrack.SetChiSqTime(tt.GetChiSqTime()); } + + return ok; } -void CbmKfTrackFitter::Smooth(ca::TrackParamV& t1, const ca::TrackParamV& t2) +bool CbmKfTrackFitter::Smooth(ca::TrackParamV& t1, const ca::TrackParamV& t2) { // TODO: move to the CaTrackFit class @@ -600,8 +606,9 @@ void CbmKfTrackFitter::Smooth(ca::TrackParamV& t1, const ca::TrackParamV& t2) int ifault = 0; cbm::algo::ca::utils::math::SymInv(S, nPar, S1, Tmp, &nullty, &ifault); - assert(0 == nullty); - assert(0 == ifault); + if ((0 != ifault) || (0 != nullty)) { + return false; + } double dzeta[nPar]; @@ -674,4 +681,5 @@ void CbmKfTrackFitter::Smooth(ca::TrackParamV& t1, const ca::TrackParamV& t2) t1.SetChiSqTime(chi2Time + t1.GetChiSqTime()[0] + t2.GetChiSqTime()[0]); t1.SetNdf(5 + t1.GetNdf()[0] + t2.GetNdf()[0]); t1.SetNdfTime(2 + t1.GetNdfTime()[0] + t2.GetNdfTime()[0]); + return true; } diff --git a/reco/KF/CbmKfTrackFitter.h b/reco/KF/CbmKfTrackFitter.h index 5f426fe81c..7d1a6aafe0 100644 --- a/reco/KF/CbmKfTrackFitter.h +++ b/reco/KF/CbmKfTrackFitter.h @@ -119,7 +119,7 @@ class CbmKfTrackFitter { bool CreateGlobalTrack(Track& kfTrack, const CbmGlobalTrack& globalTrack); /// fit the track - void FitTrack(CbmKfTrackFitter::Track& t); + bool FitTrack(CbmKfTrackFitter::Track& t); /// fit sts tracks // void FitStsTracks(vector<CbmStsTrack>& Tracks, const vector<int>& pidHypo); @@ -128,7 +128,7 @@ class CbmKfTrackFitter { void FilterFirstMeasurement(const FitNode& n); void AddMaterialEffects(const Track& t, FitNode& n, bool upstreamDirection); // combine two tracks - void Smooth(ca::TrackParamV& t1, const ca::TrackParamV& t2); + bool Smooth(ca::TrackParamV& t1, const ca::TrackParamV& t2); private: // input data arrays diff --git a/reco/alignment/CbmBbaAlignmentTask.cxx b/reco/alignment/CbmBbaAlignmentTask.cxx index 32fd5c4c33..5d3c684485 100644 --- a/reco/alignment/CbmBbaAlignmentTask.cxx +++ b/reco/alignment/CbmBbaAlignmentTask.cxx @@ -287,7 +287,11 @@ void CbmBbaAlignmentTask::Exec(Option_t* /*opt*/) n.fIsTimeSet = false; } - fFitter.FitTrack(t.fUnalignedTrack); + if (!fFitter.FitTrack(t.fUnalignedTrack)) { + LOG(warning) << "failed to fit the track! "; + continue; + } + const auto& par = t.fUnalignedTrack.fNodes[t.fUnalignedTrack.fFirstHitNode].fTrack; t.fUnalignedTrack.fMsQp0 = par.GetQp()[0]; -- GitLab