Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
columnar Namespace Reference

Namespaces

 ClusterHelpers
 
 detail
 
 MetDef
 
 PhysliteTestHelpers
 

Classes

class  AccessorTemplate
 the raw column accessor template class More...
 
struct  ColumnAccessModeTraits
 
struct  ColumnAccessModeTraits< ColumnAccessMode::input >
 
struct  ColumnAccessModeTraits< ColumnAccessMode::output >
 
struct  ColumnAccessModeTraits< ColumnAccessMode::update >
 
struct  ColumnAccessorDataArray
 all the data about a column accessor that the ColumnarTool needs to know about More...
 
struct  ColumnarMemoryTest
 
struct  ColumnarModeArray
 
struct  ColumnarModeXAOD
 
struct  ColumnarPhysLiteTest
 
class  ColumnarTool
 the base class for all columnar components More...
 
struct  ColumnarToolDataArray
 
class  ColumnarToolWrapper
 a class that wraps an IColumnarTool for use in Python More...
 
class  ColumnarToolWrapperData
 a class that holds the columnar data for a single call to ColumnarToolWrapper More...
 
struct  ColumnDataArray
 
struct  ColumnInfo
 a struct that contains meta-information about each column that's needed to interface the column with the columnar data store More...
 
struct  ColumnTypeTraits
 a trait class to provide information about the column type More...
 
struct  ColumnTypeTraits< LinkCastColumn< LT, ELT >, ColumnarModeArray >
 
struct  ColumnTypeTraits< LinkCastColumn< LT, ELT >, ColumnarModeXAOD >
 
struct  ColumnTypeTraits< NativeColumn< CT >, CM >
 
struct  ColumnTypeTraits< OptObjectId< LT >, ColumnarModeArray >
 
struct  ColumnTypeTraits< OptObjectId< LT >, ColumnarModeXAOD >
 
struct  ColumnTypeTraits< RetypeColumn< UT, CT >, CM >
 
class  ConfigurableColumnExampleTool
 example of a columnar tool with optional columns More...
 
struct  ContainerIdTraits
 
struct  ContainerIdTraits< ContainerId::cluster >
 
struct  ContainerIdTraits< ContainerId::egamma >
 
struct  ContainerIdTraits< ContainerId::electron >
 
struct  ContainerIdTraits< ContainerId::eventContext >
 
struct  ContainerIdTraits< ContainerId::eventInfo >
 
struct  ContainerIdTraits< ContainerId::jet >
 
struct  ContainerIdTraits< ContainerId::metAssociation >
 
struct  ContainerIdTraits< ContainerId::muon >
 
struct  ContainerIdTraits< ContainerId::mutableJet >
 
struct  ContainerIdTraits< ContainerId::mutableMet >
 
struct  ContainerIdTraits< ContainerId::photon >
 
struct  ContainerIdTraits< ContainerId::vertex >
 
class  IColumnarTool
 an interface for tools that operate on columnar data More...
 
struct  LinkCastColumn
 a special column type that behaves like an OptObjectId, but applies an internal cast in xAOD mode More...
 
class  LinkColumnExampleTool
 an example of a tool reading an element link More...
 
class  ModularExampleTool
 an example of a columnar tool with a modular structure More...
 
struct  NativeColumn
 a type wrapper to force AccessorTemplate to treat the type as native More...
 
struct  ObjectColumn
 a special type to use for columns accessing containers/offset maps More...
 
class  ObjectId
 a class representing a single object (electron, muons, etc.) More...
 
class  ObjectId< O, ColumnarModeArray >
 
class  ObjectId< O, ColumnarModeXAOD >
 
class  ObjectRange
 a class representing a continuous sequence of objects (a.k.a. a container) More...
 
class  ObjectRange< CI, ColumnarModeArray >
 
class  ObjectRange< CI, ColumnarModeXAOD >
 
class  ObjectRangeIteratorArray
 an iterator over objects in an ObjectRange More...
 
class  ObjectRangeIteratorXAODContainer
 
class  ObjectRangeIteratorXAODSinglet
 
class  OptionalColumnExampleTool
 example of a columnar tool with optional columns More...
 
class  OptObjectId
 a class representing a single optional object (electron, muons, etc.) More...
 
class  OptObjectId< CI, ColumnarModeArray >
 
class  OptObjectId< CI, ColumnarModeXAOD >
 
struct  RetypeColumn
 a type wrapper to make AccessorTemplate convert the underlying column type to a different type More...
 
class  SimpleSelectorExampleTool
 this is the simplest example of a columnar tool More...
 
class  VectorExampleTool
 an example of a columnar tool that reads a vector column More...
 

Typedefs

using ColumnType = typename ColumnTypeTraits< CT, CM >::ColumnType
 
using UserType = typename ColumnTypeTraits< CT, CM >::UserType
 
template<ContainerId CI, typename CT , typename CM = ColumnarModeDefault>
using ColumnAccessor = AccessorTemplate< CI, CT, ColumnAccessMode::input, CM >
 
template<ContainerId CI, typename CT , typename CM = ColumnarModeDefault>
using ColumnDecorator = AccessorTemplate< CI, CT, ColumnAccessMode::output, CM >
 
template<ContainerId CI, typename CT , typename CM = ColumnarModeDefault>
using ColumnUpdater = AccessorTemplate< CI, CT, ColumnAccessMode::update, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using JetAccessor = AccessorTemplate< ContainerId::jet, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using JetDecorator = AccessorTemplate< ContainerId::jet, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MutableJetAccessor = AccessorTemplate< ContainerId::mutableJet, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MutableJetDecorator = AccessorTemplate< ContainerId::mutableJet, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MutableJetUpdater = AccessorTemplate< ContainerId::mutableJet, CT, ColumnAccessMode::update, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MuonAccessor = AccessorTemplate< ContainerId::muon, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MuonDecorator = AccessorTemplate< ContainerId::muon, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using TrackAccessor = AccessorTemplate< ContainerId::track, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using TrackDecorator = AccessorTemplate< ContainerId::track, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Track0Accessor = AccessorTemplate< ContainerId::track0, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Track0Decorator = AccessorTemplate< ContainerId::track0, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Track1Accessor = AccessorTemplate< ContainerId::track1, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Track1Decorator = AccessorTemplate< ContainerId::track1, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Track2Accessor = AccessorTemplate< ContainerId::track2, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Track2Decorator = AccessorTemplate< ContainerId::track2, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using ElectronAccessor = AccessorTemplate< ContainerId::electron, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using ElectronDecorator = AccessorTemplate< ContainerId::electron, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using PhotonAccessor = AccessorTemplate< ContainerId::photon, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using PhotonDecorator = AccessorTemplate< ContainerId::photon, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using EgammaAccessor = AccessorTemplate< ContainerId::egamma, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using EgammaDecorator = AccessorTemplate< ContainerId::egamma, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using ClusterAccessor = AccessorTemplate< ContainerId::cluster, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using ClusterDecorator = AccessorTemplate< ContainerId::cluster, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using EventInfoAccessor = AccessorTemplate< ContainerId::eventInfo, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using EventInfoDecorator = AccessorTemplate< ContainerId::eventInfo, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using ParticleAccessor = AccessorTemplate< ContainerId::particle, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using ParticleDecorator = AccessorTemplate< ContainerId::particle, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Particle0Accessor = AccessorTemplate< ContainerId::particle0, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Particle0Decorator = AccessorTemplate< ContainerId::particle0, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Particle1Accessor = AccessorTemplate< ContainerId::particle1, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Particle1Decorator = AccessorTemplate< ContainerId::particle1, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MetAccessor = AccessorTemplate< ContainerId::met, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MetDecorator = AccessorTemplate< ContainerId::met, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Met0Accessor = AccessorTemplate< ContainerId::met0, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Met0Decorator = AccessorTemplate< ContainerId::met0, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Met1Accessor = AccessorTemplate< ContainerId::met1, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using Met1Decorator = AccessorTemplate< ContainerId::met1, CT, ColumnAccessMode::output, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MutableMetAccessor = AccessorTemplate< ContainerId::mutableMet, CT, ColumnAccessMode::input, CM >
 
