![]() |
ATLAS Offline Software
|
#include <ColumnAccessor.h>
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 | |
Definition at line 24 of file ColumnAccessor.h.
|
inline |
Definition at line 96 of file ColumnAccessor.h.
| 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.
| 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.
| 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.
| 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.