ATLAS Offline Software
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 
12 import sys, os
13 from PyCool import cool
14 
15 class 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()
LArHVMapDbFiller.LArHVMapDbFiller.readFile
def readFile(self)
Definition: LArHVMapDbFiller.py:60
LArHVMapDbFiller.LArHVMapDbFiller.FolderTag
FolderTag
Definition: LArHVMapDbFiller.py:35
LArHVMapDbFiller.LArHVMapDbFillerError.value
value
Definition: LArHVMapDbFiller.py:17
LArHVMapDbFiller.LArHVMapDbFiller.__init__
def __init__(self)
Definition: LArHVMapDbFiller.py:29
LArHVMapDbFiller.LArHVMapDbFillerError.__init__
def __init__(self, value)
Definition: LArHVMapDbFiller.py:16
LArHVMapDbFiller.LArHVMapDbFiller.setFolderTag
def setFolderTag(self, folderTag)
Definition: LArHVMapDbFiller.py:56
LArHVMapDbFiller.LArHVMapDbFiller.setFileName
def setFileName(self, fileName)
Definition: LArHVMapDbFiller.py:52
LArHVMapDbFiller.LArHVMapDbFiller.setBegin
def setBegin(self, run, lumi)
Definition: LArHVMapDbFiller.py:40
LArHVMapDbFiller.LArHVMapDbFiller.genDb
def genDb(self)
Definition: LArHVMapDbFiller.py:68
LArHVMapDbFiller.LArHVMapDbFiller.dumpDb
def dumpDb(self, dbstring)
Definition: LArHVMapDbFiller.py:136
LArHVMapDbFiller.LArHVMapDbFiller
Definition: LArHVMapDbFiller.py:23
PyAthena::repr
std::string repr(PyObject *o)
returns the string representation of a python object equivalent of calling repr(o) in python
Definition: PyAthenaUtils.cxx:106
LArHVMapDbFiller.LArHVMapDbFiller.beginTime
beginTime
Definition: LArHVMapDbFiller.py:32
LArHVMapDbFiller.LArHVMapDbFiller.Params
Params
Definition: LArHVMapDbFiller.py:36
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:71
LArHVMapDbFiller.LArHVMapDbFiller.FileName
FileName
Definition: LArHVMapDbFiller.py:34
LArHVMapDbFiller.LArHVMapDbFiller.setEnd
def setEnd(self, run, lumi)
Definition: LArHVMapDbFiller.py:46
Trk::open
@ open
Definition: BinningType.h:40
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
pickleTool.object
object
Definition: pickleTool.py:29
str
Definition: BTagTrackIpAccessor.cxx:11
LArHVMapDbFiller.LArHVMapDbFillerError
Definition: LArHVMapDbFiller.py:15
LArHVMapDbFiller.LArHVMapDbFillerError.__str__
def __str__(self)
Definition: LArHVMapDbFiller.py:19
LArHVMapDbFiller.LArHVMapDbFiller.endTime
endTime
Definition: LArHVMapDbFiller.py:33