ATLAS Offline Software
Loading...
Searching...
No Matches
columnar::TestUtils::ColumnDataVectorVectorVariantLink< T > Struct Template Referencefinal
Inheritance diagram for columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >:

Public Types

using CM = ColumnarModeArray

Public Member Functions

 ColumnDataVectorVectorVariantLink (const std::string &val_branchName)
 ~ColumnDataVectorVectorVariantLink ()
virtual bool connect (TTree *tree, std::unordered_map< std::string, const std::vector< ColumnarOffsetType > * > &offsetColumns, std::unordered_map< std::string, ColumnInfo > &requestedColumns) override
virtual void clearColumns () override
virtual void getEntry (Long64_t entry) override
virtual void setData (ColumnVectorData &colData) override
virtual BranchPerfData getPerfData (float emptyTime) override
virtual void collectColumnData () override
void connectColumnIndices (const ColumnVectorHeader &header)
 lookup and store column indices from the header for all enabled output columns

Public Attributes

BranchReader< std::vector< std::vector< ElementLink< T > > > > branchReader
std::vector< ColumnarOffsetTypeoffsets = {0}
std::vector< typename CM::LinkIndexTypecolumnData
std::vector< typename CM::LinkKeyTypekeysColumn
std::vector< std::string > containers
std::vector< SG::sgkey_tcontainerKeys
std::vector< const std::vector< ColumnarOffsetType > * > containerOffsets
Benchmark benchmarkUnpack
Benchmark benchmark
unsigned entries = 0
unsigned nullEntries = 0
bool checkUnknownKeys = false
std::unordered_map< SG::sgkey_t, std::unordered_set< std::string > > unknownKeys
std::vector< OutputColumnInfooutputColumns

Detailed Description

template<typename T>
struct columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >

Definition at line 1270 of file ColumnarPhysliteTest.cxx.

Member Typedef Documentation

◆ CM

Definition at line 1272 of file ColumnarPhysliteTest.cxx.

Constructor & Destructor Documentation

◆ ColumnDataVectorVectorVariantLink()

template<typename T>
columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::ColumnDataVectorVectorVariantLink ( const std::string & val_branchName)
inlineexplicit

Definition at line 1288 of file ColumnarPhysliteTest.cxx.

1289 : branchReader (val_branchName), benchmarkUnpack (branchReader.columnName()+"(unpack)"), benchmark (branchReader.columnName())
1290 {
1291 outputColumns.push_back ({.name = branchReader.columnName() + ".data"});
1292 outputColumns.push_back ({.name = branchReader.columnName() + ".offset", .isOffset = true});
1293 outputColumns.push_back ({.name = branchReader.columnName() + ".keys"});
1294 }
std::vector< OutputColumnInfo > outputColumns

◆ ~ColumnDataVectorVectorVariantLink()

Definition at line 1296 of file ColumnarPhysliteTest.cxx.

1297 {
1298 // print unknown keys and containers they may be associated
1299 // with, based on whether they were always within the range of
1300 // elements allowed for the container.
1301 for (auto& [key, forbiddenContainer] : unknownKeys)
1302 {
1303 std::cout << "unknown key: " << std::hex << key << std::dec << ", allowed containers:";
1304 for (const auto& container : containers)
1305 {
1307 std::cout << " " << container;
1308 }
1310 }
1311 }

Member Function Documentation

◆ clearColumns()

template<typename T>
virtual void columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::clearColumns ( )
inlineoverridevirtual

Implements columnar::TestUtils::IColumnData.

Definition at line 1364 of file ColumnarPhysliteTest.cxx.

1365 {
1366 columnData.clear();
1367 offsets.clear();
1368 offsets.push_back (0);
1369 }

◆ collectColumnData()

template<typename T>
virtual void columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::collectColumnData ( )
inlineoverridevirtual

◆ connect()

template<typename T>
virtual bool columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::connect ( TTree * tree,
std::unordered_map< std::string, const std::vector< ColumnarOffsetType > * > & offsetColumns,
std::unordered_map< std::string, ColumnInfo > & requestedColumns )
inlineoverridevirtual

Implements columnar::TestUtils::IColumnData.

Definition at line 1313 of file ColumnarPhysliteTest.cxx.

