15#ifndef GPUCA_STANDALONE
27#include "GPUChainTrackingGetters.inc"
35#define GPUSETTINGS_ALL
69#include <sys/select.h>
94std::unique_ptr<GPUReconstructionTimeframe>
tf;
106 printf(
"Error parsing command line parameters\n");
111 printf(
"RecoSteps (bitmask for --recoSteps / --recoStepsGPU):\n");
112 for (
int32_t i = 0;
i < gpudatatypes::N_RECO_STEPS;
i++) {
113 printf(
"%10d (0x%04x): %s\n", 1 <<
i, 1 <<
i, gpudatatypes::RECO_STEP_NAMES[
i]);
117 printf(
"Config Dump before ReadConfiguration\n");
124 setlocale(LC_ALL,
"en_US.utf-8");
125 setlocale(LC_NUMERIC,
"en_US.utf-8");
131 printf(
"Setting affinitiy to restrict on CPU core %d\n",
configStandalone.cpuAffinity);
132 if (0 != sched_setaffinity(0,
sizeof(
mask), &
mask)) {
133 printf(
"Error setting CPU affinity\n");
138 printf(
"Setting FIFO scheduler\n");
140 sched_getparam(0, &
param);
141 param.sched_priority = 1;
142 if (0 != sched_setscheduler(0, SCHED_FIFO, &
param)) {
143 printf(
"Error setting scheduler\n");
152 feenableexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW);
154 bool detMode =
false, noFTZMode =
false;
155#ifdef GPUCA_DETERMINISTIC_MODE
158#ifdef GPUCA_DETERMINISTIC_NO_FTZ
167 printf(
"Affinity setting not supported on Windows\n");
171 printf(
"FIFO Scheduler setting not supported on Windows\n");
175 printf(
"FPE not supported on Windows\n");
180#warning Why was configStandalone.rec.tpc.mergerReadFromTrackerDirectly = 0 needed?
187#ifndef GPUCA_BUILD_QA
189 printf(
"QA not enabled in build\n");
194 printf(
"Cannot run asynchronous processing with double pipeline\n");
198 printf(
"Double pipeline mode needs at least 4 runs per event and external output. To cycle though multiple events, use --preloadEvents and --runs n for n iterations round-robin\n");
202 printf(
"Cannot run --MERGE and --SIMBUNCHES togeterh\n");
219 printf(
"Can only produce QA pdf output when input files are specified!\n");
245 printf(
"setO2Settings requires the usage of --inputMemory and --outputMemory as in O2\n");
263 bool forceEmptyMemory = getenv(
"LD_PRELOAD") && strstr(getenv(
"LD_PRELOAD"),
"valgrind") !=
nullptr;
265 if (forceEmptyMemory) {
266 printf(
"Valgrind detected, emptying GPU output memory to avoid false positive undefined reads");
271 if (forceEmptyMemory) {
293 printf(
"No GPU backend / device found, running on CPU is disabled due to runGPUforce\n");
305 printf(
"Config Dump after ReadConfiguration\n");
319 auto tmpTRDGeometry = std::make_unique<o2::trd::GeometryFlat>();
321 auto tmpTRDRecoParam = std::make_unique<GPUTRDRecoParam>();
323 auto tmpdEdxCalibContainer = std::make_unique<o2::tpc::CalibdEdxContainer>();
324 tmpdEdxCalibContainer->setDefaultZeroSupresssionThreshold();
325 tmpdEdxCalibContainer->setDefaultPolTopologyCorrection();
327 auto tmpTPCPadGainCalib = std::make_unique<TPCPadGainCalib>();
329#ifndef GPUCA_STANDALONE
333 ccdb.setFatalWhenNull(
false);
334 if (timestamp != 1) {
335 ccdb.setTimestamp(timestamp);
340 printf(
"Could not fetch the material LUT from the CCDB, not written\n");
346 printf(
"Wrote trivial calibration objects to current folder\n");
356 printf(
"Error reading event config file\n");
359 const char* tmptext =
configStandalone.noEvents ?
"Using default event settings, no event dir loaded" :
"Read event settings from dir ";
378 GPUSettingsProcessing procSet;
391 printf(
"ERROR: requested to overlay continuous data - not supported\n");
395 printf(
"Continuous mode forced\n");
412 printf(
"Standalone Test Framework for CA Tracker - Using CPU\n");
414 printf(
"Standalone Test Framework for CA Tracker - Using GPU\n");
421 throw std::runtime_error(
"Requested display not available");
423 printf(
"Enabling event display (%s backend)\n",
eventDisplay->frontendName());
426 procSet.runMC =
true;
431 procSet.runMC =
true;
434 steps.
steps = gpudatatypes::RecoStep::AllRecoSteps;
438 steps.
steps.
setBits(gpudatatypes::RecoStep::TRDTracking,
false);
448 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCMerging,
false);
449 steps.
steps.
setBits(gpudatatypes::RecoStep::TRDTracking,
false);
450 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCdEdx,
false);
451 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCCompression,
false);
452 steps.
steps.
setBits(gpudatatypes::RecoStep::Refit,
false);
456 steps.
steps.
setBits(gpudatatypes::RecoStep::TRDTracking,
false);
458 steps.
inputs.
set(gpudatatypes::InOutType::TPCClusters, gpudatatypes::InOutType::TRDTracklets);
459 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCDecompression,
false);
460 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCCompressedClusters,
false);
462 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCCompressedClusters,
true);
463 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCClusters,
false);
464 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCCompression,
false);
465 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCClusterFinding,
false);
466 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCDecompression,
true);
467 steps.
outputs.
setBits(gpudatatypes::InOutType::TPCCompressedClusters,
false);
470 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCClusters,
false);
472 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCClusterFinding,
false);
479 procSet.eventDisplay =
nullptr;
481 procSet.runQA =
false;
495 steps.
outputs.
setBits(gpudatatypes::InOutType::TPCMergedTracks, steps.
steps.
isSet(gpudatatypes::RecoStep::TPCMerging));
496 steps.
outputs.
setBits(gpudatatypes::InOutType::TPCCompressedClusters, steps.
steps.
isSet(gpudatatypes::RecoStep::TPCCompression));
498 steps.
outputs.
setBits(gpudatatypes::InOutType::TPCClusters, steps.
steps.
isSet(gpudatatypes::RecoStep::TPCClusterFinding));
500 if (steps.
steps.
isSet(gpudatatypes::RecoStep::TRDTracking)) {
501 if (procSet.createO2Output && !procSet.trdTrackModelO2) {
502 procSet.createO2Output = 1;
512 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCDecompression,
true);
513 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCdEdx,
true);
514 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCCompression,
false);
515 steps.
steps.
setBits(gpudatatypes::RecoStep::TPCClusterFinding,
false);
516 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCRaw,
false);
517 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCClusters,
false);
518 steps.
inputs.
setBits(gpudatatypes::InOutType::TPCCompressedClusters,
true);
519 steps.
outputs.
setBits(gpudatatypes::InOutType::TPCCompressedClusters,
false);
520 procSet.runMC =
false;
521 procSet.runQA = runAsyncQA;
523 procSet.runCompressionStatistics = 0;
525 procSet.tpcInputWithClusterRejection = 1;
527 recSet.tpc.disableRefitAttachment = 0xFF;
528 recSet.maxTrackQPtB5 = CAMath::Min(recSet.maxTrackQPtB5, recSet.tpc.rejectQPtB5);
552 procSet.o2PropagatorUseGPUField =
true;
555 printf(
"Error initializing GPUReconstruction!\n");
560 printf(
"ERROR registering memory for the GPU!!!\n");
566 printf(
"ERROR registering input memory for the GPU!!!\n");
585#if !defined(GPUCA_RUN2) && defined(GPUCA_BUILD_QA) && defined(GPUCA_STANDALONE)
591 throw std::runtime_error(
"Error reading O2 MC dump");
601 if (
tf->LoadCreateTimeFrame(iEvent)) {
605 if (
tf->LoadMergedEvents(iEvent)) {
615 if (encodeZS || zsFilter) {
617 printf(
"Need digit input to run ZS\n");
633 printf(
"Converting Legacy Raw Cluster to Native\n");
648 printf(
"Need cluster native data for on-the-fly TPC transform\n");
661 if (
t->GetProcessingSettings().createO2Output) {
662 nTracks +=
t->mIOPtrs.nOutputTracksTPCO2;
664 for (
uint32_t k = 0; k <
t->mIOPtrs.nMergedTracks; k++) {
665 if (
t->mIOPtrs.mergedTracks[k].OK()) {
670 if (nTracksTotal && nClustersTotal) {
671 *nTracksTotal += nTracks;
672 *nClustersTotal +=
t->mIOPtrs.nMergedTrackHits;
678 int32_t iRun = 0, iteration = 0;
681 printf(
"Run %d (thread %d)\n", iteration + 1, threadId);
691 printf(
"Running synchronous phase\n");
694 chainTrackingUse->
mIOPtrs = ioPtrs;
697 timerPipeline->Start();
707 timerPipeline->Stop();
714 if (tmpRetVal == GPUReconstruction::retValValue::retOk || tmpRetVal == GPUReconstruction::retValValue::retDoExit) {
715 OutputStat(chainTrackingUse, iRun == 0 ? nTracksTotal :
nullptr, iRun == 0 ? nClustersTotal :
nullptr);
718 if (tmpRetVal == GPUReconstruction::retValValue::retOk &&
configStandalone.testSyncAsync) {
746 if (tmpRetVal == GPUReconstruction::retValValue::retOk || tmpRetVal == GPUReconstruction::retValValue::retDoExit) {
755 if (tmpRetVal == GPUReconstruction::retValValue::retDoExit) {
759 if (tmpRetVal == GPUReconstruction::retValValue::retNonFatalErrorCode &&
configStandalone.proc.ignoreNonFatalGPUErrors) {
760 printf(
"GPU Standalone Benchmark: Non-FATAL GPU error occured, ignoring\n");
762 if (tmpRetVal != GPUReconstruction::retValValue::retDoExit) {
763 printf(
"GPU Standalone Benchmark: Error occured\n");
778 std::unique_ptr<GPUReconstruction> recUnique, recUniqueAsync, recUniquePipeline;
789 deviceSet.
master =
nullptr;
791 rec = recUnique.get();
802 printf(
"Error initializing GPUReconstruction\n");
836 std::unique_ptr<std::thread> pipelineThread;
842 std::random_device
rd;
882 printf(
"No event data found in event folder\n");
892 printf(
"Preloading events%s",
configStandalone.proc.debugLevel >= 2 ?
"\n" :
"");
908 printf(
"\nRUN2: %d\n", iRunOuter);
932 snprintf(fname, 1024,
"event.%d.dump", nEventsProcessed);
934 if (nEventsProcessed == 0) {
942 printf(
"Cannot override max time bin for non-continuous data!\n");
960 double pipelineWalltime = 1.;
962 printf(
"No processing, no events loaded\n");
966 if (
configStandalone.proc.debugLevel < 2 && (
RunBenchmark(
rec,
chainTracking, 1, iEvent, &nTracksTotal, &nClustersTotal) ||
RunBenchmark(
recPipeline,
chainTrackingPipeline, 2, iEvent, &nTracksTotal, &nClustersTotal))) {
971 if (pipeline1.get() || pipeline2.get()) {
974 pipelineWalltime = timerPipeline.GetElapsedTime() / (
configStandalone.runs - 2);
975 printf(
"Pipeline wall time: %f, %d iterations, %f per event\n", timerPipeline.GetElapsedTime(),
configStandalone.runs - 2, pipelineWalltime);
977 printf(
"Processing Event %d\n", iEvent);
988 const double colRate = 50000;
989 const double orbitRate = 11245;
990 const double nClsPerTF = 755851. * nOrbits * colRate / orbitRate;
992 const double nGPUsReq = timePerTF * orbitRate / nOrbits;
994 snprintf(stat, 1024,
"Sync phase: %.2f sec per %d orbit TF, %.1f GPUs required", timePerTF, nOrbits, nGPUsReq);
997 snprintf(stat + strlen(stat), 1024 - strlen(stat),
" - Async phase: %f sec per TF", timePerTF);
1012 if (nEventsProcessed > 1) {
1013 printf(
"Total: %ld clusters, %ld tracks\n", nClustersTotal, nTracksTotal);
1024 fedisableexcept(FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW);
1030 pipelineThread->join();
1039 printf(
"Error unregistering memory\n");
1045 printf(
"Press a key to exit!\n");
Definition of container class for dE/dx corrections.
Container to store compressed TPC cluster data.
#define GPUCA_EVDUMP_FILE
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 runs
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
Declarations for the wrapper for the set of cylindrical material layers.
double GetCurrentElapsedTime(bool reset=false)
bitfield & setBits(const bitfield v, bool w)
bool isSet(const bitfield &v) const
static MatLayerCylSet * rectifyPtrFromFile(MatLayerCylSet *ptr)
GPUd() value_type estimateLTFast(o2 static GPUd() float estimateLTIncrement(const o2 PropagatorImpl * Instance(bool uninitialized=false)
static BasicCCDBManager & instance()
static void ApplySyncSettings(GPUSettingsProcessing &proc, GPUSettingsRec &rec, gpudatatypes::RecoStepField &steps, bool syncMode, int32_t dEdxMode=-2)
void SetQAFromForeignChain(GPUChainTracking *chain)
void SetCalibObjects(const GPUCalibObjectsConst &obj)
void ConvertZSFilter(bool zs12bit)
void SetO2Propagator(const o2::base::Propagator *prop)
const GPUTRDGeometry * GetTRDGeometry() const
const TPCFastTransformPOD * GetTPCTransform() const
const o2::base::MatLayerCylSet * GetMatLUT() const
void ConvertRun2RawToNative()
const GPUSettingsDisplay * mConfigDisplay
void DumpData(const char *filename, const GPUTrackingInOutPointers *ioPtrs=nullptr)
const GPUQA * GetQA() const
void ConvertZSEncoder(int32_t version)
GPUTrackingInOutPointers & mIOPtrs
struct o2::gpu::GPUChainTracking::InOutMemory mIOMem
int32_t ReadData(const char *filename)
const GPUSettingsQA * mConfigQA
static constexpr int32_t NSECTORS
const GPUConstantMem * GetProcessors() const
static GPUDisplayFrontendInterface * getFrontend(const char *type)
int32_t ReadO2MCData(const char *filename)
void UpdateChain(GPUChainTracking *chain)
static int32_t GetMaxTimeBin(const o2::tpc::ClusterNativeAccess &native)
static constexpr int32_t TPCZ
static constexpr int32_t DRIFT_TIME
static DeviceType GetDeviceType(const char *type)
void SetInputControl(void *ptr, size_t size)
void TerminatePipelineWorker()
virtual void startGPUProfiling()
void SetResetTimers(bool reset)
static bool CheckInstanceAvailable(DeviceType type, bool verbose)
void SetSettings(float solenoidBzNominalGPU, const GPURecoStepConfiguration *workflow=nullptr)
T * AddChain(Args... args)
static GPUReconstruction * CreateInstance(const GPUSettingsDeviceBackend &cfg)
void UpdateSettings(const GPUSettingsGRP *g, const GPUSettingsProcessing *p=nullptr, const GPUSettingsRecDynamic *d=nullptr)
virtual int32_t RunChains()=0
const GPUParam & GetParam() const
void ClearAllocatedMemory(bool clearOutputs=true)
double GetStatKernelTime()
const GPUSettingsProcessing & GetProcessingSettings() const
void DumpSettings(const char *dir="")
int32_t unregisterMemoryForGPU(const void *ptr)
int32_t registerMemoryForGPU(const void *ptr, size_t size)
const GPUSettingsGRP & GetGRPSettings() const
void SetDebugLevelTmp(int32_t level)
virtual void PrintKernelOccupancies()
virtual void endGPUProfiling()
int32_t ReadSettings(const char *dir="")
void SetOutputControl(const GPUOutputControl &v)
static void RunEventGenerator(GPUChainTracking *rec, const std::string &dir)
static Mapper & instance(const std::string mappingDir="")
GLenum GLenum GLsizei len
DeviceType GetDeviceType(const char *type)
GPUSettingsStandalone configStandalone
int32_t qConfigParse(int argc, const char **argv, const char *)
std::string to_string(gsl::span< T, Size > span)
std::unique_ptr< GPUReconstructionTimeframe > tf
std::unique_ptr< char, GPUReconstruction::alignedDefaultBufferDeleter > outputmemoryPipeline(nullptr, GPUReconstruction::alignedDefaultBufferDeleter())
std::unique_ptr< char, GPUReconstruction::alignedDefaultBufferDeleter > inputmemory(nullptr, GPUReconstruction::alignedDefaultBufferDeleter())
int32_t RunBenchmark(GPUReconstruction *recUse, GPUChainTracking *chainTrackingUse, int32_t runs, int32_t iEvent, int64_t *nTracksTotal, int64_t *nClustersTotal, int32_t threadId=0, HighResTimer *timerPipeline=nullptr)
int32_t SetupReconstruction()
std::atomic< uint32_t > nIteration
GPUReconstruction * recPipeline
int32_t nEventsInDirectory
uint32_t syncAsyncDecodedClusters
int32_t ReadConfiguration(int argc, char **argv)
std::unique_ptr< char, GPUReconstruction::alignedDefaultBufferDeleter > outputmemory(nullptr, GPUReconstruction::alignedDefaultBufferDeleter())
int32_t LoadEvent(int32_t iEvent, int32_t x)
std::vector< GPUTrackingInOutPointers > ioPtrEvents
GPUChainITS * chainITSPipeline
int32_t ReadEvent(int32_t n)
std::vector< GPUChainTracking::InOutMemory > ioMemEvents
std::unique_ptr< GPUDisplayFrontendInterface > eventDisplay
void CreateTrivialCalibObjects(int64_t timestamp)
GPUChainTracking * chainTrackingAsync
GPUChainITS * chainITSAsync
GPUChainTracking * chainTrackingPipeline
GPUReconstruction * recAsync
void OutputStat(GPUChainTracking *t, int64_t *nTracksTotal=nullptr, int64_t *nClustersTotal=nullptr)
std::atomic< uint32_t > nIterationEnd
GPUChainTracking * chainTracking
S< o2::trd::GeometryFlat >::type * trdGeometry
S< o2::tpc::CalibdEdxContainer >::type * dEdxCalibContainer
S< TPCZSLinkMapping >::type * tpcZSLinkMapping
S< TPCFastTransformPOD >::type * fastTransform
S< GPUTRDRecoParam >::type * trdRecoParam
S< TPCPadGainCalib >::type * tpcPadGain
S< o2::base::MatLayerCylSet >::type * matLUT
gpudatatypes::RecoStepField steps
gpudatatypes::InOutTypeField inputs
gpudatatypes::RecoStepField stepsGPUMask
gpudatatypes::InOutTypeField outputs
GPUReconstruction * master
int32_t doCompClusterDecode
int32_t grpContinuousMaxTimeBin
float solenoidBzNominalGPU
const o2::tpc::ClusterNativeAccess * clustersNative
const GPUTPCMCInfo * mcInfosTPC
uint32_t nClusterData[NSECTORS]
uint32_t nRawClusters[NSECTORS]
const o2::tpc::CompressedClustersFlat * tpcCompressedClusters
const AliHLTTPCClusterMCLabel * mcLabelsTPC
const GPUTrackingInOutZS * tpcZS
const AliHLTTPCRawCluster * rawClusters[NSECTORS]
const GPUTPCClusterData * clusterData[NSECTORS]
const GPUTrackingInOutDigits * tpcPackedDigits
const GPUTPCMCInfoCol * mcInfosTPCCol
GPUTPCGMPolynomialField polynomialField
unsigned int nClustersTotal
unsigned int nUnattachedClusters
unsigned int nAttachedClusters
typename std::vector< T, vecpod_allocator< T > > vecpod