12#ifndef O2_FRAMEWORK_TABLEBUILDER_H_
13#define O2_FRAMEWORK_TABLEBUILDER_H_
21#include <arrow/chunked_array.h>
22#include <arrow/status.h>
23#include <arrow/memory_pool.h>
25#include <arrow/type_traits.h>
26#include <arrow/table.h>
27#include <arrow/builder.h>
28#include <arrow/util/key_value_metadata.h>
44extern template class arrow::NumericBuilder<arrow::UInt8Type>;
45extern template class arrow::NumericBuilder<arrow::UInt32Type>;
46extern template class arrow::NumericBuilder<arrow::FloatType>;
47extern template class arrow::NumericBuilder<arrow::Int32Type>;
48extern template class arrow::NumericBuilder<arrow::Int8Type>;
59template <
typename T,
int N>
64template <
typename T,
int N>
69template <
typename T,
int N>
79#define O2_ARROW_STL_CONVERSION(c_type, ArrowType_) \
81 struct ConversionTraits<c_type> { \
82 using ArrowType = ::arrow::ArrowType_; \
106 template <
typename T>
107 static arrow::Status
appendToList(std::unique_ptr<arrow::FixedSizeListBuilder>& builder,
const T*
data,
int size = 1)
110 using BuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
111 size_t numElements =
static_cast<const arrow::FixedSizeListType*
>(builder->type().get())->
list_size();
113 auto status = builder->AppendValues(
size);
114 auto ValueBuilder =
static_cast<BuilderType*
>(builder->value_builder());
115 status &= ValueBuilder->AppendValues(
data, numElements *
size,
nullptr);
120 template <
typename HolderType,
typename T>
123 return static_cast<typename HolderType::Policy&
>(holder).append(holder.builder,
value);
126 template <
typename HolderType>
127 static arrow::Status
flush(HolderType& holder)
129 return static_cast<typename HolderType::Policy&
>(holder).flush(holder.builder);
135 template <
typename HolderType,
typename T>
136 static arrow::Status
append(HolderType& holder,
const T*
data)
138 if constexpr (std::is_same_v<
decltype(holder.builder), std::unique_ptr<arrow::FixedSizeListBuilder>>) {
139 return appendToList<T>(holder.builder,
data);
141 return holder.builder->Append(
reinterpret_cast<const uint8_t*
>(
data));
145 template <
typename HolderType,
typename T,
int N>
146 static arrow::Status
append(HolderType& holder,
const T (&
data)[N])
148 return holder.builder->Append(
reinterpret_cast<const uint8_t*
>(
data));
152 template <
typename HolderType,
typename T,
int N>
153 static arrow::Status
append(HolderType& holder, std::array<const T, N>
const&
data)
155 return holder.builder->Append(
reinterpret_cast<const uint8_t*
>(
data.data()));
159 template <
typename HolderType,
typename T>
160 static arrow::Status
append(HolderType& holder, std::span<const T>
data)
163 using ValueBuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
164 auto status = holder.builder->Reserve(
data.size());
165 status &= holder.builder->Append();
166 auto vbuilder =
static_cast<ValueBuilderType*
>(holder.builder->value_builder());
167 status &= vbuilder->AppendValues(
data.begin(),
data.end());
172 template <
typename HolderType,
typename T>
175 auto status = append(holder,
value);
181 template <
typename HolderType,
typename T>
184 return holder.builder->UnsafeAppend(
value);
187 template <
typename HolderType,
typename T>
190 if constexpr (std::is_same_v<
decltype(holder.builder), std::unique_ptr<arrow::FixedSizeListBuilder>>) {
191 auto status = appendToList<T>(holder.builder,
value);
193 return holder.builder->UnsafeAppend(
reinterpret_cast<const uint8_t*
>(
value));
197 template <
typename HolderType,
typename ITERATOR>
198 static arrow::Status
append(HolderType& holder, std::pair<ITERATOR, ITERATOR> ip)
201 using ValueBuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
203 auto status = holder.builder->Append();
204 auto valueBuilder =
reinterpret_cast<ValueBuilderType*
>(holder.builder->value_builder());
205 return status & valueBuilder->AppendValues(&*ip.first, std::distance(ip.first, ip.second));
209 template <
typename HolderType,
typename ITERATOR>
210 static void unsafeAppend(HolderType& holder, std::pair<ITERATOR, ITERATOR> ip)
213 using ValueBuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
215 auto status = holder.builder->Append();
216 auto valueBuilder =
reinterpret_cast<ValueBuilderType*
>(holder.builder->value_builder());
217 status &= valueBuilder->AppendValues(&*ip.first, std::distance(ip.first, ip.second));
219 throw runtime_error(
"Unable to append values to valueBuilder!");
230 using BuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
232 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
234 return std::make_unique<BuilderType>(pool);
239 return arrow::TypeTraits<ArrowType>::type_singleton();
244 return builder.Append(
value);
250 return builder.Append(
value);
259 using BuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
261 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
263 return std::make_unique<BuilderType>(pool);
268 return arrow::TypeTraits<ArrowType>::type_singleton();
273 return builder.Append(
value);
282 using BuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
284 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
286 return std::make_unique<BuilderType>(pool);
291 return arrow::TypeTraits<ArrowType>::type_singleton();
300template <
typename ITERATOR>
302 using FillType = std::pair<ITERATOR, ITERATOR>
const&;
307 using ValueBuilder =
typename arrow::TypeTraits<ValueType>::BuilderType;
309 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
311 auto valueBuilder = std::make_shared<ValueBuilder>(pool);
312 return std::make_unique<arrow::ListBuilder>(pool, valueBuilder);
317 return arrow::list(arrow::TypeTraits<ValueType>::type_singleton());
321template <
typename T,
int N>
329 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
331 std::unique_ptr<arrow::ArrayBuilder> valueBuilder;
333 arrow::MakeBuilder(pool, arrow::TypeTraits<ElementType>::type_singleton(), &valueBuilder);
334 return std::make_unique<BuilderType>(pool, std::move(valueBuilder), N);
339 return arrow::fixed_size_list(arrow::TypeTraits<ElementType>::type_singleton(), N);
343template <
typename T,
int N>
350 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
352 std::unique_ptr<arrow::ArrayBuilder> valueBuilder;
354 arrow::MakeBuilder(pool, arrow::TypeTraits<ElementType>::type_singleton(), &valueBuilder);
355 return std::make_unique<BuilderType>(pool, std::move(valueBuilder), N);
360 return arrow::fixed_size_list(arrow::TypeTraits<ElementType>::type_singleton(), N);
364template <
typename T,
int N>
371 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
373 std::unique_ptr<arrow::ArrayBuilder> valueBuilder;
375 arrow::MakeBuilder(pool, arrow::TypeTraits<ElementType>::type_singleton(), &valueBuilder);
376 return std::make_unique<BuilderType>(pool, std::move(valueBuilder), N);
381 return arrow::fixed_size_list(arrow::TypeTraits<ElementType>::type_singleton(), N);
392 static std::unique_ptr<BuilderType>
make(arrow::MemoryPool* pool)
394 std::unique_ptr<arrow::ArrayBuilder> valueBuilder;
396 arrow::MakeBuilder(pool, arrow::TypeTraits<ElementType>::type_singleton(), &valueBuilder);
397 return std::make_unique<BuilderType>(pool, std::move(valueBuilder));
402 return arrow::list(arrow::TypeTraits<ElementType>::type_singleton());
406template <
typename... ARGS>
409 return std::make_tuple(std::make_unique<ARGS>()...);
415 using BuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
420template <
typename ITERATOR>
428template <
typename T,
int N>
442 template <
typename BUILDER>
445 return builder->Append(
value);
448 template <
typename BUILDER>
449 requires std::same_as<std::span<std::byte>, T>
455 template <
typename BUILDER>
458 return arrow::Status::OK();
464 static constexpr int CHUNK_SIZE = 256;
466 template <
typename BUILDER>
471 if (
pos % CHUNK_SIZE == 0) {
472 return builder->AppendValues(cache, CHUNK_SIZE,
nullptr);
474 return arrow::Status::OK();
477 template <
typename BUILDER>
478 arrow::Status
flush(BUILDER& builder)
480 if (
pos % CHUNK_SIZE != 0) {
481 return builder->AppendValues(cache,
pos % CHUNK_SIZE,
nullptr);
483 return arrow::Status::OK();
495template <
size_t I,
typename T>
500 using BuilderType =
typename arrow::TypeTraits<ArrowType>::BuilderType;
506 auto s = builder->Reserve(nRows);
517 template <
typename... ARGS,
size_t NCOLUMNS>
524 template <
typename...
Ts,
typename VALUES>
527 return (BuilderUtils::append(std::get<Ts::index>(holders), std::get<Ts::index>(
values)).ok() && ...);
533 template <
typename...
Ts,
typename VALUES>
536 (BuilderUtils::unsafeAppend(std::get<Ts::index>(holders), std::get<Ts::index>(
values)), ...);
540 template <
typename...
Ts>
541 static bool finalize(std::vector<std::shared_ptr<arrow::Array>>&
arrays, std::tuple<Ts...>& holders)
543 return (finalize(
arrays[Ts::index], std::get<Ts::index>(holders)) && ...);
546 template <
typename HOLDER>
549 return BuilderUtils::flush(holder).ok() && holder.builder->Finish(&
array).ok();
553template <
typename... ARGS>
561#ifdef DPL_STRUCTURED_BINDING_PACKS
563#pragma clang diagnostic push
564#pragma clang diagnostic ignored "-Wc++26-extensions"
567auto constexpr to_tuple(T&&
object)
noexcept
570 return std::make_tuple(
members...);
573#pragma clang diagnostic pop
581 using type = std::decay_t<T>;
584 return std::make_tuple(p0,
p1,
p2, p3);
587 return std::make_tuple(p0,
p1,
p2);
590 return std::make_tuple(p0,
p1);
593 return std::make_tuple(p0);
595 return std::make_tuple();
601template <
typename... ARGS>
604 return []<std::size_t... Is>(std::index_sequence<Is...>) {
606 }(std::make_index_sequence<
sizeof...(ARGS)>{});
609template <
typename... ARGS>
612 return [pool, nRows]<std::size_t... Is>(std::index_sequence<Is...>) {
614 }(std::make_index_sequence<
sizeof...(ARGS)>{});
617template <
typename... ARGS>
621concept ShouldNotDeconstruct = std::is_bounded_array_v<T> || std::is_arithmetic_v<T> || framework::is_base_of_template_v<std::vector, T> || std::same_as<std::span<std::byte>, T>;
630 template <
typename... ARGS>
631 using HoldersTuple =
typename std::tuple<BuilderHolder<0, ARGS>...>;
633 template <
typename... ARGS>
638 template <
typename... ARGS>
641 return (HoldersTupleIndexed<ARGS...>*)mHolders;
644 void validate()
const;
646 template <
typename... ARGS,
size_t I =
sizeof...(ARGS)>
647 auto makeBuilders(std::array<char const*, I>
const& columnNames,
size_t nRows)
649 char const*
const* names_ptr = columnNames.data();
650 mSchema = std::make_shared<arrow::Schema>(
653 mHolders =
makeHolders<ARGS...>(mMemoryPool, nRows);
654 mFinalizer = [](std::vector<std::shared_ptr<arrow::Array>>&
arrays,
void* holders) ->
bool {
655 return TableBuilderHelpers::finalize(
arrays, *(HoldersTupleIndexed<ARGS...>*)holders);
657 mDestructor = [](
void* holders)
mutable ->
void {
658 delete (HoldersTupleIndexed<ARGS...>*)holders;
663 template <
typename ARG0,
typename... ARGS>
667 using argsPack_t =
decltype(
tuple_to_pack(framework::to_tuple(std::declval<ARG0>())));
668 return framework::pack_size(argsPack_t{});
671 template <
typename ARG0,
typename... ARGS>
675 return 1 +
sizeof...(ARGS);
678 void setLabel(
const char*
label);
688 mDestructor(mHolders);
693 template <
typename ARG0,
typename... ARGS>
695 auto persist(std::array<
char const*,
sizeof...(ARGS) + 1>
const& columnNames)
700 persister(slot, std::forward_as_tuple(arg, args...));
706 template <
typename ARG0,
typename... ARGS>
708 auto persist(std::array<
char const*, countColumns<ARG0, ARGS...>()>
const& columnNames)
710 using argsPack_t =
decltype(
tuple_to_pack(framework::to_tuple(std::declval<ARG0>())));
711 auto persister = persistTuple(argsPack_t{}, columnNames);
712 return [persister = persister](
unsigned int slot, ARG0
const& obj) ->
void {
719 template <
typename... ARGS>
722 constexpr int nColumns =
sizeof...(ARGS);
724 mArrays.resize(nColumns);
725 makeBuilders<ARGS...>(columnNames, 10);
728 using FillTuple = std::tuple<typename BuilderMaker<ARGS>::FillType...>;
729 return [holders = mHolders](
unsigned int , FillTuple
const&
t) ->
void {
730 auto status = TableBuilderHelpers::append(*(HoldersTupleIndexed<ARGS...>*)holders,
t);
731 if (status ==
false) {
739 template <
typename ARG0,
typename... ARGS>
745 TableBuilderHelpers::unsafeAppend(*(HoldersTupleIndexed<ARG0, ARGS...>*)holders, std::forward_as_tuple(arg, args...));
751 template <
typename T>
754 return [
this]<
typename... Cs>(
pack<Cs...>) {
755 return this->
template persist<
typename Cs::type...>({Cs::columnLabel()...});
756 }(
typename T::table_t::persistent_columns_t{});
760 template <
typename T>
763 return [
this]<
typename... Cs>(
pack<Cs...>) {
764 return this->
template unsafePersist<
typename Cs::type...>();
765 }(
typename T::table_t::persistent_columns_t{});
768 template <
typename... Cs>
771 return this->
template persist<
typename Cs::type...>({Cs::columnLabel()...});
774 template <
typename T,
typename E>
777 return [
this]<
typename... Cs>(
pack<Cs...>) {
778 return this->
template persist<E>({Cs::columnLabel()...});
779 }(
typename T::table_t::persistent_columns_t{});
783 template <
typename...
Ts>
786 return (std::get<Ts::index>(holders).builder->Reserve(
s).ok() && ...);
789 template <
typename... ARGS>
792 reserveArrays(*(HoldersTupleIndexed<ARGS...>*)mHolders,
s);
797 std::shared_ptr<arrow::Table> finalize();
800 bool (*mFinalizer)(std::vector<std::shared_ptr<arrow::Array>>&
arrays,
void* holders);
801 void (*mDestructor)(
void* holders);
803 arrow::MemoryPool* mMemoryPool;
804 std::shared_ptr<arrow::Schema> mSchema;
805 std::vector<std::shared_ptr<arrow::Array>> mArrays;
std::shared_ptr< arrow::Schema > schema
unsigned short int uint16_t
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
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone Processing proc_rtc Replace constant variables static by constexpr expressions Compile RTC in deterministic with NO_FAST_MATH flags and GPUCA_DETERMINISTIC_MODE define Use RTC to optimize GPU code h configStandalone Processing proc_rtctech Use a file lock to serialize access to the cache folder int32_t
configStandalone Reconstruction rec_tpc multiplier for the combined cluster track error during track following area in cm for the search of for z only used if decrease removal by when above this local occupancy rowx Shift of TPC revert cluster flag edge bit distance to edge exceeds this ZOffset for secondary multiple of radius max P of electron K BB bands crossing max P of electron p BB bands crossing max P of electron d BB bands crossing max P of electron t BB bands crossing min accepted dEdxMaxTPC of the track Additive extra cluster error for Y2 if edge flag set Additive extra cluster error for Y2 if single set Additive extra cluster error for Y2 if or single set Additive extra cluster error for Z2 if or single set Extra errors to add to track when crossing depending on addErrorsCECrossing Inner portion of y range in sector that is not used in searching for extrapolated track candidates factor2YS for track merging factor2K for track merging Margin in cm of Y position when rejecting edge clusters based on uncorrected track Y Max fraction of shared clusters for tracklet Except pad from cluster finding if total number of charges in a fragment is above this Except pad from cluster finding if number of consecutive charges in a fragment is above this Threshold where a timebin is considered disabling the noisy pad check for that pad Treat signal above this minimum as saturated Smoothing factor for the exponential Highly Ionising Particle tail filter Number of timebins to use for the averaging Add additional custom track errors when crossing relative as fraction of Do N fit passes in final fit of< 0:reject at max -n hits") AddOptionRTC(rejectIFCLowRadiusCluster, uint8_t, 1, "", 0, "Reject clusters that get the IFC mask error during refit") AddOptionRTC(dEdxTruncLow, uint8_t, 2, "", 0, "Low truncation threshold, fraction of 128") AddOptionRTC(dEdxTruncHigh, uint8_t, 77, "", 0, "High truncation threshold, fraction of 128") AddOptionRTC(extrapolationTracking, int8_t, 1, "", 0, "Enable Extrapolation Tracking(prolong tracks to adjacent sectors to find short segments)") AddOptionRTC(disableRefitAttachment, uint8_t, 0, "", 0, "Bitmask to disable certain attachment steps during refit(1:attachment, 2:propagation, 4:loop following, 8:mirroring)") AddOptionRTC(rejectionStrategy, uint8_t, o2::gpu::GPUSettings::RejectionStrategyA, "", 0, "Enable rejection of TPC clusters for compression(0=no, 1=strategy A, 2=strategy B)") AddOptionRTC(mergeLoopersAfterburner, uint8_t, 1, "", 0, "Run afterburner for additional looper merging") AddOptionRTC(compressionTypeMask, uint8_t, o2::gpu::GPUSettings::CompressionFull, "", 0, "TPC Compression mode bits(1=truncate charge/width LSB, 2=differences, 4=track-model)") AddOptionRTC(compressionSortOrder, uint8_t, o2::gpu::GPUSettings::SortTime, "", 0, "Sort order of TPC compression(0=time, 1=pad, 2=Z-time-pad, 3=Z-pad-time, 4=no sorting(use incoming order))") AddOptionRTC(sigBitsCharge, uint8_t, 4, "", 0, "Number of significant bits for TPC cluster charge in compression mode 1") AddOptionRTC(sigBitsWidth, uint8_t, 3, "", 0, "Number of significant bits for TPC cluster width in compression mode 1") AddOptionRTC(dropLoopers, uint8_t, 0, "", 0, "Drop looping tracks starting from second loop") AddOptionRTC(mergerInterpolateErrors, uint8_t, 1, "", 0, "Use interpolation instead of extrapolation for chi2 based cluster rejection") AddOptionRTC(mergerInterpolateRejectAlsoOnCurrentPosition, uint8_t, 1, "", 0, "When using mergerInterpolateErrors, reject based on chi2 twice computed with interpolated and current track position starting from NDF > mergerNonInterpolateRejectMinNDF Merge tracks accross the central electrode Enable PID response Add sub threshold clusters in TPC dEdx computation OR mask of TPC flags that will reject the cluster in alternative dEdx Reject edge clusters based on uncorrected track Y during track fit Increase decrease removal by when on this number of pads from the edge h configStandalone Reconstruction rec_trd Max chi2 for TRD tracklets to be matched to a track Chi2 cut for strict matching mode Number of sigmas for ITS TPC track time error estimate Addition to search road around track prolongation along Y in cm Optimal tracklet rphi resolution in maximum chi2 per attached tracklet for TRD tracks take into account the full likelihood of the slope including exponential tails Tracks with less attached tracklets are discarded after the tracking Post trigger Pile up integration time in BCs fits all iterations but the last one in projections Use material lookup table for TPC refit Apply workarounds to avoid cyclic merge should not be needed tpc dyn configStandalone Processing proc_rtc bool
constexpr int p1()
constexpr to accelerate the coordinates changing
bounded_vector< int > members
#define O2_ARROW_STL_CONVERSION(c_type, ArrowType_)
auto cursor(framework::pack< Cs... >)
auto persist(std::array< char const *, countColumns< ARG0, ARGS... >()> const &columnNames)
auto persistTuple(framework::pack< ARGS... >, std::array< char const *, sizeof...(ARGS)> const &columnNames)
Same a the above, but use a tuple to persist stuff.
static constexpr int countColumns()
void extracted(bool &status)
Actually creates the arrow::Table from the builders.
static constexpr int countColumns()
auto unsafeCursor()
Same as cursor(), but uses UnsafeAppend. Only safe after reserve().
auto reserve(o2::framework::pack< ARGS... > &&, int s)
TableBuilder(arrow::MemoryPool *pool=arrow::default_memory_pool())
auto reserveArrays(std::tuple< Ts... > &holders, int s)
Reserve method to expand the columns as needed.
auto persist(std::array< char const *, sizeof...(ARGS)+1 > const &columnNames)
GLsizei const GLfloat * value
GLint GLint GLsizei GLint GLenum GLenum type
GLenum GLsizei GLsizei GLint * values
GLuint GLsizei const GLchar * label
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Defining ITS Vertex explicitly as messageable.
void addLabelToSchema(std::shared_ptr< arrow::Schema > &schema, const char *label)
RuntimeErrorRef runtime_error(const char *)
constexpr auto makeHolderTypes()
auto constexpr to_tuple(T &&object) noexcept
constexpr auto tuple_to_pack(std::tuple< ARGS... > &&)
auto makeHolders(arrow::MemoryPool *pool, size_t nRows)
decltype(makeHolderTypes< ARGS... >()) IndexedHoldersTuple
RuntimeErrorRef runtime_error_f(const char *,...)
typename detail::ConversionTraits< T >::ArrowType ArrowType
std::unique_ptr< BuilderType > builder
typename arrow::TypeTraits< ArrowType >::BuilderType BuilderType
typename InsertionTrait< T >::Policy Policy
BuilderHolder(arrow::MemoryPool *pool, size_t nRows=0)
typename detail::ConversionTraits< T >::ArrowType ElementType
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
arrow::FixedSizeListBuilder BuilderType
arrow::FixedSizeListType ArrowType
static std::shared_ptr< arrow::DataType > make_datatype()
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
typename detail::ConversionTraits< T >::ArrowType ElementType
arrow::FixedSizeListType ArrowType
static std::shared_ptr< arrow::DataType > make_datatype()
arrow::FixedSizeListBuilder BuilderType
typename arrow::TypeTraits< ArrowType >::BuilderType BuilderType
static arrow::Status append(BuilderType &builder, bool value)
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
static std::shared_ptr< arrow::DataType > make_datatype()
typename detail::ConversionTraits< bool >::ArrowType ArrowType
typename detail::ConversionTraits< T >::ArrowType ElementType
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
arrow::FixedSizeListType ArrowType
arrow::FixedSizeListBuilder BuilderType
static std::shared_ptr< arrow::DataType > make_datatype()
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
arrow::ListType ArrowType
arrow::ListBuilder BuilderType
typename detail::ConversionTraits< typename ITERATOR::value_type >::ArrowType ValueType
typename ITERATOR::value_type STLValueType
std::pair< ITERATOR, ITERATOR > const & FillType
typename arrow::TypeTraits< ValueType >::BuilderType ValueBuilder
static std::shared_ptr< arrow::DataType > make_datatype()
static arrow::Status append(BuilderType &builder, std::span< std::byte > value)
typename arrow::TypeTraits< ArrowType >::BuilderType BuilderType
std::span< std::byte > STLValueType
typename detail::ConversionTraits< std::span< std::byte > >::ArrowType ArrowType
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
static std::shared_ptr< arrow::DataType > make_datatype()
std::span< std::byte > FillType
std::span< const T > FillType
arrow::ListType ArrowType
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
typename detail::ConversionTraits< T >::ArrowType ElementType
arrow::ListBuilder BuilderType
static std::shared_ptr< arrow::DataType > make_datatype()
typename arrow::TypeTraits< ArrowType >::BuilderType BuilderType
static arrow::Status append(BuilderType &builder, std::array< T, N > &value)
static arrow::Status append(BuilderType &builder, T value)
typename detail::ConversionTraits< T >::ArrowType ArrowType
static std::unique_ptr< BuilderType > make(arrow::MemoryPool *pool)
static std::shared_ptr< arrow::DataType > make_datatype()
arrow::FixedSizeListBuilder BuilderType
arrow::FixedSizeListType ArrowType
arrow::ListType ArrowType
arrow::ListBuilder BuilderType
arrow::ListType ArrowType
arrow::ListBuilder BuilderType
typename arrow::TypeTraits< ArrowType >::BuilderType BuilderType
typename detail::ConversionTraits< T >::ArrowType ArrowType
static arrow::Status flush(HolderType &holder)
static arrow::Status appendToList(std::unique_ptr< arrow::FixedSizeListBuilder > &builder, const T *data, int size=1)
static arrow::Status append(HolderType &holder, const T(&data)[N])
Appender for the array case.
static arrow::Status append(HolderType &holder, T value)
static void unsafeAppend(HolderType &holder, std::span< const T > value)
static arrow::Status append(HolderType &holder, std::span< const T > data)
Appender for the vector case.
static arrow::Status append(HolderType &holder, const T *data)
static arrow::Status append(HolderType &holder, std::pair< ITERATOR, ITERATOR > ip)
static arrow::Status append(HolderType &holder, std::array< const T, N > const &data)
Appender for the array case.
static void unsafeAppend(HolderType &holder, T *value)
static void unsafeAppend(HolderType &holder, std::pair< ITERATOR, ITERATOR > ip)
static void unsafeAppend(HolderType &holder, T value)
arrow::Status append(BUILDER &builder, T value)
arrow::Status flush(BUILDER &builder)
arrow::Status append(BUILDER &builder, T value)
arrow::Status append(BUILDER &builder, T value)
arrow::Status flush(BUILDER &)
static consteval DirectInsertion< T > policy()
decltype(policy()) Policy
static bool finalize(std::shared_ptr< arrow::Array > &array, HOLDER &holder)
static bool append(std::tuple< Ts... > &holders, VALUES &&values)
Invokes the append method for each entry in the tuple.
static std::array< arrow::DataType, NCOLUMNS > makeArrowColumnTypes()
static bool finalize(std::vector< std::shared_ptr< arrow::Array > > &arrays, std::tuple< Ts... > &holders)
Invokes the append method for each entry in the tuple.
static void unsafeAppend(std::tuple< Ts... > &holders, VALUES &&values)
::arrow::FixedSizeListType ArrowType
::arrow::FixedSizeListType ArrowType
::arrow::FixedSizeListType ArrowType
::arrow::ListType ArrowType
FIXME: adapt type conversion to new arrow.