20 import sys, json, copy
21 from CoolConvUtilities
import AtlCoolLib
22 from PyCool
import cool
28 """A class to store database folder, its specification, and its tag at the same place, so they won't be mixed up"""
29 def __init__ (self, folder,folderName,spec,tag):
36 """Turns run number and lumibock into integrer needed by the database"""
40 """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"""
42 spec=cool.RecordSpecification()
45 spec.extend(
"data",cool.StorageType.String64k)
51 folder=AtlCoolLib.ensureFolder(db,folderName,spec,AtlCoolLib.athenaDesc(runLumi,
'CondAttrListCollection'),cool.FolderVersioning.MULTI_VERSION)
56 return folderBulk(folder, folderName, spec, tag)
59 """A class to create a dictionary, fill it with zeros in the constructor and to overwrite zeros later"""
61 if(folderBlk.folderName==
"/FWD/AFP/Align/Local"):
62 emptydict={
"stationID":0,
"layerID":-1,
"shiftX":0.0,
"shiftY":0.0,
"shiftZ":0.0,
"alpha":0.0,
"beta":0.0,
"gamma":0.0}
63 elif(folderBlk.folderName==
"/FWD/AFP/Align/Global"):
64 emptydict={
"stationID":0,
"alignType":
"None",
"shiftX":0.0,
"shiftY":0.0,
"shiftZ":0.0,
"alpha":0.0,
"beta":0.0,
"gamma":0.0}
66 print (
"unknown folder %s, please edit \"AFPDBDict\" class constructor, exiting now" % folderBlk.folderName)
70 "version":
"AFP_DB_v2",
72 "data": dict.fromkeys(
range(0, 16))}
74 for i
in range(0, 16):
75 self.
mydict[
"data"][i]=copy.deepcopy(emptydict)
76 self.
mydict[
"data"][i][
"stationID"]=i//4
77 if(folderBlk.folderName==
"/FWD/AFP/Align/Local"):
78 self.
mydict[
"data"][i][
"layerID"]=i%4
79 if(folderBlk.folderName==
"/FWD/AFP/Align/Global"):
80 if i%4==0: self.
mydict[
"data"][i][
"alignType"]=
"tracker"
81 if i%4==1: self.
mydict[
"data"][i][
"alignType"]=
"beam"
82 if i%4==2: self.
mydict[
"data"][i][
"alignType"]=
"RP"
83 if i%4==3: self.
mydict[
"data"][i][
"alignType"]=
"correction"
85 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):
86 """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."""
89 if(layerID==-1
and alignType==
"None"):
90 print (
"cannot save payload, got layerID=%d and alignType=%s; one of them has to be specified" % layerID, alignType)
92 elif(layerID!=-1
and alignType!=
"None"):
93 print (
"cannot save payload, got layerID=%d and alignType=%s; one of them should not be specified" % layerID, alignType)
96 if(stationID<0
or stationID>=4):
97 print (
"cannot save payload, got stationID=%d, unknown" % stationID)
103 if(alignType!=
"None"):
105 if(alignType==
"tracker"):
107 elif(alignType==
"beam"):
109 elif(alignType==
"RP"):
111 elif(alignType==
"correction"):
114 print (
"cannot save payload, got alignType=%s, unknown" % alignType)
118 self.
mydict[
"data"][channel][
'alignType']=alignType
123 if(0<=layerID
and layerID<4):
126 print (
"cannot save payload, got layerID=%d, unknown" % layerID)
130 self.
mydict[
"data"][channel][
'layerID']=layerID
133 mydict_helper=self.
mydict[
"data"][channel]
134 mydict_helper[
'shiftX'], mydict_helper[
'shiftY'], mydict_helper[
'shiftZ'] = shiftX, shiftY, shiftZ
135 mydict_helper[
'alpha'], mydict_helper[
'beta'], mydict_helper[
'gamma'] = alpha, beta, gamma
136 mydict_helper[
'stationID']=stationID
140 """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."""
144 until=cool.ValidityKeyMax
147 payload=cool.Record(folderBlk.spec)
149 payload[
"data"]=json.dumps(self.
mydict, indent = 1)
151 folderBlk.folder.storeObject(since,until,payload,0,folderBlk.tag)
155 dbFile =
"ExampleMC.db"
166 dbSvc = cool.DatabaseSvcFactory.databaseService()
169 dbString =
"sqlite://;schema=%s;dbname=%s" % (dbFile, dbName)
171 db = dbSvc.createDatabase(dbString)
172 except Exception
as e:
173 print (
'Problem creating database', e)
175 print (
"Created database", dbString)
178 folderBlkLoc_ideal_01 =
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Local", tag=
"AFPMCAlignLoc-ideal-01")
179 folderBlkLoc_329484_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Local", tag=
"AFPMCAlignLoc-329484-01")
180 folderBlkLoc_329484_02=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Local", tag=
"AFPMCAlignLoc-329484-02")
182 folderBlkGlob_ideal_01 =
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-ideal-01")
183 folderBlkGlob_203302_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-203302-01")
184 folderBlkGlob_329484_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-329484-01")
185 folderBlkGlob_331020_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-331020-01")
186 folderBlkGlob_336288_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-336288-01")
187 folderBlkGlob_347955_01=
makeFolderAndSpec(db,folderName=
"/FWD/AFP/Align/Global", tag=
"AFPMCAlignGlob-347955-01")
191 myDict =
AFPDBDict(folderBlkLoc_ideal_01)
192 myDict.savePayload(folderBlk=folderBlkLoc_ideal_01)
195 myDict =
AFPDBDict(folderBlkLoc_329484_01)
196 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)
197 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)
198 myDict.append(stationID=0, layerID=3, shiftX=0.0000, shiftY=0.0000, shiftZ=0.0000, alpha=0.0000, beta=0.0000, gamma=0.0000)
199 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)
200 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)
201 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)
202 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)
203 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)
204 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)
205 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)
206 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)
207 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)
208 myDict.savePayload(folderBlk=folderBlkLoc_329484_01)
211 myDict =
AFPDBDict(folderBlkLoc_329484_02)
212 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)
213 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)
214 myDict.append(stationID=0, layerID=3, shiftX=0.0000, shiftY=0.0000, shiftZ=0.0000, alpha=0.0000, beta=0.0000, gamma=0.0000)
215 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)
216 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)
217 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)
218 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)
219 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)
220 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)
221 myDict.append(stationID=3, layerID=1, shiftX=0.0000, shiftY=0.0000, shiftZ=0.0000, alpha=0.0000, beta=0.0000, gamma=0.0000)
222 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)
223 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)
224 myDict.savePayload(folderBlk=folderBlkLoc_329484_02)
228 myDict =
AFPDBDict(folderBlkGlob_ideal_01)
229 myDict.savePayload(folderBlk=folderBlkGlob_ideal_01)
232 myDict =
AFPDBDict(folderBlk=folderBlkGlob_203302_01)
233 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.34, shiftY=-13.22)
234 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.68, shiftY=-13.28)
235 myDict.append(stationID=2, alignType=
"RP", shiftX=-3.61, shiftY=-10.09)
236 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.39, shiftY=-10.53)
237 myDict.savePayload(folderBlk=folderBlkGlob_203302_01)
240 myDict =
AFPDBDict(folderBlk=folderBlkGlob_329484_01)
241 myDict.append(stationID=0, alignType=
"tracker", shiftX=-0.5)
242 myDict.append(stationID=1, alignType=
"tracker", shiftX=-0.5)
243 myDict.append(stationID=2, alignType=
"tracker", shiftX=-0.5)
244 myDict.append(stationID=3, alignType=
"tracker", shiftX=-0.5)
245 myDict.append(stationID=0, alignType=
"beam", shiftX=-1.045)
246 myDict.append(stationID=1, alignType=
"beam", shiftX=-0.864)
247 myDict.append(stationID=2, alignType=
"beam", shiftX=-1.155)
248 myDict.append(stationID=3, alignType=
"beam", shiftX=-0.891)
249 myDict.append(stationID=0, alignType=
"RP", shiftX=-3.16)
250 myDict.append(stationID=1, alignType=
"RP", shiftX=-4.07)
251 myDict.append(stationID=2, alignType=
"RP", shiftX=-4.26)
252 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.93)
253 myDict.append(stationID=0, alignType=
"correction", shiftX=-0.420)
254 myDict.append(stationID=1, alignType=
"correction", shiftX=-0.320)
255 myDict.append(stationID=2, alignType=
"correction", shiftX=-0.220)
256 myDict.append(stationID=3, alignType=
"correction", shiftX=-0.320)
257 myDict.savePayload(folderBlk=folderBlkGlob_329484_01)
260 myDict =
AFPDBDict(folderBlk=folderBlkGlob_331020_01)
261 myDict.append(stationID=0, alignType=
"tracker", shiftX=-0.5)
262 myDict.append(stationID=1, alignType=
"tracker", shiftX=-0.5)
263 myDict.append(stationID=2, alignType=
"tracker", shiftX=-0.5)
264 myDict.append(stationID=3, alignType=
"tracker", shiftX=-0.5)
265 myDict.append(stationID=0, alignType=
"beam", shiftX=-1.045)
266 myDict.append(stationID=1, alignType=
"beam", shiftX=-0.864)
267 myDict.append(stationID=2, alignType=
"beam", shiftX=-1.155)
268 myDict.append(stationID=3, alignType=
"beam", shiftX=-0.891)
269 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.65)
270 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.57)
271 myDict.append(stationID=2, alignType=
"RP", shiftX=-3.76)
272 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.43)
273 myDict.append(stationID=0, alignType=
"correction", shiftX=-0.420)
274 myDict.append(stationID=1, alignType=
"correction", shiftX=-0.320)
275 myDict.append(stationID=2, alignType=
"correction", shiftX=-0.220)
276 myDict.append(stationID=3, alignType=
"correction", shiftX=-0.320)
277 myDict.savePayload(folderBlk=folderBlkGlob_331020_01)
280 myDict =
AFPDBDict(folderBlk=folderBlkGlob_336288_01)
281 myDict.append(stationID=0, alignType=
"tracker", shiftX=-0.5)
282 myDict.append(stationID=1, alignType=
"tracker", shiftX=-0.5)
283 myDict.append(stationID=2, alignType=
"tracker", shiftX=-0.5)
284 myDict.append(stationID=3, alignType=
"tracker", shiftX=-0.5)
285 myDict.append(stationID=0, alignType=
"beam", shiftX=-1.045)
286 myDict.append(stationID=1, alignType=
"beam", shiftX=-0.864)
287 myDict.append(stationID=2, alignType=
"beam", shiftX=-1.155)
288 myDict.append(stationID=3, alignType=
"beam", shiftX=-0.891)
289 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.38)
290 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.60)
291 myDict.append(stationID=2, alignType=
"RP", shiftX=-3.87)
292 myDict.append(stationID=3, alignType=
"RP", shiftX=-2.23)
293 myDict.append(stationID=0, alignType=
"correction", shiftX=-0.420)
294 myDict.append(stationID=1, alignType=
"correction", shiftX=-0.320)
295 myDict.append(stationID=2, alignType=
"correction", shiftX=-0.220)
296 myDict.append(stationID=3, alignType=
"correction", shiftX=-0.320)
297 myDict.savePayload(folderBlk=folderBlkGlob_336288_01)
300 myDict =
AFPDBDict(folderBlk=folderBlkGlob_347955_01)
301 myDict.append(stationID=0, alignType=
"RP", shiftX=-2.34, shiftY=-13.22)
302 myDict.append(stationID=1, alignType=
"RP", shiftX=-3.68, shiftY=-13.28)
303 myDict.append(stationID=2, alignType=
"RP", shiftX=-6.46, shiftY=-5.47)
304 myDict.append(stationID=3, alignType=
"RP", shiftX=-6.79, shiftY=-5.03)
305 myDict.savePayload(folderBlk=folderBlkGlob_347955_01)
307 print (
"\nClose database")
311 if __name__==
"__main__":