Skip to content

Commit 3b6797a

Browse files
committed
Merge remote-tracking branch 'acts-project/main' into 240916-trackjets
2 parents f8f6494 + f2bd863 commit 3b6797a

File tree

419 files changed

+5119
-12062
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

419 files changed

+5119
-12062
lines changed

.clang-format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ IncludeCategories:
2727
- Regex: '^<.*>'
2828
Priority: 3
2929
# all headers not explicitly listed will be assigned to the last group
30+
IncludeIsMainSourceRegex: '(\.cpp)|(\.ipp)$'

.github/actions/dependencies/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ inputs:
1313
spack_version:
1414
description: 'Version of Spack to use'
1515
required: false
16-
default: 'develop-2025-04-20'
16+
default: 'develop-2025-06-08'
1717

1818
runs:
1919
using: 'composite'

.github/workflows/analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ env:
2222
CCACHE_MAXSIZE: 1.25G
2323
CCACHE_KEY_SUFFIX: r2
2424
ACTS_LOG_FAILURE_THRESHOLD: WARNING
25-
DEPENDENCY_TAG: v9.0.0
25+
DEPENDENCY_TAG: v11.1.0
2626

2727
# NOTE this only builds core unittests to reduce the output size. if we
2828
# found a way to have Github actions not fail regularly with this job

.github/workflows/builds.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ env:
2020
CCACHE_DIR: ${{ github.workspace }}/ccache
2121
CCACHE_MAXSIZE: 500M
2222
CCACHE_KEY_SUFFIX: r2
23-
DEPENDENCY_TAG: v9.0.0
23+
DEPENDENCY_TAG: v11.1.0
2424

2525
jobs:
2626
linux_ubuntu:
@@ -339,7 +339,7 @@ jobs:
339339
run: ./build-downstream/bin/ShowActsVersion
340340

341341
macos:
342-
runs-on: macos-14
342+
runs-on: macos-15
343343
env:
344344
INSTALL_DIR: ${{ github.workspace }}/install_acts
345345
ACTS_LOG_FAILURE_THRESHOLD: WARNING
@@ -350,6 +350,11 @@ jobs:
350350
submodules: true
351351
lfs: true
352352

353+
- name: Setup Xcode version
354+
uses: maxim-lobanov/setup-xcode@v1
355+
with:
356+
xcode-version: "16.3.0"
357+
353358
- name: Install dependencies
354359
uses: ./.github/actions/dependencies
355360
with:

.gitlab-ci.yml

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ variables:
44
CCACHE_KEY_SUFFIX: r2
55
CTEST_OUTPUT_ON_FAILURE: 1
66

7-
SPACK_VERSION: develop-2025-04-20
7+
SPACK_VERSION: develop-2025-06-08
88
LOCKFILE_CACHE_DIR: ${CI_PROJECT_DIR}/spack_lockfile_cache
99

10-
DEPENDENCY_TAG: v9.0.0
10+
DEPENDENCY_TAG: v11.1.0
1111

1212
.ccache_base:
1313
cache:
@@ -155,14 +155,6 @@ build_exatrkx:
155155
expire_in: 6 hours
156156

157157
script:
158-
# For now, we need to build boost to get the dependencies for the libraries
159-
- curl --silent https://archives.boost.io/release/1.87.0/source/boost_1_87_0.tar.bz2 --output boost_1_87_0.tar.bz2
160-
- tar --bzip2 -xf boost_1_87_0.tar.bz2
161-
- cd boost_1_87_0
162-
- ./bootstrap.sh --prefix=${CI_PROJECT_DIR}/boost-install --with-libraries=regex,graph,program_options,test
163-
- ./b2 install
164-
- cd ..
165-
- rm -rf boost_1_87_0*
166158
- export PATH=/usr/local/sbin:/usr/sbin:/sbin:$PATH
167159
- export PATH=/usr/local/nvidia/bin:/usr/local/cuda/bin:$PATH
168160
- echo $PATH
@@ -177,7 +169,6 @@ build_exatrkx:
177169
- >
178170
cmake -B build -S src
179171
--preset=gitlab-ci-exatrkx
180-
-DBoost_DIR=${CI_PROJECT_DIR}/boost-install/lib/cmake/Boost-1.87.0
181172
182173
- ccache -z
183174
- cmake --build build -- -j6
@@ -545,18 +536,6 @@ linux_ubuntu_2404_clang19:
545536
- ctest --test-dir build -j$(nproc)
546537