template<typename CT , typename CM = ColumnarModeDefault>
using MutableMetDecorator = AccessorTemplate< ContainerId::mutableMet, CT, ColumnAccessMode::output, CM >
 
using ColumnarModeDefault = ColumnarModeXAOD
 
using JetId = ObjectId< ContainerId::jet >
 
using MutableJetId = ObjectId< ContainerId::mutableJet >
 
using MuonId = ObjectId< ContainerId::muon >
 
using EventInfoId = ObjectId< ContainerId::eventInfo >
 
using EventContextId = ObjectId< ContainerId::eventContext >
 
using ElectronId = ObjectId< ContainerId::electron >
 
using PhotonId = ObjectId< ContainerId::photon >
 
using EgammaId = ObjectId< ContainerId::egamma >
 
using ClusterId = ObjectId< ContainerId::cluster >
 
using TrackId = ObjectId< ContainerId::track >
 
using VertexId = ObjectId< ContainerId::vertex >
 
using ParticleId = ObjectId< ContainerId::particle >
 
using Particle0Id = ObjectId< ContainerId::particle0 >
 
using Particle1Id = ObjectId< ContainerId::particle1 >
 
using MetId = ObjectId< ContainerId::met >
 
using Met0Id = ObjectId< ContainerId::met0 >
 
using Met1Id = ObjectId< ContainerId::met1 >
 
using MutableMetId = ObjectId< ContainerId::mutableMet >
 
using MetAssociationId = ObjectId< ContainerId::metAssociation >
 
using xAODContainer = typename ContainerIdTraits< CI >::xAODObjectRangeType
 
using CM = ColumnarModeXAOD
 
using EventInfoRange = ObjectRange< ContainerId::eventInfo >
 
using EventContextRange = ObjectRange< ContainerId::eventContext >
 
using JetRange = ObjectRange< ContainerId::jet >
 
using MutableJetRange = ObjectRange< ContainerId::mutableJet >
 
using EgammaRange = ObjectRange< ContainerId::egamma >
 
using ElectronRange = ObjectRange< ContainerId::electron >
 
using PhotonRange = ObjectRange< ContainerId::photon >
 
using MuonRange = ObjectRange< ContainerId::muon >
 
using ParticleRange = ObjectRange< ContainerId::particle >
 
using Particle0Range = ObjectRange< ContainerId::particle0 >
 
using Particle1Range = ObjectRange< ContainerId::particle1 >
 
using MetRange = ObjectRange< ContainerId::met >
 
using Met0Range = ObjectRange< ContainerId::met0 >
 
using Met1Range = ObjectRange< ContainerId::met1 >
 
using MutableMetRange = ObjectRange< ContainerId::mutableMet >
 
using MetAssociationRange = ObjectRange< ContainerId::metAssociation >
 
using OptJetId = OptObjectId< ContainerId::jet >
 
using OptMutableJetId = OptObjectId< ContainerId::mutableJet >
 
using OptMuonId = OptObjectId< ContainerId::muon >
 
using OptElectronId = OptObjectId< ContainerId::electron >
 
using OptPhotonId = OptObjectId< ContainerId::photon >
 
using OptEgammaId = OptObjectId< ContainerId::egamma >
 
using OptClusterId = OptObjectId< ContainerId::cluster >
 
using OptTrackId = OptObjectId< ContainerId::track >
 
using OptTrack0Id = OptObjectId< ContainerId::track0 >
 
using OptTrack1Id = OptObjectId< ContainerId::track1 >
 
using OptTrack2Id = OptObjectId< ContainerId::track2 >
 
using OptVertexId = OptObjectId< ContainerId::vertex >
 
using OptParticleId = OptObjectId< ContainerId::particle >
 
using OptParticle0Id = OptObjectId< ContainerId::particle0 >
 
using OptParticle1Id = OptObjectId< ContainerId::particle1 >
 
using OptMetId = OptObjectId< ContainerId::met >
 
using OptMet0Id = OptObjectId< ContainerId::met0 >
 
using OptMet1Id = OptObjectId< ContainerId::met1 >
 
using OptMutableMetId = OptObjectId< ContainerId::mutableMet >
 
using OptMetAssociationId = OptObjectId< ContainerId::metAssociation >
 
using OptEventInfoId = OptObjectId< ContainerId::eventInfo >
 
using ElementType = typename ColumnTypeTraits< CT, CM >::ColumnType
 
using ColumnarOffsetType = std::size_t
 the type used for the size and offsets in the columnar data More...
 

Enumerations

enum  ContainerId {
  ContainerId::jet, ContainerId::mutableJet, ContainerId::muon, ContainerId::electron,
  ContainerId::photon, ContainerId::egamma, ContainerId::cluster, ContainerId::track,
  ContainerId::track0 = track, ContainerId::track1, ContainerId::track2, ContainerId::vertex,
  ContainerId::particle, ContainerId::particle0 = particle, ContainerId::particle1, ContainerId::met,
  ContainerId::met0 = met, ContainerId::met1, ContainerId::mutableMet, ContainerId::metAssociation,
  ContainerId::eventInfo, ContainerId::eventContext
}
 the id for the different "virtual" containers More...
 
enum  ColumnAccessMode { ColumnAccessMode::input, ColumnAccessMode::output, ColumnAccessMode::update }
 an enum for the different access modes for a column More...
 

Functions

template<typename CT , typename CM >
 requires ((std::is_integral_v< CT >||std::is_floating_point_v< CT >) &&!std::is_same_v< CT, bool >) struct ColumnTypeTraits< CT
 
