Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
8fd9596
GPUCommonDefAPI: add GPUhdnii(), host and device, inlined on the host…
Nov 5, 2026
4369e0e
MFT: o2-mft-track-writer-workflow, the track writer on its own as ITS…
Nov 5, 2026
07f5767
GenericTracking: the generic tracking, its workflow, study and tools
Nov 5, 2026
90f38bb
GPU: GPUTrackingCUDA/HIP link GenericTracking's device tracker
Nov 5, 2026
2297110
GenericTracking: the ITS and MFT tracking inside the GPU reconstructi…
Nov 7, 2026
c98133b
GPU: RecoStep GenericTracking, the device pool's free memory, the sel…
Nov 7, 2026
afb017e
GPU Workflow: GenericTracking's ITS and MFT tracking after the TPC's …
Nov 7, 2026
7c811a2
GenericTracking: GTRKReco<DET>.beamZReachNSigma, the beam z range the…
Nov 7, 2026
0112bb6
GenericTracking: o2-gtrk-track-bench --vertices-only, the vertexing p…
Nov 7, 2026
2101f9e
GenericTracking: the vertex QA's missed collisions, where their tripl…
Nov 7, 2026
50eac9a
GenericTracking: the step anatomy's window audit of the outward stops…
Nov 7, 2026
13fab8b
GenericTracking: the follow's window centred about the beam line, as …
Nov 7, 2026
664b6f3
GenericTracking: one pool for the vertexer and the tracker; the bench…
Nov 7, 2026
563d3f3
GenericTracking: the bench's breakdown of the decay daughters, and th…
Nov 8, 2026
2bd3954
GenericTracking: one population for the bench's studies, one score an…
Nov 8, 2026
79c1b40
GenericTracking: the bench's checkpoints with the own vertexer
Nov 8, 2026
3c2ed48
GenericTracking: the bench refuses --save-state with --vertices-only;…
Nov 8, 2026
8db65ad
GenericTracking: the tracklets by the flat run on every backend
Nov 8, 2026
845334d
GenericTracking: the flat fill skips a source without candidates
Nov 8, 2026
9735af6
GenericTracking: the vertexer reruns a frame without a vertex at a lo…
Nov 8, 2026
23acba6
GenericTracking: the ITS output files each vertex under its own reado…
Nov 8, 2026
a6aabb8
GenericTracking: the tracklets' flat fill by lanes in step, their cou…
Nov 8, 2026
30a09d0
GenericTracking: the device keeps a FlatObject's host image between u…
Nov 8, 2026
a6a15dd
GenericTracking: a FlatObject's kept host image page-locked for its u…
Nov 8, 2026
39cee6f
GenericTracking: a flat run's and a staged run's words in one block e…
Nov 8, 2026
017a81a
GenericTracking: device column copies and chunk gathers by one kernel…
Nov 8, 2026
d10899f
GenericTracking: the path bounds' forward and reverse sweeps, which s…
Nov 8, 2026
fb629e7
GenericTracking: the tracklets' sort applied by one gather of every c…
Nov 8, 2026
9488330
GenericTracking: copyEachOnDevice's unit from the addresses alone, th…
Nov 8, 2026
92f375e
GenericTracking: the triplets on a path emitted at their scanned offs…
Nov 8, 2026
5ac0341
Revert "GenericTracking: the triplets on a path emitted at their scan…
Nov 8, 2026
5a43214
GenericTracking: the device tracker's boundary waits that a sync alre…
Nov 8, 2026
5274933
GenericTracking: formatted with O2's clang-format configuration
Nov 9, 2026
6228cb9
fixup! GPU Workflow: GenericTracking's ITS and MFT tracking after the…
Nov 9, 2026
77b7da4
GenericTracking: its clang-tidy configuration, and the code clean und…
Nov 9, 2026
0374540
[ALICE3] VD: fixed digitization for the kIRIS4a and kIRISFullCyl geom…
atriolo Nov 7, 2026
9d6f193
ITSMFT: fix MC labels for single pixel clusters in the labels
mpuccio Nov 10, 2026
b9e9edd
GenericTracking: Fix compilation for VD
mpuccio Nov 9, 2026
6401e39
GenericTracking: support staggered ITS and MFT cluster streams
mpuccio Nov 10, 2026
a785569
GenericTracking: publish ITS vertex MC truth
mpuccio Nov 10, 2026
ca5e27a
ITS: apply vertex multiplicity cuts to ROF masks
mpuccio Nov 10, 2026
eec3fca
GenericTracking: apply ITS ROF and multiplicity selection
mpuccio Nov 10, 2026
8fd95bd
GenericTracking: record generated-momentum QA for matched tracks
mpuccio Nov 11, 2026
841ff36
GenericTracking: compare native momentum QA and record full-length co…
mpuccio Nov 11, 2026
a5fdc56
GenericTracking: check material against aligned simulation geometry
mpuccio Nov 11, 2026
7c06f0d
GenericTracking: add independent references to track fitting
mpuccio Nov 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
137 changes: 137 additions & 0 deletions Detectors/GenericTracking/.clang-tidy
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
---
# GenericTracking: a generic, GPU-capable CA track finder.
#
# Three properties of this code shape the disabled list below.
#
# 1. Parts of it compile as device code. std::array, std::span, exceptions
# and RTTI are unavailable there, so the checks that push C arrays and
# pointer arithmetic towards those replacements are actively wrong.
#
# 2. It is detector software. Short identifiers are the domain's notation --
# x, y, z, r, phi, eta, pt, bz -- and spelling them out makes formulas
# harder to check, not easier.
#
# 3. It interoperates with ROOT and O2. Generated dictionary code and
# macro expansions are not ours to fix.

