Project
Loading...
Searching...
No Matches
GPUSettingsList.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// This file contains macros to generate all settings for the GPU Reconstruction.
16// Macros are used in the following places:
17// Create ConfigurableParam object for workflow.
18// Configure standalone benchmark.
19// Create plain-C struct for GPU code.
20// Create static constexpr with default values for GPU run time compilation
21
23#ifndef GPUSETTINGS_H
24#error Please include GPUSettings.h!
25#endif
26
27// clang-format off
28
29#ifdef QCONFIG_INSTANCE
30using namespace o2::gpu;
31#endif
32#ifdef BeginNamespace // File should not be included without defining the macros, but rootcling will do for dictionary generation
35
36// Settings concerning the reconstruction, stored as parameters in GPU constant memory
37// There must be no bool in here, use int8_t, as sizeof(bool) is compiler dependent and fails on GPUs!!!!!!
38BeginSubConfig(GPUSettingsRecTPC, tpc, configStandalone.rec, "RECTPC", 0, "Reconstruction settings", rec_tpc)
39AddOptionRTC(rejectQPtB5, float, 1.f / GPUCA_MIN_TRACK_PTB5_REJECT_DEFAULT, "", 0, "QPt threshold to reject clusters of TPC tracks (Inverse Pt, scaled to B=0.5T!!!)")
40AddOptionRTC(hitPickUpFactor, float, 1.f, "", 0, "multiplier for the combined cluster+track error during track following")
41AddOptionRTC(hitSearchArea2, float, 2.f, "", 0, "square of maximum search road of hits during seeding")
42AddOptionRTC(neighboursSearchArea, float, 3.f, "", 0, "area in cm for the search of neighbours, for z only used if searchWindowDZDR = 0")
43AddOptionRTC(clusterError2CorrectionY, float, 1.f, "", 0, "correction (multiplicative) for the squared cluster error during tracking")
44AddOptionRTC(clusterError2CorrectionZ, float, 1.f, "", 0, "correction (multiplicative) for the squared cluster error during tracking")
45AddOptionRTC(clusterError2AdditionalY, float, 0.f, "", 0, "correction (additive) for the squared cluster error during track fitting")
46AddOptionRTC(clusterError2AdditionalZ, float, 0.f, "", 0, "correction (additive) for the squared cluster error during track fitting")
47AddOptionRTC(clusterError2AdditionalYSeeding, float, 0.1f, "", 0, "correction (additive) for the squared cluster error during track seeding")
48AddOptionRTC(clusterError2AdditionalZSeeding, float, 0.15f, "", 0, "correction (additive) for the squared cluster error during track seeding")
49AddOptionRTC(clusterRejectChi2TolleranceY, float, 1.f, "", 0, "Multiplicative factor multiplied onto chi2 in Y direction for cluster rejection check during track fit")
50AddOptionRTC(clusterRejectChi2TolleranceZ, float, 1.f, "", 0, "Multiplicative factor multiplied onto chi2 in Z direction for cluster rejection check during track fit")
51AddOptionRTC(clusterErrorOccupancyScaler, float, 9.95e-04f, "", 0, "Scaling factor applied to occupancy histogram bin in cluster error estimation")
52AddOptionRTC(clusterErrorChargeScaler, float, 20.f, "", 0, "Scaling factor applied to cluster charge in cluster error estimation")
53AddOptionRTC(sysClusErrorNormIFCCE, float, 1.f, "", 0, "Systematic cluster error parameterization IFCCE clInner[0]")
54AddOptionRTC(sysClusErrorSlopeIFCCE, float, 1.f / 5.f, "", 0, "Systematic cluster error parameterization IFCCE clInner[1]")
55AddOptionRTC(sysClusErrorIFCCEZRegion, float, -5.f, "", 0, "Systematic cluster error parameterization IFCCE z Region")
56AddOptionRTC(sysClusErrorslopeIFCCEZ, float, 1.f / 2.0f, "", 0, "Systematic cluster error parameterization IFCCE z Region Sigma Inverse")
57AddOptionRTC(sysClusErrorNormIFC, float, 0.5f, "", 0, "Systematic cluster error parameterization IFC normalization")
58AddOptionRTC(sysClusErrorSlopeIFC, float, 0.2f, "", 0, "Systematic cluster error parameterization IFC slope")
59AddOptionRTC(sysClusErrorMinDist, float, 1.5f, "", 0, "Systematic cluster error parameterization IFC Minimum Distance")
60AddOptionRTC(sysClusErrorMaskError, float, 5.f, "", 0, "Systematic cluster error parameterization IFC Large Error for masking")
61AddOptionRTC(sysClusErrorC12Norm, float, 5.3333333e-06f, "", 0, "Systematic cluster for Sector C1/2 normalization")
62AddOptionRTC(sysClusErrorC12Box, float, 1.1e-05f, "", 0, "Systematic cluster for Sector C1/2 box size")
63AddOptionRTC(minNClustersTrackSeed, int32_t, -1, "", 0, "required min number of clusters on the track after track following (before merging)")
64AddOptionRTC(minNClustersFinalTrack, int32_t, -1, "", 0, "required min number of clusters on the final track")
65AddOptionRTC(searchWindowDZDR, float, 2.5f, "", 0, "Use DZDR window for seeding instead of neighboursSearchArea")
66AddOptionRTC(trackReferenceX, float, 1000.f, "", 0, "Transport all tracks to this X after tracking (disabled if > 500, auto = 1000)")
67AddOptionRTC(zsThreshold, float, 2.0f, "", 0, "Zero-Suppression threshold")
68AddOptionRTC(tubeChi2, float, 5.f * 5.f, "", 0, "Max chi2 to mark cluster adjacent to track")
69AddOptionRTC(tubeMaxSize2, float, 2.5f * 2.5f, "", 0, "Square of max tube size (normally derrived from tpcTubeChi2)")
70AddOptionRTC(clustersShiftTimebins, float, 0, "", 0, "Shift of TPC clusters (applied during CTF cluster decoding)")
71AddOptionRTC(clustersShiftTimebinsClusterizer, float, 0, "", 0, "Shift of TPC clusters (applied during CTF clusterization)")
72AddOptionRTC(defaultZOffsetOverR, float, 0.5210953f, "", 0, "Shift of TPC clusters (applied during CTF cluster decoding)")
73AddOptionRTC(PID_EKrangeMin, float, 0.47f, "", 0, "min P of electron/K BB bands crossing")
74AddOptionRTC(PID_EKrangeMax, float, 0.57f, "", 0, "max P of electron/K BB bands crossing")
75AddOptionRTC(PID_EPrangeMin, float, 0.93f, "", 0, "min P of electron/p BB bands crossing")
76AddOptionRTC(PID_EPrangeMax, float, 1.03f, "", 0, "max P of electron/p BB bands crossing")
77AddOptionRTC(PID_EDrangeMin, float, 1.88f, "", 0, "min P of electron/d BB bands crossing")
78AddOptionRTC(PID_EDrangeMax, float, 1.98f, "", 0, "max P of electron/d BB bands crossing")
79AddOptionRTC(PID_ETrangeMin, float, 2.84f, "", 0, "min P of electron/t BB bands crossing")
80AddOptionRTC(PID_ETrangeMax, float, 2.94f, "", 0, "max P of electron/t BB bands crossing")
81AddOptionRTC(PID_sigma, float, 0.06f, "", 0, "relative sigma for PID in combination with PID_useNsigma")
82AddOptionRTC(minTrackdEdxMax, float, 20.0f, "", 0, "min accepted dEdxMaxTPC of the track")
83AddOptionRTC(minTrackdEdxMax2Tot, float, 0.67f, "", 0, "min accepted dEdxMaxTPC/dEdxTotTPC of the track")
84AddOptionRTC(extraClusterErrorEdgeY2, float, 0.35f, "", 0, "Additive extra cluster error for Y2 if edge flag set")
85AddOptionRTC(extraClusterErrorEdgeZ2, float, 0.15f, "", 0, "Additive extra cluster error for Z2 if edge flag set")
86AddOptionRTC(extraClusterErrorSingleY2, float, 0.04f, "", 0, "Additive extra cluster error for Y2 if single set")
87AddOptionRTC(extraClusterErrorSingleZ2, float, 0.04f, "", 0, "Additive extra cluster error for Z2 if single set")
88AddOptionRTC(extraClusterErrorSplitPadSharedSingleY2, float, 0.03f, "", 0, "Additive extra cluster error for Y2 if splitpad, shared, or single set")
89AddOptionRTC(extraClusterErrorFactorSplitPadSharedSingleY2, float, 3.0f, "", 0, "Multiplicative extra cluster error for Y2 if splitpad, shared, or single set")
90AddOptionRTC(extraClusterErrorSplitTimeSharedSingleZ2, float, 0.03f, "", 0, "Additive extra cluster error for Z2 if splittime, shared, or single set")
91AddOptionRTC(extraClusterErrorFactorSplitTimeSharedSingleZ2, float, 3.0f, "", 0, "Multiplicative extra cluster error for Z2 if splittime, shared, or single set")
92AddOptionArray(errorsCECrossing, float, 5, (0.f, 0.f, 0.f, 0.f, 0.f), "", 0, "Extra errors to add to track when crossing CE, depending on addErrorsCECrossing") // BUG: CUDA cannot yet handle AddOptionArrayRTC
93AddOptionRTC(extrapolationTrackingYRangeUpper, float, 0.85f, "", 0, "Inner portion of y-range in sector that is not used in searching for extrapolated track candidates")
94AddOptionRTC(extrapolationTrackingYRangeLower, float, 0.85f, "", 0, "Inner portion of y-range in sector that is not used in searching for extrapolated track candidates")
95AddOptionRTC(trackFollowingYFactor, float, 4.f, "", 0, "Weight of y residual vs z residual in tracklet constructor")
96AddOptionRTC(trackMergerFactor2YS, float, 1.5f * 1.5f, "", 0, "factor2YS for track merging")
97AddOptionRTC(trackMergerFactor2ZT, float, 1.5f * 1.5f, "", 0, "factor2ZT for track merging")
98AddOptionRTC(trackMergerFactor2K, float, 2.0f * 2.0f, "", 0, "factor2K for track merging")
99AddOptionRTC(trackMergerFactor2General, float, 3.5f * 3.5f, "", 0, "General factor for track merging")
100AddOptionRTC(rejectEdgeClustersMargin, float, 0.f, "", 0, "Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y")
101AddOptionRTC(rejectEdgeClustersSigmaMargin, float, 0.f, "", 0, "Margin factor for trackSigmaY when rejecting edge clusters based on uncorrected track Y")
102AddOptionRTC(trackletMaxSharedFraction, float, 0.1f, "", 0, "Max fraction of shared clusters for tracklet")
103AddOptionRTC(trackletMinSharedNormFactor, float, 0.f, "", 0, "Max shared defined as trackletMinSharedNormFactor*max(current_nhits,trackletMinSharedNormFactor*minHits,1)")
104AddOptionRTC(maxTimeBinAboveThresholdIn1000Bin, uint16_t, 500, "", 0, "Except pad from cluster finding if total number of charges in a fragment is above this baseline (disable = 0)")
105AddOptionRTC(maxConsecTimeBinAboveThreshold, uint16_t, 200, "", 0, "Except pad from cluster finding if number of consecutive charges in a fragment is above this baseline (disable = 0)")
106AddOptionRTC(noisyPadSaturationThreshold, uint16_t, 700, "", 0, "Threshold where a timebin is considered saturated, disabling the noisy pad check for that pad")
107AddOptionRTC(occupancyMapTimeBins, uint16_t, 16, "", 0, "Number of timebins per histogram bin of occupancy map (0 = disable occupancy map)")
108AddOptionRTC(occupancyMapTimeBinsAverage, uint16_t, 0, "", 0, "Number of timebins +/- to use for the averaging")
109AddOptionRTC(trackFitCovLimit, uint16_t, 1000, "", 0, "Abort fit when y/z cov exceed the limit")
110AddOptionRTC(addErrorsCECrossing, uint8_t, 0, "", 0, "Add additional custom track errors when crossing CE, 0 = no custom errors but att 0.5 to sigma_z^2, 1 = only to cov diagonal, 2 = preserve correlations")
111AddOptionRTC(trackMergerMinPartHits, uint8_t, 10, "", 0, "Minimum hits of track part during track merging")
112AddOptionRTC(trackMergerMinTotalHits, uint8_t, 20, "", 0, "Minimum total of track part during track merging")
113AddOptionRTC(mergerCERowLimit, uint8_t, 5, "", 0, "Distance from first / last row in order to attempt merging accross CE")
114AddOptionRTC(mergerLooperQPtB5Limit, uint8_t, 4, "", 0, "Min Q/Pt (@B=0.5T) to run special looper merging procedure")
115AddOptionRTC(mergerLooperSecondHorizontalQPtB5Limit, uint8_t, 2, "", 0, "Min Q/Pt (@B=0.5T) to attempt second horizontal merge between sectors after a vertical merge was found")
116AddOptionRTC(trackFollowingMaxRowGap, uint8_t, 4, "", 0, "Maximum number of consecutive rows without hit in track following")
117AddOptionRTC(trackFollowingMaxRowGapSeed, uint8_t, 2, "", 0, "Maximum number of consecutive rows without hit in track following during fit of seed")
118AddOptionRTC(trackFitMaxRowMissedHard, uint8_t, 10, "", 0, "Hard limit for number of missed rows in fit / propagation")
119AddOptionRTC(extrapolationTrackingRowRange, uint8_t, 45, "", 0, "Number of rows from the upped/lower limit to search for extrapolated track candidates in for")
120AddOptionRTC(extrapolationTrackingMinRows, uint8_t, 10, "", 0, "Min num of rows an additional extrapolated track must span over")
121AddOptionRTC(extrapolationTrackingMinHits, uint8_t, 8, "", 0, "Min num of hits for an additional extrapolated track")
122AddOptionRTC(noisyPadsQuickCheck, uint8_t, 1, "", 0, "Only check first fragment for noisy pads instead of all fragments (when test is enabled).")
123AddOptionRTC(cfQMaxCutoff, uint8_t, 3, "", 0, "Cluster Finder rejects cluster with qmax below or equal to this threshold")
124AddOptionRTC(cfQTotCutoff, uint8_t, 5, "", 0, "Cluster Finder rejects cluster with qtot below or equal to this threshold")
125AddOptionRTC(cfQMaxCutoffSingleTime, uint8_t, 0, "", 0, "Cluster Finder rejects cluster with qMax below or equal to this threshold for single pad or single time bin clusters")
126AddOptionRTC(cfQMaxCutoffSinglePad, uint8_t, 0, "", 0, "Cluster Finder rejects cluster with qMax below or equal to this threshold for single pad or single pad bin clusters")
127AddOptionRTC(cfInnerThreshold, uint8_t, 0, "", 0, "Cluster Finder extends cluster if inner charge above this threshold")
128AddOptionRTC(cfMinSplitNum, uint8_t, 1, "", 0, "Minimum number of split charges in a cluster for the cluster to be marked as split")
129AddOptionRTC(cfNoiseSuppressionEpsilon, uint8_t, 10, "", 0, "Cluster Finder: Difference between peak and charge for the charge to count as a minima during noise suppression")
130AddOptionRTC(cfNoiseSuppressionEpsilonRelative, uint8_t, 76, "", 0, "Cluster Finder: Difference between peak and charge for the charge to count as a minima during noise suppression, relative as fraction of 255")
131AddOptionRTC(nWays, uint8_t, 3, "", 0, "Do N fit passes in final fit of merger")
132AddOptionRTC(nWaysOuter, int8_t, 0, "", 0, "Store outer param")
133AddOptionRTC(trackFitRejectMode, int8_t, 5, "", 0, "0: no limit on rejection or missed hits, >0: break after n rejected hits, <0: reject at max -n hits")
134AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 0, "", 0, "Reject clusters that get the IFC mask error during refit")
135AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128")
136AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128")
137AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking (prolong tracks to adjacent sectors to find short segments)")
138AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit (1: attachment, 2: propagation, 4: loop following, 8: mirroring)")
139AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression (0 = no, 1 = strategy A, 2 = strategy B)")
140AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging")
141AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits (1=truncate charge/width LSB, 2=differences, 4=track-model)")
142AddOptionRTC(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))")
143AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1")
144AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1")
145AddOptionRTC(forceEarlyTransform, int8_t, -1, "", 0, "Force early TPC transformation also for continuous data (-1 = auto)")
146AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop")
147AddOptionRTC(mergerCovSource, uint8_t, 2, "", 0, "Method to obtain covariance in track merger: 0 = simple filterErrors method, 1 = use cov from track following, 2 = refit (default)")
148AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection")
149AddOptionRTC(mergeCE, uint8_t, 1, "", 0, "Merge tracks accross the central electrode")
150AddOptionRTC(retryRefit, int8_t, 1, "", 0, "Retry refit with seeding errors and without cluster rejection when fit fails (=2 means retry in same kernel, =1 for separate kernel")
151AddOptionRTC(looperInterpolationInExtraPass, int8_t, -1, "", 0, "Perform looper interpolation in an extra pass")
152AddOptionRTC(dropSecondaryLegsInOutput, int8_t, 1, "", 0, "Do not store secondary legs of looping track in TrackTPC")
153AddOptionRTC(enablePID, int8_t, 1, "", 0, "Enable PID response")
154AddOptionRTC(PID_useNsigma, int8_t, 1, "", 0, "Use nSigma instead of absolute distance in PID response")
155AddOptionRTC(adddEdxSubThresholdClusters, int8_t, 1, "", 0, "Add sub threshold clusters in TPC dEdx computation")
156AddOptionRTC(dEdxClusterRejectionFlagMask, int8_t, o2::gpu::GPUTPCGMMergedTrackHit::flagEdge, "", 0, "OR mask of TPC flags that will reject the cluster in dEdx")
157AddOptionRTC(rejectEdgeClustersInSeeding, int8_t, 0, "", 0, "Reject edge clusters based on uncorrected track Y during seeding")
158AddOptionRTC(rejectEdgeClustersInTrackFit, int8_t, 0, "", 0, "Reject edge clusters based on uncorrected track Y during track fit")
159AddOptionArray(PID_remap, int8_t, 9, (0, 1, 2, 3, 4, 5, 6, 7, 8), "", 0, "Remap Ipid to PID_reamp[Ipid] (no remap if<0)") // BUG: CUDA cannot yet hand AddOptionArrayRTC
160AddHelp("help", 'h')
161EndConfig()
162
163BeginSubConfig(GPUSettingsRecTRD, trd, configStandalone.rec, "RECTRD", 0, "Reconstruction settings", rec_trd)
164AddOptionRTC(minTrackPt, float, .5f, "", 0, "Min Pt for tracks to be propagated through the TRD")
165AddOptionRTC(maxChi2, float, 20.f, "", 0, "Max chi2 for TRD tracklets to be matched to a track")
166AddOptionRTC(penaltyChi2, float, 12.f, "", 0, "Chi2 penalty for no available TRD tracklet (effective chi2 cut value)")
167AddOptionRTC(chi2StrictCut, float, 10.f, "", 0, "Chi2 cut for strict matching mode")
168AddOptionRTC(chi2SeparationCut, float, 2.5f, "", 0, "Minimum difference between chi2 of winner match and chi2 of second best match")
169AddOptionRTC(nSigmaTerrITSTPC, float, 4.f, "", 0, "Number of sigmas for ITS-TPC track time error estimate")
170AddOptionRTC(addTimeRoadITSTPC, float, 2.5f, "", 0, "Increase time search road by X us for ITS-TPC tracks")
171AddOptionRTC(extraRoadY, float, 5.f, "", 0, "Addition to search road around track prolongation along Y in cm")
172AddOptionRTC(extraRoadZ, float, 10.f, "", 0, "Addition to search road around track prolongation along Z in cm")
173AddOptionRTC(trkltResRPhiIdeal, float, 1.f, "", 0, "Optimal tracklet rphi resolution in cm (in case phi of track = lorentz angle)")
174AddOptionRTC(maxChi2Red, float, 99.f, "", 0, "maximum chi2 per attached tracklet for TRD tracks TODO: currently effectively disabled, requires tuning")
175AddOptionRTC(applyDeflectionCut, uint8_t, 0, "", 0, "Set to 1 to enable tracklet selection based on deflection")
176AddOptionRTC(stopTrkAfterNMissLy, uint8_t, 6, "", 0, "Abandon track following after N layers without a TRD match")
177AddOptionRTC(nTrackletsMin, uint8_t, 3, "", 0, "Tracks with less attached tracklets are discarded after the tracking")
178AddOptionRTC(matCorrType, uint8_t, 2, "", 0, "Material correction to use: 0 - none, 1 - TGeo, 2 - matLUT")
179AddOptionRTC(pileupFwdNBC, uint8_t, 80, "", 0, "Post-trigger Pile-up integration time in BCs")
180AddOptionRTC(pileupBwdNBC, uint8_t, 80, "", 0, "Pre-trigger Pile-up integration time in BCs")
181AddHelp("help", 'h')
182EndConfig()
183
184// Dynamic settings, must NOT use AddOptionRTC(...) !!!
185BeginSubConfig(GPUSettingsRecDynamic, dyn, configStandalone.rec, "RECDYN", 0, "Reconstruction settings", rec_dyn)
186AddHelp("help", 'h')
187EndConfig()
188
189BeginSubConfig(GPUSettingsRec, rec, configStandalone, "REC", 0, "Reconstruction settings", rec)
190AddOptionRTC(maxTrackQPtB5, float, 1.f / GPUCA_MIN_TRACK_PTB5_DEFAULT, "", 0, "required max Q/Pt (==min Pt) of tracks")
191AddOptionRTC(fwdTPCDigitsAsClusters, uint8_t, 0, "", 0, "Forward TPC digits as clusters (if they pass the ZS threshold)")
192AddOptionRTC(bz0Pt10MeV, uint8_t, 60, "", 0, "Nominal Pt to set when bz = 0 (in 10 MeV)")
193AddOptionRTC(fitInProjections, int8_t, -1, "", 0, "Fit in projection, -1 to enable full fit for all but passes but the first one")
194AddOptionRTC(fitPropagateBzOnly, int8_t, -1, "", 0, "Propagate using Bz only for n passes")
195AddOptionRTC(useMatLUT, int8_t, 0, "", 0, "Use material lookup table for TPC refit")
196AddOptionRTC(trackingRefitGPUModel, int8_t, 1, "", 0, "Use GPU track model for the Global Track Refit")
197AddCustomCPP(void SetMinTrackPtB5(float v) { maxTrackQPtB5 = v > 0.001f ? (1.f / v) : (1.f / 0.001f); })
198AddSubConfig(GPUSettingsRecTPC, tpc)
199AddSubConfig(GPUSettingsRecTRD, trd)
200AddSubConfig(GPUSettingsRecDynamic, dyn)
201AddHelp("help", 'h')
202EndConfig()
203
204#ifndef __OPENCL__
205// Settings steering the processing once the device was selected, only available on the host
206BeginSubConfig(GPUSettingsProcessingRTC, rtc, configStandalone.proc, "RTC", 0, "Processing settings", proc_rtc)
207AddOption(cacheOutput, bool, false, "", 0, "Cache RTC compilation results")
208AddOption(optConstexpr, bool, true, "", 0, "Replace constant variables by static constexpr expressions")
209AddOption(optSpecialCode, int8_t, -1, "", 0, "Insert GPUCA_RTC_SPECIAL_CODE special code during RTC")
210AddOption(compilePerKernel, bool, true, "", 0, "Run one RTC compilation per kernel")
211AddOption(enable, bool, false, "", 0, "Use RTC to optimize GPU code")
212AddOption(runTest, int32_t, 0, "", 0, "Do not run the actual benchmark, but just test RTC compilation (1 full test, 2 test only compilation)")
213AddOption(cacheMutex, bool, true, "", 0, "Use a file lock to serialize access to the cache folder")
214AddOption(ignoreCacheValid, bool, false, "", 0, "If set, allows to use RTC cached code files even if they are not valid for the current source code / parameters")
215AddHelp("help", 'h')
216EndConfig()
217
218BeginSubConfig(GPUSettingsProcessingParam, param, configStandalone.proc, "PARAM", 0, "Processing settings", proc_param)
219AddOptionArray(tpcErrorParamY, float, 4, (0.06f, 0.24f, 0.12f, 0.1f), "", 0, "TPC Cluster Y Error Parameterization")
220AddOptionArray(tpcErrorParamZ, float, 4, (0.06f, 0.24f, 0.15f, 0.1f), "", 0, "TPC Cluster Z Error Parameterization")
221AddOption(tpcTriggerHandling, bool, true, "", 0, "Enable TPC trigger handling")
222AddHelp("help", 'h')
223EndConfig()
224
225BeginSubConfig(GPUSettingsProcessing, proc, configStandalone, "PROC", 0, "Processing settings", proc)
226AddOption(deviceNum, int32_t, -1, "gpuDevice", 0, "Set GPU device to use (-1: automatic, -2: for round-robin usage in timeslice-pipeline)")
227AddOption(gpuDeviceOnly, bool, false, "", 0, "Use only GPU as device (i.e. no CPU for OpenCL)")
228AddOption(globalInitMutex, bool, false, "", 0, "Use global mutex to synchronize initialization of multiple GPU instances")
229AddOption(stuckProtection, int32_t, 0, "", 0, "Timeout in us, When AMD GPU is stuck, just continue processing and skip tracking, do not crash or stall the chain")
230AddOption(trdNCandidates, int32_t, 3, "", 0, "Number of branching track candidates for single input track during propagation")
231AddOption(trdTrackModelO2, bool, false, "", 0, "Use O2 track model instead of GPU track model for TRD tracking")
232AddOption(debugLevel, int32_t, -1, "debug", 'd', "Set debug level (-2 = silent, -1 = autoselect (-2 for O2, 0 for standalone))")
233AddOption(allocDebugLevel, int32_t, 0, "allocDebug", 0, "Some debug output for memory allocations (without messing with normal debug level)")
234AddOption(debugMask, int32_t, 262143, "", 0, "Mask for debug output dumps to file")
235AddOption(serializeGPU, int8_t, 0, "", 0, "Synchronize after each kernel call (bit 1) and DMA transfer (bit 2) and identify failures")
236AddOption(recoTaskTiming, bool, 0, "", 0, "Perform summary timing after whole reconstruction tasks")
237AddOption(deterministicGPUReconstruction, int32_t, -1, "", 0, "Make CPU and GPU debug output comparable (sort / skip concurrent parts), -1 = automatic if debugLevel >= 6")
238AddOption(showOutputStat, bool, false, "", 0, "Print some track output statistics")
239AddOption(runCompressionStatistics, bool, false, "compressionStat", 0, "Run statistics and verification for cluster compression")
240AddOption(resetTimers, int8_t, 1, "", 0, "Reset timers every event")
241AddOption(deviceTimers, bool, true, "", 0, "Use device timers instead of host-based time measurement")
242AddOption(keepAllMemory, bool, false, "", 0, "Allocate all memory on both device and host, and do not reuse")
243AddOption(keepDisplayMemory, bool, false, "", 0, "Like keepAllMemory, but only for memory required for event display")
244AddOption(disableMemoryReuse, bool, false, "", 0, "Disable memory reusage (for debugging only)")
245AddOption(memoryAllocationStrategy, int8_t, 0, "", 0, "Memory Allocation Stragegy (0 = auto, 1 = individual allocations, 2 = single global allocation)")
246AddOption(forceMemoryPoolSize, uint64_t, 1, "memSize", 0, "Force size of allocated GPU / page locked host memory", min(0ul))
247AddOption(forceHostMemoryPoolSize, uint64_t, 0, "hostMemSize", 0, "Force size of allocated host page locked host memory (overriding memSize)", min(0ul))
248AddOption(memoryScalingFactor, float, 1.f, "", 0, "Factor to apply to all memory scalers")
249AddOption(conservativeMemoryEstimate, bool, false, "", 0, "Use some more conservative defaults for larger buffers during TPC processing")
250AddOption(tpcInputWithClusterRejection, uint8_t, 0, "", 0, "Indicate whether the TPC input is CTF data with cluster rejection, to tune buffer estimations")
251AddOption(forceMaxMemScalers, uint64_t, 0, "", 0, "Force using the maximum values for all buffers, Set a value n > 1 to rescale all maximums to a memory size of n")
252AddOption(registerStandaloneInputMemory, bool, false, "registerInputMemory", 0, "Automatically register input memory buffers for the GPU")
253AddOption(nHostThreads, int32_t, -1, "nThreads", 't', "Number of host threads to run (-1: all)", min(-1), message("Using %s CPU threads"))
254AddOption(ompThreads, int32_t, -1, "", 0, "Deprecated synonym for nHostThreads")
255AddOption(inKernelParallel, uint8_t, 2, "", 0, "Parallelize with multi-threading inside kernels on the host instead of over TPC sectors, 2 for nested parallelization over TPC sectors and inside kernels")
256AddOption(autoAdjustHostThreads, bool, true, "", 0, "Auto-adjust number of OMP threads, decreasing the number for small input data")
257AddOption(nStreams, int8_t, 8, "", 0, "Number of GPU streams / command queues")
258AddOption(nTPCClustererLanes, int8_t, -1, "", 0, "Number of TPC clusterers that can run in parallel (-1 = autoset)")
259AddOption(overrideClusterizerFragmentLen, int32_t, -1, "", 0, "Force the cluster max fragment len to a certain value (-1 = autodetect)")
260AddOption(trackletSelectorSectors, int8_t, -1, "", 0, "Number of sectors to processes in parallel at max")
261AddOption(trackletConstructorInPipeline, int8_t, -1, "", 0, "Run tracklet constructor in the pipeline")
262AddOption(trackletSelectorInPipeline, int8_t, -1, "", 0, "Run tracklet selector in the pipeline")
263AddOption(delayedOutput, bool, true, "", 0, "Delay output to be parallel to track fit")
264AddOption(mergerSortTracks, int8_t, -1, "", 0, "Sort track indizes for GPU track fit")
265AddOption(alternateBorderSort, int8_t, -1, "", 0, "Alternative implementation for sorting of border tracks")
266AddOption(tpcCompressionGatherMode, int8_t, -1, "", 0, "TPC Compressed Clusters Gather Mode (0: DMA transfer gather gpu to host, 1: serial DMA to host and gather by copy on CPU, 2. gather via GPU kernal DMA access, 3. gather on GPU via kernel, dma afterwards")
267AddOption(tpcCompressionGatherModeKernel, int8_t, -1, "", 0, "TPC Compressed Clusters Gather Mode Kernel (0: unbufferd, 1-3: buffered, 4: multi-block)")
268AddOption(tpccfGatherKernel, bool, true, "", 0, "Use a kernel instead of the DMA engine to gather the clusters")
269AddOption(doublePipeline, bool, false, "", 0, "Double pipeline mode")
270AddOption(doublePipelineClusterizer, bool, true, "", 0, "Include the input data of the clusterizer in the double-pipeline")
271AddOption(prefetchTPCpageScan, int8_t, 0, "", 0, "Prefetch Data for TPC page scan in CPU cache")
272AddOption(runMC, bool, false, "", 0, "Process MC labels")
273AddOption(runQA, int32_t, 0, "qa", 'q', "Enable tracking QA (negative number to provide bitmask for QA tasks)", message("Running QA: %s"), def(1))
274AddOption(qcRunFraction, float, 100.f, "", 0, "Percentage of events to process with QC")
275AddOption(outputSharedClusterMap, bool, false, "", 0, "Ship optional shared cluster map as output for further use")
276AddOption(disableTPCNoisyPadFilter, bool, false, "", 0, "Disables all TPC noisy pad filters (Not the normal noise filter!)")
277AddOption(createO2Output, int8_t, 2, "", 0, "Create Track output in O2 format (2 = skip non-O2 output in GPU track format (reverts to =1 if QA is requested))")
278AddOption(clearO2OutputFromGPU, bool, false, "", 0, "Free the GPU memory used for O2 output after copying to host, prevents further O2 processing on the GPU")
279AddOption(ignoreNonFatalGPUErrors, bool, false, "", 0, "Continue running after having received non fatal GPU errors, e.g. abort due to overflow")
280AddOption(tpcIncreasedMinClustersPerRow, uint32_t, 0, "", 0, "Impose a minimum buffer size for the clustersPerRow during TPC clusterization")
281AddOption(noGPUMemoryRegistration, bool, false, "", 0, "Do not register input / output memory for GPU dma transfer")
282AddOption(o2PropagatorUseGPUField, bool, true, "", 0, "Makes the internal O2 propagator use the fast GPU polynomial b field approximation")
283AddOption(willProvideO2PropagatorLate, bool, false, "", 0, "Disable check for availability of o2 propagator and MatLUT at initialization")
284AddOption(calibObjectsExtraMemorySize, uint32_t, 10u * 1024 * 1024, "", 0, "Extra spare memory added for calibration object buffer, to allow fow updates with larger objects")
285AddOption(fastTransformObjectsMinMemorySize, uint32_t, 400u * 1024 * 1024, "", 0, "Extra spare memory added for calibration object buffer, to allow fow updates with larger objects")
286AddOption(lateO2MatLutProvisioningSize, uint32_t, 0u, "", 0, "Memory size to reserve for late provisioning of matlut table")
287AddOption(throttleAlarms, bool, false, "", 0, "Throttle rate at which alarms are sent to the InfoLogger in online runs")
288AddOption(outputSanityCheck, bool, false, "", 0, "Run some simple sanity checks finding errors in the output")
289AddOption(tpcSingleSector, int32_t, -1, "", 0, "Restrict TPC processing to a single sector")
290AddOption(tpcDownscaledEdx, uint8_t, 0, "", 0, "If != 0, downscale dEdx processing (if enabled) to x %")
291AddOption(tpcMaxAttachedClustersPerSectorRow, uint32_t, 51000, "", 0, "Maximum number of TPC attached clusters which can be decoded per SectorRow")
292AddOption(tpcUseOldCPUDecoding, bool, false, "", 0, "Enable old CPU-based TPC decoding")
293AddOption(tpcApplyCFCutsAtDecoding, bool, false, "", 0, "Apply cluster cuts from clusterization during decoding of compressed clusters")
294AddOption(tpcApplyDebugClusterFilter, bool, false, "", 0, "Apply custom cluster filter of GPUTPCClusterFilter class")
295AddOption(RTCcacheFolder, std::string, "./rtccache/", "", 0, "Folder in which the cache file is stored")
296AddOption(RTCprependCommand, std::string, "", "", 0, "Prepend RTC compilation commands by this string")
297AddOption(RTCoverrideArchitecture, std::string, "", "", 0, "Override arhcitecture part of RTC compilation command line")
298AddOption(oclPlatformNum, int32_t, -1, "", 0, "Platform to use, in case the backend provides multiple platforms (OpenCL only, -1 = auto-select, -2 query all platforms (also incompatible))")
299AddOption(oclCompileFromSources, bool, false, "", 0, "Compile OpenCL binary from included source code instead of using included spirv code")
300AddOption(oclOverrideSourceBuildFlags, std::string, "", "", 0, "Override OCL build flags for compilation from source, put a space for empty options")
301AddOption(printSettings, bool, false, "", 0, "Print all settings when initializing")
303AddSubConfig(GPUSettingsProcessingRTC, rtc)
304AddSubConfig(GPUSettingsProcessingParam, param)
305AddHelp("help", 'h')
306EndConfig()
307#endif // __OPENCL__
308
309#ifndef GPUCA_GPUCODE_DEVICE
310// Light settings concerning the event display (can be changed without rebuilding vertices)
311BeginSubConfig(GPUSettingsDisplayLight, light, configStandalone.display, "GLL", 'g', "Light OpenGL display settings", display_light)
312AddOption(animationMode, int32_t, 0, "", 0, "")
313AddOption(smoothPoints, bool, true, "", 0, "Apply smoothing to points")
314AddOption(smoothLines, bool, false, "", 0, "Apply smoothing to lines")
315AddOption(depthBuffer, bool, false, "", 0, "Enable Z-buffer")
316AddOption(drawClusters, bool, true, "", 0, "Highlight clusters")
317AddOption(drawLinks, bool, false, "", 0, "Highlight links")
318AddOption(drawInitLinks, bool, false, "", 0, "Highlight cleaned-up links")
319AddOption(drawSeeds, bool, false, "", 0, "Highlight seeds")
320AddOption(drawTracklets, bool, false, "", 0, "Highlight tracklets")
321AddOption(drawTracks, bool, false, "", 0, "Highlight sector tracks")
322AddOption(drawExtrapolatedTracks, bool, false, "", 0, "Highlight global sector tracks prolonged into adjacent sector")
323AddOption(drawFinal, bool, false, "", 0, "Highlight final tracks")
324AddOption(excludeClusters, int32_t, 0, "", 0, "Exclude clusters from selected draw objects from display, (2 = exclude clusters but still show tracks)")
325AddOption(drawSector, int32_t, -1, "", 0, "Show individual sector")
326AddOption(drawRelatedSectors, int32_t, 0, "", 0, "Show related sectors (if drawSector != -1)")
327AddOption(drawGrid, int32_t, 0, "", 0, "Highlight grid")
328AddOption(propagateTracks, int32_t, 0, "", 0, "Propagate final tracks further (inward / outward / show MC tracks)")
329AddOption(showCollision, int32_t, -1, "", 0, "Show only individual collision")
330AddOption(colorCollisions, int32_t, 0, "", 0, "Distinguish collisions in timeframe by color")
331AddOption(colorClusters, int32_t, 1, "", 0, "Color clusters belonging to track objects")
332AddOption(pointSize, float, 2.0f, "", 0, "Set point size")
333AddOption(lineWidth, float, 1.4f, "", 0, "Set line width")
334AddOption(drawTPC, bool, true, "", 0, "Enable drawing TPC data")
335AddOption(drawTRD, bool, true, "", 0, "Enabale drawing TRD data")
336AddOption(drawTOF, bool, true, "", 0, "Enabale drawing TOF data")
337AddOption(drawITS, bool, true, "", 0, "Enabale drawing ITS data")
338AddOption(drawField, bool, false, "", 0, "Enable drawing magnetic field")
339AddOption(bFieldStepSize, float, 5.0f, "", 0, "Set field line step size")
340AddOption(bFieldStepCount, int32_t, 100, "", 0, "Set field line step count")
341AddOption(bFieldLinesCount, int32_t, 2000, "", 0, "Set field lines count")
342AddOption(invertColors, bool, false, "", 0, "Invert colors")
343AddHelp("help", 'h')
344EndConfig()
345
346// Heavy settings concerning the event display (can be changed only with rebuilding vertices)
347BeginSubConfig(GPUSettingsDisplayHeavy, heavy, configStandalone.display, "GLH", 0, "Heavy OpenGL display settings", display_heavy)
348AddOption(drawTPCTracks, bool, true, "", 0, "Show tracks with TPC contribution")
349AddOption(drawITSTracks, bool, true, "", 0, "Show tracks with ITS contribution")
350AddOption(drawTRDTracks, bool, true, "", 0, "Show tracks with TRD contribution")
351AddOption(drawTOFTracks, bool, true, "", 0, "Show tracks with TOF contribution")
352AddOption(drawTracksAndFilter, bool, false, "", 0, "Use AND filter instead of OR filter for selecting tracks")
353AddOption(propagateLoopers, bool, false, "", 0, "Enabale propagation of loopers")
354AddOption(clustersOnly, bool, false, "", 0, "Visualize clusters only")
355AddOption(clustersOnNominalRow, bool, false, "", 0, "Show clusters at nominal x of pad row for early-transformed data")
356AddOption(separateExtrapolatedTracks, bool, false, "", 0, "Draw track segments propagated to adjacent sectors separately")
357AddOption(splitCETracks, int8_t, -1, "", 0, "Split CE tracks when they cross the central electrode (-1 = for triggered data)")
358AddOption(markClusters, int32_t, 0, "", 0, "Mark clusters")
359AddOption(markFakeClusters, int32_t, 0, "", 0, "Mark fake clusters")
360AddOption(markAdjacentClusters, int32_t, 0, "", 0, "Mark adjacent clusters")
361AddOption(hideRejectedClusters, int32_t, 1, "", 0, "Hide rejected clusters")
362AddOption(hideRejectedTracks, int32_t, 1, "", 0, "Hide rejected tracks")
363AddOption(hideUnmatchedClusters, int32_t, 0, "", 0, "Hide unmatched clusters")
364AddOption(trackFilter, int32_t, 0, "", 0, "Apply filter on tracks to be displayed")
365AddOption(projectXY, int32_t, 0, "", 0, "Project everything on the XY-plane")
366AddOption(xAdd, float, 0, "", 0, "Separate sectors, increase X coordinate")
367AddOption(zAdd, float, 0, "", 0, "Separate sides, increase Z coordinate")
368AddHelp("help", 'h')
369EndConfig()
370
371// Camera, window, and renderer settings for the event display
372BeginSubConfig(GPUSettingsDisplayRenderer, renderer, configStandalone.display, "GLR", 'g', "Camera / window / renderer OpenGL display settings", display_camera)
373AddOption(camLookOrigin, bool, false, "", 0, "Make the camera look at the origin")
374AddOption(camYUp, bool, false, "", 0, "Orient the camera such that the y-axis is always upwards")
375AddOption(cameraMode, int32_t, 0, "", 0, "Camera mode")
376AddOption(fullScreen, bool, false, "", 0, "Full Screen")
377AddOption(maximized, bool, false, "", 0, "Full Screen")
378AddOption(openGLCore, bool, false, "", 0, "Use renderer path for OpenGL core profile")
379AddOption(drawQualityMSAA, int32_t, 0, "", 0, "MultiSample Anti Aliasing")
380AddOption(drawQualityDownsampleFSAA, int32_t, 0, "", 0, "Downsampling Anti Aliasing")
381AddOption(drawQualityVSync, bool, true, "", 0, "Enable Vertical Sync")
382AddOption(maxFPSRate, int32_t, 0, "", 0, "Do not limit FPS but run at maximum possible rate")
383AddOption(useGLIndirectDraw, bool, true, "", 0, "Use OpenGL indirect draws to reduce number of draw calls")
384AddOption(screenshotScaleFactor, int32_t, 1, "", 0, "Resolution scale factor when taking screenshots")
385AddOption(fov, int32_t, 45, "", 0, "Display FOV")
386AddHelp("help", 'h')
387EndConfig()
388
389// Vulkan Display Settings
390BeginSubConfig(GPUSettingsDisplayVulkan, vulkan, configStandalone.display, "GLV", 0, "Vulkan display settings", display_vulkan)
391AddOption(nFramesInFlight, int32_t, 0, "", 0, "Max number of render frames in flight (0 = as many as swapchain images)")
392AddOption(uniformBuffersInDeviceMemory, bool, 1, "", 0, "Have uniform buffers in host-accessible device memory")
393AddOption(forceDevice, int32_t, -1, "", 0, "Force Vulkan device number to use")
394AddHelp("help", 'h')
395EndConfig()
396
397// Settings concerning the event display (fixed settings, cannot be changed)
398BeginSubConfig(GPUSettingsDisplay, display, configStandalone, "GL", 'g', "OpenGL display settings", display)
399AddOption(showTPCTracksFromO2Format, bool, false, "", 0, "Use TPC tracks in O2 output format instead of GPU format")
400AddOption(font, std::string, "monospace", "", 0, "Font (search patter used for Fontconfig)")
401AddOption(fontSize, int32_t, 14, "", 0, "Font size")
402AddOption(smoothFont, int32_t, -1, "", 0, "Smoth font when rendering (-1 for auto-select based on size")
403AddOption(noFreetype, bool, false, "", 0, "Do not use Freetype for font rendering (can only draw text if supported by frontend)")
404AddOption(displayRenderer, std::string, "auto", "renderer", 0, "Renderer for event display: opengl | vulkan | auto")
405AddOption(displayFrontend, std::string, "auto", "displayFrontend", 0, "Frontend to use for event display: auto | win32 | x11 | glut | glfw | wayland")
406AddOptionVec(filterMacros, std::string, "", 0, "ROOT macros used as track filter")
407AddSubConfig(GPUSettingsDisplayLight, light)
408AddSubConfig(GPUSettingsDisplayHeavy, heavy)
409AddSubConfig(GPUSettingsDisplayRenderer, renderer)
410AddSubConfig(GPUSettingsDisplayVulkan, vulkan)
411AddHelp("help", 'h')
412EndConfig()
413
414// Settings concerning the standalone QA
415BeginSubConfig(GPUSettingsQA, QA, configStandalone, "QA", 'q', "QA settings", QA)
416AddOptionVec(compareInputs, std::string, "QAinput", 0, "Read histogram from these input files and include them in the output plots")
417AddOptionVec(compareInputNames, std::string, "QAinputName", 0, "Legend entries for data from comparison histogram files")
418AddOption(name, std::string, "", "", 0, "Legend entry for new data from current processing")
419AddOption(output, std::string, "", "", 0, "Store histograms in output root file", def(std::string("histograms.root")))
420AddOption(inputHistogramsOnly, bool, false, "", 0, "Do not run tracking, but just create PDFs from input root files")
421AddOption(strict, bool, true, "", 0, "Strict QA mode: Only consider resolution of tracks where the fit ended within 5 cm of the reference, and remove outliers.")
422AddOption(qpt, float, 10.f, "", 0, "Set cut for Q/Pt", def(2.f))
423AddOption(maxResX, float, 1e6f, "", 0, "Maxmimum X (~radius) for reconstructed track position to take into accound for resolution QA in cm")
424AddOption(recThreshold, float, 0.9f, "", 0, "Compute the efficiency including impure tracks with fake contamination")
425AddOption(resPrimaries, int32_t, 0, "", 0, "0: Resolution for all tracks, 1: only for primary tracks, 2: only for non-primaries", def(1))
426AddOption(filterCharge, int32_t, 0, "", 0, "Filter for positive (+1) or negative (-1) charge")
427AddOption(filterPID, int32_t, -1, "", 0, "Filter for Particle Type (0 Electron, 1 Muon, 2 Pion, 3 Kaon, 4 Proton)")
428AddOption(nativeFitResolutions, bool, false, "", 0, "Create resolution histograms in the native fit units (sin(phi), tan(lambda), Q/Pt)")
429AddOption(enableLocalOutput, bool, true, "", 0, "Enable normal output to local PDF files / console")
430AddOption(dumpToROOT, int32_t, 0, "", 0, "Dump all clusters and tracks to a ROOT file, 1 = combined TNTUple dump, 2 = also individual cluster / track branch dump")
431AddOption(writeMCLabels, bool, false, "", 0, "Store mc labels to file for later matching")
432AddOption(writeRootFiles, bool, false, "", 0, "Create ROOT canvas files")
433AddOptionVec(matchMCLabels, std::string, "", 0, "Read labels from files and match them, only process tracks where labels differ")
434AddOption(matchDisplayMinPt, float, 0, "", 0, "Minimum Pt of a matched track to be displayed")
435AddOption(noMC, bool, false, "", 0, "Force running QA without MC labels even if present")
436AddOption(shipToQC, bool, false, "", 0, "Do not write output files but ship histograms for QC")
437AddOption(shipToQCAsCanvas, bool, false, "", 0, "Send TCanvases with full layout to QC instead of individual histograms")
438AddOption(clusterRejectionHistograms, bool, false, "", 0, "Fill histograms with cluster rejection statistics")
439AddOption(histMaxNClusters, uint32_t, 500000000, "", 0, "Maximum number of clusters in rejection histograms")
440AddShortcut("compare", 0, "--QAinput", "Compare QA histograms", "--qa", "--QAinputHistogramsOnly")
441AddHelp("help", 'h')
442EndConfig()
443
444#ifdef BeginConfig
445// Settings concerning the standlone timeframe from run 2 events assembly tool
446BeginSubConfig(GPUSettingsTFSim, TF, configStandalone, "TF", 't', "Timeframe settings")
447AddOption(nMerge, int32_t, 0, "", 0, "Merge n events in a timeframe", min(0))
448AddOption(averageDistance, float, 50.f, "", 0, "Average distance in cm of events merged into timeframe", min(0.f))
449AddOption(randomizeDistance, bool, true, "", 0, "Randomize distance around average distance of merged events")
450AddOption(shiftFirstEvent, bool, true, "", 0, "Also shift the first event in z when merging events to a timeframe")
451AddOption(bunchSim, int32_t, 0, "", 0, "Simulate correct bunch interactions instead of placing only the average number of events. A value [n] > 1 sets TFlen for [n] collisions in average. (Incompatible to TFmerge)")
452AddOption(bunchCount, int32_t, 12, "", 0, "Number of bunches per trainsort")
453AddOption(bunchSpacing, int32_t, 50, "", 0, "Spacing between benches in ns")
454AddOption(bunchTrainCount, int32_t, 48, "", 0, "Number of bunch trains")
455AddOption(abortGapTime, int32_t, (3000), "", 0, "Length of abort gap in ns")
456AddOption(interactionRate, int32_t, 50000, "", 0, "Instantaneous interaction rate")
457AddOption(timeFrameLen, int64_t, (1000000000 / 44), "", 'l', "Timeframe len in ns")
458AddOption(noBorder, bool, false, "", 0, "Do not simulate border effects (partial events)")
459AddOption(noEventRepeat, int32_t, 0, "", 0, "0: Place random events, 1: Place events in timeframe one after another, 2: Place random events but do not repat", def(1))
460AddOption(nTotalEventsInTF, int32_t, 0, "", 0, "Total number of collisions to be placed in the interior of all time frames (excluding borders)")
461AddOption(eventStride, int32_t, 0, "", 0, "Do not select random event, but walk over array of events in stride steps")
462AddOption(overlayRaw, bool, false, "", 0, "Overlay raw TPC data instead of spatial clusters")
463AddHelp("help", 'h')
464EndConfig()
465
466// Settings concerning standalone toy event generator
467BeginSubConfig(GPUSettingsEG, EG, configStandalone, "EG", 0, "Event generator settings")
468AddOption(numberOfTracks, int32_t, 1, "", 0, "Number of tracks per generated event")
469AddHelp("help", 'h')
470EndConfig()
471
472// Settings for the standalone benchmark
473BeginConfig(GPUSettingsStandalone, configStandalone)
474AddOption(runGPU, uint8_t, 1, "", 'g', "Use GPU for processing", message("GPU processing enabled"), set(2))
475AddOptionSet(runGPU, uint8_t, 0, "", 'c', "Use CPU for processing", message("CPU enabled"))
476AddOption(gpuType, std::string, "AUTO", "", 0, "GPU type (CUDA / HIP / OCL / OCL) or CPU or AUTO")
477AddOption(runGPUforce, bool, true, "", 0, "Force usage of the specified GPU device type, no CPU fallback")
478AddOption(noprompt, bool, true, "", 0, "Do prompt for keypress before exiting")
479AddOption(continueOnError, bool, false, "", 0, "Continue processing after an error")
480AddOption(seed, int32_t, -1, "", 0, "Set srand seed (-1: random)")
481AddOption(StartEvent, int32_t, 0, "", 's', "First event to process", min(0))
482AddOption(nEvents, int32_t, -1, "", 'n', "Number of events to process (-1; all)", min(0))
483AddOption(runs, int32_t, 1, "runs", 'r', "Number of iterations to perform (repeat each event)", min(0))
484AddOption(runs2, int32_t, 1, "runsExternal", 0, "Number of iterations to perform (repeat full processing)", min(1))
485AddOption(runsInit, int32_t, 1, "", 0, "Number of initial iterations excluded from average", min(0))
486AddOption(eventsDir, const char*, "pp", "events", 'e', "Directory with events to process", message("Reading events from Directory events/%s"))
487AddOption(noEvents, bool, false, "", 0, "Run without data (e.g. for field visualization)")
488AddOption(eventDisplay, int32_t, 0, "display", 'd', "Show standalone event display", def(1))
489AddOption(eventGenerator, bool, false, "", 0, "Run event generator")
490AddOption(cont, bool, false, "", 0, "Process continuous timeframe data, even if input is triggered")
491AddOption(outputcontrolmem, uint64_t, 0, "outputMemory", 0, "Use predefined output buffer of this size", min(0ul), message("Using %s bytes as output memory"))
492AddOption(inputcontrolmem, uint64_t, 0, "inputMemory", 0, "Use predefined input buffer of this size", min(0ul), message("Using %s bytes as input memory"))
493AddOption(cpuAffinity, int32_t, -1, "", 0, "Pin CPU affinity to this CPU core", min(-1))
494AddOption(fifoScheduler, bool, false, "", 0, "Use FIFO realtime scheduler", message("Setting FIFO scheduler: %s"))
495AddOption(fpe, bool, true, "", 0, "Trap on floating point exceptions")
496AddOption(flushDenormals, bool, true, "", 0, "Enable FTZ and DAZ (Flush all denormals to zero)")
497AddOption(solenoidBzNominalGPU, float, -1e6f, "", 0, "Field strength of solenoid Bz in kGaus")
498AddOption(constBz, bool, false, "", 0, "Force constand Bz")
499AddOption(overrideMaxTimebin, bool, false, "", 0, "Override max time bin setting for continuous data with max time bin in time frame")
500AddOption(encodeZS, int32_t, -1, "", 0, "Zero-Suppress TPC data", def(1))
501AddOption(zsFilter, int32_t, -1, "", 0, "Apply Zero-Suppression when loading digits and remove those below threshold", def(1))
502AddOption(zsVersion, int32_t, 2, "", 0, "ZS Version: 1 = 10-bit ADC row based, 2 = 12-bit ADC row based, 3 = improved link based, 4 = dense link based")
503AddOption(dumpEvents, bool, false, "", 0, "Dump events (after transformation such as encodeZS")
504AddOption(stripDumpedEvents, bool, false, "", 0, "Remove redundant inputs (e.g. digits and ZS) before dumping")
505AddOption(printSettings, int32_t, 0, "", 0, "Print all settings", def(1))
506AddOption(memoryStat, bool, false, "", 0, "Print memory statistics")
507AddOption(testSyncAsync, bool, false, "syncAsync", 0, "Test first synchronous and then asynchronous processing")
508AddOption(testSync, bool, false, "sync", 0, "Test settings for synchronous phase")
509AddOption(timeFrameTime, bool, false, "tfTime", 0, "Print some debug information about time frame processing time")
510AddOption(controlProfiler, bool, false, "", 0, "Issues GPU profiler stop and start commands to profile only the relevant processing part")
511AddOption(preloadEvents, bool, false, "", 0, "Preload events into host memory before start processing")
512AddOption(recoSteps, int32_t, -1, "", 0, "Bitmask for RecoSteps")
513AddOption(recoStepsGPU, int32_t, -1, "", 0, "Bitmask for RecoSteps")
514AddOption(runMerger, int32_t, 1, "", 0, "Run track merging / refit", min(0), max(1))
515AddOption(runTRD, int32_t, -1, "", 0, "Enable TRD processing")
516AddOption(rundEdx, int32_t, -1, "", 0, "Enable dEdx processing")
517AddOption(runCompression, int32_t, 1, "", 0, "Enable TPC Compression")
518AddOption(runTransformation, int32_t, 1, "", 0, "Enable TPC Transformation")
519AddOption(runRefit, bool, false, "", 0, "Enable final track refit")
520AddOption(setO2Settings, bool, false, "", 0, "Set O2 defaults for outerParam, output of shared cluster map, referenceX")
521AddHelp("help", 'h')
522AddHelpAll("helpall", 'H')
524AddSubConfig(GPUSettingsProcessing, proc)
525AddSubConfig(GPUSettingsQA, QA)
526AddSubConfig(GPUSettingsDisplay, display)
527AddSubConfig(GPUSettingsTFSim, TF)
528AddSubConfig(GPUSettingsEG, EG)
529EndConfig()
530#endif // BeginConfig
531
532//Settings for the O2 workfllow
533#if !defined(QCONFIG_PARSER_CXX) && (defined(GPUCA_O2_LIB) || defined(GPUCA_O2_INTERFACE))
534BeginSubConfig(GPUSettingsO2, global, configStandalone, "O2", 0, "O2 workflow settings", global)
535AddOption(solenoidBzNominalGPU, float, -1e6f, "", 0, "Field strength of solenoid Bz in kGaus")
536AddOption(constBz, bool, false, "", 0, "force constant Bz for tests")
537AddOption(setMaxTimeBin, int32_t, -2, "", 0, "maximum time bin of continuous data, 0 for triggered events, -1 for automatic continuous mode, -2 for automatic continuous / triggered")
538AddOption(overrideNHbfPerTF, int32_t, 0, "", 0, "Overrides the number of HBF per TF if != 0")
539AddOption(overrideTPCTimeBinCur, int32_t, 0, "", 0, "Overrides TPC time bin cut if > 0")
540AddOption(deviceType, std::string, "CPU", "", 0, "Device type, CPU | CUDA | HIP | OCL")
541AddOption(forceDeviceType, bool, true, "", 0, "force device type, otherwise allows fall-back to CPU")
542AddOption(synchronousProcessing, bool, false, "", 0, "Apply performance shortcuts for synchronous processing, disable unneeded steps")
543AddOption(dump, int32_t, 0, "", 0, "Dump events for standalone benchmark: 1 = dump events, 2 = dump events and skip processing in workflow")
544AddOption(display, bool, false, "", 0, "Enable standalone gpu tracking visualizaion")
545AddOption(rundEdx, int32_t, -1, "", 0, "Enable/disable dEdx processing (-1 for autoselect)")
546AddOption(dEdxSplineTopologyCorrFile, std::string, "", "", 0, "File name of the dE/dx spline track topology correction file")
547AddOption(dEdxCorrFile, std::string, "", "", 0, "File name of dEdx residual correction file")
548AddOption(dEdxPolTopologyCorrFile, std::string, "", "", 0, "File name of the dE/dx polynomial track topology correction")
549AddOption(dEdxDisableTopologyPol, bool, false, "", 0, "Disable loading of polynomial track topology correction from CCDB")
550AddOption(dEdxDisableThresholdMap, bool, false, "", 0, "Disable loading of threshold map from CCDB")
551AddOption(dEdxDisableGainMap, bool, false, "", 0, "Disable loading of gain map from CCDB")
552AddOption(dEdxDisableResidualGainMap, bool, false, "", 0, "Disable loading of residual gain map from CCDB")
553AddOption(dEdxDisableResidualGain, bool, false, "", 0, "Disable loading of residual dE/dx gain correction from CCDB")
554AddOption(dEdxUseFullGainMap, bool, false, "", 0, "Enable using the full gain map for correcting the cluster charge during calculation of the dE/dx")
555AddOption(transformationFile, std::string, "", "", 0, "File name of TPC fast transformation map")
556AddOption(transformationSCFile, std::string, "", "", 0, "File name of TPC space charge correction file (for testing/CPU only)")
557AddOption(matLUTFile, std::string, "", "", 0, "File name of material LUT file")
558AddOption(gainCalibFile, std::string, "", "", 0, "File name of TPC pad gain calibration")
559AddOption(gainCalibDisableCCDB, bool, false, "", 0, "Disabling loading the TPC pad gain calibration from the CCDB")
560AddOption(thresholdCalibFile, std::string, "", "", 0, "File name of TPC zero supression threshold map")
561AddOption(allocateOutputOnTheFly, bool, true, "", 0, "Allocate shm output buffers on the fly, instead of using preallocated buffer with upper bound size")
562AddOption(outputBufferSize, uint64_t, 200000000ul, "", 0, "Size of the output buffers to be allocated")
563AddOption(mutexMemReg, bool, false, "", 0, "Global mutex to serialize GPU memory registration")
564AddOption(printSettings, int32_t, 0, "", 0, "Print all settings", def(1))
565AddOption(gpuDisplayfilterMacro, std::string, "", "", 0, "File name of ROOT macro for GPU display filter")
566AddOption(benchmarkMemoryRegistration, bool, false, "", 0, "Time-benchmark for memory registration")
567AddOption(registerSelectedSegmentIds, int32_t, -1, "", 0, "Register only a specific managed shm segment id (-1 = all)")
568AddOption(disableCalibUpdates, bool, false, "", 0, "Disable all calibration updates")
569AddOption(partialOutputForNonFatalErrors, bool, false, "", 0, "In case of a non-fatal error that is ignored (ignoreNonFatalGPUErrors=true), forward the partial output that was created instead of shipping an empty TF")
570AddOption(checkFirstTfOrbit, bool, false, "", 0, "Check consistency of firstTfOrbit")
571AddOption(tpcTriggeredMode, bool, false, "", 0, "In case we have triggered TPC data, this must be set to true")
572AddOption(zsOnTheFlyDigitsFilter, bool, false, "", 0, "Run on the fly digits filter during zs encoding")
573AddOption(dumpBadTFs, int32_t, 0, "", 0, "Number of bad timeframes (with decoding / processing) errors to decode at max")
574AddOption(dumpBadTFMode, int32_t, 0, "", 0, "Type of dump to create: 0 = raw-reader compatible raw file, 1 = buffer-wise dump, 2 = standalone-benchmark compatible dump")
575EndConfig()
576#endif // GPUCA_O2_LIB
577#endif // !GPUCA_GPUCODE_DEVICE
578
579// Derrived parameters used in GPUParam
581AddVariableRTC(dAlpha, float, 0.f) // angular size
582AddVariableRTC(assumeConstantBz, int8_t, 0) // Assume a constant magnetic field
583AddVariableRTC(toyMCEventsFlag, int8_t, 0) // events were build with home-made event generator
584AddVariableRTC(continuousTracking, int8_t, 0) // Continuous tracking, estimate bz and errors for abs(z) = 125cm during seeding
585AddVariableRTC(dodEdx, int8_t, 0) // Do dEdx computation
586AddVariableRTC(earlyTpcTransform, int8_t, 0) // do Early TPC transformation
587AddVariableRTC(debugLevel, int8_t, 0) // Debug level
588EndConfig()
589
590EndNamespace() // gpu
591EndNamespace() // o2
592#endif // #ifdef BeginNamespace
593
594 // clang-format on
std::vector< std::string > objects
uint8_t lookup(const char input) noexcept
int16_t charge
Definition RawEventData.h:5
uint64_t phase
Definition RawEventData.h:7
int16_t time
Definition RawEventData.h:4
int32_t i
#define GPUCA_RTC_SPECIAL_CODE(...)
CPU
CUDA
HIP
Refit
#define GPUCA_MIN_TRACK_PTB5_REJECT_DEFAULT
#define GPUCA_MIN_TRACK_PTB5_DEFAULT
#define AddOptionVec(name, type, optname, optnameshort, help,...)
#define AddShortcut(...)
#define AddOptionArray(name, type, count, default, optname, optnameshort, help,...)
#define BeginHiddenConfig(...)
#define AddHelp(...)
#define AddCustomCPP(...)
#define AddSubConfig(name, instance)
#define AddVariableRTC(...)
#define AddOptionRTC(...)
#define AddOption(name, type, default, optname, optnameshort, help,...)
#define BeginSubConfig(name, instance, parent, preoptname, preoptnameshort, descr, o2prefix)
#define AddOptionSet(name, type, value, optname, optnameshort, help,...)
#define AddVariable(name, type, default)
#define BeginNamespace(...)
Definition GPUParamRTC.h:26
#define EndNamespace(...)
Definition GPUParamRTC.h:27
GPUChain * chain
Mode
Definition Utils.h:89
Test
Definition Utils.h:55
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
uint32_t one
Definition RawData.h:4
uint16_t slope
Definition RawData.h:1
uint32_t c
Definition RawData.h:2
void merge(Options const &options)
std::ostringstream debug
double num
Definition A.h:16
Definition B.h:16
Class for time synchronization of RawReader instances.
HMPID cluster implementation.
Definition Cluster.h:27
bool match(const std::vector< std::string > &queries, const char *pattern)
Definition dcs-ccdb.cxx:229
void dump(const std::string what, DPMAP m, int verbose)
Definition dcs-ccdb.cxx:79
GLint GLint GLsizei GLint border
Definition glcorearb.h:275
struct _cl_event * event
Definition glcorearb.h:2982
GLdouble n
Definition glcorearb.h:1982
const GLuint GLenum const void * binary
Definition glcorearb.h:1898
GLint GLenum GLint x
Definition glcorearb.h:403
GLenum mode
Definition glcorearb.h:266
GLuint segment
Definition glcorearb.h:4945
GLint GLsizei count
Definition glcorearb.h:399
GLuint buffer
Definition glcorearb.h:655
GLuint entry
Definition glcorearb.h:5735
GLsizeiptr size
Definition glcorearb.h:659
GLuint color
Definition glcorearb.h:1272
GLuint GLenum * rate
Definition glcorearb.h:5735
const GLdouble * v
Definition glcorearb.h:832
GLenum array
Definition glcorearb.h:4274
GLuint const GLchar * name
Definition glcorearb.h:781
GLsizei const GLubyte * commands
Definition glcorearb.h:5468
const void * indirect
Definition glcorearb.h:1769
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition glcorearb.h:2513
GLint GLsizei width
Definition glcorearb.h:270
GLdouble f
Definition glcorearb.h:310
GLboolean GLboolean GLboolean b
Definition glcorearb.h:1233
GLsizei GLsizei GLchar * source
Definition glcorearb.h:798
GLenum GLint * range
Definition glcorearb.h:1899
GLsizei GLsizei GLfloat distance
Definition glcorearb.h:5506
GLsizei const GLfloat * value
Definition glcorearb.h:819
GLint GLint GLsizei GLint GLenum GLenum type
Definition glcorearb.h:275
GLenum GLsizei GLsizei GLint * values
Definition glcorearb.h:1576
GLboolean * data
Definition glcorearb.h:298
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
Definition glcorearb.h:4150
GLboolean GLboolean g
Definition glcorearb.h:1233
GLint GLenum GLboolean GLsizei stride
Definition glcorearb.h:867
GLuint segments
Definition glcorearb.h:4946
GLenum GLsizeiptr fontSize
Definition glcorearb.h:5519
GLfloat angle
Definition glcorearb.h:4071
GLuint GLint GLboolean GLint GLenum access
Definition glcorearb.h:2196
GLbitfield flags
Definition glcorearb.h:1570
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition glcorearb.h:1308
GLboolean enable
Definition glcorearb.h:3991
GLsizei const GLchar *const * path
Definition glcorearb.h:3591
GLuint GLsizei const GLchar * message
Definition glcorearb.h:2517
GLboolean r
Definition glcorearb.h:1233
GLfloat units
Definition glcorearb.h:402
GLuint start
Definition glcorearb.h:469
GLenum GLenum GLsizei len
Definition glcorearb.h:4232
GLenum GLfloat param
Definition glcorearb.h:271
GLboolean GLboolean GLboolean GLboolean a
Definition glcorearb.h:1233
GLenum attachment
Definition glcorearb.h:1302
GLint GLuint mask
Definition glcorearb.h:291
GLint GLint GLsizei GLint GLenum format
Definition glcorearb.h:275
GLuint memory
Definition glcorearb.h:5234
GLsizei const GLint * box
Definition glcorearb.h:4697
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
const GLuint * buffers
Definition glcorearb.h:656
GLsizeiptr const void GLenum usage
Definition glcorearb.h:659
Defining PrimaryVertex explicitly as messageable.
Definition TFIDInfo.h:20
GPUSettingsStandalone configStandalone
Definition genEvents.cxx:47
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
Defining DataPointCompositeObject explicitly as copiable.
FIXME: do not use data model tables.
void empty(int)
#define BeginConfig(name, instance)
Definition qconfig.h:325
#define AddHelpAll(cmd, cmdshort)
Definition qconfig.h:344
std::vector< std::string > split(const std::string &str, char delimiter=',')
uint32_t truncate(int32_t j, uint32_t val)
std::unique_ptr< GPUDisplayFrontendInterface > eventDisplay
GPUReconstruction * rec
void compare(std::string_view s1, std::string_view s2)
auto transformation
constexpr size_t min
target1_1 Fill(5)
constexpr size_t max
const int nEvents
Definition test_Fifo.cxx:27
coder decode(ctfImage, triggersD, clustersD)
std::vector< Cluster > clusters
for(int irof=0;irof< 1000;irof++)
std::vector< Digit > digits
std::vector< int > row
std::vector< ReadoutWindowData > rows
std::vector< Tracklet64 > tracklets