73 def CreateXMLFile( runlist, options, origQuery, datapath, xmlfname, xmllabel, svnversion='Unknown' ):
78 with timer(
'create RunStreamAndNeventsList'):
81 ShowNumberOfEventsPerStreamPerRun =
False
82 ShowNumberOfEventsPerStreamSummary =
True
88 with timer(
'prepare document'):
97 docType = DocumentType(
'LumiRangeCollection')
98 docType.systemId =
'http://atlas-runquery.cern.ch/LumiRangeCollection.dtd'
99 doc.appendChild(docType)
102 txt =
' Good-runs-list created by %s on %s ' % (sys.argv[0].
split(
'/')[-1],
str(datetime.datetime.now()))
103 doc.appendChild( doc.createComment( txt ) )
106 lrc = doc.createElement(
'LumiRangeCollection')
110 namedLR = doc.createElement(
'NamedLumiRange')
111 lrc.appendChild(namedLR)
114 namedLR.appendChild(TextElement(
'Name',xmllabel,doc))
117 namedLR.appendChild(TextElement(
'Version',
'2.1',doc))
121 'Query' : origQuery.split(
'/')[0],
122 'RQTSVNVersion' : svnversion,
123 'RunList' : runnrliststr
127 mdelm = TextElement(
'Metadata', metadata[md], doc)
128 mdelm.setAttribute(
'Name', md)
129 namedLR.appendChild(mdelm)
131 with timer(
'ShowNumberOfEventsPerStreamSummary'):
132 if ShowNumberOfEventsPerStreamSummary:
133 strsummdelm = doc.createElement(
'Metadata')
134 strsummdelm.setAttribute(
'Name',
'StreamListInfo')
135 namedLR.appendChild(strsummdelm)
141 with timer(
'Loop over all runs'):
143 lbc = doc.createElement(
'LumiBlockCollection')
145 runnrelm = TextElement(
'Run',
str(run.runNr),doc)
148 if len(run.stats[
'SMK'][
'random'])==2:
149 (rd0,rd1) = run.stats[
'SMK'][
'random'][0:2]
155 runnrelm.setAttribute(
'PrescaleRD0',0x1<<(3+rd0))
156 runnrelm.setAttribute(
'PrescaleRD1',0x1<<(3+rd1))
158 (rd0,rd1,rd2,rd3) = run.stats[
'SMK'][
'random'][0:4]
168 runnrelm.setAttribute(
'Cut0', rd0)
169 runnrelm.setAttribute(
'Cut1', rd1)
170 runnrelm.setAttribute(
'Cut2', rd2)
171 runnrelm.setAttribute(
'Cut3', rd3)
173 lbc.appendChild(runnrelm)
177 streams_byrun[run.runNr] = streams
178 if run.runNr
in runstreamevents:
179 for stream
in runstreamevents[run.runNr].
keys():
180 if 'physics_' == stream[:8]:
181 streams[stream] = [0,0]
182 if stream
not in streams_sum:
183 streams_sum[stream] = [0,0]
185 for (nlb,nev)
in runstreamevents[run.runNr][stream]:
186 streams[stream][0] += nev
190 for lbrange
in run.data.getLBRanges(activeOnly=
True):
191 lbrelm = TextElement(
'LBRange',
'',doc)
192 lbrelm.setAttribute(
'Start',lbrange[1])
193 lbrelm.setAttribute(
'End',lbrange[2]-1)
194 lbc.appendChild(lbrelm)
196 if run.runNr
in runstreamevents:
197 for stream, lbnevts
in runstreamevents[run.runNr].
items():
198 if 'physics_' == stream[:8]:
199 for (nlb,nev)
in lbnevts:
200 if nlb>=lbrange[1]
and nlb<lbrange[2]:
201 streams[stream][1] += nev
204 strselm = doc.createElement(
'StreamsInRun')
206 for stream
in sorted (streams.keys()):
207 nevts = streams[stream]
208 if ShowNumberOfEventsPerStreamPerRun:
209 strelm = TextElement(
'Stream',
'',doc)
210 strelm.setAttribute(
'Name', stream)
211 strelm.setAttribute(
'TotalNumOfEvents', nevts[0])
212 strelm.setAttribute(
'NumOfSelectedEvents', nevts[1])
213 strselm.appendChild(strelm)
216 eff = nevts[1]/
float(nevts[0])*100.0
219 streams_sum[stream][0] += nevts[0]
220 streams_sum[stream][1] += nevts[1]
223 if ShowNumberOfEventsPerStreamPerRun:
224 lbc.appendChild(strselm)
227 namedLR.appendChild(lbc)
229 with timer(
'Streams'):
230 for stream
in sorted(streams_sum.keys()):
231 nevts = streams_sum[stream]
232 if ShowNumberOfEventsPerStreamSummary:
233 strelm = TextElement(
'Stream',
'',doc)
234 strelm.setAttribute(
'Name', stream)
235 strelm.setAttribute(
'TotalNumOfEvents', nevts[0])
236 strelm.setAttribute(
'NumOfSelectedEvents', nevts[1])
237 strsummdelm.appendChild(strelm)
240 with timer(
'Save GRL'):
242 filename =
'%s/%s' % (datapath, xmlfname)
244 xmlfile =
open( filename, mode=
"w" )
245 xmlfile.write( doc.toprettyxml(
' ') )
248 with timer(
'Create HTML'):
258 htmltext +=
'<table style="width: auto; border: 0px solid; border-width: margin: 0 0 0 0; 0px; border-spacing: 0px; border-collapse: separate; padding: 0px;" font-family: sans-serif; font-size: 85%%">\n'
259 htmltext +=
'<tr><td colspan="2"><b><font color="#999999">' + txt.strip() +
'</font></b></td></tr>\n'
260 htmltext +=
'<tr><td style="vertical-align:top">SVN Version: </td><td> ' + svnversion +
'</td></tr>\n'
261 htmltext +=
'<tr><td style="vertical-align:top">Query string:</td><td><b>' + origQuery.split(
'/')[0] +
'</b></td></tr>\n'
262 htmltext +=
'<tr><td style="vertical-align:top">Run list:</td><td>' + runnrliststr +
'</td></tr>\n'
263 htmltext +=
'</table>'
264 htmltext +=
'<hr color="#000000" size=1><font color="#777777">\n'
265 htmltext +=
'<table style="width: auto; border: 0px solid; border-width: margin: 0 0 0 0; 0px; border-spacing: 0px; border-collapse: separate; padding: 0px;" font-family: sans-serif; font-size: 90%%">\n'
271 htmltext +=
'<tr><td style="text-align:left;height:25px;vertical-align:bottom">Run <b>%i</b>:</td><td></td></tr>\n' % run.runNr
275 for lbrange
in run.data.getLBRanges(activeOnly=
True):
276 htmltext +=
'<tr><td></td><td style="text-align:left">LB range: [%5i-%5i]</td></tr>\n' % (lbrange[1],lbrange[2]-1)
279 htmltext +=
'<tr><td></td><td style="text-align:left"></td></tr>'
280 htmltext +=
'<tr><td></td><td style="text-align:left"><table style="width: auto; border: 0px solid; border-width: margin: 0 0 0 0; 0px; border-spacing: 0px; border-collapse: separate; padding: 0px;font-family: sans-serif; font-size: 90%"><tr><td>Stream name</td><td>#Events total</td><td> #Events selected</td><td> Sel. fraction (%)</td></tr>\n'
282 streams = streams_byrun[run.runNr]
283 for stream
in sorted(streams.keys()):
284 nevts = streams[stream]
285 eff = (nevts[1]/
float(nevts[0])*100.0)
if (nevts[0] > 0)
else 0
286 htmltext +=
'<tr><td style="text-align:left"><i>%s</i></td><td style="text-align:right">%s</td><td style="text-align:right">%s</td><td style="text-align:right">%.4g</td></tr>\n' % (stream,
prettyNumber(nevts[0]),
prettyNumber(nevts[1]),eff)
288 htmltext +=
'</table></td></tr>\n'
292 htmltext +=
'</table>'
293 htmltext +=
'<hr color="#000000" size=1><font color="#777777">\n'
294 htmltext +=
'<b>Stream summary for all selected runs:</b><br>\n'
295 htmltext +=
'<table style="width: auto; border: 0px solid; border-width: margin: 0 0 0 0; 0px; border-spacing: 0px; border-collapse: separate; padding: 0px;font-family: sans-serif; font-size: 95%"><tr><td>Stream name</td><td>#Events total</td><td> #Events selected</td><td> Sel. fraction (%)</td></tr>\n'
296 for stream
in sorted(streams_sum.keys()):
297 nevts = streams_sum[stream]
300 eff = nevts[1]/
float(nevts[0])*100.0
301 htmltext +=
'<tr><td style="text-align:left"><i>%s</i></td><td style="text-align:right">%s</td><td style="text-align:right">%s</td><td style="text-align:right">%.4g</td></tr>\n' % (stream,
prettyNumber(nevts[0]),
prettyNumber(nevts[1]),eff)
302 htmltext +=
'</table>\n'