Checks:
- -*
- bugprone-*
- performance-*
- modernize-*
- portability-*
- cppcoreguidelines-*
- misc-*
- readability-*
- clang-analyzer-*

# -- device code cannot use the recommended replacements ------------------
- -cppcoreguidelines-avoid-c-arrays # GPUd() paths take raw pointers
- -modernize-avoid-c-arrays # and fixed C arrays by design
- -cppcoreguidelines-pro-bounds-pointer-arithmetic
- -cppcoreguidelines-pro-bounds-constant-array-index
- -cppcoreguidelines-pro-bounds-array-to-pointer-decay
- -cppcoreguidelines-pro-bounds-avoid-unchecked-container-access # Eigen v[i]
- -cppcoreguidelines-init-variables # T x{} is already value-initialised

# -- the domain's notation ------------------------------------------------
- -readability-identifier-length # r, z, phi, pt, bz are the names
- -bugprone-easily-swappable-parameters # (x, y, z) is the whole API
- -readability-math-missing-parentheses # transcribed formulas stay flat
# Geometry is arithmetic. The offending literals are rotation-matrix element
# indices (rot[5]), the 2 in "twice the half-width" and the 0.5 in "half the
# span"; a named constant for any of them obscures the formula it appears in.
- -cppcoreguidelines-avoid-magic-numbers
- -readability-magic-numbers

# -- POD data model -------------------------------------------------------
# Sensor, Layer, Digit, Cluster and the SoA views are deliberately public
# aggregates: they are uploaded to the device as-is, so an accessor layer
# would be a lie about their layout.
- -misc-non-private-member-variables-in-classes
- -cppcoreguidelines-non-private-member-variables-in-classes
- -cppcoreguidelines-pro-type-member-init # aggregate init at the use site
# Small index enums -- kLoc0..kQOverP, kFree/kShared/kExclusive, the reports'
# kinds ending in a count -- stay unscoped with a fixed underlying type: they
# index arrays and size them without a cast (BoundIndex, Definitions.h).
- -cppcoreguidelines-use-enum-class

# -- ROOT and Boost own memory their own way ------------------------------
# ROOT's object model is `new` handing ownership to a manager singleton:
# gGeoManager owns every TGeoMaterial, TGeoVolume and TGeoMatrix created
# under it, and deleting one ourselves is a crash. There is no owner<> to
# be had, so the check has nothing correct to suggest.
- -cppcoreguidelines-owning-memory
- -cppcoreguidelines-no-malloc
# Fires inside Boost.ProgramOptions' own headers, on instantiations our TU
# triggers rather than on anything we wrote. HeaderFilterRegex cannot
# suppress it because the diagnostic is attributed to our source file.
- -portability-template-virtual-member-function

# -- style choices --------------------------------------------------------
- -modernize-use-trailing-return-type
# A multi-way choice of a label or a kind reads best as one chained
# conditional: `a ? x : b ? y : z`.
- -readability-avoid-nested-conditional-operator

# -- untrue of a Boost.Test suite -----------------------------------------
# Every BOOST_TEST expands to branches, so a test case that checks a dozen
# properties in a loop scores as deeply nested code that nobody wrote.
- -readability-function-cognitive-complexity
# BOOST_AUTO_TEST_CASE expands to a static function; the check fires on the
# macro expansion, so there is nothing at the call site to fix.
- -misc-use-anonymous-namespace
# Fixed seeds are the point -- digitiser noise and MC closure tests are only
# meaningful if the sequence reproduces.
- -bugprone-random-generator-seed

# -- IWYU enforcement, deliberately off -----------------------------------
# misc-include-cleaner cannot see through O2's GPUCommon* include structure
# and would demand every TU name the header behind each type rather than the
# one it actually uses. Too much churn for the benefit.
- -misc-include-cleaner

WarningsAsErrors: '*'

HeaderFilterRegex: 'GenericTracking/.*\.(h|cuh)$'