547538

548-
lcg_105:
549-
extends: .lcg_base_job
550-
551-
variables:
552-
LCG_VERSION: "105"
553-
554-
parallel:
555-
matrix:
556-
- OS: [alma9]
557-
COMPILER:
558-
- gcc13
559-
- clang16
560539

561540
lcg_106a:
562541
extends: .lcg_base_job

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ repos:
6363
name: pragma_once
6464
language: system
6565
entry: CI/check_pragma_once.sh
66-
files: \.hpp$
66+
files: \.(hpp|ipp)$
6767

6868
- repo: local
6969
hooks:

Alignment/include/ActsAlignment/Kernel/Alignment.ipp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
// License, v. 2.0. If a copy of the MPL was not distributed with this
77
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
88

9+
#pragma once
10+
11+
#include "ActsAlignment/Kernel/Alignment.hpp"
12+
913
#include "Acts/EventData/VectorMultiTrajectory.hpp"
1014
#include "Acts/EventData/VectorTrackContainer.hpp"
1115

CI/check_pragma_once.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ec=0
55
files="$@"
66

77
if [ -z "$files" ]; then
8-
files=$(find Core Examples Tests Plugins -name "*.hpp")
8+
files=$(find Core Examples Tests Plugins -name "*.hpp" -o -name "*.ipp")
99
fi
1010

1111
for file in $files; do

CI/dependencies/select_lockfile.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,42 @@
1010
import hashlib
1111
import tempfile
1212
from pathlib import Path
13-
from typing import Tuple, Dict, Optional
13+
from typing import Tuple, Dict, Optional, Callable, TypeVar, Any
1414
import contextlib
15+
import time
16+
import functools
17+
from contextvars import ContextVar
1518

1619
# Modify the default cache dir to use a temporary directory
1720
DEFAULT_CACHE_SIZE_LIMIT = 1 * 1024 * 1024 # 1MB
1821

22+
T = TypeVar("T")
23+
remaining_retries: ContextVar[int] = ContextVar("remaining_retries", default=0)
24+
25+
26+
def retry_on_http_error(max_retries: int = 3, base_delay: float = 1.0):
27+
def decorator(func: Callable[..., T]) -> Callable[..., T]:
28+
@functools.wraps(func)
29+
def wrapper(*args: Any, **kwargs: Any) -> T:
30+
for attempt in range(max_retries):
31+
remaining_retries.set(max_retries - attempt - 1)
32+
try:
33+
return func(*args, **kwargs)
34+
except urllib.error.HTTPError as e:
35+
if attempt < max_retries - 1:
36+
delay = base_delay * (2**attempt)
37+
print(
38+
f"Got HTTP error {e.code}, retrying in {delay} seconds..."
39+
)
40+
time.sleep(delay)
41+
continue
42+
raise
43+
return func(*args, **kwargs) # Final attempt
44+
45+
return wrapper
46+
47+
return decorator
48+
1949

2050
def compute_cache_key(url: str) -> str:
2151
"""Compute a cache key for a URL"""
@@ -76,11 +106,17 @@ def prune_cache(cache_dir: Optional[Path], size_limit: int):
76106
update_cache_digest(cache_dir)
77107

78108

