13#include "../src/ExpressionJSONHelpers.h"
14#include "../src/IndexJSONHelpers.h"
33 std::vector<framework::ConcreteDataMatcher>
matchers;
37 std::vector<o2::soa::IndexRecord>
records;
48 auto loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"index-records") == 0; });
49 std::stringstream iws(loc->defaultValue.get<std::string>());
52 loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"index-exclusive") == 0; });
53 exclusive = loc->defaultValue.get<
bool>();
59 outputSchema = std::make_shared<arrow::Schema>([](std::vector<o2::soa::IndexRecord>
const& recs) {
60 std::vector<std::shared_ptr<arrow::Field>>
fields;
61 fields.reserve(recs.size());
62 std::ranges::transform(recs, std::back_inserter(
fields), [](
auto&
r) {
return r.field(); });
65 ->WithMetadata(std::make_shared<arrow::KeyValueMetadata>(std::vector{std::string{
"label"}}, std::vector{std::string{
binding}}));
68 framework::Builder createBuilder()
const
89 std::vector<Builder> builders;
90 builders.reserve(requested.size());
91 std::ranges::transform(requested, std::back_inserter(builders), [](
auto const&
i) {
return Buildable{
i}.createBuilder(); });
93 auto outputs = pc.outputs();
94 std::ranges::for_each(builders, [&pc, &outputs](
auto& builder) { outputs.adopt(
Output{builder.
origin, builder.description, builder.version}, builder.materialize(pc)); });
103 std::vector<std::string>
labels;
104 std::vector<framework::ConcreteDataMatcher>
matchers;
114 explicit Spawnable(
InputSpec const& spec)
121 auto loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"projectors") == 0; });
122 std::stringstream iws(loc->defaultValue.get<std::string>());
125 loc = std::find_if(spec.
metadata.begin(), spec.
metadata.end(), [](ConfigParamSpec
const& cps) { return cps.name.compare(
"schema") == 0; });
127 iws.str(loc->defaultValue.get<std::string>());
131 std::vector<std::shared_ptr<arrow::Schema>> schemas;
132 for (
auto const&
i : spec.
metadata | views::filter_string_params_starts_with(
"input-schema:")) {
133 labels.emplace_back(
i.name.substr(13));
135 auto json =
i.defaultValue.get<std::string>();
139 std::ranges::transform(spec.
metadata |
140 views::filter_string_params_starts_with(
"input:") |
141 std::ranges::views::transform(
142 [](
auto const&
param) {
143 return DataSpecUtils::fromMetadataString(param.defaultValue.template get<std::string>());
145 std::back_inserter(
matchers), [](
auto const&
i) { return std::get<ConcreteDataMatcher>(i.matcher); });
147 std::vector<std::shared_ptr<arrow::Field>>
fields;
148 std::ranges::for_each(schemas,
150 std::ranges::copy(
s->fields(), std::back_inserter(
fields));
157 std::shared_ptr<gandiva::Projector> makeProjector()
const
159 std::shared_ptr<gandiva::Projector>
p =
nullptr;
160 auto s = gandiva::Projector::Make(
170 framework::Spawner createMaker()
const
192 std::vector<Spawner> spawners;
193 spawners.reserve(requested.size());
194 std::ranges::transform(requested, std::back_inserter(spawners), [](
auto const&
i) {
return Spawnable{
i}.createMaker(); });
196 auto outputs = pc.outputs();
std::shared_ptr< arrow::Schema > outputSchema
std::vector< o2::soa::IndexRecord > records
std::vector< framework::ConcreteDataMatcher > matchers
header::DataDescription description
std::vector< expressions::Projector > projectors
std::vector< std::shared_ptr< gandiva::Expression > > expressions
std::shared_ptr< arrow::Schema > inputSchema
std::vector< std::shared_ptr< arrow::Field > > fields
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
std::vector< o2::MCCompLabel > labels
std::vector< std::shared_ptr< gandiva::Expression > > materializeProjectors(std::vector< expressions::Projector > const &projectors, std::shared_ptr< arrow::Schema > const &inputSchema, std::vector< std::shared_ptr< arrow::Field > > const &outputFields)
void addLabelToSchema(std::shared_ptr< arrow::Schema > &schema, const char *label)
auto spawner(std::shared_ptr< arrow::Table > const &fullTable, const char *name, o2::framework::expressions::Projector *projectors, std::shared_ptr< gandiva::Projector > &projector, std::shared_ptr< arrow::Schema > const &schema)
Expression-based column generator to materialize columns.
RuntimeErrorRef runtime_error_f(const char *,...)
const float const float const float const float std::array< float, 3 > & origin
std::function< ProcessCallback(InitContext &)> InitCallback
static std::shared_ptr< arrow::Schema > read(std::istream &s)
static ConcreteDataMatcher asConcreteDataMatcher(InputSpec const &input)
static std::vector< expressions::Projector > read(std::istream &s)
static std::vector< o2::soa::IndexRecord > read(std::istream &s)
header::DataOrigin origin
static AlgorithmSpec indexBuilderCallback(ConfigContext const &)
static AlgorithmSpec aodSpawnerCallback(ConfigContext const &)