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 (TestUtils::ToolWrapperData &tool) override
virtual BranchPerfData getPerfData (float emptyTime) override
virtual void collectColumnData () override

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 1335 of file ColumnarPhysliteTest.cxx.

Member Typedef Documentation

◆ CM

Definition at line 1337 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 1353 of file ColumnarPhysliteTest.cxx.

1354 : branchReader (val_branchName), benchmarkUnpack (branchReader.columnName()+"(unpack)"), benchmark (branchReader.columnName())
1355 {
1356 outputColumns.push_back ({.name = branchReader.columnName() + ".data"});
1357 outputColumns.push_back ({.name = branchReader.columnName() + ".offset", .isOffset = true});
1358 outputColumns.push_back ({.name = branchReader.columnName() + ".keys"});
1359 }
std::vector< OutputColumnInfo > outputColumns

◆ ~ColumnDataVectorVectorVariantLink()

Definition at line 1361 of file ColumnarPhysliteTest.cxx.

1362 {
1363 // print unknown keys and containers they may be associated
1364 // with, based on whether they were always within the range of
1365 // elements allowed for the container.
1366 for (auto& [key, forbiddenContainer] : unknownKeys)
1367 {
1368 std::cout << "unknown key: " << std::hex << key << std::dec << ", allowed containers:";
1369 for (const auto& container : containers)
1370 {
1372 std::cout << " " << container;
1373 }
1375 }
1376 }

Member Function Documentation

◆ clearColumns()

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

Implements columnar::TestUtils::IColumnData.

Definition at line 1429 of file ColumnarPhysliteTest.cxx.

1430 {
1431 columnData.clear();
1432 offsets.clear();
1433 offsets.push_back (0);
1434 }

◆ 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 1378 of file ColumnarPhysliteTest.cxx.

1379 {
1380 auto iter = requestedColumns.find (outputColumns.at(0).name);
1381 if (iter == requestedColumns.end())
1382 return false;
1383 outputColumns.at(0).enabled = true;
1384
1385 branchReader.connectTree (tree);
1386
1387 if (iter->second.offsetName != outputColumns.at(1).name)
1388 throw std::runtime_error ("offset name mismatch: " + iter->second.offsetName + " != " + outputColumns.at(1).name);
1389 containers = iter->second.linkTargetNames;
1390 if (containers.empty() || iter->second.variantLinkKeyColumn.empty())
1391 throw std::runtime_error ("no variant link containers for: " + outputColumns.at(0).name);
1392 if (iter->second.variantLinkKeyColumn != outputColumns.at(2).name)
1393 throw std::runtime_error ("variant link key column mismatch: " + iter->second.variantLinkKeyColumn + " != " + outputColumns.at(2).name);
1394
1395 for ([[maybe_unused]] auto& container : containers)
1396 {
1397 keysColumn.push_back (keysColumn.size()+1);
1398 if (!offsetColumns.contains (container))
1399 throw std::runtime_error ("missing offset column(variant-link): " + container);
1400 containerOffsets.push_back (offsetColumns.at (container));
1401 if (auto iter = knownKeys.find (container); iter != knownKeys.end())
1402 {
1403 containerKeys.push_back (iter->second);
1404 } else
1405 {
1406 checkUnknownKeys = true;
1407 containerKeys.push_back (0u);
1408 }
1409 }
1410
1411 requestedColumns.erase (iter);
1412
1413 iter = requestedColumns.find (outputColumns.at(1).name);
1414 if (iter != requestedColumns.end())
1415 {
1416 outputColumns.at(1).enabled = true;
1417 requestedColumns.erase (iter);
1418 }
1419
1420 iter = requestedColumns.find (outputColumns.at(2).name);
1421 if (iter != requestedColumns.end())
1422 {
1423 outputColumns.at(2).enabled = true;
1424 requestedColumns.erase (iter);
1425 }
1426 return true;
1427 }

◆ getEntry()

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

Implements columnar::TestUtils::IColumnData.

Definition at line 1436 of file ColumnarPhysliteTest.cxx.

