Project
Loading...
Searching...
No Matches
GPUDisplay.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
14
15#ifndef GPUDISPLAY_H
16#define GPUDISPLAY_H
17
18#define GPUSETTINGS_DISPLAY
19#define GPUSETTINGS_DISPLAYCONTROL
20#include "GPUSettings.h"
23#include "GPUDisplayInterface.h"
25
26#include <atomic>
27#include <array>
28#include <tuple>
29#include <mutex>
30#include <condition_variable>
31
32union hmm_mat4; // From HandMadeMath
33
34#include "utils/timer.h"
35#include "utils/vecpod.h"
36#include "utils/qsem.h"
37
38namespace o2::gpu
39{
40class GPUTPCTracker;
41struct GPUParam;
42class GPUQA;
43class GPUTRDGeometry;
44class GPUTPCGMPropagator;
45
47{
48 friend class GPUDisplayFrontend;
49
50 public:
51 GPUDisplay(GPUDisplayFrontend* frontend, GPUChainTracking* chain, GPUQA* qa, const GPUParam* param = nullptr, const GPUCalibObjectsConst* calib = nullptr, const GPUSettingsDisplay* config = nullptr, const GPUSettingsProcessing* proc = nullptr);
52 GPUDisplay(const GPUDisplay&) = delete;
53 ~GPUDisplay() override = default;
54
55 int32_t StartDisplay() override;
56 void ExitDisplay();
57 void ShowNextEvent(const GPUTrackingInOutPointers* ptrs = nullptr) override;
58 void BlockTillNextEvent() override;
59 void UnblockDisplay();
60 void WaitTillEventShown() override;
61 void SetCollisionFirstCluster(uint32_t collision, int32_t sector, int32_t cluster) override;
62 void UpdateCalib(const GPUCalibObjectsConst* calib) override { mCalib = calib; }
63 void UpdateParam(const GPUParam* param) override { mParam = param; }
64
65 void HandleKey(uint8_t key, bool external = false, bool bypassConsole = false); // external: from the Qt GUI or the console, not typed into the event display console; bypassConsole: handled as key also while the console is shown (injectKey)
66 int32_t DrawGLScene(bool suspended = false);
67 void HandleExternalGUIKey(int32_t key, bool bypassConsole = false); // key >= 256: special key with SHIFT
68 int32_t InitDisplay(bool initFailure = false);
69 void ResizeScene(int32_t width, int32_t height, bool init = false);
70 void checkAndApplyConfigChanges(); // Set update flags / apply the settings that changed compared to mOldCfg
71
72 const GPUSettingsDisplayRenderer& cfgR() const { return mCfgR; }
73 const GPUSettingsDisplayLight& cfgL() const { return mCfgL; }
74 const GPUSettingsDisplayHeavy& cfgH() const { return mCfgH; }
75 const GPUSettingsDisplay& cfg() const { return mConfig; }
76 bool useMultiVBO() const { return mUseMultiVBO; }
77 int32_t updateDrawCommands() const { return mUpdateDrawCommands; }
78 int32_t updateRenderPipeline() const { return mUpdateRenderPipeline; }
79 GPUDisplayBackend* backend() const { return mBackend.get(); }
80 vecpod<int32_t>* vertexBufferStart() { return mVertexBufferStart; }
81 const vecpod<uint32_t>* vertexBufferCount() const { return mVertexBufferCount; }
82 struct vtx {
83 float x, y, z;
84 vtx(float a, float b, float c) : x(a), y(b), z(c) {}
85 };
86 vecpod<vtx>* vertexBuffer() { return mVertexBuffer; }
87 const GPUParam* param() { return mParam; }
88 const GPUSettingsProcessing& GetProcessingSettings() const { return mProcessingSettings; }
89 GPUDisplayFrontend* frontend() { return mFrontend; }
90 int32_t& drawTextFontSize() { return mDrawTextFontSize; }
91
92 GPUDisplayOptions mCfgO;
93 GPUDisplayControl mCfgC;
94
95 private:
96 void buildConfig();
97 void buildConfigKeys();
98 void buildConfigInfo();
99 void buildConfigQtGUI();
100
101 static constexpr int32_t NSECTORS = o2::tpc::constants::MAXSECTOR;
102 static constexpr float GL_SCALE_FACTOR = (1.f / 100.f);
103
104 static constexpr const int32_t N_POINTS_TYPE = 15;
105 static constexpr const int32_t N_POINTS_TYPE_TPC = 9;
106 static constexpr const int32_t N_POINTS_TYPE_TRD = 2;
107 static constexpr const int32_t N_POINTS_TYPE_TOF = 2;
108 static constexpr const int32_t N_POINTS_TYPE_ITS = 2;
109 static constexpr const int32_t N_LINES_TYPE = 7;
110 static constexpr const int32_t N_FINAL_TYPE = 4;
111 static constexpr int32_t TRACK_TYPE_ID_LIMIT = 100;
112 static const std::array<std::string, 7> ANIMATION_MODE_NAMES_SHORT, ANIMATION_MODE_NAMES_LONG; // By mCfgL.animationMode
113 enum PointTypes { tCLUSTER = 0,
114 tINITLINK = 1,
115 tLINK = 2,
116 tSEED = 3,
117 tTRACKLET = 4,
118 tSECTORTRACK = 5,
119 tEXTRAPOLATEDTRACK = 6,
120 tFINALTRACK = 7,
121 tMARKED = 8,
122 tTRDCLUSTER = 9,
123 tTRDATTACHED = 10,
124 tTOFCLUSTER = 11,
125 tTOFATTACHED = 12,
126 tITSCLUSTER = 13,
127 tITSATTACHED = 14 };
128 enum LineTypes { RESERVED = 0 /*1 -- 6 = INITLINK to GLOBALTRACK*/ };
129
130 using vboList = GPUDisplayBackend::vboList;
131
132 struct threadVertexBuffer {
134 vecpod<int32_t> start[N_FINAL_TYPE];
135 vecpod<uint32_t> count[N_FINAL_TYPE];
136 std::pair<vecpod<int32_t>*, vecpod<uint32_t>*> vBuf[N_FINAL_TYPE];
137 threadVertexBuffer() : buffer()
138 {
139 for (int32_t i = 0; i < N_FINAL_TYPE; i++) {
140 vBuf[i].first = start + i;
141 vBuf[i].second = count + i;
142 }
143 }
144 void clear()
145 {
146 for (int32_t i = 0; i < N_FINAL_TYPE; i++) {
147 start[i].clear();
148 count[i].clear();
149 }
150 }
151 };
152
153 struct animationVector { // Animation point, its time is in mCfgC.animationPoints.values
154 float v[6]; // Camera: x, y, z, pitch, yaw, roll (as mXYZ, mAngle), independent of the animation mode
155 GPUSettingsDisplayLight cfgL; // Settings at the point
156 };
157
158 class opengl_spline
159 {
160 public:
161 opengl_spline() : ma(), mb(), mc(), md(), mx() {}
162 void create(const vecpod<float>& x, const vecpod<float>& y);
163 float evaluate(float x);
164 void setVerbose() { mVerbose = true; }
165
166 private:
167 vecpod<float> ma, mb, mc, md, mx;
168 bool mVerbose = false;
169 };
170
171 static const GPUSettingsDisplay& GetConfig(GPUChainTracking* chain);
172 static const GPUSettingsProcessing& GetProcessingConfig(GPUChainTracking* chain);
173
174 void DrawGLScene_internal(bool suspended, float animateTime = -1.f, bool renderToMixBuffer = false); // suspended: return before drawing
175 void DrawGLScene_updateEventData();
176 void DrawGLScene_cameraAndAnimation(bool suspended, float animateTime, float& mixSlaveImage, hmm_mat4& nextViewMatrix);
177 size_t DrawGLScene_updateVertexList();
178 void DrawGLScene_drawCommands();
179 int32_t InitDisplay_internal();
180 int32_t getNumThreads();
181 void updateOptions();
182 void disableUnsupportedOptions();
183 int32_t buildTrackFilter();
184 std::string trackFilterName() const; // Selected track filter: macro file from filterMacros, or "Custom Macro"
185 const GPUTPCTracker& sectorTracker(int32_t iSector);
186 const GPUTRDGeometry* trdGeometry();
187 const GPUTrackingInOutPointers* mIOPtrs = nullptr;
188 void insertVertexList(std::pair<vecpod<int32_t>*, vecpod<uint32_t>*>& vBuf, size_t first, size_t last);
189 void insertVertexList(int32_t iSector, size_t first, size_t last);
190 template <typename... Args>
191 void SetInfo(Args... args);
192 void PrintGLHelpText(float colorValue);
193 void calcXYZ(const float*);
194 void mAnimationCloseAngle(float& newangle, float lastAngle);
195 void mAnimateCloseQuaternion(float* v, float lastx, float lasty, float lastz, float lastw);
196 void SaveGLPos(); // Camera position to mCfgO.glPosFile
197 void LoadGLPos();
198 void SaveGLAnimation(); // Animation path to mCfgO.glAnimationFile
199 void LoadGLAnimation();
200 void takeScreenshot();
201 void runAnimation(); // Starts the animation if it has enough points
202 void setAnimationPoint();
203 void setCamera(const float (&xyz)[3], const float (&angles)[3]); // Position and angles (radians, as mAngle: pitch, yaw, roll)
204 void addAnimationPoint(const float (&xyz)[3], const float (&angles)[3]); // Animation point for this camera, the current camera is kept
205 bool lookAt(const float (&target)[3]); // Turn the camera to the point, false if it is the camera position
206 void rotateCamera(const float (&angles)[3]); // Yaw, pitch, roll in degrees relative to the view, as the keyboard
207 hmm_mat4 cameraRotation(const float (&angles)[3]) const; // Rotation of rotateCamera, applied to the view matrix also for keyboard / mouse
208 void resetAnimation();
209 void removeAnimationPoint(int32_t i = -1); // -1: the selected one, the last one if none is selected
210 void StopAnimation(); // Ends a running animation, camera and settings stay as they are; for changed settings (checkAndApplyConfigChanges), scene reset, changes of the animation points
211 void selectAnimationPoint(int32_t i); // -1: none, otherwise also loads its light settings and camera
212 void setAnimationPointsFromGUI(const GPUDisplayMultiSliderValue& points); // New times from the Qt GUI: reorders the points, selection
213 void updateAnimationPointsGUI(); // Range end of the GUI multi slider: last time + animationDelay, progress 0 without animation
214 void animationPointValues(const animationVector& p, int32_t mode, const float* last, float (&vals)[8]); // The 8 interpolated values of the point in this animation mode, angles / quaternion continuous to the values of the previous point (last, nullptr if none)
215 void animationViewMatrix(float (&vals)[8], int32_t mode, hmm_mat4& viewMatrix) const; // Camera of interpolated / stored animation values (vals of animationPointValues), as animateCamera
216 void startAnimation();
217 int32_t animateCamera(bool suspended, float& animateTime, float& mixSlaveImage, hmm_mat4& nextViewMatrix);
218 void showInfo(const char* info);
219 float consoleVerticalFraction(); // Fraction of the window covered by the console (animated), 0 if hidden
220 void ActivateColor();
221 void SetColorTRD();
222 void SetColorTOF();
223 void SetColorITS();
224 void SetColorClusters();
225 void SetColorInitLinks();
226 void SetColorLinks();
227 void SetColorSeeds();
228 void SetColorTracklets();
229 void SetColorTracks();
230 void SetColorExtrapolatedTracks();
231 void SetColorFinal();
232 void SetColorGrid();
233 void SetColorGridTRD();
234 void SetColorMarked();
235 void SetCollisionColor(int32_t col);
236 void updateConfig();
237 void drawPointLinestrip(int32_t iSector, int32_t cid, int32_t id, int32_t id_limit = TRACK_TYPE_ID_LIMIT);
238 void DrawClusters(int32_t iSector);
239 vboList DrawSpacePointsTRD(int32_t iSector, int32_t select, int32_t iCol);
240 vboList DrawSpacePointsTOF(int32_t iSector, int32_t select, int32_t iCol);
241 vboList DrawSpacePointsITS(int32_t iSector, int32_t select, int32_t iCol);
242 vboList DrawLinks(const GPUTPCTracker& tracker, int32_t id, bool dodown = false);
243 vboList DrawSeeds(const GPUTPCTracker& tracker);
244 vboList DrawTracklets(const GPUTPCTracker& tracker);
245 vboList DrawTracks(const GPUTPCTracker& tracker, int32_t global);
246 void DrawTrackITS(int32_t trackId, int32_t iSector);
247 GPUDisplay::vboList DrawFinalITS();
248 template <class T>
249 void DrawFinal(int32_t iSector, int32_t /*iCol*/, const GPUTPCGMPropagator* prop, std::array<vecpod<int32_t>, 2>& trackList, threadVertexBuffer& threadBuffer);
250 vboList DrawGrid(const GPUTPCTracker& tracker);
251 vboList DrawGridTRD(int32_t sector);
252 void DoScreenshot(const char* filename, std::vector<char>& pixels, float animateTime = -1.f);
253 void PrintHelp();
254 void createQuaternionFromMatrix(float* v, const float* mat);
255 void drawVertices(const vboList& v, const GPUDisplayBackend::drawType t);
256 void GLPrintText(const char* s, float x, float y, float r, float g, float b, float a, uint32_t nCharacters = 0, bool fromBotton = true); // nCharacters > 0: print at most that many characters
257
258 GPUDisplayFrontend* mFrontend = nullptr;
259 std::unique_ptr<GPUDisplayBackend> mBackend;
260 GPUChainTracking* mChain = nullptr;
261 const GPUParam* mParam = nullptr;
262 const GPUCalibObjectsConst* mCalib = nullptr;
263 const GPUSettingsDisplay& mConfig;
264 GPUSettingsDisplayLight mCfgL;
265 GPUSettingsDisplayHeavy mCfgH;
266 GPUSettingsDisplayRenderer mCfgR;
267 std::tuple<GPUSettingsDisplayHeavy, GPUSettingsDisplayLight, GPUSettingsDisplayRenderer> mOldCfg; // Settings after the last draw, for checkAndApplyConfigChanges
268 const GPUSettingsProcessing& mProcessingSettings;
269 GPUQA* mQA;
270
271 qSem mSemLockDisplay;
272 std::mutex mMutexLoadAndShowEvent;
273 std::condition_variable mCVLoadAndShowEvent;
274
275 int32_t mDrawTextFontSize = 0;
276
277 int32_t mNDrawCalls = 0;
278
279 bool mUseMultiVBO = false;
280
281 std::array<float, 4> mDrawColor = {1.f, 1.f, 1.f, 1.f};
282
283 float mAngleRollOrigin = -1e9;
284 float mMaxClusterZ = -1;
285
286 std::unique_ptr<hmm_mat4> mViewMatrix, mModelMatrix;
287 float mXYZ[3];
288 float mAngle[3];
289 float mRPhiTheta[3];
290 float mQuat[4];
291
292 vecpod<std::array<int32_t, 37>> mOverlayTFClusters;
293 int32_t mNCollissions = 1;
294
295 vecpod<vtx> mVertexBuffer[NSECTORS];
296 vecpod<int32_t> mVertexBufferStart[NSECTORS];
297 vecpod<uint32_t> mVertexBufferCount[NSECTORS];
298 std::vector<std::array<uint32_t, N_POINTS_TYPE_TPC>> mClusterBufferSizeCache[NSECTORS];
299
300 std::unique_ptr<float4[]> mGlobalPosPtr;
301 std::unique_ptr<float4[]> mGlobalPosPtrTRD;
302 std::unique_ptr<float4[]> mGlobalPosPtrTRD2;
303 std::unique_ptr<float4[]> mGlobalPosPtrITS;
304 std::unique_ptr<float4[]> mGlobalPosPtrTOF;
305 float4* mGlobalPos;
306 float4* mGlobalPosTRD;
307 float4* mGlobalPosTRD2;
308 float4* mGlobalPosITS;
309 float4* mGlobalPosTOF;
310 int32_t mNMaxClusters = 0;
311 int32_t mNMaxSpacePointsTRD = 0;
312 int32_t mNMaxClustersITS = 0;
313 int32_t mNMaxClustersTOF = 0;
314 int32_t mCurrentClusters = 0;
315 int32_t mCurrentSpacePointsTRD = 0;
316 int32_t mCurrentClustersITS = 0;
317 int32_t mCurrentClustersTOF = 0;
318 vecpod<int32_t> mTRDTrackIds;
319 vecpod<bool> mITSStandaloneTracks;
320 std::vector<bool> mTrackFilter;
321
322 volatile bool mUpdateTrackFilter = false;
323 std::string mTrackFilterMacroLoaded; // Track filter macro file loaded into ROOT, unloaded before loading another one (same function name)
324 bool mUpdateGUIOptions = false; // The Qt GUI must call the dynamic option lambdas of its elements again (new event, GUI started)
325 volatile bool mUpdateVertexLists = true;
326 volatile bool mUpdateEventData = false;
327 volatile bool mUpdateDrawCommands = true;
328 volatile bool mUpdateRenderPipeline = false;
329 volatile bool mLoadAndShowEvent = false;
330 uint32_t mNEventsShown = 0; // Events loaded and drawn, in the frontend thread
331 bool mTracksArePropagated = false;
332
333 int32_t mAnimate = 0;
334 HighResTimer mAnimationTimer;
335 int32_t mAnimationFrame = 0;
336 int32_t mAnimationLastBase = 0;
337 int32_t mAnimationMixBase = -1; // Target keyframe of the current config blend (mixing), -1 = none
338 int32_t mAnimationExport = 0;
339 vecpod<animationVector> mAnimationVectors;
340 std::vector<std::array<opengl_spline, 8>> mAnimationSplines; // By animation mode: the 8 values of animationPointValues
341
342 char mInfoText2[1024];
343 std::string mGUIInfoStatus; // Latest status line (FPS etc.) for the Qt GUI
344 std::string mGUIInfoText; // Latest info message (SetInfo) for the Qt GUI
345 uint64_t mGUIInfoTextCounter = 0; // Number of info messages, the GUI shows a new one for some seconds
346 HighResTimer mInfoText2Timer, mInfoHelpTimer, mConsoleTimer; // mConsoleTimer: opening / closing animation of the console
347 HighResTimer mConsoleCursorTimer; // Blinking of the console cursor, started when the console is fully open, restarted when the cursor moves
348 uint32_t mConsoleCursorPos = 0; // Cursor position at the last restart of mConsoleCursorTimer
349 bool mConsoleShown = false; // showConsole of the last checkAndApplyConfigChanges
350
351 std::vector<threadVertexBuffer> mThreadBuffers;
352 std::vector<std::vector<std::array<std::array<vecpod<int32_t>, 2>, NSECTORS>>> mThreadTracks;
353 int32_t mInitResult = 0; // 1 success, -1 failure, protected by mFrontend->mExitStateMutex
354
355 float mFPSScale = 1, mFPSScaleadjust = 0;
356 int32_t mFramesDone = 0, mFramesDoneFPS = 0;
357 HighResTimer mTimerFPS;
358 vboList mGlDLLines[NSECTORS][N_LINES_TYPE];
359 vecpod<std::array<vboList, N_FINAL_TYPE>> mGlDLFinal[NSECTORS];
360 vboList mGlDLFinalITS;
361 vecpod<vboList> mGlDLPoints[NSECTORS][N_POINTS_TYPE];
362 vboList mGlDLGrid[NSECTORS];
363 vboList mGlDLGridTRD[NSECTORS / 2];
364
365 std::string mScreenshotFile;
366
367 float mYFactor = 1.0f;
368};
369} // namespace o2::gpu
370
371#endif
unsigned int uint32_t
int32_t i
uint32_t iSector
GPUChain * chain
configStandalone Light OpenGL display display_light Apply smoothing to points Enable Z buffer Highlight links Highlight seeds Highlight sector tracks Highlight final tracks Show individual sector
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error s
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error First event to Number of events to Number of iterations to Number of iterations to Number of initial iterations excluded from const char Directory with events to Events directory is and not inside events Show standalone event Run event generator maximum time bin of continuous for triggered for automatic continuous for automatic continuous triggered uint64_t
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone Processing proc_rtc Replace constant variables static by constexpr expressions Compile RTC in deterministic with NO_FAST_MATH flags and GPUCA_DETERMINISTIC_MODE define Use RTC to optimize GPU code h configStandalone Processing proc_rtctech Use a file lock to serialize access to the cache folder int32_t
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone proc
uint32_t col
Definition RawData.h:4
uint32_t c
Definition RawData.h:2
StringRef key
std::tuple< uint32_t, uint32_t, int32_t > vboList
const GPUSettingsDisplayLight & cfgL() const
Definition GPUDisplay.h:73
void SetCollisionFirstCluster(uint32_t collision, int32_t sector, int32_t cluster) override
const GPUParam * param()
Definition GPUDisplay.h:87
const GPUSettingsDisplayHeavy & cfgH() const
Definition GPUDisplay.h:74
GPUDisplayControl mCfgC
Definition GPUDisplay.h:93
~GPUDisplay() override=default
int32_t updateRenderPipeline() const
Definition GPUDisplay.h:78
void UpdateCalib(const GPUCalibObjectsConst *calib) override
Definition GPUDisplay.h:62
const GPUSettingsDisplayRenderer & cfgR() const
Definition GPUDisplay.h:72
friend class GPUDisplayFrontend
Definition GPUDisplay.h:48
vecpod< vtx > * vertexBuffer()
Definition GPUDisplay.h:86
GPUDisplay(const GPUDisplay &)=delete
int32_t StartDisplay() override
int32_t DrawGLScene(bool suspended=false)
int32_t & drawTextFontSize()
Definition GPUDisplay.h:90
void UpdateParam(const GPUParam *param) override
Definition GPUDisplay.h:63
int32_t updateDrawCommands() const
Definition GPUDisplay.h:77
GPUDisplayFrontend * frontend()
Definition GPUDisplay.h:89
const vecpod< uint32_t > * vertexBufferCount() const
Definition GPUDisplay.h:81
const GPUSettingsDisplay & cfg() const
Definition GPUDisplay.h:75
void BlockTillNextEvent() override
int32_t InitDisplay(bool initFailure=false)
GPUDisplayOptions mCfgO
Definition GPUDisplay.h:92
bool useMultiVBO() const
Definition GPUDisplay.h:76
void ShowNextEvent(const GPUTrackingInOutPointers *ptrs=nullptr) override
void HandleKey(uint8_t key, bool external=false, bool bypassConsole=false)
vecpod< int32_t > * vertexBufferStart()
Definition GPUDisplay.h:80
GPUDisplayBackend * backend() const
Definition GPUDisplay.h:79
void HandleExternalGUIKey(int32_t key, bool bypassConsole=false)
void WaitTillEventShown() override
void ResizeScene(int32_t width, int32_t height, bool init=false)
const GPUSettingsProcessing & GetProcessingSettings() const
Definition GPUDisplay.h:88
Definition qsem.h:25
GLboolean GLboolean g
Definition glcorearb.h:1233
GLint GLenum GLint x
Definition glcorearb.h:403
GLint GLsizei count
Definition glcorearb.h:399
const GLdouble * v
Definition glcorearb.h:832
GLint GLsizei GLsizei height
Definition glcorearb.h:270
GLint first
Definition glcorearb.h:399
GLint GLsizei width
Definition glcorearb.h:270
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLint y
Definition glcorearb.h:270
GLint GLint GLsizei GLint GLenum GLenum const void * pixels
Definition glcorearb.h:275
GLenum GLfloat param
Definition glcorearb.h:271
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
ConcreteParserVariants< PageSize, BOUNDS_CHECKS > create(T const *buffer, size_t size)
create a raw parser depending on version of RAWDataHeader found at beginning of data
Definition RawParser.h:378
std::vector< InputSpec > select(char const *matcher="")
GPUCalibObjectsTemplate< ConstPtr > GPUCalibObjectsConst
std::string filename()
vtx(float a, float b, float c)
Definition GPUDisplay.h:84
vec clear()
typename std::vector< T, vecpod_allocator< T > > vecpod
Definition vecpod.h:31