Project
Loading...
Searching...
No Matches
GPUChainTrackingIO.cxx
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#include "GPUChainTracking.h"
16#include "GPUReconstructionIO.h"
17#include "GPUTPCClusterData.h"
18#include "GPUTPCSectorOutput.h"
20#include "GPUTPCGMMergedTrack.h"
22#include "GPUTPCTrack.h"
23#include "GPUTPCHitId.h"
24#include "GPUTRDTrackletWord.h"
26#include "GPUTPCMCInfo.h"
27#include "GPUTRDTrack.h"
28#include "GPUTRDTracker.h"
29#include "AliHLTTPCRawCluster.h"
31#include "GPUQA.h"
32#include "GPULogging.h"
36#include "TPCZSLinkMapping.h"
37#include "GPUTriggerOutputs.h"
38
43#include "GPUHostDataTypes.h"
45#include "CalibdEdxContainer.h"
46
47#include "TPCFastTransform.h"
49
50#include "utils/linux_helpers.h"
51
52using namespace o2::gpu;
53
54#include "GPUO2DataTypes.h"
55
56using namespace o2::tpc;
57using namespace o2::trd;
58using namespace o2::dataformats;
59
60static constexpr uint32_t DUMP_HEADER_SIZE = 4;
61static constexpr char DUMP_HEADER[DUMP_HEADER_SIZE + 1] = "CAv1";
62
67
69{
70 FILE* fp = fopen(filename, "w+b");
71 if (fp == nullptr) {
72 return;
73 }
74 fwrite(DUMP_HEADER, 1, DUMP_HEADER_SIZE, fp);
76 DumpData(fp, mIOPtrs.clusterData, mIOPtrs.nClusterData, InOutPointerType::CLUSTER_DATA);
77 DumpData(fp, mIOPtrs.rawClusters, mIOPtrs.nRawClusters, InOutPointerType::RAW_CLUSTERS);
79 if (DumpData(fp, &mIOPtrs.clustersNative->clustersLinear, &mIOPtrs.clustersNative->nClustersTotal, InOutPointerType::CLUSTERS_NATIVE)) {
83 std::pair<const char*, size_t> tmp = {buffer.data(), buffer.size()};
84 DumpData(fp, &tmp.first, &tmp.second, InOutPointerType::CLUSTER_NATIVE_MC);
85 }
86 }
87 }
90 const char* ptrs[NSECTORS];
91 size_t sizes[NSECTORS];
92 for (uint32_t i = 0; i < NSECTORS; i++) {
94 const auto& buffer = mIOPtrs.tpcPackedDigits->tpcDigitsMC->v[i]->getBuffer();
95 ptrs[i] = buffer.data();
96 sizes[i] = buffer.size();
97 } else {
98 ptrs[i] = nullptr;
99 sizes[i] = 0;
100 }
101 }
102 DumpData(fp, ptrs, sizes, InOutPointerType::TPC_DIGIT_MC);
103 }
104 }
105 if (mIOPtrs.tpcZS) {
106 size_t total = 0;
107 for (int32_t i = 0; i < NSECTORS; i++) {
108 for (uint32_t j = 0; j < GPUTrackingInOutZS::NENDPOINTS; j++) {
109 for (uint32_t k = 0; k < mIOPtrs.tpcZS->sector[i].count[j]; k++) {
110 total += mIOPtrs.tpcZS->sector[i].nZSPtr[j][k];
111 }
112 }
113 }
114 std::vector<std::array<char, TPCZSHDR::TPC_ZS_PAGE_SIZE>> pages(total);
115 char* ptr = pages[0].data();
117 total = 0;
118 for (int32_t i = 0; i < NSECTORS; i++) {
119 for (uint32_t j = 0; j < GPUTrackingInOutZS::NENDPOINTS; j++) {
120 for (uint32_t k = 0; k < mIOPtrs.tpcZS->sector[i].count[j]; k++) {
122 counts.count[i][j] += mIOPtrs.tpcZS->sector[i].nZSPtr[j][k];
123 total += mIOPtrs.tpcZS->sector[i].nZSPtr[j][k];
124 }
125 }
126 }
128 if (DumpData(fp, &ptr, &total, InOutPointerType::TPC_ZS)) {
129 fwrite(&counts, sizeof(counts), 1, fp);
130 }
131 }
134 throw std::runtime_error("Cannot dump non-flat compressed clusters");
135 }
136 char* ptr = (char*)mIOPtrs.tpcCompressedClusters;
138 DumpData(fp, &ptr, &size, InOutPointerType::TPC_COMPRESSED_CL);
139 }
140 if (mIOPtrs.settingsTF) {
141 uint32_t n = 1;
142 DumpData(fp, &mIOPtrs.settingsTF, &n, InOutPointerType::TF_SETTINGS);
143 }
144 DumpData(fp, mIOPtrs.sectorTracks, mIOPtrs.nSectorTracks, InOutPointerType::SECTOR_OUT_TRACK);
145 DumpData(fp, mIOPtrs.sectorClusters, mIOPtrs.nSectorClusters, InOutPointerType::SECTOR_OUT_CLUSTER);
146 DumpData(fp, &mIOPtrs.mcLabelsTPC, &mIOPtrs.nMCLabelsTPC, InOutPointerType::MC_LABEL_TPC);
147 DumpData(fp, &mIOPtrs.mcInfosTPC, &mIOPtrs.nMCInfosTPC, InOutPointerType::MC_INFO_TPC);
148 DumpData(fp, &mIOPtrs.mcInfosTPCCol, &mIOPtrs.nMCInfosTPCCol, InOutPointerType::MC_INFO_TPC);
149 DumpData(fp, &mIOPtrs.mergedTracks, &mIOPtrs.nMergedTracks, InOutPointerType::MERGED_TRACK);
150 DumpData(fp, &mIOPtrs.mergedTrackHits, &mIOPtrs.nMergedTrackHits, InOutPointerType::MERGED_TRACK_HIT);
151 DumpData(fp, &mIOPtrs.trdTracks, &mIOPtrs.nTRDTracks, InOutPointerType::TRD_TRACK);
152 DumpData(fp, &mIOPtrs.trdTracklets, &mIOPtrs.nTRDTracklets, InOutPointerType::TRD_TRACKLET);
154 DumpData(fp, &mIOPtrs.trdSpacePoints, &mIOPtrs.nTRDTracklets, InOutPointerType::TRD_SPACEPOINT);
155 }
156 DumpData(fp, &mIOPtrs.trdTriggerTimes, &mIOPtrs.nTRDTriggerRecords, InOutPointerType::TRD_TRIGGERRECORDS);
157 DumpData(fp, &mIOPtrs.trdTrackletIdxFirst, &mIOPtrs.nTRDTriggerRecords, InOutPointerType::TRD_TRIGGERRECORDS);
158 DumpData(fp, &mIOPtrs.trdTrigRecMask, &mIOPtrs.nTRDTriggerRecords, InOutPointerType::TRD_TRIGGERRECORDS);
159 fclose(fp);
160}
161
163{
165 FILE* fp = fopen(filename, "rb");
166 if (fp == nullptr) {
167 return (1);
168 }
169
170 char buf[DUMP_HEADER_SIZE + 1] = "";
171 size_t r = fread(buf, 1, DUMP_HEADER_SIZE, fp);
172 if (strncmp(DUMP_HEADER, buf, DUMP_HEADER_SIZE)) {
173 GPUError("Invalid file header");
174 fclose(fp);
175 return -1;
176 }
177 GeometryType geo;
178 r = fread(&geo, sizeof(geo), 1, fp);
180 GPUError("File has invalid geometry (%s v.s. %s)", GPUReconstruction::GEOMETRY_TYPE_NAMES[(int32_t)geo], GPUReconstruction::GEOMETRY_TYPE_NAMES[(int32_t)GPUReconstruction::geometryType]);
181 fclose(fp);
182 return 1;
183 }
184 GPUTPCClusterData* ptrClusterData[NSECTORS];
185 ReadData(fp, mIOPtrs.clusterData, mIOPtrs.nClusterData, mIOMem.clusterData, InOutPointerType::CLUSTER_DATA, ptrClusterData);
186 AliHLTTPCRawCluster* ptrRawClusters[NSECTORS];
187 ReadData(fp, mIOPtrs.rawClusters, mIOPtrs.nRawClusters, mIOMem.rawClusters, InOutPointerType::RAW_CLUSTERS, ptrRawClusters);
188 int32_t nClustersTotal = 0;
190 if (ReadData<ClusterNative>(fp, &mIOMem.clusterNativeAccess->clustersLinear, &mIOMem.clusterNativeAccess->nClustersTotal, &mIOMem.clustersNative, InOutPointerType::CLUSTERS_NATIVE)) {
191 r = fread(&mIOMem.clusterNativeAccess->nClusters[0][0], sizeof(mIOMem.clusterNativeAccess->nClusters[0][0]), NSECTORS * GPUCA_ROW_COUNT, fp);
192 mIOMem.clusterNativeAccess->setOffsetPtrs();
194 std::pair<const char*, size_t> tmp = {nullptr, 0};
195 if (ReadData(fp, &tmp.first, &tmp.second, &mIOMem.clusterNativeMC, InOutPointerType::CLUSTER_NATIVE_MC)) {
196 mIOMem.clusterNativeMCView = std::make_unique<ConstMCLabelContainerView>(gsl::span<const char>(tmp.first, tmp.first + tmp.second));
197 mIOMem.clusterNativeAccess->clustersMCTruth = mIOMem.clusterNativeMCView.get();
198 }
199 }
201 if (ReadData(fp, mIOMem.digitMap->tpcDigits, mIOMem.digitMap->nTPCDigits, mIOMem.tpcDigits, InOutPointerType::TPC_DIGIT)) {
203 const char* ptrs[NSECTORS];
204 size_t sizes[NSECTORS];
205 if (ReadData(fp, ptrs, sizes, mIOMem.tpcDigitsMC, InOutPointerType::TPC_DIGIT_MC)) {
206 mIOMem.tpcDigitMCMap = std::make_unique<GPUTPCDigitsMCInput>();
208 for (uint32_t i = 0; i < NSECTORS; i++) {
209 if (sizes[i]) {
210 mIOMem.tpcDigitMCView.get()[i] = gsl::span<const char>(ptrs[i], ptrs[i] + sizes[i]);
212 } else {
213 mIOMem.tpcDigitMCMap->v[i] = nullptr;
214 }
215 }
216 mIOMem.digitMap->tpcDigitsMC = mIOMem.tpcDigitMCMap.get();
217 }
218 }
219 const char* ptr;
220 size_t total;
221 char* ptrZSPages;
222 if (ReadData(fp, &ptr, &total, &mIOMem.tpcZSpagesChar, InOutPointerType::TPC_ZS, &ptrZSPages)) {
224 r = fread(&counts, sizeof(counts), 1, fp);
227 total = 0;
228 for (int32_t i = 0; i < NSECTORS; i++) {
229 for (uint32_t j = 0; j < GPUTrackingInOutZS::NENDPOINTS; j++) {
230 mIOMem.tpcZSmeta2->ptr[i][j] = &ptrZSPages[total * TPCZSHDR::TPC_ZS_PAGE_SIZE];
231 mIOMem.tpcZSmeta->sector[i].zsPtr[j] = &mIOMem.tpcZSmeta2->ptr[i][j];
232 mIOMem.tpcZSmeta2->n[i][j] = counts.count[i][j];
233 mIOMem.tpcZSmeta->sector[i].nZSPtr[j] = &mIOMem.tpcZSmeta2->n[i][j];
234 mIOMem.tpcZSmeta->sector[i].count[j] = 1;
235 total += counts.count[i][j];
236 }
237 }
239 }
240 if (ReadData(fp, &ptr, &total, &mIOMem.tpcCompressedClusters, InOutPointerType::TPC_COMPRESSED_CL)) {
242 }
243 uint32_t n;
244 ReadData(fp, &mIOPtrs.settingsTF, &n, &mIOMem.settingsTF, InOutPointerType::TF_SETTINGS);
245 ReadData(fp, mIOPtrs.sectorTracks, mIOPtrs.nSectorTracks, mIOMem.sectorTracks, InOutPointerType::SECTOR_OUT_TRACK);
246 ReadData(fp, mIOPtrs.sectorClusters, mIOPtrs.nSectorClusters, mIOMem.sectorClusters, InOutPointerType::SECTOR_OUT_CLUSTER);
247 ReadData(fp, &mIOPtrs.mcLabelsTPC, &mIOPtrs.nMCLabelsTPC, &mIOMem.mcLabelsTPC, InOutPointerType::MC_LABEL_TPC);
248 ReadData(fp, &mIOPtrs.mcInfosTPC, &mIOPtrs.nMCInfosTPC, &mIOMem.mcInfosTPC, InOutPointerType::MC_INFO_TPC);
249 ReadData(fp, &mIOPtrs.mcInfosTPCCol, &mIOPtrs.nMCInfosTPCCol, &mIOMem.mcInfosTPCCol, InOutPointerType::MC_INFO_TPC);
250 ReadData(fp, &mIOPtrs.mergedTracks, &mIOPtrs.nMergedTracks, &mIOMem.mergedTracks, InOutPointerType::MERGED_TRACK);
251 ReadData(fp, &mIOPtrs.mergedTrackHits, &mIOPtrs.nMergedTrackHits, &mIOMem.mergedTrackHits, InOutPointerType::MERGED_TRACK_HIT);
252 ReadData(fp, &mIOPtrs.trdTracks, &mIOPtrs.nTRDTracks, &mIOMem.trdTracks, InOutPointerType::TRD_TRACK);
253 ReadData(fp, &mIOPtrs.trdTracklets, &mIOPtrs.nTRDTracklets, &mIOMem.trdTracklets, InOutPointerType::TRD_TRACKLET);
254 uint32_t dummy = 0;
255 ReadData(fp, &mIOPtrs.trdSpacePoints, &dummy, &mIOMem.trdSpacePoints, InOutPointerType::TRD_SPACEPOINT);
256 ReadData(fp, &mIOPtrs.trdTriggerTimes, &mIOPtrs.nTRDTriggerRecords, &mIOMem.trdTriggerTimes, InOutPointerType::TRD_TRIGGERRECORDS);
257 ReadData(fp, &mIOPtrs.trdTrackletIdxFirst, &mIOPtrs.nTRDTriggerRecords, &mIOMem.trdTrackletIdxFirst, InOutPointerType::TRD_TRIGGERRECORDS);
258 ReadData(fp, &mIOPtrs.trdTrigRecMask, &mIOPtrs.nTRDTriggerRecords, &mIOMem.trdTrigRecMask, InOutPointerType::TRD_TRIGGERRECORDS);
259
260 size_t fptr = ftell(fp);
261 fseek(fp, 0, SEEK_END);
262 size_t fend = ftell(fp);
263 fclose(fp);
264 if (fptr != fend) {
265 GPUError("Error reading data file, reading incomplete");
266 return 1;
267 }
268 (void)r;
269 for (uint32_t i = 0; i < NSECTORS; i++) {
270 for (uint32_t j = 0; j < mIOPtrs.nClusterData[i]; j++) {
271 ptrClusterData[i][j].id = nClustersTotal++;
272 if ((uint32_t)ptrClusterData[i][j].amp >= 25 * 1024) {
273 GPUError("Invalid cluster charge, truncating (%d >= %d)", (int32_t)ptrClusterData[i][j].amp, 25 * 1024);
274 ptrClusterData[i][j].amp = 25 * 1024 - 1;
275 }
276 }
277 for (uint32_t j = 0; j < mIOPtrs.nRawClusters[i]; j++) {
278 if ((uint32_t)mIOMem.rawClusters[i][j].GetCharge() >= 25 * 1024) {
279 GPUError("Invalid raw cluster charge, truncating (%d >= %d)", (int32_t)ptrRawClusters[i][j].GetCharge(), 25 * 1024);
280 ptrRawClusters[i][j].SetCharge(25 * 1024 - 1);
281 }
282 if ((uint32_t)mIOPtrs.rawClusters[i][j].GetQMax() >= 1024) {
283 GPUError("Invalid raw cluster charge max, truncating (%d >= %d)", (int32_t)ptrRawClusters[i][j].GetQMax(), 1024);
284 ptrRawClusters[i][j].SetQMax(1024 - 1);
285 }
286 }
287 }
288
289 return (0);
290}
291
293{
294 std::string f;
295 if (processors()->calibObjects.fastTransform != nullptr) {
296 f = dir;
297 f += "tpctransform.dump";
298 DumpFlatObjectToFile(processors()->calibObjects.fastTransform, f.c_str());
299 }
300 if (processors()->calibObjects.fastTransformRef != nullptr) {
301 f = dir;
302 f += "tpctransformref.dump";
303 DumpFlatObjectToFile(processors()->calibObjects.fastTransformRef, f.c_str());
304 }
305 if (processors()->calibObjects.fastTransformMShape != nullptr) {
306 f = dir;
307 f += "tpctransformmshape.dump";
308 DumpFlatObjectToFile(processors()->calibObjects.fastTransformMShape, f.c_str());
309 }
310 if (processors()->calibObjects.fastTransformHelper != nullptr) {
311 f = dir;
312 f += "tpctransformhelper.dump";
313 DumpStructToFile(processors()->calibObjects.fastTransformHelper, f.c_str());
314 }
315 if (processors()->calibObjects.tpcPadGain != nullptr) {
316 f = dir;
317 f += "tpcpadgaincalib.dump";
318 DumpStructToFile(processors()->calibObjects.tpcPadGain, f.c_str());
319 }
320 if (processors()->calibObjects.tpcZSLinkMapping != nullptr) {
321 f = dir;
322 f += "tpczslinkmapping.dump";
323 DumpStructToFile(processors()->calibObjects.tpcZSLinkMapping, f.c_str());
324 }
325 if (processors()->calibObjects.dEdxCalibContainer != nullptr) {
326 f = dir;
327 f += "dEdxCalibContainer.dump";
328 DumpFlatObjectToFile(processors()->calibObjects.dEdxCalibContainer, f.c_str());
329 }
330 if (processors()->calibObjects.matLUT != nullptr) {
331 f = dir;
332 f += "matlut.dump";
333 DumpFlatObjectToFile(processors()->calibObjects.matLUT, f.c_str());
334 }
335 if (processors()->calibObjects.trdGeometry != nullptr) {
336 f = dir;
337 f += "trdgeometry.dump";
338 DumpStructToFile(processors()->calibObjects.trdGeometry, f.c_str());
339 }
340}
341
343{
344 std::string f;
345 f = dir;
346 f += "tpctransform.dump";
347 mTPCFastTransformU = ReadFlatObjectFromFile<TPCFastTransform>(f.c_str());
349 f = dir;
350 f += "tpctransformref.dump";
351 mTPCFastTransformRefU = ReadFlatObjectFromFile<TPCFastTransform>(f.c_str());
353 f = dir;
354 f += "tpctransformmshape.dump";
355 mTPCFastTransformMShapeU = ReadFlatObjectFromFile<TPCFastTransform>(f.c_str());
357 f = dir;
358 f += "tpctransformhelper.dump";
359 mTPCFastTransformHelperU = ReadStructFromFile<CorrectionMapsHelper>(f.c_str());
360 if ((processors()->calibObjects.fastTransformHelper = mTPCFastTransformHelperU.get())) {
363 mTPCFastTransformHelperU->setCorrMapMShape(mTPCFastTransformMShapeU.get());
364 }
365 f = dir;
366 f += "tpcpadgaincalib.dump";
367 mTPCPadGainCalibU = ReadStructFromFile<TPCPadGainCalib>(f.c_str());
369 f = dir;
370 f += "tpczslinkmapping.dump";
371 mTPCZSLinkMappingU = ReadStructFromFile<TPCZSLinkMapping>(f.c_str());
373 f = dir;
374 f += "dEdxCalibContainer.dump";
375 mdEdxCalibContainerU = ReadFlatObjectFromFile<o2::tpc::CalibdEdxContainer>(f.c_str());
377 f = dir;
378 f += "matlut.dump";
379 mMatLUTU = ReadFlatObjectFromFile<o2::base::MatLayerCylSet>(f.c_str());
381 f = dir;
382 f += "trdgeometry.dump";
383 mTRDGeometryU = ReadStructFromFile<o2::trd::GeometryFlat>(f.c_str());
385}
Definition of container class for dE/dx corrections.
Helper class to access correction maps.
Definition of the TPC Digit.
int32_t i
#define GPUCA_ROW_COUNT
Online TRD tracker based on extrapolated TPC tracks.
Used for storing the MC labels for the TRD tracklets.
TRD Tracklet word for GPU tracker - 32bit tracklet info + half chamber ID + index.
Definition of a container to keep Monte Carlo truth external to simulation objects.
uint32_t j
Definition RawData.h:0
Definition of TPCFastTransform class.
TBranch * ptr
Definitions of TPC Zero Suppression Data Headers.
const gsl::span< const char > & getBuffer() const
std::unique_ptr< o2::base::MatLayerCylSet > mMatLUTU
std::unique_ptr< TPCFastTransform > mTPCFastTransformMShapeU
void ReadSettings(const char *dir="") override
std::unique_ptr< CorrectionMapsHelper > mTPCFastTransformHelperU
std::unique_ptr< TPCFastTransform > mTPCFastTransformRefU
void DumpData(const char *filename)
std::unique_ptr< TPCPadGainCalib > mTPCPadGainCalibU
std::unique_ptr< o2::tpc::CalibdEdxContainer > mdEdxCalibContainerU
std::unique_ptr< o2::trd::GeometryFlat > mTRDGeometryU
std::unique_ptr< TPCZSLinkMapping > mTPCZSLinkMappingU
std::unique_ptr< TPCFastTransform > mTPCFastTransformU
GPUTrackingInOutPointers & mIOPtrs
struct o2::gpu::GPUChainTracking::InOutMemory mIOMem
int32_t ReadData(const char *filename)
void DumpSettings(const char *dir="") override
GPUConstantMem * processors()
Definition GPUChain.h:80
void DumpStructToFile(const T *obj, const char *file)
Definition GPUChain.h:159
GPUReconstruction::GeometryType GeometryType
Definition GPUChain.h:32
static constexpr int32_t NSECTORS
Definition GPUChain.h:54
void DumpFlatObjectToFile(const T *obj, const char *file)
Definition GPUChain.h:149
static constexpr GeometryType geometryType
static constexpr const char *const GEOMETRY_TYPE_NAMES[]
GLdouble n
Definition glcorearb.h:1982
GLuint buffer
Definition glcorearb.h:655
GLsizeiptr size
Definition glcorearb.h:659
GLuint GLsizei const GLuint const GLintptr const GLsizeiptr * sizes
Definition glcorearb.h:2595
GLdouble f
Definition glcorearb.h:310
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLboolean r
Definition glcorearb.h:1233
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition glcorearb.h:2514
Definition of a container to keep/associate and arbitrary number of labels associated to an index wit...
Global TPC definitions and constants.
Definition SimTraits.h:167
std::string filename()
void SetQMax(uint16_t qmax)
void SetCharge(uint16_t charge)
S< o2::trd::GeometryFlat >::type * trdGeometry
S< o2::tpc::CalibdEdxContainer >::type * dEdxCalibContainer
S< TPCZSLinkMapping >::type * tpcZSLinkMapping
S< TPCFastTransform >::type * fastTransform
S< TPCPadGainCalib >::type * tpcPadGain
S< o2::base::MatLayerCylSet >::type * matLUT
S< TPCFastTransform >::type * fastTransformRef
S< TPCFastTransform >::type * fastTransformMShape
std::unique_ptr< o2::tpc::Digit[]> tpcDigits[NSECTORS]
std::unique_ptr< char[]> tpcCompressedClusters
std::unique_ptr< GPUTPCMCInfo[]> mcInfosTPC
std::unique_ptr< char[]> tpcDigitsMC[NSECTORS]
std::unique_ptr< GPUTRDTrackletWord[]> trdTracklets
std::unique_ptr< o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel >[]> tpcDigitMCView
std::unique_ptr< GPUTPCMCInfoCol[]> mcInfosTPCCol
std::unique_ptr< GPUTPCGMMergedTrackHit[]> mergedTrackHits
std::unique_ptr< int32_t[]> trdTrackletIdxFirst
std::unique_ptr< GPUTPCGMMergedTrack[]> mergedTracks
std::unique_ptr< AliHLTTPCClusterMCLabel[]> mcLabelsTPC
std::unique_ptr< o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel > > clusterNativeMCView
std::unique_ptr< GPUTrackingInOutDigits > digitMap
std::unique_ptr< GPUTPCClusterData[]> clusterData[NSECTORS]
std::unique_ptr< o2::tpc::ClusterNative[]> clustersNative
std::unique_ptr< GPUTPCDigitsMCInput > tpcDigitMCMap
InOutMemory & operator=(InOutMemory &&)
std::unique_ptr< float[]> trdTriggerTimes
std::unique_ptr< GPUTPCTrack[]> sectorTracks[NSECTORS]
std::unique_ptr< GPUTRDSpacePoint[]> trdSpacePoints
std::unique_ptr< GPUTrackingInOutZS > tpcZSmeta
std::unique_ptr< uint8_t[]> trdTrigRecMask
std::unique_ptr< o2::tpc::ClusterNativeAccess > clusterNativeAccess
std::unique_ptr< AliHLTTPCRawCluster[]> rawClusters[NSECTORS]
std::unique_ptr< GPUTPCHitId[]> sectorClusters[NSECTORS]
std::unique_ptr< GPUSettingsTF[]> settingsTF
std::unique_ptr< char[]> tpcZSpagesChar
std::unique_ptr< GPUTRDTrackGPU[]> trdTracks
std::unique_ptr< GPUTrackingInOutZS::GPUTrackingInOutZSMeta > tpcZSmeta2
GPUCalibObjectsConst calibObjects
std::array< const o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel > *, o2::tpc::constants::MAXSECTOR > v
const o2::tpc::Digit * tpcDigits[NSECTORS]
const GPUTPCDigitsMCInput * tpcDigitsMC
const GPUTPCHitId * sectorClusters[NSECTORS]
const o2::tpc::ClusterNativeAccess * clustersNative
const GPUTPCMCInfo * mcInfosTPC
const o2::tpc::CompressedClustersFlat * tpcCompressedClusters
const AliHLTTPCClusterMCLabel * mcLabelsTPC
const GPUTRDSpacePoint * trdSpacePoints
const GPUTPCTrack * sectorTracks[NSECTORS]
const GPUTRDTrackGPU * trdTracks
const GPUSettingsTF * settingsTF
const GPUTRDTrackletWord * trdTracklets
const GPUTrackingInOutZS * tpcZS
const AliHLTTPCRawCluster * rawClusters[NSECTORS]
const GPUTPCClusterData * clusterData[NSECTORS]
const GPUTPCGMMergedTrackHit * mergedTrackHits
const GPUTrackingInOutDigits * tpcPackedDigits
const GPUTPCMCInfoCol * mcInfosTPCCol
const GPUTPCGMMergedTrack * mergedTracks
GPUTrackingInOutZSSector sector[NSECTORS]
static constexpr uint32_t NENDPOINTS
unsigned int nClusters[constants::MAXSECTOR][constants::MAXGLOBALPADROW]
const o2::dataformats::ConstMCTruthContainerView< o2::MCCompLabel > * clustersMCTruth
const ClusterNative * clustersLinear
const CompressedClusters * ptrForward
static constexpr size_t TPC_ZS_PAGE_SIZE