Skip to content

Commit

Permalink
feat: Ckf performance updates (#813)
Browse files Browse the repository at this point in the history
* ckf performance studies

* adding cov inflation and changing min pT requirement

* removing SeedPerformance writer (leave for future PR)

* fixing clang-format for CommonOptions
  • Loading branch information
asalzburger committed Jun 3, 2021
1 parent 815bb72 commit bdd59e0
Show file tree
Hide file tree
Showing 11 changed files with 57 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Core/include/Acts/TrackFinding/MeasurementSelector.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ class MeasurementSelector {
if (nFinalCandidates == 0) {
measCandidateIndices.resize(1);
measCandidateIndices.at(0) = minIndex;
ACTS_DEBUG("No measurement candidate. Return an outlier measurement.");
ACTS_VERBOSE("No measurement candidate. Return an outlier measurement.");
isOutlier = true;
return Result<void>::success();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ class TrackParamsEstimationAlgorithm final : public BareAlgorithm {
double sigmaQOverP = 0.1 / Acts::UnitConstants::GeV;
/// Time resolution.
double sigmaT0 = 1400 * Acts::UnitConstants::s;
/// Inflate tracks
std::array<double, 6> initialVarInflation = {1., 1., 1., 1., 1., 1.};
};

/// Construct the track parameters making algorithm.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ ActsExamples::ProcessCode ActsExamples::TrackFindingAlgorithm::execute(
}
}

ACTS_DEBUG("Finalized track finding with " << trajectories.size()
<< " track candidates.");

ctx.eventStore.add(m_cfg.outputTrajectories, std::move(trajectories));
return ActsExamples::ProcessCode::SUCCESS;
}
5 changes: 5 additions & 0 deletions Examples/Algorithms/TrackFinding/src/TrackFindingOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "ActsExamples/TrackFinding/TrackFindingOptions.hpp"

#include "Acts/Geometry/GeometryIdentifier.hpp"
#include "ActsExamples/Utilities/Options.hpp"

#include <string>

Expand All @@ -24,6 +25,10 @@ void ActsExamples::Options::addTrackFindingOptions(
opt("ckf-selection-nmax", value<size_t>()->default_value(10),
"Global criteria of maximum number of measurement candidates on a "
"surface for CKF measurement selection");
opt("ckf-initial-variance-inflation",
value<Reals<6>>()->default_value({{1., 1., 1., 1., 1., 1.}}),
"Inflation factor for the initial variances in the CKF search, must be "
"of form i:j:k:l:m:n.");
}

ActsExamples::TrackFindingAlgorithm::Config
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,23 @@ ActsExamples::TrackParamsEstimationAlgorithm::TrackParamsEstimationAlgorithm(

// Set up the track parameters covariance (the same for all tracks)
m_covariance(Acts::eBoundLoc0, Acts::eBoundLoc0) =
cfg.sigmaLoc0 * m_cfg.sigmaLoc0;
m_cfg.initialVarInflation[Acts::eBoundLoc0] * cfg.sigmaLoc0 *
m_cfg.sigmaLoc0;
m_covariance(Acts::eBoundLoc1, Acts::eBoundLoc1) =
cfg.sigmaLoc1 * m_cfg.sigmaLoc1;
m_cfg.initialVarInflation[Acts::eBoundLoc1] * cfg.sigmaLoc1 *
m_cfg.sigmaLoc1;
m_covariance(Acts::eBoundPhi, Acts::eBoundPhi) =
cfg.sigmaPhi * m_cfg.sigmaPhi;
m_cfg.initialVarInflation[Acts::eBoundPhi] * cfg.sigmaPhi *
m_cfg.sigmaPhi;
m_covariance(Acts::eBoundTheta, Acts::eBoundTheta) =
cfg.sigmaTheta * m_cfg.sigmaTheta;
m_cfg.initialVarInflation[Acts::eBoundTheta] * cfg.sigmaTheta *
m_cfg.sigmaTheta;
m_covariance(Acts::eBoundQOverP, Acts::eBoundQOverP) =
cfg.sigmaQOverP * m_cfg.sigmaQOverP;
m_cfg.initialVarInflation[Acts::eBoundQOverP] * cfg.sigmaQOverP *
m_cfg.sigmaQOverP;
m_covariance(Acts::eBoundTime, Acts::eBoundTime) =
m_cfg.sigmaT0 * m_cfg.sigmaT0;
m_cfg.initialVarInflation[Acts::eBoundTime] * m_cfg.sigmaT0 *
m_cfg.sigmaT0;
}

