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