Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
03f424c
GPU TPC: Remove option to retry refit if cluster rejection breaks the…
davidrohr Sep 4, 2025
3eccf02
GPU TPC: Add possibility to run last way of TPC fit in separate kerne…
davidrohr Sep 4, 2025
6e252d3
GPU TPC: Search hit closest to interpolated point in track rebuilding
davidrohr Sep 23, 2025
284fa8d
GPU TPC: Fix index for hit interpolation in rows with multiple clusters
davidrohr Oct 5, 2025
5f5915f
GPU TPC: Implement ambiguity solving for rebuild tracks cluster assoc…
davidrohr Sep 29, 2025
6a9c583
GPU: Additional debug dumps
davidrohr Feb 19, 2026
4c9dda7
GPU TPC: Split TPC Merger Fit() into multiple functions
davidrohr Oct 6, 2025
9497fb9
GPU: Add looperFollowMode option
davidrohr Oct 23, 2025
3ece766
GPU: simplifaction, refactoring and some minor improvements
davidrohr Oct 23, 2025
6f1886c
GPU TPC: Refactor cluster merging
davidrohr Oct 27, 2025
7db273b
GPU: Change indexing of interpolated hit temporary data
davidrohr Oct 24, 2025
5abf625
GPU: Move some functionality to CAMath
davidrohr Oct 27, 2025
93309db
GPU TPC: Store track position for interpolation also when not updatin…
davidrohr Oct 29, 2025
654afb5
GPU TPC: Extract CE crossing handling in function, and apply before s…
davidrohr Oct 30, 2025
0312d26
GPU TPC: If value from other side of interpolation not stored, use on…
davidrohr Oct 30, 2025
b3741e3
GPU TPC: Mark clusters of rebuilt track as high incli when interpolat…
davidrohr Oct 30, 2025
8259430
GPU TPC: Pick up best hit from interpolation only, if current positio…
davidrohr Oct 30, 2025
48d859b
GPU TPC: Interpolate missing pad rows when rebuilding track
davidrohr Oct 31, 2025
b089e42
Revert "GPU TPC: Remove option to retry refit if cluster rejection br…
davidrohr Oct 31, 2025
648a62d
GPU TPC: Relax chi2cut for single-pad clusters
davidrohr Nov 2, 2025
cbd0154
GPU TPC: Clean up and fix resetT0 code
davidrohr Nov 2, 2025
2f0fa3b
GPU TPC: Don't break for high sinPhi if only the linearization model …
davidrohr Nov 2, 2025
a747257
GPU: Add option to steer which attachment steps to run during rebuild
davidrohr Nov 18, 2025
1323f26
GPU TPC: Extrapolate track inward and outward when rebuilding
davidrohr Nov 2, 2025
7bc199c
GPU: Add debug option to create temporary MC labels for collected mer…
davidrohr Dec 4, 2025
261e055
GPU TPC: Correctly handle rowGap and fit Failures when interpolating …
davidrohr Nov 10, 2026
55d7dc0
GPU TPC: Improve track extrapolation for better efficiency / less fak…
davidrohr Nov 10, 2026
c6c791c
GPU TPC: Let fallback clusters compete for ambiguity solving as all o…
davidrohr Nov 11, 2026
747f59b
GPU TPC: Add debug option to dump merged track ncl to text file
davidrohr Nov 11, 2026
89a6bb7
GPU TPC: Continuous and less strict (during refit) NCl cut for given Pt
davidrohr Nov 12, 2026
72e0983
GPU GPUCA_CADEBUG: add possibility to have a condition for the debug …
davidrohr Nov 12, 2026
3635487
GPU TPC: Make extrapolation more robust by stopping early when there …
davidrohr Nov 12, 2026
a6855b1
GPU TPC: revert state after extrapolation in case of problems
davidrohr Nov 12, 2026
9b54150
GPU TPC: Fix some cases of fit failues after track rebuild (bad initi…
davidrohr Nov 12, 2026
1408725
GPU TPC: Fix deltaTimeFwd/deltaTimeBwd after track rebuild
davidrohr Nov 12, 2026
167361b
GPU TPC: Fix storing OuterParam after implementing track rebuild
davidrohr Nov 13, 2026
5c02560
GPU TPC: Option to run interpolation-rejection after track rebuild
davidrohr Nov 13, 2026
c1026f1
GPU TPC: Some fixes for NTolerated and nMissed, and some cleanup
davidrohr Nov 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Detectors/TPC/reconstruction/test/testGPUCATracking.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ BOOST_AUTO_TEST_CASE(CATracking_test1)
config.configGRP.solenoidBzNominalGPU = solenoidBz;
config.configGRP.grpContinuousMaxTimeBin = continuous ? GPUSettings::TPC_MAX_TF_TIME_BIN : 0; // Number of timebins in timeframe if continuous, 0 otherwise

config.configReconstruction.tpc.nWays = 3; // Should always be 3!
config.configReconstruction.tpc.searchWindowDZDR = 2.5f; // Should always be 2.5 for looper-finding and/or continuous tracking
config.configReconstruction.tpc.trackReferenceX = refX;

Expand Down
1 change: 1 addition & 0 deletions GPU/Common/GPUCommonMath.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ class GPUCommonMath
GPUd() constexpr static double Copysignd(double x, double y);
GPUd() constexpr static float TwoPi() { return 6.2831853f; }
GPUd() constexpr static float Pi() { return 3.1415927f; }
GPUd() constexpr static float Deg2Rad() { return Pi() / 180.f; }
GPUd() constexpr static float Round(float x);
GPUd() constexpr static float Floor(float x) { return GPUCA_CHOICE(floorf(x), floorf(x), floor(x)); }
GPUd() static uint32_t Float2UIntReint(const float& x);
Expand Down
1 change: 1 addition & 0 deletions GPU/GPUTracking/Base/GPUParam.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ void GPUParam::UpdateSettings(const GPUSettingsGRP* g, const GPUSettingsProcessi
if (d) {
rec.dyn = *d;
}
rec.tpc.nWays = 1 + 2 * ((rec.tpc.mergerInitial3wayFit > 0) + (rec.tpc.mergerInterpolateErrors > 0) + (rec.tpc.rebuildTrackInFit > 0));
}

void GPUParam::UpdateBzOnly(float newSolenoidBz, bool assumeConstantBz)
Expand Down
4 changes: 2 additions & 2 deletions GPU/GPUTracking/Base/GPUParam.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ struct GPUParam : public internal::GPUParam_t<GPUSettingsRec, GPUSettingsParam>
void UpdateRun3ClusterErrors(const float* yErrorParam, const float* zErrorParam);
#endif

GPUd() constexpr uint32_t tpcMinHitsB5(float qPtB5) const { return CAMath::Abs(qPtB5) > 10 ? 10 : (CAMath::Abs(qPtB5) > 5 ? 15 : 29); } // Minimum hits should depend on Pt, low Pt tracks can have few hits. 29 Hits default, 15 for < 200 mev, 10 for < 100 mev
GPUd() constexpr float Alpha(int32_t iSector) const // TODO: Check if this is faster, or the lookup from GPUTPCGeometry
GPUd() constexpr uint32_t tpcMinHitsB5Abs(float qPtB5) const { return qPtB5 > 10.f ? 10 : (qPtB5 > 5.f ? (uint32_t)(20 - qPtB5) : (qPtB5 > 3.6f ? (uint32_t)(65 - 10.f * qPtB5) : 29)); }
GPUd() constexpr float Alpha(int32_t iSector) const // TODO: Check if this is faster, or the lookup from GPUTPCGeometry
{
if (iSector >= (int32_t)o2::tpc::constants::MAXSECTOR / 2) {
iSector -= o2::tpc::constants::MAXSECTOR / 2;
Expand Down
2 changes: 1 addition & 1 deletion GPU/GPUTracking/Base/GPUReconstruction.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ int32_t GPUReconstruction::InitPhaseBeforeDevice()
if (GetProcessingSettings().deterministicGPUReconstruction && GetProcessingSettings().debugLevel >= 6) {
mProcessingSettings->nTPCClustererLanes = 1;
}
if (GetProcessingSettings().createO2Output > 1 && GetProcessingSettings().runQA && GetProcessingSettings().qcRunFraction == 100.f) {
if (GetProcessingSettings().createO2Output > 1 && ((GetProcessingSettings().runQA && GetProcessingSettings().qcRunFraction == 100.f) || GetProcessingSettings().debug.mergerDumpTrackNCl)) {
mProcessingSettings->createO2Output = 1;
}
if (!GetProcessingSettings().createO2Output || !IsGPU()) {
Expand Down
4 changes: 2 additions & 2 deletions GPU/GPUTracking/Base/GPUReconstructionCPU.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,10 @@ int32_t GPUReconstructionCPU::ExitDevice()
int32_t GPUReconstructionCPU::RunChains()
{
mMemoryScalers->temporaryFactor = 1.;
if (GetProcessingSettings().memoryScalingFuzz) {
if (GetProcessingSettings().debug.memoryScalingFuzz) {
static std::mt19937 rng;
static std::uniform_int_distribution<uint64_t> dist(0, 1000000);
uint64_t fuzzFactor = GetProcessingSettings().memoryScalingFuzz == 1 ? dist(rng) : GetProcessingSettings().memoryScalingFuzz;
uint64_t fuzzFactor = GetProcessingSettings().debug.memoryScalingFuzz == 1 ? dist(rng) : GetProcessingSettings().debug.memoryScalingFuzz;
GPUInfo("Fuzzing memory scaling factor with %lu", fuzzFactor);
mMemoryScalers->fuzzScalingFactor(fuzzFactor);
}
Expand Down
6 changes: 6 additions & 0 deletions GPU/GPUTracking/DataTypes/GPUTPCGeometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
#define GPUTPCGEOMETRY_H

#include "GPUCommonDef.h"
#include "GPUCommonMath.h"
#include "DataFormatsTPC/Constants.h"
#ifndef GPUCA_GPUCODE_DEVICE
#include <cmath>
#endif

namespace o2::gpu
{
Expand Down Expand Up @@ -174,6 +178,8 @@ class GPUTPCGeometry
const float v = (sector >= NSECTORS / 2) ? -z : z;
return (250.f - v) * FACTOR_Z2T; // Used in compression, must remain constant at 250cm
}

GPUd() static constexpr float kSectAngle() { return 2 * CAMath::Pi() / 18.f; }
};

} // namespace o2::gpu
Expand Down
22 changes: 18 additions & 4 deletions GPU/GPUTracking/Definitions/GPUDef.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,30 @@
#ifdef CADEBUG
#undef CADEBUG
#endif
#if GPUCA_CADEBUG == 1 && !defined(GPUCA_GPUCODE)
#define CADEBUG(...) __VA_ARGS__
#define CADEBUG2(cmd, ...) {__VA_ARGS__; cmd;}
#define GPUCA_CADEBUG_ENABLED
#ifdef CADEBUG2
#undef CADEBUG2
#endif
#ifdef CADEBUG3
#undef CADEBUG3
#endif
#if GPUCA_CADEBUG >= 1 && !defined(GPUCA_GPUCODE)
#if GPUCA_CADEBUG >= 2
#define CADEBUG(...) if (CADEBUG_CONDITION) {__VA_ARGS__;}
#define CADEBUG2(cmd, ...) if (CADEBUG_CONDITION) {__VA_ARGS__; cmd;}
#define GPUCA_CADEBUG_ENABLED 2
#else
#define CADEBUG(...) __VA_ARGS__
#define CADEBUG2(cmd, ...) {__VA_ARGS__; cmd;}
#define GPUCA_CADEBUG_ENABLED 1
#endif
#define CADEBUG3(...) __VA_ARGS__
#endif
#undef GPUCA_CADEBUG
#endif

#ifndef CADEBUG
#define CADEBUG(...)
#define CADEBUG2(cmd, ...) {cmd;}
#define CADEBUG3(...)
#endif
// clang-format on
Loading
Loading