109+
@retry_on_http_error()
79110
def fetch_github(base_url: str, cache_dir: Optional[Path], cache_limit: int) -> bytes:
80111
headers = {}
81112
token = os.environ.get("GITHUB_TOKEN")
82-
if token is not None and token != "":
83-
headers["Authorization"] = f"token {token}"
113+
114+
# Only add auth header if we have retries left
115+
if token is not None and token != "" and remaining_retries.get() > 0:
116+
headers["Authorization"] = f"Bearer {token}"
117+
118+
print(f"Remaining retries: {remaining_retries.get()} for {base_url}")
119+
print(headers)
84120

85121
with contextlib.ExitStack() as stack:
86122
if cache_dir is not None:

CI/dependencies/setup.sh

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,7 @@ time spack -e "${env_dir}" find
188188
end_section
189189

190190
start_section "Install spack packages"
191-
NCPUS=4 # set fixes low-ish number to avoid deadlocks
192-
time "${SCRIPT_DIR}"/parallel.sh "$NCPUS" spack -e "${env_dir}" install --fail-fast --use-buildcache only \
193-
| tee install.log \
194-
| grep -v "^Waiting\|^\[+\]"
191+
time spack -e "${env_dir}" install --fail-fast --use-buildcache only --concurrent-packages 10
195192
end_section
196193

197194
start_section "Patch up Geant4 data directory"

CI/fix_pragma.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/usr/bin/env python3
2+
23
import argparse
34
import os
45
from glob import glob
@@ -37,15 +38,13 @@ def main():
3738
if os.path.isfile(args.input):
3839
headers = [args.input]
3940
elif os.path.isdir(args.input):
40-
patterns = ["**/*.hpp", "**/*.h"]
41+
patterns = ["**/*.hpp", "**/*.ipp"]
4142
headers = sum(
4243
[glob(os.path.join(args.input, p), recursive=True) for p in patterns], []
4344
)
4445
else:
4546
headers = glob(args.input, recursive=True)
4647

47-
# for h in headers: print(h)
48-
4948
for h in headers:
5049
fix_pragma(h)
5150

CI/missing_include_check.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
RET=0
44
ERRORS=0
55

6-
FILES=$(find Core/include/ -name "*.hpp" | grep -v "/detail/")
6+
FILES=$(find Core/include/ -type f -name "*.hpp" -o -name "*.ipp")
77
N_FILES=$(echo "$FILES" | wc -l)
88
echo "Check $N_FILES files"
99

1010
ITER=0
1111

12-
for file in $(find Core/include/ -name "*.hpp" | grep -v "/detail/"); do
12+
for file in $FILES; do
1313
ITER=$((ITER+1))
1414
echo "$(date +%H:%M:%S) $((100*ITER/N_FILES))% check $file"
1515
out=$(printf "#include <${file:13}>\nint main() { return 0; }" | clang++ -std=c++20 -O0 -c -I "Core/include" -I "/usr/include/eigen3" -x c++ - 2>&1)

