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 "RELMON_SA" in os.environ:
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
64 fairy_url +=
";ref=ratiooverlay"
68 fairy_url =
"%s/%s/plotfairy/" %(server,base_url)
72 fairy_url+=
"drawopts=%s;" %draw_opts
76 style_location=
"/cms-service-reldqm"
78 style_location=
"/cms-service-reldqm"
80 style_location =
"http://cms-service-reldqm.web.cern.ch/" + style_location +
"/"
83 if directory!=
None and len(directory.comparisons)>0:
85 style=
'img.fail {border:1px solid #ff0000;}\n'+\
86 'img.succes {border:1px solid #00ff00;}\n'+\
87 'img.null {border:1px solid #ffff00;}\n'+\
88 'img.skiped {border:1px solid #7a7a7a;}\n'+\
89 'a.black_link:link {color: #333333}\n'+\
90 'a.black_link:hover {color: #737373}\n'+\
91 'a.black_link:visited {color: #333333}\n'+\
92 'a.black_link:active {color: #333333}\n'
98 '<title>RelMon Summary</title>'+\
99 '<link rel="stylesheet" href="%s/style/blueprint/screen.css" type="text/css" media="screen, projection">'%style_location+\
100 '<link rel="stylesheet" href="%s/style/blueprint/print.css" type="text/css" media="print">'%style_location+\
101 '<link rel="stylesheet" href="%s/style/blueprint/plugins/fancy-type/screen.css" type="text/css" media="screen, projection">'%style_location+\
102 '<style type="text/css">'+\
103 '.rotation {display: block;-webkit-transform: rotate(-90deg);-moz-transform: rotate(-90deg); }'+\
107 '%s'%additional_header+\
110 '<div class="container">'
117 return '</div></body></html>'
123 cms_logo_url =
"http://cms-service-reldqm.web.cern.ch/cms-service-reldqm/style/CMS.gif"
125 cms_logo_url =
"cms-service-reldqm/style/CMS.gif"
126 mother_name=basename(directory.mother_dir)
129 mother_file_name=
"../RelMonSummary.html"
131 mother_file_name=
"%s.html" %(
hash_name(mother_name, hashing_flag))
133 mother_file_name=
"RelMonSummary.html"
136 mother_file_name=
"%s.html" %(
hash_name(mother_name, hashing_flag))
139 files = directory.mother_dir.split(
"/")
141 dir_name = files[-2]+files[-1]
144 dir_name = directory.mother_dir
145 mother_file_name=
"%s.html" %(
hash_name(dir_name, hashing_flag))
147 mother_file_name=
"%s.html" %directory.mother_dir.replace(
"/",
"_")
148 mother_file_name=mother_file_name.strip(
"_")
150 link_to_mother=
'<a href="%s">..</a>' %mother_file_name
151 html=
'<div class="span-20">'+\
152 '<h1>%s</h1>'%directory.name+\
154 '<div class="span-1">'+\
155 '<h1>%s</h1>'%link_to_mother+\
157 '<div class="span-3 last">'+\
158 '<img src="%s" class="top right" width="54" hight="54">'%cms_logo_url+\
161 if len(mother_name)>0:
162 html+=
'<h2 class="alt">%s</h2>'% directory.mother_dir+\
168 html=
'<p><span class="caps alt">%s comparisons:</span></p>'%directory.weight
170 if directory.n_successes>0:
171 html+=
'<li><span class="caps">Success: %.1f%% (%s)</span></li>'%(directory.get_success_rate(),directory.n_successes)
172 if directory.n_nulls>0:
173 html+=
'<li><span class="caps">Null: %.1f%% (%s)</span></li>'%(directory.get_null_rate(),directory.n_nulls)
174 if directory.n_fails>0:
175 html+=
'<li><span class="caps">Fail: %.1f%% (%s)</span></li>'%(directory.get_fail_rate(),directory.n_fails)
176 if directory.n_skiped>0:
177 html+=
'<li><span class="caps">Skipped: %.1f%% (%s)</span></li>'%(directory.get_skiped_rate(),directory.n_skiped)
178 if directory.n_missing_objs>0:
179 html+=
'<li><span class="caps">Unpaired: %s</span></li>'%(directory.n_missing_objs)
186 if len(directory.subdirs)==0:
188 html=
'<div class="span-20 colborder">'
189 html+=
'<h2 class="alt">Sub-Directories</h2>'
192 sorted_subdirs= sorted(directory.subdirs, key=
lambda subdir: subdir.name)
193 sorted_subdirs= sorted(sorted_subdirs, key=
lambda subdir: subdir.n_nulls, reverse=
True)
194 sorted_subdirs= sorted(sorted_subdirs, key=
lambda subdir: subdir.n_fails, reverse=
True)
195 for subdir
in sorted_subdirs:
198 link =
"%s.html" %(
hash_name(
join(directory.full_path,name), hashing_flag))
200 link=
"%s_%s_%s.html" %(directory.mother_dir.replace(
"/",
"_"),directory.name.replace(
"/",
"_"),name)
202 html+=
'<div class="span-4 prepend-2 colborder">'
203 html+=
'<h3>%s</h3>'%name
206 html+=
'<div class="span-7">'
210 html+=
'<div class="span-6 last">'
211 html+=
'<a href="%s"><img src="%s" class="top right"></a>'%(link,subdir.get_summary_chart_ajax(150,100))
226 for comparison
in directory.comparisons:
227 test_name=comparison.test_name
228 test_threshold=comparison.test_thr
230 if len(test_name)==0:
231 for subdir
in directory.subdirs:
232 for comparison
in subdir.comparisons:
233 test_name=comparison.test_name
234 test_threshold=comparison.test_thr
236 if len(test_name)!=0:
break
237 if len(test_name)==0:
238 for subsubdir
in subdir.subdirs:
239 for comparison
in subsubdir.comparisons:
240 test_name=comparison.test_name
241 test_threshold=comparison.test_thr
243 if len(test_name)!=0:
break
244 if len(test_name)==0:
245 for subsubsubdir
in subsubdir.subdirs:
246 for comparison
in subsubsubdir.comparisons:
247 test_name=comparison.test_name
248 test_threshold=comparison.test_thr
250 if len(test_name)!=0:
break
255 html=
'<div class="span-6">'+\
258 html+=
'<a href="%s/%s">To the DQM GUI...</a>' %(server,base_url)
261 html+=
'<div class="span-7 colborder">'+\
262 '<img src="%s" class="top right">'%directory.get_summary_chart_ajax(200,200)+\
264 '<div class="span-9 last">'
266 html+=
'<h3>Sample:</h3>'+\
267 '<p class="caps">%s</p>'%meta.sample1+\
268 '<h3>Run1 and Run2:</h3>'+\
269 '<p class="caps">%s - %s</p>'%(meta.run1,meta.run2)
270 html+=
'<h3>Releases:</h3>'+\
271 '<ul><li><p>%s</p></li><li><p>%s</p></li></ul>'%(meta.release1,meta.release2)+\
272 '<h3>Statistical Test (Pvalue threshold):</h3>'+\
273 '<ul><li><p class="caps">%s (%s)</p></li></ul>'%(test_name,test_threshold)+\
281 """Prepare the comparisons between histograms and organise them in the page.
282 Moreover create separate pages with the overlay and the single plots.
288 comparisons= filter (
lambda comp: comp.status == cat_states[category] , directory.comparisons)
289 n_comparisons=len(comparisons)
294 comparisons=sorted(comparisons, key=
lambda comp:comp.rank, reverse=is_reverse)
297 dir_abs_path=
"%s/%s/" %(directory.mother_dir,directory.name)
299 for comparison
in comparisons:
300 plot_name=comparison.img_name
301 if "http://" not in plot_name:
302 plot_name= basename(comparison.img_name)
303 class_type=
"colborder"
304 if counter==3
or tot_counter==n_comparisons:
305 class_type=
" colborder last"
306 comp_abs_path=
"%s/%s" %(dir_abs_path,comparison.name)
309 if directory.do_pngs:
310 png_link=comparison.img_name
311 html_comparisons+=
'<div class="span-6 %s"><p>%s</p>' %(class_type,comparison.name)+\
312 '<p class="alt">%s: %.2E</p>' %(comparison.test_name,comparison.rank)+\
313 '<a href="%s"><img src="%s" width="250" height="200" class="top center %s"></a></div>'%(png_link,png_link,cat_classes[category])
317 directory.meta.sample1,
318 directory.meta.sample2,
319 directory.meta.release1,
320 directory.meta.release2,
322 directory.meta.tier1,
323 directory.meta.tier2,
325 small_fairy=
fairy_url(directory.meta.run1,
327 directory.meta.sample1,
328 directory.meta.sample2,
329 directory.meta.release1,
330 directory.meta.release2,
332 directory.meta.tier1,
333 directory.meta.tier2)
336 directory.meta.sample1,
337 directory.meta.release1,
339 directory.meta.tier1,
342 directory.meta.sample2,
343 directory.meta.release2,
345 directory.meta.tier2,
348 html_comparisons+=
'<div class="span-6 %s"><p>%s</p>' %(class_type,comparison.name)+\
349 '<p class="alt">%s: %.2E</p>' %(comparison.test_name,comparison.rank)+\
350 '<div><a class="black_link" href="%s">%s</a></div>'%(single_fairy1,directory.meta.release1)+\
351 '<div><a href="%s">%s</a></div>'%(single_fairy2,directory.meta.release2)+\
352 '<a href="%s"><img src="%s" class="top center %s"></a></div>'%(big_fairy,small_fairy,cat_classes[category])
355 html_comparisons+=
"<hr>"
360 if len(html_comparisons)!=0:
361 html=
'<div class="span-20"><h2 class="alt">%s Comparisons</h2></div>' %cat_names[category]
362 html+=html_comparisons
371 imgname=
"RankSummary.png"
372 gStyle.SetPadTickY(0)
373 c=TCanvas(
"ranks",
"ranks",500,400)
377 h=directory.rank_histo
378 rank_histof=TH1F(h.GetName(),
"",h.GetNbinsX(),h.GetXaxis().GetXmin(),h.GetXaxis().GetXmax())
379 rank_histof.SetLineWidth(2)
380 for i
in xrange(0,h.GetNbinsX()+1):
381 rank_histof.SetBinContent(i,h.GetBinContent(i))
382 h.SetTitle(
"Ranks Summary;Rank;Frequency")
385 rank_histof.ComputeIntegral()
386 integral = rank_histof.GetIntegral()
387 rank_histof.SetContent(integral)
389 rightmax = 1.1*rank_histof.GetMaximum()
390 scale = gPad.GetUymax()/rightmax
391 rank_histof.SetLineColor(kRed)
392 rank_histof.Scale(scale)
393 rank_histof.Draw(
"same")
396 axis = TGaxis(gPad.GetUxmax(),gPad.GetUymin(),gPad.GetUxmax(), gPad.GetUymax(),0,rightmax,510,
"+L")
397 axis.SetTitle(
"Cumulative")
398 axis.SetTitleColor(kRed)
399 axis.SetLineColor(kRed)
400 axis.SetLabelColor(kRed)
403 rank_histof.Draw(
"Same");
408 page_html=
'<div class="span-20"><h2 class="alt"><a name="rank_summary">Ranks Summary</a></h2>'
409 page_html+=
'<div class="span-19"><img src="%s"></div>' %imgname
410 page_html+=
'</div> <a href="#top">Top...</a><hr>'
418 """Method to get missing objects from directory: in case histogram/directory was in one ROOT file but not in other
420 page_html =
"Unpaired in %s</br>"%(directory.filename1)
421 for elem
in directory.different_histograms[
'file1']:
422 page_html +=
"name: %s type:%s </br>"%(elem,directory.different_histograms[
'file1'][elem])
424 page_html +=
"Unpaired in %s</br>"%(directory.filename2)
425 for elem
in directory.different_histograms[
'file2']:
426 page_html +=
"name: %s type:%s </br>"%(elem,directory.different_histograms[
'file2'][elem])
431 """Converts a directory tree into html pages, very nice ones.
442 for subdir
in directory.subdirs:
450 for do_cat,cat
in ((directory.n_comp_fails >0,FAIL ),
451 (directory.n_comp_nulls >0,NULL ),
453 (directory.n_comp_successes >0
and directory.draw_success,SUCCESS ),
454 (directory.n_comp_skiped >0,SKIPED)):
458 if (len(directory.different_histograms[
'file1']) >0)
or (len(directory.different_histograms[
'file2']) >0):
469 page_name=directory.name
471 if len(page_name)==0:
472 page_name=
"RelMonSummary"
474 if page_name !=
"RelMonSummary":
477 ofilename =
"%s.html" %(
hash_name(
join(directory.full_path), hashing))
479 ofilename =
"RelMonSummary.html"
481 ofilename=
"%s_%s.html" %(directory.mother_dir.replace(
"/",
"_"),page_name)
482 ofilename=ofilename.strip(
"_")
484 ofile=open(ofilename,
"w")
485 ofile.write(page_html)
492 def build_gauge(total_success_rate,minrate=.80,small=False,escaped=False):
493 total_success_rate_scaled=(total_success_rate-minrate)
494 total_success_rate_scaled_repr=total_success_rate_scaled/(1-minrate)
495 if total_success_rate_scaled_repr<0:
496 total_success_rate_scaled_repr=0
501 gauge_link =
"https://chart.googleapis.com/chart?chs=%s&cht=gom"%size_s
502 gauge_link+=
"&chd=t:%2.1f"%(total_success_rate_scaled_repr*100.)
504 gauge_link+=
"&chxt=x,y&chxl=0:|%2.1f%%|1:|%i%%|%i%%|100%%"%(total_success_rate*100,minrate*100.,(1+minrate)*50)
505 gauge_link+=
"&chma=10,10,10,0"
506 img_tag=
'<img src="%s">'%gauge_link
508 img_tag=cgi.escape(img_tag)
518 if the_aggr_pairs==[]:
519 for samplename,sampledir
in dir_dict.items():
520 for subsysdirname
in sorted(sampledir.get_subdirs_dict().
keys()):
521 if not subsysdirname
in list_of_names:
522 list_of_names.append(subsysdirname)
523 the_aggr_pairs.append((subsysdirname,[subsysdirname]))
526 for cat_name, subdir_list
in the_aggr_pairs:
528 total_directory_successes=0
533 for dirname, sampledir
in dir_dict.items():
535 for subdirname,subdir
in sampledir.get_subdirs_dict().items():
536 if subdirname
in subdir_list:
537 nsucc=subdir.n_successes
538 total_successes+=nsucc
543 total_directory_successes+= float(nsucc)/weight
544 if subdirname
in present_subdirs:
545 this_dir_dict=present_subdirs[subdirname]
546 this_dir_dict[
"nsucc"]+=nsucc
547 this_dir_dict[
"weight"]+=weight
549 present_subdirs[subdirname]={
"nsucc":nsucc,
"weight":weight}
551 for subsubdirname,subsubdir
in subdir.get_subdirs_dict().items():
552 for pathname
in filter(
lambda name:
"/" in name,subdir_list):
553 selected_subdirname,selected_subsubdirname = pathname.split(
"/")
554 if selected_subdirname == subdirname
and selected_subsubdirname==subsubdirname:
556 nsucc=subsubdir.n_successes
557 total_successes+=nsucc
558 weight=subsubdir.weight
561 total_directory_successes+= float(nsucc)/weight
563 if subsubdirname
in present_subdirs:
564 this_dir_dict=present_subdirs[subsubdirname]
565 this_dir_dict[
"nsucc"]+=nsucc
566 this_dir_dict[
"weight"]+=weight
568 present_subdirs[subsubdirname]={
"nsucc":nsucc,
"weight":weight}
571 print "No directory of the category %s is present in the samples: skipping." %cat_name
574 average_success_rate=total_directory_successes/(total_ndirs)
575 aggr_pairs_info.append((cat_name,present_subdirs,total_weight,average_success_rate))
577 return aggr_pairs_info
589 html=
'<div class="span-20 colborder">'
590 html+=
'<h2 class="alt"><a name="categories">Categories:</a></h2>'
592 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
594 html+=
'<div class="span-3 prepend-0 colborder">'
595 html+=
'<h3>%s</h3>'%cat_name
596 html+=
'<div><span class="alt">Avg. Success rate:</span></div>'
597 html+=
'<div><span class="alt">%2.1f%%</span></div>'%(average_success_rate*100)
599 html+=
'<div class="span-9">'
601 html+=
'<div><p><span class="caps alt">DQM Directories (%i comparisons):</span></p></div>' %total_weight
602 html+=
'<div><p><span class="alt">name: succ. rate - rel. weight</span></p></div>'
604 for subdirname
in sorted(present_subdirs.keys()):
605 this_dir_dict=present_subdirs[subdirname]
606 nsucc=this_dir_dict[
"nsucc"]
607 weight=this_dir_dict[
"weight"]
608 html+=
'<li><span class="caps">%s: %2.1f%% - %2.1f%%</span></li>'%(subdirname,100*float(nsucc)/weight,100*float(weight)/total_weight)
612 html+=
'<div class="span-6 last">'
617 return html+
'<br><a href="#top">Top...</a> </div><hr>'
624 meta= dir_dict.items()[0][1].meta
625 releases=sorted([meta.release1,meta.release2])
626 latest_release=releases[1].
split(
"-")[0]
633 html=
'<div class="span-20 colborder">'
634 html+=
'<h2 class="alt"><a name="twiki_table">Twiki snipppet for release managers</a></h2>'
635 html+=
'<div>| Release | Comparison |'
636 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
641 html+=
'<div>| %s | %%ICON{arrowdot}%% | '%latest_release
645 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
647 html+=
build_gauge(average_success_rate,small=
True,escaped=
True)
650 html+=
'</div> <a href="#top">Top...</a>'
657 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())
667 <script type="text/javascript" src="https://www.google.com/jsapi"></script>
668 <script type="text/javascript">
669 google.load("visualization", "1", {packages:["corechart"]});
670 google.setOnLoadCallback(drawChart);
671 function drawChart() {
672 var data = new google.visualization.DataTable();
673 data.addColumn('string', 'DQM Directory');
674 data.addColumn('number', 'Success Rate');
676 script+=
"data.addRows(%i);\n"%len(aggr_pairs_info)
678 for subsystname,present_directories,weight,success_rate
in aggr_pairs_info:
680 script+=
"data.setValue(%i, 0, '%s');\n"%(counter,subsystname)
681 script+=
"data.setValue(%i, 1, %2.2f);\n"%(counter,success_rate)
684 var chart = new google.visualization.BarChart(document.getElementById('%s'));
685 chart.draw(data, {width: 1024, height: %i, title: 'Success Rate',
686 vAxis: {title: '%s', titleTextStyle: {color: 'red'},textStyle: {fontSize: 14}}
690 """%(name,40*counter,title)
696 def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_flag, standalone_flag):
697 """Create a table, with as rows the directories and as columns the samples.
698 Each box in the table will contain a pie chart linking to the directory.
704 if os.path.isabs(indir):
705 title = basename(indir)
708 title=title.strip(
".")
709 title=title.strip(
"/")
713 sample_pkls=
filter(
lambda name: name.endswith(
".pkl"),listdir(
"./"))
718 for sample_pkl
in sample_pkls:
720 dir_unpickler.start()
722 dir_unpicklers.append(dir_unpickler)
725 for dir_unpickler
in dir_unpicklers:
732 for dir_unpickler
in dir_unpicklers:
734 directory=dir_unpickler.directory
737 global_dir.meta=directory.meta
738 dir_dict[dir_unpickler.filename.replace(
".pkl",
"")]=directory
739 global_dir.subdirs.append(directory)
741 global_dir.calcStats()
746 page_html =
get_page_header(standalone=standalone_flag, additional_header=directories_barchart+categories_barchart)
750 rel1,rel2=title.split(
"VS")
752 rel1=global_dir.meta.release1.split(
"-")[0]
753 rel2=global_dir.meta.release2.split(
"-")[0]
754 global_dir.meta.release1=rel1
755 global_dir.meta.release2=rel2
759 for directory
in dir_dict.values():
760 for subdir_name
in directory.get_subdirs_names():
761 all_subdirs.append(subdir_name)
762 all_subdirs=sorted(
list(set(all_subdirs)))
767 page_html+=
'<div class="span-20">'+\
768 '<h2><a name="top" href="https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon">RelMon</a> Global Report: %s</h2>'%title+\
770 '<div class="span-1">'+\
771 '<h2><a href="%s">main...</a></h2>' %relmon_mainpage+\
774 page_html+=
'<div class="span-24"><p></p></div>\n'*3
780 page_html+=
'<div class="span-24">'
781 page_html+=
'<div class="span-20 colborder"><h2 class="alt">Sections:</h2>'+\
783 '<li><a href="#summary_barchart">Summary Barchart</a></li>'+\
784 '<li><a href="#categories">Categories</a></li>'+\
785 '<li><a href="#detailed_barchart">Detailed Barchart</a></li>'+\
786 '<li><a href="#summary_table">Summary Table</a></li>'+\
787 '<li><a href="#rank_summary">Ranks Summary</a></li>'+\
788 '<li><a href="#twiki_table">Twiki Table</a></li>'+\
794 page_html+=
'<div class="span-24"><h2 class="alt"><a name="summary_barchart">Summary Barchart</a></h2></div>'
795 page_html+=
'<div id="cat_chart"></div> <a href="#top">Top...</a><hr>'
801 page_html+=
'<div class="span-24"><h2 class="alt"><a name="detailed_barchart">Detailed Barchart</a></h2></div>'
802 page_html+=
'<div id="dir_chart"></div> <a href="#top">Top...</a><hr>'
806 page_html+=
'<div class="span-24"><p></p></div>\n'
810 page_html+=
'<div class="span-24"><h2 class="alt"><a name="summary_table">Summary Table</a></h2></div>'
813 page_html+=
'<div class="span-24"><p></p></div>\n'
823 <td><div class="span-1"><p class="rotation" style="alt"><b>Summary</b></p></div></td>"""
825 sorted_samples=sorted(dir_dict.keys())
826 for sample
in sorted_samples:
836 <td><div class="span-1"><p class="rotation" style="">%s</p></div></td>"""%sample_nick
837 page_html+=
" </tr>\n"
843 page_html+=
'<td style="background-color:white;"><div class="span-1">'
845 page_html+=
'<b>Summary</b></div></td>'
846 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))
847 for sample
in sorted_samples:
850 summary_page_name=
"RelMonSummary.html"
852 summary_page_name=
hash_name(col.name, hashing_flag)+
".html"
853 img_link=col.get_summary_chart_ajax(55,55)
854 page_html+=
'<td style="background-color:white;"><div class="span-1">'
855 page_html+=
'<a href="%s/%s"><img src="%s" title="%s"></a></div></td>' %(sample,summary_page_name,img_link,
get_pie_tooltip(col))
859 for subdir_name
in all_subdirs:
862 page_html+=
' <td style="background-color:white;">%s</td>\n' %subdir_name
866 n_samples=len(sorted_samples)
868 for sample
in sorted_samples:
869 subdirs_dict=directory.get_subdirs_dict()
870 directory=dir_dict[sample]
871 dir_is_there=subdir_name
in subdirs_dict
873 row_summary.subdirs.append(subdirs_dict[subdir_name])
876 row_summary.calcStats()
877 img_link=row_summary.get_summary_chart_ajax(55,55)
878 page_html+=
'<td style="background-color:white;"><div class="span-1">'
879 page_html+=
'<img src="%s" title="%s"></div></td>' %(img_link,
get_pie_tooltip(row_summary))
881 for sample
in sorted_samples:
884 directory=dir_dict[sample]
885 subdirs_dict=directory.get_subdirs_dict()
888 if directory.name!=
"":
893 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+
"/"+subdir_name,hashing_flag)))
895 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+
"_"+subdir_name,hashing_flag)))
899 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+subdir_name,hashing_flag)))
900 dir_is_there=subdir_name
in subdirs_dict
902 img_link=
"https://chart.googleapis.com/chart?cht=p3&chco=C0C0C0&chs=50x50&chd=t:1"
906 img_link=subdirs_dict[subdir_name].get_summary_chart_ajax(50,50)
909 page_html+=
'<td style="background-color:white;"><div class="span-1">'
911 page_html+=
'<a href="%s">'%(summary_page)
912 page_html+=
'<img src="%s" title="%s" height=50 width=50>' %(img_link,img_tooltip)
915 page_html+=
'</div></td>'
917 page_html+=
" </tr>\n"
921 page_html+=
'</table> <a href="#top">Top...</a><hr>'
935 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