@@ -112,8 +112,8 @@ namespace o2::gpu
112112
113113GPURecoWorkflowSpec::GPURecoWorkflowSpec (GPURecoWorkflowSpec::CompletionPolicyData* policyData, Config const & specconfig, std::vector<int32_t > const & tpcsectors, uint64_t tpcSectorMask, std::shared_ptr<o2::base::GRPGeomRequest>& ggr, std::function<bool (o2::framework::DataProcessingHeader::StartTime)>** gPolicyOrder ) : o2::framework::Task(), mPolicyData (policyData), mTPCSectorMask (tpcSectorMask), mTPCSectors (tpcsectors), mSpecConfig (specconfig), mGGR (ggr)
114114{
115- if (mSpecConfig .outputCAClusters && !mSpecConfig .caClusterer && !mSpecConfig .decompressTPC ) {
116- throw std::runtime_error (" inconsistent configuration: cluster output is only possible if CA clusterer is activated" );
115+ if (mSpecConfig .outputCAClusters && !mSpecConfig .caClusterer && !mSpecConfig .decompressTPC && ! mSpecConfig . useFilteredOutputSpecs ) {
116+ throw std::runtime_error (" inconsistent configuration: cluster output is only possible if CA clusterer or CompCluster decompression is activated" );
117117 }
118118
119119 mConfig .reset (new GPUO2InterfaceConfiguration);
@@ -801,15 +801,15 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
801801 };
802802
803803 setOutputAllocator (" COMPCLUSTERSFLAT" , mSpecConfig .outputCompClustersFlat , outputRegions.compressedClusters , std::make_tuple (gDataOriginTPC , (DataDescription) " COMPCLUSTERSFLAT" , 0 ));
804- setOutputAllocator (" CLUSTERNATIVE" , mClusterOutputIds .size () > 0 , outputRegions.clustersNative , std::make_tuple (gDataOriginTPC , mSpecConfig .sendClustersPerSector ? (DataDescription) " CLUSTERNATIVETMP" : (DataDescription) " CLUSTERNATIVE" , NSectors, clusterOutputSectorHeader), sizeof (o2::tpc::ClusterCountIndex));
804+ setOutputAllocator (" CLUSTERNATIVE" , mClusterOutputIds .size () > 0 , outputRegions.clustersNative , std::make_tuple (gDataOriginTPC , mSpecConfig .sendClustersPerSector ? (DataDescription) " CLUSTERNATIVETMP" : (mSpecConfig . useFilteredOutputSpecs ? ( DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" ) , NSectors, clusterOutputSectorHeader), sizeof (o2::tpc::ClusterCountIndex));
805805 setOutputAllocator (" CLSHAREDMAP" , mSpecConfig .outputSharedClusterMap , outputRegions.sharedClusterMap , std::make_tuple (gDataOriginTPC , (DataDescription) " CLSHAREDMAP" , 0 ));
806806 setOutputAllocator (" TPCOCCUPANCYMAP" , mSpecConfig .outputSharedClusterMap , outputRegions.tpcOccupancyMap , std::make_tuple (gDataOriginTPC , (DataDescription) " TPCOCCUPANCYMAP" , 0 ));
807- setOutputAllocator (" TRACKS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2 , std::make_tuple (gDataOriginTPC , (DataDescription) " TRACKS" , 0 ));
808- setOutputAllocator (" CLUSREFS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2ClusRefs , std::make_tuple (gDataOriginTPC , (DataDescription) " CLUSREFS" , 0 ));
809- setOutputAllocator (" TRACKSMCLBL" , mSpecConfig .outputTracks && mSpecConfig .processMC , outputRegions.tpcTracksO2Labels , std::make_tuple (gDataOriginTPC , (DataDescription) " TRACKSMCLBL" , 0 ));
807+ setOutputAllocator (" TRACKS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2 , std::make_tuple (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSF " : (DataDescription) " TRACKS" , 0 ));
808+ setOutputAllocator (" CLUSREFS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2ClusRefs , std::make_tuple (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSREFSF " : (DataDescription) " CLUSREFS" , 0 ));
809+ setOutputAllocator (" TRACKSMCLBL" , mSpecConfig .outputTracks && mSpecConfig .processMC , outputRegions.tpcTracksO2Labels , std::make_tuple (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSMCLBLF " : (DataDescription) " TRACKSMCLBL" , 0 ));
810810 setOutputAllocator (" TRIGGERWORDS" , mSpecConfig .caClusterer && mConfig ->configProcessing .param .tpcTriggerHandling , outputRegions.tpcTriggerWords , std::make_tuple (gDataOriginTPC , (DataDescription) " TRIGGERWORDS" , 0 ));
811811 o2::tpc::ClusterNativeHelper::ConstMCLabelContainerViewWithBuffer clustersMCBuffer;
812- if (mSpecConfig .processMC && mSpecConfig .caClusterer ) {
812+ if (mSpecConfig .processMC && ( mSpecConfig .caClusterer || mSpecConfig . useFilteredOutputSpecs ) ) {
813813 outputRegions.clusterLabels .allocator = [&clustersMCBuffer](size_t size) -> void * { return &clustersMCBuffer; };
814814 }
815815
@@ -977,7 +977,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
977977 if (mTPCSectorMask & (1ul << i)) {
978978 DataHeader::SubSpecificationType subspec = i;
979979 clusterOutputSectorHeader.sectorBits = (1ul << i);
980- char * buffer = pc.outputs ().make <char >({gDataOriginTPC , " CLUSTERNATIVE" , subspec, {clusterOutputSectorHeader}}, accessIndex.nClustersSector [i] * sizeof (*accessIndex.clustersLinear ) + sizeof (o2::tpc::ClusterCountIndex)).data ();
980+ char * buffer = pc.outputs ().make <char >({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , subspec, {clusterOutputSectorHeader}}, accessIndex.nClustersSector [i] * sizeof (*accessIndex.clustersLinear ) + sizeof (o2::tpc::ClusterCountIndex)).data ();
981981 o2::tpc::ClusterCountIndex* outIndex = reinterpret_cast <o2::tpc::ClusterCountIndex*>(buffer);
982982 memset (outIndex, 0 , sizeof (*outIndex));
983983 for (int32_t j = 0 ; j < o2::tpc::constants::MAXGLOBALPADROW; j++) {
@@ -994,7 +994,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
994994 }
995995 ConstMCLabelContainer contflat;
996996 cont.flatten_to (contflat);
997- pc.outputs ().snapshot ({gDataOriginTPC , " CLNATIVEMCLBL" , subspec, {clusterOutputSectorHeader}}, contflat);
997+ pc.outputs ().snapshot ({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , subspec, {clusterOutputSectorHeader}}, contflat);
998998 }
999999 }
10001000 }
@@ -1004,8 +1004,8 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
10041004 o2::tpc::ClusterCountIndex* outIndex = reinterpret_cast <o2::tpc::ClusterCountIndex*>(outputBuffers[outputRegions.getIndex (outputRegions.clustersNative )].second );
10051005 static_assert (sizeof (o2::tpc::ClusterCountIndex) == sizeof (accessIndex.nClusters ));
10061006 memcpy (outIndex, &accessIndex.nClusters [0 ][0 ], sizeof (o2::tpc::ClusterCountIndex));
1007- if (mSpecConfig .processMC && mSpecConfig .caClusterer && accessIndex.clustersMCTruth ) {
1008- pc.outputs ().snapshot ({gDataOriginTPC , " CLNATIVEMCLBL" , subspec, {clusterOutputSectorHeader}}, clustersMCBuffer.first );
1007+ if (mSpecConfig .processMC && ( mSpecConfig .caClusterer || mSpecConfig . useFilteredOutputSpecs ) && accessIndex.clustersMCTruth ) {
1008+ pc.outputs ().snapshot ({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , subspec, {clusterOutputSectorHeader}}, clustersMCBuffer.first );
10091009 }
10101010 }
10111011 }
@@ -1251,11 +1251,11 @@ Outputs GPURecoWorkflowSpec::outputs()
12511251 return outputSpecs;
12521252 }
12531253 if (mSpecConfig .outputTracks ) {
1254- outputSpecs.emplace_back (gDataOriginTPC , " TRACKS" , 0 , Lifetime::Timeframe);
1255- outputSpecs.emplace_back (gDataOriginTPC , " CLUSREFS" , 0 , Lifetime::Timeframe);
1254+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSF " : (DataDescription) " TRACKS" , 0 , Lifetime::Timeframe);
1255+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSREFSF " : (DataDescription) " CLUSREFS" , 0 , Lifetime::Timeframe);
12561256 }
12571257 if (mSpecConfig .processMC && mSpecConfig .outputTracks ) {
1258- outputSpecs.emplace_back (gDataOriginTPC , " TRACKSMCLBL" , 0 , Lifetime::Timeframe);
1258+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSMCLBLF " : (DataDescription) " TRACKSMCLBL" , 0 , Lifetime::Timeframe);
12591259 }
12601260 if (mSpecConfig .outputCompClusters ) {
12611261 outputSpecs.emplace_back (gDataOriginTPC , " COMPCLUSTERS" , 0 , Lifetime::Timeframe);
@@ -1270,18 +1270,18 @@ Outputs GPURecoWorkflowSpec::outputs()
12701270 if (mSpecConfig .sendClustersPerSector ) {
12711271 outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVETMP" , NSectors, Lifetime::Timeframe); // Dummy buffer the TPC tracker writes the inital linear clusters to
12721272 for (const auto sector : mTPCSectors ) {
1273- outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVE" , sector, Lifetime::Timeframe);
1273+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , sector, Lifetime::Timeframe);
12741274 }
12751275 } else {
1276- outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVE" , NSectors, Lifetime::Timeframe);
1276+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , NSectors, Lifetime::Timeframe);
12771277 }
12781278 if (mSpecConfig .processMC ) {
12791279 if (mSpecConfig .sendClustersPerSector ) {
12801280 for (const auto sector : mTPCSectors ) {
1281- outputSpecs.emplace_back (gDataOriginTPC , " CLNATIVEMCLBL" , sector, Lifetime::Timeframe);
1281+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , sector, Lifetime::Timeframe);
12821282 }
12831283 } else {
1284- outputSpecs.emplace_back (gDataOriginTPC , " CLNATIVEMCLBL" , NSectors, Lifetime::Timeframe);
1284+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , NSectors, Lifetime::Timeframe);
12851285 }
12861286 }
12871287 }
0 commit comments