1314 {
1315 auto iter = requestedColumns.find (outputColumns.at(0).name);
1316 if (iter == requestedColumns.end())
1317 return false;
1318 outputColumns.at(0).enabled = true;
1319
1320 branchReader.connectTree (tree);
1321
1322 if (iter->second.offsetName != outputColumns.at(1).name)
1323 throw std::runtime_error ("offset name mismatch: " + iter->second.offsetName + " != " + outputColumns.at(1).name);
1324 containers = iter->second.linkTargetNames;
1325 if (containers.empty() || iter->second.variantLinkKeyColumn.empty())
1326 throw std::runtime_error ("no variant link containers for: " + outputColumns.at(0).name);
1327 if (iter->second.variantLinkKeyColumn != outputColumns.at(2).name)
1328 throw std::runtime_error ("variant link key column mismatch: " + iter->second.variantLinkKeyColumn + " != " + outputColumns.at(2).name);
1329
1330 for ([[maybe_unused]] auto& container : containers)
1331 {
1332 keysColumn.push_back (keysColumn.size()+1);
1333 if (!offsetColumns.contains (container))
1334 throw std::runtime_error ("missing offset column(variant-link): " + container);
1335 containerOffsets.push_back (offsetColumns.at (container));
1336 if (auto iter = knownKeys.find (container); iter != knownKeys.end())
1337 {
1338 containerKeys.push_back (iter->second);
1339 } else
1340 {
1341 checkUnknownKeys = true;
1342 containerKeys.push_back (0u);
1343 }
1344 }
1345
1346 requestedColumns.erase (iter);
1347
1348 iter = requestedColumns.find (outputColumns.at(1).name);
1349 if (iter != requestedColumns.end())
1350 {
1351 outputColumns.at(1).enabled = true;
1352 requestedColumns.erase (iter);
1353 }
1354
1355 iter = requestedColumns.find (outputColumns.at(2).name);
1356 if (iter != requestedColumns.end())
1357 {
1358 outputColumns.at(2).enabled = true;
1359 requestedColumns.erase (iter);
1360 }
1361 return true;
1362 }

◆ connectColumnIndices()

void columnar::TestUtils::IColumnData::connectColumnIndices ( const ColumnVectorHeader & header)
inlineinherited

lookup and store column indices from the header for all enabled output columns

Definition at line 303 of file ColumnarPhysliteTest.cxx.

304 {
305 for (auto& col : outputColumns)
306 {
307 if (col.enabled)
308 col.columnIndex = header.getColumnIndex (col.name);
309 }
310 }

◆ getEntry()

template<typename T>
virtual void columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::getEntry ( Long64_t entry)
inlineoverridevirtual

Implements columnar::TestUtils::IColumnData.

Definition at line 1371 of file ColumnarPhysliteTest.cxx.

1372 {
1373 benchmark.startTimer ();
1374 const auto& branchData = branchReader.getEntry (entry);
1375 benchmark.stopTimer ();
1376 benchmarkUnpack.startTimer ();
1377 for (auto& data : branchData)
1378 {
1379 for (auto& element : data)
1380 {
1381 if (element.isDefault() || (element.key() == 0 && element.index() == 0))
1382 columnData.push_back (invalidObjectIndex);
1383 else
1384 {
1385 typename CM::LinkIndexType key = 0xff;
1386 typename CM::LinkIndexType index = 0;
1387 for (std::size_t i = 0; i < containers.size(); ++i)
1388 {
1389 if (element.key() == containerKeys[i])
1390 {
1391 if (containerOffsets[i]->back() <= element.index())
1392 throw std::runtime_error ("invalid index: " + std::to_string (element.index()) + " in container: " + containers[i] + " with size: " + std::to_string (containerOffsets[i]->back()));
1393 key = keysColumn[i];
1394 if (containerOffsets[i]->size() < 2)
1395 throw std::runtime_error ("container offset not yet filled for: " + containers[i]);
1396 index = containerOffsets[i]->at (containerOffsets[i]->size()-2) + element.index();
1397 break;
1398 }
1399 }
1400 if (key == 0xff && checkUnknownKeys)
1401 {
1402 // this records which containers the unknown key is
1403 // compatible with, so that I may figure out which
1404 // container it is and hard-code it above.
1406 for (std::size_t i = 0; i < containers.size(); ++i)
1407 {
1408 if (containerOffsets[i]->back() <= containerOffsets[i]->at (containerOffsets[i]->size()-2) + element.index())
1410 }
1411 }
1413 }
1414 }
1415 offsets.push_back (columnData.size());
1416 }
1417 benchmarkUnpack.stopTimer ();
1418 }
std::size_t LinkIndexType
the type used for columns that represent element links
Definition ColumnarDef.h:80
static LinkIndexType mergeLinkKeyIndex(LinkIndexType key, LinkIndexType index)
merge a key and index value into a link value

