Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ColumnarPhysliteTest.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 
8 //
9 // includes
10 //
11 
13 
14 #include <AsgTesting/UnitTest.h>
21 
22 #ifdef XAOD_STANDALONE
24 #else
25 #include <POOLRootAccess/TEvent.h>
26 #endif
27 
28 #include <TFile.h>
29 #include <TLeaf.h>
30 #include <TTree.h>
31 
32 #include <chrono>
33 #include <cstdint>
34 #include <memory>
35 #include <vector>
36 
37 #include <gtest/gtest.h>
38 
39 //
40 // method implementations
41 //
42 
43 namespace columnar
44 {
45  namespace
46  {
47  // the target time to run a given tool
48  const auto targetTime = std::chrono::seconds(1);
49 
50 
51  class Benchmark final
52  {
53  std::string m_name;
54 
55  std::chrono::time_point<std::chrono::high_resolution_clock> m_start;
56 
59 
62 
63  public:
64  Benchmark (const std::string& val_name)
65  : m_name (val_name)
66  {}
67 
68  ~Benchmark ()
69  {
70  if (m_count > 0)
71  std::cout << m_name << ": " << std::chrono::duration<std::uint64_t,std::nano> (m_ticks) / m_count << std::endl;
72  }
73 
74  auto getTotalTime () const
75  {
76  return m_ticks;
77  }
78 
79  void startTimer ()
80  {
82  }
83 
84  void stopTimer ()
85  {
87  m_count += 1;
88  }
89  };
90  }
91 
92  namespace PhysliteTestHelpers
93  {
95  {
96  public:
97 
98  virtual ~IColumnData () noexcept = default;
99 
100  virtual bool connect (TTree *tree, std::unordered_map<std::string,const IColumnData*>& sizeColumns, std::unordered_map<std::string,ColumnInfo>& requestedColumns) = 0;
101 
102  virtual std::size_t getSize () const = 0;
103 
104  virtual void setData (ColumnarToolWrapperData& tool, Long64_t entry) = 0;
105  };
106 
107  struct ColumnDataEventCount final : public PhysliteTestHelpers::IColumnData
108  {
109  std::array<ColumnarOffsetType, 2> data = {0, 1};
110 
111  virtual bool connect (TTree * /*tree*/, std::unordered_map<std::string,const PhysliteTestHelpers::IColumnData*>& /*sizeColumns*/, std::unordered_map<std::string,ColumnInfo>& requestedColumns) override
112  {
113  if (requestedColumns.contains (numberOfEventsName))
114  {
115  requestedColumns.erase (numberOfEventsName);
116  return true;
117  }
118  return false;
119  }
120 
121  virtual std::size_t getSize () const override
122  {
123  return 1;
124  }
125 
126  virtual void setData (ColumnarToolWrapperData& tool, Long64_t /*entry*/) override
127  {
128  tool.setColumn (numberOfEventsName, data.size(), data.data());
129  }
130  };
131 
132  template<typename T>
134  {
135  std::string columnName;
136  std::string branchName;
137  T data {};
138  TBranch *branch = nullptr;
139  Benchmark benchmark;
140 
141  ColumnDataScalar (const std::string& val_columnName, const std::string& val_branchName)
142  : columnName (val_columnName), branchName (val_branchName), benchmark (columnName) {}
143 
144  virtual bool connect (TTree *tree, std::unordered_map<std::string,const PhysliteTestHelpers::IColumnData*>& /*sizeColumns*/, std::unordered_map<std::string,ColumnInfo>& requestedColumns) override
145  {
146  auto iter = requestedColumns.find (columnName);
147  if (iter == requestedColumns.end())
148  return false;
149 
150  branch = tree->GetBranch (branchName.c_str());
151  if (!branch)
152  throw std::runtime_error ("failed to get branch: " + branchName);
153  branch->SetAddress (&data);
154 
155  requestedColumns.erase (iter);
156  return true;
157  }
158 
159  virtual std::size_t getSize () const override
160  {
161  return 1;
162  }
163 
164  virtual void setData (ColumnarToolWrapperData& tool, Long64_t entry) override
165  {
166  benchmark.startTimer ();
167  branch->GetEntry (entry);
168  benchmark.stopTimer ();
169  tool.setColumn (columnName, 1, &data);
170  }
171  };
172 
173  template<typename T>
175  {
176  std::string columnName;
177  std::string branchName;
178  std::string offsetName;
179  const PhysliteTestHelpers::IColumnData *sizeColumn = nullptr;
180  std::array<ColumnarOffsetType, 2> offsets = {0, 0};
181  std::vector<T> *data = nullptr;
182  TBranch *branch = nullptr;
183  Benchmark benchmark;
184 
185  ColumnDataVector (const std::string& val_columnName, const std::string& val_branchName)
186  : columnName (val_columnName), branchName (val_branchName), benchmark (columnName) {}
187 
188  virtual bool connect (TTree *tree, std::unordered_map<std::string,const PhysliteTestHelpers::IColumnData*>& sizeColumns, std::unordered_map<std::string,ColumnInfo>& requestedColumns) override
189  {
190  auto iter = requestedColumns.find (columnName);
191  if (iter == requestedColumns.end())
192  return false;
193 
194  branch = tree->GetBranch (branchName.c_str());
195  if (!branch)
196  throw std::runtime_error ("failed to get branch: " + branchName);
197  branch->SetAddress (&data);
198 
199  offsetName = iter->second.offsetName;
200  if (offsetName.empty())
201  throw std::runtime_error ("missing offset column for: " + columnName);
202 
203  requestedColumns.erase (iter);
204 
205  if (auto sizeIter = sizeColumns.find (offsetName); sizeIter != sizeColumns.end())
206  sizeColumn = sizeIter->second;
207  else
208  sizeColumns.emplace (offsetName, this);
209 
210  iter = requestedColumns.find (offsetName);
211  if (iter == requestedColumns.end())
212  offsetName.clear();
213  else
214  requestedColumns.erase (iter);
215 
216  return true;
217  }
218 
219  virtual std::size_t getSize () const override
220  {
221  return data->size();
222  }
223 
224  virtual void setData (ColumnarToolWrapperData& tool, Long64_t entry) override
225  {
226  benchmark.startTimer ();
227  branch->GetEntry (entry);
228  benchmark.stopTimer ();
229  tool.setColumn (columnName, data->size(), data->data());
230  if (!offsetName.empty())
231  {
232  offsets[1] = data->size();
233  tool.setColumn (offsetName, offsets.size(), offsets.data());
234  }
235  if (sizeColumn && sizeColumn->getSize() != data->size())
236  throw std::runtime_error ("size mismatch: " + columnName);
237  }
238  };
239 
240  template<typename T>
242  {
243  std::string columnName;
245  const PhysliteTestHelpers::IColumnData *sizeColumn = nullptr;
246  std::vector<T> outData;
247 
248  ColumnDataOutVector (const std::string& val_columnName, const T& val_defaultValue)
249  : columnName (val_columnName), defaultValue (val_defaultValue) {}
250 
251  virtual bool connect (TTree * /*tree*/, std::unordered_map<std::string,const PhysliteTestHelpers::IColumnData*>& sizeColumns, std::unordered_map<std::string,ColumnInfo>& requestedColumns) override
252  {
253  auto iter = requestedColumns.find (columnName);
254  if (iter == requestedColumns.end())
255  return false;
256 
257  const auto & offsetName = iter->second.offsetName;
258  if (offsetName.empty())
259  throw std::runtime_error ("missing offset column for: " + columnName);
260 
261  requestedColumns.erase (iter);
262 
263  if (auto sizeIter = sizeColumns.find (offsetName); sizeIter != sizeColumns.end())
264  sizeColumn = sizeIter->second;
265  else
266  throw std::runtime_error ("missing size column for: " + columnName);
267  return true;
268  }
269 
270  virtual std::size_t getSize () const override
271  {
272  return outData.size();
273  }
274 
275  virtual void setData (ColumnarToolWrapperData& tool, Long64_t /*entry*/) override
276  {
277  outData.clear ();
278  outData.resize (sizeColumn->getSize(), defaultValue);
279  tool.setColumn (columnName, outData.size(), outData.data());
280  }
281  };
282 
289  {
290  std::string columnName;
291  std::string branchBaseName;
292  std::string offsetName;
293  const PhysliteTestHelpers::IColumnData *sizeColumn = nullptr;
294  const PhysliteTestHelpers::IColumnData *targetSizeColumn = nullptr;
295  std::array<ColumnarOffsetType, 2> offsets = {0, 0};
296  std::vector<ColumnarOffsetType> dataCopy;
297  TBranch *mainBranch = nullptr;
298  TBranch *indexBranch = nullptr;
299  TLeaf *indexLeaf = nullptr;
300  Benchmark benchmarkUnpack;
301  Benchmark benchmark;
302 
303  ColumnDataSplitLink (const std::string& val_columnName, const std::string& val_branchBaseName)
304  : columnName (val_columnName), branchBaseName (val_branchBaseName), benchmarkUnpack (columnName + " (unpack)"), benchmark (columnName) {}
305 
306  virtual bool connect (TTree *tree, std::unordered_map<std::string,const PhysliteTestHelpers::IColumnData*>& sizeColumns, std::unordered_map<std::string,ColumnInfo>& requestedColumns) override
307  {
308  auto iter = requestedColumns.find (columnName);
309  if (iter == requestedColumns.end())
310  return false;
311 
312  mainBranch = tree->GetBranch (branchBaseName.c_str());
313  if (!mainBranch)
314  throw std::runtime_error ("failed to get branch: " + branchBaseName);
315  indexBranch = tree->GetBranch ((branchBaseName + ".m_persIndex").c_str());
316  if (!indexBranch)
317  throw std::runtime_error ("failed to get branch: " + (branchBaseName + ".m_persIndex"));
318  indexLeaf = indexBranch->GetLeaf ((branchBaseName + ".m_persIndex").c_str());
319 
320  offsetName = iter->second.offsetName;
321  if (offsetName.empty())
322  throw std::runtime_error ("missing offset column for: " + columnName);
323 
324  if (!iter->second.linkToName.empty())
325  {
326  auto linkIter = sizeColumns.find (iter->second.linkToName);
327  if (linkIter == sizeColumns.end())
328  throw std::runtime_error ("missing link column for: " + columnName);
329  targetSizeColumn = linkIter->second;
330  }
331 
332  if (auto sizeIter = sizeColumns.find (offsetName); sizeIter != sizeColumns.end())
333  sizeColumn = sizeIter->second;
334  else
335  sizeColumns.emplace (offsetName, this);
336 
337  requestedColumns.erase (iter);
338 
339  iter = requestedColumns.find (offsetName);
340  if (iter == requestedColumns.end())
341  offsetName.clear();
342  else
343  requestedColumns.erase (iter);
344 
345  return true;
346  }
347 
348  virtual std::size_t getSize () const override
349  {
350  return offsets[1];
351  }
352 
353  virtual void setData (ColumnarToolWrapperData& tool, Long64_t entry) override
354  {
355  benchmark.startTimer ();
356  mainBranch->GetEntry (entry);
357  indexBranch->GetEntry (entry);
358  benchmark.stopTimer ();
359 
360  benchmarkUnpack.startTimer ();
361  offsets[1] = indexLeaf->GetLen();
362  dataCopy.resize (offsets[1]);
363  for (std::size_t i = 0; i < dataCopy.size(); ++i)
364  {
365  auto value = indexLeaf->GetTypedValue<UInt_t> (i);
367  dataCopy[i] = value;
368  else
369  dataCopy[i] = invalidObjectIndex;
370  }
371  tool.setColumn (columnName, dataCopy.size(), dataCopy.data());
372  if (!offsetName.empty())
373  {
374  offsets[1] = dataCopy.size();
375  tool.setColumn (offsetName, offsets.size(), offsets.data());
376  }
377  if (sizeColumn && sizeColumn->getSize() != dataCopy.size())
378  throw std::runtime_error ("size mismatch: " + columnName);
379  if (targetSizeColumn)
380  {
381  const auto targetSize = targetSizeColumn->getSize();
382  for (auto& item : dataCopy)
383  {
384  if (item != invalidObjectIndex && item >= targetSize)
385  throw std::runtime_error ("link out of range: " + columnName + " " + std::to_string (item) + " " + std::to_string (targetSize) + " " + std::to_string (std::numeric_limits<UInt_t>::max()));
386  }
387  }
388  benchmarkUnpack.stopTimer ();
389  }
390  };
391 
392  template<typename T>
394  {
395  std::string columnName;
396  std::string branchName;
397  std::string offsetName;
398  std::vector<ColumnarOffsetType> offsets;
399  std::vector<T> columnData;
400  std::vector<std::vector<T>> *branchData = nullptr;
401  TBranch *branch = nullptr;
402  Benchmark benchmark;
403 
404  ColumnDataVectorVector (const std::string& val_columnName, const std::string& val_branchName)
405  : columnName (val_columnName), branchName (val_branchName), benchmark (columnName) {}
406 
407  virtual bool connect (TTree *tree, std::unordered_map<std::string,const PhysliteTestHelpers::IColumnData*>& /*sizeColumns*/, std::unordered_map<std::string,ColumnInfo>& requestedColumns) override
408  {
409  auto iter = requestedColumns.find (columnName);
410  if (iter == requestedColumns.end())
411  return false;
412 
413  branch = tree->GetBranch (branchName.c_str());
414  if (!branch)
415  throw std::runtime_error ("failed to get branch: " + branchName);
416  branch->SetAddress (&branchData);
417 
418  offsetName = iter->second.offsetName;
419 
420  requestedColumns.erase (iter);
421 
422  iter = requestedColumns.find (offsetName);
423  if (iter == requestedColumns.end())
424  {
425  offsetName.clear();
426  return true;
427  }
428  requestedColumns.erase (iter);
429  return true;
430  }
431 
432  virtual std::size_t getSize () const override
433  {
434  return columnData.size();
435  }
436 
437  virtual void setData (ColumnarToolWrapperData& tool, Long64_t entry) override
438  {
439  benchmark.startTimer ();
440  branch->GetEntry (entry);
441  benchmark.stopTimer ();
442  columnData.clear();
443  offsets.clear();
444  offsets.push_back (0);
445  for (auto& data : *branchData)
446  {
447  columnData.insert (columnData.end(), data.begin(), data.end());
448  offsets.push_back (columnData.size());
449  }
450  tool.setColumn (columnName, columnData.size(), columnData.data());
451  if (!offsetName.empty())
452  tool.setColumn (offsetName, offsets.size(), offsets.data());
453  }
454  };
455  }
456 
457 
460  {
461  static std::once_flag flag;
462  std::call_once (flag, [] ()
463  {
464 #ifdef XAOD_STANDALONE
465  xAOD::Init().ignore();
466 
467  // Preload the component factories: Alternately this could be
468  // loaded and executed via a dictionary, but I had some technical
469  // issue with that, and this seems to be working.
471 #else
472  POOL::Init();
473 #endif
474  });
475 
476  auto *fileName = getenv ("ASG_TEST_FILE_LITE_MC");
477  if (fileName == nullptr)
478  throw std::runtime_error ("missing ASG_TEST_FILE_LITE_MC");
479  file.reset (TFile::Open (fileName, "READ"));
480  if (!file)
481  throw std::runtime_error ("failed to open file");
482  tree = dynamic_cast<TTree*> (file->Get ("CollectionTree"));
483  if (!tree)
484  throw std::runtime_error ("failed to open tree");
485 
486  setupKnownColumns ();
487  }
488 
490 
492  {
493  static std::atomic<unsigned> index = 0;
494  return "UniquePhysliteTestTool" + std::to_string(++index);
495  }
496 
498  checkMode ()
499  {
500  return true;
501  }
502 
504  {
505  using namespace PhysliteTestHelpers;
506 
507  knownColumns.push_back (std::make_shared<ColumnDataEventCount> ());
508  knownColumns.push_back (std::make_shared<ColumnDataScalar<std::uint32_t>> ("EventInfo.RandomRunNumber", "EventInfoAuxDyn.RandomRunNumber"));
509  knownColumns.push_back (std::make_shared<ColumnDataScalar<std::uint64_t>> ("EventInfo.eventNumber", "EventInfoAuxDyn.eventNumber"));
510  knownColumns.push_back (std::make_shared<ColumnDataScalar<std::uint32_t>> ("EventInfo.eventTypeBitmask", "EventInfoAuxDyn.eventTypeBitmask"));
511  knownColumns.push_back (std::make_shared<ColumnDataScalar<std::uint32_t>> ("EventInfo.runNumber", "EventInfoAuxDyn.runNumber"));
512  // knownColumns.push_back (std::make_shared<ColumnDataScalar<float>> ("EventInfo.NPV", "EventInfoAuxDyn.NPV"));
513  knownColumns.push_back (std::make_shared<ColumnDataScalar<float>> ("EventInfo.averageInteractionsPerCrossing", "EventInfoAuxDyn.averageInteractionsPerCrossing"));
514  // knownColumns.push_back (std::make_shared<ColumnDataScalar<int>> ("EventInfo.Njet", "EventInfoAuxDyn.Njet"));
515 
516  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisElectrons.pt", "AnalysisElectronsAuxDyn.pt"));
517  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisElectrons.eta", "AnalysisElectronsAuxDyn.eta"));
518  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisElectrons.phi", "AnalysisElectronsAuxDyn.phi"));
519  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisElectrons.m", "AnalysisElectronsAuxDyn.m"));
520  knownColumns.push_back (std::make_shared<ColumnDataVector<uint16_t>> ("AnalysisElectrons.author", "AnalysisElectronsAuxDyn.author"));
521  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<ColumnarOffsetType>> ("AnalysisElectrons.caloClusterLinks.data", "AnalysisElectronsAuxDyn.caloClusterIndex"));
522 
523  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisElectrons.ptOut", 0));
524 
525  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisElectrons.sfOut", 0));
526  knownColumns.push_back (std::make_shared<ColumnDataOutVector<char>> ("AnalysisElectrons.validOut", 0));
527 
528  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("egammaClusters.calE", "egammaClustersAuxDyn.calE"));
529  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("egammaClusters.calEta", "egammaClustersAuxDyn.calEta"));
530  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("egammaClusters.calPhi", "egammaClustersAuxDyn.calPhi"));
531  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("egammaClusters.ETACALOFRAME", "egammaClustersAuxDyn.ETACALOFRAME"));
532  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("egammaClusters.PHICALOFRAME", "egammaClustersAuxDyn.PHICALOFRAME"));
533  knownColumns.push_back (std::make_shared<ColumnDataVector<uint32_t>> ("egammaClusters.samplingPattern", "egammaClustersAuxDyn.samplingPattern"));
534  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("egammaClusters.e_sampl.data", "egammaClustersAuxDyn.e_sampl"));
535  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("egammaClusters.eta_sampl.data", "egammaClustersAuxDyn.eta_sampl"));
536 
537  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisMuons.pt", "AnalysisMuonsAuxDyn.pt"));
538  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisMuons.eta", "AnalysisMuonsAuxDyn.eta"));
539  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisMuons.phi", "AnalysisMuonsAuxDyn.phi"));
540  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisMuons.charge", "AnalysisMuonsAuxDyn.charge"));
541  knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint16_t>> ("AnalysisMuons.muonType", "AnalysisMuonsAuxDyn.muonType"));
542  knownColumns.push_back (std::make_shared<ColumnDataVector<std::uint16_t>> ("AnalysisMuons.author", "AnalysisMuonsAuxDyn.author"));
543  knownColumns.push_back (std::make_shared<ColumnDataVector<std::int32_t>> ("AnalysisMuons.resolutionCategory", "AnalysisMuonsAuxDyn.resolutionCategory"));
544 
545  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.ptOut", 0));
546  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.chargeOut", 0));
547  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.InnerDetectorCharge", 0));
548  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.InnerDetectorPt", 0));
549  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.MuonSpectrometerCharge", 0));
550  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.MuonSpectrometerPt", 0));
551  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisMuons.sfOut", 0));
552  knownColumns.push_back (std::make_shared<ColumnDataOutVector<char>> ("AnalysisMuons.validOut", 0));
553 
554  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisJets.pt", "AnalysisJetsAuxDyn.pt"));
555  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisJets.eta", "AnalysisJetsAuxDyn.eta"));
556  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisJets.phi", "AnalysisJetsAuxDyn.phi"));
557  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("AnalysisJets.m", "AnalysisJetsAuxDyn.m"));
558  // knownColumns.push_back (std::make_shared<ColumnDataVector<char>> ("AnalysisJets.IsBjet", "AnalysisJetsAuxDyn.IsBjet"));
559  // knownColumns.push_back (std::make_shared<ColumnDataVector<int>> ("AnalysisJets.R10TruthLabel_R21Consolidated", "AnalysisJetsAuxDyn.R10TruthLabel_R21Consolidated"));
560 
561  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisJets.ptOut", 0));
562  knownColumns.push_back (std::make_shared<ColumnDataOutVector<float>> ("AnalysisJets.mOut", 0));
563  knownColumns.push_back (std::make_shared<ColumnDataOutVector<char>> ("AnalysisJets.selection", 0));
564 
565  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("InDetTrackParticles.d0", "InDetTrackParticlesAuxDyn.d0"));
566  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("InDetTrackParticles.phi", "InDetTrackParticlesAuxDyn.phi"));
567  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("InDetTrackParticles.qOverP", "InDetTrackParticlesAuxDyn.qOverP"));
568  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("InDetTrackParticles.theta", "InDetTrackParticlesAuxDyn.theta"));
569  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("InDetTrackParticles.z0", "InDetTrackParticlesAuxDyn.z0"));
570  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("InDetTrackParticles.definingParametersCovMatrixDiag.data", "InDetTrackParticlesAuxDyn.definingParametersCovMatrixDiag"));
571  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("InDetTrackParticles.definingParametersCovMatrixOffDiag.data", "InDetTrackParticlesAuxDyn.definingParametersCovMatrixOffDiag"));
572 
573  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("CombinedMuonTrackParticles.d0", "CombinedMuonTrackParticlesAuxDyn.d0"));
574  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("CombinedMuonTrackParticles.phi", "CombinedMuonTrackParticlesAuxDyn.phi"));
575  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("CombinedMuonTrackParticles.qOverP", "CombinedMuonTrackParticlesAuxDyn.qOverP"));
576  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("CombinedMuonTrackParticles.theta", "CombinedMuonTrackParticlesAuxDyn.theta"));
577  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("CombinedMuonTrackParticles.z0", "CombinedMuonTrackParticlesAuxDyn.z0"));
578  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("CombinedMuonTrackParticles.definingParametersCovMatrixDiag.data", "CombinedMuonTrackParticlesAuxDyn.definingParametersCovMatrixDiag"));
579  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("CombinedMuonTrackParticles.definingParametersCovMatrixOffDiag.data", "CombinedMuonTrackParticlesAuxDyn.definingParametersCovMatrixOffDiag"));
580 
581  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("ExtrapolatedMuonTrackParticles.d0", "ExtrapolatedMuonTrackParticlesAuxDyn.d0"));
582  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("ExtrapolatedMuonTrackParticles.phi", "ExtrapolatedMuonTrackParticlesAuxDyn.phi"));
583  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("ExtrapolatedMuonTrackParticles.qOverP", "ExtrapolatedMuonTrackParticlesAuxDyn.qOverP"));
584  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("ExtrapolatedMuonTrackParticles.theta", "ExtrapolatedMuonTrackParticlesAuxDyn.theta"));
585  knownColumns.push_back (std::make_shared<ColumnDataVector<float>> ("ExtrapolatedMuonTrackParticles.z0", "ExtrapolatedMuonTrackParticlesAuxDyn.z0"));
586  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("ExtrapolatedMuonTrackParticles.definingParametersCovMatrixDiag.data", "ExtrapolatedMuonTrackParticlesAuxDyn.definingParametersCovMatrixDiag"));
587  knownColumns.push_back (std::make_shared<ColumnDataVectorVector<float>> ("ExtrapolatedMuonTrackParticles.definingParametersCovMatrixOffDiag.data", "ExtrapolatedMuonTrackParticlesAuxDyn.definingParametersCovMatrixOffDiag"));
588 
589  knownColumns.push_back (std::make_shared<ColumnDataSplitLink> ("AnalysisMuons.inDetTrackParticleLink", "AnalysisMuonsAuxDyn.inDetTrackParticleLink"));
590  knownColumns.push_back (std::make_shared<ColumnDataSplitLink> ("AnalysisMuons.combinedTrackParticleLink", "AnalysisMuonsAuxDyn.combinedTrackParticleLink"));
591  knownColumns.push_back (std::make_shared<ColumnDataSplitLink> ("AnalysisMuons.extrapolatedMuonSpectrometerTrackParticleLink", "AnalysisMuonsAuxDyn.extrapolatedMuonSpectrometerTrackParticleLink"));
592  }
593 
595  {
596  std::unordered_map<std::string,ColumnInfo> requestedColumns;
597  for (auto& column : toolWrapper.getColumnInfo())
598  requestedColumns[column.name] = std::move (column);
599 
600  for (auto& name : toolWrapper.getColumnNames())
601  std::cout << "requested columns: " << name << std::endl;
602 
603  for (auto& column : knownColumns)
604  {
605  if (column->connect (tree, sizeColumns, requestedColumns))
606  usedColumns.push_back (column);
607  }
608 
609  std::set<std::string> unclaimedColumns;
610  for (auto& column : requestedColumns)
611  {
612  if (!column.second.isOptional)
613  unclaimedColumns.insert (column.first);
614  else
615  std::cout << "optional column not claimed: " << column.first << std::endl;
616  }
617  if (!unclaimedColumns.empty())
618  {
619  std::string message = "columns not claimed:";
620  for (auto& column : unclaimedColumns)
621  message += " " + column;
622  throw std::runtime_error (message);
623  }
624  }
625 
626  void ColumnarPhysLiteTest :: doCall (asg::AsgTool& tool, const std::string& name, const std::string& container, std::function<void(XAODArgs&)> callXAOD, const std::vector<std::pair<std::string,std::string>>& containerRenames, const std::string& sysName)
627  {
628  using namespace asg::msgUserCode;
629 
630  if (!sysName.empty())
631  {
632  auto *sysTool = dynamic_cast<CP::ISystematicsTool*>(&tool);
633  if (!sysTool)
634  throw std::runtime_error ("tool does not support systematics");
635  std::cout << "applying systematic variation: " << sysName << std::endl;
636  if (sysTool->applySystematicVariation (CP::SystematicSet (sysName)).isFailure())
637  throw std::runtime_error ("failed to apply systematic variation: " + sysName);
638  }
639  if constexpr (columnarAccessMode == 2)
640  {
641  auto *myTool = dynamic_cast<ColumnarTool<ColumnarModeArray>*>(&tool);
642  if (!containerRenames.empty())
643  renameContainers (*myTool, containerRenames);
644  ColumnarToolWrapper toolWrapper (myTool);
645  setupColumns (toolWrapper);
646 
647  Benchmark benchmark (name);
648 
649  const PhysliteTestHelpers::IColumnData *sizeColumn = nullptr;
650  if (!container.empty())
651  {
652  auto iter = sizeColumns.find (container);
653  if (iter == sizeColumns.end())
654  throw std::runtime_error ("missing size column: " + container);
655  sizeColumn = iter->second;
656  }
657 
658  const auto numberOfEvents = tree->GetEntries();
660  Long64_t entry = 0;
661  for (; benchmark.getTotalTime() < targetTime; ++entry)
662  {
663  ColumnarToolWrapperData columnData (&toolWrapper);
664  for (auto& column : usedColumns)
665  column->setData (columnData, entry % numberOfEvents);
666  if (sizeColumn)
667  {
668  totalSize += sizeColumn->getSize();
669  if (entry + 1 == numberOfEvents)
670  std::cout << "average size: " << float (totalSize) / numberOfEvents << std::endl;
671  }
672  benchmark.startTimer ();
673  columnData.call ();
674  benchmark.stopTimer ();
675  }
676  std::cout << "Total entries read: " << entry << std::endl;
677  } else if constexpr (columnarAccessMode == 0)
678  {
679  // this test simply doesn't work in Athena
680 #ifdef XAOD_STANDALONE
683 #else
685 #endif
687 
688 #ifdef XAOD_STANDALONE
689  Benchmark benchmarkEmptyClear (name + " empty clear");
690  Benchmark benchmarkCallClear (name + " call clear");
691  Benchmark benchmarkPrepClear (name + " prep clear");
692 #endif
693  Benchmark benchmarkCall (name + " call");
694  Benchmark benchmarkPrep (name + " prep");
695  Benchmark benchmarkGetEntry (name + " getEntry");
696 
697  const auto numberOfEvents = event.getEntries();
698  if (numberOfEvents == 0){
699  throw std::runtime_error ("ColumnarPhysLiteTest: numberOfEvents == 0");
700  }
701  Long64_t entry = 0;
702 
703  // Instead of running for a fixed number of events, we run for a
704  // fixed amount of time. That is because individual tools can
705  // vary wildly in how long they take to run, and we mostly want to
706  // make sure that we ran the tool enough to get a precise
707  // performance estimate. As a fail-safe it also bounds the time
708  // spend in i/o, which can be significant in Athena, but at a much
709  // higher level.
710  for (; benchmarkCall.getTotalTime() < targetTime && benchmarkPrep.getTotalTime() + benchmarkGetEntry.getTotalTime() < 20 * targetTime; ++entry)
711  {
712  benchmarkGetEntry.startTimer ();
713  event.getEntry (entry % numberOfEvents);
714  benchmarkGetEntry.stopTimer ();
715  XAODArgs args;
716  args.inputContainer = container;
717  args.outputContainer = container + "Copy1";
718  args.isPrepCall = true;
719  benchmarkPrep.startTimer ();
720  callXAOD (args);
721  benchmarkPrep.stopTimer ();
722  args.outputContainer = container + "Copy2";
723  args.isPrepCall = false;
724 #ifdef XAOD_STANDALONE
725  benchmarkPrepClear.startTimer ();
726  store.clear ();
727  benchmarkPrepClear.stopTimer ();
728 #endif
729  benchmarkCall.startTimer ();
730  callXAOD (args);
731  benchmarkCall.stopTimer ();
732 #ifdef XAOD_STANDALONE
733  benchmarkCallClear.startTimer ();
734  store.clear ();
735  benchmarkCallClear.stopTimer ();
736  benchmarkEmptyClear.startTimer ();
737  store.clear ();
738  benchmarkEmptyClear.stopTimer ();
739 #endif
740  }
741  std::cout << "Total entries read: " << entry << std::endl;
742  }
743  }
744 }
columnar::PhysliteTestHelpers::ColumnDataOutVector::outData
std::vector< T > outData
Definition: ColumnarPhysliteTest.cxx:246
CaloCondBlobAlgs_fillNoiseFromASCII.sysName
sysName
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:93
SGTest::store
TestStore store
Definition: TestStore.cxx:23
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
columnar::PhysliteTestHelpers::ColumnDataScalar::columnName
std::string columnName
Definition: ColumnarPhysliteTest.cxx:135
asg::AsgTool
Base class for the dual-use tool implementation classes.
Definition: AsgTool.h:47
columnar::PhysliteTestHelpers::ColumnDataVector::connect
virtual bool connect(TTree *tree, std::unordered_map< std::string, const PhysliteTestHelpers::IColumnData * > &sizeColumns, std::unordered_map< std::string, ColumnInfo > &requestedColumns) override
Definition: ColumnarPhysliteTest.cxx:188
columnar::PhysliteTestHelpers::ColumnDataVectorVector::connect
virtual bool connect(TTree *tree, std::unordered_map< std::string, const PhysliteTestHelpers::IColumnData * > &, std::unordered_map< std::string, ColumnInfo > &requestedColumns) override
Definition: ColumnarPhysliteTest.cxx:407
columnar::numberOfEventsName
const std::string numberOfEventsName
the name used for the column containing the number of events
Definition: IColumnarTool.h:38
columnar::PhysliteTestHelpers::ColumnDataScalar::connect
virtual bool connect(TTree *tree, std::unordered_map< std::string, const PhysliteTestHelpers::IColumnData * > &, std::unordered_map< std::string, ColumnInfo > &requestedColumns) override
Definition: ColumnarPhysliteTest.cxx:144
columnar::PhysliteTestHelpers::ColumnDataEventCount
Definition: ColumnarPhysliteTest.cxx:108
columnar::PhysliteTestHelpers::ColumnDataScalar::setData
virtual void setData(ColumnarToolWrapperData &tool, Long64_t entry) override
Definition: ColumnarPhysliteTest.cxx:164
columnar::PhysliteTestHelpers::ColumnDataOutVector::connect
virtual bool connect(TTree *, std::unordered_map< std::string, const PhysliteTestHelpers::IColumnData * > &sizeColumns, std::unordered_map< std::string, ColumnInfo > &requestedColumns) override
Definition: ColumnarPhysliteTest.cxx:251
python.CaloAddPedShiftConfig.args
args
Definition: CaloAddPedShiftConfig.py:45
columnar::PhysliteTestHelpers::ColumnDataVectorVector::offsetName
std::string offsetName
Definition: ColumnarPhysliteTest.cxx:397
index
Definition: index.py:1
CP::preloadComponentFactories
bool preloadComponentFactories()
Definition: ComponentFactoryPreloader.cxx:406
columnar::ColumnarPhysLiteTest::setupColumns
void setupColumns(ColumnarToolWrapper &toolWrapper)
Definition: ColumnarPhysliteTest.cxx:594
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
m_count
std::uint64_t m_count
the number of times the timer has been started
Definition: ColumnarPhysliteTest.cxx:61
tree
TChain * tree
Definition: tile_monitor.h:30
columnar::ColumnarToolWrapper::getColumnNames
std::vector< std::string > getColumnNames() const
get information on all defined columns
Definition: ColumnarToolWrapper.cxx:250
columnar::PhysliteTestHelpers::ColumnDataScalar::benchmark
Benchmark benchmark
Definition: ColumnarPhysliteTest.cxx:139
m_ticks
std::chrono::high_resolution_clock::duration m_ticks
accumulated time m_ticks
Definition: ColumnarPhysliteTest.cxx:58
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
DeMoUpdate.column
dictionary column
Definition: DeMoUpdate.py:1110
columnar::ColumnarPhysLiteTest::~ColumnarPhysLiteTest
~ColumnarPhysLiteTest()
athena.value
value
Definition: athena.py:124
columnar::ColumnarPhysLiteTest::ColumnarPhysLiteTest
ColumnarPhysLiteTest()
Definition: ColumnarPhysliteTest.cxx:459
columnar::PhysliteTestHelpers::ColumnDataVector::setData
virtual void setData(ColumnarToolWrapperData &tool, Long64_t entry) override
Definition: ColumnarPhysliteTest.cxx:224
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
m_name
std::string m_name
Definition: ColumnarPhysliteTest.cxx:53
ReweightUtils.message
message
Definition: ReweightUtils.py:15
columnar::PhysliteTestHelpers::ColumnDataVector::offsetName
std::string offsetName
Definition: ColumnarPhysliteTest.cxx:178
ColumnarPhysliteTest.h
ISystematicsTool.h
columnar::PhysliteTestHelpers::IColumnData::connect
virtual bool connect(TTree *tree, std::unordered_map< std::string, const IColumnData * > &sizeColumns, std::unordered_map< std::string, ColumnInfo > &requestedColumns)=0
POOL::Init
IAppMgrUI * Init(const char *options="POOLRootAccess/basic.opts")
Bootstraps (creates and configures) the Gaudi Application with the provided options file.
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:29
ANA_CHECK_THROW
#define ANA_CHECK_THROW(EXP)
check whether the given expression was successful, throwing an exception on failure
Definition: Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:339
columnar::PhysliteTestHelpers::ColumnDataVectorVector::branchName
std::string branchName
Definition: ColumnarPhysliteTest.cxx:396
columnar::columnarAccessMode
constexpr unsigned columnarAccessMode
Definition: ColumnarDef.h:12
columnar::ColumnInfo
a struct that contains meta-information about each column that's needed to interface the column with ...
Definition: ColumnInfo.h:35
python.handimod.now
now
Definition: handimod.py:675
POOL::TEvent::readFrom
StatusCode readFrom(TFile *file)
Definition: PhysicsAnalysis/POOLRootAccess/src/TEvent.cxx:133
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
columnar::PhysliteTestHelpers::ColumnDataVector::benchmark
Benchmark benchmark
Definition: ColumnarPhysliteTest.cxx:183
columnar::PhysliteTestHelpers::ColumnDataVectorVector
Definition: ColumnarPhysliteTest.cxx:394
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
IColumnarTool.h
lumiFormat.i
int i
Definition: lumiFormat.py:85
columnar::ColumnarPhysLiteTest::makeUniqueName
std::string makeUniqueName()
make a unique tool name to be used in unit tests
Definition: ColumnarPhysliteTest.cxx:491
columnar::PhysliteTestHelpers::ColumnDataVectorVector::offsets
std::vector< ColumnarOffsetType > offsets
Definition: ColumnarPhysliteTest.cxx:398
columnar::ColumnarToolWrapperData
a class that holds the columnar data for a single call to ColumnarToolWrapper
Definition: ColumnarToolWrapper.h:136
master.flag
bool flag
Definition: master.py:29
columnar::PhysliteTestHelpers::ColumnDataOutVector::defaultValue
T defaultValue
Definition: ColumnarPhysliteTest.cxx:244
columnar::PhysliteTestHelpers::IColumnData::getSize
virtual std::size_t getSize() const =0
file
TFile * file
Definition: tile_monitor.h:29
columnar::PhysliteTestHelpers::ColumnDataOutVector::getSize
virtual std::size_t getSize() const override
Definition: ColumnarPhysliteTest.cxx:270
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ColumnarTool.h
columnar::PhysliteTestHelpers::ColumnDataVectorVector::setData
virtual void setData(ColumnarToolWrapperData &tool, Long64_t entry) override
Definition: ColumnarPhysliteTest.cxx:437
columnar::renameContainers
void renameContainers(IColumnarTool &tool, const std::vector< std::pair< std::string, std::string >> &renames)
rename containers in the columnar tool
Definition: ColumnarToolHelpers.cxx:23
columnar::PhysliteTestHelpers::ColumnDataEventCount::getSize
virtual std::size_t getSize() const override
Definition: ColumnarPhysliteTest.cxx:121
python.LArCalib_HVCorrConfig.seconds
seconds
Definition: LArCalib_HVCorrConfig.py:98
m_start
std::chrono::time_point< std::chrono::high_resolution_clock > m_start
Definition: ColumnarPhysliteTest.cxx:55
PixelAthHitMonAlgCfg.duration
duration
Definition: PixelAthHitMonAlgCfg.py:152
columnar::ColumnarPhysLiteTest::setupKnownColumns
void setupKnownColumns()
Definition: ColumnarPhysliteTest.cxx:503
columnar::PhysliteTestHelpers::ColumnDataVector::branchName
std::string branchName
Definition: ColumnarPhysliteTest.cxx:177
columnar::PhysliteTestHelpers::ColumnDataVector
Definition: ColumnarPhysliteTest.cxx:175
ColumnarToolWrapper.h
GetAllXsec.entry
list entry
Definition: GetAllXsec.py:132
columnar::PhysliteTestHelpers::ColumnDataVectorVector::benchmark
Benchmark benchmark
Definition: ColumnarPhysliteTest.cxx:402
columnar::PhysliteTestHelpers::ColumnDataVector::ColumnDataVector
ColumnDataVector(const std::string &val_columnName, const std::string &val_branchName)
Definition: ColumnarPhysliteTest.cxx:185
POOL::TEvent
Definition: PhysicsAnalysis/POOLRootAccess/POOLRootAccess/TEvent.h:40
TEvent.h
columnar::ColumnarToolWrapper::getColumnInfo
std::vector< ColumnInfo > getColumnInfo() const
Definition: ColumnarToolWrapper.cxx:262
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
columnar::final
CM final
Definition: ColumnAccessor.h:106
columnar::ColumnarToolWrapper
a class that wraps an IColumnarTool for use in Python
Definition: ColumnarToolWrapper.h:36
columnar::ColumnarPhysLiteTest::doCall
void doCall(asg::AsgTool &tool, const std::string &name, const std::string &container, std::function< void(XAODArgs &)> callXAOD, const std::vector< std::pair< std::string, std::string >> &containerRenames, const std::string &sysName="")
Definition: ColumnarPhysliteTest.cxx:626
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
columnar::invalidObjectIndex
constexpr ColumnarOffsetType invalidObjectIndex
the value for an invalid element index
Definition: IColumnarTool.h:25
ComponentFactoryPreloader.h
item
Definition: ItemListSvc.h:43
columnar::PhysliteTestHelpers::ColumnDataEventCount::connect
virtual bool connect(TTree *, std::unordered_map< std::string, const PhysliteTestHelpers::IColumnData * > &, std::unordered_map< std::string, ColumnInfo > &requestedColumns) override
Definition: ColumnarPhysliteTest.cxx:111
columnar::PhysliteTestHelpers::ColumnDataVector::getSize
virtual std::size_t getSize() const override
Definition: ColumnarPhysliteTest.cxx:219
CP::ISystematicsTool
Interface for all CP tools supporting systematic variations.
Definition: ISystematicsTool.h:32
RTTAlgmain.branch
branch
Definition: RTTAlgmain.py:61
python.CaloAddPedShiftConfig.default
default
Definition: CaloAddPedShiftConfig.py:43
xAOD::TStore
A relatively simple transient store for objects created in analysis.
Definition: TStore.h:44
columnar::ColumnarPhysLiteTest::checkMode
static bool checkMode()
check whether we have the right mode
Definition: ColumnarPhysliteTest.cxx:498
columnar::PhysliteTestHelpers::ColumnDataOutVector::ColumnDataOutVector
ColumnDataOutVector(const std::string &val_columnName, const T &val_defaultValue)
Definition: ColumnarPhysliteTest.cxx:248
SCT_ConditionsAlgorithms::CoveritySafe::getenv
std::string getenv(const std::string &variableName)
get an environment variable
Definition: SCT_ConditionsUtilities.cxx:17
columnar::PhysliteTestHelpers::ColumnDataScalar::branchName
std::string branchName
Definition: ColumnarPhysliteTest.cxx:136
columnar
Definition: ClusterDef.h:16
columnar::PhysliteTestHelpers::ColumnDataOutVector::setData
virtual void setData(ColumnarToolWrapperData &tool, Long64_t) override
Definition: ColumnarPhysliteTest.cxx:275
columnar::PhysliteTestHelpers::IColumnData::~IColumnData
virtual ~IColumnData() noexcept=default
columnar::PhysliteTestHelpers::ColumnDataScalar::ColumnDataScalar
ColumnDataScalar(const std::string &val_columnName, const std::string &val_branchName)
Definition: ColumnarPhysliteTest.cxx:141
columnar::PhysliteTestHelpers::ColumnDataEventCount::setData
virtual void setData(ColumnarToolWrapperData &tool, Long64_t) override
Definition: ColumnarPhysliteTest.cxx:126
columnar::ColumnarTool
the base class for all columnar components
Definition: ColumnAccessorDataArray.h:17
columnar::PhysliteTestHelpers::ColumnDataScalar
Definition: ColumnarPhysliteTest.cxx:134
columnar::PhysliteTestHelpers::ColumnDataOutVector::columnName
std::string columnName
Definition: ColumnarPhysliteTest.cxx:243
ColumnarToolHelpers.h
columnar::PhysliteTestHelpers::ColumnDataScalar::getSize
virtual std::size_t getSize() const override
Definition: ColumnarPhysliteTest.cxx:159
python.copyTCTOutput.totalSize
totalSize
Definition: copyTCTOutput.py:93
columnar::PhysliteTestHelpers::ColumnDataVectorVector::getSize
virtual std::size_t getSize() const override
Definition: ColumnarPhysliteTest.cxx:432
columnar::PhysliteTestHelpers::ColumnDataVectorVector::columnName
std::string columnName
Definition: ColumnarPhysliteTest.cxx:395
ColumnInfo.h
columnar::PhysliteTestHelpers::ColumnDataVectorVector::columnData
std::vector< T > columnData
Definition: ColumnarPhysliteTest.cxx:399
columnar::ColumnarPhysLiteTest::XAODArgs
the arguments for the function calling in xAOD mode
Definition: ColumnarPhysliteTest.h:55
UnitTest.h
columnar::PhysliteTestHelpers::ColumnDataOutVector
Definition: ColumnarPhysliteTest.cxx:242
columnar::PhysliteTestHelpers::IColumnData::setData
virtual void setData(ColumnarToolWrapperData &tool, Long64_t entry)=0
xAOD::TEvent
Tool for accessing xAOD files outside of Athena.
Definition: Control/xAODRootAccess/xAODRootAccess/TEvent.h:85
columnar::PhysliteTestHelpers::IColumnData
Definition: ColumnarPhysliteTest.cxx:95
columnar::ColumnarToolWrapperData::call
void call()
call the tool
Definition: ColumnarToolWrapper.cxx:198
columnar::PhysliteTestHelpers::ColumnDataVector::columnName
std::string columnName
Definition: ColumnarPhysliteTest.cxx:176
columnar::PhysliteTestHelpers::ColumnDataVectorVector::ColumnDataVectorVector
ColumnDataVectorVector(const std::string &val_columnName, const std::string &val_branchName)
Definition: ColumnarPhysliteTest.cxx:404
xAOD::Init
StatusCode Init(const char *appname)
Function initialising ROOT/PyROOT for using the ATLAS EDM.
Definition: Init.cxx:31
python.LArMinBiasAlgConfig.float
float
Definition: LArMinBiasAlgConfig.py:65