template<ContainerId OT, typename CT , typename CM >
 requires (ColumnTypeTraits< CT, CM >::useConvertInput||ColumnTypeTraits< CT, CM >::useConvertWithDataInput) class AccessorTemplate< CI
 a std::vector accessor for types that can be implemented via conversions More...
 
 AccessorTemplate ()=default
 
 AccessorTemplate (ColumnarTool< CM > &columnBase, const std::string &name, ColumnInfo &&info={})
 
decltype(auto) operator() (ObjectId< OT, CM > id) const noexcept
 
bool isAvailable (ObjectId< OT, CM > id) const noexcept
 
std::optional< UserTypegetOptional (ObjectId< OT, CM > id) const
 
template<ContainerId CI, typename CT , ColumnAccessMode CAM, typename CM >
void resetAccessor (AccessorTemplate< CI, CT, CAM, CM > &accessor, ColumnarTool< CM > &columnBase, const std::string &name, ColumnInfo &&info={})
 reset a column accessor to point to a new column More...
 
void moveAccessor (unsigned &dataIndex, std::unique_ptr< ColumnAccessorDataArray > &accessorData, unsigned &sourceIndex, std::unique_ptr< ColumnAccessorDataArray > &sourceData)
 
template<ContainerId CI>
bool operator== (const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
 
template<ContainerId CI>
bool operator!= (const ObjectId< CI, ColumnarModeXAOD > &lhs, const ObjectId< CI, ColumnarModeXAOD > &rhs)
 
template<ContainerId CI>
bool operator== (const ObjectId< CI, ColumnarModeArray > &lhs, const ObjectId< CI, ColumnarModeArray > &rhs)
 
template<ContainerId CI>
bool operator!= (const ObjectId< CI, ColumnarModeArray > &lhs, const ObjectId< CI, ColumnarModeArray > &rhs)
 
template<ContainerId CI>
 requires (std::is_same_v< typename ContainerIdTraits< CI >::xAODObjectRangeType, typename ContainerIdTraits< CI >::xAODObjectIdType >) class ObjectRange< CI
 
 ObjectRange (xAODContainer &val_singlet) noexcept
 
xAODContainergetXAODObject () const noexcept
 
auto begin () const noexcept
 
auto end () const noexcept
 
bool empty () const noexcept
 
std::size_t size () const noexcept
 
ObjectId< CI, CMoperator[] (std::size_t) const noexcept
 
template<typename Acc , typename... Args>
requiresdecltype(auto) std::invocable< Acc, ObjectRange< CI, ColumnarModeXAOD >, Args... > operator() (Acc &acc, Args &&... args) const
 
template<ContainerId CI>
bool operator== (const OptObjectId< CI, ColumnarModeXAOD > &lhs, const OptObjectId< CI, ColumnarModeXAOD > &rhs)
 
template<ContainerId CI>
bool operator!= (const OptObjectId< CI, ColumnarModeXAOD > &lhs, const OptObjectId< CI, ColumnarModeXAOD > &rhs)
 
template<ContainerId CI>
bool operator== (const OptObjectId< CI, ColumnarModeArray > &lhs, const OptObjectId< CI, ColumnarModeArray > &rhs)
 
template<ContainerId CI>
bool operator!= (const OptObjectId< CI, ColumnarModeArray > &lhs, const OptObjectId< CI, ColumnarModeArray > &rhs)
 
template<ContainerId CI>
 requires (CI==ContainerId::particle0||CI==ContainerId::particle1) struct ContainerIdTraits< CI > final
 
template<ContainerId CI, typename CT >
requires(ColumnTypeTraits< CT, ColumnarModeXAOD >::isNativeType) struct ColumnTypeTraits< std requires (ColumnTypeTraits< CT, ColumnarModeArray >::isNativeType) class AccessorTemplate< CI
 
 AccessorTemplate (AccessorTemplate &&that)
 
AccessorTemplateoperator= (AccessorTemplate &&that)
 
std::span< const ElementTypeoperator() (ObjectId< CI, CM > id) const noexcept
 
bool isAvailable (ObjectId< CI, CM > id) const noexcept
 
void renameContainers (IColumnarTool &tool, const std::vector< std::pair< std::string, std::string >> &renames)
 rename containers in the columnar tool More...
 

Variables

CM final
 
 CT
 
AccessorTemplate< OT, ColumnType, ColumnAccessMode::input, CMm_base
 
constexpr unsigned columnarAccessMode = COLUMNAR_DEFAULT_ACCESS_MODE
 
xAODContainerm_singlet = nullptr
 
unsigned m_offsetIndex = 0u
 
std::unique_ptr< ColumnAccessorDataArraym_offsetData
 
unsigned m_dataIndex = 0u
 
std::unique_ptr< ColumnAccessorDataArraym_dataData
 
ColumnAccessor< CI, std::vector< typename ColumnTypeTraits< CT, CM >::ColumnType >, CMm_accessor
 
constexpr ColumnarOffsetType invalidObjectIndex = static_cast<ColumnarOffsetType>(-1)
 the value for an invalid element index More...
 
const std::string numberOfEventsName = "EventInfo"
 the name used for the column containing the number of events More...
 

Detailed Description

Author
Nils Krumnack
Nils Krumnack

Includes

Typedef Documentation

◆ ClusterAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::ClusterAccessor = typedef AccessorTemplate<ContainerId::cluster,CT,ColumnAccessMode::input,CM>
private

Definition at line 245 of file ColumnAccessor.h.

◆ ClusterDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::ClusterDecorator = typedef AccessorTemplate<ContainerId::cluster,CT,ColumnAccessMode::output,CM>
private

Definition at line 246 of file ColumnAccessor.h.

◆ ClusterId

Definition at line 161 of file ObjectId.h.

◆ CM

Definition at line 115 of file ObjectRange.h.

◆ ColumnAccessor

template<ContainerId CI, typename CT , typename CM = ColumnarModeDefault>
using columnar::ColumnAccessor = typedef AccessorTemplate<CI,CT,ColumnAccessMode::input,CM>
private

Definition at line 221 of file ColumnAccessor.h.

◆ ColumnarModeDefault

Definition at line 45 of file ColumnarDef.h.

◆ ColumnarOffsetType

using columnar::ColumnarOffsetType = typedef std::size_t

the type used for the size and offsets in the columnar data

Todo:
This type still needs to be adjusted to match whatever uproot uses for its offset maps.

Definition at line 20 of file IColumnarTool.h.

◆ ColumnDecorator

template<ContainerId CI, typename CT , typename CM = ColumnarModeDefault>
using columnar::ColumnDecorator = typedef AccessorTemplate<CI,CT,ColumnAccessMode::output,CM>
private

Definition at line 222 of file ColumnAccessor.h.

◆ ColumnType

Definition at line 166 of file ColumnAccessor.h.

◆ ColumnUpdater

template<ContainerId CI, typename CT , typename CM = ColumnarModeDefault>
using columnar::ColumnUpdater = typedef AccessorTemplate<CI,CT,ColumnAccessMode::update,CM>
private

Definition at line 223 of file ColumnAccessor.h.

◆ EgammaAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::EgammaAccessor = typedef AccessorTemplate<ContainerId::egamma,CT,ColumnAccessMode::input,CM>
private

Definition at line 243 of file ColumnAccessor.h.

◆ EgammaDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::EgammaDecorator = typedef AccessorTemplate<ContainerId::egamma,CT,ColumnAccessMode::output,CM>
private

Definition at line 244 of file ColumnAccessor.h.

◆ EgammaId

Definition at line 160 of file ObjectId.h.

◆ EgammaRange

Definition at line 288 of file ObjectRange.h.

◆ ElectronAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::ElectronAccessor = typedef AccessorTemplate<ContainerId::electron,CT,ColumnAccessMode::input,CM>
private

Definition at line 239 of file ColumnAccessor.h.

◆ ElectronDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::ElectronDecorator = typedef AccessorTemplate<ContainerId::electron,CT,ColumnAccessMode::output,CM>
private

Definition at line 240 of file ColumnAccessor.h.

◆ ElectronId

Definition at line 158 of file ObjectId.h.

◆ ElectronRange

Definition at line 289 of file ObjectRange.h.

◆ ElementType

Definition at line 66 of file VectorColumn.h.

◆ EventContextId

Definition at line 157 of file ObjectId.h.

◆ EventContextRange

Definition at line 285 of file ObjectRange.h.

◆ EventInfoAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::EventInfoAccessor = typedef AccessorTemplate<ContainerId::eventInfo,CT,ColumnAccessMode::input,CM>
private

Definition at line 247 of file ColumnAccessor.h.

◆ EventInfoDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::EventInfoDecorator = typedef AccessorTemplate<ContainerId::eventInfo,CT,ColumnAccessMode::output,CM>
private

Definition at line 248 of file ColumnAccessor.h.

◆ EventInfoId

Definition at line 156 of file ObjectId.h.

◆ EventInfoRange

Definition at line 284 of file ObjectRange.h.

◆ JetAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::JetAccessor = typedef AccessorTemplate<ContainerId::jet,CT,ColumnAccessMode::input,CM>
private

Definition at line 224 of file ColumnAccessor.h.

◆ JetDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::JetDecorator = typedef AccessorTemplate<ContainerId::jet,CT,ColumnAccessMode::output,CM>
private

Definition at line 225 of file ColumnAccessor.h.

◆ JetId

Definition at line 153 of file ObjectId.h.

◆ JetRange

Definition at line 286 of file ObjectRange.h.

◆ Met0Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Met0Accessor = typedef AccessorTemplate<ContainerId::met0,CT,ColumnAccessMode::input,CM>
private

Definition at line 257 of file ColumnAccessor.h.

◆ Met0Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Met0Decorator = typedef AccessorTemplate<ContainerId::met0,CT,ColumnAccessMode::output,CM>
private

Definition at line 258 of file ColumnAccessor.h.

◆ Met0Id

Definition at line 168 of file ObjectId.h.

◆ Met0Range

Definition at line 296 of file ObjectRange.h.

◆ Met1Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Met1Accessor = typedef AccessorTemplate<ContainerId::met1,CT,ColumnAccessMode::input,CM>
private

Definition at line 259 of file ColumnAccessor.h.

◆ Met1Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Met1Decorator = typedef AccessorTemplate<ContainerId::met1,CT,ColumnAccessMode::output,CM>
private

Definition at line 260 of file ColumnAccessor.h.

◆ Met1Id

Definition at line 169 of file ObjectId.h.

◆ Met1Range

Definition at line 297 of file ObjectRange.h.

◆ MetAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MetAccessor = typedef AccessorTemplate<ContainerId::met,CT,ColumnAccessMode::input,CM>
private

Definition at line 255 of file ColumnAccessor.h.

◆ MetAssociationId

Definition at line 171 of file ObjectId.h.

◆ MetAssociationRange

Definition at line 299 of file ObjectRange.h.

◆ MetDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MetDecorator = typedef AccessorTemplate<ContainerId::met,CT,ColumnAccessMode::output,CM>
private

Definition at line 256 of file ColumnAccessor.h.

◆ MetId

Definition at line 167 of file ObjectId.h.

◆ MetRange

Definition at line 295 of file ObjectRange.h.

◆ MuonAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MuonAccessor = typedef AccessorTemplate<ContainerId::muon,CT,ColumnAccessMode::input,CM>
private

Definition at line 229 of file ColumnAccessor.h.

◆ MuonDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MuonDecorator = typedef AccessorTemplate<ContainerId::muon,CT,ColumnAccessMode::output,CM>
private

Definition at line 230 of file ColumnAccessor.h.

◆ MuonId

Definition at line 155 of file ObjectId.h.

◆ MuonRange

Definition at line 291 of file ObjectRange.h.

◆ MutableJetAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MutableJetAccessor = typedef AccessorTemplate<ContainerId::mutableJet,CT,ColumnAccessMode::input,CM>
private

Definition at line 226 of file ColumnAccessor.h.

◆ MutableJetDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MutableJetDecorator = typedef AccessorTemplate<ContainerId::mutableJet,CT,ColumnAccessMode::output,CM>
private

Definition at line 227 of file ColumnAccessor.h.

◆ MutableJetId

Definition at line 154 of file ObjectId.h.

◆ MutableJetRange

Definition at line 287 of file ObjectRange.h.

◆ MutableJetUpdater

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MutableJetUpdater = typedef AccessorTemplate<ContainerId::mutableJet,CT,ColumnAccessMode::update,CM>
private

Definition at line 228 of file ColumnAccessor.h.

◆ MutableMetAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MutableMetAccessor = typedef AccessorTemplate<ContainerId::mutableMet,CT,ColumnAccessMode::input,CM>
private

Definition at line 261 of file ColumnAccessor.h.

◆ MutableMetDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::MutableMetDecorator = typedef AccessorTemplate<ContainerId::mutableMet,CT,ColumnAccessMode::output,CM>
private

Definition at line 262 of file ColumnAccessor.h.

◆ MutableMetId

Definition at line 170 of file ObjectId.h.

◆ MutableMetRange

Definition at line 298 of file ObjectRange.h.

◆ OptClusterId

Definition at line 196 of file OptObjectId.h.

◆ OptEgammaId

Definition at line 195 of file OptObjectId.h.

◆ OptElectronId

Definition at line 193 of file OptObjectId.h.

◆ OptEventInfoId

Definition at line 210 of file OptObjectId.h.

◆ OptJetId

Definition at line 190 of file OptObjectId.h.

◆ OptMet0Id

Definition at line 206 of file OptObjectId.h.

◆ OptMet1Id

Definition at line 207 of file OptObjectId.h.

◆ OptMetAssociationId

Definition at line 209 of file OptObjectId.h.

◆ OptMetId

Definition at line 205 of file OptObjectId.h.

◆ OptMuonId

Definition at line 192 of file OptObjectId.h.

◆ OptMutableJetId

Definition at line 191 of file OptObjectId.h.

◆ OptMutableMetId

Definition at line 208 of file OptObjectId.h.

◆ OptParticle0Id

Definition at line 203 of file OptObjectId.h.

◆ OptParticle1Id

Definition at line 204 of file OptObjectId.h.

◆ OptParticleId

Definition at line 202 of file OptObjectId.h.

◆ OptPhotonId

Definition at line 194 of file OptObjectId.h.

◆ OptTrack0Id

Definition at line 198 of file OptObjectId.h.

◆ OptTrack1Id

Definition at line 199 of file OptObjectId.h.

◆ OptTrack2Id

Definition at line 200 of file OptObjectId.h.

◆ OptTrackId

Definition at line 197 of file OptObjectId.h.

◆ OptVertexId

Definition at line 201 of file OptObjectId.h.

◆ Particle0Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Particle0Accessor = typedef AccessorTemplate<ContainerId::particle0,CT,ColumnAccessMode::input,CM>
private

Definition at line 251 of file ColumnAccessor.h.

◆ Particle0Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Particle0Decorator = typedef AccessorTemplate<ContainerId::particle0,CT,ColumnAccessMode::output,CM>
private

Definition at line 252 of file ColumnAccessor.h.

◆ Particle0Id

Definition at line 165 of file ObjectId.h.

◆ Particle0Range

Definition at line 293 of file ObjectRange.h.

◆ Particle1Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Particle1Accessor = typedef AccessorTemplate<ContainerId::particle1,CT,ColumnAccessMode::input,CM>
private

Definition at line 253 of file ColumnAccessor.h.

◆ Particle1Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Particle1Decorator = typedef AccessorTemplate<ContainerId::particle1,CT,ColumnAccessMode::output,CM>
private

Definition at line 254 of file ColumnAccessor.h.

◆ Particle1Id

Definition at line 166 of file ObjectId.h.

◆ Particle1Range

Definition at line 294 of file ObjectRange.h.

◆ ParticleAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::ParticleAccessor = typedef AccessorTemplate<ContainerId::particle,CT,ColumnAccessMode::input,CM>
private

Definition at line 249 of file ColumnAccessor.h.

◆ ParticleDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::ParticleDecorator = typedef AccessorTemplate<ContainerId::particle,CT,ColumnAccessMode::output,CM>
private

Definition at line 250 of file ColumnAccessor.h.

◆ ParticleId

Definition at line 164 of file ObjectId.h.

◆ ParticleRange

Definition at line 292 of file ObjectRange.h.

◆ PhotonAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::PhotonAccessor = typedef AccessorTemplate<ContainerId::photon,CT,ColumnAccessMode::input,CM>
private

Definition at line 241 of file ColumnAccessor.h.

◆ PhotonDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::PhotonDecorator = typedef AccessorTemplate<ContainerId::photon,CT,ColumnAccessMode::output,CM>
private

Definition at line 242 of file ColumnAccessor.h.

◆ PhotonId

Definition at line 159 of file ObjectId.h.

◆ PhotonRange

Definition at line 290 of file ObjectRange.h.

◆ Track0Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Track0Accessor = typedef AccessorTemplate<ContainerId::track0,CT,ColumnAccessMode::input,CM>
private

Definition at line 233 of file ColumnAccessor.h.

◆ Track0Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Track0Decorator = typedef AccessorTemplate<ContainerId::track0,CT,ColumnAccessMode::output,CM>
private

Definition at line 234 of file ColumnAccessor.h.

◆ Track1Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Track1Accessor = typedef AccessorTemplate<ContainerId::track1,CT,ColumnAccessMode::input,CM>
private

Definition at line 235 of file ColumnAccessor.h.

◆ Track1Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Track1Decorator = typedef AccessorTemplate<ContainerId::track1,CT,ColumnAccessMode::output,CM>
private

Definition at line 236 of file ColumnAccessor.h.

◆ Track2Accessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Track2Accessor = typedef AccessorTemplate<ContainerId::track2,CT,ColumnAccessMode::input,CM>
private

Definition at line 237 of file ColumnAccessor.h.

◆ Track2Decorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::Track2Decorator = typedef AccessorTemplate<ContainerId::track2,CT,ColumnAccessMode::output,CM>
private

Definition at line 238 of file ColumnAccessor.h.

◆ TrackAccessor

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::TrackAccessor = typedef AccessorTemplate<ContainerId::track,CT,ColumnAccessMode::input,CM>
private

Definition at line 231 of file ColumnAccessor.h.

◆ TrackDecorator

template<typename CT , typename CM = ColumnarModeDefault>
using columnar::TrackDecorator = typedef AccessorTemplate<ContainerId::track,CT,ColumnAccessMode::output,CM>
private

Definition at line 232 of file ColumnAccessor.h.

◆ TrackId

Definition at line 162 of file ObjectId.h.

◆ UserType

using columnar::UserType = typedef typename ColumnTypeTraits<CT,CM>::UserType

Definition at line 167 of file ColumnAccessor.h.

◆ VertexId

Definition at line 163 of file ObjectId.h.

◆ xAODContainer

using columnar::xAODContainer = typedef typename ContainerIdTraits<CI>::xAODObjectRangeType

Definition at line 114 of file ObjectRange.h.

Enumeration Type Documentation

◆ ColumnAccessMode

an enum for the different access modes for a column

Enumerator
input 

an input column

output 

an output column

update 

an updateable column

Definition at line 18 of file ColumnInfo.h.

19  {
21  input,
22 
24  output,
25 
27  update
28  };

◆ ContainerId

enum columnar::ContainerId
strong

the id for the different "virtual" containers

To first order these are just the different xAOD types, and have a direct mapping to the xAOD types. In the columnar world we don't really have objects like that, but there are still columns that belong together, which (mostly) share an offset map and a common prefix to their names. In effect these are virtual containers.

One big difference to the xAOD world is that the container id is really referring to just a single container. If you have e.g. two JetContainer instances in your tool, you need to use two different container ids for them. That is because in the columnar world the virtual containers come with completely separate columns, have separate offset maps, etc.

A given container id also only has a meaning within the context of one specific tool instance. If you have multiple instances of a tool they may be connected to different containers/columns each. If a tool has subtools they need to coordinate their container ids as well, making subtools a lot more tightly connected than in the xAOD world.

For xAOD code the container id must match the container used, as there is an underlying xAOD object for the code. For columnar code they are essentially arbitrary, but to make it work for xAOD mode. There are some containers that have special meaning (e.g. event), but most of them have the same behavior, just for different containers.

By default all referenced xAOD objects are const-qualified, as most tools will anyways work on const-qualified objects. And since the prototype works mostly with accessors directly, it bypasses most of the situations in which the xAOD objects are required to be mutable. I now (13 Jan 25) started to add a mutable version of some containers, because if you need to interface with preexisting xAOD code it can matter. For now I'd say use it sparingly.

Most classes in the prototype are templates that take the container id as a template parameter. In part this is to support the xAOD mode, but it also serves an important role in columanr mode, as it allows to perform a lot of safety checks at compile time. E.g. it allows to guarantee that an ObjectId always refers to a valid entry in the container and that it can only be used with columns that are associated with that container.

Note
Whenever you add a new container id here, you also need to add an associated ContainerIdTraits specialization for that container id (in the correct header file). You should also add proper type aliases for ObjectId, ObjectRange, OptObjectId, and ColumnAccessor. These type aliases are essential for keeping user code reasonably compact.
Enumerator
jet 
mutableJet 
muon 
electron 
photon 
egamma 
cluster 
track 
track0 
track1 
track2 
vertex 
particle 
particle0 
particle1 
met 
met0 
met1 
mutableMet 
metAssociation 
eventInfo 
eventContext 

Definition at line 70 of file ContainerId.h.

71  {
72  jet,
73  mutableJet,
74  muon,
75  electron,
76  photon,
77  egamma,
78  cluster,
79  track,
80  track0 = track,
81  track1,
82  track2,
83  vertex,
84  particle,
86  particle1,
87  met,
88  met0 = met,
89  met1,
90  mutableMet,
92  eventInfo,
94  };

Function Documentation

◆ AccessorTemplate() [1/3]

◆ AccessorTemplate() [2/3]

Definition at line 82 of file VectorColumn.h.

83  {
84  moveAccessor (m_offsetIndex, m_offsetData, that.m_offsetIndex, that.m_offsetData);
85  moveAccessor (m_dataIndex, m_dataData, that.m_dataIndex, that.m_dataData);
86  }

◆ AccessorTemplate() [3/3]

columnar::AccessorTemplate ( ColumnarTool< CM > &  columnBase,
const std::string &  name,
ColumnInfo &&  info = {} 
)

Definition at line 171 of file ColumnAccessor.h.

171  {})
172  : m_base (columnBase, name, std::move (ColumnTypeTraits<CT,CM>::updateColumnInfo(columnBase, info)))
173  {}