CMakeLists.txt

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ option(ACTS_USE_SYSTEM_MODULEMAPGRAPH "Use a system installation of ModuleMapGra
7676
option(ACTS_USE_SYSTEM_EIGEN3 "Use a system-provided eigen3" ON)
7777

7878
option(ACTS_BUILD_PLUGIN_ACTSVG "Build SVG display plugin" OFF)
79-
option(ACTS_BUILD_PLUGIN_CUDA "Build CUDA plugin" OFF)
8079
option(ACTS_BUILD_PLUGIN_DD4HEP "Build DD4hep plugin" OFF)
8180
option(ACTS_BUILD_PLUGIN_PODIO "Build Podio plugin" OFF)
8281
option(ACTS_BUILD_PLUGIN_EDM4HEP "Build EDM4hep plugin" OFF)
@@ -92,9 +91,8 @@ option(ACTS_EXATRKX_ENABLE_CUDA "Enable CUDA for the exatrkx plugin" OFF)
9291
option(ACTS_EXATRKX_ENABLE_MODULEMAP "Enable Module-Map-based graph construction" OFF)
9392
option(ACTS_EXATRKX_ENABLE_TENSORRT "Enable the native TensorRT inference modules" OFF)
9493
option(ACTS_BUILD_PLUGIN_JSON "Build json plugin" OFF)
95-
option(ACTS_BUILD_PLUGIN_LEGACY "Build legacy plugin" OFF)
9694
option(ACTS_BUILD_PLUGIN_ONNX "Build ONNX plugin" OFF)
97-
option(ACTS_BUILD_PLUGIN_TGEO "Build TGeo plugin" OFF)
95+
option(ACTS_BUILD_PLUGIN_ROOT "Build ROOT plugin" OFF)
9896
option(ACTS_SETUP_ANNOY "Explicitly set up Annoy for the project" OFF)
9997
option(ACTS_BUILD_PLUGIN_HASHING "Build Hashing plugin" OFF)
10098
# fatras related options
@@ -166,7 +164,7 @@ set_option_if(
166164
ACTS_BUILD_EXAMPLES_EDM4HEP
167165
)
168166
set_option_if(
169-
ACTS_BUILD_PLUGIN_PODIO
167+
ACTS_BUILD_EXAMPLES_PODIO
170168
ACTS_BUILD_EXAMPLES_EDM4HEP
171169
)
172170
set_option_if(
@@ -178,13 +176,13 @@ set_option_if(
178176
ACTS_BUILD_EXAMPLES_GEANT4
179177
)
180178
set_option_if(
181-
ACTS_BUILD_PLUGIN_TGEO
179+
ACTS_BUILD_PLUGIN_ROOT
182180
ACTS_BUILD_PLUGIN_DD4HEP OR
183181
ACTS_BUILD_EXAMPLES
184182
)
185183
set_option_if(
186184
ACTS_BUILD_PLUGIN_IDENTIFICATION
187-
ACTS_BUILD_PLUGIN_TGEO OR
185+
ACTS_BUILD_PLUGIN_ROOT OR
188186
ACTS_BUILD_PLUGIN_PODIO OR
189187
ACTS_BUILD_EXAMPLES
190188
)
@@ -270,27 +268,29 @@ endif()
270268
# they can be easily upgraded, although they might not be used if the
271269
# dependency is included via `add_subdirectory(...)`.
272270
set(_acts_actsvg_version 0.4.56)
273-
set(_acts_boost_version 1.71.0)
274-
set(_acts_dd4hep_version 1.21)
271+
set(_acts_boost_version 1.77.0) # first version with C++20 support
272+
set(_acts_dd4hep_version 1.26)
275273
set(_acts_geant4_version 11.1.3)
276-
set(_acts_edm4hep_version 0.7)
274+
set(_acts_edm4hep_version 0.10.5)
277275
set(_acts_eigen3_version 3.4.0)
278276
set(_acts_podio_version 1.0.1) # will try this first
279-
set(_acts_podio_fallback_version 0.16) # if not found, will try this one
277+
set(_acts_podio_fallback_version 0.17.4) # if not found, will try this one
280278
set(_acts_doxygen_version 1.9.4)
281-
set(_acts_hepmc3_version 3.2.1)
279+
set(_acts_hepmc3_version 3.2.4)
282280
set(_acts_nlohmanjson_version 3.10.5)
283281
set(_acts_onnxruntime_version 1.12.0)
284-
set(_acts_root_version 6.20)
282+
set(_acts_geomodel_version 6.3.0)
283+
set(_acts_root_version 6.28.04) # first version with C++20 support
285284
set(_acts_tbb_version 2020.1)
286-
set(_acts_pythia8_version 8.309)
285+
set(_acts_pythia8_version 8.310)
287286
set(_acts_pybind11_version 2.13.1)
288-
set(_acts_detray_version 0.89.0)
289-
set(_acts_traccc_version 0.20.0)
290-
set(_acts_covfie_version 0.12.1)
291-
set(_acts_vecmem_version 1.14.0)
292-
set(_acts_algebraplugins_version 0.26.2)
287+
set(_acts_detray_version 0.98.0)
288+
set(_acts_traccc_version 0.22.0)
289+
set(_acts_covfie_version 0.13.0)
290+
set(_acts_vecmem_version 1.17.0)
291+
set(_acts_algebraplugins_version 0.27.0)
293292
set(_acts_annoy_version 1.17.3)
293+
set(_acts_fastjet_version 3.4.1)
294294

295295
# recommended dependency version. if there is an opportunity to reach
296296
# this version we will try so.
@@ -383,9 +383,6 @@ if(ACTS_BUILD_PLUGIN_ACTSVG)
383383
add_subdirectory(thirdparty/actsvg)
384384
endif()
385385
endif()
386-
if(ACTS_BUILD_PLUGIN_CUDA)
387-
enable_cuda()
388-
endif()
389386
if(ACTS_BUILD_PLUGIN_DD4HEP)
390387
# Explicitly find python so we can more easily override the version
391388
find_package(Python 3.8 REQUIRED COMPONENTS Interpreter Development)
@@ -405,7 +402,6 @@ if(ACTS_BUILD_PLUGIN_JSON)
405402
endif()
406403
endif()
407404
if(ACTS_BUILD_PLUGIN_FASTJET)
408-
set(_acts_fastjet_version 3.4.0)
409405
find_package(FastJet ${_acts_fastjet_version} REQUIRED)
410406
endif()
411407
if(ACTS_BUILD_PLUGIN_GEOMODEL)
@@ -417,18 +413,16 @@ if(ACTS_BUILD_PLUGIN_GEOMODEL)
417413
)
418414
endif()
419415

420-
set(_gm_ver_min 6.3.0)
421-
422-
if(GeoModelCore_VERSION VERSION_LESS _gm_ver_min)
416+
if(GeoModelCore_VERSION VERSION_LESS _acts_geomodel_version)
423417
message(
424418
FATAL_ERROR
425-
"GeoModel version ${GeoModelCore_VERSION} is insufficient. Please install GeoModel version ${_gm_ver_min} or newer."
419+
"GeoModel version ${GeoModelCore_VERSION} is insufficient. Please install GeoModel version ${_acts_geomodel_version} or newer."
426420
)
427421
endif()
428422
# find other GeoModel components of EXACT same version
429423
find_package(GeoModelIO ${GeoModelCore_VERSION} REQUIRED EXACT CONFIG)
430424
endif()
431-
if(ACTS_BUILD_PLUGIN_TGEO)
425+
if(ACTS_BUILD_PLUGIN_ROOT)
432426
find_package(
433427
ROOT
434428
${_acts_root_version}
@@ -449,15 +443,17 @@ if(ACTS_BUILD_ANALYSIS_APPS)
449443
check_root_compatibility()
450444
endif()
451445
if(ACTS_BUILD_PLUGIN_EXATRKX)
452-
find_package(Torch REQUIRED)
453446
if(ACTS_EXATRKX_ENABLE_CUDA)
454447
find_package(CUDAToolkit REQUIRED)
455448
enable_cuda()
456-
add_subdirectory(thirdparty/FRNN)
457449
message(STATUS "Build Exa.TrkX plugin with CUDA")
458450
else()
459451
message(STATUS "Build Exa.TrkX plugin for CPU only")
460452
endif()
453+
if(ACTS_EXATRKX_ENABLE_TORCH)
454+
find_package(Torch REQUIRED)
455+
add_subdirectory(thirdparty/FRNN)
456+
endif()
461457
if(ACTS_EXATRKX_ENABLE_MODULEMAP)
462458
if(ACTS_USE_SYSTEM_MODULEMAPGRAPH)
463459
find_package(ModuleMapGraph REQUIRED COMPONENTS CPU GPU)

0 commit comments

Comments
 (0)