ATLAS Offline Software
dummyLHCFillDB.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 from PyCool import cool
3 import ROOT
4 # Work around pyroot issue with long long --- see ATEAM-997.
5 ROOT.gInterpreter
6 import os
7 
8 
9 
10 def createSqlite(sqliteName,folderName="/TDAQ/OLC/LHC/FILLPARAMS"):
11 
12  dbSvc = cool.DatabaseSvcFactory.databaseService()
13 
14  if os.access(sqliteName,os.R_OK):
15  print ("UPDATING existing sqlite file %s" % sqliteName)
16  db=dbSvc.openDatabase("sqlite://;schema="+sqliteName+";dbname=CONDBR2",False)
17  else:
18  print("Creating new sqlite file %s" % sqliteName)
19  db=dbSvc.createDatabase("sqlite://;schema="+sqliteName+";dbname=CONDBR2")
20  pass
21 
22  spec = cool.RecordSpecification()
23  spec.extend("Beam1Bunches",cool.StorageType.UInt32)
24  spec.extend("Beam2Bunches",cool.StorageType.UInt32)
25  spec.extend("LuminousBunches",cool.StorageType.UInt32)
26  spec.extend("BCIDmasks",cool.StorageType.Blob64k)
27  descr='<timeStamp>time</timeStamp><addrHeader><address_header service_type="71" clid="40774348" /></addrHeader><typeName>AthenaAttributeList</typeName>'
28 
29  if db.existsFolder(folderName):
30  folder=db.getFolder(folderName)
31  else:
32  print("Creating COOL folder/tag %s" % (folderName))
33  #folder = db.createFolder(folderName, spec, desc, cool.FolderVersioning.MULTI_VERSION, True)
34  folderSpec = cool.FolderSpecification(cool.FolderVersioning.SINGLE_VERSION, spec)
35  folder = db.createFolder(folderName, folderSpec, descr, True)
36  pass
37 
38  return db,folder
39 
40 def fillFolder(folder,data=[],iovMin=cool.ValidityKeyMin,iovMax=cool.ValidityKeyMax):
41 
42  nB1=0
43  nB2=0
44  nColl=0
45 
46  for bcid in data:
47  if (bcid & 0x1): nB1+=1
48  if (bcid & 0x2): nB2+=1
49  if (bcid & 0x3 == 0x3): nColl+=1
50  pass
51 
52 
53  payload=cool.Record(folder.payloadSpecification())
54 
55  payload['Beam1Bunches']=nB1
56  payload['Beam2Bunches']=nB2
57  payload['LuminousBunches']=nColl
58 
59  btype=getattr(ROOT,"coral::Blob")
60 
61  bcmask=btype()
62  bcmask.resize(3564)
63 
64  for i,d in enumerate(data):
65  bcmask[i]=d
66 
67 
68  payload['BCIDmasks']=bcmask
69 
70 
71  print("Storing CaloCondBlob object")
72  folder.storeObject(iovMin, iovMax, payload, cool.ChannelId(0))
73 
74  return
75 
76 
77 
79  mask=[]
80  #pre-fill with zero
81  for i in range(0,3564):
82  mask.append(0x0)
83 
84  #A train across the wrap-around:
85  for i in range (0,25):
86  mask[i]=0x3
87 
88  for i in range (3550,3564):
89  mask[i]=0x3
90 
91  #A short sequence of bunches that doesn't qualify as train
92  for i in range (1000,1030):
93 
94  mask[i]=0x3
95  return mask
96 
97 
99  mask=[]
100  #pre-fill with zero
101  for i in range(0,3564):
102  mask.append(0x0)
103 
104  t8b4e=[0x3,0x3,0x3,0x3, 0x3,0x3,0x3,0x3, 0x0,0x0,0x0,0x0]
105 
106  for i in range(0,20):
107  #create a train of 20 8be4 groups start
108  mask[100+i*12:100+(i+1)*12]=t8b4e
109 
110  return mask
111 
112 
113 
114 
115 if __name__=="__main__":
116 
117 
118  db,folder=createSqlite("test.db")
119 
122 
123  fillFolder(folder,d1,iovMin=cool.ValidityKey(1e6),iovMax=cool.ValidityKey(2e6))
124  fillFolder(folder,d2,iovMin=cool.ValidityKey(2e6),iovMax=cool.ValidityKey(3e6))
125 
126 
127  db.closeDatabase()
128 
129 
python.dummyLHCFillDB.createSqlite
def createSqlite(sqliteName, folderName="/TDAQ/OLC/LHC/FILLPARAMS")
Definition: dummyLHCFillDB.py:10
python.dummyLHCFillDB.createBCMask1
def createBCMask1()
Definition: dummyLHCFillDB.py:78
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
python.dummyLHCFillDB.fillFolder
def fillFolder(folder, data=[], iovMin=cool.ValidityKeyMin, iovMax=cool.ValidityKeyMax)
Definition: dummyLHCFillDB.py:40
python.dummyLHCFillDB.createBCMask2
def createBCMask2()
Definition: dummyLHCFillDB.py:98