ATLAS Offline Software
Loading...
Searching...
No Matches
LArHVMapDbFiller.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
3# @author: G.Unal
4# @date: July 2008
5#
6#
7
8
9__version__ = "$Id: LArHVMapDbFiller.py"
10__author__ = "G.Unal"
11
12import sys, os
13from PyCool import cool
14
15class LArHVMapDbFillerError(Exception):
16 def __init__(self, value):
17 self.value = value
18 super().__init__(value)
19 def __str__(self):
20 return repr(self.value)
21
22
24 """
25 A simple class used to fill SQLite db file with parameters for simulation
26 and/or digitization.
27 """
28
29 def __init__(self):
30 object.__init__(self)
31
32 self.beginTime = None
33 self.endTime = None
34 self.FileName = None
35 self.FolderTag = None
36 self.Params = {}
37 return
38
39 #
40 def setBegin(self,run,lumi):
41 print (" setBegin run,lumi ",run)
42 self.beginTime = (int(run) << 32) + int(lumi)
43 print (" time ",self.beginTime)
44 return
45
46 def setEnd(self,run,lumi):
47 print ("setEnd runmlumi ",run)
48 self.endTime = (int(run) << 32) + int(lumi)
49 print (" time ",self.endTime)
50 return
51
52 def setFileName(self, fileName):
53 self.FileName = fileName
54 return
55
56 def setFolderTag(self,folderTag):
57 self.FolderTag = folderTag
58 return
59
60 def readFile(self):
61 value = ''
62 f = open(self.FileName,'r')
63 for lines in f:
64 value += lines
65 self.Params['LArHVMap'] = value
66 return
67
68 def genDb(self):
69
70 dbFileName = 'HVmap.db'
71 dbName = 'COMP200'
72 folderPath = '/LAR/IdentifierOfl/HVLineToElectrodeMap'
73 # Do checks
74 if self.beginTime is None:
75 raise LArHVMapDbFillerError ('Must set begin run number before generating db')
76 if self.endTime is None:
77 self.endTime = cool.ValidityKeyMax
78 if self.FileName is None:
79 raise LArHVMapDbFillerError ('Must give an input file for LArHVToElectrode.data')
80 if self.FolderTag is None:
81 raise LArHVMapDbFillerError ('Must give a folder tag')
82
83 self.readFile()
84
85 if len(self.Params) == 0:
86 raise LArHVMapDbFillerError ('No parameters for db ' + dbName)
87
88 # remove existing db, if any
89 try:
90 os.remove(dbFileName)
91 print ("LArHVMapDbFiller.genDb: Removed db", dbFileName)
92 except OSError:
93 pass
94
95 # get database service and open database
96 dbSvc=cool.DatabaseSvcFactory.databaseService()
97
98 # build dbstring - database accessed via physical name
99 dbstring="sqlite://;schema=" + dbFileName + ";dbname=" + dbName
100 try:
101 db=dbSvc.createDatabase(dbstring)
102 except Exception as e:
103 print ('LArHVMapDbFiller.genDb: Problem creating database',e)
104 sys.exit(-1)
105 print ("LArHVMapDbFiller.genDb: Created database",dbstring)
106
107 # setup a folder payload specification
108 spec=cool.RecordSpecification()
109 for key in self.Params:
110 spec.extend(key, cool.StorageType.String16M)
111
112 # folder meta-data - note for Athena this has a special meaning
113 desc='<timeStamp>run-lumi</timeStamp><addrHeader><address_header service_type="71" clid="40774348" /></addrHeader><typeName>AthenaAttributeList</typeName>'
114 # create the folder - single version
115 # last argument is createParents - if true, automatically creates parent
116 # folders if needed
117 # note this will not work if the database already exists - delete mycool.db first
118 myfolder=db.createFolder(folderPath, spec, desc, cool.FolderVersioning.MULTI_VERSION,True)
119 # now fill in simlation parameters
120 data=cool.Record(spec)
121 for k, v in self.Params.items():
122 data[k] = v
123
124 print ("LArHVMapDbFiller.genDb: Recording parameters", data)
125
126 # store object with IOV valid from 0-10, channel 3
127 myfolder.storeObject(self.beginTime, self.endTime, data, 0, self.FolderTag)
128 print ("LArHVMapDbFiller.genDb: Stored object")
129
130 # finalize
131 db.closeDatabase()
132
133 # Try to dump out db as test
134 self.dumpDb(dbstring)
135
136 def dumpDb(self, dbstring):
137
138 print ("LArHVMapDbFiller.dumpDb: Dumping database:", dbstring)
139 # get database service and open database
140 dbSvc = cool.DatabaseSvcFactory.databaseService()
141 # database accessed via physical name
142 try:
143 db = dbSvc.openDatabase(dbstring,False)
144 except Exception as e:
145 print ('LArHVMapDbFiller.dumpDb: Problem opening database',e)
146 sys.exit(-1)
147
148 # Loop over folders
149 folders = db.listAllNodes()
150 for ff in folders:
151 # Get Folder
152 try:
153 f = db.getFolder(ff)
154 print ("LArHVMapDbFiller.dumpDb: Dumping folder " + str(ff))
155 except Exception:
156 #print ("Skipping " + str(ff))
157 continue
158
159 # get tags
160 # tags = f.listTags()
161 # print ("for tags ",)
162 # for tag in tags: print (tag)
163
164 # for tag in tags:
165
166 nobjs = f.countObjects( cool.ValidityKeyMin,
167 cool.ValidityKeyMax,
168 cool.ChannelSelection.all())
169
170 print ("LArHVMapDbFiller.dumpDb: number of IOV payloads", nobjs)
171
172 objs = f.browseObjects( cool.ValidityKeyMin,
173 cool.ValidityKeyMax,
174 cool.ChannelSelection.all())
175 i = 0
176 while objs.goToNext():
177 obj = objs.currentRef()
178 print ("LArHVMapDbFiller.dumpDb: Payload", i,)
179 print ("since [r,l]: [", obj.since() ,']',)
180 print ("until [r,l]: [", obj.until() ,']',)
181 print ("payload", obj.payload(),)
182 print ("chan",obj.channelId() )
183 i += 1
184
185 objs.close()
186
187 # finish
188 db.closeDatabase()