@@ -71,7 +71,7 @@ void customize(std::vector<ConfigParamSpec>& workflowOptions)
7171 {" track-sorting" , VariantType::Bool, true , {" sort track by track time before applying filters" }},
7272 {" only-nth-event" , VariantType::Int, 0 , {" process only every nth event" }},
7373 {" primary-vertex-mode" , VariantType::Bool, false , {" produce jsons with individual primary vertices, not total time frame data" }},
74- };
74+ { " max-primary-vertices " , VariantType::Int, 5 , { " maximum number of primary vertices to draw per time frame " }} };
7575 o2::raw::HBFUtilsInitializer::addConfigOption (options);
7676 std::swap (workflowOptions, options);
7777}
@@ -126,9 +126,14 @@ void O2DPLDisplaySpec::run(ProcessingContext& pc)
126126 savedTracks[i] = 0 ;
127127 }
128128
129- bool anythingSaved = false ;
129+ std::size_t jsonsSaved = 0 ;
130+
131+ for (const auto & keyVal : helper.mPrimaryVertexGIDs ) {
132+ if (jsonsSaved >= mMaxPrimaryVertices ) {
133+ break ;
134+ }
130135
131- for (std:: size_t pv = 0 ; pv < helper. mPrimaryVertexGIDs . size (); ++pv) {
136+ const auto pv = keyVal. first ;
132137 helper.draw (pv, mTrackSorting );
133138
134139 bool save = true ;
@@ -147,8 +152,9 @@ void O2DPLDisplaySpec::run(ProcessingContext& pc)
147152 helper.mEvent .setRunNumber (tinfo.runNumber );
148153 helper.mEvent .setTfCounter (tinfo.tfCounter );
149154 helper.mEvent .setFirstTForbit (tinfo.firstTForbit );
155+ helper.mEvent .setPrimaryVertex (pv);
150156 helper.save (this ->mJsonPath , this ->mNumberOfFiles , this ->mTrkMask , this ->mClMask , tinfo.runNumber , tinfo.creation );
151- anythingSaved = true ;
157+ jsonsSaved++ ;
152158 }
153159
154160 helper.clear ();
@@ -161,11 +167,7 @@ void O2DPLDisplaySpec::run(ProcessingContext& pc)
161167 auto endTime = std::chrono::high_resolution_clock::now ();
162168 LOGP (info, " Visualization of TF:{} at orbit {} took {} s." , tinfo.tfCounter , tinfo.firstTForbit , std::chrono::duration_cast<std::chrono::microseconds>(endTime - currentTime).count () * 1e-6 );
163169
164- if (mPrimaryVertexMode ) {
165- LOGP (info, " Primary vertices: {}" , helper.mPrimaryVertexGIDs .size ());
166- }
167-
168- LOGP (info, " JSON saved: {}" , anythingSaved ? " YES" : " NO" );
170+ LOGP (info, " JSONs saved: {}/{}" , jsonsSaved, helper.mPrimaryVertexGIDs .size ());
169171
170172 std::vector<std::string> sourceStats;
171173 sourceStats.reserve (GID ::Source::NSources);
@@ -287,6 +289,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
287289 }
288290
289291 auto primaryVertexMode = cfgc.options ().get <bool >(" primary-vertex-mode" );
292+ auto maxPrimaryVertices = cfgc.options ().get <int >(" max-primary-vertices" );
290293
291294 if (primaryVertexMode) {
292295 dataRequest->requestPrimaryVertertices (useMC);
@@ -306,7 +309,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
306309 " o2-eve-export" ,
307310 dataRequest->inputs ,
308311 {},
309- AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, minITSTracks, minTracks, filterITSROF, filterTime, timeBracket, removeTPCEta, etaBracket, tracksSorting, onlyNthEvent, primaryVertexMode)}});
312+ AlgorithmSpec{adaptFromTask<O2DPLDisplaySpec>(useMC, srcTrk, srcCl, dataRequest, jsonFolder, timeInterval, numberOfFiles, numberOfTracks, eveHostNameMatch, minITSTracks, minTracks, filterITSROF, filterTime, timeBracket, removeTPCEta, etaBracket, tracksSorting, onlyNthEvent, primaryVertexMode, maxPrimaryVertices )}});
310313
311314 // configure dpl timer to inject correct firstTForbit: start from the 1st orbit of TF containing 1st sampled orbit
312315 o2::raw::HBFUtilsInitializer hbfIni (cfgc, specs);
0 commit comments