Skip to content

Commit 41249ba

Browse files
author
Niveditha Ramasubramanian
committed
Propagating merged noise map to DCS
1 parent 0311f33 commit 41249ba

File tree

2 files changed

+84
-13
lines changed

2 files changed

+84
-13
lines changed

Detectors/ITSMFT/MFT/calibration/include/MFTCalibration/NoiseCalibratorSpec.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,17 @@ class NoiseCalibratorSpec : public Task
5656
void sendOutputCcdbMerge(DataAllocator& output);
5757
void sendOutputCcdbDcs(DataAllocator& output);
5858
void sendOutputDcs(DataAllocator& output);
59+
void sendOutputDcsMerge(DataAllocator& output);
5960
void setOutputDcs(const o2::itsmft::NoiseMap& payload);
6061
o2::itsmft::NoiseMap mNoiseMap{936};
6162
std::unique_ptr<CALIBRATOR> mCalibrator = nullptr;
6263
std::shared_ptr<o2::base::GRPGeomRequest> mCCDBRequest;
6364
std::string mPath;
64-
std::string mPathMerge;
65+
std::string mPathSingle;
6566
std::string mMeta;
6667

6768
std::vector<std::array<int, 3>> mNoiseMapForDcs;
6869
std::string mPathDcs;
69-
std::string mPathDcsMerge;
7070
std::string mOutputType;
7171

7272
double mThresh;

Detectors/ITSMFT/MFT/calibration/src/NoiseCalibratorSpec.cxx

Lines changed: 82 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
385455
void 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

Comments
 (0)