◆ getPerfData()

template<typename T>
virtual BranchPerfData columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::getPerfData ( float emptyTime)
inlinenodiscardoverridevirtual

Implements columnar::TestUtils::IColumnData.

Definition at line 1430 of file ColumnarPhysliteTest.cxx.

1431 {
1433 result.name = branchReader.columnName();
1434 result.timeRead = benchmark.getEntryTime(emptyTime);
1435 result.timeUnpack = benchmarkUnpack.getEntryTime(emptyTime);
1436 benchmark.setSilence();
1437 benchmarkUnpack.setSilence();
1438 result.entrySize = branchReader.entrySize();
1439 result.uncompressedSize = branchReader.uncompressedSize();
1440 result.numBaskets = branchReader.numBaskets();
1443 return result;
1444 }

◆ setData()

template<typename T>
virtual void columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::setData ( ColumnVectorData & colData)
inlineoverridevirtual

Implements columnar::TestUtils::IColumnData.

Definition at line 1420 of file ColumnarPhysliteTest.cxx.

1421 {
1422 if (outputColumns.at(0).columnIndex != ColumnVectorHeader::nullIndex)
1423 colData.setColumn (outputColumns.at(0).columnIndex, columnData.size(), columnData.data());
1424 if (outputColumns.at(1).columnIndex != ColumnVectorHeader::nullIndex)
1425 colData.setColumn (outputColumns.at(1).columnIndex, offsets.size(), offsets.data());
1426 if (outputColumns.at(2).columnIndex != ColumnVectorHeader::nullIndex)
1427 colData.setColumn (outputColumns.at(2).columnIndex, keysColumn.size(), keysColumn.data());
1428 }

Member Data Documentation

◆ benchmark

Definition at line 1281 of file ColumnarPhysliteTest.cxx.

◆ benchmarkUnpack

template<typename T>
Benchmark columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::benchmarkUnpack

Definition at line 1280 of file ColumnarPhysliteTest.cxx.

◆ branchReader

template<typename T>
BranchReader<std::vector<std::vector<ElementLink<T> > > > columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::branchReader

Definition at line 1273 of file ColumnarPhysliteTest.cxx.

◆ checkUnknownKeys

template<typename T>
bool columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::checkUnknownKeys = false

Definition at line 1285 of file ColumnarPhysliteTest.cxx.

◆ columnData

template<typename T>
std::vector<typename CM::LinkIndexType> columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::columnData

Definition at line 1275 of file ColumnarPhysliteTest.cxx.

◆ containerKeys

template<typename T>
std::vector<SG::sgkey_t> columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::containerKeys

Definition at line 1278 of file ColumnarPhysliteTest.cxx.

◆ containerOffsets

template<typename T>
std::vector<const std::vector<ColumnarOffsetType>*> columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::containerOffsets

Definition at line 1279 of file ColumnarPhysliteTest.cxx.

◆ containers

template<typename T>
std::vector<std::string> columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::containers

Definition at line 1277 of file ColumnarPhysliteTest.cxx.

◆ entries

template<typename T>
unsigned columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::entries = 0

Definition at line 1282 of file ColumnarPhysliteTest.cxx.

◆ keysColumn

template<typename T>
std::vector<typename CM::LinkKeyType> columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::keysColumn

Definition at line 1276 of file ColumnarPhysliteTest.cxx.

◆ nullEntries

template<typename T>
unsigned columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::nullEntries = 0

Definition at line 1283 of file ColumnarPhysliteTest.cxx.

◆ offsets

template<typename T>
std::vector<ColumnarOffsetType> columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::offsets = {0}

Definition at line 1274 of file ColumnarPhysliteTest.cxx.

1274{0};

◆ outputColumns

std::vector<OutputColumnInfo> columnar::TestUtils::IColumnData::outputColumns
inherited

Definition at line 296 of file ColumnarPhysliteTest.cxx.

◆ unknownKeys

template<typename T>
std::unordered_map<SG::sgkey_t,std::unordered_set<std::string> > columnar::TestUtils::ColumnDataVectorVectorVariantLink< T >::unknownKeys

Definition at line 1286 of file ColumnarPhysliteTest.cxx.


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