15 from ROOT
import gSystem
19 gSystem.Load(
'libDataQualityUtils')
20 from ROOT
import dqutils
23 def handi( name, resultsFile, htmlDir ):
25 if ( htmlDir.rfind(
"/")!=(len(htmlDir)-1) ):
30 dirsstring = of.stringListSystemPaths(htmlDir)
31 dirs = dirsstring.rsplit()
32 for subHtmlDir
in dirs:
33 if(
not os.access(subHtmlDir,os.F_OK) ):
35 os.makedirs(subHtmlDir)
37 print(
'Cannot create directory "' + subHtmlDir +
'"; exiting.')
40 total=of.stringAllHistograms()
41 of.saveAllHistograms(htmlDir,
False)
46 if (len(s[number-1])<1):
49 list, namelist =
makeAllDirsFile( htmlDir, name, s, number, resultsFile )
51 for x
in range(0,len(list)):
59 cmdi = sys.argv[0].rfind(
"/")
60 cmd = sys.argv[0][cmdi+1:]
61 print(
"Usage: ", cmd,
"<imput_file> <html_output_directory>")
64 g=
open(htmlDir+
'index.html',
'w')
65 g.write(
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n')
66 g.write(
'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n')
68 g.write(
'<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />\n')
69 g.write(
'<title>'+ name+
'</title>\n')
70 g.write(
'<link rel="stylesheet" href="AutomChecks.css" type="text/css" />\n')
73 g.write(
'<font class="DQGroup">[<a href="../index.html">Back</a>]</font>\n')
74 g.write(
'<h1>' + name +
': Monitoring</h1>\n')
85 g.write(
'<table>\n<tr valign="top">\n<td width="500">\n')
86 for x
in range(0,number):
90 shortNameDir = namedir
91 namediri = namedir.rfind(
"/")
93 shortNameDir = namedir[namediri+1:]
94 if namedir==
'<top_level>':
95 shortNameDir=
'Overall Status'
96 spaces_new=s[x].
find(sp[0][0])
97 if spaces_new > spaces:
100 elif spaces_new==spaces:
101 g.write(
'</li>\n<li>')
104 diff = spaces - spaces_new
106 g.write(
'</ul></li>\n')
110 if namedir!=
'<top_level>':
111 g.write(
'<img src="pixel.png" width="0" height="13" alt="" />')
112 if ( (x<number-1)
and (s[x+1].rsplit())[3]==
'ass' ):
113 if namedir==
'<top_level>':
115 g.write(
'<font class="DQGroup"><a href="'+namedir +
'/toplevel.html">'+shortNameDir+
'</a></font>')
117 g.write(
'<font class="DQGroup"><a href="'+namedir +
'/index.html" >'+shortNameDir+
'</a></font>')
119 namelist.append(namedir)
121 g.write(
'<font class="DQGroup">'+shortNameDir+
'</font>')
125 for x
in range(0,num_lists-1):
126 g.write(
'</ul></li>\n')
129 g.write(
'</td>\n<td><font class="Info">From file:</font><br/><font class="Note">' + resultsFile +
'</font></td>\n</tr>\n</table>')
130 g.write(
'</body>\n</html>')
132 return list, namelist
137 if( subname ==
'.' ):
138 h=
open(htmlDir+
'/'+subname+
'/toplevel.html',
'w')
139 subnameTitle =
'Top Level'
141 h=
open(htmlDir+
'/'+subname+
'/index.html',
'w')
142 subnameTitle = subname
143 h.write(
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n')
144 h.write(
'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n')
146 h.write(
'<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />\n')
147 h.write(
'<title>'+ name +
' ' + subnameTitle +
'</title>\n')
148 h.write(
'<link rel="stylesheet" href="AutomChecks.css" type="text/css" />\n')
151 h.write(
'<font class="DQGroup">[<a href="')
152 for x
in range(subname.count(
"/")):
154 h.write(
'../index.html">Back</a>]</font>\n')
156 h.write(
'<table>\n<tr valign="top">\n<td width="250"></td>\n')
157 h.write(
'<td width="300"><h2>'+name+
' '+subnameTitle+
'</h2></td>\n')
158 h.write(
'<td width="250">\n<font class="Note">Click on images for details and full size.</font>\n')
159 h.write(
'</td>\n</tr>\n</table>\n')
160 h.write(
'<table cellpadding="4" cellspacing="20">\n')
164 while(sp[3]==
'ass' and y<number):
168 h.write(
'<tr>\n<td class="' + sp[1] +
'"><a href="'+sp[0]+
'.html"><img src="'+ sp[0] +
'.png" height="200" alt="' + name +
' ' + subname+
'/'+sp[0]+
'.png" /></a></td>\n')
170 h.write(
'<td class="' + sp[1] +
'"><a href="'+sp[0]+
'.html"><img src="'+ sp[0] +
'.png" height="200" alt="' + name +
' ' + subname+
'/'+sp[0]+
'.png" /></a></td>\n</tr>\n')
173 h.write(
'<td class="' + sp[1] +
'"><a href="'+sp[0]+
'.html"><img src="'+ sp[0] +
'.png" height="200" alt="' + name +
' ' + subname+
'/'+sp[0]+
'.png" /></a></td>\n')
180 h.write(
'</table>\n</center>\n</body>\n</html>\n')
185 k=
open(htmlDir+
'/'+subname+
'/'+sp[0]+
'.html',
'w')
186 k.write(
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n')
187 k.write(
'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\n')
189 k.write(
'<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />\n')
190 k.write(
'<title>'+name+
' ' + subname+
' ' + sp[0]+
'</title>\n')
191 k.write(
'<link rel="stylesheet" href="AutomChecks.css" type="text/css" />\n')
194 k.write(
'<center>\n')
195 k.write(
'<table>\n<tr valign="top">\n')
197 k.write(
'<td width="250"><font class="DQGroup">[<a href="toplevel.html">Back</a></font>]</td>\n')
199 k.write(
'<td width="250"><font class="DQGroup">[<a href="index.html">Back</a></font>]</td>\n')
200 k.write(
'<td width="500"><h2>'+name +
' ' + subname+
'/'+sp[0]+
'</h2></td>\n')
201 k.write(
'<td width="250"></td>\n</tr></table>\n')
202 k.write(
'<table cellpadding="10">\n<tr>\n')
203 k.write(
'<td>\n<table width="400">\n')
204 k.write(
'<tr><td colspan="2"><font class="Heading">Details:</font></td></tr>\n')
205 k.write(
'<tr><td> </td></tr>\n')
206 k.write(
'<tr><td align="right"><font class="DatumName">Name:</font></td>')
207 k.write(
'<td>' +sp[0] +
'</td></tr>\n' )
208 k.write(
'</table>\n</td>\n')
210 k.write(
'<td><a href="toplevel.html"><img src="'+ sp[0] +
'.png" alt="' + name +
' ' + subname+
'/'+sp[0]+
'.png" /></a></td>\n')
212 k.write(
'<td><a href="index.html"><img src="'+ sp[0] +
'.png" alt="' + name +
' ' + subname+
'/'+sp[0]+
'.png" /></a></td>\n')
213 k.write(
'</tr></table>\n')
214 k.write(
'</center>\n</body>\n</html>\n')
219 k=
open(htmlDir+
'index.html',
'w')
220 k.write(
'<html>\n<frameset rows="200,*">\n')
221 k.write(
'<frame src="'+name+
'AllDirs.html">\n')
224 k.write(
'<frame src="'+subname+
'/index.html" name="showframe"> \n')
226 k.write(
'<frame src="'+subname+
'/toplevel.html" name="showframe"> \n')
227 k.write(
'</frameset>\n</html> \n')
232 css=
open(htmlDir+
'/'+subname+
'/'+name+
'AutomChecks.css',
'w')
233 css.write(
'BODY\n{\n background: #E6E6FA;\n color: #000000;\n font-family: helvetica,sans-serif;\n}\n')
234 css.write(
'H1\n{\n font-family: helvetica,sans-serif;\n font-size: x-large;\n text-align: left;\n}\n')
235 css.write(
'H2\n{\n font-family: helvetica,sans-serif;\n font-size: large;\n text-align: center;\n}\n')
236 css.write(
'H3\n{\n font-family: helvetica,sans-serif;\n font-size: medium;\n text-align: left;\n}\n')
237 css.write(
'FONT.Info\n{\n color: black;\n font-style: italic;\n}\n')
238 css.write(
'FONT.Heading\n{\n color: black;\n font-weight: bold;\n font-size: large;\n}\n')
239 css.write(
'FONT.DatumName\n{\n color: black;\n font-weight: bold;\n}\n')
240 css.write(
'FONT.Note\n{\n color: black;\n font-size: small;\n}\n')
241 css.write(
'FONT.DQGroup\n{\n font-size: small;\n}\n')
242 css.write(
'FONT.Red\n{\n color: red;\n font-weight: bold;\n}\n')
243 css.write(
'FONT.Yellow\n{\n color: #ffd700;\n font-weight: bold;\n}\n')
244 css.write(
'FONT.Green\n{\n color: green;\n font-weight: bold;\n}\n')
245 css.write(
'FONT.Undef\n{\n color: gray;\n font-weight: bold;\n}\n')
246 css.write(
'FONT.NoCheck\n{\n color: black;\n font-weight: bold;\n}\n')
247 css.write(
'TD.Red\n{\n background-color: red;\n}\n')
248 css.write(
'TD.Yellow\n{\n background-color: #ffd700;\n}\n')
249 css.write(
'TD.Green\n{\n background-color: green;\n}\n')
250 css.write(
'TD.Undef\n{\n background-color: gray;\n}\n')
251 css.write(
'TD.NoCheck\n{\n background-color: #E6E6FA;\n}\n')
259 if __name__ ==
"__main__":
261 if len(sys.argv) != 3:
266 resultsFile = sys.argv[1]
269 handi( name, resultsFile, html_dir )