Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions Framework/include/QualityControl/Aggregator.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,6 @@ struct AggregatorSpec;
class Aggregator
{
public:
/// \brief Number of bytes in data description used for hashing of AggregatorRunner names. See HashDataDescription.h for details
static constexpr size_t descriptionHashLength = 4;
static_assert(descriptionHashLength <= o2::header::DataDescription::size);

/// Constructor
/**
* \brief Aggregator constructor
Expand Down Expand Up @@ -84,7 +80,6 @@ class Aggregator
void endOfActivity(const core::Activity& activity);

static AggregatorConfig extractConfig(const core::CommonSpec&, const AggregatorSpec&);
static framework::OutputSpec createOutputSpec(const std::string& detector, const std::string& aggregatorName);

private:
/**
Expand Down
5 changes: 0 additions & 5 deletions Framework/include/QualityControl/AggregatorRunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,10 +79,6 @@ struct AggregatorSource;
/// \author Barthélémy von Haller
class AggregatorRunner : public framework::Task
{
/// \brief Number of bytes in data description used for hashing of AggregatorRunner names. See HashDataDescription.h for details
static constexpr size_t descriptionHashLength = 4;
static_assert(descriptionHashLength <= o2::header::DataDescription::size);

public:
/// Constructor
/**
Expand Down Expand Up @@ -111,7 +107,6 @@ class AggregatorRunner : public framework::Task
static framework::DataProcessorLabel getLabel() { return { "qc-aggregator" }; }
static std::string createAggregatorRunnerIdString() { return "qc-aggregator"; };
static std::string createAggregatorRunnerName();
static header::DataDescription createAggregatorRunnerDataDescription(const std::string& aggregatorName);

/// \brief Compute the detector name to be used in the infologger for this runner.
/// Compute the detector name to be used in the infologger for this runner.
Expand Down
13 changes: 0 additions & 13 deletions Framework/include/QualityControl/Check.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ struct CheckSpec;
/// \author Rafal Pacholek
class Check
{
/// \brief Number of bytes in data description used for hashing of Check descrition names. See HashDataDescription.h for details
static constexpr size_t descriptionHashLength = 4;
static_assert(descriptionHashLength <= o2::header::DataDescription::size);

public:
/// Constructor
/**
Expand Down Expand Up @@ -78,21 +74,12 @@ class Check
void startOfActivity(const core::Activity& activity);
void endOfActivity(const core::Activity& activity);

// TODO: Unique Input string
static o2::header::DataDescription createCheckDataDescription(const std::string& checkName);

/// \brief creates DataOrigin for Check task in form CDET
///
/// \param detector Name of the detector to be used. If longer than 3B it will be truncated
static o2::header::DataOrigin createCheckDataOrigin(const std::string& detector);

UpdatePolicyType getUpdatePolicyType() const;
std::vector<std::string> getObjectsNames() const;
bool getAllObjectsOption() const;

// todo: probably make CheckFactory
static CheckConfig extractConfig(const core::CommonSpec&, const CheckSpec&);
static framework::OutputSpec createOutputSpec(const std::string& detector, const std::string& checkName);

private:
void beautify(std::map<std::string, std::shared_ptr<core::MonitorObject>>& moMap, const core::Quality& quality);
Expand Down
8 changes: 0 additions & 8 deletions Framework/include/QualityControl/PostProcessingDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ struct PostProcessingRunnerConfig;
/// \author Piotr Konopka
class PostProcessingDevice : public framework::Task
{
/// \brief Number of bytes in data description used for hashing DataDescription. See HashDataDescription.h for details
static constexpr size_t descriptionHashLength = 4;
static_assert(descriptionHashLength <= o2::header::DataDescription::size);

public:
/// \brief Constructor
///
Expand All @@ -61,10 +57,6 @@ class PostProcessingDevice : public framework::Task
/// \brief Data Processor Label to identify all Task Runners
static framework::DataProcessorLabel getLabel() { return { "qc-pp-task-runner" }; }
static std::string createPostProcessingDeviceName(const std::string& taskName, const std::string& detectorName);
/// \brief Unified DataOrigin for Post-processing tasks
static header::DataOrigin createPostProcessingDataOrigin(const std::string& detectorCode);
/// \brief Unified DataDescription naming scheme for all Post-processing tasks
static header::DataDescription createPostProcessingDataDescription(const std::string& taskName);

private:
/// \brief Callback for CallbackService::Id::Start (DPL) a.k.a. RUN transition (FairMQ)
Expand Down
8 changes: 0 additions & 8 deletions Framework/include/QualityControl/TaskRunner.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,6 @@ class ObjectsManager;
/// \author Barthelemy von Haller
class TaskRunner : public framework::Task
{
/// \brief Number of bytes in data description used for hashing of Task names. See HashDataDescription.h for details
static constexpr size_t taskDescriptionHashLength = 4;
static_assert(taskDescriptionHashLength <= o2::header::DataDescription::size);

public:
/// \brief Constructor
///
Expand Down Expand Up @@ -109,10 +105,6 @@ class TaskRunner : public framework::Task
static framework::DataProcessorLabel getTaskRunnerLabel() { return { "qc-task" }; }
/// \brief ID string for all TaskRunner devices
static std::string createTaskRunnerIdString();
/// \brief Unified DataOrigin for Quality Control tasks
static header::DataOrigin createTaskDataOrigin(const std::string& detectorCode, bool movingWindows = false);
/// \brief Unified DataDescription naming scheme for all tasks
static header::DataDescription createTaskDataDescription(const std::string& taskName);
/// \brief Unified DataDescription naming scheme for all timers
static header::DataDescription createTimerDataDescription(const std::string& taskName);

Expand Down
24 changes: 18 additions & 6 deletions Framework/include/QualityControl/UserInputOutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

#include <string>

#include <Headers/DataHeader.h>
#include <Framework/ConcreteDataMatcher.h>
#include <Framework/InputSpec.h>
#include <Framework/OutputSpec.h>
Expand All @@ -31,16 +32,27 @@ namespace o2::quality_control::core

/// \brief returns a standard ConcreteDataMatcher for QC inputs and outputs
framework::ConcreteDataMatcher
createUserDataMatcher(DataSourceType dataSourceType, const std::string& detectorName, const std::string& userCodeName);
createUserDataMatcher(DataSourceType dataSourceType, const std::string& detectorName, const std::string& userCodeName,
o2::header::DataHeader::SubSpecificationType subSpec = 0);

/// \brief returns a standard InputSpec for QC inputs and outputs
/// \brief returns a standard InputSpec for QC user data
///
/// Returns a standard InputSpec for QC user data. The combination of the first four arguments should be unique
/// in a QC workflow. When provided binding is empty, userCodeName is used. If a Data Processor asks for multiple
/// inputs with the same userCodeName, a custom binding should be set.
framework::InputSpec
createUserInputSpec(DataSourceType dataSourceType, const std::string& detectorName, const std::string& userCodeName);
createUserInputSpec(DataSourceType dataSourceType, const std::string& detectorName, const std::string& userCodeName,
o2::header::DataHeader::SubSpecificationType subSpec = 0, const std::string& binding = "");

/// \brief returns a standard OutputSpec for QC inputs and outputs
/// \brief returns a standard OutputSpec for QC user data
///
/// Returns a standard OutputSpec for QC user data. The combination of the first four arguments should be unique
/// in a QC workflow. When provided binding is empty, userCodeName is used. If a Data Processor asks for multiple
/// outputs with the same userCodeName, a custom binding should be set.
framework::OutputSpec
createUserOutputSpec(DataSourceType dataSourceType, const std::string& detectorName, const std::string& userCodeName);
createUserOutputSpec(DataSourceType dataSourceType, const std::string& detectorName, const std::string& userCodeName,
o2::header::DataHeader::SubSpecificationType subSpec = 0, const framework::OutputLabel& binding = {});

} // namespace o2::quality_control::core

#endif // QUALITYCONTROL_USERINPUTOUTPUT_H
#endif // QUALITYCONTROL_USERINPUTOUTPUT_H
26 changes: 2 additions & 24 deletions Framework/src/Aggregator.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#include "QualityControl/Activity.h"
#include <Common/Exceptions.h>
#include "QualityControl/CommonSpec.h"
#include "QualityControl/DataHeaderHelpers.h"
#include "QualityControl/UserInputOutput.h"

#include <utility>
#include <algorithm>
Expand Down Expand Up @@ -253,33 +253,11 @@ AggregatorConfig Aggregator::extractConfig(const core::CommonSpec& commonSpec, c
std::move(objectNames),
checkAllObjects,
std::move(inputs),
createOutputSpec(aggregatorSpec.detectorName, aggregatorSpec.aggregatorName),
createUserOutputSpec(DataSourceType::Aggregator, aggregatorSpec.detectorName, aggregatorSpec.aggregatorName),
sources
};
}

o2::header::DataOrigin createAggregatorDataOrigin(const std::string& detector)
{
using Origin = o2::header::DataOrigin;
Origin header;
header.runtimeInit(std::string{ "A" }.append(detector.substr(0, Origin::size - 1)).c_str());
return header;
}

o2::header::DataDescription createAggregatorDataDescription(const std::string& aggregatorName)
{
if (aggregatorName.empty()) {
BOOST_THROW_EXCEPTION(FatalException() << AliceO2::Common::errinfo_details("Empty aggregatorName for aggregator's data description"));
}

return quality_control::core::createDataDescription(aggregatorName, Aggregator::descriptionHashLength);
}

framework::OutputSpec Aggregator::createOutputSpec(const std::string& detector, const std::string& aggregatorName)
{
return { createAggregatorDataOrigin(detector), createAggregatorDataDescription(aggregatorName), 0, framework::Lifetime::Sporadic };
}

void Aggregator::startOfActivity(const core::Activity& activity)
{
if (mAggregatorInterface) {
Expand Down
8 changes: 0 additions & 8 deletions Framework/src/AggregatorRunner.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,6 @@ void AggregatorRunner::prepareOutputs()
}
}

header::DataDescription AggregatorRunner::createAggregatorRunnerDataDescription(const std::string& aggregatorName)
{
if (aggregatorName.empty()) {
BOOST_THROW_EXCEPTION(FatalException() << errinfo_details("Empty taskName for task's data description"));
}
return quality_control::core::createDataDescription(aggregatorName, AggregatorRunner::descriptionHashLength);
}

std::string AggregatorRunner::createAggregatorRunnerName()
{
return AggregatorRunner::createAggregatorRunnerIdString(); // there is only one thus we can just take the idString
Expand Down
27 changes: 2 additions & 25 deletions Framework/src/Check.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include "QualityControl/RootClassFactory.h"
#include "QualityControl/QcInfoLogger.h"
#include "QualityControl/Quality.h"
#include "QualityControl/DataHeaderHelpers.h"
#include "QualityControl/UserInputOutput.h"
#include "QualityControl/ObjectMetadataHelpers.h"

#include <QualityControl/AggregatorRunner.h>
Expand All @@ -44,24 +44,6 @@ using namespace std;
namespace o2::quality_control::checker
{

/// Static functions
o2::header::DataDescription Check::createCheckDataDescription(const std::string& checkName)
{
if (checkName.empty()) {
BOOST_THROW_EXCEPTION(FatalException() << errinfo_details("Empty checkName for check's data description"));
}

return quality_control::core::createDataDescription(checkName, Check::descriptionHashLength);
}

o2::header::DataOrigin Check::createCheckDataOrigin(const std::string& detector)
{
using Origin = o2::header::DataOrigin;
Origin header;
header.runtimeInit(std::string{ "C" }.append(detector.substr(0, Origin::size - 1)).c_str());
return header;
}

/// Members
Check::Check(CheckConfig config)
: mCheckConfig(std::move(config))
Expand Down Expand Up @@ -281,15 +263,10 @@ CheckConfig Check::extractConfig(const CommonSpec& commonSpec, const CheckSpec&
checkAllObjects,
allowBeautify,
std::move(inputs),
createOutputSpec(checkSpec.detectorName, checkSpec.checkName),
createUserOutputSpec(DataSourceType::Check, checkSpec.detectorName, checkSpec.checkName),
};
}

framework::OutputSpec Check::createOutputSpec(const std::string& detector, const std::string& checkName)
{
return { createCheckDataOrigin(detector), createCheckDataDescription(checkName), 0, framework::Lifetime::Sporadic };
}

void Check::startOfActivity(const core::Activity& activity)
{
if (mCheckInterface) {
Expand Down
Loading