Skip to content
Snippets Groups Projects
Commit 97063740 authored by Xiaocong Ai's avatar Xiaocong Ai Committed by FASER Reco
Browse files

update track finders

parent adc72d6a
No related branches found
No related tags found
1 merge request!418alma9-dev merge
......@@ -21,7 +21,7 @@ public:
// TODO use Acts::BoundTrackParameters instead?
virtual StatusCode run() = 0;
virtual const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>> initialTrackParameters() const = 0;
virtual const std::shared_ptr<std::vector<Acts::BoundTrackParameters>> initialTrackParameters() const = 0;
virtual const std::shared_ptr<const Acts::Surface> initialSurface() const = 0;
virtual const std::shared_ptr<std::vector<std::vector<IndexSourceLink>>> sourceLinks() const = 0;
virtual const std::shared_ptr<std::vector<IdentifierLink>> idLinks() const = 0;
......@@ -30,4 +30,4 @@ public:
virtual const std::shared_ptr<std::vector<std::vector<const Tracker::FaserSCT_Cluster*>>> clusters() const = 0;
};
#endif // FASERACTSKALMANFILTER_ITRACKFINDERTOOL_H
\ No newline at end of file
#endif // FASERACTSKALMANFILTER_ITRACKFINDERTOOL_H
......@@ -40,7 +40,7 @@ StatusCode SegmentFitClusterTrackFinderTool::run() {
// create source links and measurements
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::vector<Measurement> measurements;
......@@ -76,7 +76,8 @@ StatusCode SegmentFitClusterTrackFinderTool::run() {
const auto& par = cluster->localPosition();
const auto& cov = cluster->localCovariance();
Eigen::Matrix<double, 1, 1> myCov {m_sigmaCluster * m_sigmaCluster,};
ThisMeasurement meas(sourceLink, Indices, par.head(1), myCov);
Acts::SourceLink sl{sourceLink};
ThisMeasurement meas(std::move(sl), Indices, par.head(1), myCov);
// ThisMeasurement meas(sourceLink, Indices, par.head(1), cov.block<1,1>(0,0));
sourceLinks.push_back(sourceLink);
measurements.emplace_back(std::move(meas));
......@@ -124,10 +125,23 @@ StatusCode SegmentFitClusterTrackFinderTool::run() {
cov(Acts::eBoundQOverP, Acts::eBoundQOverP) = m_covQOverP;
cov(Acts::eBoundTime, Acts::eBoundTime) = m_covTime;
auto initialParameters = Acts::CurvilinearTrackParameters(
pos4, dir, abs_momentum, charge, cov);
std::vector<Acts::CurvilinearTrackParameters> paramVector {initialParameters};
m_initialTrackParameters = std::make_shared<std::vector<Acts::CurvilinearTrackParameters>>(paramVector);
const auto surface = Acts::Surface::makeShared<Acts::PlaneSurface>(
Acts::Vector3 {0, 0, pos.z()}, Acts::Vector3{0, 0, -1});
Acts::BoundVector params = Acts::BoundVector::Zero();
params[Acts::eBoundLoc0] = pos.x();
params[Acts::eBoundLoc1] = pos.y();
params[Acts::eBoundPhi] = Acts::VectorHelpers::phi(dir.normalized());
params[Acts::eBoundTheta] = Acts::VectorHelpers::theta(dir.normalized());
params[Acts::eBoundQOverP] = charge/abs_momentum;
params[Acts::eBoundTime] = 0;
//@todo: make the particle hypothesis configurable
auto initialParameters = Acts::BoundTrackParameters(
surface, params, cov, Acts::ParticleHypothesis::muon());
std::vector<Acts::BoundTrackParameters> paramVector {initialParameters};
m_initialTrackParameters = std::make_shared<std::vector<Acts::BoundTrackParameters>>(paramVector);
return StatusCode::SUCCESS;
}
......
......@@ -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;
......@@ -40,7 +40,7 @@ public:
virtual const std::shared_ptr<std::vector<std::vector<const Tracker::FaserSCT_Cluster*>>> clusters() const override;
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 {};
......@@ -68,7 +68,7 @@ private:
};
inline const std::shared_ptr<std::vector<Acts::CurvilinearTrackParameters>>
inline const std::shared_ptr<std::vector<Acts::BoundTrackParameters>>
SegmentFitClusterTrackFinderTool::initialTrackParameters() const {
return m_initialTrackParameters;
}
......
......@@ -69,7 +69,7 @@ StatusCode SegmentFitTrackFinderTool::run() {
// create source links and measurements
const int kSize = 2;
using ThisMeasurement = Acts::Measurement<IndexSourceLink, Acts::BoundIndices, kSize>;
using ThisMeasurement = Acts::Measurement<Acts::BoundIndices, kSize>;
std::array<Acts::BoundIndices, kSize> Indices = {Acts::eBoundLoc0, Acts::eBoundLoc1};
std::vector<IndexSourceLink> sourceLinks;
std::vector<Measurement> measurements;
......@@ -89,7 +89,8 @@ StatusCode SegmentFitTrackFinderTool::run() {
// create measurement
const auto& par = spacePoint->localParameters();
const auto& cov = spacePoint->localCovariance();
ThisMeasurement meas(sourceLink, Indices, par, cov);
Acts::SourceLink sl{sourceLink};
ThisMeasurement meas(std::move(sl), Indices, par, cov);
sourceLinks.push_back(sourceLink);
measurements.emplace_back(std::move(meas));
}
......@@ -127,9 +128,21 @@ StatusCode SegmentFitTrackFinderTool::run() {
cov(Acts::eBoundQOverP, Acts::eBoundQOverP) = m_covQOverP;
cov(Acts::eBoundTime, Acts::eBoundTime) = m_covTime;
auto initialParameters = Acts::CurvilinearTrackParameters(
pos4, dir, abs_momentum, charge, cov);
m_initialTrackParameters = std::make_shared<const Acts::CurvilinearTrackParameters>(initialParameters);
const auto surface = Acts::Surface::makeShared<Acts::PlaneSurface>(
Acts::Vector3 {0, 0, pos.z()}, Acts::Vector3{0, 0, -1});
Acts::BoundVector params = Acts::BoundVector::Zero();
params[Acts::eBoundLoc0] = pos.x();
params[Acts::eBoundLoc1] = pos.y();
params[Acts::eBoundPhi] = Acts::VectorHelpers::phi(dir.normalized());
params[Acts::eBoundTheta] = Acts::VectorHelpers::theta(dir.normalized());
params[Acts::eBoundQOverP] = charge/abs_momentum;
params[Acts::eBoundTime] = 0;
//@todo: make the particle hypothesis configurable
auto initialParameters = Acts::BoundTrackParameters(
surface, params, cov, Acts::ParticleHypothesis::muon());
m_initialTrackParameters = std::make_shared<const Acts::BoundTrackParameters>(initialParameters);
return StatusCode::SUCCESS;
}
......
......@@ -30,7 +30,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;
virtual const std::shared_ptr<const Acts::Surface> initialSurface() const override;
virtual const std::shared_ptr<std::vector<IndexSourceLink>> sourceLinks() const override;
virtual const std::shared_ptr<IdentifierLink> idLinks() const override;
......@@ -38,7 +38,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 {};
......@@ -66,7 +66,7 @@ private:
};
inline const std::shared_ptr<const Acts::CurvilinearTrackParameters>
inline const std::shared_ptr<const Acts::BoundTrackParameters>
SegmentFitTrackFinderTool::initialTrackParameters() const {
return m_initialTrackParameters;
}
......
......@@ -52,7 +52,7 @@ StatusCode TruthSeededTrackFinderTool::run() {
= m_trackingGeometryTool->trackingGeometry();
const int kSize = 2;
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::map<int, Acts::Vector3> spacePoints;
......@@ -71,14 +71,15 @@ StatusCode TruthSeededTrackFinderTool::run() {
auto cov = spacePoint->localCovariance();
ATH_MSG_DEBUG("cov " << cov);
ATH_MSG_DEBUG(cov(0, 0) << ", " << cov(0, 1) << ", " << cov(1, 0) << ", " << cov(1, 1));
Acts::ActsSymMatrix<2> myCov = Acts::ActsSymMatrix<2>::Zero();
Acts::ActsSquareMatrix<2> myCov = Acts::ActsSquareMatrix<2>::Zero();
myCov(0, 0) = m_covMeas00;
myCov(1, 1) = m_covMeas11;
myCov(0, 1) = m_covMeas01;
myCov(1, 0) = m_covMeas10;
IndexSourceLink sourceLink(geoId, measurements.size());
ThisMeasurement meas(sourceLink, myIndices, par, myCov);
Acts::SourceLink sl{sourceLink};
ThisMeasurement meas(std::move(sl), myIndices, par, myCov);
sourcelinks.push_back(sourceLink);
measurements.emplace_back(std::move(meas));
......@@ -169,9 +170,18 @@ StatusCode TruthSeededTrackFinderTool::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, initPos.z()}, Acts::Vector3{0, 0, -1});
Acts::BoundVector params = Acts::BoundVector::Zero();
params[Acts::eBoundLoc0] = initPos.x();
params[Acts::eBoundLoc1] = initPos.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();
......@@ -182,7 +192,7 @@ StatusCode TruthSeededTrackFinderTool::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);
m_sourceLinks = std::make_shared<std::vector<IndexSourceLink>>(sourcelinks);
m_measurements = std::make_shared<std::vector<Measurement>>(measurements);
......
......@@ -32,7 +32,8 @@ public:
virtual StatusCode finalize() override;
virtual StatusCode run() override;
virtual const std::shared_ptr<const Acts::CurvilinearTrackParameters> initialTrackParameters() const override {
//@todo: this should return a set of bound track parameters
virtual const std::shared_ptr<const Acts::BoundTrackParameters> initialTrackParameters() const override {
return m_initialTrackParameters;
}
......@@ -53,7 +54,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 {};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment