diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx index d6e8bb2eb5ab2ab993c2f6e24220fdf6e8a373d3..c72c34c512b71ebb88db2dd341f2b4dbb542afa0 100755 --- a/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.cxx @@ -123,7 +123,7 @@ StatusCode FaserActsKalmanFilterAlg::execute() { CHECK(m_trackFinderTool->run()); std::shared_ptr<const Acts::Surface> initialSurface = m_trackFinderTool->initialSurface(); - std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters = + std::shared_ptr<std::vector<Acts::BoundTrackParameters>> initialTrackParameters = m_trackFinderTool->initialTrackParameters(); std::shared_ptr<std::vector<std::vector<IndexSourceLink>>> sourceLinks = m_trackFinderTool->sourceLinks(); @@ -141,7 +141,7 @@ StatusCode FaserActsKalmanFilterAlg::execute() { auto actsTrackContainer = std::make_shared<Acts::VectorTrackContainer>(); auto actsTrackStateContainer = std::make_shared<Acts::VectorMultiTrajectory>(); - TrackContainer tracks(actsTrackContainer, actsTrackStateContainer); + FaserActsTrackContainer tracks(actsTrackContainer, actsTrackStateContainer); //@todo: the initialSurface should be targetSurface FaserActsKalmanFilterAlg::GeneralFitterOptions options{ diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.h b/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.h index cf2f254e48023c41c6e90254b97418de19706692..5bc6cfd7fd8d84050814c981ffbe9d5900fb6fcb 100755 --- a/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/FaserActsKalmanFilterAlg.h @@ -52,6 +52,7 @@ #include "FaserActsKalmanFilter/IndexSourceLink.h" #include "FaserActsKalmanFilter/Measurement.h" #include "FaserActsKalmanFilter/ITrackFinderTool.h" +#include "FaserActsTrack.h" //#include "ProtoTrackWriterTool.h" //todo #include "RootTrajectoryStatesWriterTool.h" @@ -94,10 +95,7 @@ public: // using TrackFitterOptions = // Acts::KalmanFitterOptions<MeasurementCalibrator, Acts::VoidOutlierFinder, // Acts::VoidReverseFilteringLogic>; - using TrackContainer = - Acts::TrackContainer<Acts::VectorTrackContainer, - Acts::VectorMultiTrajectory, std::shared_ptr>; - + struct GeneralFitterOptions { std::reference_wrapper<const Acts::GeometryContext> geoContext; std::reference_wrapper<const Acts::MagneticFieldContext> magFieldContext; @@ -106,7 +104,7 @@ public: Acts::PropagatorPlainOptions propOptions; }; - using TrackFitterResult = Acts::Result<TrackContainer::TrackProxy>; + using TrackFitterResult = Acts::Result<FaserActsTrackContainer::TrackProxy>; using TrackParameters = Acts::BoundTrackParameters; @@ -118,7 +116,7 @@ public: const TrackParameters &initialParameters, const GeneralFitterOptions& options, const MeasurementCalibratorAdapter& calibrator, - TrackContainer& tracks + FaserActsTrackContainer& tracks ) const = 0; }; diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.cxx index 8b5b0e584441bb17a66584e38359acd004a85514..536769670e27d817e49593618e136f91b7499a0a 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.cxx @@ -83,7 +83,7 @@ StatusCode MultiTrackFinderTool::run() { std::vector<std::vector<IndexSourceLink>> sourceLinkVector; std::vector<std::vector<Measurement>> measurementVector; std::vector<std::map<Index, Identifier>> idLinkVector; - std::vector<Acts::CurvilinearTrackParameters> paramVector; + std::vector<Acts::BoundTrackParameters> paramVector; std::vector<std::vector<const Tracker::FaserSCT_Cluster*>> clusterVector; int n_protoTracks = std::min((int)protoTracks.size(), 2); for (int i = 0; i < n_protoTracks; ++i) { @@ -101,7 +101,7 @@ StatusCode MultiTrackFinderTool::run() { m_sourceLinks = std::make_shared<std::vector<std::vector<IndexSourceLink>>>(sourceLinkVector); m_measurements = std::make_shared<std::vector<std::vector<Measurement>>>(measurementVector); m_idLinks = std::make_shared<std::vector<std::map<Index, Identifier>>>(idLinkVector); - m_initialTrackParameters = std::make_shared<std::vector<Acts::CurvilinearTrackParameters>>(paramVector); + m_initialTrackParameters = std::make_shared<std::vector<Acts::BoundTrackParameters>>(paramVector); m_clusters = std::make_shared<std::vector<std::vector<const Tracker::FaserSCT_Cluster*>>>(clusterVector); // create initial surface diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.h index 988c50bdf880ababa5cc22bb77552a625f5c6a15..1799c6c0d82d47493393d3b1bc67e095a14f872d 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/MultiTrackFinderTool.h @@ -31,7 +31,7 @@ public: virtual StatusCode finalize() override; virtual StatusCode run() override; - virtual const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const override; + virtual const std::shared_ptr<std::vector<Acts::BoundTrackParameters>> initialTrackParameters() const override; virtual const std::shared_ptr<const Acts::Surface> initialSurface() const override; virtual const std::shared_ptr<std::vector<std::vector<IndexSourceLink>>> sourceLinks() const override; virtual const std::shared_ptr<std::vector<IdentifierLink>> idLinks() const override; @@ -69,7 +69,7 @@ public: const MultiTrackFinderTool::Tracklet& t3) : m_t1(t1), m_t2(t2), m_t3(t3) {} - Acts::CurvilinearTrackParameters initialTrackParameters( + Acts::BoundTrackParameters initialTrackParameters( double covLoc0, double covLoc1, double covPhi, double covTheta, double covQOverP, double covTime) const { Acts::Vector3 dir = m_t2.position() - m_t1.position(); Acts::Vector3 pos = m_t1.position() - m_t1.position().z()/dir.z() * dir; @@ -84,14 +84,14 @@ public: cov(Acts::eBoundQOverP, Acts::eBoundQOverP) = covQOverP; cov(Acts::eBoundTime, Acts::eBoundTime) = covTime; - Acts::CurvilinearTrackParameters params = - Acts::CurvilinearTrackParameters(pos4, dir, abs_momentum, charge, cov); + Acts::BoundTrackParameters params = + Acts::BoundTrackParameters(pos4, dir, abs_momentum, charge, cov); return params; } std::tuple<std::vector<Measurement>, std::vector<IndexSourceLink>, std::map<Index, Identifier>, std::vector<const Tracker::FaserSCT_Cluster*>> run() const { const int kSize = 1; - using ThisMeasurement = Acts::Measurement<IndexSourceLink, Acts::BoundIndices, kSize>; + using ThisMeasurement = Acts::Measurement<Acts::BoundIndices, kSize>; std::array<Acts::BoundIndices, kSize> Indices = {Acts::eBoundLoc0}; std::vector<IndexSourceLink> sourceLinks; std::map<Index, Identifier> idLinks; @@ -112,7 +112,8 @@ public: IndexSourceLink sourceLink(geoIds[i], measurements.size()); Eigen::Matrix<double, 1, 1> clusterPos {positions[i]}; Eigen::Matrix<double, 1, 1> clusterCov {0.04 * 0.04,}; - ThisMeasurement meas(sourceLink, Indices, clusterPos, clusterCov); + Acts::SourceLink sl{sourceLink}; + ThisMeasurement meas(std::move(sl), Indices, clusterPos, clusterCov); sourceLinks.push_back(sourceLink); measurements.emplace_back(std::move(meas)); } @@ -169,7 +170,7 @@ public: }; private: - std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> m_initialTrackParameters; + std::shared_ptr<std::vector<Acts::BoundTrackParameters>> m_initialTrackParameters; std::shared_ptr<const Acts::Surface> m_initialSurface; std::shared_ptr<std::vector<std::vector<IndexSourceLink>>> m_sourceLinks {}; std::shared_ptr<std::vector<IdentifierLink>> m_idLinks {}; @@ -194,7 +195,7 @@ private: Gaudi::Property<double> m_covTime {this, "covTime", 1}; }; -inline const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> +inline const std::shared_ptr<std::vector<Acts::BoundTrackParameters>> MultiTrackFinderTool::initialTrackParameters() const { return m_initialTrackParameters; } diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx index ed9682702a71145f9a4772cb7e49bda33ee8e8e0..832b14fb2406aa0b8aab294d63664b7143add80e 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.cxx @@ -1,5 +1,7 @@ #include "TrackerPrepRawData/FaserSCT_Cluster.h" #include "TrackClassification.h" +#include "FaserActsTrack.h" +#include "FaserActsKalmanFilter/IndexSourceLink.h" namespace { @@ -32,36 +34,33 @@ inline void sortHitCount(std::vector<ParticleHitCount> &particleHitCounts) { /// Identify all particles that contribute to a trajectory. void identifyContributingParticles( const TrackerSimDataCollection& simDataCollection, - const FaserActsRecMultiTrajectory& trajectories, size_t tip, + const FaserActsConstTrackContainer::ConstTrackProxy& track, std::vector<ParticleHitCount>& particleHitCounts) { particleHitCounts.clear(); - if (not trajectories.hasTrajectory(tip)) { - return; - } - - trajectories.multiTrajectory().visitBackwards(tip, [&](const auto& state) { - // no truth info with non-measurement state + for (const auto& state : track.trackStatesReversed()) { + // no truth info with non-measurement state if (not state.typeFlags().test(Acts::TrackStateFlag::MeasurementFlag)) { - return true; + continue; } std::vector<int> barcodes {}; // register all particles that generated this hit - for (const Identifier &id : state.uncalibrated().hit()->rdoList()) { + IndexSourceLink sl = + state.getUncalibratedSourceLink().template get<IndexSourceLink>(); + for (const Identifier &id : sl.hit()->rdoList()) { if (simDataCollection.count(id) == 0) { - return true; + continue; //@todo:is this correct? } const auto &deposits = simDataCollection.find(id)->second.getdeposits(); for (const TrackerSimData::Deposit &deposit : deposits) { - int barcode = deposit.first->barcode(); + int barcode = deposit.first->id(); if (std::find(barcodes.begin(), barcodes.end(), barcode) == barcodes.end()) { barcodes.push_back(barcode); - increaseHitCount(particleHitCounts, deposit.first->barcode()); + increaseHitCount(particleHitCounts, deposit.first->id()); } } } - return true; - }); + } sortHitCount(particleHitCounts); } @@ -80,10 +79,10 @@ void identifyContributingParticles( if (simDataCollection.count(id) == 0) continue; const auto &deposits = simDataCollection.find(id)->second.getdeposits(); for (const TrackerSimData::Deposit &deposit : deposits) { - int barcode = deposit.first->barcode(); + int barcode = deposit.first->id(); if (std::find(barcodes.begin(), barcodes.end(), barcode) == barcodes.end()) { barcodes.push_back(barcode); - increaseHitCount(particleHitCounts, deposit.first->barcode()); + increaseHitCount(particleHitCounts, deposit.first->id()); } } } diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.h b/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.h index da59b9badded276e508d5c57ccca6636ebf607e9..3836e5646882ac5a5f04abec7507b95fe0cd5728 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TrackClassification.h @@ -1,8 +1,9 @@ #ifndef FASERACTSKALMANFILTER_TRACKCLASSIFICATION_H #define FASERACTSKALMANFILTER_TRACKCLASSIFICATION_H -#include "FaserActsRecMultiTrajectory.h" +#include "FaserActsTrack.h" #include "TrackerSimData/TrackerSimDataCollection.h" +#include "TrackerRIO_OnTrack/FaserSCT_ClusterOnTrack.h" struct ParticleHitCount { int particleId; @@ -12,7 +13,7 @@ struct ParticleHitCount { /// Identify all particles that contribute to a trajectory. void identifyContributingParticles( const TrackerSimDataCollection& simDataCollection, - const FaserActsRecMultiTrajectory& trajectories, size_t tip, + const FaserActsConstTrackContainer::ConstTrackProxy& track, std::vector<ParticleHitCount>& particleHitCounts); void identifyContributingParticles( diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.cxx index b06019cf06fa2caae6816657233b213d9f9dd07f..016e170e50ccb7b17c3b58cdeb573ba14c6ee1d4 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.cxx @@ -17,26 +17,26 @@ inline void sortTracks(std::vector<TrackQuality>& tracks) { } // namespace -void selectTracks(TrackFinderResult& results, std::vector<TrackQuality>& trackQuality) { - for (auto& result : results) { - if (not result.ok()) { - continue; - } - auto& ckfResult = result.value(); - auto traj = FaserActsRecMultiTrajectory(ckfResult.fittedStates, ckfResult.lastMeasurementIndices, ckfResult.fittedParameters); - const auto& mj = traj.multiTrajectory(); - const auto& trackTips = traj.tips(); - auto it = std::max_element(trackTips.begin(), trackTips.end(), - [&](const size_t& lhs, const size_t& rhs) { - auto trajState_lhs = Acts::MultiTrajectoryHelpers::trajectoryState(mj, lhs); - auto trajState_rhs = Acts::MultiTrajectoryHelpers::trajectoryState(mj, rhs); - if (trajState_lhs.nMeasurements != trajState_rhs.nMeasurements) { - return trajState_lhs.nMeasurements > trajState_rhs.nMeasurements; - } - return trajState_lhs.chi2Sum < trajState_rhs.chi2Sum; - }); - auto trajState = Acts::MultiTrajectoryHelpers::trajectoryState(mj, *it); - trackQuality.push_back({ckfResult, trajState.nMeasurements, trajState.chi2Sum}); +void selectTracks(FaserActsTrackContainer& tracks, std::vector<TrackQuality>& trackQuality) { + for (const auto& track : tracks) { + + + //auto& ckfResult = result.value(); + // + //auto traj = FaserActsRecMultiTrajectory(ckfResult.fittedStates, ckfResult.lastMeasurementIndices, ckfResult.fittedParameters); + //const auto& mj = traj.multiTrajectory(); + //const auto& trackTips = traj.tips(); + //auto it = std::max_element(trackTips.begin(), trackTips.end(), + // [&](const size_t& lhs, const size_t& rhs) { + // auto trajState_lhs = Acts::MultiTrajectoryHelpers::trajectoryState(mj, lhs); + // auto trajState_rhs = Acts::MultiTrajectoryHelpers::trajectoryState(mj, rhs); + // if (trajState_lhs.nMeasurements != trajState_rhs.nMeasurements) { + // return trajState_lhs.nMeasurements > trajState_rhs.nMeasurements; + // } + // return trajState_lhs.chi2Sum < trajState_rhs.chi2Sum; + // }); + //auto trajState = Acts::MultiTrajectoryHelpers::trajectoryState(mj, *it); + trackQuality.push_back({track, track.nMeasurements(), track.chi2()}); } sortTracks(trackQuality); } diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.h b/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.h index aeebd0ff1c0de3ce997e59578726609bdbbb02b7..23066c09dacce69bc4d3651f7d663db3f56b8673 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TrackSelection.h @@ -1,20 +1,26 @@ #ifndef FASERACTSKALMANFILTER_TRACKSELECTION_H #define FASERACTSKALMANFILTER_TRACKSELECTION_H -#include "FaserActsRecMultiTrajectory.h" +#include "FaserActsTrack.h" #include "TrackerSimData/TrackerSimDataCollection.h" #include "Acts/TrackFinding/CombinatorialKalmanFilter.hpp" +#include "Acts/EventData/TrackContainer.hpp" +#include "Acts/EventData/TrackProxy.hpp" +#include "Acts/EventData/VectorTrackContainer.hpp" +#include "Acts/EventData/VectorMultiTrajectory.hpp" -using TrackFitterResult = -Acts::Result<Acts::CombinatorialKalmanFilterResult<IndexSourceLink>>; -using TrackFinderResult = std::vector<TrackFitterResult>; +//using TrackFitterResult = +//Acts::Result<Acts::CombinatorialKalmanFilterResult<IndexSourceLink>>; + + +//@todo: make this constTrackContainer struct TrackQuality { - Acts::CombinatorialKalmanFilterResult<IndexSourceLink> track; + FaserActsTrackContainer::TrackProxy track; size_t nMeasurements; double chi2; }; -void selectTracks(TrackFinderResult& results, std::vector<TrackQuality>& trackQuality); +void selectTracks(FaserActsTrackContainer& tracks, std::vector<TrackQuality>& trackQuality); #endif // FASERACTSKALMANFILTER_TRACKSELECTION_H diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.cxx b/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.cxx index 672be6fa934ead4725a43d81bc2f5e156612449e..bc14199c01e8b187c8fd114db935eb04680bd5e1 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.cxx +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.cxx @@ -43,7 +43,7 @@ StatusCode TruthTrackFinderTool::run() { const int kSize = 2; using ParametersVector = Acts::ActsVector<kSize>; using CovarianceMatrix = Acts::ActsSymMatrix<kSize>; - using ThisMeasurement = Acts::Measurement<IndexSourceLink, Acts::BoundIndices, kSize>; + using ThisMeasurement = Acts::Measurement<Acts::BoundIndices, kSize>; std::array<Acts::BoundIndices, kSize> myIndices = {Acts::eBoundLoc0, Acts::eBoundLoc1}; std::vector<IndexSourceLink> sourcelinks; @@ -127,7 +127,8 @@ StatusCode TruthTrackFinderTool::run() { IndexSourceLink sourceLink(geoId, measurements.size()); sourcelinks.emplace_back(sourceLink); - ThisMeasurement meas(sourceLink, myIndices, par, cov); + Acts::SourceLink sl{sourceLink}; + ThisMeasurement meas(std::move(sl), myIndices, par, cov); measurements.emplace_back(std::move(meas)); // create initial parameters from hit in first layer @@ -163,8 +164,18 @@ StatusCode TruthTrackFinderTool::run() { cov(Acts::eBoundQOverP, Acts::eBoundQOverP) = m_covQOverP; cov(Acts::eBoundTime, Acts::eBoundTime) = m_covTime; - // auto initialParameters = Acts::BoundTrackParameters(surface->getSharedPtr(), params, charge, cov); - auto initialParameters = Acts::CurvilinearTrackParameters(smearedPosition4, smearedDirection, smearedAbsoluteMomentum, charge, cov); + const auto surface = Acts::Surface::makeShared<Acts::PlaneSurface>( + Acts::Vector3 {0, 0, smearedPosition.z()}, Acts::Vector3{0, 0, -1}); + Acts::BoundVector params = Acts::BoundVector::Zero(); + params[Acts::eBoundLoc0] = smearedPosition.x(); + params[Acts::eBoundLoc1] = smearedPosition.y(); + params[Acts::eBoundPhi] = Acts::VectorHelpers::phi(smearedDirection.normalized()); + params[Acts::eBoundTheta] = Acts::VectorHelpers::theta(smearedDirection.normalized()); + params[Acts::eBoundQOverP] = charge/smearedAbsoluteMomentum; + params[Acts::eBoundTime] = 0; + + //@todo: make the particle hypothesis configurable + auto initialParameters = Acts::BoundTrackParameters(surface, params, cov, Acts::ParticleHypothesis::muon()); // write out double initialCharge = initialParameters.charge(); @@ -175,7 +186,7 @@ StatusCode TruthTrackFinderTool::run() { ATH_MSG_DEBUG("initial absolute momentum: " << initialAbsoluteMomentum); ATH_MSG_DEBUG("initial position: x=" << initialPosition.x() << ", y=" << initialPosition.y() << ", z=" << initialPosition.z()); ATH_MSG_DEBUG("initial momentum: x=" << initialMomentum.x() << ", y=" << initialMomentum.y() << ", z=" << initialMomentum.z()); - m_initialTrackParameters = std::make_shared<const Acts::CurvilinearTrackParameters>(initialParameters); + m_initialTrackParameters = std::make_shared<const Acts::BoundTrackParameters>(initialParameters); } } } diff --git a/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.h b/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.h index 37ac68be771dc60cafd45ccfd6af38723f59470b..02e5ebef15ab213dc806f342d78b3d39bee71b2b 100644 --- a/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.h +++ b/Tracking/Acts/FaserActsKalmanFilter/src/TruthTrackFinderTool.h @@ -29,7 +29,7 @@ public: virtual StatusCode finalize() override; virtual StatusCode run() override; - virtual const std::shared_ptr<const Acts::CurvilinearTrackParameters> initialTrackParameters() const override { + virtual const std::shared_ptr<const Acts::BoundTrackParameters> initialTrackParameters() const override { return m_initialTrackParameters; } @@ -50,7 +50,7 @@ public: virtual const std::shared_ptr<std::vector<Tracker::FaserSCT_SpacePoint>> spacePoints() const override; private: - std::shared_ptr<const Acts::CurvilinearTrackParameters> m_initialTrackParameters; + std::shared_ptr<const Acts::BoundTrackParameters> m_initialTrackParameters; std::shared_ptr<const Acts::Surface> m_initialSurface; std::shared_ptr<std::vector<IndexSourceLink>> m_sourceLinks {}; std::shared_ptr<IdentifierLink> m_idLinks {};