11#ifndef o2_framework_AnalysisHelpers_H_DEFINED
12#define o2_framework_AnalysisHelpers_H_DEFINED
37 std::vector<std::pair<int, ConcreteDataMatcher>>
matchers;
49 std::shared_ptr<arrow::DataType>
type = [](
IndexKind kind) -> std::shared_ptr<arrow::DataType> {
53 return arrow::int32();
55 return arrow::fixed_size_list(arrow::int32(), 2);
57 return arrow::list(arrow::int32());
65 return (this->label ==
other.label) && (this->columnLabel ==
other.columnLabel) && (this->kind ==
other.kind) && (this->pos ==
other.pos);
68 std::shared_ptr<arrow::Field>
field()
const
75 static std::vector<framework::IndexColumnBuilder>
makeBuilders(std::vector<std::shared_ptr<arrow::Table>>&& tables, std::vector<soa::IndexRecord>
const&
records);
76 static void resetBuilders(std::vector<framework::IndexColumnBuilder>& builders, std::vector<std::shared_ptr<arrow::Table>>&& tables);
78 static std::shared_ptr<arrow::Table>
materialize(std::vector<framework::IndexColumnBuilder>& builders, std::vector<std::shared_ptr<arrow::Table>>&& tables, std::vector<soa::IndexRecord>
const&
records, std::shared_ptr<arrow::Schema>
const&
schema,
bool exclusive);
87template <soa::is_table T>
94template <soa::TableRef R>
102template <
typename... Cs>
109template <aod::is_aod_hash D>
117std::shared_ptr<arrow::Table>
spawnerHelper(std::shared_ptr<arrow::Table>
const& fullTable, std::shared_ptr<arrow::Schema> newSchema,
size_t nColumns,
120std::shared_ptr<arrow::Table>
spawnerHelper(std::shared_ptr<arrow::Table>
const& fullTable, std::shared_ptr<arrow::Schema> newSchema,
121 const char*
name,
size_t nColumns,
122 const std::shared_ptr<gandiva::Projector>& projector);
125template <aod::is_aod_hash D>
129 if (fullTable->num_rows() == 0) {
130 return makeEmptyTable<D>(
name);
132 constexpr auto Ncol = []<
typename M>() {
142template <
typename... C>
145 std::array<const char*, 1>
labels{
"original"};
147 if (fullTable->num_rows() == 0) {
161 std::vector<framework::ConcreteDataMatcher>
matchers;
163 std::shared_ptr<gandiva::Projector>
projector =
nullptr;
164 std::shared_ptr<arrow::Schema>
schema =
nullptr;
177 std::vector<framework::ConcreteDataMatcher>
matchers;
184 std::shared_ptr<std::vector<framework::IndexColumnBuilder>>
builders =
nullptr;
199 std::string{
"input:"} + o2::aod::label<R>(),
201 aod::sourceSpec<R>(),
209 std::string{
"input-schema:"} + o2::aod::label<R>(),
217template <soa::with_sources T>
218inline constexpr auto getSources()
220 return []<
size_t N, std::array<soa::TableRef, N> refs>() {
221 return []<
size_t... Is>(std::index_sequence<Is...>) {
222 return std::vector{soa::tableRef2ConfigParamSpec<refs[Is]>()...};
223 }(std::make_index_sequence<N>());
224 }.template operator()<T::sources.size(), T::sources>();
227template <soa::with_sources T>
228inline constexpr auto getSourceSchemas()
230 return []<
size_t N, std::array<soa::TableRef, N> refs>() {
231 return []<
size_t... Is>(std::index_sequence<Is...>) {
232 return std::vector{soa::tableRef2Schema<refs[Is]>()...};
233 }(std::make_index_sequence<N>());
234 }.template operator()<T::sources.size(), T::sources>();
237template <soa::with_sources_generator
T, aod::is_origin_hash O =
o2::aod::Hash<
"AOD"_h>>
238inline constexpr auto getSources()
240 return []<
size_t N, std::array<soa::TableRef, N> refs>() {
241 return []<
size_t... Is>(std::index_sequence<Is...>) {
242 return std::vector{soa::tableRef2ConfigParamSpec<refs[Is]>()...};
243 }(std::make_index_sequence<N>());
244 }.template operator()<T::N, T::template generateSources<O>()>();
247template <soa::with_sources_generator
T, aod::is_origin_hash O =
o2::aod::Hash<
"AOD"_h>>
248inline constexpr auto getSourceSchemas()
250 return []<
size_t N, std::array<soa::TableRef, N> refs>() {
251 return []<
size_t... Is>(std::index_sequence<Is...>) {
252 return std::vector{soa::tableRef2Schema<refs[Is]>()...};
253 }(std::make_index_sequence<N>());
254 }.template operator()<T::N, T::template generateSources<O>()>();
257template <soa::with_ccdb_urls T>
258inline constexpr auto getCCDBUrls()
260 std::vector<framework::ConfigParamSpec>
result;
261 for (
size_t i = 0;
i < T::ccdb_urls.size(); ++
i) {
262 result.push_back({std::string{
"ccdb:"} + std::string{T::ccdb_bindings[
i]},
271 requires(std::same_as<T, int>)
278 requires(std::is_bounded_array_v<T>)
285 requires(framework::is_specialization_v<T, std::vector>)
291template <soa::with_index_pack T>
294 std::vector<IndexRecord>
idx;
295 using indices = T::index_pack_t;
297 [&
idx, &newOrigin]<
size_t... Is>(std::index_sequence<Is...>)
mutable {
298 constexpr auto refs = T::generateSources();
299 ([&
idx, &newOrigin]<TableRef
ref,
typename C>()
mutable {
301 auto matcher = o2::aod::matcher<ref>();
305 if constexpr (
pos == -1) {
308 idx.emplace_back(o2::aod::label<ref>(),
matcher, C::columnLabel(), getIndexKind<typename C::type>(),
pos);
310 }.template operator()<refs[Is],
typename framework::pack_element_t<Is, indices>>(),
317template <soa::with_sources_generator
T, aod::is_origin_hash O =
o2::aod::Hash<
"AOD"_h>>
318constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
320 std::vector<framework::ConfigParamSpec> inputMetadata;
322 auto inputSources = getSources<T, O>();
323 std::sort(inputSources.begin(), inputSources.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name < b.name; });
324 auto last = std::unique(inputSources.begin(), inputSources.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name == b.name; });
325 inputSources.erase(last, inputSources.end());
326 inputMetadata.insert(inputMetadata.end(), inputSources.begin(), inputSources.end());
328 auto inputSchemas = getSourceSchemas<T, O>();
329 std::sort(inputSchemas.begin(), inputSchemas.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name < b.name; });
330 last = std::unique(inputSchemas.begin(), inputSchemas.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name == b.name; });
331 inputSchemas.erase(last, inputSchemas.end());
332 inputMetadata.insert(inputMetadata.end(), inputSchemas.begin(), inputSchemas.end());
334 return inputMetadata;
337template <soa::with_sources T>
338constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
340 std::vector<framework::ConfigParamSpec> inputMetadata;
342 auto inputSources = getSources<T>();
343 std::sort(inputSources.begin(), inputSources.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name < b.name; });
344 auto last = std::unique(inputSources.begin(), inputSources.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name == b.name; });
345 inputSources.erase(last, inputSources.end());
346 inputMetadata.insert(inputMetadata.end(), inputSources.begin(), inputSources.end());
348 auto inputSchemas = getSourceSchemas<T>();
349 std::sort(inputSchemas.begin(), inputSchemas.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name < b.name; });
350 last = std::unique(inputSchemas.begin(), inputSchemas.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name == b.name; });
351 inputSchemas.erase(last, inputSchemas.end());
352 inputMetadata.insert(inputMetadata.end(), inputSchemas.begin(), inputSchemas.end());
354 return inputMetadata;
358 requires(!(soa::with_sources<T> || soa::with_sources_generator<T>))
359constexpr auto getInputMetadata() -> std::vector<framework::ConfigParamSpec>
364template <soa::with_ccdb_urls T>
365constexpr auto getCCDBMetadata() -> std::vector<framework::ConfigParamSpec>
367 std::vector<framework::ConfigParamSpec> results = getCCDBUrls<T>();
368 std::sort(results.begin(), results.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name < b.name; });
369 auto last = std::unique(results.begin(), results.end(), [](framework::ConfigParamSpec
const&
a, framework::ConfigParamSpec
const&
b) { return a.name == b.name; });
370 results.erase(last, results.end());
375constexpr auto getCCDBMetadata() -> std::vector<framework::ConfigParamSpec>
380template <soa::with_expression_pack T>
381constexpr auto getExpressionMetadata() -> std::vector<framework::ConfigParamSpec>
383 using expression_pack_t = T::expression_pack_t;
385 auto projectors = []<
typename...
C>(framework::pack<
C...>) -> std::vector<framework::expressions::Projector> {
386 std::vector<framework::expressions::Projector>
result;
387 (
result.emplace_back(std::move(C::Projector())), ...);
389 }(expression_pack_t{});
396 requires(!soa::with_expression_pack<T>)
397constexpr auto getExpressionMetadata() -> std::vector<framework::ConfigParamSpec>
402template <soa::with_index_pack T>
405 auto map = getIndexMapping<T>(newOrigin);
411 requires(!soa::with_index_pack<T>)
412constexpr auto getIndexMetadata(
header::DataOrigin) -> std::vector<framework::ConfigParamSpec>
422 std::vector<framework::ConfigParamSpec> metadata;
423 std::vector<framework::ConfigParamSpec>
sources;
430 std::ranges::transform(
sources,
sources.begin(), [originStr = newOrigin.as<std::string>()](framework::ConfigParamSpec&
source) {
431 return replaceOrigin(source, originStr);
437 metadata.insert(metadata.end(), ccdbURLs.begin(), ccdbURLs.end());
446 return framework::InputSpec{
448 ((
R.origin_hash ==
"AOD"_h) && (newOrigin !=
header::DataOrigin{
"AOD"})) ? newOrigin : o2::aod::origin<R>(),
449 o2::aod::description(o2::aod::signature<R>()),
451 framework::Lifetime::Timeframe,
458 std::vector<framework::ConfigParamSpec> metadata;
462 }
else if constexpr (soa::with_expression_pack<md>) {
464 }
else if constexpr (soa::with_index_pack<md>) {
470 return framework::OutputSpec{
471 framework::OutputLabel{o2::aod::label<R>()},
472 ((
R.origin_hash ==
"AOD"_h) && (newOrigin !=
header::DataOrigin{
"AOD"})) ? newOrigin : o2::aod::origin<R>(),
473 o2::aod::description(o2::aod::signature<R>()),
475 framework::Lifetime::Timeframe,
501template <is_producable T>
509 return soa::tableRef2OutputSpec<persistent_table_t::ref>(newOrigin);
512 template <
typename...
Ts>
514 requires(
sizeof...(Ts) ==
framework::pack_size(
typename persistent_table_t::persistent_columns_t{}))
517 cursor(0, extract(args)...);
528 mBuilder = std::move(builder);
539 mBuilder->setLabel(
label);
548 mBuilder->reserve(
typename persistent_table_t::column_types{},
size);
550 cursor = std::move(
FFL(mBuilder->template unsafeCursor<persistent_table_t>()));
562 if (mReserved >= 0 && mCount + 1 > mReserved) {
564 <<
" rows after reserve(" << mReserved
565 <<
"). UnsafeAppend overran the reserved buffer — reserve() must request "
566 "at least as many rows as are filled.";
576 return arg.globalIndex();
579 template <
typename A>
581 static decltype(
auto) extract(
A&& arg)
594 int64_t mReserved = -1;
598template <soa::is_table T>
603template <soa::is_iterator T>
604consteval auto typeWithRef() ->
typename T::parent_t
609 requires soa::is_table<T> || soa::is_iterator<T>
616 return soa::tableRef2OutputSpec<table_t::ref>();
619 static constexpr auto ref()
621 return soa::tableRef2OutputRef<table_t::ref>();
633template <is_producable T>
638concept is_produces =
requires(T t) {
typename T::cursor_t;
typename T::persistent_table_t; &T::cursor; };
655template <soa::is_metadata M, soa::TableRef Ref>
663 return soa::tableRef2OutputSpec<Ref>(newOrigin);
669 return [&newOrigin]<
size_t... Is>(std::index_sequence<Is...>) {
670 return std::array{soa::tableRef2InputSpec<sources[Is]>(newOrigin)...};
671 }(std::make_index_sequence<
sources.size()>());
683template <is_spawnable T>
694template <is_spawnable T>
695struct Spawns : decltype(transformBase<T>()) {
698 using extension_t =
typename metadata::template extension_table_t_from<
o2::aod::Hash<T::originals[T::originals.size() - 1].origin_hash>>;
716 std::shared_ptr<typename T::table_t>
table =
nullptr;
720 return {{std::move(C::Projector())...}};
723 std::shared_ptr<gandiva::Projector>
projector =
nullptr;
724 std::shared_ptr<arrow::Schema>
schema = []() {
726 s->WithMetadata(std::make_shared<arrow::KeyValueMetadata>(std::vector{std::string{
"label"}}, std::vector{std::string{o2::aod::label<T::ref>()}}));
733 typename T::metadata;
734 typename T::expression_pack_t;
735 requires std::same_as<
decltype(t.projector), std::shared_ptr<gandiva::Projector>>;
742template <is_dynamically_spawnable T,
bool DELAYED = false>
743struct Defines : decltype(transformBase<T>()) {
747 using extension_t =
typename metadata::template extension_table_t_from<
o2::aod::Hash<T::originals[T::originals.size() - 1].origin_hash>>;
764 std::shared_ptr<typename T::table_t>
table =
nullptr;
767 std::array<o2::framework::expressions::Projector, N>
projectors;
768 std::shared_ptr<gandiva::Projector>
projector =
nullptr;
769 std::shared_ptr<arrow::Schema>
schema = []() {
771 s->WithMetadata(std::make_shared<arrow::KeyValueMetadata>(std::vector{std::string{
"label"}}, std::vector{std::string{o2::aod::label<T::ref>()}}));
784template <is_dynamically_spawnable T>
789 typename T::metadata;
790 typename T::placeholders_pack_t;
791 requires std::same_as<
decltype(t.projector), std::shared_ptr<gandiva::Projector>>;
792 requires std::same_as<
decltype(t.needRecompilation),
bool>;
805template <soa::is_index_table T>
812template <soa::is_index_table T>
813struct Builds : decltype(transformBase<T>()) {
816 using Key = metadata::Key;
817 using H =
typename T::first_t;
818 using Ts =
typename T::rest_t;
821 std::shared_ptr<arrow::Schema>
outputSchema = []() {
return std::make_shared<arrow::Schema>(
soa::createFieldsFromColumns(
index_pack_t{}))->WithMetadata(std::make_shared<arrow::KeyValueMetadata>(std::vector{std::string{
"label"}}, std::vector{std::string{o2::aod::label<T::ref>()}})); }();
823 std::vector<soa::IndexRecord>
map = soa::getIndexMapping<metadata>();
825 std::vector<framework::IndexColumnBuilder>
builders;
838 return table->asArrowTable();
847 auto build(std::vector<std::shared_ptr<arrow::Table>>&& tables)
850 return (this->table !=
nullptr);
856 typename T::metadata;
858 requires std::same_as<
decltype(t.map), std::vector<soa::IndexRecord>>;
895 object = std::make_shared<T>(t);
896 object->SetName(
label.c_str());
901 object = std::make_shared<T>(t);
902 object->SetName(
label.c_str());
908 object->SetName(
label.c_str());
914 object->SetName(
label.c_str());
927 std::memset(desc.str,
'_', 16);
929 s << std::hex << lhash;
931 s << std::hex << reinterpret_cast<uint64_t>(
this);
932 std::memcpy(desc.str, s.str().c_str(), 12);
943 return *
object.get();
964 requires std::same_as<
decltype(t.operator->()),
typename T::obj_t*>;
965 requires std::same_as<
decltype(t.object), std::shared_ptr<typename T::obj_t>>;
976 decltype(
auto) operator->()
const
988 requires std::same_as<
decltype(t.service),
typename T::service_t*>;
994 return std::make_unique<
o2::soa::Filtered<std::decay_t<
decltype(table)>>>(std::vector{table}, std::forward<soa::SelectionVector>(selection));
999 return std::make_unique<
o2::soa::Filtered<std::decay_t<
decltype(table)>>>(std::vector{table.asArrowTable()}, std::forward<soa::SelectionVector>(selection));
1011template <
typename T>
1031 intializeCaches(T::table_t::hashes(), table.asArrowTable()->schema());
1038 template <
typename...
Ts>
1042 mFiltered->bindExternalIndices(tables...);
1046 template <
typename E>
1069 template <
typename T1>
1085 template <
typename T1,
typename Policy,
bool OPT>
1124template <
typename T>
1126 &T::updatePlaceholders;
1127 requires std::same_as<
decltype(t.filter), expressions::Filter>;
1140 static std::shared_ptr<gandiva::Projector> projector =
nullptr;
1151 return output_t{{table.asArrowTable()}, table.offset()};
std::vector< o2::soa::IndexRecord > records
std::vector< expressions::Projector > projectors
std::vector< std::shared_ptr< gandiva::Expression > > expressions
std::vector< std::string > labels
o2::monitoring::tags::Key Key
std::shared_ptr< arrow::Schema > schema
std::unique_ptr< expressions::Node > node
constexpr uint32_t runtime_hash(char const *str)
T::template iterator_template_o< FilteredIndexPolicy, self_t > iterator
Helper to check if a type T is an iterator.
GLuint const GLchar * name
GLboolean GLboolean GLboolean b
GLsizei GLsizei GLchar * source
GLsizei const GLfloat * value
GLint GLint GLsizei GLint GLenum GLenum type
GLuint GLsizei const GLchar * label
GLsizei GLenum const void * indices
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLboolean GLboolean GLboolean GLboolean a
std::shared_ptr< gandiva::Filter > FilterPtr
constexpr framework::ConcreteDataMatcher matcher()
std::variant< OriginValueMatcher, DescriptionValueMatcher, SubSpecificationTypeValueMatcher, std::unique_ptr< DataDescriptorMatcher >, ConstantValueMatcher, StartTimeValueMatcher > Node
std::shared_ptr< gandiva::Projector > createProjectorHelper(size_t nColumns, expressions::Projector *projectors, std::shared_ptr< arrow::Schema > schema, std::vector< std::shared_ptr< arrow::Field > > const &fields)
gandiva::Selection createSelection(std::shared_ptr< arrow::Table > const &table, Filter const &expression)
Function for creating gandiva selection from our internal filter tree.
void updatePlaceholders(Filter &filter, InitContext &context)
Update placeholder nodes from context.
Defining ITS Vertex explicitly as messageable.
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.
std::string serializeSchema(std::shared_ptr< arrow::Schema > schema)
consteval auto transformBase()
This helper struct allows you to declare index tables to be created in a task.
std::string serializeProjectors(std::vector< framework::expressions::Projector > &projectors)
std::shared_ptr< arrow::Table > spawnerHelper(std::shared_ptr< arrow::Table > const &fullTable, std::shared_ptr< arrow::Schema > newSchema, size_t nColumns, expressions::Projector *projectors, const char *name, std::shared_ptr< gandiva::Projector > &projector)
constexpr std::size_t pack_size(pack< Ts... > const &)
template function to determine number of types in a pack
std::string serializeIndexRecords(std::vector< o2::soa::IndexRecord > &irs)
ConfigParamSpec replaceOrigin(ConfigParamSpec &source, std::string const &originStr)
void wrongOriginReplacement(std::string_view replacement)
memfun_type< decltype(&F::operator())>::type FFL(F const &func)
auto getTableFromFilter(soa::is_filtered_table auto const &table, soa::SelectionVector &&selection)
std::vector< std::shared_ptr< arrow::Table > > extractSources(ProcessingContext &pc, std::vector< std::string > const &labels)
consteval auto typeWithRef() -> T
Helper to define output for a Table.
OutputObjHandlingPolicy
Policy enum to determine OutputObj handling when writing.
void initializePartitionCaches(std::set< uint32_t > const &hashes, std::shared_ptr< arrow::Schema > const &schema, expressions::Filter const &filter, gandiva::NodePtr &tree, gandiva::FilterPtr &gfilter)
std::shared_ptr< arrow::Table > makeEmptyTableImpl(const char *name, std::shared_ptr< arrow::Schema > &schema)
auto createFieldsFromColumns(framework::pack< C... >)
SelectionVector selectionToVector(gandiva::Selection const &sel)
std::vector< int64_t > SelectionVector
auto Attach(T const &table)
constexpr auto tableRef2OutputSpec(header::DataOrigin newOrigin=header::DataOrigin{"AOD"})
constexpr auto tableRef2Schema()
constexpr auto tableRef2InputSpec(header::DataOrigin newOrigin=header::DataOrigin{"AOD"})
constexpr auto tableRef2ConfigParamSpec()
auto Extend(T const &table)
On-the-fly adding of expression columns.
constexpr auto tableRef2OutputRef()
header::DataDescription description
std::vector< o2::soa::IndexRecord > records
std::vector< std::string > labels
std::vector< framework::ConcreteDataMatcher > matchers
header::DataOrigin origin
std::shared_ptr< std::vector< framework::IndexColumnBuilder > > builders
header::DataHeader::SubSpecificationType version
std::shared_ptr< arrow::Schema > outputSchema
std::shared_ptr< arrow::Table > materialize(ProcessingContext &pc)
std::shared_ptr< T > table
auto build(std::vector< std::shared_ptr< arrow::Table > > &&tables)
std::vector< soa::IndexRecord > map
std::vector< framework::IndexColumnBuilder > builders
std::shared_ptr< arrow::Schema > outputSchema
T const & operator*() const
static consteval auto pack()
metadata::index_pack_t index_pack_t
decltype(transformBase< T >())::metadata metadata
std::shared_ptr< typename T::table_t > table
T::table_t const & operator*() const
typename metadata::template extension_table_t_from< o2::aod::Hash< T::originals[T::originals.size() - 1].origin_hash > > extension_t
decltype(transformBase< T >())::metadata metadata
std::array< o2::framework::expressions::Projector, N > projectors
std::shared_ptr< extension_t > extension
std::shared_ptr< arrow::Schema > inputSchema
std::shared_ptr< arrow::Schema > schema
static constexpr bool delayed
static constexpr size_t N
typename metadata::placeholders_pack_t placeholders_pack_t
T::table_t * operator->()
std::shared_ptr< gandiva::Projector > projector
static constexpr auto spec()
static constexpr auto ref()
aod::MetadataTrait< o2::aod::Hash< table_t::ref.desc_hash > >::metadata metadata
decltype(typeWithRef< T >()) table_t
OutputObj(T &&t, OutputObjHandlingPolicy policy_=OutputObjHandlingPolicy::AnalysisObject, OutputObjSourceType sourceType_=OutputObjSourceType::OutputObjSource)
void setObject(std::shared_ptr< T > t)
OutputObjSourceType sourceType
OutputRef ref(uint16_t index, uint16_t max)
std::shared_ptr< T > object
void setObject(T const &t)
OutputObj(std::string const &label_, OutputObjHandlingPolicy policy_=OutputObjHandlingPolicy::AnalysisObject, OutputObjSourceType sourceType_=OutputObjSourceType::OutputObjSource)
OutputObjHandlingPolicy policy
void setHash(uint32_t hash)
Partition(expressions::Node &&filter_, T const &table)
typename o2::soa::Filtered< T >::const_iterator filtered_const_iterator
void bindTable(T const &table)
filtered_const_iterator begin() const
auto rawSliceBy(o2::framework::Preslice< T1 > const &container, int value) const
auto sliceByCached(framework::expressions::BindingNode const &node, int value, o2::framework::SliceCache &cache) const
void intializeCaches(std::set< uint32_t > const &hashes, std::shared_ptr< arrow::Schema > const &schema)
Partition(expressions::Node &&filter_)
typename o2::soa::Filtered< T >::iterator filtered_iterator
o2::soa::Filtered< T > * operator->()
typename o2::soa::Filtered< T >::iterator iterator
auto sliceBy(o2::framework::PresliceBase< T1, Policy, OPT > const &container, int value) const
std::shared_ptr< arrow::Table > asArrowTable() const
o2::soa::RowViewSentinel end() const
void updatePlaceholders(InitContext &context)
std::unique_ptr< o2::soa::Filtered< T > > mFiltered
void bindInternalIndicesTo(E *ptr)
expressions::Filter filter
o2::soa::RowViewSentinel end()
auto sliceByCachedUnsorted(framework::expressions::BindingNode const &node, int value, o2::framework::SliceCache &cache) const
typename o2::soa::Filtered< T >::const_iterator const_iterator
gandiva::FilterPtr gfilter
void bindExternalIndices(Ts *... tables)
filtered_iterator begin()
header::DataDescription description
std::vector< std::string > labels
std::vector< std::shared_ptr< gandiva::Expression > > expressions
std::shared_ptr< gandiva::Projector > projector
header::DataOrigin origin
std::vector< framework::ConcreteDataMatcher > matchers
header::DataHeader::SubSpecificationType version
std::shared_ptr< arrow::Schema > schema
std::shared_ptr< arrow::Table > materialize(ProcessingContext &pc) const
std::shared_ptr< arrow::Schema > inputSchema
T::table_t * operator->()
std::shared_ptr< gandiva::Projector > projector
std::shared_ptr< extension_t > extension
T::table_t const & operator*() const
static constexpr size_t N
std::shared_ptr< arrow::Schema > schema
typename metadata::expression_pack_t expression_pack_t
std::array< o2::framework::expressions::Projector, N > projectors
decltype(transformBase< T >())::metadata metadata
std::shared_ptr< typename T::table_t > table
typename metadata::template extension_table_t_from< o2::aod::Hash< T::originals[T::originals.size() - 1].origin_hash > > extension_t
int64_t lastIndex()
Last index inserted in the table.
decltype(FFL(std::declval< cursor_t >())) cursor
static OutputSpec updateOutputSpec(header::DataOrigin const &newOrigin=header::DataOrigin{"AOD"})
bool resetCursor(LifetimeHolder< TableBuilder > builder)
void setLabel(const char *label)
void operator()(Ts &&... args)
void reserve(int64_t size)
decltype([]() { if constexpr(soa::is_iterator< T >) { return typename T::parent_t{nullptr} persistent_table_t
decltype(std::declval< TableBuilder >().cursor< persistent_table_t >()) cursor_t
An expression tree node corresponding to a column binding.
A struct, containing the root of the expression tree.
static std::shared_ptr< arrow::Table > joinTables(std::vector< std::shared_ptr< arrow::Table > > &&tables)
static void resetBuilders(std::vector< framework::IndexColumnBuilder > &builders, std::vector< std::shared_ptr< arrow::Table > > &&tables)
static std::vector< framework::IndexColumnBuilder > makeBuilders(std::vector< std::shared_ptr< arrow::Table > > &&tables, std::vector< soa::IndexRecord > const &records)
static std::shared_ptr< arrow::Table > materialize(std::vector< framework::IndexColumnBuilder > &builders, std::vector< std::shared_ptr< arrow::Table > > &&tables, std::vector< soa::IndexRecord > const &records, std::shared_ptr< arrow::Schema > const &schema, bool exclusive)
std::shared_ptr< arrow::Field > field() const
auto operator==(IndexRecord const &other) const
framework::ConcreteDataMatcher matcher
VectorOfTObjectPtrs other
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"
std::unique_ptr< TTree > tree((TTree *) flIn.Get(std::string(o2::base::NameConf::CTFTREENAME).c_str()))