diff --git a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx index 8e540ca737aac8eb8e5f0b10ef9464e26322ee6e..0e88d1e46f6d84ed87bda1b669c9f4ca35aa3ea6 100644 --- a/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx +++ b/PhysicsAnalysis/NtupleDumper/src/NtupleDumperAlg.cxx @@ -931,19 +931,8 @@ StatusCode NtupleDumperAlg::execute(const EventContext &ctx) const m_hitSet.push_back(hitSet.to_ulong()); if (stationMap.count(1) == 0 || stationMap.count(2) == 0 || stationMap.count(3) == 0) continue; - const DataVector<const Trk::TrackParameters> *trackParameters = track->trackParameters(); - const Trk::TrackParameters* upstreamParameters = *std::min_element( - trackParameters->begin(), trackParameters->end(), - [](const Trk::TrackParameters *lhs, const Trk::TrackParameters *rhs) { - return lhs->position().z() < rhs->position().z(); - } - ); - const Trk::TrackParameters* downstreamParameters = *std::max_element( - trackParameters->begin(), trackParameters->end(), - [](const Trk::TrackParameters *lhs, const Trk::TrackParameters *rhs) { - return lhs->position().z() < rhs->position().z(); - } - ); + const Trk::TrackParameters* upstreamParameters = track->trackParameters()->front(); + const Trk::TrackParameters* downstreamParameters = track->trackParameters()->back(); if ((upstreamParameters == nullptr) || (downstreamParameters == nullptr)) continue; diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx index 81f7a97806ae6df40d8082c18ed9c8d3a63a52a2..57d78d9d5e8df222d3e3af5bcb9423b3484132c8 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CKF2.cxx @@ -213,10 +213,10 @@ StatusCode CKF2::execute() { // ATH_MSG_DEBUG(" position: " << params.position(gctx).transpose()); // ATH_MSG_DEBUG(" momentum: " << params.momentum().transpose()); // ATH_MSG_DEBUG(" charge: " << params.charge()); - // std::unique_ptr<Trk::Track> track = m_createTrkTrackTool->createTrack(gctx, traj); + // std::unique_ptr<Trk::Track> track = m_createTrkTrackTool->createTrack(gctx, traj, m_backwardPropagation); // if (track != nullptr) { // m_numberOfSelectedTracks++; - // std::unique_ptr<Trk::Track> track2 = m_kalmanFitterTool1->fit(ctx, gctx, track.get(), Acts::BoundVector::Zero(), m_isMC, origin); + // std::unique_ptr<Trk::Track> track2 = m_kalmanFitterTool1->fit(ctx, gctx, track.get(), Acts::BoundVector::Zero(), m_isMC); // if (track2) { // outputAllTracks->push_back(std::move(track2)); // } else { @@ -244,11 +244,11 @@ StatusCode CKF2::execute() { ATH_MSG_DEBUG(" position: " << params.position(gctx).transpose()); ATH_MSG_DEBUG(" momentum: " << params.momentum().transpose()); ATH_MSG_DEBUG(" charge: " << params.charge()); - std::unique_ptr<Trk::Track> track = m_createTrkTrackTool->createTrack(gctx, traj); + std::unique_ptr<Trk::Track> track = m_createTrkTrackTool->createTrack(gctx, traj, m_backwardPropagation); if (track != nullptr) { m_numberOfSelectedTracks++; std::unique_ptr<Trk::Track> track2 = m_kalmanFitterTool1->fit( - ctx, gctx, track.get(), Acts::BoundVector::Zero(), m_isMC, origin, m_backwardPropagation); + ctx, gctx, track.get(), Acts::BoundVector::Zero(), m_isMC); if (track2) { outputTracks->push_back(std::move(track2)); } else { diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx index 4fe45004c4e6975069513efd9681b1d9017f4c10..51703a125489ce3ad31ccab1fb8425b8c076c17d 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CircleFitTrackSeedTool.cxx @@ -334,12 +334,12 @@ double CircleFitTrackSeedTool::Seed::getX(double z) { void CircleFitTrackSeedTool::Seed::getChi2() { chi2 = 0; - for (const Acts::Vector3 &pos : positions) { + for (const Acts::Vector3 &pos : fakePositions) { m_dy = pos.y() - getY(pos.z()); chi2 += (m_dy * m_dy) / (m_sigma_y * m_sigma_y); } - for (const Acts::Vector3 &pos : positions) { + for (const Acts::Vector3 &pos : fakePositions) { m_dx = pos.x() - getX(pos.z()); chi2 += (m_dx * m_dx) / (m_sigma_x * m_sigma_x); } diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.cxx index 994689010203a269946c3c88392004a61a42adf4..9a9bf115ca2db5ecd5e9a4b6f9a7e39a2a96ab11 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.cxx @@ -17,7 +17,7 @@ StatusCode CreateTrkTrackTool::finalize() { } std::unique_ptr<Trk::Track> -CreateTrkTrackTool::createTrack(const Acts::GeometryContext &gctx, const FaserActsRecMultiTrajectory &traj) const { +CreateTrkTrackTool::createTrack(const Acts::GeometryContext &gctx, const FaserActsRecMultiTrajectory &traj, bool backwardPropagation) const { std::unique_ptr<Trk::Track> newtrack = nullptr; DataVector<const Trk::TrackStateOnSurface>* finalTrajectory = new DataVector<const Trk::TrackStateOnSurface>{}; using ConstTrackStateProxy = Acts::detail_lt::TrackStateProxy<IndexSourceLink, 6, true>; @@ -69,9 +69,10 @@ CreateTrkTrackTool::createTrack(const Acts::GeometryContext &gctx, const FaserAc quality, nullptr, typePattern); - if (perState) - { + if ((perState) && (!backwardPropagation)) { finalTrajectory->insert(finalTrajectory->begin(), perState); + } else if ((perState) && (backwardPropagation)) { + finalTrajectory->push_back(perState); } } return; diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.h index d0edfd5cb9aedb78d7fde03104377f3ff9aa5d1f..5fcf1f8c47d0fa0b95044d8237362b6d11f2a2a1 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/CreateTrkTrackTool.h @@ -18,7 +18,7 @@ public: virtual ~CreateTrkTrackTool() = default; virtual StatusCode initialize() override; virtual StatusCode finalize() override; - std::unique_ptr<Trk::Track> createTrack(const Acts::GeometryContext &gctx, const FaserActsRecMultiTrajectory &traj) const; + std::unique_ptr<Trk::Track> createTrack(const Acts::GeometryContext &gctx, const FaserActsRecMultiTrajectory &traj, bool backwardPropagation=false) const; const Trk::TrackParameters* ConvertActsTrackParameterToATLAS(const Acts::BoundTrackParameters &actsParameter, const Acts::GeometryContext& gctx) const; private: const FaserSCT_ID* m_idHelper {nullptr}; diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx index 942d649be363e27792299a03d9c854ebd90fc744..5315404c72051fcb3c78a36e262dd97f9e44fdee 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.cxx @@ -365,7 +365,7 @@ resi.push_back({local.x(),local.y(),parameter.position(gctx).x(), parameter.posi std::unique_ptr<Trk::Track> KalmanFitterTool::fit(const EventContext &ctx, const Acts::GeometryContext &gctx, Trk::Track* inputTrack, const Acts::BoundVector& inputVector, - bool isMC, double origin, bool backwardPropagation) const { + bool isMC) const { std::unique_ptr<Trk::Track> newTrack = nullptr; std::vector<FaserActsRecMultiTrajectory> myTrajectories; @@ -380,6 +380,9 @@ KalmanFitterTool::fit(const EventContext &ctx, const Acts::GeometryContext &gctx } + // set the start position 5 mm in front of the first track measurement + double origin = inputTrack->trackParameters()->front()->position().z() - 10; + auto pSurface = Acts::Surface::makeShared<Acts::PlaneSurface>( Acts::Vector3 {0, 0, origin}, Acts::Vector3{0, 0, -1}); @@ -396,16 +399,10 @@ KalmanFitterTool::fit(const EventContext &ctx, const Acts::GeometryContext &gctx FaserActsOutlierFinder faserActsOutlierFinder{0}; faserActsOutlierFinder.cluster_z=-1000000.; faserActsOutlierFinder.StateChiSquaredPerNumberDoFCut=10000.; - Acts::PropagatorPlainOptions pOptions; - if (backwardPropagation) { - pOptions.direction = Acts::backward; - } else { - pOptions.direction = Acts::forward; - } Acts::KalmanFitterOptions<MeasurementCalibrator, FaserActsOutlierFinder, Acts::VoidReverseFilteringLogic> kfOptions(gctx, mfContext, calibContext, MeasurementCalibrator(measurements), faserActsOutlierFinder, Acts::VoidReverseFilteringLogic(), Acts::LoggerWrapper{*m_logger}, - pOptions, &(*pSurface)); + Acts::PropagatorPlainOptions(), &(*pSurface)); kfOptions.multipleScattering = false; kfOptions.energyLoss = false; diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h index 759a456be7da12fbab592220f661a8dba769d6a8..4901d324f9c7cb3ee1c3ecd8175130ffa82a694b 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/KalmanFitterTool.h @@ -90,7 +90,7 @@ public: std::unique_ptr<Trk::Track> fit(const EventContext &ctx, const Acts::GeometryContext &gctx, Trk::Track *inputTrack, const Acts::BoundVector& inputVector = Acts::BoundVector::Zero(), - bool isMC=false, double origin=0, bool backwardPropagation=false) const; + bool isMC=false) const; std::vector<TSOS4Residual> getUnbiasedResidual(const EventContext &ctx, const Acts::GeometryContext &gctx, Trk::Track *inputTrack, const Acts::BoundVector& inputVector = Acts::BoundVector::Zero(),