◆ begin()

auto columnar::begin ( ) const
noexcept

Definition at line 124 of file ObjectRange.h.

124  {
125  return ObjectRangeIteratorXAODSinglet<CI> (m_singlet);}

◆ empty()

bool columnar::empty ( ) const
noexcept

Definition at line 129 of file ObjectRange.h.

129  {
130  return false;}

◆ end()

auto columnar::end ( ) const
noexcept

Definition at line 126 of file ObjectRange.h.

126  {
127  return ObjectRangeIteratorXAODSinglet<CI> (nullptr);}

◆ getOptional()

std::optional<UserType> columnar::getOptional ( ObjectId< OT, CM id) const

Definition at line 188 of file ColumnAccessor.h.

189  {
190  if (m_base.isAvailable (id))
191  return operator()(id);
192  else
193  return std::nullopt;
194  }

◆ getXAODObject()

xAODContainer& columnar::getXAODObject ( ) const
noexcept

Definition at line 121 of file ObjectRange.h.

121  {
122  return *m_singlet;}

◆ isAvailable() [1/2]

bool columnar::isAvailable ( ObjectId< CI, CM id) const
noexcept

Definition at line 105 of file VectorColumn.h.

106  {
107  auto *data = static_cast<const ElementType*>(id.getData()[m_dataIndex]);
108  return data != nullptr;
109  }

