From 6c55ebb0f7d6463a89cdb0c202f43b75d19f3d6a Mon Sep 17 00:00:00 2001 From: Piotr Konopka Date: Fri, 27 Jun 2025 16:50:03 +0200 Subject: [PATCH] Retrieve original run number as FMQ property and store in Activity Closes QC-1295 --- Framework/include/QualityControl/Activity.h | 7 +++++-- Framework/include/QualityControl/ActivityHelpers.h | 1 + Framework/include/QualityControl/CommonSpec.h | 1 + Framework/include/QualityControl/ObjectMetadataKeys.h | 1 + Framework/src/Activity.cxx | 6 ++++-- Framework/src/AggregatorRunnerFactory.cxx | 3 ++- Framework/src/CheckRunnerFactory.cxx | 3 ++- Framework/src/InfrastructureSpecReader.cxx | 1 + Framework/src/TaskRunnerFactory.cxx | 3 ++- Framework/src/runnerUtils.cxx | 4 +++- doc/Configuration.md | 3 ++- 11 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Framework/include/QualityControl/Activity.h b/Framework/include/QualityControl/Activity.h index 4cb84ff428..63fcc18370 100644 --- a/Framework/include/QualityControl/Activity.h +++ b/Framework/include/QualityControl/Activity.h @@ -39,7 +39,8 @@ class Activity ValidityInterval validity = gFullValidityInterval, const std::string& beamType = "", const std::string& partitionName = "", - int fillNumber = 0) + int fillNumber = 0, + int originalId = 0) : mId(id), mType(type), mPeriodName(periodName), @@ -48,7 +49,8 @@ class Activity mValidity(validity), mBeamType(beamType), mPartitionName(partitionName), - mFillNumber(fillNumber) {} + mFillNumber(fillNumber), + mOriginalId(originalId) {} /// Copy constructor Activity(const Activity& other) = default; @@ -80,6 +82,7 @@ class Activity std::string mBeamType{}; std::string mPartitionName{}; int mFillNumber{ 0 }; + int mOriginalId{ 0 }; // original run number of REPLAY runs ClassDef(Activity, 6); }; diff --git a/Framework/include/QualityControl/ActivityHelpers.h b/Framework/include/QualityControl/ActivityHelpers.h index 28e6ed2805..61268d729a 100644 --- a/Framework/include/QualityControl/ActivityHelpers.h +++ b/Framework/include/QualityControl/ActivityHelpers.h @@ -115,6 +115,7 @@ Activity commonActivityFields(const RangeOfActivities auto& activities) setMemberIfCommon(result, activities, &Activity::mBeamType); setMemberIfCommon(result, activities, &Activity::mPartitionName); setMemberIfCommon(result, activities, &Activity::mFillNumber); + setMemberIfCommon(result, activities, &Activity::mOriginalId); return result; } diff --git a/Framework/include/QualityControl/CommonSpec.h b/Framework/include/QualityControl/CommonSpec.h index 8a7cc90dd5..3beb320820 100644 --- a/Framework/include/QualityControl/CommonSpec.h +++ b/Framework/include/QualityControl/CommonSpec.h @@ -38,6 +38,7 @@ struct CommonSpec { std::string activityBeamType; std::string activityPartitionName; int activityFillNumber = 0; + int activityOriginalNumber = 0; std::string monitoringUrl = "infologger:///debug?qc"; std::string consulUrl; std::string conditionDBUrl = "http://ccdb-test.cern.ch:8080"; diff --git a/Framework/include/QualityControl/ObjectMetadataKeys.h b/Framework/include/QualityControl/ObjectMetadataKeys.h index cc3e322469..0dac4cb8d6 100644 --- a/Framework/include/QualityControl/ObjectMetadataKeys.h +++ b/Framework/include/QualityControl/ObjectMetadataKeys.h @@ -44,6 +44,7 @@ constexpr auto periodName = "PeriodName"; constexpr auto beamType = "BeamType"; constexpr auto fillNumber = "FillNumber"; constexpr auto partitionName = "PartitionName"; +constexpr auto originalRunNumber = "OriginalRunNumber"; } // namespace o2::quality_control::repository::metadata_keys diff --git a/Framework/src/Activity.cxx b/Framework/src/Activity.cxx index b3944f2545..f20b4536e6 100644 --- a/Framework/src/Activity.cxx +++ b/Framework/src/Activity.cxx @@ -34,7 +34,8 @@ std::ostream& operator<<(std::ostream& out, const Activity& activity) << ", " << metadata_keys::validUntil << ": " << activity.mValidity.getMax() << ", " << metadata_keys::beamType << ": '" << activity.mBeamType << "'" << ", " << metadata_keys::partitionName << ": '" << activity.mPartitionName << "'" - << ", " << metadata_keys::fillNumber << ": '" << activity.mFillNumber << "'"; + << ", " << metadata_keys::fillNumber << ": '" << activity.mFillNumber << "'" + << ", " << metadata_keys::originalRunNumber << ": '" << activity.mOriginalId << "'"; return out; } @@ -72,7 +73,8 @@ bool Activity::operator==(const Activity& other) const mPassName == other.mPassName && mProvenance == other.mProvenance && mValidity == other.mValidity && - mBeamType == other.mBeamType; + mBeamType == other.mBeamType && + mOriginalId == other.mOriginalId; } } // namespace o2::quality_control::core diff --git a/Framework/src/AggregatorRunnerFactory.cxx b/Framework/src/AggregatorRunnerFactory.cxx index a74bfce91b..cdb05b1911 100644 --- a/Framework/src/AggregatorRunnerFactory.cxx +++ b/Framework/src/AggregatorRunnerFactory.cxx @@ -79,7 +79,8 @@ AggregatorRunnerConfig AggregatorRunnerFactory::extractRunnerConfig(const core:: { commonSpec.activityStart, commonSpec.activityEnd }, commonSpec.activityBeamType, commonSpec.activityPartitionName, - commonSpec.activityFillNumber + commonSpec.activityFillNumber, + commonSpec.activityOriginalNumber }; return { diff --git a/Framework/src/CheckRunnerFactory.cxx b/Framework/src/CheckRunnerFactory.cxx index cc4b6a93c2..76813892d7 100644 --- a/Framework/src/CheckRunnerFactory.cxx +++ b/Framework/src/CheckRunnerFactory.cxx @@ -88,7 +88,8 @@ CheckRunnerConfig CheckRunnerFactory::extractConfig(const CommonSpec& commonSpec { commonSpec.activityStart, commonSpec.activityEnd }, commonSpec.activityBeamType, commonSpec.activityPartitionName, - commonSpec.activityFillNumber + commonSpec.activityFillNumber, + commonSpec.activityOriginalNumber }; return { commonSpec.database, diff --git a/Framework/src/InfrastructureSpecReader.cxx b/Framework/src/InfrastructureSpecReader.cxx index d72641e423..c6beb40037 100644 --- a/Framework/src/InfrastructureSpecReader.cxx +++ b/Framework/src/InfrastructureSpecReader.cxx @@ -68,6 +68,7 @@ CommonSpec InfrastructureSpecReader::readSpecEntry(const std::string spec.activityBeamType = commonTree.get("Activity.beamType", spec.activityBeamType); spec.activityPartitionName = commonTree.get("Activity.partitionName", spec.activityPartitionName); spec.activityFillNumber = commonTree.get("Activity.fillNumber", spec.activityFillNumber); + spec.activityOriginalNumber = commonTree.get("Activity.originalNumber", spec.activityOriginalNumber); spec.monitoringUrl = commonTree.get("monitoring.url", spec.monitoringUrl); spec.consulUrl = commonTree.get("consul.url", spec.consulUrl); spec.conditionDBUrl = commonTree.get("conditionDB.url", spec.conditionDBUrl); diff --git a/Framework/src/TaskRunnerFactory.cxx b/Framework/src/TaskRunnerFactory.cxx index 654dcb1bae..60a6696a40 100644 --- a/Framework/src/TaskRunnerFactory.cxx +++ b/Framework/src/TaskRunnerFactory.cxx @@ -162,7 +162,8 @@ TaskRunnerConfig TaskRunnerFactory::extractConfig(const CommonSpec& globalConfig { globalConfig.activityStart, globalConfig.activityEnd }, globalConfig.activityBeamType, globalConfig.activityPartitionName, - globalConfig.activityFillNumber + globalConfig.activityFillNumber, + globalConfig.activityOriginalNumber }; o2::globaltracking::RecoContainer rd; diff --git a/Framework/src/runnerUtils.cxx b/Framework/src/runnerUtils.cxx index cce2f36f6f..9270839f4c 100644 --- a/Framework/src/runnerUtils.cxx +++ b/Framework/src/runnerUtils.cxx @@ -106,6 +106,7 @@ Activity computeActivity(framework::ServiceRegistryRef services, const Activity& auto periodName = computeStringActivityField(services, "lhc_period", fallbackActivity.mPeriodName); auto fillNumber = computeNumericalActivityField(services, "fill_info_fill_number", fallbackActivity.mFillNumber); auto beam_type = computeStringActivityField(services, "pdp_beam_type", fallbackActivity.mBeamType); + auto originalRunNumber = computeNumericalActivityField(services, "original_run_number", fallbackActivity.mOriginalId); Activity activity( runNumber, @@ -116,7 +117,8 @@ Activity computeActivity(framework::ServiceRegistryRef services, const Activity& { runStartTimeMs, runEndTimeMs }, beam_type, partitionName, - fillNumber); + fillNumber, + originalRunNumber); return activity; } diff --git a/doc/Configuration.md b/doc/Configuration.md index 830a869cea..4baeda8b8b 100644 --- a/doc/Configuration.md +++ b/doc/Configuration.md @@ -97,7 +97,8 @@ should not be present in real configuration files. "end" : "1234", "": "Activity end time in ms since epoch. One can use it as a filter in post-processing", "beamType" : "pp", "": "Beam type: `pp`, `PbPb`, `pPb` ", "partitionName" : "", "": "Partition name", - "fillNumber" : "123", "": "Fill Number" + "fillNumber" : "123", "": "Fill Number", + "originalRunNumber" : "100", "": "When it is a REPLAY run, this contains the original run number" }, "monitoring": { "": "Configuration of the Monitoring library.", "url": "infologger:///debug?qc", "": ["URI to the Monitoring backend. Refer to the link below for more info:",