From 3df9b9c37e3c37299f5c29b3f596469f7acfe555 Mon Sep 17 00:00:00 2001 From: "s.zharko@gsi.de" <s.zharko@gsi.de> Date: Mon, 23 Sep 2024 00:17:49 +0200 Subject: [PATCH] CA: replacement of old material maps with the new ones --- algo/ca/core/tracking/CaFramework.h | 1 - algo/ca/core/tracking/CaTrackExtender.cxx | 9 ++++++--- algo/ca/core/tracking/CaTrackExtender.h | 1 + algo/ca/core/tracking/CaTrackFitter.cxx | 11 +++++++---- algo/ca/core/tracking/CaTrackFitter.h | 1 + algo/ca/core/tracking/CaTripletConstructor.cxx | 7 ++++--- algo/ca/core/tracking/CaTripletConstructor.h | 4 +++- reco/KF/ParticleFitter/CbmL1PFFitter.cxx | 4 ++++ reco/L1/CbmL1Performance.cxx | 6 ++++-- reco/L1/qa/CbmCaTrackTypeQa.cxx | 7 ++++--- 10 files changed, 34 insertions(+), 17 deletions(-) diff --git a/algo/ca/core/tracking/CaFramework.h b/algo/ca/core/tracking/CaFramework.h index 5c783ca162..e1c5af03ac 100644 --- a/algo/ca/core/tracking/CaFramework.h +++ b/algo/ca/core/tracking/CaFramework.h @@ -47,7 +47,6 @@ namespace cbm::algo::ca // ******************************* using CaStationsArray_t = std::array<ca::Station<fvec>, constants::size::MaxNstations>; - using CaMaterialArray_t = std::array<ca::MaterialMap, constants::size::MaxNstations>; using Tindex = int; // TODO: Replace with ca::HitIndex_t, if suitable /// Main class of CA track finder algorithm diff --git a/algo/ca/core/tracking/CaTrackExtender.cxx b/algo/ca/core/tracking/CaTrackExtender.cxx index 7ce4d5565a..30e19df12b 100644 --- a/algo/ca/core/tracking/CaTrackExtender.cxx +++ b/algo/ca/core/tracking/CaTrackExtender.cxx @@ -25,7 +25,10 @@ using namespace cbm::algo::ca; // --------------------------------------------------------------------------------------------------------------------- // -TrackExtender::TrackExtender(const ca::Parameters<fvec>& pars, const fscal mass) : fParameters(pars), fDefaultMass(mass) +TrackExtender::TrackExtender(const ca::Parameters<fvec>& pars, const fscal mass) + : fParameters(pars) + , fSetup(fParameters.GetActiveSetup()) + , fDefaultMass(mass) { } @@ -120,7 +123,7 @@ void TrackExtender::FitBranchFast(const ca::Branch& t, TrackParamV& Tout, const fit.Extrapolate(hit.Z(), fld); ca::utils::FilterHit(fit, hit, fmask(sta.timeInfo)); - auto radThick = fParameters.GetMaterialThickness(ista, T.X(), T.Y()); + auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(T.X(), T.Y()); fit.MultipleScattering(radThick); fit.EnergyLossCorrection(radThick, direction); @@ -272,7 +275,7 @@ void TrackExtender::FindMoreHits(ca::Branch& t, TrackParamV& Tout, const kf::Fit fit.Extrapolate(hit.Z(), fld); ca::utils::FilterHit(fit, hit, fmask(sta.timeInfo)); - auto radThick = fParameters.GetMaterialThickness(ista, tr.X(), tr.Y()); + auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y()); fit.MultipleScattering(radThick); fit.EnergyLossCorrection(radThick, direction); diff --git a/algo/ca/core/tracking/CaTrackExtender.h b/algo/ca/core/tracking/CaTrackExtender.h index 0fa6f0562f..9554ba51c8 100644 --- a/algo/ca/core/tracking/CaTrackExtender.h +++ b/algo/ca/core/tracking/CaTrackExtender.h @@ -88,6 +88,7 @@ namespace cbm::algo::ca /// Data members const Parameters<fvec>& fParameters; ///< Object of Framework parameters class + const cbm::algo::kf::Setup<fvec>& fSetup; WindowData* frWData; fscal fDefaultMass{constants::phys::MuonMass}; ///< mass of the propagated particle [GeV/c2] }; diff --git a/algo/ca/core/tracking/CaTrackFitter.cxx b/algo/ca/core/tracking/CaTrackFitter.cxx index 1a2005d683..4f6d2e089c 100644 --- a/algo/ca/core/tracking/CaTrackFitter.cxx +++ b/algo/ca/core/tracking/CaTrackFitter.cxx @@ -22,6 +22,7 @@ using namespace cbm::algo; // TrackFitter::TrackFitter(const ca::Parameters<fvec>& pars, const fscal mass, const ca::TrackingMode& mode) : fParameters(pars) + , fSetup(fParameters.GetActiveSetup()) , fDefaultMass(mass) , fTrackingMode(mode) { @@ -262,8 +263,9 @@ 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()), kf::FitDirection::kUpstream); + auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y()); + fit.MultipleScattering(radThick); + fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); fit.SetMask(initialised && w[ista]); fit.FilterXY(mxy[ista]); @@ -365,8 +367,9 @@ 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()), kf::FitDirection::kDownstream); + auto radThick = fSetup.GetMaterial(ista).GetThicknessX0(tr.X(), tr.Y()); + fit.MultipleScattering(radThick); + fit.EnergyLossCorrection(radThick, 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/CaTrackFitter.h b/algo/ca/core/tracking/CaTrackFitter.h index 75d79c10ca..b67cc572c0 100644 --- a/algo/ca/core/tracking/CaTrackFitter.h +++ b/algo/ca/core/tracking/CaTrackFitter.h @@ -53,6 +53,7 @@ namespace cbm::algo::ca /// Data members const Parameters<fvec>& fParameters; ///< Object of Framework parameters class + const cbm::algo::kf::Setup<fvec>& fSetup; ///< Setup instance fscal fDefaultMass{constants::phys::MuonMass}; ///< mass of the propagated particle [GeV/c2] ca::TrackingMode fTrackingMode; }; diff --git a/algo/ca/core/tracking/CaTripletConstructor.cxx b/algo/ca/core/tracking/CaTripletConstructor.cxx index cc1b935b86..a0c0aae26a 100644 --- a/algo/ca/core/tracking/CaTripletConstructor.cxx +++ b/algo/ca/core/tracking/CaTripletConstructor.cxx @@ -22,6 +22,7 @@ using namespace cbm::algo::ca; TripletConstructor::TripletConstructor(const ca::Parameters<fvec>& pars, WindowData& wData, const fscal mass, const ca::TrackingMode& mode) : fParameters(pars) + , fSetup(fParameters.GetActiveSetup()) , frWData(wData) , fDefaultMass(mass) , fTrackingMode(mode) @@ -157,7 +158,7 @@ void TripletConstructor::CreateTripletsForHit(Vector<ca::Triplet>& tripletsOut, // add the target constraint fit.FilterWithTargetAtLine(fParameters.GetTargetPositionZ(), frWData.TargetMeasurement(), fld0); - fit.MultipleScattering(fParameters.GetMaterialThickness(fIstaL, T.GetX(), T.GetY())); + fit.MultipleScattering(fSetup.GetMaterial(fIstaL).GetThicknessX0(T.GetX(), T.GetY())); // extrapolate to the middle hit fit.ExtrapolateLine(fStaM->fZ, fFldL); @@ -227,7 +228,7 @@ void TripletConstructor::FindDoublets(kf::TrackKalmanFilter<fvec>& fit) fit.FilterXY(m_2); fit.FilterTime(t_2, dt2_2, fmask(fStaM->timeInfo)); fit.SetQp0(isMomentumFitted ? fit.Tr().GetQp() : frWData.CurrentIteration()->GetMaxQp()); - fit.MultipleScattering(fParameters.GetMaterialThickness(fIstaM, T2.GetX(), T2.Y())); + fit.MultipleScattering(fSetup.GetMaterial(fIstaM).GetThicknessX0(T2.GetX(), T2.Y())); fit.SetQp0(fit.Tr().Qp()); // check if there are other hits close to the doublet on the same station @@ -536,7 +537,7 @@ void TripletConstructor::FindTriplets() for (int ih = startIdx + step; ih != endIdx; ih += step) { fit.Extrapolate(z[ih], fld); - auto radThick = fParameters.GetMaterialThickness(ista[ih], T.X(), T.Y()); + auto radThick = fSetup.GetMaterial(ista[ih]).GetThicknessX0(T.X(), T.Y()); fit.MultipleScattering(radThick); fit.EnergyLossCorrection(radThick, direction); fit.FilterXY(mxy[ih]); diff --git a/algo/ca/core/tracking/CaTripletConstructor.h b/algo/ca/core/tracking/CaTripletConstructor.h index eddba821f1..5aae7fef03 100644 --- a/algo/ca/core/tracking/CaTripletConstructor.h +++ b/algo/ca/core/tracking/CaTripletConstructor.h @@ -15,6 +15,7 @@ #include "CaVector.h" #include "CaWindowData.h" #include "KfFieldRegion.h" +#include "KfSetup.h" #include "KfSimd.h" #include "KfTrackKalmanFilter.h" #include "KfTrackParam.h" @@ -75,7 +76,8 @@ namespace cbm::algo::ca const double chi2Cut, const int iMC, const int maxNhits); private: - const Parameters<fvec>& fParameters; ///< Object of Framework parameters class + const Parameters<fvec>& fParameters; ///< Object of Framework parameters class + const cbm::algo::kf::Setup<fvec>& fSetup; ///< Reference to the setup WindowData& frWData; fscal fDefaultMass{constants::phys::MuonMass}; ///< mass of the propagated particle [GeV/c2] ca::TrackingMode fTrackingMode; diff --git a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx index 7b5d192984..3d653e0d95 100644 --- a/reco/KF/ParticleFitter/CbmL1PFFitter.cxx +++ b/reco/KF/ParticleFitter/CbmL1PFFitter.cxx @@ -123,6 +123,10 @@ inline void CbmL1PFFitter::Initialize() } using cbm::algo::ca::EDetectorID; + // TODO: Remove CbmL1::Instance with itterations: + // 1) replace material with active setup + // 2) replace field with active setup + // 3) provide proper initialization of the setup fNmvdStationsActive = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(EDetectorID::kMvd); fNstsStationsActive = CbmL1::Instance()->fpAlgo->GetParameters().GetNstationsActive(EDetectorID::kSts); diff --git a/reco/L1/CbmL1Performance.cxx b/reco/L1/CbmL1Performance.cxx index 8d012fc01d..85575678d0 100644 --- a/reco/L1/CbmL1Performance.cxx +++ b/reco/L1/CbmL1Performance.cxx @@ -1323,7 +1323,8 @@ void CbmL1::TrackFitPerformance() && (dir * (mc.GetStartZ() - fpAlgo->GetParameters().GetStation(iSta).fZ[0]) > 0); iSta += dir) { // LOG(info) << iSta << " " << dir; - auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY()); + auto radThick = fpAlgo->GetParameters().GetActiveSetup().GetMaterial(iSta).GetThicknessX0(fit.Tr().GetX(), + fit.Tr().GetY()); fit.MultipleScattering(radThick); fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); } @@ -1392,7 +1393,8 @@ void CbmL1::TrackFitPerformance() iSta += dir) { fit.Extrapolate(fpAlgo->GetParameters().GetStation(iSta).fZ, fld); - auto radThick = fpAlgo->GetParameters().GetMaterialThickness(iSta, fit.Tr().GetX(), fit.Tr().GetY()); + auto radThick = fpAlgo->GetParameters().GetActiveSetup().GetMaterial(iSta).GetThicknessX0(fit.Tr().GetX(), + fit.Tr().GetY()); fit.MultipleScattering(radThick); fit.EnergyLossCorrection(radThick, kf::FitDirection::kUpstream); } diff --git a/reco/L1/qa/CbmCaTrackTypeQa.cxx b/reco/L1/qa/CbmCaTrackTypeQa.cxx index 9b408bda74..f2febcd269 100644 --- a/reco/L1/qa/CbmCaTrackTypeQa.cxx +++ b/reco/L1/qa/CbmCaTrackTypeQa.cxx @@ -335,9 +335,10 @@ void TrackTypeQa::FillRecoTrack(int iTrkReco, double weight) && (direction * (mcTrkVertex.GetZ() - fpParameters->GetStation(iSt).fZ[0]) > 0); iSt += direction) { fTrackFit.Extrapolate(fpParameters->GetStation(iSt).fZ, fFieldRegion); - auto radLength = fpParameters->GetMaterialThickness(iSt, fTrackFit.Tr().GetX(), fTrackFit.Tr().GetY()); - fTrackFit.MultipleScattering(radLength); - fTrackFit.EnergyLossCorrection(radLength, + auto radThick = fpParameters->GetActiveSetup().GetMaterial(iSt).GetThicknessX0(fTrackFit.Tr().GetX(), + fTrackFit.Tr().GetY()); + fTrackFit.MultipleScattering(radThick); + fTrackFit.EnergyLossCorrection(radThick, (direction > 0) ? kf::FitDirection::kDownstream : kf::FitDirection::kUpstream); } fTrackFit.Extrapolate(mcTrkVertex.GetZ(), fFieldRegion); -- GitLab