Project
Loading...
Searching...
No Matches
DataSpecUtils.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11#ifndef FRAMEWORK_DATASPECUTILS_H
12#define FRAMEWORK_DATASPECUTILS_H
13
15#include "Framework/InputSpec.h"
16#include "Headers/DataHeader.h"
17#include "Framework/Output.h"
18
19#include <optional>
20
21namespace o2::framework
22{
23
24template <typename T>
25concept HasMatcher = requires(T& t) { t.matcher; };
26
29 static bool match(InputSpec const& spec, ConcreteDataMatcher const& target);
30
32 static bool match(InputSpec const& spec, ConcreteDataTypeMatcher const& target);
33
37 static bool match(OutputSpec const& left, OutputSpec const& right);
38
40 static bool match(OutputSpec const& spec, ConcreteDataMatcher const& target);
41
43 static bool match(InputSpec const& input, OutputSpec const& output);
44
45 static bool match(const InputSpec& spec,
49
50 static bool match(const OutputSpec& spec,
54
55 static bool match(const InputSpec& spec, o2::header::DataHeader const& dh)
56 {
58 }
59
60 static bool match(const OutputSpec& spec, o2::header::DataHeader const& dh)
61 {
63 }
64
67 template <typename ContainerT>
68 static std::optional<typename ContainerT::value_type> find(ContainerT const& container,
72 {
73 for (auto const& spec : container) {
74 if (match(spec, origin, description, subSpec)) {
75 return std::make_optional<typename ContainerT::value_type>(spec);
76 }
77 }
78 return std::nullopt;
79 }
80
82 static bool partialMatch(InputSpec const& spec, o2::header::DataOrigin const& origin);
83
85 template <size_t N>
86 static bool partialMatch(InputSpec const& spec, std::array<header::DataOrigin, N> const& origins)
87 {
88 return std::find_if(origins.begin(), origins.end(), [&](auto const& o) { return DataSpecUtils::asConcreteOrigin(spec) == o; }) != origins.end();
89 }
90
92 static bool partialMatch(OutputSpec const& spec, o2::header::DataOrigin const& origin);
93
95 template <size_t N>
96 static bool partialMatch(OutputSpec const& spec, std::array<header::DataOrigin, N> const& origins)
97 {
98 auto dataType = DataSpecUtils::asConcreteDataTypeMatcher(spec);
99 return std::find_if(origins.begin(), origins.end(), [&](auto const& o) { return dataType.origin == o; }) != origins.end();
100 }
101
103 static bool partialMatch(InputSpec const& spec, o2::header::DataDescription const& description);
104
106 static bool partialMatch(OutputSpec const& spec, o2::header::DataDescription const& description);
107
108 template <typename T>
109 static bool match(const T& spec, const o2::header::DataHeader& header)
110 {
111 return DataSpecUtils::match(spec,
112 header.dataOrigin,
113 header.dataDescription,
114 header.subSpecification);
115 }
116
121 static std::string describe(InputSpec const& spec);
122
128 static std::string describe(OutputSpec const& spec);
129
131 static std::string describe(ConcreteDataMatcher const& matcher);
132
135 static std::string label(InputSpec const& spec);
136
139 static std::string label(OutputSpec const& spec);
140
143 static std::string restEndpoint(InputSpec const& spec);
144
151
153 static bool validate(InputSpec const& input);
154
156 static bool validate(OutputSpec const& output);
157
159 template <HasMatcher T>
160 static size_t describe(char* buffer, size_t size, T const& spec);
161
166
172
176 static std::optional<ConcreteDataMatcher> asOptionalConcreteDataMatcher(OutputSpec const& spec);
177
183
189
195
201
208 static OutputSpec asOutputSpec(InputSpec const& spec);
209
212 static InputSpec matchingInput(OutputSpec const& spec);
213
215 static InputSpec fromMetadataString(std::string s);
216
218 static ConcreteDataMatcher fromString(std::string s);
219
221 static std::optional<header::DataOrigin> getOptionalOrigin(InputSpec const& spec);
222
224 static std::optional<header::DataDescription> getOptionalDescription(InputSpec const& spec);
225
227 static std::optional<header::DataHeader::SubSpecificationType> getOptionalSubSpec(OutputSpec const& spec);
228
230 static std::optional<header::DataHeader::SubSpecificationType> getOptionalSubSpec(InputSpec const& spec);
231
234
237
240
243
246 static std::optional<framework::ConcreteDataMatcher> optionalConcreteDataMatcherFrom(data_matcher::DataDescriptorMatcher const& matcher);
247
249 static bool includes(const InputSpec& left, const InputSpec& right);
250
252 static void updateInputList(std::vector<InputSpec>& list, InputSpec&& input);
253
255 static void updateOutputList(std::vector<OutputSpec>& list, OutputSpec&& input);
256};
257
258} // namespace o2::framework
259
260#endif // FRAMEWORK_DATASPECUTILS_H
header::DataOrigin origin
header::DataDescription description
std::vector< std::string > header
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error s
void output(const std::map< std::string, ChannelStat > &channels)
Definition rawdump.cxx:197
GLsizeiptr size
Definition glcorearb.h:659
GLdouble GLdouble right
Definition glcorearb.h:4077
GLint left
Definition glcorearb.h:1979
GLuint GLsizei const GLchar * label
Definition glcorearb.h:2519
Defining ITS Vertex explicitly as messageable.
Definition Cartesian.h:288
static std::optional< ConcreteDataMatcher > asOptionalConcreteDataMatcher(OutputSpec const &spec)
static bool partialMatch(InputSpec const &spec, o2::header::DataOrigin const &origin)
static InputSpec fromMetadataString(std::string s)
Create an InputSpec from metadata string.
static std::string describe(InputSpec const &spec)
static void updateOutputList(std::vector< OutputSpec > &list, OutputSpec &&input)
Updates list of OutputSpecs by merging metadata (or adding output).
static bool match(const T &spec, const o2::header::DataHeader &header)
static ConcreteDataTypeMatcher asConcreteDataTypeMatcher(OutputSpec const &spec)
static bool validate(InputSpec const &input)
static bool partialMatch(OutputSpec const &spec, std::array< header::DataOrigin, N > const &origins)
static std::optional< typename ContainerT::value_type > find(ContainerT const &container, const o2::header::DataOrigin &origin, const o2::header::DataDescription &description, const o2::header::DataHeader::SubSpecificationType &subSpec)
static bool match(const InputSpec &spec, o2::header::DataHeader const &dh)
static ConcreteDataMatcher asConcreteDataMatcher(InputSpec const &input)
static std::optional< header::DataHeader::SubSpecificationType > getOptionalSubSpec(OutputSpec const &spec)
Get the subspec, if available.
static InputSpec matchingInput(OutputSpec const &spec)
static data_matcher::DataDescriptorMatcher dataDescriptorMatcherFrom(ConcreteDataMatcher const &concrete)
Build a DataDescriptMatcher which does not care about the subSpec.
static ConcreteDataMatcher fromString(std::string s)
Create a concrete data matcher from serialized string.
static std::optional< framework::ConcreteDataMatcher > optionalConcreteDataMatcherFrom(data_matcher::DataDescriptorMatcher const &matcher)
static std::string restEndpoint(InputSpec const &spec)
static bool match(const OutputSpec &spec, o2::header::DataHeader const &dh)
static std::optional< header::DataDescription > getOptionalDescription(InputSpec const &spec)
Get the description, if available.
static std::optional< header::DataOrigin > getOptionalOrigin(InputSpec const &spec)
Get the origin, if available.
static void updateMatchingSubspec(InputSpec &in, header::DataHeader::SubSpecificationType subSpec)
static bool includes(const InputSpec &left, const InputSpec &right)
Checks if left includes right (or is equal to)
static header::DataOrigin asConcreteOrigin(InputSpec const &spec)
static void updateInputList(std::vector< InputSpec > &list, InputSpec &&input)
Updates list of InputSpecs by merging metadata.
static header::DataDescription asConcreteDataDescription(InputSpec const &spec)
static bool partialMatch(InputSpec const &spec, std::array< header::DataOrigin, N > const &origins)
static OutputSpec asOutputSpec(InputSpec const &spec)
static bool match(InputSpec const &spec, ConcreteDataMatcher const &target)
the main header struct
Definition DataHeader.h:623
DataDescription dataDescription
Definition DataHeader.h:641
SubSpecificationType subSpecification
Definition DataHeader.h:661