ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
MetaDataAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 #include "MetaDataAlg.h"
5 
10 #include <StoreGate/ReadHandle.h>
13 
14 
15 namespace {
16  std::string ReplaceExpInString(std::string str, const std::string &exp, const std::string &rep) {
17  size_t ExpPos = str.find(exp);
18  if (ExpPos == std::string::npos) return str;
19  str.replace(ExpPos,exp.size(),rep);
20  if (str.find(exp) != std::string::npos) return ReplaceExpInString(str, exp, rep);
21  return str;
22  }
23 
24 }
25 namespace MuonVal{
26 
28  ATH_MSG_INFO("Initializing " << name() << "...");
30  m_MetaDataTree = std::make_unique<MuonTesterTree>("MetaDataTree", m_stream);
31  ATH_CHECK(m_MetaDataTree->init(this));
32 
33  if (!m_prwTool.empty()) {
34  ATH_CHECK(m_prwTool.retrieve());
35  m_hasPrwTool = true;
36  }
37  if (m_storeLHE && !m_isData) {
38  std::map<std::string, int> weight_names{};
39  AthAnalysisHelper::retrieveMetadata("/Generation/Parameters", "HepMCWeightNames", weight_names).isSuccess();
40  EventInfoBranch::setNumLHE(weight_names.size());
41  }
42  return StatusCode::SUCCESS;
43 }
44 
46  if (m_sim_meta.empty() == m_run_meta.empty()) {
47  ATH_MSG_FATAL("Found run and simulation meta data");
48  return StatusCode::FAILURE;
49  }
51  m_MetaDataTree->newScalar<bool>("isData", m_isData);
52  m_MetaDataTree->newScalar<bool>("isDerivedAOD", m_isDerivedAOD);
55  ATH_CHECK(m_MetaDataTree->write());
56  m_MetaDataTree.reset();
57 
58  return StatusCode::SUCCESS;
59 }
60 
62  const EventContext& ctx = Gaudi::Hive::currentContext();
63  ATH_MSG_DEBUG("Executing " << name() << "...");
64  setFilterPassed(true);
65 
67  if (!evtInfo.isValid()) {
68  ATH_MSG_FATAL("Failed to retrieve " << m_infoKey.fullKey());
69  return StatusCode::FAILURE;
70  }
71 
72  bool isData = !evtInfo->eventType(xAOD::EventInfo::IS_SIMULATION);
73 
74  int mc_channel = !isData ? evtInfo->mcChannelNumber() : 0.;
75  unsigned int run_number = evtInfo->runNumber();
76  if (isData) {
77  std::string trigger_stream{};
78  ATH_CHECK(AthAnalysisHelper::retrieveMetadata("/TagInfo", "triggerStreamOfFile", trigger_stream));
79 
81  std::find_if(m_run_meta.begin(), m_run_meta.end(), [&run_number, &trigger_stream](const RunMetaData& meta) {
82  return meta.run_number == run_number && meta.trigger_stream == trigger_stream;
83  });
84  if (itr == m_run_meta.end()) {
85  ATH_MSG_WARNING("No meta data information is available for " << run_number << ". Please check on which stream you're running");
86  m_run_meta.emplace_back(run_number, trigger_stream);
87  itr = m_run_meta.end() - 1;
88  }
89  itr->proc_events += 1;
90  itr->processed_blocks.insert(evtInfo->lumiBlock());
91  if (!itr->has_book_keeper) {
92  itr->total_lumi_blocks.insert(evtInfo->lumiBlock());
93  itr->tot_events += 1;
94  }
95  } else {
96  const unsigned int num_lhe = !m_storeLHE ? 1 : evtInfo->mcEventWeights().size();
97  for (unsigned int lhe_var = 0; lhe_var < num_lhe; ++lhe_var) {
99  std::find_if(m_sim_meta.begin(), m_sim_meta.end(), [&mc_channel, &run_number, &lhe_var](const SimMetaData& meta) {
100  return meta.mc_channel == mc_channel && meta.prw_channel == run_number && meta.variation_number == lhe_var;
101  });
102  if (itr == m_sim_meta.end()) {
103  ATH_MSG_WARNING("Failed to retrieve a proper meta data for dsid: " << mc_channel << " period: " << run_number
104  << " lhe weight: " << lhe_var);
105  m_sim_meta.emplace_back(mc_channel, run_number);
106  itr = m_sim_meta.end() - 1;
107  itr->weight_name = "IncompleteMetaData";
108  itr->variation_number = lhe_var;
109  }
110  itr->proc_events += 1;
111  if (itr->has_book_keeper) continue;
112  if (!itr->warned) {
113  ATH_MSG_WARNING("Cut book keeper has not been loaded for sample DSID: "
114  << itr->mc_channel << " period: " << itr->prw_channel << " lhe variation: " << lhe_var);
115  itr->warned = true;
116  }
117  itr->tot_events += 1;
118  const double weight = evtInfo->mcEventWeight(lhe_var);
119  itr->sum_w += weight;
120  itr->sum_w_squared += weight * weight;
121  }
122  }
123 
124  return StatusCode::SUCCESS;
125 }
126 const xAOD::CutBookkeeper* MetaDataAlg::RetrieveCutBookKeeper(const std::string& Stream, const std::string& cbk_name) const {
127  const xAOD::CutBookkeeper* all = nullptr;
128  if (inputMetaStore()->contains<xAOD::CutBookkeeperContainer>("CutBookkeepers")) {
129  const xAOD::CutBookkeeperContainer* bks = nullptr;
130  if (!inputMetaStore()->retrieve(bks, "CutBookkeepers").isSuccess()) {
131  ATH_MSG_WARNING("Could not retrieve the CutBookKeeperContainer. Although it should be there");
132  return all;
133  }
134  int maxCycle = -1; // need to find the max cycle where input stream is StreamAOD and the name is AllExecutedEvents
135  for (const xAOD::CutBookkeeper* cbk : *bks) {
136  ATH_MSG_INFO("Check cutbook keeper "<<cbk->inputStream()<<" name: "<<cbk->name()<<" cycle: "<<cbk->cycle());
137  if (cbk->inputStream() == Stream && cbk->name() == cbk_name && cbk->cycle() > maxCycle) {
138  maxCycle = cbk->cycle();
139  all = cbk;
140  }
141  }
142  } else ATH_MSG_WARNING("The CutBookkeepers are not present in the file ");
143  if (!all) ATH_MSG_DEBUG("Failed to retrieve cut book keeper for Stream: "<<Stream<<" cbk_name: "<<cbk_name);
144  return all;
145 }
147  //
148  // This method is called at the start of each input file, even if
149  // the input file contains no events. Accumulate metadata information here
150  //
151  const EventStreamInfo* esi = nullptr;
153  if (esi->getEventTypes().size() > 1) { ATH_MSG_WARNING("There seem to be more event types than one"); }
154  if (esi->getEventTypes().size() == 0) {
155  ATH_MSG_FATAL("The EventTypes() container of the EventStreamInfo is empty! Something wrong with the input file?");
156  return StatusCode::FAILURE;
157  }
158 
159  bool isData = !esi->getEventTypes().begin()->test(EventType::IS_SIMULATION);
160 
161  const xAOD::FileMetaData* fmd = nullptr;
162  if (inputMetaStore()->contains<xAOD::FileMetaData>("FileMetaData")) ATH_CHECK(inputMetaStore()->retrieve(fmd, "FileMetaData"));
163  if (!fmd) {
164  ATH_MSG_WARNING("FileMetaData not found in input file, setting m_isDerivedAOD=false.");
165  // m_isDerivedAOD = false;
166  } else {
167  std::string dataType{};
169  ATH_MSG_WARNING("MetaDataType::dataType not found in xAOD::FileMetaData, setting m_isDerivedAOD=false.");
170  // m_isDerivedAOD = false;
171  }
172  ATH_MSG_DEBUG("Data type is " << dataType);
173  }
174  const xAOD::CutBookkeeper* all{nullptr};
175  std::string cbk_stream{};
176  using namespace std::literals;
177  for (const std::string & trial: {"StreamAOD"s, "StreamESD"s, "unknownStream"s }) {
178  all = RetrieveCutBookKeeper(trial);
179  cbk_stream = trial;
180  if (all) break;
181  }
182  const bool contains_keeper = all != nullptr;
183  if (!contains_keeper) {
184  ATH_MSG_WARNING("No Common CutBook keeper has been found");
185  }
187  if (isData) {
188  std::string trigger_stream{};
189  ATH_CHECK(AthAnalysisHelper::retrieveMetadata("/TagInfo", "triggerStreamOfFile", trigger_stream));
190  unsigned int run_number = (*esi->getRunNumbers().begin());
192  std::find_if(m_run_meta.begin(), m_run_meta.end(), [&run_number, &trigger_stream](const RunMetaData& meta) {
193  return meta.run_number == run_number && trigger_stream == meta.trigger_stream;
194  });
196  if (itr == m_run_meta.end()) {
197  m_run_meta.emplace_back(run_number, trigger_stream);
198  itr = m_run_meta.end() - 1;
199  }
200 
202  for (const auto& Lumi : esi->getLumiBlockNumbers()) { itr->total_lumi_blocks.insert(Lumi); }
203  itr->has_book_keeper = contains_keeper;
204  if (contains_keeper) itr->tot_events += all->nAcceptedEvents();
205  } else {
206  int dsid = esi->getEventTypes().begin()->mc_channel_number();
207  unsigned int run = (*esi->getRunNumbers().begin());
208  ATH_MSG_DEBUG("DSID: "<<dsid<<" prw number: "<<run);
210  std::vector<std::string> weight_names{};
211  if (m_storeLHE) {
212  std::map<std::string, int> weight_map{};
213  AthAnalysisHelper::retrieveMetadata("/Generation/Parameters", "HepMCWeightNames", weight_map).isSuccess();
214  weight_names.resize(weight_map.size());
215  for (const auto& w_pair : weight_map) { weight_names[w_pair.second] = w_pair.first; }
216  if (weight_names.empty()) {
217  ATH_MSG_WARNING("No weight names extracted from the meta data ");
218  weight_names.push_back("");
219  }
220  } else
221  weight_names.push_back("");
222 
223  for (unsigned int lhe_var = 0; lhe_var < weight_names.size(); ++lhe_var) {
224  const std::string& lhe_weight = weight_names[lhe_var];
226  std::find_if(m_sim_meta.begin(), m_sim_meta.end(), [&dsid, &run, &lhe_var](const SimMetaData& meta) {
227  return meta.mc_channel == dsid && meta.prw_channel == run && meta.variation_number == lhe_var;
228  });
229  if (itr == m_sim_meta.end()) {
230  m_sim_meta.emplace_back(dsid, run);
231  itr = m_sim_meta.end() - 1;
232  itr->weight_name = weight_names[lhe_var];
233  itr->variation_number = lhe_var;
234  if (m_hasPrwTool) itr->prw_lumi = m_prwTool->expert()->GetIntegratedLumi(run, 0, -1);
235  }
236 
237  const xAOD::CutBookkeeper* mc_keeper = lhe_var == 0 ? all : nullptr;
238  if (lhe_var) {
239  std::vector<std::string> cb_names;
240  cb_names.emplace_back(lhe_weight);
241  cb_names.emplace_back("LHE3Weight_" + ReplaceExpInString(lhe_weight, ".", ""));
242  cb_names.push_back(ReplaceExpInString(cb_names.back(), " ", ""));
243  cb_names.emplace_back("AllExecutedEvents_NonNominalMCWeight_" + std::to_string(lhe_var));
244  for (const std::string& cb_name : cb_names) {
245  mc_keeper = RetrieveCutBookKeeper(cbk_stream, cb_name);
246  if (mc_keeper) {
247  ATH_MSG_DEBUG("Found LHE cut book keeper " << cb_name);
248  break;
249  }
250  }
251  }
252 
253  itr->has_book_keeper = mc_keeper != nullptr;
254 
255  if (itr->has_book_keeper) {
256  itr->tot_events += mc_keeper->nAcceptedEvents();
257  itr->sum_w += mc_keeper->sumOfEventWeights();
258  itr->sum_w_squared += mc_keeper->sumOfEventWeightsSquared();
259  }
260  }
261  }
262  std::sort(m_sim_meta.begin(), m_sim_meta.end());
263  std::sort(m_run_meta.begin(), m_run_meta.end());
264  if (m_sim_meta.empty() == m_run_meta.empty()) {
265  ATH_MSG_FATAL("Found run and simulation meta data");
266  return StatusCode::FAILURE;
267  }
268  if (m_run_meta.empty() == m_isData) {
269  ATH_MSG_FATAL("Metadata is inconsistent with the configuration");
270  return StatusCode::FAILURE;
271  }
272  return StatusCode::SUCCESS;
273 }
275 
276  ScalarBranch<Long64_t>& tot_ev {m_MetaDataTree->newScalar<Long64_t>("TotalEvents")};
277  ScalarBranch<Long64_t>& proc_ev {m_MetaDataTree->newScalar<Long64_t>("ProcessedEvents")};
278  ScalarBranch<unsigned int>& run_number{m_MetaDataTree->newScalar<unsigned int>("runNumber")};
279 
280  SetBranch<unsigned int>& tot_lumi{m_MetaDataTree->newSet<unsigned int>("TotalLumiBlocks")};
281  SetBranch<unsigned int>& proc_lumi{m_MetaDataTree->newSet<unsigned int>("ProcessedLumiBlocks")};
282  ScalarBranch<std::string>& stream_name{m_MetaDataTree->newScalar<std::string>("triggerStream")};
283  ATH_CHECK(m_MetaDataTree->init(this));
284  for (const RunMetaData& meta : m_run_meta) {
285  run_number = meta.run_number;
286  tot_ev = meta.tot_events;
287  proc_ev = meta.proc_events;
288  stream_name = meta.trigger_stream;
289  tot_lumi = meta.total_lumi_blocks;
290  proc_lumi = meta.processed_blocks;
291  m_MetaDataTree->fill(Gaudi::Hive::currentContext());
292  }
293  return StatusCode::SUCCESS;
294 }
296  m_MetaDataTree->newScalar<bool>("isAF2", m_isAF2);
297  ScalarBranch<Long64_t>& tot_ev {m_MetaDataTree->newScalar<Long64_t>("TotalEvents")};
298  ScalarBranch<Long64_t>& proc_ev {m_MetaDataTree->newScalar<Long64_t>("ProcessedEvents")};
299  ScalarBranch<unsigned int>& run_number{m_MetaDataTree->newScalar<unsigned int>("runNumber")};
300 
301  ScalarBranch<double>& sum_w{m_MetaDataTree->newScalar<double>("TotalSumW")};
302  ScalarBranch<double>& sum_w2{m_MetaDataTree->newScalar<double>("TotalSumW2")};
303  ScalarBranch<double>& prw_lumi{m_MetaDataTree->newScalar<double>("prwLuminosity")};
304 
305  ScalarBranch<int>& mc_dsid{m_MetaDataTree->newScalar<int>("mcChannelNumber")};
306  ScalarBranch<unsigned int>& lhe_var{m_MetaDataTree->newScalar<unsigned int>("LheId")};
307  ScalarBranch<std::string>& stream_name{m_MetaDataTree->newScalar<std::string>("LheWeightName")};
308 
309  if (!m_hasPrwTool) m_MetaDataTree->disableBranch(prw_lumi.name());
310  ATH_CHECK(m_MetaDataTree->init(this));
311 
312  for (const SimMetaData& meta : m_sim_meta) {
313  run_number = meta.prw_channel;
314  mc_dsid = meta.mc_channel;
315  lhe_var = meta.variation_number;
316 
317  prw_lumi = meta.prw_lumi;
318  sum_w = meta.sum_w;
319  sum_w2 = meta.sum_w_squared;
320  stream_name = meta.weight_name;
321 
322  tot_ev = meta.tot_events;
323  proc_ev = meta.proc_events;
324  m_MetaDataTree->fill(Gaudi::Hive::currentContext());
325  }
326  return StatusCode::SUCCESS;
327 }
328 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
plotting.plot_kinematics.run_number
run_number
Definition: plot_kinematics.py:29
MuonVal::EventInfoBranch::setNumLHE
static void setNumLHE(unsigned int numLHE) ATLAS_THREAD_SAFE
Specify the number of LHE variations that are available in the sample.
Definition: EventInfoBranch.cxx:15
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
EventStreamInfo::getRunNumbers
const std::set< unsigned int > & getRunNumbers() const
Definition: EventStreamInfo.cxx:23
MuonVal::MetaDataAlg::initialize
StatusCode initialize() override
Definition: MetaDataAlg.cxx:27
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
MuonVal::MetaDataAlg::m_run_meta
std::vector< RunMetaData > m_run_meta
Definition: MetaDataAlg.h:102
make_hlt_rep.rep
rep
Definition: make_hlt_rep.py:32
xAOD::CutBookkeeper_v1
Description of the class that is used to keep track of event counts.
Definition: CutBookkeeper_v1.h:29
sct_calib_tf.Stream
string Stream
Definition: sct_calib_tf.py:31
MuonVal::MetaDataAlg::RetrieveCutBookKeeper
const xAOD::CutBookkeeper * RetrieveCutBookKeeper(const std::string &stream, const std::string &cbk_name="AllExecutedEvents") const
Definition: MetaDataAlg.cxx:126
downloadSingle.dataType
string dataType
Definition: downloadSingle.py:18
EventStreamInfo::getEventTypes
const std::set< EventType > & getEventTypes() const
Definition: EventStreamInfo.cxx:47
xAOD::CutBookkeeper_v1::sumOfEventWeightsSquared
double sumOfEventWeightsSquared() const
Get the sum-of-(event-weights-squared) that this CutBookkeeper has seen.
Definition: CutBookkeeper_v1.cxx:327
EventInfoBranch.h
AthAnalysisAlgorithm::inputMetaStore
const ServiceHandle< StoreGateSvc > & inputMetaStore() const
Const accessor for the input metadata store.
Definition: AthAnalysisAlgorithm.h:49
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition: EventInfo_v1.h:151
EventStreamInfo.h
This file contains the class definition for the EventStreamInfo class.
EventStreamInfo::getLumiBlockNumbers
const std::set< unsigned int > & getLumiBlockNumbers() const
Definition: EventStreamInfo.cxx:29
xAOD::FileMetaData_v1::value
bool value(MetaDataType type, std::string &val) const
Get a pre-defined string value out of the object.
Definition: FileMetaData_v1.cxx:195
MuonVal::MetaDataAlg::m_storeLHE
Gaudi::Property< bool > m_storeLHE
Store LHE weights.
Definition: MetaDataAlg.h:38
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:189
TPileupReweighting.h
MetaDataAlg.h
MuonVal::MetaDataAlg::m_hasPrwTool
bool m_hasPrwTool
Definition: MetaDataAlg.h:41
MuonVal::MetaDataAlg::m_isAF2
Gaudi::Property< bool > m_isAF2
On AFII simulation.
Definition: MetaDataAlg.h:36
MuonVal::SetBranch
Definition: SetBranch.h:12
MuonVal::MetaDataAlg::m_sim_meta
std::vector< SimMetaData > m_sim_meta
Definition: MetaDataAlg.h:101
Generate_dsid_ranseed.dsid
dsid
Definition: Generate_dsid_ranseed.py:6
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
python.CaloAddPedShiftConfig.str
str
Definition: CaloAddPedShiftConfig.py:42
CutBookkeeperContainer.h
MuonVal::MetaDataAlg::m_infoKey
SG::ReadHandleKey< xAOD::EventInfo > m_infoKey
Definition: MetaDataAlg.h:27
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
MuonVal::MetaDataAlg::beginInputFile
StatusCode beginInputFile() override
Function called when a new input file is opened user can read input metadata from inputMetaStore()
Definition: MetaDataAlg.cxx:146
xAOD::CutBookkeeperContainer_v1
Container that holds the Container of all CutBookkeepers.
Definition: CutBookkeeperContainer_v1.h:27
run
Definition: run.py:1
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
xAOD::FileMetaData_v1
Class holding file-level metadata about an xAOD file.
Definition: FileMetaData_v1.h:34
EventType::IS_SIMULATION
static const EventTypeCode IS_SIMULATION
true: IS_SIMULATION, false: IS_DATA
Definition: EventType.h:151
MuonVal::MetaDataAlg::m_isDerivedAOD
Gaudi::Property< bool > m_isDerivedAOD
Is derived DAOD property.
Definition: MetaDataAlg.h:34
MuonVal
Class to store array like branches into the n-tuples.
Definition: HitValAlg.cxx:19
xAOD::CutBookkeeper_v1::nAcceptedEvents
uint64_t nAcceptedEvents() const
Get the number of accepted events that this CutBookkeeper has seen.
Definition: CutBookkeeper_v1.cxx:291
MuonVal::ScalarBranch< Long64_t >
MuonVal::MetaDataAlg::m_MetaDataTree
std::unique_ptr< MuonTesterTree > m_MetaDataTree
Meta data tree object.
Definition: MetaDataAlg.h:43
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
xAOD::CutBookkeeper_v1::sumOfEventWeights
double sumOfEventWeights() const
Get the sum-of-event-weights that this CutBookkeeper has seen.
Definition: CutBookkeeper_v1.cxx:309
MuonVal::MetaDataAlg::finalize
StatusCode finalize() override
Definition: MetaDataAlg.cxx:45
AthAnalysisHelper.h
CP::ReplaceExpInString
std::string ReplaceExpInString(std::string str, const std::string &exp, const std::string &rep)
Replaces all expressions an string by something else.
Definition: PhysicsAnalysis/MuonID/MuonIDAnalysis/MuonEfficiencyCorrections/Root/UtilFunctions.cxx:24
FileMetaData.h
MuonVal::MetaDataAlg::m_isData
Gaudi::Property< bool > m_isData
Definition: MetaDataAlg.h:32
EventStreamInfo
This class provides the summary information stored for data written as a Event Stream.
Definition: EventStreamInfo.h:28
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
MuonVal::MetaDataAlg::execute
StatusCode execute() override
Definition: MetaDataAlg.cxx:61
MuonVal::MetaDataAlg::SimMetaData
Definition: MetaDataAlg.h:66
MuonVal::MetaDataAlg::m_stream
Gaudi::Property< std::string > m_stream
Output file stream.
Definition: MetaDataAlg.h:29
MuonVal::MetaDataAlg::m_prwTool
ToolHandle< CP::IPileupReweightingTool > m_prwTool
Definition: MetaDataAlg.h:40
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:146
str
Definition: BTagTrackIpAccessor.cxx:11
ReadHandle.h
Handle class for reading from StoreGate.
MuonVal::MetaDataAlg::RunMetaData
Helper structs to cache the meta-data for simulation and recorded data.
Definition: MetaDataAlg.h:47
Cut::all
@ all
Definition: SUSYToolsAlg.cxx:67
MuonVal::MetaDataAlg::fillSimulationTree
StatusCode fillSimulationTree()
Definition: MetaDataAlg.cxx:295
MuonVal::MetaDataAlg::fillDataTree
StatusCode fillDataTree()
Definition: MetaDataAlg.cxx:274
AthAnalysisHelper::retrieveMetadata
static std::string retrieveMetadata(const std::string &folder, const std::string &key, const ServiceHandle< StoreGateSvc > &inputMetaStore)
method that always returns as a string you can use from, e.g, pyROOT with evt = ROOT....
Definition: AthAnalysisHelper.h:254