20 def getLBsToIgnore(runnum,burstsFromCosmic=True,bulkProcessing=False, dropNonReady=True):
29 print (
"ERROR: Can't access COOLONL_TDAQ/CONDBR2")
32 fmode=tdaqdb.getFolder(
"/TDAQ/RunCtrl/DataTakingMode")
35 until=((1+runnum)<<32)-1
38 itr=fmode.browseObjects(since,until,cool.ChannelSelection.all())
42 isReady=pl[
"ReadyForPhysics"]
43 lb1=
max(since,obj.since()) & 0xFFFFFFFF
51 print (
"Ignoring LumiBlocks %i - %i not ATLAS READY" % (lb1,lb2))
52 badLBs.update(
range(lb1,lb2))
53 nNotReadyLBs+=(lb2-lb1)
61 tdaqdb.closeDatabase()
63 print (
"Run %i goes up to LB %i" % (runnum,maxLb))
68 stream =
'physics_CosmicCalo'
70 serverstring=
"https://%s@atlasdqm.cern.ch" % password
71 server = xmlrpc.client.ServerProxy(serverstring)
72 multicall = xmlrpc.client.MultiCall(server)
75 run_spec = {
'source': source,
'high_run': runnum,
'low_run': runnum}
76 multicall.get_procpass_amitag_mapping(run_spec)
78 if len(results[0])==0:
79 print (
"Nothing found about run",runnum,
"on DQM server")
82 list = results[0][
str(runnum)]
84 if (
"f" in item[2]
and bulkProcessing
and "CosmicCalo" in item[1]
and item[0]>proc):
86 if (
"x" in item[2]
and (
not bulkProcessing)
and "CosmicCalo" in item[1]
and item[0]>proc):
91 except Exception
as e:
92 print (
"ERROR: can't retrieve the AMI Tag")
96 print (
"I haven't found any processing version for CosmicCalo. Assume express processing")
101 multicall = xmlrpc.client.MultiCall(server)
102 run_spec = {
'source': source,
'high_run': runnum,
'stream': stream,
'proc_ver': proc,
'low_run': runnum}
103 multicall.get_timestamp(run_spec)
105 timestamp=results[0][
str(runnum)]
106 from time
import asctime,localtime
107 print (
"DQM server timestamp:", asctime(localtime(timestamp)))
108 print (
"Now: ",asctime())
109 except Exception
as e:
110 print (
"ERROR: can't get timestamp from DQM server")
114 multicall = xmlrpc.client.MultiCall(server)
115 run_spec = {
'source': source,
'high_run': runnum,
'stream': stream,
'proc_ver': proc,
'low_run': runnum}
116 multicall.get_dqmf_all_results(run_spec,
'LAr/LAR_GLOBAL/Collisions-Bkg/LArCollTimeLumiBlockTimeCut')
117 results = multicall()
118 RE = re.compile(
r'\((?P<lb>\S+)\.0*\)')
121 list = results[0][
str(runnum)]
125 m = RE.search(item).groupdict()
127 ncollisions=
int(results[0][
str(runnum)][item])
130 print (
"LumiBlock %i ignored because it is empty bunches are polluted with collisions" % lb)
133 except Exception
as e:
134 print (
"ERROR: can't get LArCollTimeLumiBlockTimeCut from DQM server")
137 if (burstsFromCosmic):
138 histoName = {
'EMBC':
'BarrelC',
'EMBA':
'BarrelA',
'EMECC':
'EMECC',
'EMECA':
'EMECA'}
139 for iPart
in histoName.keys():
140 multicall = xmlrpc.client.MultiCall(server)
142 multicall.get_dqmf_all_results(run_spec,
'/LAr/%s/Occupancy-Noise/Noise_Burst/NoisyEvent_TimeVeto_%s'%(iPart,iPart))
144 results = multicall()
146 resultlist = results[0][
str(runnum)]
148 for item
in resultlist:
152 m = RE.search(item).groupdict()
154 yieldbursts=
float(results[0][
str(runnum)][item])
157 print (
"LumiBlock %i ignored because it contains bursts in CosmicCalo stream in %s" % (lb,iPart))
160 except Exception
as e:
161 print (
"ERROR: can't get NoisyEvent from DQM server")
170 lar_defects = [d
for d
in (db.defect_names | db.virtual_defect_names)
if d.startswith(
"LAR")]
171 defects = db.retrieve((runnum, minLb), (runnum, maxLb), lar_defects)
172 for defect
in defects:
173 part=defect.channel.split(
"_")[1]
175 if "HVTRIP" in defect.channel
and defect.present:
176 for lb
in range(defect.since.lumi,defect.until.lumi):
178 print (
"LumiBlock %i ignored because of a HV trip in partition %s" % (lb,part))
182 if (
not burstsFromCosmic):
183 if not bulkProcessing:
184 if "NOISEBURST" in defect.channel
and defect.present:
185 for lb
in range(defect.since.lumi,defect.until.lumi):
187 print (
"LumiBlock %i ignored because of a noise burst in partition %s" % (lb,part))
191 if "SEVNOISEBURST" in defect.channel
and defect.present:
192 for lb
in range(defect.since.lumi,defect.until.lumi):
194 print (
"LumiBlock %i ignored because of a severe noise burst in partition %s" % (lb,part))
202 nBadLBs=nBadLBs-nNotReadyLBs
204 print (
"Found %i not-ready LBs, %i atlas-ready LBs and %i bad LBs" % (nNotReadyLBs,nReadyLBs,nBadLBs))