Skip to content

Commit 1901f38

Browse files
committed
GPU Display: make connecting A and C side segments of a track optional
1 parent 8aeaa54 commit 1901f38

File tree

6 files changed

+36
-16
lines changed

6 files changed

+36
-16
lines changed

GPU/GPUTracking/Definitions/GPUSettingsList.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,8 @@ AddOption(drawTracksAndFilter, bool, false, "", 0, "Use AND filter instead of OR
346346
AddOption(propagateLoopers, bool, false, "", 0, "Enabale propagation of loopers")
347347
AddOption(clustersOnly, bool, false, "", 0, "Visualize clusters only")
348348
AddOption(clustersOnNominalRow, bool, false, "", 0, "Show clusters at nominal x of pad row for early-transformed data")
349-
AddOption(separateGlobalTracks, bool, false, "", 0, "Separate global tracks")
349+
AddOption(separateGlobalTracks, bool, false, "", 0, "Draw track segments propagated to adjacent sectors separately")
350+
AddOption(splitCETracks, int8_t, -1, "", 0, "Split CE tracks when they cross the central electrode (-1 = for triggered data)")
350351
AddOption(markClusters, int32_t, 0, "", 0, "Mark clusters")
351352
AddOption(markFakeClusters, int32_t, 0, "", 0, "Mark fake clusters")
352353
AddOption(markAdjacentClusters, int32_t, 0, "", 0, "Mark adjacent clusters")

GPU/GPUTracking/display/GPUDisplay.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,7 @@ void GPUDisplay::DrawGLScene_internal(float animateTime, bool renderToMixBuffer)
611611
bool showTimer = false;
612612
bool doScreenshot = (mRequestScreenshot || mAnimateScreenshot) && animateTime < 0;
613613

614+
updateOptions();
614615
if (animateTime < 0 && (mUpdateEventData || mResetScene || mUpdateVertexLists) && mIOPtrs) {
615616
disableUnsupportedOptions();
616617
}

GPU/GPUTracking/display/GPUDisplay.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ class GPUDisplay : public GPUDisplayInterface
150150
void DrawGLScene_drawCommands();
151151
int32_t InitDisplay_internal();
152152
int32_t getNumThreads();
153+
void updateOptions();
153154
void disableUnsupportedOptions();
154155
int32_t buildTrackFilter();
155156
const GPUTPCTracker& sliceTracker(int32_t iSlice);

GPU/GPUTracking/display/frontend/GPUDisplayKeys.cxx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const char* HelpText[] = {
3535
"[L] / [K] Draw single collisions (next / previous)",
3636
"[C] Colorcode clusters of different collisions",
3737
"[v] Hide rejected clusters from tracks",
38-
"[j] Show global tracks as additional segments of final tracks",
38+
"[j] Show tracks segments propagated to adjacent sector in different color / splt CE tracks",
3939
"[u] Cycle through track filter",
4040
"[E] / [G] Extrapolate tracks / loopers",
4141
"[t] / [T] Take Screenshot / Record Animation to pictures",
@@ -164,8 +164,11 @@ void GPUDisplay::HandleKey(uint8_t key)
164164
mPrintInfoText &= 3;
165165
SetInfo("Info text display - console: %s, onscreen %s", (mPrintInfoText & 2) ? "enabled" : "disabled", (mPrintInfoText & 1) ? "enabled" : "disabled");
166166
} else if (key == 'j') {
167+
if (mCfgH.separateGlobalTracks) {
168+
mCfgH.splitCETracks ^= 1;
169+
}
167170
mCfgH.separateGlobalTracks ^= 1;
168-
SetInfo("Seperated display of global tracks %s", mCfgH.separateGlobalTracks ? "enabled" : "disabled");
171+
SetInfo("Seperated display of tracks propagated to adjacent sectors %s / of CE tracks %s", mCfgH.separateGlobalTracks ? "enabled" : "disabled", mCfgH.splitCETracks ? "enabled" : "disabled");
169172
} else if (key == 'c') {
170173
if (mCfgH.markClusters == 0) {
171174
mCfgH.markClusters = 1;

GPU/GPUTracking/display/helpers/GPUDisplayHelpers.cxx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,13 @@ int32_t GPUDisplay::getNumThreads()
3636
}
3737
}
3838

39+
void GPUDisplay::updateOptions()
40+
{
41+
if (mCfgH.splitCETracks == -1 && mParam) {
42+
mCfgH.splitCETracks = mParam->continuousMaxTimeBin != 0;
43+
}
44+
}
45+
3946
void GPUDisplay::disableUnsupportedOptions()
4047
{
4148
if (!mIOPtrs->mergedTrackHitAttachment) {

GPU/GPUTracking/display/render/GPUDisplayDraw.cxx

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
using namespace GPUCA_NAMESPACE::gpu;
4646

4747
#define GET_CID(slice, i) (mParam->par.earlyTpcTransform ? mIOPtrs->clusterData[slice][i].id : (mIOPtrs->clustersNative->clusterOffset[slice][0] + i))
48-
#define SEPERATE_GLOBAL_TRACKS_LIMIT (mCfgH.separateGlobalTracks ? tGLOBALTRACK : TRACK_TYPE_ID_LIMIT)
4948

5049
const GPUTRDGeometry* GPUDisplay::trdGeometry() { return (GPUTRDGeometry*)mCalib->trdGeometry; }
5150
const GPUTPCTracker& GPUDisplay::sliceTracker(int32_t iSlice) { return mChain->GetTPCSliceTrackers()[iSlice]; }
@@ -421,6 +420,8 @@ void GPUDisplay::DrawFinal(int32_t iSlice, int32_t /*iCol*/, GPUTPCGMPropagator*
421420
}
422421

423422
// Print TPC part of track
423+
int32_t separateGlobalTracksLimit = (mCfgH.separateGlobalTracks ? tGLOBALTRACK : TRACK_TYPE_ID_LIMIT);
424+
uint32_t lastSide = -1;
424425
for (int32_t k = 0; k < nClusters; k++) {
425426
if constexpr (std::is_same_v<T, GPUTPCGMMergedTrack>) {
426427
if (mCfgH.hideRejectedClusters && (mIOPtrs->mergedTrackHits[track->FirstClusterRef() + k].state & GPUTPCGMMergedTrackHit::flagReject)) {
@@ -435,31 +436,37 @@ void GPUDisplay::DrawFinal(int32_t iSlice, int32_t /*iCol*/, GPUTPCGMPropagator*
435436
}
436437
int32_t w = mGlobalPos[cid].w;
437438
if (drawing) {
438-
drawPointLinestrip(iSlice, cid, tFINALTRACK, SEPERATE_GLOBAL_TRACKS_LIMIT);
439+
if (mCfgH.splitCETracks && lastSide != (mGlobalPos[cid].z < 0)) {
440+
insertVertexList(vBuf[0], startCountInner, mVertexBuffer[iSlice].size());
441+
drawing = false;
442+
lastCluster = -1;
443+
} else {
444+
drawPointLinestrip(iSlice, cid, tFINALTRACK, separateGlobalTracksLimit);
445+
}
439446
}
440-
if (w == SEPERATE_GLOBAL_TRACKS_LIMIT) {
447+
if (w == separateGlobalTracksLimit) {
441448
if (drawing) {
442449
insertVertexList(vBuf[0], startCountInner, mVertexBuffer[iSlice].size());
443450
}
444451
drawing = false;
445452
} else {
446453
if (!drawing) {
447454
startCountInner = mVertexBuffer[iSlice].size();
448-
}
449-
if (!drawing) {
450-
drawPointLinestrip(iSlice, cid, tFINALTRACK, SEPERATE_GLOBAL_TRACKS_LIMIT);
451-
}
452-
if (!drawing && lastCluster != -1) {
453-
if constexpr (std::is_same_v<T, GPUTPCGMMergedTrack>) {
454-
cid = mIOPtrs->mergedTrackHits[track->FirstClusterRef() + lastCluster].num;
455-
} else {
456-
cid = &track->getCluster(mIOPtrs->outputClusRefsTPCO2, lastCluster, *mIOPtrs->clustersNative) - mIOPtrs->clustersNative->clustersLinear;
455+
if (lastCluster != -1 && (!mCfgH.splitCETracks || lastSide == (mGlobalPos[cid].z < 0))) {
456+
int32_t lastcid;
457+
if constexpr (std::is_same_v<T, GPUTPCGMMergedTrack>) {
458+
lastcid = mIOPtrs->mergedTrackHits[track->FirstClusterRef() + lastCluster].num;
459+
} else {
460+
lastcid = &track->getCluster(mIOPtrs->outputClusRefsTPCO2, lastCluster, *mIOPtrs->clustersNative) - mIOPtrs->clustersNative->clustersLinear;
461+
}
462+
drawPointLinestrip(iSlice, lastcid, tFINALTRACK, separateGlobalTracksLimit);
457463
}
458-
drawPointLinestrip(iSlice, cid, 7, SEPERATE_GLOBAL_TRACKS_LIMIT);
464+
drawPointLinestrip(iSlice, cid, tFINALTRACK, separateGlobalTracksLimit);
459465
}
460466
drawing = true;
461467
}
462468
lastCluster = k;
469+
lastSide = mGlobalPos[cid].z < 0;
463470
}
464471

465472
// Print ITS part of track

0 commit comments

Comments
 (0)