◆ isAvailable() [2/2]

bool columnar::isAvailable ( ObjectId< OT, CM id) const
noexcept

Definition at line 183 of file ColumnAccessor.h.

184  {
185  return m_base.isAvailable (id);
186  }

◆ moveAccessor()

void columnar::moveAccessor ( unsigned &  dataIndex,
std::unique_ptr< ColumnAccessorDataArray > &  accessorData,
unsigned &  sourceIndex,
std::unique_ptr< ColumnAccessorDataArray > &  sourceData 
)

Definition at line 30 of file ColumnAccessorDataArray.cxx.

31  {
32  if (accessorData != nullptr)
33  throw std::runtime_error ("data already set, overwriting not yet supported");
34 
35  dataIndex = sourceIndex;
36  sourceIndex = 0;
37 
38  if (sourceData)
39  {
40  if (sourceData->selfPtr != &sourceData)
41  throw std::logic_error ("selfPtr not set correctly");
42 
43  accessorData = std::move (sourceData);
44  accessorData->selfPtr = &accessorData;
45  accessorData->dataIndexPtr = &dataIndex;
46  }
47  }

◆ ObjectRange()

columnar::ObjectRange ( xAODContainer val_singlet)
noexcept

Definition at line 117 of file ObjectRange.h.

118  : m_singlet (&val_singlet)
119  {}

