ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Database
IOVDbMetaDataTools
python
ParameterDbFiller.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3
# @author: RD Schaffer <R.D.Schaffer@cern.ch>
4
# @date: May 2008
5
#
6
#
7
8
9
__version__ =
"$Id: ParameterDbFiller.py,v 1.3 2008-11-13 12:25:23 schaffer Exp $"
10
__author__ =
"RD Schaffer <R.D.Schaffer@cern.ch>"
11
12
import
sys
13
import
os
14
import
collections
15
from
PyCool
import
cool
16
17
class
ParameterDbFillerError
(Exception):
18
def
__init__
(self, value):
19
self.
value
= value
20
super().
__init__
(value)
21
def
__str__
(self):
22
return
repr(self.
value
)
23
24
25
class
ParameterDbFiller
(object):
26
"""
27
A simple class used to fill SQLite db file with parameters for simulation
28
and/or digitization.
29
"""
30
31
def
__init__
(self):
32
object.__init__(self)
33
34
self.
beginRun
=
None
35
self.
endRun
=
None
36
self.
simParams
= collections.OrderedDict()
37
self.
digitParams
= collections.OrderedDict()
38
self.
digitParams64
= collections.OrderedDict()
39
return
40
41
#
42
def
setBeginRun
(self, beginRun):
43
self.
beginRun
= beginRun << 32
44
return
45
46
def
setEndRun
(self, endRun):
47
self.
endRun
= endRun << 32
48
return
49
50
def
addSimParam
(self, name, value):
51
self.
simParams
[name] = value
52
return
53
54
def
addDigitParam
(self, name, value):
55
self.
digitParams
[name] = value
56
return
57
58
def
addDigitParam64
(self, name, value):
59
self.
digitParams64
[name] = value
60
return
61
62
def
genSimDb
(self, dbFileName = None):
63
# Allow to define specific file name, otherwise use
64
if
dbFileName
is
None
:
65
# Set to default value
66
dbFileName =
"SimParams.db"
67
68
# Generate db: args - file name, dbname, params, folder path
69
self.
genDb
(dbFileName,
'SIMPARAM'
, self.
simParams
,
'/Simulation/Parameters'
)
70
71
72
def
genDigitDb
(self, dbFileName = None):
73
# Allow to define specific file name, otherwise use
74
if
dbFileName
is
None
:
75
# Set to default value
76
dbFileName =
"DigitParams.db"
77
78
# Generate db: args - file name, dbname, params, folder path
79
self.
genDb
(dbFileName,
'DIGPARAM'
, self.
digitParams
,
'/Digitization/Parameters'
, self.
digitParams64
)
80
81
82
def
genDb
(self, dbFileName, dbName, params, folderPath, params64 = {}):
83
84
# Do checks
85
if
self.
beginRun
is
None
:
86
raise
ParameterDbFillerError (
'Must set begin run number before generating db'
)
87
if
self.
endRun
is
None
:
88
raise
ParameterDbFillerError (
'Must set end run number before generating db'
)
89
if
len(params) == 0:
90
raise
ParameterDbFillerError (
'No parameters for db '
+ dbName)
91
92
# remove existing db, if any
93
try
:
94
os.remove(dbFileName)
95
print
(
"ParameterDbFiller.genDb: Removed db"
, dbFileName)
96
except
Exception:
97
pass
98
99
# get database service and open database
100
dbSvc=cool.DatabaseSvcFactory.databaseService()
101
102
# build dbstring - database accessed via physical name
103
dbstring=
"sqlite://;schema="
+ dbFileName +
";dbname="
+ dbName
104
try
:
105
db=dbSvc.createDatabase(dbstring)
106
except
Exception
as
e:
107
print
(
'ParameterDbFiller.genDb: Problem creating database'
,e)
108
sys.exit(-1)
109
print
(
"ParameterDbFiller.genDb: Created database"
,dbstring)
110
111
# setup a folder payload specification
112
spec=cool.RecordSpecification()
113
for
key
in
params:
114
spec.extend(key, cool.StorageType.String4k)
115
pass
116
# add in spec for long strings
117
for
key
in
params64:
118
spec.extend(key, cool.StorageType.String64k)
119
120
# folder meta-data - note for Athena this has a special meaning
121
desc =
'<timeStamp>run-event</timeStamp><addrHeader><address_header service_type="71" clid="40774348" /></addrHeader><typeName>AthenaAttributeList</typeName>'
122
# create the folder - single version
123
# last argument is createParents - if true, automatically creates parent
124
# folders if needed
125
# note this will not work if the database already exists - delete mycool.db first
126
# myfolder=db.createFolder(folderPath, spec, desc, cool.FolderVersioning.SINGLE_VERSION,True)
127
folderSpec = cool.FolderSpecification(cool.FolderVersioning.SINGLE_VERSION, spec)
128
myfolder = db.createFolder(folderPath, folderSpec, desc,
True
)
129
130
# now fill in parameters
131
data = cool.Record(spec)
132
for
k, v
in
params.items():
133
data[k] = v
134
for
k, v
in
params64.items():
135
data[k] = v
136
137
print
(
"ParameterDbFiller.genDb: Recording parameters"
, data)
138
139
# store object with IOV valid from 0-10, channel 3
140
myfolder.storeObject(self.
beginRun
, self.
endRun
, data, 0)
141
print
(
"ParameterDbFiller.genDb: Stored object"
)
142
143
# finalize
144
db.closeDatabase()
145
146
# Try to dump out db as test
147
self.
dumpDb
(dbstring)
148
149
def
dumpDb
(self, dbstring):
150
151
print
(
"ParameterDbFiller.dumpDb: Dumping database:"
, dbstring)
152
# get database service and open database
153
dbSvc = cool.DatabaseSvcFactory.databaseService()
154
# database accessed via physical name
155
try
:
156
db = dbSvc.openDatabase(dbstring,
False
)
157
except
Exception
as
e:
158
print
(
'ParameterDbFiller.dumpDb: Problem opening database'
,e)
159
sys.exit(-1)
160
161
# Loop over folders
162
folders = db.listAllNodes()
163
for
ff
in
folders:
164
# Get Folder
165
if
(
not
db.existsFolder(ff)):
166
continue
167
try
:
168
f = db.getFolder(ff)
169
print
(
"ParameterDbFiller.dumpDb: Dumping folder "
+ str(ff))
170
except
Exception:
171
#print ("Skipping " + str(ff))
172
continue
173
174
# get tags
175
# tags = f.listTags()
176
# print ("for tags ", end='')
177
# for tag in tags: print (tag)
178
179
# for tag in tags:
180
181
nobjs = f.countObjects( cool.ValidityKeyMin,
182
cool.ValidityKeyMax,
183
cool.ChannelSelection.all())
184
185
print
(
"ParameterDbFiller.dumpDb: number of IOV payloads"
, nobjs)
186
187
objs = f.browseObjects( cool.ValidityKeyMin,
188
cool.ValidityKeyMax,
189
cool.ChannelSelection.all())
190
i = 0
191
while
objs.goToNext():
192
obj = objs.currentRef()
193
print
(
"ParameterDbFiller.dumpDb: Payload"
, i, end=
''
)
194
print
(
"since [r,l]: ["
, obj.since() >> 32,
','
,obj.since()%0x100000000,
']'
, end=
''
)
195
print
(
"until [r,l]: ["
, obj.until() >> 32,
','
,obj.until()%0x100000000,
']'
, end=
''
)
196
print
(
"payload"
, obj.payload(), end=
''
)
197
print
(
"chan"
,obj.channelId() )
198
i += 1
199
200
objs.close()
201
202
# finish
203
db.closeDatabase()
python.ParameterDbFiller.ParameterDbFillerError
Definition
ParameterDbFiller.py:17
python.ParameterDbFiller.ParameterDbFillerError.value
value
Definition
ParameterDbFiller.py:19
python.ParameterDbFiller.ParameterDbFillerError.__str__
__str__(self)
Definition
ParameterDbFiller.py:21
python.ParameterDbFiller.ParameterDbFillerError.__init__
__init__(self, value)
Definition
ParameterDbFiller.py:18
python.ParameterDbFiller.ParameterDbFiller
Definition
ParameterDbFiller.py:25
python.ParameterDbFiller.ParameterDbFiller.beginRun
int beginRun
Definition
ParameterDbFiller.py:34
python.ParameterDbFiller.ParameterDbFiller.genDb
genDb(self, dbFileName, dbName, params, folderPath, params64={})
Definition
ParameterDbFiller.py:82
python.ParameterDbFiller.ParameterDbFiller.endRun
int endRun
Definition
ParameterDbFiller.py:35
python.ParameterDbFiller.ParameterDbFiller.simParams
simParams
Definition
ParameterDbFiller.py:36
python.ParameterDbFiller.ParameterDbFiller.addDigitParam64
addDigitParam64(self, name, value)
Definition
ParameterDbFiller.py:58
python.ParameterDbFiller.ParameterDbFiller.addSimParam
addSimParam(self, name, value)
Definition
ParameterDbFiller.py:50
python.ParameterDbFiller.ParameterDbFiller.__init__
__init__(self)
Definition
ParameterDbFiller.py:31
python.ParameterDbFiller.ParameterDbFiller.digitParams
digitParams
Definition
ParameterDbFiller.py:37
python.ParameterDbFiller.ParameterDbFiller.dumpDb
dumpDb(self, dbstring)
Definition
ParameterDbFiller.py:149
python.ParameterDbFiller.ParameterDbFiller.genSimDb
genSimDb(self, dbFileName=None)
Definition
ParameterDbFiller.py:62
python.ParameterDbFiller.ParameterDbFiller.genDigitDb
genDigitDb(self, dbFileName=None)
Definition
ParameterDbFiller.py:72
python.ParameterDbFiller.ParameterDbFiller.digitParams64
digitParams64
Definition
ParameterDbFiller.py:38
python.ParameterDbFiller.ParameterDbFiller.setBeginRun
setBeginRun(self, beginRun)
Definition
ParameterDbFiller.py:42
python.ParameterDbFiller.ParameterDbFiller.setEndRun
setEndRun(self, endRun)
Definition
ParameterDbFiller.py:46
python.ParameterDbFiller.ParameterDbFiller.addDigitParam
addDigitParam(self, name, value)
Definition
ParameterDbFiller.py:54
Generated on
for ATLAS Offline Software by
1.17.0