Skip to content

fix stepping for both passive and active edges - #6

Closed
maciacco wants to merge 370 commits into
Marcellocosti:devfrom
maciacco:tf3_dev
Closed

maciacco wants to merge 370 commits into
Marcellocosti:devfrom
maciacco:tf3_dev

Conversation

@maciacco

Copy link
Copy Markdown

No description provided.

ktf and others added 30 commits July 21, 2026 13:31
Given how easy it is nowadays to have LLMs do full refactorings, I am
not sure this makes sense anymore.
Third patameter of createFieldMap is the convention and the 4th is the uniformity. This was fixed everywhere, but here.
…iceO2Group#15609)

* Transparent fix proposal draft 1

* Please consider the following formatting changes

* Fix whitespace

* Address only the bug

* Adjustments: fix bugs, tuning

* Improve name of ProtectedFlags

* Please consider the following formatting changes

---------

Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
…p#15622)

Removed conditional source file inclusion for TrackerACTS.
…low (AliceO2Group#15618)

* TPC TimeSeries: propagate min-momentum, min-cluster, max-tgl to workflow

Add configurable environment variables for o2-tpc-time-series-workflow:
  TPCTIMESERIES_MIN_MOMENTUM (default: 0.2)
  TPCTIMESERIES_MIN_CLUSTER  (default: 80)
  TPCTIMESERIES_MAX_TGL      (default: 1.4)

Defaults match TPCTimeSeriesSpec.cxx hardcoded values.
Previously these cuts were not configurable from the workflow script.

* TPC TimeSeries: propagate track selection and multiplicity cuts to workflow

Add configurable environment variables for o2-tpc-time-series-workflow:
  TPCTIMESERIES_MIN_MOMENTUM (default: 0.2)
  TPCTIMESERIES_MIN_CLUSTER  (default: 80)
  TPCTIMESERIES_MAX_TGL      (default: 1.4)
  TPCTIMESERIES_MULT_MAX     (default: 50000)

Defaults match TPCTimeSeriesSpec.cxx hardcoded values.
Previously these cuts were not configurable from the workflow script.

---------

Co-authored-by: miranov25 <marian.ivanov@cern.cg>
…segmentation (AliceO2Group#15639)

* approach TF3 ASIC size by using 8-chip modules + update chip segmentation parameters

* fix parameter + update number of sensors in macro
The field normally should not be deleted since this would invalidate the field
pointers cached elsewhere (e.g. by the double version of the Propagator if it was
requested). Instead, the existing field should be scaled by the newly provided
current values.
The exception is the marginal case when the scaling is not possible, e.g. when
switching from 5kGauss map to 2kGauss (which should be avoided for other reasons).
In this case the field will be recreated and the warning will be printed about
possible invalidation of cached pointers.
…p#15644)

staticMapCreatorCPM.C creates the correction map from the unbinned
residuals via the crossing point method

SmoothingExtrapolate.C Performs gaussian smoothing and extrapolation to
small unmeasured radii

voxResQA.C Makes default QA plots

TPCFastTransformInitCPM.C converts the correction maps to the final
splines
Introduces multi-threaded creation of the material budget lookup table, reducing it
from hours to minutes. Creating the LUT walks every cell of every layer through TGeo
and the cells are independent, so they are spread over TBB tasks with one
TGeoNavigator per thread. The innermost 20 layers at 60 trials/cell drop from 28 min
to 72 s on 28 cores.

Effective only with ROOT >= v6-36-10-alice3, which removes a per-query thread-id
lookup and the false sharing between per-thread scratch buffers of TGeo shapes. On
older ROOT the parallel path is correct, just slower -- it saturates near 12x.

All layers map onto a single flat cell index so the load stays balanced despite very
different cell counts per layer; a binary search maps a flat index back to
(layer, iz, iphi). The worker navigators are given back at the end.

meanMaterialBudget() takes an optional navigator: a caller passing its own runs
lock-free, a caller passing none shares gGeoManager's and still takes the mutex.
Deciding from the argument keeps it local, so process-global state cannot break it.

Thread count comes from the new populateFromTGeo() argument, falling back to
NTHREADS_MATBUD; the default is the previous serial path. Results are independent of
the thread count -- compareMatBudLUT.C checks a parallel LUT against a serial one cell
by cell, and they match exactly over all 129523 cells.

Supervised-by: Sandro Wenzel <sandro.wenzel@cern.ch>
ktf and others added 29 commits September 15, 2026 11:08
Defines the GPUd()/GPUshared()/GPU*ref() family for __METAL__ and
__METAL_HOST__, and teaches GPUCommonDef.h about the Metal host and device
compilation passes.

The Metal backend targets MSL 4.1 and later only. That is what lets
GPUdDefault() expand to nothing: up to MSL 4.0 a member function's implicit
this is thread, which is wrong for objects living in device memory, and
pinning defaulted constructors to device made the same type unusable in
thread or threadgroup. MSL 4.1 makes an unannotated this generic, which is
the C++ semantics this codebase already assumes. The *ref() macros stay
explicit regardless: they are correct from the OpenCL port, explicit is never
slower than generic, and constant is not covered by generic pointers at all.

Inert unless __METAL__ or __METAL_HOST__ is defined.
…iceO2Group#15749)

Split VDriftHelper::extractCCDBInputs into the CCDB-fetching part and a
framework-independent updateVDrift() and add BasicCCDBManager-based
overloads to VDriftHelper/PressureTemperatureHelper so O2Physics can
call these directly instead of reimplementing the T/P-scaling logic
(see AliceO2Group/O2Physics#17656). Calling these every event is cheap:
laser/TGL/pressure/temperature are only re-accounted when the
underlying CCDB object actually changed and logging is throttled to
avoid stdout spam in trains.
MSL has no standard library, so the handful of traits the GPU code relies on
are defined for __METAL__, as is already done for the other device compilers.
…p#15801)

MSL provides its own array type, so std::array aliases to it rather than
using the device fallback. GPUCommonMath routes rsqrt and the atomics to
their MSL spellings (atomic_*_explicit).
…on support

- TPCDetParam.UseGeant4Edep: use Geant4's own energy deposit for ionisation
  instead of Bethe-Bloch/NA49, with a configurable SpecialCutsGeV threshold
- Adds the Kr-83m decay generator (GeneratorKrDecay) as a compiled Generator
  subclass in Detectors/TPC/simulation, with a thin krGenerator.C macro for
  use as an o2-sim external generator
- Adds plotCluster.C for viewing the resulting calibration spectrum
This fixes zero track weights for the box-gun generator presets in o2-sim.

- FairBoxGenerator adds tracks without a weight, so FairRoot's default of 0 was used.
- Geant4 scoring multiplies by the track weight, so all scores were zero.
- The box-gun presets and toftest now use o2::eventgen::BoxGenerator, which gives weight 1.
- BoxGenerator now looks up the mass for each call; the static cache gave every generator the mass of the first one used.
- The kinematics distributions are unchanged; for a fixed seed the particle list is shifted by one particle.
- BoxGunParam.debug no longer has an effect.
…eO2Group#15802)

* TPC: place shared constants in the Metal constant address space

MSL requires namespace-scope constexpr to live in the constant address space.
Generic pointers do not help here: constant is explicitly not among the
address spaces MSL 4.1 makes generic, so the annotation is required whatever
the language version. Guarded on __METAL__, so no other build changes.

* Please consider the following formatting changes

---------

Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
* Harden bulk TTree reads against corrupted baskets

* fmt::format for exception
* Improve digit efficiency in stepping

* Switch on stepping

* Implement Mario and Giorgio comments

* Please consider the following formatting changes

---------

Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
This replaces the phi division of the space-frame mother BBMO by 18 explicit
placements of the sector volume BBCE, so that the sector contents survive the
conversion to Geant4.

- Geant4 divides a polyhedra in phi by its number of sides and ignores the
  requested width and offset, and its cell frame sits at the start of a sector
  where TGeo's sits at the centre.
- Both conversion routes, ROOT's GDML writer and VGM, are affected, so the 18
  FTOS service boxes placed in BBCE were absent from the Geant4 geometry.
- The TGeo geometry is unchanged: same node count, same BBCE shape and content,
  same global placements, no new overlaps.
- With this, the ray-by-ray mass thickness of the two Geant4 geometries agrees
  with TGeo to 9e-8 relative, against 5e-5 before.

https://its.cern.ch/jira/browse/O2-7153
Metal has no launch bounds, so the thread and warp count helpers pass the
value through rather than deriving it from a kernel attribute.
Metal also lacks variadic arguments for C functions, so
one need to implement that using templates.
…eO2Group#15788)

- Remove TMath calls with std function calls
- Fix wrong comments for `thetaToEta` and `etaToTheta` in the .cxx
- `buildCluster` uses the local index of cells in eta and phi for calcualting M02, M20 and dispersion. The member `mSharedCluster` would need to be set to true, to apply a correction for the local index when switching from one SM to antoher for cluster spanning two SM. This commit fixes this issue by setting `mSharedCluster` in `buildCluster`.
- Add `mCellGeomBuffer` as new member which stores the geometry information of all cells of the current cluster. This way this information is only obtained ONCE instead of THREE times.
- Removed unused unary operator& which can be dangerous.
@maciacco maciacco closed this Sep 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.