ActsExamples::SimSeedContainer
Expand Down
7 changes: 7 additions & 0 deletions Examples/Algorithms/TrackFitting/src/TrackFittingOptions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#include "ActsExamples/TrackFitting/TrackFittingOptions.hpp"

#include "ActsExamples/Utilities/Options.hpp"

using namespace boost::program_options;

void ActsExamples::Options::addFittingOptions(
Expand All @@ -22,4 +24,9 @@ void ActsExamples::Options::addFittingOptions(
"Correct for energyloss effects.");
opt.add_options()("fit-pick-track", value<int>()->default_value(-1),
"Pick a single track by track number (-1 for all tracks)");
opt.add_options()(
"fit-initial-variance-inflation",
value<Reals<6>>()->default_value({{1., 1., 1., 1., 1., 1.}}),
"Inflation factor for the initial covariance for the Kalman filter, 6 "
"values are required in the form of i:j:k:l:m:n.");
}
Original file line number Diff line number Diff line change
Expand Up @@ -87,12 +87,20 @@ ActsExamples::ProcessCode ActsExamples::ParticleSmearing::execute(

// build the track covariance matrix using the smearing sigmas
Acts::BoundSymMatrix cov = Acts::BoundSymMatrix::Zero();
cov(Acts::eBoundLoc0, Acts::eBoundLoc0) = sigmaD0 * sigmaD0;
cov(Acts::eBoundLoc1, Acts::eBoundLoc1) = sigmaZ0 * sigmaZ0;
cov(Acts::eBoundTime, Acts::eBoundTime) = sigmaT0 * sigmaT0;
cov(Acts::eBoundPhi, Acts::eBoundPhi) = sigmaPhi * sigmaPhi;
cov(Acts::eBoundTheta, Acts::eBoundTheta) = sigmaTheta * sigmaTheta;
cov(Acts::eBoundQOverP, Acts::eBoundQOverP) = sigmaQOverP * sigmaQOverP;
cov(Acts::eBoundLoc0, Acts::eBoundLoc0) =
m_cfg.initialVarInflation[Acts::eBoundLoc0] * sigmaD0 * sigmaD0;
cov(Acts::eBoundLoc1, Acts::eBoundLoc1) =
m_cfg.initialVarInflation[Acts::eBoundLoc1] * sigmaZ0 * sigmaZ0;
cov(Acts::eBoundTime, Acts::eBoundTime) =
m_cfg.initialVarInflation[Acts::eBoundTime] * sigmaT0 * sigmaT0;
cov(Acts::eBoundPhi, Acts::eBoundPhi) =
m_cfg.initialVarInflation[Acts::eBoundPhi] * sigmaPhi * sigmaPhi;
cov(Acts::eBoundTheta, Acts::eBoundTheta) =
m_cfg.initialVarInflation[Acts::eBoundTheta] * sigmaTheta *
sigmaTheta;
cov(Acts::eBoundQOverP, Acts::eBoundQOverP) =
m_cfg.initialVarInflation[Acts::eBoundQOverP] * sigmaQOverP *
sigmaQOverP;

parameters.emplace_back(perigee, params, q, cov);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "ActsExamples/Framework/BareAlgorithm.hpp"
#include "ActsExamples/Framework/RandomNumbers.hpp"

#include <array>
#include <limits>
#include <string>

Expand Down Expand Up @@ -48,6 +49,8 @@ class ParticleSmearing final : public BareAlgorithm {
double sigmaTheta = 1 * Acts::UnitConstants::degree;
/// Relative momentum resolution.
double sigmaPRel = 0.001;
/// Inflate the initial covariance matrix
std::array<double, 6> initialVarInflation = {1., 1., 1., 1., 1., 1.};
/// Random numbers service.
std::shared_ptr<const RandomNumbers> randomNumbers = nullptr;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#pragma once

#include "Acts/Propagator/detail/SteppingLogger.hpp"
#include <ActsExamples/Framework/WriterT.hpp>
#include "ActsExamples/Framework/WriterT.hpp"

#include <mutex>

Expand Down
7 changes: 6 additions & 1 deletion Examples/Run/Reconstruction/Common/RecCKFTracks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "ActsExamples/TrackFinding/TrackFindingAlgorithm.hpp"
#include "ActsExamples/TrackFinding/TrackFindingOptions.hpp"
#include "ActsExamples/TrackFinding/TrackParamsEstimationAlgorithm.hpp"
#include "ActsExamples/TrackFitting/TrackFittingOptions.hpp"
#include "ActsExamples/TruthTracking/ParticleSmearing.hpp"
#include "ActsExamples/TruthTracking/TruthSeedSelector.hpp"
#include "ActsExamples/TruthTracking/TruthTrackFinder.hpp"
Expand Down Expand Up @@ -70,6 +71,7 @@ int runRecCKFTracks(int argc, char* argv[],
Options::addOutputOptions(desc, OutputFormat::DirectoryOnly);
detector->addOptions(desc);
Options::addMagneticFieldOptions(desc);
Options::addFittingOptions(desc);
Options::addTrackFindingOptions(desc);
addRecCKFOptions(desc);
Options::addDigitizationOptions(desc);
Expand Down Expand Up @@ -221,6 +223,9 @@ int runRecCKFTracks(int argc, char* argv[],
paramsEstimationCfg.sigmaTheta = 0.02_degree;
paramsEstimationCfg.sigmaQOverP = 0.1 / 1._GeV;
paramsEstimationCfg.sigmaT0 = 1400._s;
paramsEstimationCfg.initialVarInflation =
vm["ckf-initial-variance-inflation"].template as<Options::Reals<6>>();

sequencer.addAlgorithm(std::make_shared<TrackParamsEstimationAlgorithm>(
paramsEstimationCfg, logLevel));

Expand Down Expand Up @@ -283,7 +288,7 @@ int runRecCKFTracks(int argc, char* argv[],
digiCfg.outputMeasurementParticlesMap;
// The bottom seed could be the first, second or third hits on the truth track
perfWriterCfg.nMeasurementsMin = particleSelectorCfg.nHitsMin - 3;
perfWriterCfg.ptMin = 1_GeV;
perfWriterCfg.ptMin = 0.4_GeV;
perfWriterCfg.outputDir = outputDir;
#ifdef ACTS_PLUGIN_ONNX
// Onnx plugin related options
Expand Down
3 changes: 3 additions & 0 deletions Examples/Run/Reconstruction/Common/RecInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "ActsExamples/TrackFitting/TrackFittingOptions.hpp"
#include "ActsExamples/TruthTracking/ParticleSmearing.hpp"
#include "ActsExamples/TruthTracking/TruthTrackFinder.hpp"
#include "ActsExamples/Utilities/Options.hpp"

#include "RecInput.hpp"

Expand Down Expand Up @@ -125,6 +126,8 @@ ActsExamples::ParticleSmearing::Config setupParticleSmearing(
particleSmearingCfg.sigmaTheta = 1_degree;
particleSmearingCfg.sigmaPRel = 0.01;
particleSmearingCfg.sigmaT0 = 1_ns;
particleSmearingCfg.initialVarInflation =
vars["fit-initial-variance-inflation"].template as<Options::Reals<6>>();
sequencer.addAlgorithm(
std::make_shared<ParticleSmearing>(particleSmearingCfg, logLevel));

Expand Down

0 comments on commit bdd59e0

Please sign in to comment.