Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
EventFormatMetaDataTool.cxx
Go to the documentation of this file.
1 // Dear emacs, this is -*- c++ -*-
2 /* Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration */
3 
4 
5 // System include(s):
6 #include <algorithm>
7 #include <stdexcept>
8 #include <utility>
9 #include <vector>
10 
11 // Gaudi/Athena include(s):
13 
14 // Local include(s):
16 
17 namespace xAODMaker {
18 
19 
21  const std::string& name,
22  const IInterface* parent):
23  base_class(type, name, parent) { }
24 
27  // Greet the user:
28  ATH_MSG_VERBOSE("Initialising");
31  if (!m_keys.empty()) {
32  ATH_MSG_VERBOSE("Asked to copy EventFormat with keys:");
33  for (const std::string& key : m_keys) {
34  ATH_MSG_VERBOSE(" - " << key);
35  }
36  }
37 
38  // Connect to the metadata stores:
39  ATH_CHECK(m_inputMetaStore.retrieve());
40  ATH_CHECK(m_outputMetaStore.retrieve());
41 
42  // Return gracefully:
43  return StatusCode::SUCCESS;
44  }
45 
48  // lock the tool, so metaDataStop will wait for write to finish
49  std::lock_guard< std::mutex > guard(m_outputMutex);
50 
51  // Create object to hold information from the new file
52  auto format = std::make_unique< xAOD::EventFormat >();
53 
55 
56  return StatusCode::SUCCESS;
57  }
58 
61  // wait for threads currently writing to finish
62  std::lock_guard< std::mutex > guard(m_outputMutex);
63 
64  return StatusCode::SUCCESS;
65  }
66 
69 
70  std::vector< std::string > keys = m_keys;
71  if (keys.empty()) {
73  } else {
74  // remove keys not in the InputMetaDataStore
75  keys.erase(
76  std::remove_if(
77  keys.begin(), keys.end(),
78  [this](std::string& key) {
79  return !m_inputMetaStore->contains<xAOD::EventFormat>(key);
80  }),
81  keys.end());
82  }
83 
84  // If the input file doesn't have any event format metadata,
85  // then finish right away:
86  if (keys.empty()) return StatusCode::SUCCESS;
87 
88  // Retrieve the input container:
89  for (const std::string& key : keys) {
90  std::list<SG::ObjectWithVersion<xAOD::EventFormat> > allVersions;
91  if (!m_inputMetaStore->retrieveAllVersions(allVersions, key)
92  .isSuccess()) {
93  ATH_MSG_DEBUG("Failed to retrieve \""
94  << key << "\" from InputMetaDataStore");
95  continue; // try next key
96  }
97 
98  // get output object
99  auto output = m_outputMetaStore->tryRetrieve<xAOD::EventFormat>(key);
100  if (!output) {
101  auto ef = std::make_unique<xAOD::EventFormat>();
102  output = ef.get();
103  if (!m_outputMetaStore->record(std::move(ef), key).isSuccess()) {
104  ATH_MSG_DEBUG("Failed to create output object \""
105  << key << "\" in MetaDataSvc");
106  continue;
107  }
108  }
109 
110  ATH_MSG_VERBOSE("Merging all versions of " << key);
111  for (auto& version : allVersions) {
112  const auto* input = version.dataObject.cptr();
113  // Merge the new object into the output one:
114  for (const auto& pair : *input) {
115  if (!output->exists(pair.second.hash())) {
116  output->add(pair.second);
117  }
118  }
119  }
120  }
121 
122  // Return gracefully:
123  return StatusCode::SUCCESS;
124  }
125 
126 } // namespace xAODMaker
xAODMaker::EventFormatMetaDataTool::EventFormatMetaDataTool
EventFormatMetaDataTool(const std::string &type, const std::string &name, const IInterface *parent)
Regular AlgTool constructor.
Definition: EventFormatMetaDataTool.cxx:20
vtune_athena.format
format
Definition: vtune_athena.py:14
EventFormatMetaDataTool.h
xAODMaker::EventFormatMetaDataTool::m_keys
Gaudi::Property< std::vector< std::string > > m_keys
(optional) list of keys to copy, all if empty, default: empty
Definition: EventFormatMetaDataTool.h:77
xAODMaker::EventFormatMetaDataTool::m_outputMutex
std::mutex m_outputMutex
MetaDataStop need to wait for ongoing writes.
Definition: EventFormatMetaDataTool.h:81
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAODMaker
Definition: StoreGateSvc.h:72
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAODMaker::EventFormatMetaDataTool::m_outputMetaStore
ServiceHandle< IAthMetaDataSvc > m_outputMetaStore
Connection to the output metadata store.
Definition: EventFormatMetaDataTool.h:73
xAODMaker::EventFormatMetaDataTool::metaDataStop
virtual StatusCode metaDataStop() override
Wait for metadata write operations to finish, then return SUCCESS.
Definition: EventFormatMetaDataTool.cxx:60
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAODMaker::EventFormatMetaDataTool::m_inputMetaStore
ServiceHandle< ::StoreGateSvc > m_inputMetaStore
Connection to the input metadata store.
Definition: EventFormatMetaDataTool.h:69
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::EventFormat_v1
Event format metadata for xAOD files.
Definition: EventFormat_v1.h:38
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
errorcheck.h
Helpers for checking error return status codes and reporting errors.
xAODMaker::EventFormatMetaDataTool::collectMetaData
StatusCode collectMetaData()
Function collecting the event format metadata from the input file.
Definition: EventFormatMetaDataTool.cxx:68
xAODMaker::EventFormatMetaDataTool::beginInputFile
virtual StatusCode beginInputFile()
Function called when a new input file is opened.
Definition: EventFormatMetaDataTool.cxx:47
get_generator_info.version
version
Definition: get_generator_info.py:33
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
xAODMaker::EventFormatMetaDataTool::initialize
virtual StatusCode initialize() override
Function initialising the tool.
Definition: EventFormatMetaDataTool.cxx:26
LheEventFiller_Common.ef
ef
Definition: SFGen_i/share/common/LheEventFiller_Common.py:7
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37