@@ -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
@@ -976,7 +976,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
976976 if (mTPCSectorMask & (1ul << i)) {
977977 DataHeader::SubSpecificationType subspec = i;
978978 clusterOutputSectorHeader.sectorBits = (1ul << i);
979- char * buffer = pc.outputs ().make <char >({gDataOriginTPC , " CLUSTERNATIVE" , subspec, {clusterOutputSectorHeader}}, accessIndex.nClustersSector [i] * sizeof (*accessIndex.clustersLinear ) + sizeof (o2::tpc::ClusterCountIndex)).data ();
979+ 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 ();
980980 o2::tpc::ClusterCountIndex* outIndex = reinterpret_cast <o2::tpc::ClusterCountIndex*>(buffer);
981981 memset (outIndex, 0 , sizeof (*outIndex));
982982 for (int32_t j = 0 ; j < o2::tpc::constants::MAXGLOBALPADROW; j++) {
@@ -993,7 +993,7 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
993993 }
994994 ConstMCLabelContainer contflat;
995995 cont.flatten_to (contflat);
996- pc.outputs ().snapshot ({gDataOriginTPC , " CLNATIVEMCLBL" , subspec, {clusterOutputSectorHeader}}, contflat);
996+ pc.outputs ().snapshot ({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , subspec, {clusterOutputSectorHeader}}, contflat);
997997 }
998998 }
999999 }
@@ -1003,8 +1003,8 @@ void GPURecoWorkflowSpec::run(ProcessingContext& pc)
10031003 o2::tpc::ClusterCountIndex* outIndex = reinterpret_cast <o2::tpc::ClusterCountIndex*>(outputBuffers[outputRegions.getIndex (outputRegions.clustersNative )].second );
10041004 static_assert (sizeof (o2::tpc::ClusterCountIndex) == sizeof (accessIndex.nClusters ));
10051005 memcpy (outIndex, &accessIndex.nClusters [0 ][0 ], sizeof (o2::tpc::ClusterCountIndex));
1006- if (mSpecConfig .processMC && mSpecConfig .caClusterer && accessIndex.clustersMCTruth ) {
1007- pc.outputs ().snapshot ({gDataOriginTPC , " CLNATIVEMCLBL" , subspec, {clusterOutputSectorHeader}}, clustersMCBuffer.first );
1006+ if (mSpecConfig .processMC && ( mSpecConfig .caClusterer || mSpecConfig . useFilteredOutputSpecs ) && accessIndex.clustersMCTruth ) {
1007+ pc.outputs ().snapshot ({gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , subspec, {clusterOutputSectorHeader}}, clustersMCBuffer.first );
10081008 }
10091009 }
10101010 }
@@ -1250,11 +1250,11 @@ Outputs GPURecoWorkflowSpec::outputs()
12501250 return outputSpecs;
12511251 }
12521252 if (mSpecConfig .outputTracks ) {
1253- outputSpecs.emplace_back (gDataOriginTPC , " TRACKS" , 0 , Lifetime::Timeframe);
1254- outputSpecs.emplace_back (gDataOriginTPC , " CLUSREFS" , 0 , Lifetime::Timeframe);
1253+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSF " : (DataDescription) " TRACKS" , 0 , Lifetime::Timeframe);
1254+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSREFSF " : (DataDescription) " CLUSREFS" , 0 , Lifetime::Timeframe);
12551255 }
12561256 if (mSpecConfig .processMC && mSpecConfig .outputTracks ) {
1257- outputSpecs.emplace_back (gDataOriginTPC , " TRACKSMCLBL" , 0 , Lifetime::Timeframe);
1257+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " TRACKSMCLBLF " : (DataDescription) " TRACKSMCLBL" , 0 , Lifetime::Timeframe);
12581258 }
12591259 if (mSpecConfig .outputCompClusters ) {
12601260 outputSpecs.emplace_back (gDataOriginTPC , " COMPCLUSTERS" , 0 , Lifetime::Timeframe);
@@ -1269,18 +1269,18 @@ Outputs GPURecoWorkflowSpec::outputs()
12691269 if (mSpecConfig .sendClustersPerSector ) {
12701270 outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVETMP" , NSectors, Lifetime::Timeframe); // Dummy buffer the TPC tracker writes the inital linear clusters to
12711271 for (const auto sector : mTPCSectors ) {
1272- outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVE" , sector, Lifetime::Timeframe);
1272+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , sector, Lifetime::Timeframe);
12731273 }
12741274 } else {
1275- outputSpecs.emplace_back (gDataOriginTPC , " CLUSTERNATIVE" , NSectors, Lifetime::Timeframe);
1275+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? (DataDescription) " CLUSTERNATIVEF " : (DataDescription) " CLUSTERNATIVE" , NSectors, Lifetime::Timeframe);
12761276 }
12771277 if (mSpecConfig .processMC ) {
12781278 if (mSpecConfig .sendClustersPerSector ) {
12791279 for (const auto sector : mTPCSectors ) {
1280- outputSpecs.emplace_back (gDataOriginTPC , " CLNATIVEMCLBL" , sector, Lifetime::Timeframe);
1280+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , sector, Lifetime::Timeframe);
12811281 }
12821282 } else {
1283- outputSpecs.emplace_back (gDataOriginTPC , " CLNATIVEMCLBL" , NSectors, Lifetime::Timeframe);
1283+ outputSpecs.emplace_back (gDataOriginTPC , mSpecConfig . useFilteredOutputSpecs ? DataDescription ( " CLNATIVEMCLBLF " ) : DataDescription ( " CLNATIVEMCLBL" ) , NSectors, Lifetime::Timeframe);
12841284 }
12851285 }
12861286 }
0 commit comments