1919#include " GPUO2InterfaceConfiguration.h"
2020#include " GPUParam.inc"
2121#include " GPUQA.h"
22+ #include " GPUOutputControl.h"
2223#include < iostream>
2324#include < fstream>
2425#ifdef WITH_OPENMP
@@ -53,22 +54,19 @@ int GPUTPCO2Interface::Initialize(const GPUO2InterfaceConfiguration& config)
5354 }
5455 mRec ->SetSettings (&mConfig ->configEvent , &mConfig ->configReconstruction , &mConfig ->configProcessing , &mConfig ->configWorkflow );
5556 mChain ->SetCalibObjects (mConfig ->configCalib );
57+ mOutputRegions .reset (new GPUTrackingOutputs);
58+ mOutputControls .resize (GPUTrackingOutputs::count ());
5659 if (mConfig ->configInterface .outputToExternalBuffers ) {
57- mOutputCompressedClusters .reset (new GPUOutputControl);
58- mChain ->SetOutputControlCompressedClusters (mOutputCompressedClusters .get ());
59- mOutputClustersNative .reset (new GPUOutputControl);
60- mChain ->SetOutputControlClustersNative (mOutputClustersNative .get ());
61- mOutputTPCTracks .reset (new GPUOutputControl);
62- mChain ->SetOutputControlTPCTracks (mOutputTPCTracks .get ());
63- mOutputSharedClusterMap .reset (new GPUOutputControl);
64- mChain ->SetOutputControlSharedClusterMap (mOutputSharedClusterMap .get ());
60+ mChain ->SetOutputControlCompressedClusters (&mOutputControls [mOutputRegions ->getIndex (mOutputRegions ->compressedClusters )]);
61+ mChain ->SetOutputControlClustersNative (&mOutputControls [mOutputRegions ->getIndex (mOutputRegions ->clustersNative )]);
62+ mChain ->SetOutputControlTPCTracks (&mOutputControls [mOutputRegions ->getIndex (mOutputRegions ->tpcTracks )]);
63+ mChain ->SetOutputControlSharedClusterMap (&mOutputControls [mOutputRegions ->getIndex (mOutputRegions ->sharedClusterMap )]);
6564 GPUOutputControl dummy;
6665 dummy.set ([](size_t size) -> void * {throw std::runtime_error (" invalid output memory request, no common output buffer set" ); return nullptr ; });
6766 mRec ->SetOutputControl (dummy);
6867 }
6968 if (mConfig ->configProcessing .runMC ) {
70- mOutputTPCClusterLabels .reset (new GPUOutputControl);
71- mChain ->SetOutputControlClusterLabels (mOutputTPCClusterLabels .get ());
69+ mChain ->SetOutputControlClusterLabels (&mOutputControls [mOutputRegions ->getIndex (mOutputRegions ->clusterLabels )]);
7270 }
7371
7472 if (mRec ->Init ()) {
@@ -117,42 +115,17 @@ int GPUTPCO2Interface::RunTracking(GPUTrackingInOutPointers* data, GPUInterfaceO
117115
118116 mChain ->mIOPtrs = *data;
119117 if (mConfig ->configInterface .outputToExternalBuffers ) {
120- if (outputs->compressedClusters .allocator ) {
121- mOutputCompressedClusters ->set (outputs->compressedClusters .allocator );
122- } else if (outputs->compressedClusters .ptr ) {
123- mOutputCompressedClusters ->set (outputs->compressedClusters .ptr , outputs->compressedClusters .size );
124- } else {
125- mOutputCompressedClusters ->reset ();
126- }
127- if (outputs->clustersNative .allocator ) {
128- mOutputClustersNative ->set (outputs->clustersNative .allocator );
129- } else if (outputs->clustersNative .ptr ) {
130- mOutputClustersNative ->set (outputs->clustersNative .ptr , outputs->clustersNative .size );
131- } else {
132- mOutputClustersNative ->reset ();
133- }
134- if (outputs->tpcTracks .allocator ) {
135- mOutputTPCTracks ->set (outputs->tpcTracks .allocator );
136- } else if (outputs->tpcTracks .ptr ) {
137- mOutputTPCTracks ->set (outputs->tpcTracks .ptr , outputs->tpcTracks .size );
138- } else {
139- mOutputTPCTracks ->reset ();
140- }
141- if (outputs->sharedClusterMap .allocator ) {
142- mOutputSharedClusterMap ->set (outputs->sharedClusterMap .allocator );
143- } else if (outputs->sharedClusterMap .ptr ) {
144- mOutputSharedClusterMap ->set (outputs->sharedClusterMap .ptr , outputs->sharedClusterMap .size );
145- } else {
146- mOutputSharedClusterMap ->reset ();
147- }
148- }
149- if (mConfig ->configProcessing .runMC ) {
150- if (outputs->clusterLabels .allocator ) {
151- mOutputTPCClusterLabels ->set (outputs->clusterLabels .allocator );
152- } else {
153- mOutputTPCClusterLabels ->reset ();
118+ for (unsigned int i = 0 ; i < mOutputRegions ->count (); i++) {
119+ if (outputs->asArray ()[i].allocator ) {
120+ mOutputControls [i].set (outputs->asArray ()[i].allocator );
121+ } else if (outputs->asArray ()[i].ptr ) {
122+ mOutputControls [i].set (outputs->asArray ()[i].ptr , outputs->asArray ()[i].size );
123+ } else {
124+ mOutputControls [i].reset ();
125+ }
154126 }
155127 }
128+
156129 int retVal = mRec ->RunChains ();
157130 if (retVal == 2 ) {
158131 retVal = 0 ; // 2 signals end of event display, ignore
@@ -162,9 +135,9 @@ int GPUTPCO2Interface::RunTracking(GPUTrackingInOutPointers* data, GPUInterfaceO
162135 return retVal;
163136 }
164137 if (mConfig ->configInterface .outputToExternalBuffers ) {
165- outputs->compressedClusters .size = mOutputCompressedClusters -> EndOfSpace ? 0 : mChain ->mIOPtrs .tpcCompressedClusters ->totalDataSize ;
166- outputs->clustersNative .size = mOutputClustersNative -> EndOfSpace ? 0 : (mChain ->mIOPtrs .clustersNative ->nClustersTotal * sizeof (*mChain ->mIOPtrs .clustersNative ->clustersLinear ));
167- outputs->tpcTracks .size = mOutputCompressedClusters -> EndOfSpace ? 0 : (size_t )((char *)mOutputCompressedClusters -> OutputPtr - (char *)mOutputCompressedClusters -> OutputBase );
138+ outputs->compressedClusters .size = mOutputControls [outputs-> getIndex (outputs-> compressedClusters )]. EndOfSpace ? 0 : mChain ->mIOPtrs .tpcCompressedClusters ->totalDataSize ;
139+ outputs->clustersNative .size = mOutputControls [outputs-> getIndex (outputs-> clustersNative )]. EndOfSpace ? 0 : (mChain ->mIOPtrs .clustersNative ->nClustersTotal * sizeof (*mChain ->mIOPtrs .clustersNative ->clustersLinear ));
140+ outputs->tpcTracks .size = mOutputControls [outputs-> getIndex (outputs-> tpcTracks )]. EndOfSpace ? 0 : (size_t )((char *)mOutputControls [outputs-> getIndex (outputs-> tpcTracks )]. OutputPtr - (char *)mOutputControls [outputs-> getIndex (outputs-> tpcTracks )]. OutputBase );
168141 }
169142 if (mConfig ->configQA .shipToQC ) {
170143 outputs->qa .hist1 = &mChain ->GetQA ()->getHistograms1D ();
0 commit comments