Skip to content

Commit 6b7c6cd

Browse files
committed
add expression metadata to input specs
1 parent ff12e02 commit 6b7c6cd

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,6 +1295,9 @@ concept with_ccdb_urls = requires {
12951295
template <typename T>
12961296
concept with_base_table = not_void<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata::base_table_t>;
12971297

1298+
template <typename T>
1299+
concept with_expression_pack = not_void<typename aod::MetadataTrait<o2::aod::Hash<T::ref.desc_hash>>::metadata::expression_pack_t>;
1300+
12981301
template <size_t N1, std::array<TableRef, N1> os1, size_t N2, std::array<TableRef, N2> os2>
12991302
consteval bool is_compatible()
13001303
{

Framework/Core/include/Framework/AnalysisHelpers.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ constexpr auto tableRef2ConfigParamSpec()
3838
{"\"\""}};
3939
}
4040

41+
std::string serializeProjectors(std::vector<framework::expressions::Projector>& projectors);
42+
4143
namespace
4244
{
4345
template <soa::with_sources T>
@@ -97,6 +99,26 @@ constexpr auto getCCDBMetadata() -> std::vector<framework::ConfigParamSpec>
9799
{
98100
return {};
99101
}
102+
103+
template <soa::with_expression_pack T>
104+
constexpr auto getExpressionMetadata() -> std::optional<framework::ConfigParamSpec>
105+
{
106+
using expression_pack_t = T::expression_pack_t;
107+
108+
auto projectors = []<typename... C>(framework::pack<C...>) -> std::vector<framework::expressions::Projector> {
109+
return {C::Projector()...};
110+
}(expression_pack_t{});
111+
112+
auto json = serializeProjectors(projectors);
113+
return framework::ConfigParamSpec{"projectors", framework::VariantType::String, json, {"\"\""}};
114+
}
115+
116+
template <typename T>
117+
constexpr auto getExpressionMetadata() -> std::optional<framework::ConfigParamSpec>
118+
{
119+
return {};
120+
}
121+
100122
} // namespace
101123

102124
template <TableRef R>
@@ -107,6 +129,10 @@ constexpr auto tableRef2InputSpec()
107129
metadata.insert(metadata.end(), m.begin(), m.end());
108130
auto ccdbMetadata = getCCDBMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>();
109131
metadata.insert(metadata.end(), ccdbMetadata.begin(), ccdbMetadata.end());
132+
auto p = getExpressionMetadata<typename o2::aod::MetadataTrait<o2::aod::Hash<R.desc_hash>>::metadata>();
133+
if (p) {
134+
metadata.insert(metadata.end(), p.value());
135+
}
110136

111137
return framework::InputSpec{
112138
o2::aod::label<R>(),

Framework/Core/src/AnalysisHelpers.cxx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111
#include "Framework/ExpressionHelpers.h"
12+
#include "Framework/ExpressionJSONHelpers.h"
1213

1314
namespace o2::framework
1415
{
@@ -26,4 +27,11 @@ void initializePartitionCaches(std::set<uint32_t> const& hashes, std::shared_ptr
2627
gfilter = framework::expressions::createFilter(schema, framework::expressions::makeCondition(tree));
2728
}
2829
}
30+
31+
std::string serializeProjectors(std::vector<framework::expressions::Projector>& projectors)
32+
{
33+
std::stringstream osm;
34+
ExpressionJSONHelpers::write(osm, projectors);
35+
return osm.str();
36+
}
2937
} // namespace o2::framework

0 commit comments

Comments
 (0)