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'