◆ operator!=() [1/4]

template<ContainerId CI>
bool columnar::operator!= ( const ObjectId< CI, ColumnarModeArray > &  lhs,
const ObjectId< CI, ColumnarModeArray > &  rhs 
)

Definition at line 145 of file ObjectId.h.

146  {
147  return lhs.getIndex() != rhs.getIndex();
148  }

◆ operator!=() [2/4]

template<ContainerId CI>
bool columnar::operator!= ( const ObjectId< CI, ColumnarModeXAOD > &  lhs,
const ObjectId< CI, ColumnarModeXAOD > &  rhs 
)

Definition at line 71 of file ObjectId.h.

72  {
73  return &lhs.getXAODObject() != &rhs.getXAODObject();
74  }

◆ operator!=() [3/4]

template<ContainerId CI>
bool columnar::operator!= ( const OptObjectId< CI, ColumnarModeArray > &  lhs,
const OptObjectId< CI, ColumnarModeArray > &  rhs 
)

Definition at line 182 of file OptObjectId.h.

183  {
184  return lhs.getIndex() != rhs.getIndex();
185  }

◆ operator!=() [4/4]

template<ContainerId CI>
bool columnar::operator!= ( const OptObjectId< CI, ColumnarModeXAOD > &  lhs,
const OptObjectId< CI, ColumnarModeXAOD > &  rhs 
)

Definition at line 89 of file OptObjectId.h.

90  {
91  return lhs.getXAODObject() != rhs.getXAODObject();
92  }

◆ operator()() [1/3]

template<typename Acc , typename... Args>
requiresdecltype(auto) std::invocable<Acc,ObjectRange<CI,ColumnarModeXAOD>,Args...> columnar::operator() ( Acc &  acc,
Args &&...  args 
) const

Definition at line 141 of file ObjectRange.h.

141  {
142  return acc (*this, std::forward<Args> (args)...);}

◆ operator()() [2/3]

auto columnar::operator() ( ObjectId< CI, CM id) const
noexcept

Definition at line 98 of file VectorColumn.h.

