@@ -48,7 +48,7 @@ void NoiseCalibratorSpec::init(InitContext& ic)
4848 LOGP (info, " Setting the probability threshold to {} with relative error {}" , probT, probTRelErr);
4949 mStopMeOnly = ic.options ().get <bool >(" stop-me-only" );
5050 mPath = ic.options ().get <std::string>(" path-CCDB" );
51- mPathMerge = ic.options ().get <std::string>(" path-CCDB-merge " );
51+ mPathSingle = ic.options ().get <std::string>(" path-CCDB-single " );
5252
5353 mMeta = ic.options ().get <std::string>(" meta" );
5454 mStart = ic.options ().get <int64_t >(" tstart" );
@@ -173,7 +173,7 @@ void NoiseCalibratorSpec::sendOutputCcdbDcs(DataAllocator& output)
173173 const auto & payload = mCalibrator ->getNoiseMap ();
174174 // const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
175175
176- o2::ccdb::CcdbObjectInfo info (mPath , " NoiseMap" , " noise.root" , meta, tstart, tend);
176+ o2::ccdb::CcdbObjectInfo info (mPathSingle , " NoiseMap" , " noise.root" , meta, tstart, tend);
177177 auto flName = o2::ccdb::CcdbApi::generateFileName (" noise" );
178178 auto image = o2::ccdb::CcdbApi::createObjectImage (&payload, &info);
179179 info.setFileName (flName);
@@ -244,7 +244,7 @@ void NoiseCalibratorSpec::sendOutputCcdb(DataAllocator& output)
244244 const auto & payload = mCalibrator ->getNoiseMap ();
245245 // const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
246246
247- o2::ccdb::CcdbObjectInfo info (mPath , " NoiseMap" , " noise.root" , meta, tstart, tend);
247+ o2::ccdb::CcdbObjectInfo info (mPathSingle , " NoiseMap" , " noise.root" , meta, tstart, tend);
248248 auto flName = o2::ccdb::CcdbApi::generateFileName (" noise" );
249249 auto image = o2::ccdb::CcdbApi::createObjectImage (&payload, &info);
250250 info.setFileName (flName);
@@ -301,16 +301,16 @@ void NoiseCalibratorSpec::sendOutputCcdbMerge(DataAllocator& output)
301301 // const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
302302 map<string, string> headers;
303303 map<std::string, std::string> filter;
304- auto * payloadPrev1 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPath , filter, -1 , &headers);
304+ auto * payloadPrev1 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPathSingle , filter, -1 , &headers);
305305 long validtime = std::stol (headers[" Valid-From" ]);
306306 auto mergedPL = payload;
307307 if (validtime > 0 ) {
308308 validtime = validtime - 1 ;
309- auto * payloadPrev2 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPath , filter, validtime, &headers);
309+ auto * payloadPrev2 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPathSingle , filter, validtime, &headers);
310310 auto bufferPL = payloadPrev2->merge (payloadPrev1);
311311 mergedPL = payload.merge (&bufferPL);
312312 }
313- o2::ccdb::CcdbObjectInfo info (mPathMerge , " NoiseMap" , " noise.root" , meta, tstart, tend);
313+ o2::ccdb::CcdbObjectInfo info (mPath , " NoiseMap" , " noise.root" , meta, tstart, tend);
314314 auto flName = o2::ccdb::CcdbApi::generateFileName (" noise" );
315315 auto image = o2::ccdb::CcdbApi::createObjectImage (&mergedPL, &info);
316316 info.setFileName (flName);
@@ -382,6 +382,76 @@ void NoiseCalibratorSpec::sendOutputDcs(DataAllocator& output)
382382 output.snapshot (Output{clbUtilsDcs::gDataOriginCDBWrapper , " MFT_NoiseMap" , 0 }, infoDcs);
383383}
384384
385+
386+ void NoiseCalibratorSpec::sendOutputDcsMerge (DataAllocator& output)
387+ {
388+
389+ LOG (info) << " DCS mode" ;
390+
391+ static bool done = false ;
392+ if (done) {
393+ return ;
394+ }
395+ done = true ;
396+
397+ mCalibrator ->finalize ();
398+
399+ long tstart = mStart ;
400+ if (tstart == -1 ) {
401+ tstart = o2::ccdb::getCurrentTimestamp ();
402+ }
403+ long tend = mEnd ;
404+ if (tend == -1 ) {
405+ constexpr long SECONDSPERYEAR = 365 * 24 * 60 * 60 ;
406+ tend = o2::ccdb::getFutureTimestamp (SECONDSPERYEAR);
407+ }
408+
409+ std::map<std::string, std::string> meta;
410+ auto toKeyValPairs = [&meta](std::vector<std::string> const & tokens) {
411+ for (auto & token : tokens) {
412+ auto keyval = Str::tokenize (token, ' =' , false );
413+ if (keyval.size () != 2 ) {
414+ LOG (error) << " Illegal command-line key/value string: " << token;
415+ continue ;
416+ }
417+ Str::trim (keyval[1 ]);
418+ meta[keyval[0 ]] = keyval[1 ];
419+ }
420+ };
421+ toKeyValPairs (Str::tokenize (mMeta , ' ;' , true ));
422+
423+ long startTF, endTF;
424+
425+ auto payload = mCalibrator ->getNoiseMap ();
426+ // const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
427+
428+ map<string, string> headers;
429+ map<std::string, std::string> filter;
430+ auto * payloadPrev1 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPathSingle , filter, -1 , &headers);
431+ long validtime = std::stol (headers[" Valid-From" ]);
432+ auto mergedPL = payload;
433+ if (validtime > 0 ) {
434+ validtime = validtime - 1 ;
435+ auto * payloadPrev2 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPathSingle , filter, validtime, &headers);
436+ auto bufferPL = payloadPrev2->merge (payloadPrev1);
437+ mergedPL = payload.merge (&bufferPL);
438+ }
439+
440+ setOutputDcs (mergedPL);
441+ o2::ccdb::CcdbObjectInfo infoDcs (mPathDcs , " NoiseMap" , " noise.root" , meta, tstart, tend);
442+ auto flNameDcs = o2::ccdb::CcdbApi::generateFileName (" noise" );
443+ auto imageDcs = o2::ccdb::CcdbApi::createObjectImage (&mNoiseMapForDcs , &infoDcs);
444+ infoDcs.setFileName (flNameDcs);
445+ LOG (info) << " Sending object " << infoDcs.getPath () << " /" << infoDcs.getFileName ()
446+ << " of size " << imageDcs->size ()
447+ << " bytes, valid for " << infoDcs.getStartValidityTimestamp ()
448+ << " : " << infoDcs.getEndValidityTimestamp ();
449+
450+ using clbUtilsDcs = o2::calibration::Utils;
451+ output.snapshot (Output{clbUtilsDcs::gDataOriginCDBPayload , " MFT_NoiseMap" , 0 }, *imageDcs.get ());
452+ output.snapshot (Output{clbUtilsDcs::gDataOriginCDBWrapper , " MFT_NoiseMap" , 0 }, infoDcs);
453+ }
454+
385455void NoiseCalibratorSpec::endOfStream (o2::framework::EndOfStreamContext& ec)
386456{
387457 if (mOutputType .compare (" CCDB" ) == 0 ) {
@@ -390,11 +460,12 @@ void NoiseCalibratorSpec::endOfStream(o2::framework::EndOfStreamContext& ec)
390460 LOG (info) << " Sending an object to Production-CCDB-Merge" ;
391461 sendOutputCcdbMerge (ec.outputs ());
392462 } else if (mOutputType .compare (" DCS" ) == 0 ) {
393- LOG (info) << " Sending an object to DCS-CCDB " ;
394- sendOutputDcs (ec.outputs ());
463+ LOG (info) << " Sending an object to DCS-Merge " ;
464+ sendOutputDcsMerge (ec.outputs ());
395465 } else {
396- LOG (info) << " Sending an object to Production-CCDB and DCS-CCDB" ;
397- sendOutputCcdbDcs (ec.outputs ());
466+ LOG (info) << " Sending an object to Production-CCDB, Production-CCDB-Merge and DCS-Merge" ;
467+ sendOutputCcdb (ec.outputs ());
468+ sendOutputDcsMerge (ec.outputs ());
398469 sendOutputCcdbMerge (ec.outputs ());
399470 }
400471}
@@ -454,7 +525,7 @@ DataProcessorSpec getNoiseCalibratorSpec(bool useDigits)
454525 {" tstart" , VariantType::Int64, -1ll , {" Start of validity timestamp" }},
455526 {" tend" , VariantType::Int64, -1ll , {" End of validity timestamp" }},
456527 {" path-CCDB" , VariantType::String, " /MFT/Calib/NoiseMap" , {" Path to write to in CCDB" }},
457- {" path-CCDB-merge " , VariantType::String, " /MFT/Calib/NoiseMapMerged " , {" Path to write merged file to in CCDB" }},
528+ {" path-CCDB-single " , VariantType::String, " /MFT/Calib/NoiseMapSingle " , {" Path to write merged file to in CCDB" }},
458529 {" path-DCS" , VariantType::String, " /MFT/Config/NoiseMap" , {" Path to write to in DCS" }},
459530 {" meta" , VariantType::String, " " , {" meta data to write in CCDB" }},
460531 {" send-to-server" , VariantType::String, " CCDB-DCS" , {" meta data to write in DCS-CCDB" }},
0 commit comments