12 from os
import chdir,getcwd,listdir,makedirs
13 from os.path
import basename,join,exists
19 from ROOT
import TCanvas,gStyle,TH1F,TGaxis,gPad,kRed
23 if os.environ.has_key(
"RELMON_SA"):
24 from dirstructure
import Comparison,Directory
25 from definitions
import *
26 from utils
import unpickler
28 from Utilities.RelMon.dirstructure
import Comparison,Directory
30 from Utilities.RelMon.utils
import unpickler
36 for old,new
in url_encode_dict.items():
37 url=url.replace(old,new)
41 return "w=%s;h=%s" %(h,w)
45 obj_url=
"archive/%s/%s/%s/%s/" %(run,sample,version,tier)
47 while obj_url.endswith(slash):
49 while slash*2
in obj_url:
50 obj_url=obj_url.replace(slash*2,slash)
54 obj_url=
"obj=%s;" %
build_obj_addr(run,sample,version,plot_path,tier)
57 def fairy_url(run1,run2,sample1,sample2,version1,version2,plot_path,tier1,tier2,draw_opts="",h=250,w=200):
58 fairy_url =
"%s/%s/plotfairy/overlay?" %(server,base_url)
59 fairy_url+=
build_obj(run1,sample1,version1,plot_path,tier1)
60 fairy_url+=
build_obj(run2,sample2,version2,plot_path,tier2)
62 fairy_url+=
"drawopts=%s;" %draw_opts
67 fairy_url =
"%s/%s/plotfairy/" %(server,base_url)
71 fairy_url+=
"drawopts=%s;" %draw_opts
75 style_location=
"/cms-service-reldqm"
77 style_location=
"/cms-service-reldqm"
79 style_location =
"http://cms-service-reldqm.web.cern.ch/" + style_location +
"/"
82 if directory!=
None and len(directory.comparisons)>0:
84 style=
'img.fail {border:1px solid #ff0000;}\n'+\
85 'img.succes {border:1px solid #00ff00;}\n'+\
86 'img.null {border:1px solid #ffff00;}\n'+\
87 'img.skiped {border:1px solid #7a7a7a;}\n'+\
88 'a.black_link:link {color: #333333}\n'+\
89 'a.black_link:hover {color: #737373}\n'+\
90 'a.black_link:visited {color: #333333}\n'+\
91 'a.black_link:active {color: #333333}\n'
97 '<title>RelMon Summary</title>'+\
98 '<link rel="stylesheet" href="%s/style/blueprint/screen.css" type="text/css" media="screen, projection">'%style_location+\
99 '<link rel="stylesheet" href="%s/style/blueprint/print.css" type="text/css" media="print">'%style_location+\
100 '<link rel="stylesheet" href="%s/style/blueprint/plugins/fancy-type/screen.css" type="text/css" media="screen, projection">'%style_location+\
101 '<style type="text/css">'+\
102 '.rotation {display: block;-webkit-transform: rotate(-90deg);-moz-transform: rotate(-90deg); }'+\
106 '%s'%additional_header+\
109 '<div class="container">'
116 return '</div></body></html>'
122 cms_logo_url =
"http://cms-service-reldqm.web.cern.ch/cms-service-reldqm/style/CMS.gif"
124 cms_logo_url =
"cms-service-reldqm/style/CMS.gif"
125 mother_name=basename(directory.mother_dir)
128 mother_file_name=
"../RelMonSummary.html"
130 mother_file_name=
"%s.html" %(
hash_name(mother_name, hashing_flag))
132 mother_file_name=
"RelMonSummary.html"
135 mother_file_name=
"%s.html" %(
hash_name(mother_name, hashing_flag))
138 files = directory.mother_dir.split(
"/")
140 dir_name = files[-2]+files[-1]
143 dir_name = directory.mother_dir
144 mother_file_name=
"%s.html" %(
hash_name(dir_name, hashing_flag))
146 mother_file_name=
"%s.html" %directory.mother_dir.replace(
"/",
"_")
147 mother_file_name=mother_file_name.strip(
"_")
149 link_to_mother=
'<a href="%s">..</a>' %mother_file_name
150 html=
'<div class="span-20">'+\
151 '<h1>%s</h1>'%directory.name+\
153 '<div class="span-1">'+\
154 '<h1>%s</h1>'%link_to_mother+\
156 '<div class="span-3 last">'+\
157 '<img src="%s" class="top right" width="54" hight="54">'%cms_logo_url+\
160 if len(mother_name)>0:
161 html+=
'<h2 class="alt">%s</h2>'% directory.mother_dir+\
167 html=
'<p><span class="caps alt">%s comparisons:</span></p>'%directory.weight
169 if directory.n_successes>0:
170 html+=
'<li><span class="caps">Success: %.1f%% (%s)</span></li>'%(directory.get_success_rate(),directory.n_successes)
171 if directory.n_nulls>0:
172 html+=
'<li><span class="caps">Null: %.1f%% (%s)</span></li>'%(directory.get_null_rate(),directory.n_nulls)
173 if directory.n_fails>0:
174 html+=
'<li><span class="caps">Fail: %.1f%% (%s)</span></li>'%(directory.get_fail_rate(),directory.n_fails)
175 if directory.n_skiped>0:
176 html+=
'<li><span class="caps">Skipped: %.1f%% (%s)</span></li>'%(directory.get_skiped_rate(),directory.n_skiped)
177 if directory.n_missing_objs>0:
178 html+=
'<li><span class="caps">Unpaired: %s</span></li>'%(directory.n_missing_objs)
185 if len(directory.subdirs)==0:
187 html=
'<div class="span-20 colborder">'
188 html+=
'<h2 class="alt">Sub-Directories</h2>'
191 sorted_subdirs= sorted(directory.subdirs, key=
lambda subdir: subdir.name)
192 sorted_subdirs= sorted(sorted_subdirs, key=
lambda subdir: subdir.n_nulls, reverse=
True)
193 sorted_subdirs= sorted(sorted_subdirs, key=
lambda subdir: subdir.n_fails, reverse=
True)
194 for subdir
in sorted_subdirs:
197 link =
"%s.html" %(
hash_name(
join(directory.full_path,name), hashing_flag))
199 link=
"%s_%s_%s.html" %(directory.mother_dir.replace(
"/",
"_"),directory.name.replace(
"/",
"_"),name)
201 html+=
'<div class="span-4 prepend-2 colborder">'
202 html+=
'<h3>%s</h3>'%name
205 html+=
'<div class="span-7">'
209 html+=
'<div class="span-6 last">'
210 html+=
'<a href="%s"><img src="%s" class="top right"></a>'%(link,subdir.get_summary_chart_ajax(150,100))
225 for comparison
in directory.comparisons:
226 test_name=comparison.test_name
227 test_threshold=comparison.test_thr
229 if len(test_name)==0:
230 for subdir
in directory.subdirs:
231 for comparison
in subdir.comparisons:
232 test_name=comparison.test_name
233 test_threshold=comparison.test_thr
235 if len(test_name)!=0:
break
236 if len(test_name)==0:
237 for subsubdir
in subdir.subdirs:
238 for comparison
in subsubdir.comparisons:
239 test_name=comparison.test_name
240 test_threshold=comparison.test_thr
242 if len(test_name)!=0:
break
243 if len(test_name)==0:
244 for subsubsubdir
in subsubdir.subdirs:
245 for comparison
in subsubsubdir.comparisons:
246 test_name=comparison.test_name
247 test_threshold=comparison.test_thr
249 if len(test_name)!=0:
break
254 html=
'<div class="span-6">'+\
257 html+=
'<a href="%s/%s">To the DQM GUI...</a>' %(server,base_url)
260 html+=
'<div class="span-7 colborder">'+\
261 '<img src="%s" class="top right">'%directory.get_summary_chart_ajax(200,200)+\
263 '<div class="span-9 last">'
265 html+=
'<h3>Sample:</h3>'+\
266 '<p class="caps">%s</p>'%meta.sample1+\
267 '<h3>Run1 and Run2:</h3>'+\
268 '<p class="caps">%s - %s</p>'%(meta.run1,meta.run2)
269 html+=
'<h3>Releases:</h3>'+\
270 '<ul><li><p>%s</p></li><li><p>%s</p></li></ul>'%(meta.release1,meta.release2)+\
271 '<h3>Statistical Test (Pvalue threshold):</h3>'+\
272 '<ul><li><p class="caps">%s (%s)</p></li></ul>'%(test_name,test_threshold)+\
280 """Prepare the comparisons between histograms and organise them in the page.
281 Moreover create separate pages with the overlay and the single plots.
287 comparisons= filter (
lambda comp: comp.status == cat_states[category] , directory.comparisons)
288 n_comparisons=len(comparisons)
293 comparisons=sorted(comparisons, key=
lambda comp:comp.rank, reverse=is_reverse)
296 dir_abs_path=
"%s/%s/" %(directory.mother_dir,directory.name)
298 for comparison
in comparisons:
299 plot_name=comparison.img_name
300 if "http://" not in plot_name:
301 plot_name= basename(comparison.img_name)
302 class_type=
"colborder"
303 if counter==3
or tot_counter==n_comparisons:
304 class_type=
" colborder last"
305 comp_abs_path=
"%s/%s" %(dir_abs_path,comparison.name)
308 if directory.do_pngs:
309 png_link=comparison.img_name
310 html_comparisons+=
'<div class="span-6 %s"><p>%s</p>' %(class_type,comparison.name)+\
311 '<p class="alt">%s: %.2E</p>' %(comparison.test_name,comparison.rank)+\
312 '<a href="%s"><img src="%s" width="250" height="200" class="top center %s"></a></div>'%(png_link,png_link,cat_classes[category])
316 directory.meta.sample1,
317 directory.meta.sample2,
318 directory.meta.release1,
319 directory.meta.release2,
321 directory.meta.tier1,
322 directory.meta.tier2,
324 small_fairy=
fairy_url(directory.meta.run1,
326 directory.meta.sample1,
327 directory.meta.sample2,
328 directory.meta.release1,
329 directory.meta.release2,
331 directory.meta.tier1,
332 directory.meta.tier2)
335 directory.meta.sample1,
336 directory.meta.release1,
338 directory.meta.tier1,
341 directory.meta.sample2,
342 directory.meta.release2,
344 directory.meta.tier2,
347 html_comparisons+=
'<div class="span-6 %s"><p>%s</p>' %(class_type,comparison.name)+\
348 '<p class="alt">%s: %.2E</p>' %(comparison.test_name,comparison.rank)+\
349 '<div><a class="black_link" href="%s">%s</a></div>'%(single_fairy1,directory.meta.release1)+\
350 '<div><a href="%s">%s</a></div>'%(single_fairy2,directory.meta.release2)+\
351 '<a href="%s"><img src="%s" class="top center %s"></a></div>'%(big_fairy,small_fairy,cat_classes[category])
354 html_comparisons+=
"<hr>"
359 if len(html_comparisons)!=0:
360 html=
'<div class="span-20"><h2 class="alt">%s Comparisons</h2></div>' %cat_names[category]
361 html+=html_comparisons
370 imgname=
"RankSummary.png"
371 gStyle.SetPadTickY(0)
372 c=TCanvas(
"ranks",
"ranks",500,400)
376 h=directory.rank_histo
377 rank_histof=TH1F(h.GetName(),
"",h.GetNbinsX(),h.GetXaxis().GetXmin(),h.GetXaxis().GetXmax())
378 rank_histof.SetLineWidth(2)
379 for i
in xrange(0,h.GetNbinsX()+1):
380 rank_histof.SetBinContent(i,h.GetBinContent(i))
381 h.SetTitle(
"Ranks Summary;Rank;Frequency")
384 rank_histof.ComputeIntegral()
385 integral = rank_histof.GetIntegral()
386 rank_histof.SetContent(integral)
388 rightmax = 1.1*rank_histof.GetMaximum()
389 scale = gPad.GetUymax()/rightmax
390 rank_histof.SetLineColor(kRed)
391 rank_histof.Scale(scale)
392 rank_histof.Draw(
"same")
395 axis = TGaxis(gPad.GetUxmax(),gPad.GetUymin(),gPad.GetUxmax(), gPad.GetUymax(),0,rightmax,510,
"+L")
396 axis.SetTitle(
"Cumulative")
397 axis.SetTitleColor(kRed)
398 axis.SetLineColor(kRed)
399 axis.SetLabelColor(kRed)
402 rank_histof.Draw(
"Same");
407 page_html=
'<div class="span-20"><h2 class="alt"><a name="rank_summary">Ranks Summary</a></h2>'
408 page_html+=
'<div class="span-19"><img src="%s"></div>' %imgname
409 page_html+=
'</div> <a href="#top">Top...</a><hr>'
417 """Method to get missing objects from directory: in case histogram/directory was in one ROOT file but not in other
419 page_html =
"Unpaired in %s</br>"%(directory.filename1)
420 for elem
in directory.different_histograms[
'file1']:
421 page_html +=
"name: %s type:%s </br>"%(elem,directory.different_histograms[
'file1'][elem])
423 page_html +=
"Unpaired in %s</br>"%(directory.filename2)
424 for elem
in directory.different_histograms[
'file2']:
425 page_html +=
"name: %s type:%s </br>"%(elem,directory.different_histograms[
'file2'][elem])
430 """Converts a directory tree into html pages, very nice ones.
441 for subdir
in directory.subdirs:
449 for do_cat,cat
in ((directory.n_comp_fails >0,FAIL ),
450 (directory.n_comp_nulls >0,NULL ),
452 (directory.n_comp_successes >0
and directory.draw_success,SUCCESS ),
453 (directory.n_comp_skiped >0,SKIPED)):
457 if (len(directory.different_histograms[
'file1']) >0)
or (len(directory.different_histograms[
'file2']) >0):
468 page_name=directory.name
470 if len(page_name)==0:
471 page_name=
"RelMonSummary"
473 if page_name !=
"RelMonSummary":
476 ofilename =
"%s.html" %(
hash_name(
join(directory.full_path), hashing))
478 ofilename =
"RelMonSummary.html"
480 ofilename=
"%s_%s.html" %(directory.mother_dir.replace(
"/",
"_"),page_name)
481 ofilename=ofilename.strip(
"_")
483 ofile=open(ofilename,
"w")
484 ofile.write(page_html)
491 def build_gauge(total_success_rate,minrate=.80,small=False,escaped=False):
492 total_success_rate_scaled=(total_success_rate-minrate)
493 total_success_rate_scaled_repr=total_success_rate_scaled/(1-minrate)
494 if total_success_rate_scaled_repr<0:
495 total_success_rate_scaled_repr=0
500 gauge_link =
"https://chart.googleapis.com/chart?chs=%s&cht=gom"%size_s
501 gauge_link+=
"&chd=t:%2.1f"%(total_success_rate_scaled_repr*100.)
503 gauge_link+=
"&chxt=x,y&chxl=0:|%2.1f%%|1:|%i%%|%i%%|100%%"%(total_success_rate*100,minrate*100.,(1+minrate)*50)
504 gauge_link+=
"&chma=10,10,10,0"
505 img_tag=
'<img src="%s">'%gauge_link
507 img_tag=cgi.escape(img_tag)
517 if the_aggr_pairs==[]:
518 for samplename,sampledir
in dir_dict.items():
519 for subsysdirname
in sorted(sampledir.get_subdirs_dict().
keys()):
520 if not subsysdirname
in list_of_names:
521 list_of_names.append(subsysdirname)
522 the_aggr_pairs.append((subsysdirname,[subsysdirname]))
525 for cat_name, subdir_list
in the_aggr_pairs:
527 total_directory_successes=0
532 for dirname, sampledir
in dir_dict.items():
534 for subdirname,subdir
in sampledir.get_subdirs_dict().items():
535 if subdirname
in subdir_list:
536 nsucc=subdir.n_successes
537 total_successes+=nsucc
542 total_directory_successes+= float(nsucc)/weight
543 if present_subdirs.has_key(subdirname):
544 this_dir_dict=present_subdirs[subdirname]
545 this_dir_dict[
"nsucc"]+=nsucc
546 this_dir_dict[
"weight"]+=weight
548 present_subdirs[subdirname]={
"nsucc":nsucc,
"weight":weight}
550 for subsubdirname,subsubdir
in subdir.get_subdirs_dict().items():
551 for pathname
in filter(
lambda name:
"/" in name,subdir_list):
552 selected_subdirname,selected_subsubdirname = pathname.split(
"/")
553 if selected_subdirname == subdirname
and selected_subsubdirname==subsubdirname:
555 nsucc=subsubdir.n_successes
556 total_successes+=nsucc
557 weight=subsubdir.weight
560 total_directory_successes+= float(nsucc)/weight
562 if present_subdirs.has_key(subsubdirname):
563 this_dir_dict=present_subdirs[subsubdirname]
564 this_dir_dict[
"nsucc"]+=nsucc
565 this_dir_dict[
"weight"]+=weight
567 present_subdirs[subsubdirname]={
"nsucc":nsucc,
"weight":weight}
570 print "No directory of the category %s is present in the samples: skipping." %cat_name
573 average_success_rate=total_directory_successes/(total_ndirs)
574 aggr_pairs_info.append((cat_name,present_subdirs,total_weight,average_success_rate))
576 return aggr_pairs_info
588 html=
'<div class="span-20 colborder">'
589 html+=
'<h2 class="alt"><a name="categories">Categories:</a></h2>'
591 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
593 html+=
'<div class="span-3 prepend-0 colborder">'
594 html+=
'<h3>%s</h3>'%cat_name
595 html+=
'<div><span class="alt">Avg. Success rate:</span></div>'
596 html+=
'<div><span class="alt">%2.1f%%</span></div>'%(average_success_rate*100)
598 html+=
'<div class="span-9">'
600 html+=
'<div><p><span class="caps alt">DQM Directories (%i comparisons):</span></p></div>' %total_weight
601 html+=
'<div><p><span class="alt">name: succ. rate - rel. weight</span></p></div>'
603 for subdirname
in sorted(present_subdirs.keys()):
604 this_dir_dict=present_subdirs[subdirname]
605 nsucc=this_dir_dict[
"nsucc"]
606 weight=this_dir_dict[
"weight"]
607 html+=
'<li><span class="caps">%s: %2.1f%% - %2.1f%%</span></li>'%(subdirname,100*float(nsucc)/weight,100*float(weight)/total_weight)
611 html+=
'<div class="span-6 last">'
616 return html+
'<br><a href="#top">Top...</a> </div><hr>'
623 meta= dir_dict.items()[0][1].meta
624 releases=sorted([meta.release1,meta.release2])
625 latest_release=releases[1].
split(
"-")[0]
632 html=
'<div class="span-20 colborder">'
633 html+=
'<h2 class="alt"><a name="twiki_table">Twiki snipppet for release managers</a></h2>'
634 html+=
'<div>| Release | Comparison |'
635 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
640 html+=
'<div>| %s | %%ICON{arrowdot}%% | '%latest_release
644 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
646 html+=
build_gauge(average_success_rate,small=
True,escaped=
True)
649 html+=
'</div> <a href="#top">Top...</a>'
656 tooltip=
"%s\nS:%2.1f%% N:%2.1f%% F:%2.1f%% Sk:%2.1f%%" %(directory.name,directory.get_success_rate(),directory.get_null_rate(),directory.get_fail_rate(),directory.get_skiped_rate())
666 <script type="text/javascript" src="https://www.google.com/jsapi"></script>
667 <script type="text/javascript">
668 google.load("visualization", "1", {packages:["corechart"]});
669 google.setOnLoadCallback(drawChart);
670 function drawChart() {
671 var data = new google.visualization.DataTable();
672 data.addColumn('string', 'DQM Directory');
673 data.addColumn('number', 'Success Rate');
675 script+=
"data.addRows(%i);\n"%len(aggr_pairs_info)
677 for subsystname,present_directories,weight,success_rate
in aggr_pairs_info:
679 script+=
"data.setValue(%i, 0, '%s');\n"%(counter,subsystname)
680 script+=
"data.setValue(%i, 1, %2.2f);\n"%(counter,success_rate)
683 var chart = new google.visualization.BarChart(document.getElementById('%s'));
684 chart.draw(data, {width: 1024, height: %i, title: 'Success Rate',
685 vAxis: {title: '%s', titleTextStyle: {color: 'red'},textStyle: {fontSize: 14}}
689 """%(name,40*counter,title)
695 def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_flag, standalone_flag):
696 """Create a table, with as rows the directories and as columns the samples.
697 Each box in the table will contain a pie chart linking to the directory.
703 if os.path.isabs(indir):
704 title = basename(indir)
707 title=title.strip(
".")
708 title=title.strip(
"/")
712 sample_pkls=
filter(
lambda name: name.endswith(
".pkl"),listdir(
"./"))
717 for sample_pkl
in sample_pkls:
719 dir_unpickler.start()
721 dir_unpicklers.append(dir_unpickler)
724 for dir_unpickler
in dir_unpicklers:
731 for dir_unpickler
in dir_unpicklers:
733 directory=dir_unpickler.directory
736 global_dir.meta=directory.meta
737 dir_dict[dir_unpickler.filename.replace(
".pkl",
"")]=directory
738 global_dir.subdirs.append(directory)
740 global_dir.calcStats()
745 page_html =
get_page_header(standalone=standalone_flag, additional_header=directories_barchart+categories_barchart)
749 rel1,rel2=title.split(
"VS")
751 rel1=global_dir.meta.release1.split(
"-")[0]
752 rel2=global_dir.meta.release2.split(
"-")[0]
753 global_dir.meta.release1=rel1
754 global_dir.meta.release2=rel2
758 for directory
in dir_dict.values():
759 for subdir_name
in directory.get_subdirs_names():
760 all_subdirs.append(subdir_name)
761 all_subdirs=sorted(
list(set(all_subdirs)))
766 page_html+=
'<div class="span-20">'+\
767 '<h2><a name="top" href="https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon">RelMon</a> Global Report: %s</h2>'%title+\
769 '<div class="span-1">'+\
770 '<h2><a href="%s">main...</a></h2>' %relmon_mainpage+\
773 page_html+=
'<div class="span-24"><p></p></div>\n'*3
779 page_html+=
'<div class="span-24">'
780 page_html+=
'<div class="span-20 colborder"><h2 class="alt">Sections:</h2>'+\
782 '<li><a href="#summary_barchart">Summary Barchart</a></li>'+\
783 '<li><a href="#categories">Categories</a></li>'+\
784 '<li><a href="#detailed_barchart">Detailed Barchart</a></li>'+\
785 '<li><a href="#summary_table">Summary Table</a></li>'+\
786 '<li><a href="#rank_summary">Ranks Summary</a></li>'+\
787 '<li><a href="#twiki_table">Twiki Table</a></li>'+\
793 page_html+=
'<div class="span-24"><h2 class="alt"><a name="summary_barchart">Summary Barchart</a></h2></div>'
794 page_html+=
'<div id="cat_chart"></div> <a href="#top">Top...</a><hr>'
800 page_html+=
'<div class="span-24"><h2 class="alt"><a name="detailed_barchart">Detailed Barchart</a></h2></div>'
801 page_html+=
'<div id="dir_chart"></div> <a href="#top">Top...</a><hr>'
805 page_html+=
'<div class="span-24"><p></p></div>\n'
809 page_html+=
'<div class="span-24"><h2 class="alt"><a name="summary_table">Summary Table</a></h2></div>'
812 page_html+=
'<div class="span-24"><p></p></div>\n'
822 <td><div class="span-1"><p class="rotation" style="alt"><b>Summary</b></p></div></td>"""
824 sorted_samples=sorted(dir_dict.keys())
825 for sample
in sorted_samples:
835 <td><div class="span-1"><p class="rotation" style="">%s</p></div></td>"""%sample_nick
836 page_html+=
" </tr>\n"
842 page_html+=
'<td style="background-color:white;"><div class="span-1">'
844 page_html+=
'<b>Summary</b></div></td>'
845 page_html+=
'<td style="background-color:white;" class = "colborder" ><div class="span-1"><img src="%s" alt="%s"></div></td>'%(global_dir.get_summary_chart_ajax(55,55),
get_pie_tooltip(global_dir))
846 for sample
in sorted_samples:
849 summary_page_name=
"RelMonSummary.html"
851 summary_page_name=
hash_name(col.name, hashing_flag)+
".html"
852 img_link=col.get_summary_chart_ajax(55,55)
853 page_html+=
'<td style="background-color:white;"><div class="span-1">'
854 page_html+=
'<a href="%s/%s"><img src="%s" title="%s"></a></div></td>' %(sample,summary_page_name,img_link,
get_pie_tooltip(col))
858 for subdir_name
in all_subdirs:
861 page_html+=
' <td style="background-color:white;">%s</td>\n' %subdir_name
865 n_samples=len(sorted_samples)
867 for sample
in sorted_samples:
868 subdirs_dict=directory.get_subdirs_dict()
869 directory=dir_dict[sample]
870 dir_is_there=subdirs_dict.has_key(subdir_name)
872 row_summary.subdirs.append(subdirs_dict[subdir_name])
875 row_summary.calcStats()
876 img_link=row_summary.get_summary_chart_ajax(55,55)
877 page_html+=
'<td style="background-color:white;"><div class="span-1">'
878 page_html+=
'<img src="%s" title="%s"></div></td>' %(img_link,
get_pie_tooltip(row_summary))
880 for sample
in sorted_samples:
883 directory=dir_dict[sample]
884 subdirs_dict=directory.get_subdirs_dict()
887 if directory.name!=
"":
892 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+
"/"+subdir_name,hashing_flag)))
894 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+
"_"+subdir_name,hashing_flag)))
898 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+subdir_name,hashing_flag)))
899 dir_is_there=subdirs_dict.has_key(subdir_name)
901 img_link=
"https://chart.googleapis.com/chart?cht=p3&chco=C0C0C0&chs=50x50&chd=t:1"
905 img_link=subdirs_dict[subdir_name].get_summary_chart_ajax(50,50)
908 page_html+=
'<td style="background-color:white;"><div class="span-1">'
910 page_html+=
'<a href="%s">'%(summary_page)
911 page_html+=
'<img src="%s" title="%s" height=50 width=50>' %(img_link,img_tooltip)
914 page_html+=
'</div></td>'
916 page_html+=
" </tr>\n"
920 page_html+=
'</table> <a href="#top">Top...</a><hr>'
934 return hashlib.md5(file_name).hexdigest()[:10]
def make_barchart_summary
def make_categories_summary
static std::string join(char **cmd)
def get_missing_objs_section
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run