99  {
100  auto *offset = static_cast<const ColumnarOffsetType*>(id.getData()[m_offsetIndex]);
101  auto *data = static_cast<const ElementType*>(id.getData()[m_dataIndex]);
102  return std::span<const ElementType> (&data[offset[id.getIndex()]], offset[id.getIndex()+1]-offset[id.getIndex()]);
103  }

◆ operator()() [3/3]

decltype(auto) columnar::operator() ( ObjectId< OT, CM id) const
noexcept

Definition at line 175 of file ColumnAccessor.h.

176  {
177  if constexpr (ColumnTypeTraits<CT,CM>::useConvertWithDataInput)
178  return ColumnTypeTraits<CT,CM>::convertInput (id.getData(), m_base(id));
179  else
180  return ColumnTypeTraits<CT,CM>::convertInput (m_base(id));
181  }

◆ operator=()

AccessorTemplate& columnar::operator= ( AccessorTemplate &&  that)

Definition at line 88 of file VectorColumn.h.

89  {
90  if (this != &that)
91  {
92  moveAccessor (m_offsetIndex, m_offsetData, that.m_offsetIndex, that.m_offsetData);
93  moveAccessor (m_dataIndex, m_dataData, that.m_dataIndex, that.m_dataData);
94  }
95  return *this;
96  }

◆ operator==() [1/4]

template<ContainerId CI>
bool columnar::operator== ( const ObjectId< CI, ColumnarModeArray > &  lhs,
const ObjectId< CI, ColumnarModeArray > &  rhs 
)

Definition at line 139 of file ObjectId.h.

140  {
141  return lhs.getIndex() == rhs.getIndex();
142  }

◆ operator==() [2/4]

template<ContainerId CI>
bool columnar::operator== ( const ObjectId< CI, ColumnarModeXAOD > &  lhs,
const ObjectId< CI, ColumnarModeXAOD > &  rhs 
)

Definition at line 65 of file ObjectId.h.

66  {
67  return &lhs.getXAODObject() == &rhs.getXAODObject();
68  }

◆ operator==() [3/4]

template<ContainerId CI>
bool columnar::operator== ( const OptObjectId< CI, ColumnarModeArray > &  lhs,
const OptObjectId< CI, ColumnarModeArray > &  rhs 
)

Definition at line 176 of file OptObjectId.h.

177  {
178  return lhs.getIndex() == rhs.getIndex();
179  }

◆ operator==() [4/4]

template<ContainerId CI>
bool columnar::operator== ( const OptObjectId< CI, ColumnarModeXAOD > &  lhs,
const OptObjectId< CI, ColumnarModeXAOD > &  rhs 
)

Definition at line 83 of file OptObjectId.h.

84  {
85  return lhs.getXAODObject() == rhs.getXAODObject();
86  }

◆ operator[]()

ObjectId<CI,CM> columnar::operator[] ( std::size_t  ) const
noexcept

Definition at line 135 of file ObjectRange.h.

135  {
136  return ObjectId<CI,CM> (*m_singlet);
137  }

◆ renameContainers()

void columnar::renameContainers ( IColumnarTool tool,
const std::vector< std::pair< std::string, std::string >> &  renames 
)

rename containers in the columnar tool

The interface itself only allows renaming individual columns, but sometimes it is nice to rename a whole container. This happens strictly on the basis of the name, i.e. it being prefixed with "Container.".

Definition at line 23 of file ColumnarToolHelpers.cxx.

24  {
25  if (!renames.empty())
26  {
27  auto columnInfo = tool.getColumnInfo ();
28  for (auto& [from, to] : renames)
29  {
30  for (auto& column : columnInfo)
31  {
32  if (column.name.starts_with (from) && (column.name.size() == from.size() || column.name[from.size()] == '.'))
33  {
34  std::string newName = to + column.name.substr (from.size());
35  tool.renameColumn (column.name, newName);
36  }
37  }
38  }
39  }
40  }

◆ requires() [1/5]

template<typename CT , typename CM >
columnar::requires ( (std::is_integral_v< CT >||std::is_floating_point_v< CT >) &&!std::is_same_v< CT, bool >  )

◆ requires() [2/5]

template<ContainerId CI>
columnar::requires ( CI  = ContainerId::particle0 || CI == ContainerId::particle1)
final

the xAOD type to use with ObjectId

the xAOD type to use with ObjectRange

the xAOD type to use with ElementLink

the xAOD type to use with ObjectId

the xAOD type to use with ObjectRange

the xAOD type to use with ElementLink

the xAOD type to use with ObjectId

the xAOD type to use with ObjectRange

the xAOD type to use with ElementLink

the xAOD type to use with ObjectId

the xAOD type to use with ObjectRange

the xAOD type to use with ElementLink

the xAOD type to use with ObjectId

the xAOD type to use with ObjectRange

the xAOD type to use with ElementLink

Definition at line 16 of file ParticleDef.h.

18  {
19  static constexpr bool isDefined = true;
20  static constexpr bool isMutable = false;
21  static constexpr bool perEventRange = true;
22  static constexpr bool perEventId = false;
23 
25  using xAODObjectIdType = const xAOD::IParticle;
26 
28  using xAODObjectRangeType = const xAOD::IParticleContainer;
29 
31  using xAODElementLinkType = xAOD::IParticleContainer;
32  };

◆ requires() [3/5]

template<ContainerId OT, typename CT , typename CM >
columnar::requires ( ColumnTypeTraits< CT, CM >::useConvertInput||ColumnTypeTraits< CT, CM >::useConvertWithDataInput  )

a std::vector accessor for types that can be implemented via conversions

This is a bit more involved in that it needs to wrap the underlying view, and apply the conversion on access. That means I need to have a custom view and iterator object to handle it. Furthermore, since some conversions need a data pointer and others don't, I need to have two different implementations of the view and iterator.

◆ requires() [4/5]

template<ContainerId CI, typename CT >
requires (ColumnTypeTraits<CT,ColumnarModeXAOD>::isNativeType) struct ColumnTypeTraits<std columnar::requires ( ColumnTypeTraits< CT, ColumnarModeArray >::isNativeType  )

◆ requires() [5/5]

template<ContainerId CI>
columnar::requires ( std::is_same_v< typename ContainerIdTraits< CI >::xAODObjectRangeType, typename ContainerIdTraits< CI >::xAODObjectIdType >  )

◆ resetAccessor()

template<ContainerId CI, typename CT , ColumnAccessMode CAM, typename CM >
void columnar::resetAccessor ( AccessorTemplate< CI, CT, CAM, CM > &  accessor,
ColumnarTool< CM > &  columnBase,
const std::string &  name,
ColumnInfo &&  info = {} 
)
private

reset a column accessor to point to a new column

This allows users to have blank column accessors that only get initialized if they are actually used. This avoids the need to have accessors wrapped inside std::optional or similar constructs. Besides making accessor use slightly more consistent it should also make the code a little more efficient.

