19 from __future__
import print_function
21 import sys, json, copy
22 from CoolConvUtilities
import AtlCoolLib
23 from PyCool
import cool
29 """A class to store database folder, its specification, and its tag at the same place, so they won't be mixed up"""
30 def __init__ (self, folder,folderName,spec,tag):
37 """Turns run number and lumibock into integrer needed by the database"""
41 """A function that will ensure a folder is in the database, it creates it if necessary. Also defines content of the folders. There are two folders: one for local constants and one for global constants. They both contain single entry of a long string"""
43 spec=cool.RecordSpecification()
46 spec.extend(
"data",cool.StorageType.String64k)
52 folder=AtlCoolLib.ensureFolder(db,folderName,spec,AtlCoolLib.athenaDesc(runLumi,
'CondAttrListCollection'),cool.FolderVersioning.MULTI_VERSION)
57 return folderBulk(folder, folderName, spec, tag)
60 """A class to create a dictionary, fill it with zeros in the constructor and to overwrite zeros later"""
62 if(folderBlk.folderName==
"/FWD/AFP/Align/Local"):
63 emptydict={
"stationID":0,
"layerID":-1,
"shiftX":0.0,
"shiftY":0.0,
"shiftZ":0.0,
"alpha":0.0,
"beta":0.0,
"gamma":0.0}
64 elif(folderBlk.folderName==
"/FWD/AFP/Align/Global"):
65 emptydict={
"stationID":0,
"alignType":
"None",
"shiftX":0.0,
"shiftY":0.0,
"shiftZ":0.0,
"alpha":0.0,
"beta":0.0,
"gamma":0.0}
67 print (
"unknown folder %s, please edit \"AFPDBDict\" class constructor, exiting now" % folderBlk.folderName)
71 "version":
"AFP_DB_v2",
73 "data": dict.fromkeys(
range(0, 16))}
75 for i
in range(0, 16):
76 self.
mydict[
"data"][i]=copy.deepcopy(emptydict)
77 self.
mydict[
"data"][i][
"stationID"]=i//4
78 if(folderBlk.folderName==
"/FWD/AFP/Align/Local"):
79 self.
mydict[
"data"][i][
"layerID"]=i%4
80 if(folderBlk.folderName==
"/FWD/AFP/Align/Global"):
81 if i%4==0: self.
mydict[
"data"][i][
"alignType"]=
"tracker"
82 if i%4==1: self.
mydict[
"data"][i][
"alignType"]=
"beam"
83 if i%4==2: self.
mydict[
"data"][i][
"alignType"]=
"RP"
84 if i%4==3: self.
mydict[
"data"][i][
"alignType"]=
"correction"
86 def append(self, stationID, layerID=-1, alignType="None", shiftX=0.0, shiftY=0.0, shiftZ=0.0, alpha=0.0, beta=0.0, gamma=0.0):
87 """A function that overwrites one slice of the alignment constants in the dictionary. Local constants have to have layerID defined, while alignType is undefined. Global constants have to have alignType defined (tracker/RP/beam/correction) and layerID undefined."""
90 if(layerID==-1
and alignType==
"None"):
91 print (
"cannot save payload, got layerID=%d and alignType=%s; one of them has to be specified" % layerID, alignType)
93 elif(layerID!=-1
and alignType!=
"None"):
94 print (
"cannot save payload, got layerID=%d and alignType=%s; one of them should not be specified" % layerID, alignType)
97 if(stationID<0
or stationID>=4):
98 print (
"cannot save payload, got stationID=%d, unknown" % stationID)
104 if(alignType!=
"None"):
106 if(alignType==
"tracker"):
108 elif(alignType==
"beam"):
110 elif(alignType==
"RP"):
112 elif(alignType==
"correction"):
115 print (
"cannot save payload, got alignType=%s, unknown" % alignType)
119 self.
mydict[
"data"][channel][
'alignType']=alignType
124 if(0<=layerID
and layerID<4):
127 print (
"cannot save payload, got layerID=%d, unknown" % layerID)
131 self.
mydict[
"data"][channel][
'layerID']=layerID
134 mydict_helper=self.
mydict[
"data"][channel]
135 mydict_helper[
'shiftX'], mydict_helper[
'shiftY'], mydict_helper[
'shiftZ'] = shiftX, shiftY, shiftZ
136 mydict_helper[
'alpha'], mydict_helper[
'beta'], mydict_helper[
'gamma'] = alpha, beta, gamma
137 mydict_helper[
'stationID']=stationID
141 """A function to transform the dictionary to JSON and save it in IOV from 0 to infinity; technically, upper limits are undefined and the maximum value (until beginning of a next entry) would be used."""
145 until=cool.ValidityKeyMax
148 payload=cool.Record(folderBlk.spec)
150 payload[
"data"]=json.dumps(self.
mydict, indent = 1)
152 folderBlk.folder.storeObject(since,until,payload,0,folderBlk.tag)
156 dbFile =
"ExampleMC.db"
167 dbSvc = cool.DatabaseSvcFactory.databaseService()
170 dbString =
"sqlite://;schema=%s;dbname=%s" % (dbFile, dbName)
172 db = dbSvc.createDatabase(dbString)
173 except Exception
as e:
174 print (
'Problem creating database', e)
176 print (
"Created database", dbString)
179 folderBlkLoc_ideal_01 =
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Local", tag=
"AFPMCAlignLoc-ideal-01")
180 folderBlkLoc_329484_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Local", tag=
"AFPMCAlignLoc-329484-01")
181 folderBlkLoc_329484_02=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Local", tag=
"AFPMCAlignLoc-329484-02")
183 folderBlkGlob_ideal_01 =
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-ideal-01")
184 folderBlkGlob_203302_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-203302-01")
185 folderBlkGlob_329484_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-329484-01")
186 folderBlkGlob_331020_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-331020-01")
187 folderBlkGlob_336288_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-336288-01")
188 folderBlkGlob_347955_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-347955-01")
192 myDict =
AFPDBDict(folderBlkLoc_ideal_01)
193 myDict.savePayload(folderBlk=folderBlkLoc_ideal_01)
196 myDict =
AFPDBDict(folderBlkLoc_329484_01)
197 myDict.append(stationID=0, layerID=1, shiftX=17.1871e-3, shiftY=-31.4828e-3, shiftZ=0.0000, alpha=2.8832e-3,beta=0.0000, gamma=0.0000)
198 myDict.append(stationID=0, layerID=2, shiftX=15.2353e-3, shiftY=-51.4641e-3, shiftZ=0.0000, alpha=3.1571e-3,beta=0.0000, gamma=0.0000)
199 myDict.append(stationID=0, layerID=3, shiftX=0.0000, shiftY=0.0000, shiftZ=0.0000, alpha=0.0000, beta=0.0000, gamma=0.0000)
200 myDict.append(stationID=1, layerID=1, shiftX=137.0504e-3, shiftY=5.5895e-3, shiftZ=0.0000, alpha=-1.5424e-3,beta=0.0000, gamma=0.0000)
201 myDict.append(stationID=1, layerID=2, shiftX=-81.5657e-3, shiftY=21.9504e-3, shiftZ=0.0000, alpha=-3.4834e-3,beta=0.0000, gamma=0.0000)
202 myDict.append(stationID=1, layerID=3, shiftX=-52.5330e-3, shiftY=-31.8738e-3, shiftZ=0.0000, alpha=0.9359e-3, beta=0.0000, gamma=0.0000)
203 myDict.append(stationID=2, layerID=1, shiftX=148.6858e-3, shiftY=104.3183e-3, shiftZ=0.0000, alpha=-3.3322e-3,beta=0.0000, gamma=0.0000)
204 myDict.append(stationID=2, layerID=2, shiftX=150.8107e-3, shiftY=82.0611e-3, shiftZ=0.0000, alpha=4.2123e-3, beta=0.0000, gamma=0.0000)
205 myDict.append(stationID=2, layerID=3, shiftX=116.9848e-3, shiftY=113.5771e-3, shiftZ=0.0000, alpha=29.2103e-3,beta=0.0000, gamma=0.0000)
206 myDict.append(stationID=3, layerID=1, shiftX=-184.2146e-3,shiftY=55.3273e-3, shiftZ=0.0000, alpha=-0.7655e-3,beta=0.0000, gamma=0.0000)
207 myDict.append(stationID=3, layerID=2, shiftX=-154.2151e-3,shiftY=133.8304e-3, shiftZ=0.0000, alpha=-3.2126e-3,beta=0.0000, gamma=0.0000)
208 myDict.append(stationID=3, layerID=3, shiftX=13.2748e-3, shiftY=138.4570e-3, shiftZ=0.0000, alpha=0.5984e-3, beta=0.0000, gamma=0.0000)
209 myDict.savePayload(folderBlk=folderBlkLoc_329484_01)
212 myDict =
AFPDBDict(folderBlkLoc_329484_02)
213 myDict.append(stationID=0, layerID=1, shiftX=17.1313e-3, shiftY=-46.7438e-3, shiftZ=0.0000, alpha=2.9785e-3, beta=0.0000, gamma=0.0000)
214 myDict.append(stationID=0, layerID=2, shiftX=15.7960e-3, shiftY=-53.7707e-3, shiftZ=0.0000, alpha=3.3048e-3, beta=0.0000, gamma=0.0000)
215 myDict.append(stationID=0, layerID=3, shiftX=0.0000, shiftY=0.0000, shiftZ=0.0000, alpha=0.0000, beta=0.0000, gamma=0.0000)
216 myDict.append(stationID=1, layerID=1, shiftX=138.0070e-3, shiftY=6.0528e-3, shiftZ=0.0000, alpha=-1.4420e-3, beta=0.0000, gamma=0.0000)
217 myDict.append(stationID=1, layerID=2, shiftX=-80.6720e-3, shiftY=24.1310e-3, shiftZ=0.0000, alpha=-3.6605e-3, beta=0.0000, gamma=0.0000)
218 myDict.append(stationID=1, layerID=3, shiftX=-51.5111e-3, shiftY=-32.9151e-3, shiftZ=0.0000, alpha=1.0762e-3, beta=0.0000, gamma=0.0000)
219 myDict.append(stationID=2, layerID=1, shiftX=149.6927e-3, shiftY=103.5674e-3, shiftZ=0.0000, alpha=-3.9565e-3, beta=0.0000, gamma=0.0000)
220 myDict.append(stationID=2, layerID=2, shiftX=144.1316e-3, shiftY=88.0891e-3, shiftZ=0.0000, alpha=3.3219e-3, beta=0.0000, gamma=0.0000)
221 myDict.append(stationID=2, layerID=3, shiftX=47.8090e-3, shiftY=153.5737e-3, shiftZ=0.0000, alpha=5.1961e-3, beta=0.0000, gamma=0.0000)
222 myDict.append(stationID=3, layerID=1, shiftX=0.0000, shiftY=0.0000, shiftZ=0.0000, alpha=0.0000, beta=0.0000, gamma=0.0000)
223 myDict.append(stationID=3, layerID=2, shiftX=-153.0397e-3,shiftY=132.8483e-3, shiftZ=0.0000, alpha=-3.9787e-3, beta=0.0000, gamma=0.0000)
224 myDict.append(stationID=3, layerID=3, shiftX=13.9500e-3, shiftY=136.9500e-3, shiftZ=0.0000, alpha=0.3829e-3, beta=0.0000, gamma=0.0000)
225 myDict.savePayload(folderBlk=folderBlkLoc_329484_02)
229 myDict =
AFPDBDict(folderBlkGlob_ideal_01)
230 myDict.savePayload(folderBlk=folderBlkGlob_ideal_01)
233 myDict =
AFPDBDict(folderBlk=folderBlkGlob_203302_01)
234 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.34, shiftY=-13.22)
235 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.68, shiftY=-13.28)
236 myDict.append(stationID=2, alignType=
"RP", shiftX=-3.61, shiftY=-10.09)
237 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.39, shiftY=-10.53)
238 myDict.savePayload(folderBlk=folderBlkGlob_203302_01)
241 myDict =
AFPDBDict(folderBlk=folderBlkGlob_329484_01)
242 myDict.append(stationID=0, alignType=
"tracker", shiftX=-0.5)
243 myDict.append(stationID=1, alignType=
"tracker", shiftX=-0.5)
244 myDict.append(stationID=2, alignType=
"tracker", shiftX=-0.5)
245 myDict.append(stationID=3, alignType=
"tracker", shiftX=-0.5)
246 myDict.append(stationID=0, alignType=
"beam", shiftX=-1.045)
247 myDict.append(stationID=1, alignType=
"beam", shiftX=-0.864)
248 myDict.append(stationID=2, alignType=
"beam", shiftX=-1.155)
249 myDict.append(stationID=3, alignType=
"beam", shiftX=-0.891)
250 myDict.append(stationID=0, alignType=
"RP", shiftX=-3.16)
251 myDict.append(stationID=1, alignType=
"RP", shiftX=-4.07)
252 myDict.append(stationID=2, alignType=
"RP", shiftX=-4.26)
253 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.93)
254 myDict.append(stationID=0, alignType=
"correction", shiftX=-0.420)
255 myDict.append(stationID=1, alignType=
"correction", shiftX=-0.320)
256 myDict.append(stationID=2, alignType=
"correction", shiftX=-0.220)
257 myDict.append(stationID=3, alignType=
"correction", shiftX=-0.320)
258 myDict.savePayload(folderBlk=folderBlkGlob_329484_01)
261 myDict =
AFPDBDict(folderBlk=folderBlkGlob_331020_01)
262 myDict.append(stationID=0, alignType=
"tracker", shiftX=-0.5)
263 myDict.append(stationID=1, alignType=
"tracker", shiftX=-0.5)
264 myDict.append(stationID=2, alignType=
"tracker", shiftX=-0.5)
265 myDict.append(stationID=3, alignType=
"tracker", shiftX=-0.5)
266 myDict.append(stationID=0, alignType=
"beam", shiftX=-1.045)
267 myDict.append(stationID=1, alignType=
"beam", shiftX=-0.864)
268 myDict.append(stationID=2, alignType=
"beam", shiftX=-1.155)
269 myDict.append(stationID=3, alignType=
"beam", shiftX=-0.891)
270 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.65)
271 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.57)
272 myDict.append(stationID=2, alignType=
"RP", shiftX=-3.76)
273 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.43)
274 myDict.append(stationID=0, alignType=
"correction", shiftX=-0.420)
275 myDict.append(stationID=1, alignType=
"correction", shiftX=-0.320)
276 myDict.append(stationID=2, alignType=
"correction", shiftX=-0.220)
277 myDict.append(stationID=3, alignType=
"correction", shiftX=-0.320)
278 myDict.savePayload(folderBlk=folderBlkGlob_331020_01)
281 myDict =
AFPDBDict(folderBlk=folderBlkGlob_336288_01)
282 myDict.append(stationID=0, alignType=
"tracker", shiftX=-0.5)
283 myDict.append(stationID=1, alignType=
"tracker", shiftX=-0.5)
284 myDict.append(stationID=2, alignType=
"tracker", shiftX=-0.5)
285 myDict.append(stationID=3, alignType=
"tracker", shiftX=-0.5)
286 myDict.append(stationID=0, alignType=
"beam", shiftX=-1.045)
287 myDict.append(stationID=1, alignType=
"beam", shiftX=-0.864)
288 myDict.append(stationID=2, alignType=
"beam", shiftX=-1.155)
289 myDict.append(stationID=3, alignType=
"beam", shiftX=-0.891)
290 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.38)
291 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.60)
292 myDict.append(stationID=2, alignType=
"RP", shiftX=-3.87)
293 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.23)
294 myDict.append(stationID=0, alignType=
"correction", shiftX=-0.420)
295 myDict.append(stationID=1, alignType=
"correction", shiftX=-0.320)
296 myDict.append(stationID=2, alignType=
"correction", shiftX=-0.220)
297 myDict.append(stationID=3, alignType=
"correction", shiftX=-0.320)
298 myDict.savePayload(folderBlk=folderBlkGlob_336288_01)
301 myDict =
AFPDBDict(folderBlk=folderBlkGlob_347955_01)
302 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.34, shiftY=-13.22)
303 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.68, shiftY=-13.28)
304 myDict.append(stationID=2, alignType=
"RP", shiftX=-6.46, shiftY=-5.47)
305 myDict.append(stationID=3, alignType=
"RP", shiftX=-6.79, shiftY=-5.03)
306 myDict.savePayload(folderBlk=folderBlkGlob_347955_01)
308 print (
"\nClose database")
312 if __name__==
"__main__":