ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Generators
GeneratorConfig
python
Versioning.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
from
os
import
getenv
3
4
import
re
5
versionRegex = re.compile(
r'\(v\.(.*)\)$'
)
6
7
ignoredGenerators = [
"Pythia8B"
,
"Powheg"
]
8
9
10
def
legacyReleaseData
():
11
from
pathlib
import
Path
12
from
PathResolver
import
PathResolver
13
filePath = Path(
PathResolver.FindCalibFile
(
"GeneratorConfig/Legacy_AthGeneration_versions.txt"
))
14
data = {}
15
with
filePath.open()
as
f:
16
header = f.readline().
strip
().
split
(
","
)
17
generators = header[2:]
18
for
line
in
f:
19
line = line.strip().
split
(
","
)
20
item = {generator: version
for
generator, version
in
zip(generators, line[2:])}
21
item[
'version'
] = line[0]
22
data[line[1]] = item
23
return
data
24
25
def
legacyReleaseDataSampleTagOverrides
():
26
from
pathlib
import
Path
27
from
PathResolver
import
PathResolver
28
filePath = Path(
PathResolver.FindCalibFile
(
"GeneratorConfig/Legacy_SampleTagOverrides.txt"
))
29
data = {}
30
with
filePath.open()
as
f:
31
f.readline()
# skip header
32
for
line
in
f:
33
line = line.strip()
34
if
line[0] ==
"#"
:
35
continue
36
line = line.split(
","
)
37
data[int(line[0])] = line[1]
38
return
data
39
40
def
legacyReleaseDataSampleGeneratorOverrides
():
41
from
pathlib
import
Path
42
from
PathResolver
import
PathResolver
43
filePath = Path(
PathResolver.FindCalibFile
(
"GeneratorConfig/Legacy_SampleGeneratorOverrides.txt"
))
44
data = {}
45
with
filePath.open()
as
f:
46
f.readline()
# skip header
47
for
line
in
f:
48
line = line.strip()
49
if
line[0] ==
"#"
:
50
continue
51
line = line.split(
","
)
52
versions = {}
53
for
i
in
range(1, len(line), 2):
54
versions[line[i]] = line[i+1]
if
line[i+1] !=
"None"
else
None
55
56
dsid_info = line[0].
split
(
"_"
)
57
dsid = int(dsid_info[0])
58
if
dsid
not
in
data:
59
data[dsid] = {}
60
if
len(dsid_info) == 1:
61
data[dsid][
"any"
] = versions
62
else
:
63
data[dsid][dsid_info[1]] = versions
64
return
data
65
66
def
generatorsGetInitialVersionedDictionary
(generators):
67
output = {}
68
for
generator
in
generators:
69
env_variable = f
"{generator.upper()}VER"
70
output[generator] = getenv(env_variable,
None
)
71
return
output
72
73
def
generatorsGetFromMetadata
(metadataString):
74
output = {}
75
metadataStringSplit = metadataString.split(
"+"
)
76
for
s
in
metadataStringSplit:
77
match = versionRegex.search(s)
78
if
match:
79
s = s.replace(match.group(0),
""
)
80
output[s] = match.group(1)
81
else
:
82
output[s] =
None
83
return
output
84
85
def
generatorsVersionedStringList
(generatorsDictionary):
86
list = []
87
for
generator, version
in
generatorsDictionary.items():
88
if
version
is
not
None
:
89
list.append(f
"{generator}(v.{version})"
)
90
else
:
91
list.append(generator)
92
return
list
93
94
def
generatorsVersionedString
(generatorsVersionedList):
95
return
"+"
.join(generatorsVersionedList)
96
97
98
def
GeneratorVersioningFixCfg
(flags):
99
from
AthenaCommon.Logging
import
logging
100
log = logging.getLogger(
"GeneratorsInfo"
)
101
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
102
103
generatorsData = flags.Input.GeneratorsInfo
104
log.info(f
"Generators data: {generatorsData}"
)
105
106
missingVersion =
False
107
for
k, v
in
generatorsData.items():
108
if
v
is
None
and
k
not
in
ignoredGenerators:
109
missingVersion =
True
110
111
# Fix specific samples directly
112
releaseDataSampleGeneratorOverridesDict =
legacyReleaseDataSampleGeneratorOverrides
()
113
overrides =
None
114
if
flags.Input.MCChannelNumber
and
flags.Input.MCChannelNumber
in
releaseDataSampleGeneratorOverridesDict:
115
overrides = releaseDataSampleGeneratorOverridesDict[flags.Input.MCChannelNumber]
116
log.warning(
"Found generator overrides for sample with DSID %d"
, flags.Input.MCChannelNumber)
117
118
if
not
missingVersion
and
not
overrides:
119
return
ComponentAccumulator()
120
121
log.info(
"At least one MC generator is missing version information. Attempting to fix..."
)
122
123
from
PyUtils.AMITagHelperConfig
import
inputAMITags
124
tags = inputAMITags(flags, fixBroken=
True
, silent=
True
)
125
tag =
None
126
if
tags
and
tags[0].startswith(
"e"
):
127
tag = tags[0]
128
129
# First check if we are fixing samples directly
130
if
overrides:
131
if
"any"
in
overrides:
132
overrides = overrides[
"any"
]
133
else
:
134
overrides = overrides.get(tag, {})
135
136
# Check again if e-tag matches and overrides are not empty
137
if
overrides:
138
log.warning(f
"Overriding generators to {'+'.join(overrides.keys())}."
)
139
generatorsData = {}
140
for
generator, version
in
overrides.items():
141
if
version
is
not
None
:
142
log.warning(f
"Overriding version for {generator} to {version}."
)
143
generatorsData[generator] = version
144
145
outputStringList =
generatorsVersionedStringList
(generatorsData)
146
147
from
EventInfoMgt.TagInfoMgrConfig
import
TagInfoMgrCfg
148
return
TagInfoMgrCfg(flags, tagValuePairs={
"generators"
:
generatorsVersionedString
(outputStringList)})
149
150
# Fix specific samples' e-tag
151
releaseDataSampleTagOverridesDict =
legacyReleaseDataSampleTagOverrides
()
152
if
flags.Input.MCChannelNumber
and
flags.Input.MCChannelNumber
in
releaseDataSampleTagOverridesDict:
153
log.warning(f
"Overriding e-tag for sample {flags.Input.MCChannelNumber} to {releaseDataSampleTagOverridesDict[flags.Input.MCChannelNumber]}."
)
154
tag = releaseDataSampleTagOverridesDict[flags.Input.MCChannelNumber]
155
156
# Retrieve generators release data
157
releaseDataDict =
legacyReleaseData
()
158
if
tag
not
in
releaseDataDict:
159
log.warning(f
"Could not find release data for tag {tag}."
)
160
return
ComponentAccumulator()
161
162
# Apply release data to missing generators
163
releaseData = releaseDataDict[tag]
164
for
k, v
in
generatorsData.items():
165
if
v
is
None
and
k
not
in
ignoredGenerators
and
k
in
releaseData:
166
log.info(f
"Setting version for {k} to {releaseData[k]}."
)
167
generatorsData[k] = releaseData[k]
168
169
outputStringList =
generatorsVersionedStringList
(generatorsData)
170
171
from
EventInfoMgt.TagInfoMgrConfig
import
TagInfoMgrCfg
172
return
TagInfoMgrCfg(flags, tagValuePairs={
"generators"
:
generatorsVersionedString
(outputStringList)})
SiliconTech::strip
@ strip
Definition
FPGATrackSimTypes.h:25
PathResolver::FindCalibFile
static std::string FindCalibFile(const std::string &logical_file_name)
Definition
PathResolver.h:63
split
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition
hcg.cxx:179
python.Versioning.generatorsVersionedStringList
generatorsVersionedStringList(generatorsDictionary)
Definition
Versioning.py:85
python.Versioning.legacyReleaseDataSampleTagOverrides
legacyReleaseDataSampleTagOverrides()
Definition
Versioning.py:25
python.Versioning.generatorsGetInitialVersionedDictionary
generatorsGetInitialVersionedDictionary(generators)
Definition
Versioning.py:66
python.Versioning.generatorsVersionedString
generatorsVersionedString(generatorsVersionedList)
Definition
Versioning.py:94
python.Versioning.legacyReleaseData
legacyReleaseData()
Definition
Versioning.py:10
python.Versioning.GeneratorVersioningFixCfg
GeneratorVersioningFixCfg(flags)
Definition
Versioning.py:98
python.Versioning.legacyReleaseDataSampleGeneratorOverrides
legacyReleaseDataSampleGeneratorOverrides()
Definition
Versioning.py:40
python.Versioning.generatorsGetFromMetadata
generatorsGetFromMetadata(metadataString)
Definition
Versioning.py:73
Generated on
for ATLAS Offline Software by
1.17.0