@@ -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);
@@ -800,15 +800,15 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
800800 };
801801
802802 setOutputAllocator (" COMPCLUSTERSFLAT" , mSpecConfig .outputCompClustersFlat , outputRegions.compressedClusters , std::make_tuple (gDataOriginTPC , (DataDescription) " COMPCLUSTERSFLAT" , 0 ));
803- setOutputAllocator (" CLUSTERNATIVE" , mClusterOutputIds .size () > 0 , outputRegions.clustersNative , std::make_tuple (gDataOriginTPC , mSpecConfig .sendClustersPerSector ? (DataDescription) " CLUSTERNATIVETMP" : (DataDescription) " CLUSTERNATIVE" , NSectors, clusterOutputSectorHeader), sizeof (o2::tpc::ClusterCountIndex));
803+ 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));
804804 setOutputAllocator (" CLSHAREDMAP" , mSpecConfig .outputSharedClusterMap , outputRegions.sharedClusterMap , std::make_tuple (gDataOriginTPC , (DataDescription) " CLSHAREDMAP" , 0 ));
805805 setOutputAllocator (" TPCOCCUPANCYMAP" , mSpecConfig .outputSharedClusterMap , outputRegions.tpcOccupancyMap , std::make_tuple (gDataOriginTPC , (DataDescription) " TPCOCCUPANCYMAP" , 0 ));
806- setOutputAllocator (" TRACKS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2 , std::make_tuple (gDataOriginTPC , (DataDescription) " TRACKS" , 0 ));
807- setOutputAllocator (" CLUSREFS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2ClusRefs , std::make_tuple (gDataOriginTPC , (DataDescription) " CLUSREFS" , 0 ));
808- setOutputAllocator (" TRACKSMCLBL" , mSpecConfig .outputTracks && mSpecConfig .processMC , outputRegions.tpcTracksO2Labels , std::make_tuple (gDataOriginTPC , (DataDescription) " TRACKSMCLBL" , 0 ));
806+ setOutputAllocator (" TRACKS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2 , std::make_tuple (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSF " : (DataDescription) " TRACKS" , 0 ));
807+ setOutputAllocator (" CLUSREFS" , mSpecConfig .outputTracks , outputRegions.tpcTracksO2ClusRefs , std::make_tuple (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSREFSF " : (DataDescription) " CLUSREFS" , 0 ));
808+ setOutputAllocator (" TRACKSMCLBL" , mSpecConfig .outputTracks && mSpecConfig .processMC , outputRegions.tpcTracksO2Labels , std::make_tuple (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSMCLBLF " : (DataDescription) " TRACKSMCLBL" , 0 ));
809809 setOutputAllocator (" TRIGGERWORDS" , mSpecConfig .caClusterer && mConfig ->configProcessing .param .tpcTriggerHandling , outputRegions.tpcTriggerWords , std::make_tuple (gDataOriginTPC , (DataDescription) " TRIGGERWORDS" , 0 ));
810810 o2::tpc::ClusterNativeHelper::ConstMCLabelContainerViewWithBuffer clustersMCBuffer;
811- if (mSpecConfig .processMC && mSpecConfig .caClusterer ) {
811+ if (mSpecConfig .processMC && ( mSpecConfig .caClusterer || mSpecConfig . useFilteredOutputSpecs ) ) {
812812 outputRegions.clusterLabels .allocator = [&clustersMCBuffer](size_t size) -> void * { return &clustersMCBuffer; };
813813 }
814814
@@ -979,7 +979,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
979979 if (mTPCSectorMask & (1ul << i)) {
980980 DataHeader::SubSpecificationType subspec = i;
981981 clusterOutputSectorHeader.sectorBits = (1ul << i);
982- char * buffer = pc.outputs ().make <char >({gDataOriginTPC , " CLUSTERNATIVE" , subspec, {clusterOutputSectorHeader}}, accessIndex.nClustersSector [i] * sizeof (*accessIndex.clustersLinear ) + sizeof (o2::tpc::ClusterCountIndex)).data ();
982+ 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 ();
983983 o2::tpc::ClusterCountIndex* outIndex = reinterpret_cast <o2::tpc::ClusterCountIndex*>(buffer);
984984 memset (outIndex, 0 , sizeof (*outIndex));
985985 for (int32_t j = 0 ; j < o2::tpc::constants::MAXGLOBALPADROW; j++) {
@@ -996,7 +996,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
996996 }
997997 ConstMCLabelContainer contflat;
998998 cont.flatten_to (contflat);
999- pc.outputs ().snapshot ({gDataOriginTPC , " CLNATIVEMCLBL" , subspec, {clusterOutputSectorHeader}}, contflat);
999+ pc.outputs ().snapshot ({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , subspec, {clusterOutputSectorHeader}}, contflat);
10001000 }
10011001 }
10021002 }
@@ -1006,8 +1006,8 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
10061006 o2::tpc::ClusterCountIndex* outIndex = reinterpret_cast <o2::tpc::ClusterCountIndex*>(outputBuffers[outputRegions.getIndex (outputRegions.clustersNative )].second );
10071007 static_assert (sizeof (o2::tpc::ClusterCountIndex) == sizeof (accessIndex.nClusters ));
10081008 memcpy (outIndex, &accessIndex.nClusters [0 ][0 ], sizeof (o2::tpc::ClusterCountIndex));
1009- if (mSpecConfig .processMC && mSpecConfig .caClusterer && accessIndex.clustersMCTruth ) {
1010- pc.outputs ().snapshot ({gDataOriginTPC , " CLNATIVEMCLBL" , subspec, {clusterOutputSectorHeader}}, clustersMCBuffer.first );
1009+ if (mSpecConfig .processMC && ( mSpecConfig .caClusterer || mSpecConfig . useFilteredOutputSpecs ) && accessIndex.clustersMCTruth ) {
1010+ pc.outputs ().snapshot ({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , subspec, {clusterOutputSectorHeader}}, clustersMCBuffer.first );
10111011 }
10121012 }
10131013 }
@@ -1253,11 +1253,11 @@ Outputs GPURecoWorkflowSpec::outputs()
12531253 return outputSpecs;
12541254 }
12551255 if (mSpecConfig .outputTracks ) {
1256- outputSpecs.emplace_back (gDataOriginTPC , " TRACKS" , 0 , Lifetime::Timeframe);
1257- outputSpecs.emplace_back (gDataOriginTPC , " CLUSREFS" , 0 , Lifetime::Timeframe);
1256+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSF " : (DataDescription) " TRACKS" , 0 , Lifetime::Timeframe);
1257+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSREFSF " : (DataDescription) " CLUSREFS" , 0 , Lifetime::Timeframe);
12581258 }
12591259 if (mSpecConfig .processMC && mSpecConfig .outputTracks ) {
1260- outputSpecs.emplace_back (gDataOriginTPC , " TRACKSMCLBL" , 0 , Lifetime::Timeframe);
1260+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSMCLBLF " : (DataDescription) " TRACKSMCLBL" , 0 , Lifetime::Timeframe);
12611261 }
12621262 if (mSpecConfig .outputCompClustersRoot ) {
12631263 outputSpecs.emplace_back (gDataOriginTPC , " COMPCLUSTERS" , 0 , Lifetime::Timeframe);
@@ -1272,18 +1272,18 @@ Outputs GPURecoWorkflowSpec::outputs()
12721272 if (mSpecConfig .sendClustersPerSector ) {
12731273 outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVETMP" , NSectors, Lifetime::Timeframe); // Dummy buffer the TPC tracker writes the inital linear clusters to
12741274 for (const auto sector : mTPCSectors ) {
1275- outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVE" , sector, Lifetime::Timeframe);
1275+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , sector, Lifetime::Timeframe);
12761276 }
12771277 } else {
1278- outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVE" , NSectors, Lifetime::Timeframe);
1278+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , NSectors, Lifetime::Timeframe);
12791279 }
12801280 if (mSpecConfig .processMC ) {
12811281 if (mSpecConfig .sendClustersPerSector ) {
12821282 for (const auto sector : mTPCSectors ) {
1283- outputSpecs.emplace_back (gDataOriginTPC , " CLNATIVEMCLBL" , sector, Lifetime::Timeframe);
1283+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , sector, Lifetime::Timeframe);
12841284 }
12851285 } else {
1286- outputSpecs.emplace_back (gDataOriginTPC , " CLNATIVEMCLBL" , NSectors, Lifetime::Timeframe);
1286+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , NSectors, Lifetime::Timeframe);
12871287 }
12881288 }
12891289 }
0 commit comments