diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 209eba49394..1534307cb49 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -76,6 +76,7 @@ build: -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-w -DCMAKE_CUDA_FLAGS=-w + -DCMAKE_CUDA_ARCHITECTURES="75;86" -DACTS_BUILD_PLUGIN_EXATRKX=ON -DACTS_BUILD_EXAMPLES_EXATRKX=ON -DACTS_BUILD_EXAMPLES_PYTHON_BINDINGS=ON @@ -86,7 +87,7 @@ test: stage: test dependencies: - build - image: ghcr.io/acts-project/ubuntu2004_exatrkx:v22 + image: ghcr.io/acts-project/ubuntu2004_exatrkx:v23 tags: - docker-gpu-nvidia script: diff --git a/CI/physmon/phys_perf_mon.sh b/CI/physmon/phys_perf_mon.sh index 78ad0c955bb..49fd7038e1c 100755 --- a/CI/physmon/phys_perf_mon.sh +++ b/CI/physmon/phys_perf_mon.sh @@ -14,17 +14,6 @@ echo "::group::Generate validation dataset" CI/physmon/physmon.py $outdir 2>&1 > $outdir/run.log echo "::endgroup::" -echo "::group::full_chain_odd" -thirdparty/OpenDataDetector/ci/full_chain_odd.py -o $outdir - -# this will currently produce an error code because of the small amount of particles -build/bin/ActsAnalysisResidualsAndPulls \ - --predicted --filtered --smoothed --silent \ - -i $outdir/trackstates_ckf.root \ - -o $outdir/acts_analysis_residuals_and_pulls.root \ - || true -echo "::endgroup::" - set +e ec=0 diff --git a/CI/physmon/physmon.py b/CI/physmon/physmon.py index 09217f74c0b..84d90565bd4 100755 --- a/CI/physmon/physmon.py +++ b/CI/physmon/physmon.py @@ -5,6 +5,7 @@ import shutil import os import sys +import subprocess sys.path += [ str(Path(__file__).parent.parent.parent / "Examples/Scripts/Python/"), @@ -97,3 +98,22 @@ perf_file = tp / "performance_ckf.root" assert perf_file.exists(), "Performance file not found" shutil.copy(perf_file, outdir / f"performance_ckf_tracks_{label}.root") + + if not truthSmeared and not truthEstimated: + residual_app = srcdir / "build/bin/ActsAnalysisResidualsAndPulls" + # @TODO: Add try/except + subprocess.check_call( + [ + str(residual_app), + "--predicted", + "--filtered", + "--smoothed", + "--silent", + "-i", + str(tp / "trackstates_ckf.root"), + "-o", + str(outdir / "acts_analysis_residuals_and_pulls.root"), + "--save", + "", + ] + ) diff --git a/CI/physmon/reference/acts_analysis_residuals_and_pulls.root b/CI/physmon/reference/acts_analysis_residuals_and_pulls.root index de379996f51..8f76e022f2b 100644 Binary files a/CI/physmon/reference/acts_analysis_residuals_and_pulls.root and b/CI/physmon/reference/acts_analysis_residuals_and_pulls.root differ diff --git a/CMakeLists.txt b/CMakeLists.txt index d58a2d08093..974f327e379 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,9 +114,6 @@ set_option_if(ACTS_BUILD_PLUGIN_LEGACY ACTS_BUILD_EVERYTHING) set_option_if(ACTS_BUILD_PLUGIN_AUTODIFF ACTS_BUILD_EVERYTHING) set_option_if(ACTS_BUILD_EXAMPLES_EXATRKX ACTS_BUILD_PLUGIN_EXATRKX) -# Done with conditional option setting, unset it now -unset(ACTS_BUILD_EVERYTHING CACHE) - # feature tests include(CheckCXXSourceCompiles) @@ -137,7 +134,7 @@ include(ActsCompilerOptions) # default compile options include(ActsComponentsHelpers) # handle components via add_..._if commands include(ActsStaticAnalysis) -# place build products in `/bin` and `/lib` for simple use +# place build products in `/bin` and `/lib` for simple use set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") diff --git a/Core/include/Acts/Definitions/Common.hpp b/Core/include/Acts/Definitions/Common.hpp index bdb61edf170..96e3ade7e41 100644 --- a/Core/include/Acts/Definitions/Common.hpp +++ b/Core/include/Acts/Definitions/Common.hpp @@ -32,7 +32,7 @@ static constexpr ActsScalar s_onSurfaceTolerance = 1e-4; static constexpr ActsScalar s_curvilinearProjTolerance = 0.999995; /// @enum NavigationDirection -/// The navigation direciton is always with +/// The navigation direction is always with /// respect to a given momentum or direction enum class NavigationDirection : int { Backward = -1, Forward = 1 }; diff --git a/Core/include/Acts/Propagator/EigenStepper.hpp b/Core/include/Acts/Propagator/EigenStepper.hpp index abb90ce1a4b..b91aa36645e 100644 --- a/Core/include/Acts/Propagator/EigenStepper.hpp +++ b/Core/include/Acts/Propagator/EigenStepper.hpp @@ -66,7 +66,7 @@ class EigenStepper { /// @param [in] gctx is the context object for the geometry /// @param [in] fieldCacheIn is the cache object for the magnetic field /// @param [in] par The track parameters at start - /// @param [in] ndir The navigation direciton w.r.t momentum + /// @param [in] ndir The navigation direction w.r.t momentum /// @param [in] ssize is the maximum step size /// @param [in] stolerance is the stepping tolerance /// diff --git a/Core/include/Acts/Propagator/MultiEigenStepperLoop.hpp b/Core/include/Acts/Propagator/MultiEigenStepperLoop.hpp index e13adab7187..b30ac589435 100644 --- a/Core/include/Acts/Propagator/MultiEigenStepperLoop.hpp +++ b/Core/include/Acts/Propagator/MultiEigenStepperLoop.hpp @@ -250,7 +250,7 @@ class MultiEigenStepperLoop /// @param [in] mctx is the context object for the magnetic field /// @param [in] bfield the shared magnetic filed provider /// @param [in] multipars The track multi-component track-parameters at start - /// @param [in] ndir The navigation direciton w.r.t momentum + /// @param [in] ndir The navigation direction w.r.t momentum /// @param [in] ssize is the maximum step size /// @param [in] stolerance is the stepping tolerance /// diff --git a/Core/include/Acts/Propagator/StraightLineStepper.hpp b/Core/include/Acts/Propagator/StraightLineStepper.hpp index 8d088f9214d..4b2412b66a3 100644 --- a/Core/include/Acts/Propagator/StraightLineStepper.hpp +++ b/Core/include/Acts/Propagator/StraightLineStepper.hpp @@ -54,7 +54,7 @@ class StraightLineStepper { /// @param [in] gctx is the context object for the geometry /// @param [in] mctx is the context object for the magnetic field /// @param [in] par The track parameters at start - /// @param [in] ndir The navigation direciton w.r.t momentum + /// @param [in] ndir The navigation direction w.r.t momentum /// @param [in] ssize is the maximum step size /// @param [in] stolerance is the stepping tolerance /// diff --git a/Core/include/Acts/TrackFitting/KalmanFitter.hpp b/Core/include/Acts/TrackFitting/KalmanFitter.hpp index 923587423d2..a3062fd1ab4 100644 --- a/Core/include/Acts/TrackFitting/KalmanFitter.hpp +++ b/Core/include/Acts/TrackFitting/KalmanFitter.hpp @@ -477,7 +477,7 @@ class KalmanFitter { return KalmanFitterError::ReverseNavigationFailed; } - // Remember the navigation direciton has been reversed + // Remember the navigation direction has been reversed result.reversed = true; // Reverse navigation direction diff --git a/Examples/Io/Performance/ActsExamples/Io/Performance/CKFPerformanceWriter.hpp b/Examples/Io/Performance/ActsExamples/Io/Performance/CKFPerformanceWriter.hpp index b1b8434e5a8..ebaa0646fb9 100644 --- a/Examples/Io/Performance/ActsExamples/Io/Performance/CKFPerformanceWriter.hpp +++ b/Examples/Io/Performance/ActsExamples/Io/Performance/CKFPerformanceWriter.hpp @@ -27,7 +27,7 @@ namespace ActsExamples { /// track efficiency, fake rate etc. /// @TODO: add duplication plots /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing file /// /// Safe to use from multiple writer threads - uses a std::mutex lock. diff --git a/Examples/Io/Performance/ActsExamples/Io/Performance/TrackFitterPerformanceWriter.hpp b/Examples/Io/Performance/ActsExamples/Io/Performance/TrackFitterPerformanceWriter.hpp index 2aa7ab2ad30..ff3543cdbab 100644 --- a/Examples/Io/Performance/ActsExamples/Io/Performance/TrackFitterPerformanceWriter.hpp +++ b/Examples/Io/Performance/ActsExamples/Io/Performance/TrackFitterPerformanceWriter.hpp @@ -25,7 +25,7 @@ namespace ActsExamples { /// /// Efficiency here is the fraction of smoothed tracks compared to all tracks. /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing file /// /// Safe to use from multiple writer threads - uses a std::mutex lock. diff --git a/Examples/Io/Root/include/ActsExamples/Io/Root/RootMeasurementWriter.hpp b/Examples/Io/Root/include/ActsExamples/Io/Root/RootMeasurementWriter.hpp index cb9f9d9d7dc..c4203d13ffa 100644 --- a/Examples/Io/Root/include/ActsExamples/Io/Root/RootMeasurementWriter.hpp +++ b/Examples/Io/Root/include/ActsExamples/Io/Root/RootMeasurementWriter.hpp @@ -39,7 +39,7 @@ namespace ActsExamples { /// in the root file for optimised data writing speed /// The event number is part of the written data. /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing file /// /// Safe to use from multiple writer threads - uses a std::mutex lock. diff --git a/Examples/Io/Root/include/ActsExamples/Io/Root/RootPlanarClusterWriter.hpp b/Examples/Io/Root/include/ActsExamples/Io/Root/RootPlanarClusterWriter.hpp index 146c138999c..32be5ee0ee0 100644 --- a/Examples/Io/Root/include/ActsExamples/Io/Root/RootPlanarClusterWriter.hpp +++ b/Examples/Io/Root/include/ActsExamples/Io/Root/RootPlanarClusterWriter.hpp @@ -28,7 +28,7 @@ namespace ActsExamples { /// in the root file for optimised data writing speed /// The event number is part of the written data. /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing file /// /// Safe to use from multiple writer threads - uses a std::mutex lock. diff --git a/Examples/Io/Root/include/ActsExamples/Io/Root/RootPropagationStepsWriter.hpp b/Examples/Io/Root/include/ActsExamples/Io/Root/RootPropagationStepsWriter.hpp index 355a2d83549..6d722e9f6a7 100644 --- a/Examples/Io/Root/include/ActsExamples/Io/Root/RootPropagationStepsWriter.hpp +++ b/Examples/Io/Root/include/ActsExamples/Io/Root/RootPropagationStepsWriter.hpp @@ -27,7 +27,7 @@ using PropagationSteps = std::vector; /// data writing speed. /// The event number is part of the written data. /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing file /// /// Safe to use from multiple writer threads - uses a std::mutex lock. diff --git a/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectoryStatesWriter.hpp b/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectoryStatesWriter.hpp index f78e85a6703..56d4831929c 100644 --- a/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectoryStatesWriter.hpp +++ b/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectoryStatesWriter.hpp @@ -30,7 +30,7 @@ namespace ActsExamples { /// Each entry in the TTree corresponds to one trajectory for optimum /// writing speed. The event number is part of the written data. /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing /// file /// diff --git a/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectorySummaryWriter.hpp b/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectorySummaryWriter.hpp index 893335ef3b1..2e737b53afc 100644 --- a/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectorySummaryWriter.hpp +++ b/Examples/Io/Root/include/ActsExamples/Io/Root/RootTrajectorySummaryWriter.hpp @@ -31,7 +31,7 @@ namespace ActsExamples { /// Each entry in the TTree corresponds to all reconstructed trajectories in one /// single event. The event number is part of the written data. /// -/// A common file can be provided for to the writer to attach his TTree, +/// A common file can be provided for the writer to attach his TTree, /// this is done by setting the Config::rootFile pointer to an existing /// file /// diff --git a/Examples/Python/CMakeLists.txt b/Examples/Python/CMakeLists.txt index 1e20296f85f..0775640a6a1 100644 --- a/Examples/Python/CMakeLists.txt +++ b/Examples/Python/CMakeLists.txt @@ -145,10 +145,9 @@ else() endif() add_custom_target(ActsPythonGlueCode) -configure_file(setup.sh.in ${_python_dir}/setup.sh COPYONLY) +configure_file(setup.sh.in ${_python_dir}/setup.sh @ONLY) install(FILES setup.sh.in DESTINATION "python" RENAME setup.sh) - foreach(f ${py_files}) set(_target ${_python_dir}/acts/${f}) get_filename_component(_dir ${_target} DIRECTORY) diff --git a/Examples/Python/python/acts/examples/__init__.py b/Examples/Python/python/acts/examples/__init__.py index f5b8b175748..ca33fd15c17 100644 --- a/Examples/Python/python/acts/examples/__init__.py +++ b/Examples/Python/python/acts/examples/__init__.py @@ -215,7 +215,7 @@ def dump_args_calls( import collections for n in dir(mod): - if n.startswith("_") or n == "Config": + if n.startswith("_") or n == "Config" or n == "Interval": continue f = getattr(mod, n) if not ( diff --git a/Examples/Python/setup.sh.in b/Examples/Python/setup.sh.in index 87af52b1e2c..3f92bc5a627 100644 --- a/Examples/Python/setup.sh.in +++ b/Examples/Python/setup.sh.in @@ -1,3 +1,28 @@ -python_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +# This file is part of the Acts project. +# +# Copyright (C) 2021-2022 CERN for the benefit of the Acts project +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. -export PYTHONPATH=$python_dir:$PYTHONPATH +# This script sets up the ACTS Python bindings in the environment in a somewhat +# robust way. + +if [ -n "$ZSH_VERSION" ]; then + export PYTHONPATH=${0:a:h}:$PYTHONPATH +elif [ -n "$BASH_VERSION" ]; then + python_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + export PYTHONPATH=$python_dir:$PYTHONPATH +else + # If the current shell is not ZSH or Bash, we can't guarantee that the + # script will work, so we throw an error. + echo "ERROR: neither ZSH nor Bash was detected, other shells are not supported. The environment has not been modified." + exit 1 +fi + +# This message might seem excessive, but the Acts bindings are only installed +# for one Python version, and it is not trivial for the user to find out which. +# Thus, we let them know explicitly so they can more easily debug any potential +# import errors. +echo "INFO: Acts Python @Python_VERSION_MAJOR@.@Python_VERSION_MINOR@ bindings setup complete." diff --git a/Examples/Scripts/Benchmarking/CKF_timing_vs_mu.sh b/Examples/Scripts/Benchmarking/CKF_timing_vs_mu.sh index 0a42755edf9..06969bcdfb7 100755 --- a/Examples/Scripts/Benchmarking/CKF_timing_vs_mu.sh +++ b/Examples/Scripts/Benchmarking/CKF_timing_vs_mu.sh @@ -39,7 +39,7 @@ done #check input for DDhep input if [ "${detector}" == DD4hep ]; then if [ -z "${dd4hepInput}" ]; then - echo "Empty input for --dd4hep-input. A file like $/thirdparty/OpenDataDetector/xml/OpenDataDetector.xml must be provided. Have to exit." + echo "Empty input for --dd4hep-input. A file like $/thirdparty/OpenDataDetector/xml/OpenDataDetector.xml must be provided. Have to exit." exit 1 fi if [ ! -f "${dd4hepInput}" ]; then diff --git a/Examples/Scripts/Benchmarking/KF_timing.sh b/Examples/Scripts/Benchmarking/KF_timing.sh index dec6954f85d..d836601f7ea 100644 --- a/Examples/Scripts/Benchmarking/KF_timing.sh +++ b/Examples/Scripts/Benchmarking/KF_timing.sh @@ -42,7 +42,7 @@ done #check input for DDhep input if [ "${detector}" == DD4hep ]; then if [ -z "${dd4hepInput}" ]; then - echo "Empty input for --dd4hep-input. A file like $/Examples/Detectors/DD4hepDetector/compact/OpenDataDetector/OpenDataDetector.xml must be provided. Have to exit" + echo "Empty input for --dd4hep-input. A file like $ 0: found = False @@ -41,7 +41,7 @@ def getOpenDataDetector(mdecorator=None): if not found: msg = ( "Unable to find OpenDataDetector factory library. " - f"You might need to point {'/'.join(env_vars)} at it" + f"You might need to point {'/'.join(env_vars)} to build/thirdparty/OpenDataDetector/factory or other ODD install location" ) raise RuntimeError(msg) diff --git a/Examples/Scripts/Python/full_chain_itk.py b/Examples/Scripts/Python/full_chain_itk.py index ed1f27e4d79..0683ba63fed 100755 --- a/Examples/Scripts/Python/full_chain_itk.py +++ b/Examples/Scripts/Python/full_chain_itk.py @@ -2,9 +2,10 @@ import pathlib, acts, acts.examples, itk u = acts.UnitConstants -geo_dir = pathlib.Path("acts-detector-examples") +geo_dir = pathlib.Path("acts-itk") outputDir = pathlib.Path.cwd() +# acts.examples.dump_args_calls(locals()) detector, trackingGeometry, decorators = itk.buildITkGeometry(geo_dir) field = acts.ConstantBField(acts.Vector3(0.0, 0.0, 2.0 * u.T)) rnd = acts.examples.RandomNumbers(seed=42) @@ -12,8 +13,8 @@ from particle_gun import addParticleGun, MomentumConfig, EtaConfig, ParticleConfig from fatras import addFatras from digitization import addDigitization -from seeding import addSeeding, SeedingAlgorithm, TruthSeedRanges -from ckf_tracks import addCKFTracks +from seeding import addSeeding, TruthSeedRanges +from ckf_tracks import addCKFTracks, CKFPerformanceConfig s = acts.examples.Sequencer(events=100, numThreads=-1) s = addParticleGun( @@ -34,23 +35,26 @@ s, trackingGeometry, field, - digiConfigFile=geo_dir / "atlas/itk-hgtd/itk-smearing-config.json", + digiConfigFile=geo_dir / "itk-hgtd/itk-smearing-config.json", outputDirRoot=outputDir, rnd=rnd, ) +# from seeding import SeedingAlgorithm, ParticleSmearingSigmas s = addSeeding( s, trackingGeometry, field, TruthSeedRanges(pt=(1.0 * u.GeV, None), eta=(-4.0, 4.0), nHits=(9, None)), - geoSelectionConfigFile=geo_dir / "atlas/itk-hgtd/geoSelection-ITk.json", + # SeedingAlgorithm.TruthEstimated, + # SeedingAlgorithm.TruthSmeared, ParticleSmearingSigmas(pRel=0.01), rnd=rnd, + geoSelectionConfigFile=geo_dir / "itk-hgtd/geoSelection-ITk.json", outputDirRoot=outputDir, ) s = addCKFTracks( s, trackingGeometry, field, - TruthSeedRanges(pt=(400.0 * u.MeV, None), nHits=(6, None)), + CKFPerformanceConfig(ptMin=400.0 * u.MeV, nMeasurementsMin=6), outputDirRoot=outputDir, ) diff --git a/Examples/Scripts/Python/full_chain_odd.py b/Examples/Scripts/Python/full_chain_odd.py index af6ec210264..3b4accd9100 100755 --- a/Examples/Scripts/Python/full_chain_odd.py +++ b/Examples/Scripts/Python/full_chain_odd.py @@ -24,7 +24,7 @@ from fatras import addFatras from digitization import addDigitization from seeding import addSeeding, SeedingAlgorithm, TruthSeedRanges -from ckf_tracks import addCKFTracks +from ckf_tracks import addCKFTracks, CKFPerformanceConfig s = acts.examples.Sequencer(events=100, numThreads=-1, logLevel=acts.logging.INFO) @@ -63,7 +63,7 @@ s, trackingGeometry, field, - TruthSeedRanges(pt=(400.0 * u.MeV, None), nHits=(6, None)), + CKFPerformanceConfig(ptMin=400.0 * u.MeV, nMeasurementsMin=6), outputDirRoot=outputDir, ) diff --git a/Examples/Scripts/Python/itk.py b/Examples/Scripts/Python/itk.py index 29b8ef4fdd7..b1a517563a3 100755 --- a/Examples/Scripts/Python/itk.py +++ b/Examples/Scripts/Python/itk.py @@ -105,17 +105,17 @@ def buildITkGeometry( matDeco = None if material: - file = geo_dir / "atlas/itk-hgtd/material-maps-ITk-HGTD.json" + file = geo_dir / "itk-hgtd/material-maps-ITk-HGTD.json" logger.info("Adding material from %s", file.absolute()) matDeco = acts.IMaterialDecorator.fromFile( file, level=acts.logging.Level(min(acts.logging.INFO.value, logLevel.value)), ) - tgeo_fileName = geo_dir / "atlas/itk-hgtd/ATLAS-ITk-HGTD.tgeo.root" + tgeo_fileName = geo_dir / "itk-hgtd/ATLAS-ITk-HGTD.tgeo.root" if jsonconfig: - jsonFile = geo_dir / "atlas/itk-hgtd/tgeo-atlas-itk-hgtd.json" + jsonFile = geo_dir / "itk-hgtd/tgeo-atlas-itk-hgtd.json" logger.info("Create geometry from %s", jsonFile.absolute()) return TGeoDetector.create( jsonFile=str(jsonFile), diff --git a/Examples/Scripts/TrackingPerformance/ResidualsAndPulls.cpp b/Examples/Scripts/TrackingPerformance/ResidualsAndPulls.cpp index 28c930cc025..79609bf26b0 100644 --- a/Examples/Scripts/TrackingPerformance/ResidualsAndPulls.cpp +++ b/Examples/Scripts/TrackingPerformance/ResidualsAndPulls.cpp @@ -47,7 +47,7 @@ int main(int argc, char** argv) { if (vm.count("help")) { std::cout << description; - return 1; + return 0; } // Parse the parameters @@ -68,10 +68,12 @@ int main(int argc, char** argv) { case -1: { std::cout << "*** Input file could not be opened, check name/path." << std::endl; + return -1; } break; case -2: { std::cout << "*** Input tree could not be found, check name." << std::endl; + return -2; } break; default: { std::cout << "*** Successful run." << std::endl; @@ -87,5 +89,5 @@ int main(int argc, char** argv) { } std::cout << "*** Done." << std::endl; - return 1; + return 0; } diff --git a/Fatras/include/ActsFatras/Digitization/PlanarSurfaceDrift.hpp b/Fatras/include/ActsFatras/Digitization/PlanarSurfaceDrift.hpp index 4bc08cfb175..8a12db95970 100644 --- a/Fatras/include/ActsFatras/Digitization/PlanarSurfaceDrift.hpp +++ b/Fatras/include/ActsFatras/Digitization/PlanarSurfaceDrift.hpp @@ -33,7 +33,7 @@ struct PlanarSurfaceDrift { /// @param surface The nominal intersection surface /// @param thickness The emulated module/depletion thickness /// @param pos The position in global coordinates - /// @param dir The direciton in global coordinates + /// @param dir The direction in global coordinates /// @param driftdir The drift direction in local (surface) coordinates /// @note a drift direction of (0,0,0) is drift to central plane /// any other a drift direction with driftDir.z() != 0. @@ -47,4 +47,4 @@ struct PlanarSurfaceDrift { const Acts::Vector3& driftdir) const; }; -} // namespace ActsFatras \ No newline at end of file +} // namespace ActsFatras diff --git a/Plugins/ExaTrkX/README.md b/Plugins/ExaTrkX/README.md index b693318fe8e..29fd68f20e6 100644 --- a/Plugins/ExaTrkX/README.md +++ b/Plugins/ExaTrkX/README.md @@ -7,7 +7,7 @@ This plugin contains a track finding module based on Graph Neural Networks (GNNs To build the plugin, enable the appropriate CMake options: ```cmake -cmake -B -S \ +cmake -B -S \ -D ACTS_BUILD_EXATRKX_PLUGIN=ON \ -D ACTS_BUILD_EXAMPLES_EXATRKX=ON \ -D ACTS_BUILD_EXAMPLES_PYTHON_BINDINGS=ON \ @@ -32,7 +32,7 @@ The Examples of this plugin provide a python-script using the python-bindings to /Examples/Scripts/Python/ExaTrkX.py ``` -In order that python can find the `acts.examples` module, setup your `PYTHONPATH` with `source /python/setup.sh. +In order that python can find the `acts.examples` module, setup your `PYTHONPATH` with `source /python/setup.sh. ## Required files diff --git a/README.md b/README.md index e558fabeb36..62c46c419a3 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,9 @@ following commands will clone the repository, configure, and build the core library ```sh -git clone --recursive https://github.com/acts-project/acts -cmake -B -S -cmake --build +git clone --recursive https://github.com/acts-project/acts +cmake -B -S +cmake --build ``` For more details, e.g. specific versions and additional dependencies, have a diff --git a/Tests/DownstreamProject/CMakeLists.txt b/Tests/DownstreamProject/CMakeLists.txt index 27b1bbf0aa4..9a132d2bd09 100644 --- a/Tests/DownstreamProject/CMakeLists.txt +++ b/Tests/DownstreamProject/CMakeLists.txt @@ -15,7 +15,7 @@ find_package( PluginLegacy PluginTGeo) -# place artifacts in GNU-like paths, e.g. binaries in `/bin` +# place artifacts in GNU-like paths, e.g. binaries in `/bin` include(GNUInstallDirs) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") diff --git a/Tests/DownstreamProjectNodeps/CMakeLists.txt b/Tests/DownstreamProjectNodeps/CMakeLists.txt index 9e99e2f2518..4ac08153d63 100644 --- a/Tests/DownstreamProjectNodeps/CMakeLists.txt +++ b/Tests/DownstreamProjectNodeps/CMakeLists.txt @@ -4,7 +4,7 @@ project(ActsDownstreamProjectNodeps) find_package(Acts CONFIG REQUIRED COMPONENTS Core) -# place artifacts in GNU-like paths, e.g. binaries in `/bin` +# place artifacts in GNU-like paths, e.g. binaries in `/bin` include(GNUInstallDirs) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") diff --git a/docs/conf.py b/docs/conf.py index 697d205aaf2..97f984a782c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,7 +14,7 @@ project = "Acts" author = "The Acts authors" -copyright = "2014–2021 CERN for the benefit of the Acts project" +copyright = "2014–2022 CERN for the benefit of the Acts project" # version = '@PROJECT_VERSION@' # release = '@PROJECT_VERSION@' diff --git a/docs/core/geometry.md b/docs/core/geometry.md index 11320be4fb1..7877c1bbdbb 100644 --- a/docs/core/geometry.md +++ b/docs/core/geometry.md @@ -246,7 +246,7 @@ Very simple helper methods for 3D libraries exist, they are certainly not optimised, but used for templating: * `TGeoDetectorElement` connects a TGeo volume to a `Surface` -* `DD4HepDetectorElement` connects a DD4Hep volume (based on TGeo) to a `Surface` +* `DD4HepDetectorElement` connects a DD4hep volume (based on TGeo) to a `Surface` ## Layer building diff --git a/docs/core/seeding.rst b/docs/core/seeding.rst index 5d8093d58ec..c5804541b60 100644 --- a/docs/core/seeding.rst +++ b/docs/core/seeding.rst @@ -14,7 +14,7 @@ The most typical way to create seeds is to combine measurements. In a homogeneou Acts Implementation ------------------- -The seeding implementation in Core/include/Acts/Seeding/ is based on the ATLAS track seeding. It was rewritten with a focus on parallelism and maintainability and as detector agnostic as possible, only assuming a (near) homogeneous magnetic field with particles originating from the central detector region. Cuts are configurable and can be plugged in as algorithm which is called by the seeding. The seeding works on measurements or “SpacePoints” (SP), which need to provide x,y,z coordinates with the z axis being along the magnetic field, and x and y. The interaction region must be close to :math:`x=y=0`, such that the interaction region has a smaller detector radius :math:`r = \sqrt(x^2+y^2)` than the measurements closest to the interaction region, see also :numref:`3dim`. +The seeding implementation in Core/include/Acts/Seeding/ is based on the ATLAS track seeding. It was rewritten with a focus on parallelism and maintainability and as detector agnostic as possible, only assuming a (near) homogeneous magnetic field with particles originating from the central detector region. Cuts are configurable and can be plugged in as algorithm which is called by the seeding. The seeding works on measurements or “SpacePoints” (SP), which need to provide x,y,z coordinates with the z axis being along the magnetic field, and x and y. The interaction region must be close to :math:`x=y=0`, such that the interaction region has a smaller detector radius :math:`r = \sqrt{x^2+y^2}` than the measurements closest to the interaction region, see also :numref:`3dim`. .. figure:: ../figures/seeding/3Dcoordinates.svg diff --git a/docs/examples/howto/run_alignment.rst b/docs/examples/howto/run_alignment.rst index 57b903053f2..8d4e923e0a3 100644 --- a/docs/examples/howto/run_alignment.rst +++ b/docs/examples/howto/run_alignment.rst @@ -53,4 +53,4 @@ Alignment can be run to estimate the misalignment, which can then be further use --output-dir=data/reco_misalignedTrackML_aligned/single_muon -The ``--reco-with-misalignment-correction`` must be true to turn on the alignment, and the ``--alignment-geo-config-file`` is a jason file to specify which detector objects are to be aligned. Currently, only module level alignment is possible. +The ``--reco-with-misalignment-correction`` must be true to turn on the alignment, and the ``--alignment-geo-config-file`` is a JSON file to specify which detector objects are to be aligned. Currently, only module level alignment is possible. diff --git a/docs/examples/howto/run_ckf_tracking.rst b/docs/examples/howto/run_ckf_tracking.rst index 2cd3fdf4363..4a8c010cf56 100644 --- a/docs/examples/howto/run_ckf_tracking.rst +++ b/docs/examples/howto/run_ckf_tracking.rst @@ -24,8 +24,8 @@ Currently, there are two configurable criteria to select compatible source links * Global maximum number of measurements on a surface. This could be set up via ``--ckf-selection-nmax`` The digitization of the truth hits must also be configured. Since the command-line configuration of this step can get unwieldy, -an example json configuration file for the smearing digitizer is provided with the source code. -The detector volumes and layers used in the space point maker are also configured using another example json file in the source code. +an example JSON configuration file for the smearing digitizer is provided with the source code. +The detector volumes and layers used in the space point maker are also configured using another example JSON file in the source code. .. code-block:: console @@ -50,11 +50,11 @@ This file includes a few efficiency plots showing the CKF efficiency, fake rate, Example plots to show the CKF efficiency, fake rate and duplication rate for the ttbar sample generated above: -.. image:: ../figures/performance/CKF/trackeff_vs_eta_ttbar_pu200.png +.. image:: ../../figures/performance/CKF/trackeff_vs_eta_ttbar_pu200.png :width: 300 -.. image:: ../figures/performance/CKF/fakerate_vs_eta_ttbar_pu200.png +.. image:: ../../figures/performance/CKF/fakerate_vs_eta_ttbar_pu200.png :width: 300 -.. image:: ../figures/performance/CKF/duplicationrate_vs_eta_ttbar_pu200.png +.. image:: ../../figures/performance/CKF/duplicationrate_vs_eta_ttbar_pu200.png :width: 300 diff --git a/docs/examples/howto/run_fatras.rst b/docs/examples/howto/run_fatras.rst index f5c56f0764f..72d9dbde7a8 100644 --- a/docs/examples/howto/run_fatras.rst +++ b/docs/examples/howto/run_fatras.rst @@ -11,7 +11,7 @@ Fatras simulation executables. With this option alone, Fatras can be run for the generic detector using a particle gun or externally generated particle input data. -Additional options might be need enable different generators or detectors. +Additional options might be needed to enable different generators or detectors. The ``ACTS_BUILD_EXAMPLES_PYTHIA8=on`` option enables Pythia8-based event generator excutables. To be able to run e.g. DD4hep-base detectors, the ``ACTS_BUILD_EXAMPLES_DD4hep=on`` option must be set. The full list of diff --git a/docs/examples/howto/run_material_mapping.rst b/docs/examples/howto/run_material_mapping.rst index 5f9f5036faa..856df1e015d 100644 --- a/docs/examples/howto/run_material_mapping.rst +++ b/docs/examples/howto/run_material_mapping.rst @@ -11,23 +11,28 @@ Prerequisites ------------- As a prerequisite you will need to build ACTS with the Examples, Geant4 and the JSON plugin (``ACTS_BUILD_EXAMPLES``, ``ACTS_BUILD_EXAMPLES_GEANT4`` and ``ACTS_BUILD_PLUGIN_JSON``) enabled, please refer to the general how-to ACTS guide. Depending on the type of detector you want to map you will need to use some additional packages, in our case ``ACTS_BUILD_EXAMPLES_DD4HEP`` and ``ACTS_BUILD_PLUGIN_TGEO`` are needed. -For this particular example the ODD will also be need. To use it, don't forget to get the corresponding submodule and the recompile the ACTS code if needed. +For this particular example the ODD will also be needed. To use it, don't forget to get the corresponding submodule and then recompile the ACTS code if needed. .. code-block:: console - git submodule init - git submodule update + $ git submodule init + $ git submodule update -Once Acts has been built we can start the mapping. The mapping is divided in two aspects: the surface mapping in which the material is mapped onto the closest surfaces (following the propagation direction) and the volume mapping in which the material is mapped onto a 3D (or 2D) grid associated to a volume. The first step is to select which surfaces and volumes we will want to map material onto. This is done by association a ``Acts::ProtoSurfaceMaterial`` (or a ``Acts::ProtoVolumeMaterial``) to the surfaces (or volumes) of interest. In the case of the ODD and some other DD4hep detectors this is done at the building step. For other detectors, or if one wants to be able to control precisely which layer will be mapped on and with which binning, an additional step is required. +Once Acts has been built we can start the mapping. The mapping is divided in two aspects: the surface mapping in which the material is mapped onto the closest surfaces (following the propagation direction) and the volume mapping in which the material is mapped onto a 3D (or 2D) grid associated to a volume. The first step is to select which surfaces and volumes we will want to map material onto. This is done by association of an ``Acts::ProtoSurfaceMaterial`` (or an ``Acts::ProtoVolumeMaterial``) with the surfaces (or volumes) of interest. In the case of the ODD and some other DD4hep detectors this is done at the building step. For other detectors, or if one wants to be able to control precisely which layer will be mapped on and with which binning, an additional step is required. Mapping and configuration ------------------------- -First we will need to extract the list of all the surfaces and volumes in our detector, to do so we will use the GeometryExample: +First we need to extract the list of all the surfaces and volumes in our detector, to do so we will use the GeometryExample: .. code-block:: console - ./../build/bin/ActsExampleGeometryDD4hep -n1 -j1 --mat-output-file geometry-map --dd4hep-input ../thirdparty/OpenDataDetector/xml/OpenDataDetector.xml --output-json --mat-output-allmaterial true --mat-output-sensitives false + $ /bin/ActsExampleGeometryDD4hep -n1 -j1 \ + --mat-output-file geometry-map \ + --dd4hep-input /thirdparty/OpenDataDetector/xml/OpenDataDetector.xml \ + --output-json \ + --mat-output-allmaterial true \ + --mat-output-sensitives false This algorithm is useful to obtain a visualisation of your detector using the different types of output available (``output-obj`` gives ``.obj`` with a 3D representation of the different subdetectors, for example). Here, we use ``output-json`` to obtain a map of all the surfaces and volumes in the detector with a ``ProtoSurfaceMaterial`` (or a ``ProtoVolumeMaterial``), ``mat-output-allmaterial`` ensure that a ``ProtoSurfaceMaterial`` (or a ``ProtoVolumeMaterial``) is associated to all the surfaces (or volumes), enforcing all of them to be written. Four types of surfaces exist: @@ -67,13 +72,13 @@ The first one take as an input the surfaces map previously generated and will re .. code-block:: console - python3 ../Examples/Scripts/MaterialMapping/writeMapConfig.py geometry-map.json config-map.json + $ python3 /Examples/Scripts/MaterialMapping/writeMapConfig.py geometry-map.json config-map.json Then edit the config-map.json file .. code-block:: console - python3 ../Examples/Scripts/MaterialMapping/configureMap.py geometry-map.json config-map.json + $ python3 /Examples/Scripts/MaterialMapping/configureMap.py geometry-map.json config-map.json Geantino scan ------------- @@ -82,7 +87,9 @@ The next step is to do a geantino scan of our detector. For this we will use the .. code-block:: console - ./../build/bin/ActsExampleMaterialRecordingDD4hep -j1 --dd4hep-input ../thirdparty/OpenDataDetector/xml/OpenDataDetector.xml --output-root -n10000 + $ /bin/ActsExampleMaterialRecordingDD4hep -n1000 -j1 \ + --dd4hep-input /thirdparty/OpenDataDetector/xml/OpenDataDetector.xml \ + --output-root The result of the geantino scan will be a root file containing material tracks. Those contain the direction and production vertex of the geantino, the total material accumulated and all the interaction points in the detector. @@ -94,33 +101,52 @@ With the surfaces map and the material track we can finally do the material mapp .. code-block:: console - ./../build/bin/ActsExampleMaterialMappingDD4hep -j1 --input-root true --input-files geant4_material_tracks.root --mat-input-type file --mat-input-file geometry-map.json --output-root --output-json --output-cbor --mat-output-file material-maps --mat-mapping-surfaces true --mat-mapping-volumes true --mat-mapping-volume-stepsize 1 --dd4hep-input ../thirdparty/OpenDataDetector/xml/OpenDataDetector.xml - -Note that technically when using DD4Hep (in particular for the ODD) using the option ``--mat-input-type`` is not strictly necessary as the DD4Hep geometry can hold the information of which surface to map onto with which binning. The goal of this how-to being to explain how to make a material map regardless of the detector, we will ignore that option. + $ /bin/ActsExampleMaterialMappingDD4hep -j1 \ + --input-root true \ + --input-files geant4_material_tracks.root \ + --mat-input-type file \ + --mat-input-file geometry-map.json \ + --output-root \ + --output-json \ + --output-cbor \ + --mat-output-file material-maps \ + --mat-mapping-surfaces true \ + --mat-mapping-volumes true \ + --mat-mapping-volume-stepsize 1 \ + --dd4hep-input /thirdparty/OpenDataDetector/xml/OpenDataDetector.xml + +Note that technically when using DD4hep (in particular for the ODD) using the option ``--mat-input-type`` is not strictly necessary as the DD4hep geometry can hold the information of which surface to map onto with which binning. We will ignore this option, since the goal of this guide is to explain how to make a material map regardless of the detector. As an output you will obtain the material map as a root and JSON file and a new material track collection in a root file. This new collection adds to each material interaction the associated surface during the mapping. This can be used for the control plots. -Depending on what you want to do there are three option you can change : +Depending on what you want to do there are three options you can change: - ``mat-mapping-surfaces`` : determine if material is mapped onto surfaces - ``mat-mapping-volumes`` : determine if material is mapped onto volumes - ``mat-mapping-volume-stepsize`` : determine the step size used in the sampling of the volume. This should be small compared to the bin size. -In addition to root and Json output, one can also output the material map to a Cbor file (Concise Binary Object Representation). Doing so result in file of the order of 10 time smaller than the json one, but that are no longer human-readable. This should be done once the map has been optimised and you want to export it. +In addition to root and JSON output, one can also output the material map to a Cbor file (Concise Binary Object Representation). Doing so results in a file about 10 time smaller than the JSON one, but that file is no longer human-readable. This should be done once the map has been optimised and you want to export it. .. note:: - You can map onto surfaces and volumes separately (for example if you want to optimise one then the other). In that case after mapping one of those you will need to use the resulting JSON material map as an input to the ``mat-input-file``. + You can map onto surfaces and volumes separately (for example if you want to optimise first one then the other). In that case after mapping one of those you will need to use the resulting JSON material map as an input to the ``mat-input-file``. Material Validation ------------------- -Now that the map has been written, you will want to validate it. First you can use the ``MaterialValidation`` example. This will perform propagation throughout the detector once it has been decorated with the material map. It will then output material tracks with the same format as the one obtain with the Geantino. +Now that the map has been written, you may want to validate it. First you can use the ``MaterialValidation`` example. This will perform propagation throughout the detector once it has been decorated with the material map. It will then output material tracks with the same format as the one obtain with the Geantino. By default, the Geantino scan is performed with no spread in :math:`z_0` and :math:`d_0`, while the validation has a spread of 55 mm, to obtain meaningful results, use the same spread for both (in our example a spread of 0). Another difference between the scan and the validation is that the first uses a flat distribution in :math:`\theta` while the second uses a flat distribution in :math:`\eta`, so some reweighing might be necessary when comparing some of the distributions. .. code-block:: console - ./../build/bin/ActsExampleMaterialValidationDD4hep -n 1000 --mat-input-type file --mat-input-file material-maps.json --output-root --mat-output-file val-mat-map --dd4hep-input ../thirdparty/OpenDataDetector/xml/OpenDataDetector.xml --prop-z0-sigma 0.0 --prop-d0-sigma 0.0 + $ /bin/ActsExampleMaterialValidationDD4hep -n1000 \ + --mat-input-type file \ + --mat-input-file material-maps.json \ + --output-root \ + --mat-output-file val-mat-map \ + --dd4hep-input /thirdparty/OpenDataDetector/xml/OpenDataDetector.xml \ + --prop-z0-sigma 0.0 \ + --prop-d0-sigma 0.0 To do the validation, five root macros are available in ``scripts/MaterialMapping``: @@ -134,23 +160,21 @@ To do the validation, five root macros are available in ``scripts/MaterialMappin mkdir Validation - root -l -b ../Examples/Scripts/MaterialMapping/Mat_map.C'("propagation-material.root","material-maps_tracks.root","Validation")' + root -l -b /Examples/Scripts/MaterialMapping/Mat_map.C'("propagation-material.root","material-maps_tracks.root","Validation")' .q mkdir Surfaces - cd Surfaces - mkdir prop_plot - mkdir map_plot - mkdir ratio_plot - mkdir dist_plot - mkdir 1D_plot - cd .. - - root -l -b ../Examples/Scripts/MaterialMapping/Mat_map_surface_plot_ratio.C'("propagation-material.root","material-maps_tracks.root","geometry-map.json",100000,"Surfaces/ratio_plot","Surfaces/prop_plot","Surfaces/map_plot")' + mkdir Surfaces/prop_plot + mkdir Surfaces/map_plot + mkdir Surfaces/ratio_plot + mkdir Surfaces/dist_plot + mkdir Surfaces/1D_plot + + root -l -b /Examples/Scripts/MaterialMapping/Mat_map_surface_plot_ratio.C'("propagation-material.root","material-maps_tracks.root","geometry-map.json",100000,"Surfaces/ratio_plot","Surfaces/prop_plot","Surfaces/map_plot")' .q - root -l -b ../Examples/Scripts/MaterialMapping/Mat_map_surface_plot_dist.C'("material-maps_tracks.root","geometry-map.json",-1,"Surfaces/dist_plot")' + root -l -b /Examples/Scripts/MaterialMapping/Mat_map_surface_plot_dist.C'("material-maps_tracks.root","geometry-map.json",-1,"Surfaces/dist_plot")' .q - root -l -b ../Examples/Scripts/MaterialMapping/Mat_map_surface_plot_1D.C'("material-maps_tracks.root","geometry-map.json",100000,"Surfaces/1D_plot")' + root -l -b /Examples/Scripts/MaterialMapping/Mat_map_surface_plot_1D.C'("material-maps_tracks.root","geometry-map.json",100000,"Surfaces/1D_plot")' .q Using the validation plots you can then adapt the binning and the mapped surface to improve the mapping. @@ -159,7 +183,7 @@ On top of those plots : .. code-block:: console - root -l -b ../Examples/Scripts/MaterialMapping/Mat_map_detector_plot_ratio.C'("propagation-material.root","material-maps_tracks.root",{X,Y,Z},100000,"Det_ratio","Det_Acts","Det_G4")' + root -l -b /Examples/Scripts/MaterialMapping/Mat_map_detector_plot_ratio.C'("propagation-material.root","material-maps_tracks.root",{X,Y,Z},100000,"Det_ratio","Det_Acts","Det_G4")' .q Can be use with X,Y,Z is a list of volumes, this will plot the material ratio between the map and the Geantino scan for the given volumes. diff --git a/docs/examples/howto/run_seeding.rst b/docs/examples/howto/run_seeding.rst index a19f22f033e..7b5aa6fdb2d 100644 --- a/docs/examples/howto/run_seeding.rst +++ b/docs/examples/howto/run_seeding.rst @@ -63,10 +63,10 @@ The example also generates output root files in the output directory. In ``performance_seeding_hists.root``, you can find the efficiency plots. The plots below are examples of the efficiency plots produced using the ttbar sample with 200 pile-up vertices. -.. image:: ../figures/performance/seeding/seeding_eff_vs_pt.png +.. image:: ../../figures/performance/seeding/seeding_eff_vs_pt.png :width: 300 -.. image:: ../figures/performance/seeding/seeding_eff_vs_eta.png +.. image:: ../../figures/performance/seeding/seeding_eff_vs_eta.png :width: 300 diff --git a/docs/examples/howto/run_truth_tracking.rst b/docs/examples/howto/run_truth_tracking.rst index deb13c565d0..cdbcb62fc65 100644 --- a/docs/examples/howto/run_truth_tracking.rst +++ b/docs/examples/howto/run_truth_tracking.rst @@ -40,29 +40,29 @@ The truth tracking will generate three root files (the name of those root files Example plots to show the fitting efficiency versus eta and pT for ttbar sample generated above: -.. image:: ../figures/performance/fitter/trackeff_vs_eta_ttbar_pu200.png +.. image:: ../../figures/performance/fitter/trackeff_vs_eta_ttbar_pu200.png :width: 300 -.. image:: ../figures/performance/fitter/trackeff_vs_pT_ttbar_pu200.png +.. image:: ../../figures/performance/fitter/trackeff_vs_pT_ttbar_pu200.png :width: 300 Example plots to show the average number of measurments and holes versus eta for ttbar sample generated above: -.. image:: ../figures/performance/fitter/nMeasurements_vs_eta_ttbar_pu200.png +.. image:: ../../figures/performance/fitter/nMeasurements_vs_eta_ttbar_pu200.png :width: 300 -.. image:: ../figures/performance/fitter/nHoles_vs_eta_ttbar_pu200.png +.. image:: ../../figures/performance/fitter/nHoles_vs_eta_ttbar_pu200.png :width: 300 To draw the resolution (residual and pull) of fitted perigee track parameters for e.g. ttbar sample, one could use: .. code-block:: console - $ root /Examples/Scripts/perigeeParamResolution.C("rec_ttbar_pu200/performance_track_fitter.root")' + $ root /Examples/Scripts/perigeeParamResolution.C'("rec_ttbar_pu200/performance_track_fitter.root")' ```` here is used to identify the path of the source directory. An example plot of the pull distribution of fitted perigee track parameters for the ttbar sample generated above: -.. image:: ../figures/performance/fitter/pull_perigee_parameters_ttbar_pu200.png +.. image:: ../../figures/performance/fitter/pull_perigee_parameters_ttbar_pu200.png :width: 600 diff --git a/docs/getting_started.md b/docs/getting_started.md index 0b56a594d63..aaa6276430e 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -9,9 +9,9 @@ following commands will clone the repository, configure, and build the core library: ```console -$ git clone --recursive https://github.com/acts-project/acts -$ cmake -B -S -$ cmake --build +$ git clone --recursive https://github.com/acts-project/acts +$ cmake -B -S +$ cmake --build ``` For a full list of dependencies, including specific versions, see the @@ -32,13 +32,13 @@ The following dependencies are optional and are needed to build additional components: - [CUDA](https://developer.nvidia.com/cuda-zone) for the CUDA plugin and the Exa.TrkX plugin and its examples -- [DD4Hep](http://dd4hep.cern.ch) >= 1.11 for the DD4Hep plugin and some examples +- [DD4hep](http://dd4hep.cern.ch) >= 1.11 for the DD4hep plugin and some examples - [Doxygen](http://doxygen.org) >= 1.8.15 for the documentation - [Geant4](http://geant4.org/) for some examples - [HepMC](https://gitlab.cern.ch/hepmc/HepMC3) >= 3.2.1 for some examples - [Intel Threading Building Blocks](https://01.org/tbb) >= 2020.1 for the examples - [ONNX Runtime](https://onnxruntime.ai/) for the ONNX plugin, the Exa.TrkX plugin and some examples -- [Pythia8](http://home.thep.lu.se/~torbjorn/Pythia.html) for some examples +- [Pythia8](https://pythia.org) for some examples - [ROOT](https://root.cern.ch) >= 6.20 for the TGeo plugin and the examples - [Sphinx](https://www.sphinx-doc.org) >= 2.0 with [Breathe](https://breathe.readthedocs.io/en/latest/), [Exhale](https://exhale.readthedocs.io/en/latest/), and [recommonmark](https://recommonmark.readthedocs.io/en/latest/index.html) extensions for the documentation - [SYCL](https://www.khronos.org/sycl/) for the SYCL plugin @@ -191,7 +191,7 @@ package manager. [Sphinx][sphinx] and its extensions can be installed using the Python package manager via ```console -$ cd +$ cd # --user installs to a user-specific directory instead of the system $ pip install --user -r docs/requirements.txt ``` @@ -199,16 +199,16 @@ $ pip install --user -r docs/requirements.txt To activate the documentation build targets, the `ACTS_BUILD_DOCS` option has to be set ```console -$ cmake -B -S -DACTS_BUILD_DOCS=on +$ cmake -B -S -DACTS_BUILD_DOCS=on ``` Then the documentation can be build with either of the following two build targets ```console -$ cmake --build docs # default fast option +$ cmake --build --target docs # default fast option # or -$ cmake --build docs-with-api # full documentation +$ cmake --build --target docs-with-api # full documentation ``` The default option includes the Doxygen, Sphinx, and the Breathe extension, i.e. @@ -230,7 +230,7 @@ CMake options can be set by adding `-D