ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
D3PDTools
SampleHandler
Root
fetch.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
//
6
// includes
7
//
8
9
#include <
SampleHandler/fetch.h
>
10
11
#include <sstream>
12
#include <mutex>
13
#include <stdexcept>
14
#include <RVersion.h>
15
#include <TPython.h>
16
#include <TString.h>
17
#include <TSystem.h>
18
#include <
SampleHandler/MetaDataQuery.h
>
19
#include <
SampleHandler/MetaDataSample.h
>
20
#include <
SampleHandler/MetaObject.h
>
21
#include <
RootCoreUtils/Assert.h
>
22
#include <
SampleHandler/MessageCheck.h
>
23
#include <
SampleHandler/MetaFields.h
>
24
#include <
SampleHandler/Sample.h
>
25
#include <
SampleHandler/SampleHandler.h
>
26
27
//
28
// method implementations
29
//
30
31
namespace
32
{
35
std::string pyQuote (
const
std::string& name)
36
{
37
std::string
result
=
"'"
;
38
for
(
char
c : name)
39
{
40
if
(c ==
'\\'
|| c ==
'\''
)
41
result
+=
'\\'
;
42
result
+=
c
;
43
}
44
result
+=
"'"
;
45
return
result
;
46
}
47
}
48
49
namespace
SH
50
{
51
void
fetchMetaData
(
MetaDataQuery
&
query
)
52
{
53
static
std::once_flag loaded;
54
auto
do_load = []() {
55
// rationale: the helper module is installed via
56
// atlas_install_python_modules and is importable through
57
// PYTHONPATH, so import it by name rather than loading it from
58
// the dead RootCore $ROOTCOREBIN path.
59
if
(!TPython::Exec (
"import SampleHandler.SampleHandler_QueryAMI"
))
60
throw
std::runtime_error (
"failed to import python module SampleHandler.SampleHandler_QueryAMI"
);
61
};
62
std::call_once (loaded, do_load);
63
64
std::ostringstream command;
65
#if ROOT_VERSION_CODE >= ROOT_VERSION(6,33,01)
66
command <<
"_anyresult = "
;
67
#endif
68
command <<
"SampleHandler.SampleHandler_QueryAMI.SampleHandler_QueryAmi(["
;
69
for
(std::size_t iter = 0, end =
query
.samples.size(); iter != end; ++ iter)
70
{
71
if
(iter != 0)
72
command <<
", "
;
73
command << pyQuote (
query
.samples[iter].name);
74
}
75
command <<
"])"
;
76
#if ROOT_VERSION_CODE >= ROOT_VERSION(6,33,01)
77
std::any result;
78
if
(!TPython::Exec (command.str().c_str(), &result))
79
throw
std::runtime_error (
"failed to execute AMI metadata query"
);
80
query
= std::any_cast<MetaDataQuery>(result);
81
#else
82
MetaDataQuery
* myquery =
static_cast<
MetaDataQuery
*
>
83
((
void
*) TPython::Eval (command.str().c_str()));
84
if
(myquery ==
nullptr
)
85
throw
std::runtime_error (
"failed to execute AMI metadata query"
);
86
query
= *myquery;
87
#endif
88
}
89
90
91
void
fetchMetaData
(
SH::SampleHandler
&
sh
,
bool
override
)
92
{
93
using namespace
msgFetch;
94
95
std::vector<SH::Sample*> samples;
96
// typedef std::vector<SH::Sample*> SamplesIter;
97
MetaDataQuery
query
;
98
for
(
auto
*sample :
sh
)
99
{
100
std::string name = sample->meta()->castString (
SH::MetaFields::gridName
, sample->name());
101
query
.samples.push_back (
MetaDataSample
(name));
102
samples.push_back (sample);
103
}
104
fetchMetaData
(
query
);
105
106
if
(!
query
.messages.empty())
107
ANA_MSG_INFO
(
query
.messages);
108
for
(std::size_t iter = 0, end =
query
.samples.size(); iter != end; ++ iter)
109
{
110
if
(
query
.samples[iter].unknown)
111
{
112
ANA_MSG_WARNING
(
"failed to find sample "
<<
query
.samples[iter].name);
113
}
else
114
{
115
if
(iter >= samples.size())
116
throw
std::runtime_error (
"AMI query returned more samples than were requested"
);
117
SH::Sample
*sample = samples[iter];
118
119
if
(!
override
)
120
{
121
query
.samples[iter].isData = sample->meta()->castDouble (
SH::MetaFields::isData
,
query
.samples[iter].isData);
122
query
.samples[iter].luminosity = sample->meta()->castDouble (
SH::MetaFields::lumi
,
query
.samples[iter].luminosity);
123
query
.samples[iter].crossSection = sample->meta()->castDouble (
SH::MetaFields::crossSection
,
query
.samples[iter].crossSection);
124
query
.samples[iter].nevents = sample->meta()->castDouble (
SH::MetaFields::numEvents
,
query
.samples[iter].nevents);
125
query
.samples[iter].kfactor = sample->meta()->castDouble (
SH::MetaFields::kfactor
,
query
.samples[iter].kfactor);
126
query
.samples[iter].filterEfficiency = sample->meta()->castDouble (
SH::MetaFields::filterEfficiency
,
query
.samples[iter].filterEfficiency);
127
}
128
if
(
query
.samples[iter].isData != -1)
129
sample->meta()->setDouble (
SH::MetaFields::isData
,
query
.samples[iter].isData);
130
if
(
query
.samples[iter].luminosity != -1)
131
sample->meta()->setDouble (
SH::MetaFields::lumi
,
query
.samples[iter].luminosity);
132
if
(
query
.samples[iter].crossSection != -1)
133
sample->meta()->setDouble (
SH::MetaFields::crossSection
,
query
.samples[iter].crossSection);
134
if
(
query
.samples[iter].nevents != -1)
135
sample->meta()->setDouble (
SH::MetaFields::numEvents
,
query
.samples[iter].nevents);
136
if
(
query
.samples[iter].kfactor != -1)
137
sample->meta()->setDouble (
SH::MetaFields::kfactor
,
query
.samples[iter].kfactor);
138
if
(
query
.samples[iter].filterEfficiency != -1)
139
sample->meta()->setDouble (
SH::MetaFields::filterEfficiency
,
query
.samples[iter].filterEfficiency);
140
}
141
}
142
}
143
}
Assert.h
ANA_MSG_INFO
#define ANA_MSG_INFO(xmsg,...)
Macro printing info messages.
Definition
Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:291
ANA_MSG_WARNING
#define ANA_MSG_WARNING(xmsg,...)
Macro printing warning messages.
Definition
Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:293
MetaDataQuery.h
MetaDataSample.h
MetaFields.h
MetaObject.h
MessageCheck.h
SampleHandler.h
Sample.h
SH::SampleHandler
A class that manages a list of Sample objects.
Definition
SampleHandler.h:53
SH::Sample
a base class that manages a set of files belonging to a particular data set and the associated meta-d...
Definition
Sample.h:49
fetch.h
RCU::Shell
Definition
ShellExec.cxx:26
SH
This module provides a lot of global definitions, forward declarations and includes that are used by ...
Definition
DiskList.cxx:21
SH::fetchMetaData
void fetchMetaData(MetaDataQuery &query)
effects: fetch information on all the samples/datasets specified guarantee: basic
Definition
fetch.cxx:51
get_generator_info.result
result
Definition
get_generator_info.py:21
python.compressB64.c
c
Definition
compressB64.py:93
query
Definition
query.py:1
SH::MetaDataQuery
an object containing the result of an AMI meta-data query
Definition
MetaDataQuery.h:17
SH::MetaDataSample
all the meta-data fields that we may try to read from AMI.
Definition
MetaDataSample.h:15
SH::MetaFields::kfactor
static const std::string kfactor
the k-factor of the sample
Definition
MetaFields.h:74
SH::MetaFields::numEvents
static const std::string numEvents
the number of events
Definition
MetaFields.h:56
SH::MetaFields::gridName
static const std::string gridName
the field containing the name of the dataset on the grid
Definition
MetaFields.h:26
SH::MetaFields::isData
static const std::string isData
whether the sample is data
Definition
MetaFields.h:71
SH::MetaFields::lumi
static const std::string lumi
the luminosity of the sample
Definition
MetaFields.h:68
SH::MetaFields::crossSection
static const std::string crossSection
the cross section field
Definition
MetaFields.h:50
SH::MetaFields::filterEfficiency
static const std::string filterEfficiency
the filter efficiency of the sample
Definition
MetaFields.h:77
Generated on
for ATLAS Offline Software by
1.17.0