ATLAS Offline Software
Loading...
Searching...
No Matches
columnar::ColumnAccessorOptions Struct Referencefinal

#include <ColumnAccessor.h>

Collaboration diagram for columnar::ColumnAccessorOptions:

Public Member Functions

ColumnInfo makeColumnInfo () const

Public Attributes

std::string replacesColumn {}
 whether this replaces another column
bool isOptional = false
 whether this column is optional
bool addMTDependency = false
 whether to add data dependencies in AthenaMT
std::vector< std::string > internalLinkTargetNames {}
 for link columns: the name(s) of the container(s) we link to

Detailed Description

Definition at line 24 of file ColumnAccessor.h.

Member Function Documentation

◆ makeColumnInfo()

ColumnInfo columnar::ColumnAccessorOptions::makeColumnInfo ( ) const
inline

Definition at line 96 of file ColumnAccessor.h.

97 {
98 ColumnInfo info;
99 info.replacesColumn = replacesColumn;
100 info.isOptional = isOptional;
101 info.linkTargetNames = internalLinkTargetNames;
102 return info;
103 }
std::string replacesColumn
whether this replaces another column
std::vector< std::string > internalLinkTargetNames
for link columns: the name(s) of the container(s) we link to
bool isOptional
whether this column is optional

Member Data Documentation

◆ addMTDependency

bool columnar::ColumnAccessorOptions::addMTDependency = false

whether to add data dependencies in AthenaMT

In AthenaMT we need to track data dependencies between algorithms, but we usually only want to use a subset of the data dependencies used in columnar code. This flag indicates that this accessor should be added as a data dependency in AthenaMT.

Definition at line 61 of file ColumnAccessor.h.

◆ internalLinkTargetNames

std::vector<std::string> columnar::ColumnAccessorOptions::internalLinkTargetNames {}

for link columns: the name(s) of the container(s) we link to

Some of our columns contain links to other objects. For those columns this will contain the names of the containers we link to (i.e. the names of their offset columns).

For simple link columns that can only link to a single other container, this will be a vector of length one and variantLinkKeyColumn will not be set. In that case the link column will simply contain the index of the object in the linked too container.

For variant link columns (i.e. columns with links that can reference objects in more than one container), this will contain the list of all linked to columns that this tool will use. In that case the most significant bits of the index in this column will encode a container key that is matched against variantLinkKeyColumn to identify which container is being referenced by each link.

Note that a variant link column may contain links to columns that are not listed here, but those will not be used by this tool. There are also no requirements on the exact values of the keys, as long as they match variantLinkKeyColumn. And different tools may list the columns in different order. The thought behind that is that it allows multiple tools to read the same link column as long as they have each a unique key column, without having to coordinate the exact list of linked containers used.

Definition at line 94 of file ColumnAccessor.h.

94{};

◆ isOptional

bool columnar::ColumnAccessorOptions::isOptional = false

whether this column is optional

Essentially this indicates that the column can be skipped, and the tool will check whether the column is present before trying to use it. This allows to adapt the tool somewhat to different environments.

The downside here is that overall this is still a bit ambiguous, i.e. whoever links up the columns needs to decide whether it is needed. For columns that are not in the input file that's easy, there is no choice but omitting them. However, some columns only exist as a backup option for other columns, and ideally we don't want to load the backup columns when the main columns are missing. So either that needs to be set during configuration, or we need to add more meta-information for that case, or the user needs to do something smart (i.e. manual) in their code.

Definition at line 52 of file ColumnAccessor.h.

◆ replacesColumn

std::string columnar::ColumnAccessorOptions::replacesColumn {}

whether this replaces another column

For corrections it is quite typical that a column is meant to replace another column. In columnar land we will create genuinely new columns, in xAOD land we will usually overwrite the content of those columns. This member is used to indicate which column gets replaced.

Definition at line 33 of file ColumnAccessor.h.

33{};

The documentation for this struct was generated from the following file: