Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Next round of RefittingAlgorithm fixes and hash checks #3430

Merged
merged 13 commits into from
Jul 30, 2024
6 changes: 5 additions & 1 deletion Core/include/Acts/Propagator/DirectNavigator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,11 @@ class DirectNavigator {
template <typename propagator_state_t, typename stepper_t>
void initialize(propagator_state_t& state,
const stepper_t& /*stepper*/) const {
ACTS_VERBOSE("initialize");
ACTS_VERBOSE("Initialize. Surface sequence for navigation:");
for (auto surface : state.navigation.options.surfaces) {
ACTS_VERBOSE(surface->geometryId()
<< " - " << surface->center(state.geoContext).transpose());
}

// We set the current surface to the start surface
state.navigation.currentSurface = state.navigation.options.startSurface;
Expand Down
6 changes: 5 additions & 1 deletion Core/src/Utilities/Logger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,16 @@ std::unique_ptr<const Logger> makeDummyLogger() {
std::unique_ptr<const Logger> getDefaultLogger(const std::string& name,
const Logging::Level& lvl,
std::ostream* log_stream) {
std::size_t maxWidth = 15;
if (auto cptr = std::getenv("ACTS_LOGGER_MAXWIDTH"); cptr != nullptr) {
benjaminhuth marked this conversation as resolved.
Show resolved Hide resolved
maxWidth = std::stoul(std::string(cptr));
}
using namespace Logging;
auto output = std::make_unique<LevelOutputDecorator>(
std::make_unique<NamedOutputDecorator>(
std::make_unique<TimedOutputDecorator>(
std::make_unique<DefaultPrintPolicy>(log_stream)),
name));
name, maxWidth));
auto print = std::make_unique<DefaultFilterPolicy>(lvl);
return std::make_unique<const Logger>(std::move(output), std::move(print));
}
Expand Down
4 changes: 4 additions & 0 deletions Examples/Algorithms/TrackFitting/src/GsfFitterFunction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,10 @@ struct GsfFitterFunctionImpl final : public ActsExamples::TrackFitterFunction {
tracks.template addColumn<FinalMultiComponentState>(key);
}

if (std::getenv("ACTS_REFIT_DEFAULT_NAVIGATION") != nullptr) {
return fitter.fit(sourceLinks.begin(), sourceLinks.end(),
initialParameters, gsfOptions, tracks);
}
benjaminhuth marked this conversation as resolved.
Show resolved Hide resolved
return directFitter.fit(sourceLinks.begin(), sourceLinks.end(),
initialParameters, gsfOptions, surfaceSequence,
tracks);
Expand Down
7 changes: 7 additions & 0 deletions Examples/Algorithms/TrackFitting/src/RefittingAlgorithm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ ActsExamples::ProcessCode ActsExamples::RefittingAlgorithm::execute(
continue;
}

if (!track.hasReferenceSurface()) {
ACTS_VERBOSE("Skip track " << itrack << ": missing ref surface");
continue;
}

TrackFitterFunction::GeneralFitterOptions options{
ctx.geoContext, ctx.magFieldContext, ctx.calibContext,
&track.referenceSurface(),
Expand All @@ -91,6 +96,8 @@ ActsExamples::ProcessCode ActsExamples::RefittingAlgorithm::execute(
trackSourceLinks.push_back(Acts::SourceLink{sl});
}

std::reverse(surfSequence.begin(), surfSequence.end());

if (surfSequence.empty()) {
ACTS_WARNING("Empty track " << itrack << " found.");
continue;
Expand Down
4 changes: 4 additions & 0 deletions Examples/Python/tests/root_file_hashes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,7 @@ test_truth_tracking_kalman[odd-True-0.0]__trackstates_fitter.root: 774a5689d1d7d
test_truth_tracking_kalman[odd-True-0.0]__tracksummary_fitter.root: a7d6e0710b32219afc8879b4976c9bd388c4adb47b513b1cc8d0a3aaeba5c10b
test_truth_tracking_kalman[odd-True-1000.0]__trackstates_fitter.root: 75427e63ccf720e9ca8c5aa91b894b42ad91d0f474125fb7157008691c8935f0
test_truth_tracking_kalman[odd-True-1000.0]__tracksummary_fitter.root: 3488f9e188faf706b312e0156a5d6c4a871163ed46cd6f35a1dc90f11aa3e93e
test_refitting[odd]__trackstates_gsf_refit.root: 5368eeae8999e153235f1295d1aa64da163502cb70cc88e4c4a8eb4c3edf9760
test_refitting[odd]__tracksummary_gsf_refit.root: 1fae860c7a91a03d1c775aa59184b6dc53330a2ce36e467eda26efd97200a48b
test_refitting[generic]__trackstates_gsf_refit.root: d46791bf7dd2fa4696bcadb33a58d5e82e6d26c244c3a74c4fbbe03b3be5306c
test_refitting[generic]__tracksummary_gsf_refit.root: bedccd1c0f3df8a9e037792eead3b9243c0ce671a29838740ad1816054c2cbd0
19 changes: 17 additions & 2 deletions Examples/Python/tests/test_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,12 +628,15 @@ def test_truth_tracking_gsf(tmp_path, assert_root_hash, detector_config):
assert_root_hash(fn, fp)


def test_refitting(tmp_path, detector_config):
def test_refitting(tmp_path, detector_config, assert_root_hash):
from truth_tracking_gsf_refitting import runRefittingGsf

field = acts.ConstantBField(acts.Vector3(0, 0, 2 * u.T))

seq = Sequencer(events=1, numThreads=1)
seq = Sequencer(
events=10,
numThreads=1,
)

# Only check if it runs without errors right known
# Changes in fitter behaviour should be caught by other tests
Expand All @@ -644,6 +647,18 @@ def test_refitting(tmp_path, detector_config):
s=seq,
).run()

root_files = [
("trackstates_gsf_refit.root", "trackstates"),
("tracksummary_gsf_refit.root", "tracksummary"),
]

for fn, tn in root_files:
fp = tmp_path / fn
assert fp.exists()
assert fp.stat().st_size > 1024
if tn is not None:
assert_root_hash(fn, fp)


def test_particle_gun(tmp_path, assert_root_hash):
from particle_gun import runParticleGun
Expand Down
33 changes: 33 additions & 0 deletions Examples/Scripts/Python/truth_tracking_gsf_refitting.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,39 @@ def runRefittingGsf(
)
)

s.addAlgorithm(
acts.examples.TrackTruthMatcher(
level=acts.logging.INFO,
inputTracks="gsf_tracks",
inputParticles="truth_seeds_selected",
inputMeasurementParticlesMap="measurement_particles_map",
outputTrackParticleMatching="refit_track_particle_matching",
outputParticleTrackMatching="refit_particle_track_matching",
)
)

s.addWriter(
acts.examples.RootTrackStatesWriter(
level=acts.logging.INFO,
inputTracks="gsf_tracks",
inputParticles="truth_seeds_selected",
inputTrackParticleMatching="refit_track_particle_matching",
inputSimHits="simhits",
inputMeasurementSimHitsMap="measurement_simhits_map",
filePath=str(outputDir / "trackstates_gsf_refit.root"),
)
)

s.addWriter(
acts.examples.RootTrackSummaryWriter(
level=acts.logging.INFO,
inputTracks="tracks",
inputParticles="truth_seeds_selected",
inputTrackParticleMatching="refit_track_particle_matching",
filePath=str(outputDir / "tracksummary_gsf_refit.root"),
)
)

s.addWriter(
acts.examples.TrackFitterPerformanceWriter(
level=acts.logging.INFO,
Expand Down
Loading