Skip to content

Commit 9b9ef9a

Browse files
nivram-phyNiveditha Ramasubramanian
andauthored
Propagating merged noise map to DCS (#14515)
* Propagating merged noise map to DCS * adding some definitions in NoiseCalibratorSpec.h --------- Co-authored-by: Niveditha Ramasubramanian <nramasubramanian@lyodhc13.in2p3.fr>
1 parent 2db9446 commit 9b9ef9a

File tree

2 files changed

+83
-13
lines changed

2 files changed

+83
-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: 81 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,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+
385454
void 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

Comments
 (0)