From f6ce5f00ccc436b68d0462d115c0b7a2a228000d Mon Sep 17 00:00:00 2001 From: AJPfleger Date: Thu, 21 Nov 2024 17:07:01 +0100 Subject: [PATCH 1/6] add comparison --- CI/physmon/config/trackfitting_gx2f_vs_kf.yml | 7 ++ CI/physmon/phys_perf_mon.sh | 19 +++++- CI/physmon/summary.py | 18 +++-- .../physmon_trackfitting_gx2f_vs_kf.py | 68 +++++++++++++++++++ 4 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 CI/physmon/config/trackfitting_gx2f_vs_kf.yml create mode 100755 CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py diff --git a/CI/physmon/config/trackfitting_gx2f_vs_kf.yml b/CI/physmon/config/trackfitting_gx2f_vs_kf.yml new file mode 100644 index 00000000000..ddcf38e9b03 --- /dev/null +++ b/CI/physmon/config/trackfitting_gx2f_vs_kf.yml @@ -0,0 +1,7 @@ +checks: + "*": + Chi2Test: null + KolmogorovTest: null + RatioCheck: null + ResidualCheck: null + IntegralCheck: null diff --git a/CI/physmon/phys_perf_mon.sh b/CI/physmon/phys_perf_mon.sh index c2944f0dd06..4314f4be6b6 100755 --- a/CI/physmon/phys_perf_mon.sh +++ b/CI/physmon/phys_perf_mon.sh @@ -20,8 +20,8 @@ shopt -s extglob mode=${1:-all} -if ! [[ $mode = @(all|kf|gsf|gx2f|refit_kf|refit_gsf|fullchains|simulation) ]]; then - echo "Usage: $0 (outdir)" +if ! [[ $mode = @(all|kf|gsf|gx2f|refit_kf|refit_gsf|fullchains|simulation|gx2f_vs_kf) ]]; then + echo "Usage: $0 (outdir)" exit 1 fi @@ -163,6 +163,9 @@ if [[ "$mode" == "all" || "$mode" == "fullchains" ]]; then run_physmon_gen "CKF muon 50" "trackfinding_4muon_50vertices" run_physmon_gen "CKF ttbar 200" "trackfinding_ttbar_pu200" fi +if [[ "$mode" == "all" || "$mode" == "gx2f_vs_kf" ]]; then + run_physmon_gen "Comparison - Truth Tracking GX2F vs KF" "trackfitting_gx2f_vs_kf" +fi echo "::endgroup::" @@ -459,6 +462,18 @@ if [[ "$mode" == "all" || "$mode" == "fullchains" ]]; then vertexing "trackfinding | ttbar with 200 pileup | default seeding" trackfinding_ttbar_pu200 CI/physmon/config/vertexing_ttbar_pu200.yml fi +if [[ "$mode" == "all" || "$mode" == "gx2f_vs_kf" ]]; then + run_histcmp \ + $outdir/data/trackfitting_gx2f_vs_kf/performance_trackfitting_gx2f.root \ + $outdir/data/trackfitting_gx2f_vs_kf/performance_trackfitting_kf.root \ + "Comparison - Truth tracking (GX2F vs KF)" \ + trackfitting_gx2f_vs_kf/performance_trackfitting.html \ + trackfitting_gx2f_vs_kf/performance_trackfitting_plots \ + --config CI/physmon/config/trackfitting_gx2f_vs_kf.yml \ + --label-reference=KF \ + --label-monitored=GX2F +fi + run CI/physmon/summary.py $histcmp_results \ --md $outdir/summary.md \ --html $outdir/summary.html diff --git a/CI/physmon/summary.py b/CI/physmon/summary.py index a7de3ed74c8..0601b2f9fe8 100755 --- a/CI/physmon/summary.py +++ b/CI/physmon/summary.py @@ -48,10 +48,16 @@ ) for s in summary: - f.write( - f""" + if s["title"].startswith("Comparison"): + f.write( + f""" +
  • 🔵 {s["title"]}
  • """ + ) + else: + f.write( + f"""
  • {"✅" if s["total"] else "🔴"} {s["title"]}
  • """ - ) + ) f.write( """ @@ -74,4 +80,8 @@ ) else: url = s["path"] - f.write(f" - {'✅' if s['total'] else '🔴'} [{s['title']}]({url})\n") + + if s["title"].startswith("Comparison"): + f.write(f" - 🔵️ [{s['title']}]({url})\n") + else: + f.write(f" - {'✅' if s['total'] else '🔴'} [{s['title']}]({url})\n") diff --git a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py new file mode 100755 index 00000000000..384f924c05a --- /dev/null +++ b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import tempfile +from pathlib import Path +import shutil + +import acts +from truth_tracking_kalman import runTruthTrackingKalman +from truth_tracking_gx2f import runTruthTrackingGx2f + +from physmon_common import makeSetup + +setup = makeSetup() + +digiConfigFile = setup.digiConfig +nSkip = 0 +nEvents = 100000 +numThreads = -1 + +with tempfile.TemporaryDirectory() as temp: + s = acts.examples.Sequencer( + skip=nSkip, + events=nEvents, + numThreads=numThreads, + logLevel=acts.logging.INFO, + trackFpes=True, + ) + + tp = Path(temp) + runTruthTrackingKalman( + trackingGeometry=setup.trackingGeometry, + field=setup.field, + digiConfigFile=digiConfigFile, + outputDir=tp, + s=s, + ) + + s.run() + del s + + perf_file = tp / "performance_kf.root" + assert perf_file.exists(), "Performance file not found" + shutil.copy(perf_file, setup.outdir / "performance_trackfitting_kf.root") + +with tempfile.TemporaryDirectory() as temp: + s = acts.examples.Sequencer( + skip=nSkip, + events=nEvents, + numThreads=numThreads, + logLevel=acts.logging.INFO, + trackFpes=True, + ) + + tp = Path(temp) + runTruthTrackingGx2f( + trackingGeometry=setup.trackingGeometry, + field=setup.field, + digiConfigFile=digiConfigFile, + outputDir=tp, + s=s, + ) + + s.run() + del s + + perf_file = tp / "performance_gx2f.root" + assert perf_file.exists(), "Performance file not found" + shutil.copy(perf_file, setup.outdir / "performance_trackfitting_gx2f.root") From 8ae4477a536a571566b2c70026a27566c8d808c4 Mon Sep 17 00:00:00 2001 From: AJPfleger Date: Fri, 22 Nov 2024 13:45:49 +0100 Subject: [PATCH 2/6] skip FPE --- CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py index 384f924c05a..e5064a08865 100755 --- a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py +++ b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py @@ -23,7 +23,7 @@ events=nEvents, numThreads=numThreads, logLevel=acts.logging.INFO, - trackFpes=True, + trackFpes=False, ) tp = Path(temp) From 4e28fd416193bf48989d4afdfa166f4806bad160 Mon Sep 17 00:00:00 2001 From: AJPfleger Date: Fri, 22 Nov 2024 13:51:04 +0100 Subject: [PATCH 3/6] generalise config --- CI/physmon/config/info_only.yml | 3 +++ CI/physmon/config/trackfitting_gx2f_vs_kf.yml | 7 ------- CI/physmon/phys_perf_mon.sh | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) create mode 100644 CI/physmon/config/info_only.yml delete mode 100644 CI/physmon/config/trackfitting_gx2f_vs_kf.yml diff --git a/CI/physmon/config/info_only.yml b/CI/physmon/config/info_only.yml new file mode 100644 index 00000000000..d6351c6ac64 --- /dev/null +++ b/CI/physmon/config/info_only.yml @@ -0,0 +1,3 @@ +checks: + "*": + "*": null diff --git a/CI/physmon/config/trackfitting_gx2f_vs_kf.yml b/CI/physmon/config/trackfitting_gx2f_vs_kf.yml deleted file mode 100644 index ddcf38e9b03..00000000000 --- a/CI/physmon/config/trackfitting_gx2f_vs_kf.yml +++ /dev/null @@ -1,7 +0,0 @@ -checks: - "*": - Chi2Test: null - KolmogorovTest: null - RatioCheck: null - ResidualCheck: null - IntegralCheck: null diff --git a/CI/physmon/phys_perf_mon.sh b/CI/physmon/phys_perf_mon.sh index 4314f4be6b6..95b847329cc 100755 --- a/CI/physmon/phys_perf_mon.sh +++ b/CI/physmon/phys_perf_mon.sh @@ -469,7 +469,7 @@ if [[ "$mode" == "all" || "$mode" == "gx2f_vs_kf" ]]; then "Comparison - Truth tracking (GX2F vs KF)" \ trackfitting_gx2f_vs_kf/performance_trackfitting.html \ trackfitting_gx2f_vs_kf/performance_trackfitting_plots \ - --config CI/physmon/config/trackfitting_gx2f_vs_kf.yml \ + --config CI/physmon/config/info_only.yml \ --label-reference=KF \ --label-monitored=GX2F fi From c4c1a166c95d8460db633549270eff5b5d4f961e Mon Sep 17 00:00:00 2001 From: AJPfleger Date: Fri, 22 Nov 2024 15:11:00 +0100 Subject: [PATCH 4/6] revert *-generalisation --- CI/physmon/config/info_only.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CI/physmon/config/info_only.yml b/CI/physmon/config/info_only.yml index d6351c6ac64..ddcf38e9b03 100644 --- a/CI/physmon/config/info_only.yml +++ b/CI/physmon/config/info_only.yml @@ -1,3 +1,7 @@ checks: "*": - "*": null + Chi2Test: null + KolmogorovTest: null + RatioCheck: null + ResidualCheck: null + IntegralCheck: null From dc366bc68e0cb1fe556f6eebe2ea6ebb061d08dc Mon Sep 17 00:00:00 2001 From: AJPfleger Date: Thu, 28 Nov 2024 10:15:18 +0100 Subject: [PATCH 5/6] review andiwand --- .../physmon_trackfitting_gx2f_vs_kf.py | 169 ++++++++++++++---- .../python/acts/examples/reconstruction.py | 9 +- 2 files changed, 137 insertions(+), 41 deletions(-) diff --git a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py index e5064a08865..6bf3124da01 100755 --- a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py +++ b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py @@ -1,68 +1,161 @@ #!/usr/bin/env python3 import tempfile + from pathlib import Path -import shutil import acts -from truth_tracking_kalman import runTruthTrackingKalman -from truth_tracking_gx2f import runTruthTrackingGx2f +import acts.examples + +from acts.examples.simulation import ( + addParticleGun, + ParticleConfig, + EtaConfig, + PhiConfig, + MomentumConfig, + ParticleSelectorConfig, + addFatras, + addDigitization, +) +from acts.examples.reconstruction import ( + addSeeding, + SeedingAlgorithm, + addGx2fTracks, + addKalmanTracks, +) from physmon_common import makeSetup +u = acts.UnitConstants + setup = makeSetup() +trackingGeometry = setup.trackingGeometry +field = setup.field digiConfigFile = setup.digiConfig -nSkip = 0 -nEvents = 100000 -numThreads = -1 with tempfile.TemporaryDirectory() as temp: s = acts.examples.Sequencer( - skip=nSkip, - events=nEvents, - numThreads=numThreads, + events=100000, + numThreads=-1, logLevel=acts.logging.INFO, + skip=0, trackFpes=False, ) - tp = Path(temp) - runTruthTrackingKalman( - trackingGeometry=setup.trackingGeometry, - field=setup.field, + rnd = acts.examples.RandomNumbers(seed=42) + outputDirTemp = Path(temp) + outputDir = setup.outdir + + addParticleGun( + s, + ParticleConfig(num=1, pdg=acts.PdgParticle.eMuon, randomizeCharge=True), + EtaConfig(-3.0, 3.0, uniform=True), + MomentumConfig(1.0 * u.GeV, 100.0 * u.GeV, transverse=True), + PhiConfig(0.0, 360.0 * u.degree), + vtxGen=acts.examples.GaussianVertexGenerator( + mean=acts.Vector4(0, 0, 0, 0), + stddev=acts.Vector4(0, 0, 0, 0), + ), + multiplicity=1, + rnd=rnd, + outputDirRoot=outputDirTemp, + ) + + addFatras( + s, + trackingGeometry, + field, + rnd=rnd, + enableInteractions=True, + postSelectParticles=ParticleSelectorConfig( + pt=(0.9 * u.GeV, None), + measurements=(7, None), + removeNeutral=True, + removeSecondaries=True, + ), + ) + + addDigitization( + s, + trackingGeometry, + field, digiConfigFile=digiConfigFile, - outputDir=tp, - s=s, + rnd=rnd, ) - s.run() - del s + addSeeding( + s, + trackingGeometry, + field, + rnd=rnd, + inputParticles="particles_input", + seedingAlgorithm=SeedingAlgorithm.TruthSmeared, + particleHypothesis=acts.ParticleHypothesis.muon, + ) - perf_file = tp / "performance_kf.root" - assert perf_file.exists(), "Performance file not found" - shutil.copy(perf_file, setup.outdir / "performance_trackfitting_kf.root") + addGx2fTracks( + s, + trackingGeometry, + field, + nUpdateMax=17, + relChi2changeCutOff=1e-7, + multipleScattering=True, + whiteboardAliasTracks="tracks-gx2f", + ) -with tempfile.TemporaryDirectory() as temp: - s = acts.examples.Sequencer( - skip=nSkip, - events=nEvents, - numThreads=numThreads, - logLevel=acts.logging.INFO, - trackFpes=True, + s.addAlgorithm( + acts.examples.TrackSelectorAlgorithm( + level=acts.logging.INFO, + inputTracks="tracks-gx2f", + outputTracks="selected-tracks-gx2f", + selectorConfig=acts.TrackSelector.Config( + minMeasurements=7, + ), + ) ) + s.addWhiteboardAlias("tracks-gx2f", "selected-tracks-gx2f") - tp = Path(temp) - runTruthTrackingGx2f( - trackingGeometry=setup.trackingGeometry, - field=setup.field, - digiConfigFile=digiConfigFile, - outputDir=tp, - s=s, + s.addWriter( + acts.examples.TrackFitterPerformanceWriter( + level=acts.logging.INFO, + inputTracks="tracks-gx2f", + inputParticles="particles_selected", + inputTrackParticleMatching="track_particle_matching", + filePath=str(outputDir / "performance_trackfitting_gx2f.root"), + ) + ) + + addKalmanTracks( + s, + trackingGeometry, + field, + directNavigation=False, + reverseFilteringMomThreshold=0 * u.GeV, + whiteboardAliasTracks="tracks-kf", + ) + + s.addAlgorithm( + acts.examples.TrackSelectorAlgorithm( + level=acts.logging.INFO, + inputTracks="tracks-kf", + outputTracks="selected-tracks-kf", + selectorConfig=acts.TrackSelector.Config( + minMeasurements=7, + ), + ) + ) + s.addWhiteboardAlias("tracks-kf", "selected-tracks-kf") + + s.addWriter( + acts.examples.TrackFitterPerformanceWriter( + level=acts.logging.INFO, + inputTracks="tracks-kf", + inputParticles="particles_selected", + inputTrackParticleMatching="track_particle_matching", + filePath=str(outputDir / "performance_trackfitting_kf.root"), + ) ) s.run() del s - - perf_file = tp / "performance_gx2f.root" - assert perf_file.exists(), "Performance file not found" - shutil.copy(perf_file, setup.outdir / "performance_trackfitting_gx2f.root") diff --git a/Examples/Python/python/acts/examples/reconstruction.py b/Examples/Python/python/acts/examples/reconstruction.py index bc1b1d4df9d..3da29d176a3 100644 --- a/Examples/Python/python/acts/examples/reconstruction.py +++ b/Examples/Python/python/acts/examples/reconstruction.py @@ -1251,6 +1251,7 @@ def addKalmanTracks( clusters: str = None, calibrator: acts.examples.MeasurementCalibrator = acts.examples.makePassThroughCalibrator(), logLevel: Optional[acts.logging.Level] = None, + whiteboardAliasTracks: str = "tracks", ) -> None: customLogLevel = acts.examples.defaultLogging(s, logLevel) @@ -1287,7 +1288,7 @@ def addKalmanTracks( calibrator=calibrator, ) s.addAlgorithm(fitAlg) - s.addWhiteboardAlias("tracks", fitAlg.config.outputTracks) + s.addWhiteboardAlias(whiteboardAliasTracks, fitAlg.config.outputTracks) matchAlg = acts.examples.TrackTruthMatcher( level=customLogLevel(), @@ -1386,6 +1387,7 @@ def addCKFTracks( writePerformance: bool = True, writeCovMat=False, logLevel: Optional[acts.logging.Level] = None, + whiteboardAliasTracks: str = "tracks", ) -> None: """This function steers the seeding @@ -1510,7 +1512,7 @@ def addCKFTracks( ), ) s.addAlgorithm(trackFinder) - s.addWhiteboardAlias("tracks", trackFinder.config.outputTracks) + s.addWhiteboardAlias(whiteboardAliasTracks, trackFinder.config.outputTracks) matchAlg = acts.examples.TrackTruthMatcher( level=customLogLevel(), @@ -1558,6 +1560,7 @@ def addGx2fTracks( clusters: str = None, calibrator: acts.examples.MeasurementCalibrator = acts.examples.makePassThroughCalibrator(), logLevel: Optional[acts.logging.Level] = None, + whiteboardAliasTracks: str = "tracks", ) -> None: customLogLevel = acts.examples.defaultLogging(s, logLevel) @@ -1584,7 +1587,7 @@ def addGx2fTracks( calibrator=calibrator, ) s.addAlgorithm(fitAlg) - s.addWhiteboardAlias("tracks", fitAlg.config.outputTracks) + s.addWhiteboardAlias(whiteboardAliasTracks, fitAlg.config.outputTracks) matchAlg = acts.examples.TrackTruthMatcher( level=customLogLevel(), From 510e7c18a931891ae284d07f887340f41e91e5ea Mon Sep 17 00:00:00 2001 From: AJPfleger Date: Mon, 2 Dec 2024 16:44:18 +0100 Subject: [PATCH 6/6] skip alias --- .../physmon_trackfitting_gx2f_vs_kf.py | 12 +-- .../python/acts/examples/reconstruction.py | 76 +++++++++++-------- 2 files changed, 50 insertions(+), 38 deletions(-) diff --git a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py index 6bf3124da01..2f5876654e8 100755 --- a/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py +++ b/CI/physmon/workflows/physmon_trackfitting_gx2f_vs_kf.py @@ -101,25 +101,23 @@ nUpdateMax=17, relChi2changeCutOff=1e-7, multipleScattering=True, - whiteboardAliasTracks="tracks-gx2f", ) s.addAlgorithm( acts.examples.TrackSelectorAlgorithm( level=acts.logging.INFO, - inputTracks="tracks-gx2f", + inputTracks="tracks", outputTracks="selected-tracks-gx2f", selectorConfig=acts.TrackSelector.Config( minMeasurements=7, ), ) ) - s.addWhiteboardAlias("tracks-gx2f", "selected-tracks-gx2f") s.addWriter( acts.examples.TrackFitterPerformanceWriter( level=acts.logging.INFO, - inputTracks="tracks-gx2f", + inputTracks="selected-tracks-gx2f", inputParticles="particles_selected", inputTrackParticleMatching="track_particle_matching", filePath=str(outputDir / "performance_trackfitting_gx2f.root"), @@ -132,25 +130,23 @@ field, directNavigation=False, reverseFilteringMomThreshold=0 * u.GeV, - whiteboardAliasTracks="tracks-kf", ) s.addAlgorithm( acts.examples.TrackSelectorAlgorithm( level=acts.logging.INFO, - inputTracks="tracks-kf", + inputTracks="tracks", outputTracks="selected-tracks-kf", selectorConfig=acts.TrackSelector.Config( minMeasurements=7, ), ) ) - s.addWhiteboardAlias("tracks-kf", "selected-tracks-kf") s.addWriter( acts.examples.TrackFitterPerformanceWriter( level=acts.logging.INFO, - inputTracks="tracks-kf", + inputTracks="selected-tracks-kf", inputParticles="particles_selected", inputTrackParticleMatching="track_particle_matching", filePath=str(outputDir / "performance_trackfitting_kf.root"), diff --git a/Examples/Python/python/acts/examples/reconstruction.py b/Examples/Python/python/acts/examples/reconstruction.py index c82c49fe100..a365572cabc 100644 --- a/Examples/Python/python/acts/examples/reconstruction.py +++ b/Examples/Python/python/acts/examples/reconstruction.py @@ -13,9 +13,20 @@ "Default TruthSmeared TruthEstimated Orthogonal HoughTransform Gbts Hashing", ) -ParticleSmearingSigmas = namedtuple( - "ParticleSmearingSigmas", - ["d0", "d0PtA", "d0PtB", "z0", "z0PtA", "z0PtB", "t0", "phi", "theta", "ptRel"], +TrackSmearingSigmas = namedtuple( + "TrackSmearingSigmas", + [ + "loc0", + "loc0PtA", + "loc0PtB", + "loc1", + "loc1PtA", + "loc1PtB", + "time", + "phi", + "theta", + "ptRel", + ], defaults=[None] * 10, ) @@ -256,7 +267,7 @@ class VertexFinder(Enum): @acts.examples.NamedTypeArgs( seedingAlgorithm=SeedingAlgorithm, - particleSmearingSigmas=ParticleSmearingSigmas, + trackSmearingSigmas=TrackSmearingSigmas, seedFinderConfigArg=SeedFinderConfigArg, seedFinderOptionsArg=SeedFinderOptionsArg, seedFilterConfigArg=SeedFilterConfigArg, @@ -275,7 +286,7 @@ def addSeeding( layerMappingConfigFile: Optional[Union[Path, str]] = None, connector_inputConfigFile: Optional[Union[Path, str]] = None, seedingAlgorithm: SeedingAlgorithm = SeedingAlgorithm.Default, - particleSmearingSigmas: ParticleSmearingSigmas = ParticleSmearingSigmas(), + trackSmearingSigmas: TrackSmearingSigmas = TrackSmearingSigmas(), initialSigmas: Optional[list] = None, initialSigmaPtRel: Optional[float] = None, initialVarInflation: Optional[list] = None, @@ -313,15 +324,15 @@ def addSeeding( Json file for space point geometry selection. Not required for SeedingAlgorithm.TruthSmeared. seedingAlgorithm : SeedingAlgorithm, Default seeding algorithm to use: one of Default (no truth information used), TruthSmeared, TruthEstimated - particleSmearingSigmas : ParticleSmearingSigmas(d0, d0PtA, d0PtB, z0, z0PtA, z0PtB, t0, phi, theta, ptRel) - ParticleSmearing configuration. - Defaults specified in Examples/Algorithms/TruthTracking/ActsExamples/TruthTracking/ParticleSmearing.hpp + trackSmearingSigmas : TrackSmearingSigmas(loc0, loc0PtA, loc0PtB, loc1, loc1PtA, loc1PtB, time, phi, theta, ptRel) + TrackSmearing configuration. + Defaults specified in Examples/Algorithms/TruthTracking/ActsExamples/TruthTracking/TrackParameterSmearing.hpp initialSigmas : list Sets the initial covariance matrix diagonal. This is ignored in case of TruthSmearing. Defaults specified in Examples/Algorithms/TrackFinding/include/ActsExamples/TrackFinding/TrackParamsEstimationAlgorithm.hpp initialVarInflation : list List of 6 scale factors to inflate the initial covariance matrix - Defaults (all 1) specified in Examples/Algorithms/TruthTracking/ActsExamples/TruthTracking/ParticleSmearing.hpp + Defaults (all 1) specified in Examples/Algorithms/TruthTracking/ActsExamples/TruthTracking/TrackParameterSmearing.hpp seedFinderConfigArg : SeedFinderConfigArg(maxSeedsPerSpM, cotThetaMax, sigmaScattering, radLengthPerSeed, minPt, impactMax, deltaPhiMax, interactionPointCut, deltaZMax, maxPtScattering, zBinEdges, zBinsCustomLooping, rRangeMiddleSP, useVariableMiddleSPRange, binSizeR, seedConfirmation, centralSeedConfirmationRange, forwardSeedConfirmationRange, deltaR, deltaRBottomSP, deltaRTopSP, deltaRMiddleSPRange, collisionRegion, r, z) SeedFinderConfig settings. deltaR, deltaRBottomSP, deltaRTopSP, deltaRMiddleSPRange, collisionRegion, r, z. Defaults specified in Core/include/Acts/Seeding/SeedFinderConfig.hpp @@ -366,7 +377,7 @@ def addSeeding( s=s, rnd=rnd, selectedParticles=selectedParticles, - particleSmearingSigmas=particleSmearingSigmas, + trackSmearingSigmas=trackSmearingSigmas, initialSigmas=initialSigmas, initialSigmaPtRel=initialSigmaPtRel, initialVarInflation=initialVarInflation, @@ -520,7 +531,7 @@ def addTruthSmearedSeeding( s: acts.examples.Sequencer, rnd: Optional[acts.examples.RandomNumbers], selectedParticles: str, - particleSmearingSigmas: ParticleSmearingSigmas, + trackSmearingSigmas: TrackSmearingSigmas, initialSigmas: Optional[List[float]], initialSigmaPtRel: Optional[float], initialVarInflation: Optional[List[float]], @@ -532,31 +543,39 @@ def addTruthSmearedSeeding( """ rnd = rnd or acts.examples.RandomNumbers(seed=42) - # Run particle smearing - ptclSmear = acts.examples.ParticleSmearing( + + trkParamExtractor = acts.examples.ParticleTrackParamExtractor( level=logLevel, inputParticles=selectedParticles, + outputTrackParameters="trueparameters", + ) + s.addAlgorithm(trkParamExtractor) + + # Smearing track parameters + trkSmear = acts.examples.TrackParameterSmearing( + level=logLevel, + inputTrackParameters=trkParamExtractor.config.outputTrackParameters, outputTrackParameters="estimatedparameters", randomNumbers=rnd, # gaussian sigmas to smear particle parameters **acts.examples.defaultKWArgs( - sigmaD0=particleSmearingSigmas.d0, - sigmaD0PtA=particleSmearingSigmas.d0PtA, - sigmaD0PtB=particleSmearingSigmas.d0PtB, - sigmaZ0=particleSmearingSigmas.z0, - sigmaZ0PtA=particleSmearingSigmas.z0PtA, - sigmaZ0PtB=particleSmearingSigmas.z0PtB, - sigmaT0=particleSmearingSigmas.t0, - sigmaPhi=particleSmearingSigmas.phi, - sigmaTheta=particleSmearingSigmas.theta, - sigmaPtRel=particleSmearingSigmas.ptRel, + sigmaLoc0=trackSmearingSigmas.loc0, + sigmaLoc0PtA=trackSmearingSigmas.loc0PtA, + sigmaLoc0PtB=trackSmearingSigmas.loc0PtB, + sigmaLoc1=trackSmearingSigmas.loc1, + sigmaLoc1PtA=trackSmearingSigmas.loc1PtA, + sigmaLoc1PtB=trackSmearingSigmas.loc1PtB, + sigmaTime=trackSmearingSigmas.time, + sigmaPhi=trackSmearingSigmas.phi, + sigmaTheta=trackSmearingSigmas.theta, + sigmaPtRel=trackSmearingSigmas.ptRel, initialSigmas=initialSigmas, initialSigmaPtRel=initialSigmaPtRel, initialVarInflation=initialVarInflation, particleHypothesis=particleHypothesis, ), ) - s.addAlgorithm(ptclSmear) + s.addAlgorithm(trkSmear) truthTrkFndAlg = acts.examples.TruthTrackFinder( level=logLevel, @@ -1283,7 +1302,6 @@ def addKalmanTracks( clusters: str = None, calibrator: acts.examples.MeasurementCalibrator = acts.examples.makePassThroughCalibrator(), logLevel: Optional[acts.logging.Level] = None, - whiteboardAliasTracks: str = "tracks", ) -> None: customLogLevel = acts.examples.defaultLogging(s, logLevel) @@ -1320,7 +1338,7 @@ def addKalmanTracks( calibrator=calibrator, ) s.addAlgorithm(fitAlg) - s.addWhiteboardAlias(whiteboardAliasTracks, fitAlg.config.outputTracks) + s.addWhiteboardAlias("tracks", fitAlg.config.outputTracks) matchAlg = acts.examples.TrackTruthMatcher( level=customLogLevel(), @@ -1419,7 +1437,6 @@ def addCKFTracks( writePerformance: bool = True, writeCovMat=False, logLevel: Optional[acts.logging.Level] = None, - whiteboardAliasTracks: str = "tracks", ) -> None: """This function steers the seeding @@ -1522,7 +1539,7 @@ def addCKFTracks( ), ) s.addAlgorithm(trackFinder) - s.addWhiteboardAlias(whiteboardAliasTracks, trackFinder.config.outputTracks) + s.addWhiteboardAlias("tracks", trackFinder.config.outputTracks) matchAlg = acts.examples.TrackTruthMatcher( level=customLogLevel(), @@ -1570,7 +1587,6 @@ def addGx2fTracks( clusters: str = None, calibrator: acts.examples.MeasurementCalibrator = acts.examples.makePassThroughCalibrator(), logLevel: Optional[acts.logging.Level] = None, - whiteboardAliasTracks: str = "tracks", ) -> None: customLogLevel = acts.examples.defaultLogging(s, logLevel) @@ -1597,7 +1613,7 @@ def addGx2fTracks( calibrator=calibrator, ) s.addAlgorithm(fitAlg) - s.addWhiteboardAlias(whiteboardAliasTracks, fitAlg.config.outputTracks) + s.addWhiteboardAlias("tracks", fitAlg.config.outputTracks) matchAlg = acts.examples.TrackTruthMatcher( level=customLogLevel(),