@@ -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,75 @@ void NoiseCalibratorSpec::sendOutputDcs(DataAllocator& output)
382382 output.snapshot (Output{clbUtilsDcs::gDataOriginCDBWrapper , " MFT_NoiseMap" , 0 }, infoDcs);
383383}
384384
385+ void NoiseCalibratorSpec::sendOutputDcsMerge (DataAllocator& output)
386+ {
387+
388+ LOG (info) << " DCS mode" ;
389+
390+ static bool done = false ;
391+ if (done) {
392+ return ;
393+ }
394+ done = true ;
395+
396+ mCalibrator ->finalize ();
397+
398+ long tstart = mStart ;
399+ if (tstart == -1 ) {
400+ tstart = o2::ccdb::getCurrentTimestamp ();
401+ }
402+ long tend = mEnd ;
403+ if (tend == -1 ) {
404+ constexpr long SECONDSPERYEAR = 365 * 24 * 60 * 60 ;
405+ tend = o2::ccdb::getFutureTimestamp (SECONDSPERYEAR);
406+ }
407+
408+ std::map<std::string, std::string> meta;
409+ auto toKeyValPairs = [&meta](std::vector<std::string> const & tokens) {
410+ for (auto & token : tokens) {
411+ auto keyval = Str::tokenize (token, ' =' , false );
412+ if (keyval.size () != 2 ) {
413+ LOG (error) << " Illegal command-line key/value string: " << token;
414+ continue ;
415+ }
416+ Str::trim (keyval[1 ]);
417+ meta[keyval[0 ]] = keyval[1 ];
418+ }
419+ };
420+ toKeyValPairs (Str::tokenize (mMeta , ' ;' , true ));
421+
422+ long startTF, endTF;
423+
424+ auto payload = mCalibrator ->getNoiseMap ();
425+ // const auto& payload = mCalibrator->getNoiseMap(starTF, endTF); //For TimeSlot calibration
426+
427+ map<string, string> headers;
428+ map<std::string, std::string> filter;
429+ auto * payloadPrev1 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPathSingle , filter, -1 , &headers);
430+ long validtime = std::stol (headers[" Valid-From" ]);
431+ auto mergedPL = payload;
432+ if (validtime > 0 ) {
433+ validtime = validtime - 1 ;
434+ auto * payloadPrev2 = api.retrieveFromTFileAny <o2::itsmft::NoiseMap>(mPathSingle , filter, validtime, &headers);
435+ auto bufferPL = payloadPrev2->merge (payloadPrev1);
436+ mergedPL = payload.merge (&bufferPL);
437+ }
438+
439+ setOutputDcs (mergedPL);
440+ o2::ccdb::CcdbObjectInfo infoDcs (mPathDcs , " NoiseMap" , " noise.root" , meta, tstart, tend);
441+ auto flNameDcs = o2::ccdb::CcdbApi::generateFileName (" noise" );
442+ auto imageDcs = o2::ccdb::CcdbApi::createObjectImage (&mNoiseMapForDcs , &infoDcs);
443+ infoDcs.setFileName (flNameDcs);
444+ LOG (info) << " Sending object " << infoDcs.getPath () << " /" << infoDcs.getFileName ()
445+ << " of size " << imageDcs->size ()
446+ << " bytes, valid for " << infoDcs.getStartValidityTimestamp ()
447+ << " : " << infoDcs.getEndValidityTimestamp ();
448+
449+ using clbUtilsDcs = o2::calibration::Utils;
450+ output.snapshot (Output{clbUtilsDcs::gDataOriginCDBPayload , " MFT_NoiseMap" , 0 }, *imageDcs.get ());
451+ output.snapshot (Output{clbUtilsDcs::gDataOriginCDBWrapper , " MFT_NoiseMap" , 0 }, infoDcs);
452+ }
453+
385454void NoiseCalibratorSpec::endOfStream (o2::framework::EndOfStreamContext& ec)
386455{
387456 if (mOutputType .compare (" CCDB" ) == 0 ) {
@@ -390,11 +459,12 @@ void NoiseCalibratorSpec::endOfStream(o2::framework::EndOfStreamContext& ec)
390459 LOG (info) << " Sending an object to Production-CCDB-Merge" ;
391460 sendOutputCcdbMerge (ec.outputs ());
392461 } else if (mOutputType .compare (" DCS" ) == 0 ) {
393- LOG (info) << " Sending an object to DCS-CCDB " ;
394- sendOutputDcs (ec.outputs ());
462+ LOG (info) << " Sending an object to DCS-Merge " ;
463+ sendOutputDcsMerge (ec.outputs ());
395464 } else {
396- LOG (info) << " Sending an object to Production-CCDB and DCS-CCDB" ;
397- sendOutputCcdbDcs (ec.outputs ());
465+ LOG (info) << " Sending an object to Production-CCDB, Production-CCDB-Merge and DCS-Merge" ;
466+ sendOutputCcdb (ec.outputs ());
467+ sendOutputDcsMerge (ec.outputs ());
398468 sendOutputCcdbMerge (ec.outputs ());
399469 }
400470}
@@ -454,7 +524,7 @@ DataProcessorSpec getNoiseCalibratorSpec(bool useDigits)
454524 {" tstart" , VariantType::Int64, -1ll , {" Start of validity timestamp" }},
455525 {" tend" , VariantType::Int64, -1ll , {" End of validity timestamp" }},
456526 {" 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" }},
527+ {" path-CCDB-single " , VariantType::String, " /MFT/Calib/NoiseMapSingle " , {" Path to write merged file to in CCDB" }},
458528 {" path-DCS" , VariantType::String, " /MFT/Config/NoiseMap" , {" Path to write to in DCS" }},
459529 {" meta" , VariantType::String, " " , {" meta data to write in CCDB" }},
460530 {" send-to-server" , VariantType::String, " CCDB-DCS" , {" meta data to write in DCS-CCDB" }},
0 commit comments