CheckOptions:
# Naming follows O2's conventions.
readability-identifier-naming.ClassCase: CamelCase
readability-identifier-naming.StructCase: CamelCase
readability-identifier-naming.EnumCase: CamelCase
readability-identifier-naming.EnumConstantCase: CamelCase
readability-identifier-naming.EnumConstantIgnoredRegexp: '^k[A-Z][a-zA-Z0-9]*$'
readability-identifier-naming.ConceptCase: CamelCase
readability-identifier-naming.TypeAliasCase: CamelCase
readability-identifier-naming.TypedefCase: CamelCase
readability-identifier-naming.TemplateParameterCase: CamelCase
readability-identifier-naming.TypeTemplateParameterCase: CamelCase
readability-identifier-naming.FunctionCase: camelBack
readability-identifier-naming.ParameterCase: camelBack
readability-identifier-naming.VariableCase: camelBack
readability-identifier-naming.NamespaceCase: lower_case
# O2 spells non-public members mFoo; the POD aggregates keep plain camelBack
# public names because they are part of the wire format.
readability-identifier-naming.PrivateMemberCase: CamelCase
readability-identifier-naming.PrivateMemberPrefix: m
readability-identifier-naming.ProtectedMemberCase: CamelCase
readability-identifier-naming.ProtectedMemberPrefix: m
readability-identifier-naming.PublicMemberCase: camelBack
readability-identifier-naming.MacroDefinitionCase: UPPER_CASE
readability-identifier-naming.MacroDefinitionIgnoredRegexp: '^[A-Z][A-Z0-9_]*_?$'
readability-identifier-naming.ConstexprVariableCase: camelBack
readability-identifier-naming.ConstexprVariableIgnoredRegexp: '^k[A-Z][a-zA-Z0-9]*$'
readability-identifier-naming.GlobalConstantCase: camelBack
readability-identifier-naming.GlobalConstantIgnoredRegexp: '^k[A-Z][a-zA-Z0-9]*$'
# BOOST_AUTO_TEST_CASE(SomeName) expands its argument into a function name;
# the diagnostic points into the macro, so there is no per-case fix.
readability-identifier-naming.FunctionIgnoredRegexp: '^[A-Z][A-Za-z0-9]*$'

misc-include-cleaner.IgnoreHeaders: 'Eigen/.*;GPUCommon.*'
# Values and references only: the pointee analysis does not count a pointer
# handed out -- returned as void*, stored in an allocation's void* data -- as
# a use of the pointee, and asks for const where it cannot compile.
misc-const-correctness.WarnPointersAsPointers: false
performance-move-const-arg.CheckTriviallyCopyableMove: false
...
15 changes: 11 additions & 4 deletions Detectors/GenericTracking/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,15 @@
# In applying this license CERN does not waive the privileges and immunities
# granted to it by virtue of its status as an Intergovernmental Organization
# or submit itself to any jurisdiction.
o2_add_library(GenericTracking
SOURCES src/BoundedAllocator.cxx
PRIVATE_LINK_LIBRARIES O2::GPUCommon O2::FrameworkLogger)
# Every unit that instantiates the header tracker -- the tracking device's, the
# study library's, the sink's and the benches' -- compiles at -O3 in
# RelWithDebInfo, where the tracker runs faster than at O2's -O2.
set(GTRK_TRACKER_OPTIMIZATION "$<$<AND:$<CONFIG:RelWithDebInfo>,$<COMPILE_LANGUAGE:CXX>>:-O3>")

add_subdirectory(test)
add_subdirectory(base)
add_subdirectory(tracking)
add_subdirectory(workflow)
if(ENABLE_UPGRADES)
add_subdirectory(tools)
add_subdirectory(study)
endif()
30 changes: 30 additions & 0 deletions Detectors/GenericTracking/base/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Copyright 2019-2020 CERN and copyright holders of ALICE O2.
# See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
# All rights not expressly granted are reserved.
#
# This software is distributed under the terms of the GNU General Public
# License v3 (GPL Version 3), copied verbatim in the file "COPYING".
#
# In applying this license CERN does not waive the privileges and immunities
# granted to it by virtue of its status as an Intergovernmental Organization
# or submit itself to any jurisdiction.

# The base: what includes no tracking code -- the geometry and time model
# (Base/, the detectors' layouts in Detectors/), the bounded allocator, the SoA
# columns, the host algorithms, the lanes, the portable math and the capacity
# estimator. Header code but for the three sources; host only.
o2_add_library(GTrkBase
SOURCES src/BoundedAllocator.cxx
src/CapacityEstimator.cxx
src/LayerEnvelopes.cxx
PUBLIC_LINK_LIBRARIES O2::GPUCommon
TARGETVARNAME targetName)

# o2_add_library installs the headers of include/<library name> only.
target_include_directories(${targetName} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_include_directories(${targetName} SYSTEM PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/External>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/GenericTracking/External>)
install(DIRECTORY include/GenericTracking DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(DIRECTORY External/memlayout DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GenericTracking/External)

add_subdirectory(test)
Loading
Loading