Definition at line 212 of file ColumnAccessor.h.

212  {})
213  {
214  accessor = AccessorTemplate<CI,CT,CAM,CM> (columnBase, name, std::move (info));
215  }

◆ size()

std::size_t columnar::size ( ) const
noexcept

Definition at line 132 of file ObjectRange.h.

132  {
133  return 1;}

Variable Documentation

◆ columnarAccessMode

constexpr unsigned columnar::columnarAccessMode = COLUMNAR_DEFAULT_ACCESS_MODE
constexpr

Definition at line 12 of file ColumnarDef.h.

◆ CT

columnar::CT

Definition at line 160 of file ColumnAccessor.h.

◆ final

CM columnar::final
Initial value:
{
using ColumnType = CT

Definition at line 105 of file ColumnAccessor.h.

◆ invalidObjectIndex

constexpr ColumnarOffsetType columnar::invalidObjectIndex = static_cast<ColumnarOffsetType>(-1)
inlineconstexpr

the value for an invalid element index

This is mostly used for invalid element links

Definition at line 25 of file IColumnarTool.h.

◆ m_accessor

ColumnAccessor<CI,std::vector<typename ColumnTypeTraits<CT,CM>::ColumnType>,CM> columnar::m_accessor
private

Private Members

Definition at line 164 of file VectorColumn.h.

◆ m_base

AccessorTemplate<OT,ColumnType,ColumnAccessMode::input,CM> columnar::m_base
private

Definition at line 197 of file ColumnAccessor.h.

◆ m_dataData

std::unique_ptr<ColumnAccessorDataArray> columnar::m_dataData
private

Definition at line 118 of file VectorColumn.h.

◆ m_dataIndex

unsigned columnar::m_dataIndex = 0u
private

Definition at line 117 of file VectorColumn.h.

◆ m_offsetData

std::unique_ptr<ColumnAccessorDataArray> columnar::m_offsetData
private

Definition at line 116 of file VectorColumn.h.

◆ m_offsetIndex

unsigned columnar::m_offsetIndex = 0u
private

Private Members

Definition at line 115 of file VectorColumn.h.

◆ m_singlet

xAODContainer* columnar::m_singlet = nullptr
private

Private Members

Definition at line 150 of file ObjectRange.h.

◆ numberOfEventsName

const std::string columnar::numberOfEventsName = "EventInfo"
inline

the name used for the column containing the number of events

Essentially this shows up in a large number of places, and I'm not sure what the best name for it is. I'm currently using "EventInfo", because technically it is the number of EventInfo objects the data has. I'm pretty sure that this will be confusing to many people.

Todo:
Find a better name than "EventInfo".

Definition at line 38 of file IColumnarTool.h.

grepfile.info
info
Definition: grepfile.py:38
columnar::ContainerId::eventContext
@ eventContext
xAOD::muon
@ muon
Definition: TrackingPrimitives.h:196
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
InDetSimDataHelpers::getData
const InDetSimData * getData(const InDetSimDataCollection &coll, const Identifier &id)
Definition: InDetSimDataDict.h:24
columnar::m_base
AccessorTemplate< OT, ColumnType, ColumnAccessMode::input, CM > m_base
Definition: ColumnAccessor.h:197
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
python.CaloAddPedShiftConfig.args
args
Definition: CaloAddPedShiftConfig.py:45
columnar::ContainerId::particle0
@ particle0
columnar::ContainerId::mutableMet
@ mutableMet
columnar::moveAccessor
void moveAccessor(unsigned &dataIndex, std::unique_ptr< ColumnAccessorDataArray > &accessorData, unsigned &sourceIndex, std::unique_ptr< ColumnAccessorDataArray > &sourceData)
Definition: ColumnAccessorDataArray.cxx:30
columnar::ContainerId::track1
@ track1
xAOD::IParticleContainer
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
Definition: xAOD/xAODBase/xAODBase/IParticleContainer.h:32
DeMoUpdate.column
dictionary column
Definition: DeMoUpdate.py:1110
columnar::m_offsetIndex
unsigned m_offsetIndex
Definition: VectorColumn.h:115
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:41
columnar::m_dataData
std::unique_ptr< ColumnAccessorDataArray > m_dataData
Definition: VectorColumn.h:118
egamma
Definition: egamma.h:58
columnar::ElementType
typename ColumnTypeTraits< CT, CM >::ColumnType ElementType
Definition: VectorColumn.h:66
met
Definition: IMETSignificance.h:24
columnar::ContainerId::particle1
@ particle1
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
columnar::ContainerId::cluster
@ cluster
columnar::ContainerId::metAssociation
@ metAssociation
PlotPulseshapeFromCool.input
input
Definition: PlotPulseshapeFromCool.py:106
AthenaPoolTestRead.acc
acc
Definition: AthenaPoolTestRead.py:16
columnar::ContainerId::mutableJet
@ mutableJet
merge.output
output
Definition: merge.py:17
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
columnar::ContainerId::track2
@ track2
MakeNewFileFromOldAndSubstitution.newName
dictionary newName
Definition: ICHEP2016/MakeNewFileFromOldAndSubstitution.py:95
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
columnar::ContainerId::met1
@ met1
columnar::ContainerId::met0
@ met0
columnar::operator()
decltype(auto) operator()(ObjectId< OT, CM > id) const noexcept
Definition: ColumnAccessor.h:175
columnar::ContainerId::eventInfo
@ eventInfo
xAOD::JetAttributeAccessor::accessor
const AccessorWrapper< T > * accessor(xAOD::JetAttribute::AttributeID id)
Returns an attribute accessor corresponding to an AttributeID.
Definition: JetAccessorMap.h:26
columnar::ContainerId::track0
@ track0
CxxUtils::to
CONT to(RANGE &&r)
Definition: ranges.h:39
Trk::vertex
@ vertex
Definition: MeasurementType.h:21
xAOD::photon
@ photon
Definition: TrackingPrimitives.h:200
columnar::CT
CT
Definition: ColumnAccessor.h:160
columnar::m_offsetData
std::unique_ptr< ColumnAccessorDataArray > m_offsetData
Definition: VectorColumn.h:116
xAOD::EgammaParameters::electron
@ electron
Definition: EgammaEnums.h:18
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
columnar::m_singlet
xAODContainer * m_singlet
Definition: ObjectRange.h:150
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
columnar::ColumnarOffsetType
std::size_t ColumnarOffsetType
the type used for the size and offsets in the columnar data
Definition: IColumnarTool.h:20
python.difftuple.renames
dictionary renames
Definition: difftuple.py:25
columnar::m_dataIndex
unsigned m_dataIndex
Definition: VectorColumn.h:117
WriteBchToCool.update
update
Definition: WriteBchToCool.py:67
columnar::ColumnType
typename ColumnTypeTraits< CT, CM >::ColumnType ColumnType
Definition: ColumnAccessor.h:166