1437 {
1438 benchmark.startTimer ();
1439 const auto& branchData = branchReader.getEntry (entry);
1440 benchmark.stopTimer ();
1441 benchmarkUnpack.startTimer ();
1442 for (auto& data : branchData)
1443 {
1444 for (auto& element : data)
1445 {
1446 if (element.isDefault() || (element.key() == 0 && element.index() == 0))
1447 columnData.push_back (invalidObjectIndex);
1448 else
1449 {
1450 typename CM::LinkIndexType key = 0xff;
1451 typename CM::LinkIndexType index = 0;
1452 for (std::size_t i = 0; i < containers.size(); ++i)
1453 {
1454 if (element.key() == containerKeys[i])
1455 {
1456 if (containerOffsets[i]->back() <= element.index())
1457 throw std::runtime_error ("invalid index: " + std::to_string (element.index()) + " in container: " + containers[i] + " with size: " + std::to_string (containerOffsets[i]->back()));
1458 key = keysColumn[i];
1459 if (containerOffsets[i]->size() < 2)
1460 throw std::runtime_error ("container offset not yet filled for: " + containers[i]);
1461 index = containerOffsets[i]->at (containerOffsets[i]->size()-2) + element.index();
1462 break;
1463 }
1464 }
1465 if (key == 0xff && checkUnknownKeys)
1466 {
1467 // this records which containers the unknown key is
1468 // compatible with, so that I may figure out which
1469 // container it is and hard-code it above.
1471 for (std::size_t i = 0; i < containers.size(); ++i)
1472 {
1473 if (containerOffsets[i]->back() <= containerOffsets[i]->at (containerOffsets[i]->size()-2) + element.index())
1475 }
1476 }
1478 }
1479 }
1480 offsets.push_back (columnData.size());
1481 }
1482 benchmarkUnpack.stopTimer ();
1483 }
std::size_t LinkIndexType
the type used for columns that represent element links
Definition ColumnarDef.h:68
static LinkIndexType mergeLinkKeyIndex(LinkIndexType key, LinkIndexType index)
merge a key and index value into a link value
Definition ColumnarDef.h:96

◆ getPerfData()

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

Implements columnar::TestUtils::IColumnData.

Definition at line 1495 of file ColumnarPhysliteTest.cxx.

1496 {
1498 result.name = branchReader.columnName();
1499 result.timeRead = benchmark.getEntryTime(emptyTime);
1500 result.timeUnpack = benchmarkUnpack.getEntryTime(emptyTime);
1501 benchmark.setSilence();
1502 benchmarkUnpack.setSilence();
1503 result.entrySize = branchReader.entrySize();
1504 result.uncompressedSize = branchReader.uncompressedSize();
1505 result.numBaskets = branchReader.numBaskets();
1508 return result;
1509 }

◆ setData()

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

Implements columnar::TestUtils::IColumnData.

Definition at line 1485 of file ColumnarPhysliteTest.cxx.

1486 {
1487 if (outputColumns.at(0).enabled)
1488 tool.setColumn (outputColumns.at(0).name, columnData.size(), columnData.data());
1489 if (outputColumns.at(1).enabled)
1490 tool.setColumn (outputColumns.at(1).name, offsets.size(), offsets.data());
1491 if (outputColumns.at(2).enabled)
1492 tool.setColumn (outputColumns.at(2).name, keysColumn.size(), keysColumn.data());
1493 }

Member Data Documentation

◆ benchmark

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

Definition at line 1346 of file ColumnarPhysliteTest.cxx.

◆ benchmarkUnpack

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

Definition at line 1345 of file ColumnarPhysliteTest.cxx.

◆ branchReader

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

Definition at line 1338 of file ColumnarPhysliteTest.cxx.

◆ checkUnknownKeys

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

Definition at line 1350 of file ColumnarPhysliteTest.cxx.

◆ columnData

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

Definition at line 1340 of file ColumnarPhysliteTest.cxx.

◆ containerKeys

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

Definition at line 1343 of file ColumnarPhysliteTest.cxx.

◆ containerOffsets

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

Definition at line 1344 of file ColumnarPhysliteTest.cxx.

◆ containers

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

Definition at line 1342 of file ColumnarPhysliteTest.cxx.

◆ entries

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

Definition at line 1347 of file ColumnarPhysliteTest.cxx.

◆ keysColumn

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

Definition at line 1341 of file ColumnarPhysliteTest.cxx.

◆ nullEntries

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

Definition at line 1348 of file ColumnarPhysliteTest.cxx.

◆ offsets

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

Definition at line 1339 of file ColumnarPhysliteTest.cxx.

1339{0};

◆ outputColumns

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

Definition at line 371 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 1351 of file ColumnarPhysliteTest.cxx.


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