Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
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
19 changes: 18 additions & 1 deletion 19 Framework/Core/include/Framework/Expressions.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,12 @@ constexpr auto selectArrowType()
return atype::FLOAT;
} else if constexpr (std::is_same_v<T, double>) {
return atype::DOUBLE;
} else if constexpr (std::is_same_v<T, uint8_t>) {
} else if constexpr (std::is_same_v<T, int8_t>) {
return atype::INT8;
} else if constexpr (std::is_same_v<T, uint16_t>) {
return atype::INT16;
} else if constexpr (std::is_same_v<T, uint8_t>) {
return atype::UINT8;
} else {
return atype::NA;
}
Expand Down Expand Up @@ -236,6 +238,16 @@ inline Node operator/(Node left, Node right)
return Node{OpNode{BasicOp::Division}, std::move(left), std::move(right)};
}

inline Node operator/(BindingNode left, Node right)
{
return Node{OpNode{BasicOp::Division}, left, std::move(right)};
}

inline Node operator/(Node left, BindingNode right)
{
return Node{OpNode{BasicOp::Division}, std::move(left), right};
}

inline Node operator+(Node left, Node right)
{
return Node{OpNode{BasicOp::Addition}, std::move(left), std::move(right)};
Expand All @@ -246,6 +258,11 @@ inline Node operator-(Node left, Node right)
return Node{OpNode{BasicOp::Subtraction}, std::move(left), std::move(right)};
}

inline Node operator-(BindingNode left, BindingNode right)
{
return Node{OpNode{BasicOp::Subtraction}, left, right};
}

/// arithmetical operations between node and literal
template <typename T>
inline Node operator*(Node left, T right)
Expand Down
78 changes: 34 additions & 44 deletions 78 Framework/Core/src/AODReaderHelpers.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,6 @@

namespace o2::framework::readers
{

namespace
{
auto tableTypeFromInput(InputSpec const& spec)
{
auto description = std::visit(
overloaded{
[](ConcreteDataMatcher const& matcher) { return matcher.description; },
[](auto&&) { return header::DataDescription{""}; }},
spec.matcher);

if (description == header::DataDescription{"TRACKPAR"}) {
return o2::aod::TracksMetadata{};
} else {
throw std::runtime_error("Not an extended table");
}
}
} // namespace

enum AODTypeMask : uint64_t {
None = 0,
Track = 1 << 0,
Expand Down Expand Up @@ -192,12 +173,6 @@ auto spawner(framework::pack<C...> columns, arrow::Table* atable)
return results;
}

template <typename T>
auto extractTable(ProcessingContext& pc)
{
return pc.inputs().get<TableConsumer>(aod::MetadataTrait<T>::metadata::tableLabel())->asArrowTable();
}

AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector<InputSpec> requested)
{
return AlgorithmSpec::InitCallback{[requested](InitContext& ic) {
Expand All @@ -213,26 +188,41 @@ AlgorithmSpec AODReaderHelpers::aodSpawnerCallback(std::vector<InputSpec> reques
auto outputs = pc.outputs();
// spawn tables
for (auto& input : requested) {
using metadata = decltype(tableTypeFromInput(input));
using base_t = metadata::base_table_t;
using expressions = metadata::expression_pack_t;
auto extra_schema = o2::soa::createSchemaFromColumns(expressions{});
auto original_table = extractTable<base_t>(pc);
auto original_schema = original_table->schema();
auto num_fields = original_schema->num_fields();
std::vector<std::shared_ptr<arrow::Field>> fields;
auto arrays = spawner(expressions{}, original_table.get());
std::vector<std::shared_ptr<arrow::ChunkedArray>> columns = original_table->columns();
for (auto i = 0; i < num_fields; ++i) {
fields.emplace_back(original_schema->field(i));
}
for (auto i = 0u; i < framework::pack_size(expressions{}); ++i) {
columns.push_back(arrays[i]);
fields.emplace_back(extra_schema->field(i));
auto description = std::visit(
overloaded{
[](ConcreteDataMatcher const& matcher) { return matcher.description; },
[](auto&&) { return header::DataDescription{""}; }},
input.matcher);

auto origin = std::visit(
overloaded{
[](ConcreteDataMatcher const& matcher) { return matcher.origin; },
[](auto&&) { return header::DataOrigin{""}; }},
input.matcher);

auto maker = [&](auto metadata) {
using metadata_t = decltype(metadata);
using expressions = typename metadata_t::expression_pack_t;
auto extra_schema = o2::soa::createSchemaFromColumns(expressions{});
auto original_table = pc.inputs().get<TableConsumer>(input.binding)->asArrowTable();
auto original_fields = original_table->schema()->fields();
std::vector<std::shared_ptr<arrow::Field>> fields;
auto arrays = spawner(expressions{}, original_table.get());
std::vector<std::shared_ptr<arrow::ChunkedArray>> columns = original_table->columns();
std::copy(original_fields.begin(), original_fields.end(), std::back_inserter(fields));
for (auto i = 0u; i < framework::pack_size(expressions{}); ++i) {
columns.push_back(arrays[i]);
fields.emplace_back(extra_schema->field(i));
}
auto new_schema = std::make_shared<arrow::Schema>(fields);
return arrow::Table::Make(new_schema, columns);
};

if (description == header::DataDescription{"TRACKPAR"}) {
outputs.adopt(Output{origin, description}, maker(o2::aod::TracksMetadata{}));
} else {
throw std::runtime_error("Not an extended table");
}
auto new_schema = std::make_shared<arrow::Schema>(fields);
auto new_table = arrow::Table::Make(new_schema, columns);
outputs.adopt(Output{metadata::origin(), metadata::description()}, new_table);
}
};
}};
Expand Down
2 changes: 2 additions & 0 deletions 2 Framework/Core/src/ExpressionHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ struct ColumnOperationSpec {
case BasicOp::NotEqual:
type = atype::BOOL;
break;
case BasicOp::Division:
type = atype::FLOAT;
default:
type = atype::NA;
}
Expand Down
11 changes: 8 additions & 3 deletions 11 Framework/Core/src/Expressions.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ struct OpNodeHelper {
std::shared_ptr<arrow::DataType> concreteArrowType(atype::type type)
{
switch (type) {
case atype::UINT8:
return arrow::uint8();
case atype::INT8:
return arrow::int8();
case atype::INT16:
Expand Down Expand Up @@ -199,17 +201,20 @@ Operations createOperations(Filter const& expression)
return atype::FLOAT;
}

if (t1 == t2)
if (t1 == t2) {
return t1;
}

if (t1 == atype::INT32) {
if (t1 == atype::INT32 || t1 == atype::INT8 || t1 == atype::INT16 || t1 == atype::UINT8) {
if (t2 == atype::INT32 || t2 == atype::INT8 || t2 == atype::INT16 || t2 == atype::UINT8)
return atype::FLOAT;
if (t2 == atype::FLOAT)
return atype::FLOAT;
if (t2 == atype::DOUBLE)
return atype::DOUBLE;
}
if (t1 == atype::FLOAT) {
if (t2 == atype::INT32)
if (t2 == atype::INT32 || t2 == atype::INT8 || t2 == atype::INT16 || t2 == atype::UINT8)
return atype::FLOAT;
if (t2 == atype::DOUBLE)
return atype::DOUBLE;
Expand Down
Morty Proxy This is a proxified and sanitized view of the page, visit original site.