1 from __future__
import print_function
13 from os
import chdir,getcwd,listdir,makedirs
14 from os.path
import basename,join,exists
20 from ROOT
import TCanvas,gStyle,TH1F,TGaxis,gPad,kRed
24 if "RELMON_SA" in os.environ:
25 from dirstructure
import Comparison,Directory
26 from definitions
import *
27 from utils
import unpickler
29 from Utilities.RelMon.dirstructure
import Comparison,Directory
31 from Utilities.RelMon.utils
import unpickler
37 for old,new
in url_encode_dict.items():
38 url=url.replace(old,new)
42 return "w=%s;h=%s" %(h,w)
46 obj_url=
"archive/%s/%s/%s/%s/" %(run,sample,version,tier)
48 while obj_url.endswith(slash):
50 while slash*2
in obj_url:
51 obj_url=obj_url.replace(slash*2,slash)
55 obj_url=
"obj=%s;" %
build_obj_addr(run,sample,version,plot_path,tier)
58 def fairy_url(run1,run2,sample1,sample2,version1,version2,plot_path,tier1,tier2,draw_opts="",h=250,w=200):
59 fairy_url =
"%s/%s/plotfairy/overlay?" %(server,base_url)
60 fairy_url+=
build_obj(run1,sample1,version1,plot_path,tier1)
61 fairy_url+=
build_obj(run2,sample2,version2,plot_path,tier2)
63 fairy_url+=
"drawopts=%s;" %draw_opts
65 fairy_url +=
";ref=ratiooverlay" 69 fairy_url =
"%s/%s/plotfairy/" %(server,base_url)
73 fairy_url+=
"drawopts=%s;" %draw_opts
77 style_location=
"/cms-service-reldqm" 79 style_location=
"/cms-service-reldqm" 81 style_location =
"http://cms-service-reldqm.web.cern.ch/" + style_location +
"/" 84 if directory!=
None and len(directory.comparisons)>0:
86 style=
'img.fail {border:1px solid #ff0000;}\n'+\
87 'img.succes {border:1px solid #00ff00;}\n'+\
88 'img.null {border:1px solid #ffff00;}\n'+\
89 'img.skiped {border:1px solid #7a7a7a;}\n'+\
90 'a.black_link:link {color: #333333}\n'+\
91 'a.black_link:hover {color: #737373}\n'+\
92 'a.black_link:visited {color: #333333}\n'+\
93 'a.black_link:active {color: #333333}\n' 99 '<title>RelMon Summary</title>'+\
100 '<link rel="stylesheet" href="%s/style/blueprint/screen.css" type="text/css" media="screen, projection">'%style_location+\
101 '<link rel="stylesheet" href="%s/style/blueprint/print.css" type="text/css" media="print">'%style_location+\
102 '<link rel="stylesheet" href="%s/style/blueprint/plugins/fancy-type/screen.css" type="text/css" media="screen, projection">'%style_location+\
103 '<style type="text/css">'+\
104 '.rotation {display: block;-webkit-transform: rotate(-90deg);-moz-transform: rotate(-90deg); }'+\
108 '%s'%additional_header+\
111 '<div class="container">' 118 return '</div></body></html>' 124 cms_logo_url =
"http://cms-service-reldqm.web.cern.ch/cms-service-reldqm/style/CMS.gif" 126 cms_logo_url =
"cms-service-reldqm/style/CMS.gif" 127 mother_name=
basename(directory.mother_dir)
130 mother_file_name=
"../RelMonSummary.html" 132 mother_file_name=
"%s.html" %(
hash_name(mother_name, hashing_flag))
134 mother_file_name=
"RelMonSummary.html" 137 mother_file_name=
"%s.html" %(
hash_name(mother_name, hashing_flag))
140 files = directory.mother_dir.split(
"/")
142 dir_name = files[-2]+files[-1]
145 dir_name = directory.mother_dir
146 mother_file_name=
"%s.html" %(
hash_name(dir_name, hashing_flag))
148 mother_file_name=
"%s.html" %directory.mother_dir.replace(
"/",
"_")
149 mother_file_name=mother_file_name.strip(
"_")
151 link_to_mother=
'<a href="%s">..</a>' %mother_file_name
152 html=
'<div class="span-20">'+\
153 '<h1>%s</h1>'%directory.name+\
155 '<div class="span-1">'+\
156 '<h1>%s</h1>'%link_to_mother+\
158 '<div class="span-3 last">'+\
159 '<img src="%s" class="top right" width="54" hight="54">'%cms_logo_url+\
162 if len(mother_name)>0:
163 html+=
'<h2 class="alt">%s</h2>'% directory.mother_dir+\
169 html=
'<p><span class="caps alt">%s comparisons:</span></p>'%directory.weight
171 if directory.n_successes>0:
172 html+=
'<li><span class="caps">Success: %.1f%% (%s)</span></li>'%(directory.get_success_rate(),directory.n_successes)
173 if directory.n_nulls>0:
174 html+=
'<li><span class="caps">Null: %.1f%% (%s)</span></li>'%(directory.get_null_rate(),directory.n_nulls)
175 if directory.n_fails>0:
176 html+=
'<li><span class="caps">Fail: %.1f%% (%s)</span></li>'%(directory.get_fail_rate(),directory.n_fails)
177 if directory.n_skiped>0:
178 html+=
'<li><span class="caps">Skipped: %.1f%% (%s)</span></li>'%(directory.get_skiped_rate(),directory.n_skiped)
179 if directory.n_missing_objs>0:
180 html+=
'<li><span class="caps">Unpaired: %s</span></li>'%(directory.n_missing_objs)
187 if len(directory.subdirs)==0:
189 html=
'<div class="span-20 colborder">' 190 html+=
'<h2 class="alt">Sub-Directories</h2>' 193 sorted_subdirs= sorted(directory.subdirs, key=
lambda subdir: subdir.name)
194 sorted_subdirs= sorted(sorted_subdirs, key=
lambda subdir: subdir.n_nulls, reverse=
True)
195 sorted_subdirs= sorted(sorted_subdirs, key=
lambda subdir: subdir.n_fails, reverse=
True)
196 for subdir
in sorted_subdirs:
199 link =
"%s.html" %(
hash_name(
join(directory.full_path,name), hashing_flag))
201 link=
"%s_%s_%s.html" %(directory.mother_dir.replace(
"/",
"_"),directory.name.replace(
"/",
"_"),name)
203 html+=
'<div class="span-4 prepend-2 colborder">' 204 html+=
'<h3>%s</h3>'%name
207 html+=
'<div class="span-7">' 211 html+=
'<div class="span-6 last">' 212 html+=
'<a href="%s"><img src="%s" class="top right"></a>'%(link,subdir.get_summary_chart_ajax(150,100))
227 for comparison
in directory.comparisons:
228 test_name=comparison.test_name
229 test_threshold=comparison.test_thr
231 if len(test_name)==0:
232 for subdir
in directory.subdirs:
233 for comparison
in subdir.comparisons:
234 test_name=comparison.test_name
235 test_threshold=comparison.test_thr
237 if len(test_name)!=0:
break 238 if len(test_name)==0:
239 for subsubdir
in subdir.subdirs:
240 for comparison
in subsubdir.comparisons:
241 test_name=comparison.test_name
242 test_threshold=comparison.test_thr
244 if len(test_name)!=0:
break 245 if len(test_name)==0:
246 for subsubsubdir
in subsubdir.subdirs:
247 for comparison
in subsubsubdir.comparisons:
248 test_name=comparison.test_name
249 test_threshold=comparison.test_thr
251 if len(test_name)!=0:
break 256 html=
'<div class="span-6">'+\
259 html+=
'<a href="%s/%s">To the DQM GUI...</a>' %(server,base_url)
262 html+=
'<div class="span-7 colborder">'+\
263 '<img src="%s" class="top right">'%directory.get_summary_chart_ajax(200,200)+\
265 '<div class="span-9 last">' 267 html+=
'<h3>Sample:</h3>'+\
268 '<p class="caps">%s</p>'%meta.sample1+\
269 '<h3>Run1 and Run2:</h3>'+\
270 '<p class="caps">%s - %s</p>'%(meta.run1,meta.run2)
271 html+=
'<h3>Releases:</h3>'+\
272 '<ul><li><p>%s</p></li><li><p>%s</p></li></ul>'%(meta.release1,meta.release2)+\
273 '<h3>Statistical Test (Pvalue threshold):</h3>'+\
274 '<ul><li><p class="caps">%s (%s)</p></li></ul>'%(test_name,test_threshold)+\
282 """Prepare the comparisons between histograms and organise them in the page. 283 Moreover create separate pages with the overlay and the single plots. 289 comparisons= [comp
for comp
in directory.comparisons
if comp.status == cat_states[category]]
290 n_comparisons=len(comparisons)
295 comparisons=sorted(comparisons, key=
lambda comp:comp.rank, reverse=is_reverse)
298 dir_abs_path=
"%s/%s/" %(directory.mother_dir,directory.name)
300 for comparison
in comparisons:
301 plot_name=comparison.img_name
302 if "http://" not in plot_name:
303 plot_name=
basename(comparison.img_name)
304 class_type=
"colborder" 305 if counter==3
or tot_counter==n_comparisons:
306 class_type=
" colborder last" 307 comp_abs_path=
"%s/%s" %(dir_abs_path,comparison.name)
310 if directory.do_pngs:
311 png_link=comparison.img_name
312 html_comparisons+=
'<div class="span-6 %s"><p>%s</p>' %(class_type,comparison.name)+\
313 '<p class="alt">%s: %.2E</p>' %(comparison.test_name,comparison.rank)+\
314 '<a href="%s"><img src="%s" width="250" height="200" class="top center %s"></a></div>'%(png_link,png_link,cat_classes[category])
318 directory.meta.sample1,
319 directory.meta.sample2,
320 directory.meta.release1,
321 directory.meta.release2,
323 directory.meta.tier1,
324 directory.meta.tier2,
326 small_fairy=
fairy_url(directory.meta.run1,
328 directory.meta.sample1,
329 directory.meta.sample2,
330 directory.meta.release1,
331 directory.meta.release2,
333 directory.meta.tier1,
334 directory.meta.tier2)
337 directory.meta.sample1,
338 directory.meta.release1,
340 directory.meta.tier1,
343 directory.meta.sample2,
344 directory.meta.release2,
346 directory.meta.tier2,
349 html_comparisons+=
'<div class="span-6 %s"><p>%s</p>' %(class_type,comparison.name)+\
350 '<p class="alt">%s: %.2E</p>' %(comparison.test_name,comparison.rank)+\
351 '<div><a class="black_link" href="%s">%s</a></div>'%(single_fairy1,directory.meta.release1)+\
352 '<div><a href="%s">%s</a></div>'%(single_fairy2,directory.meta.release2)+\
353 '<a href="%s"><img src="%s" class="top center %s"></a></div>'%(big_fairy,small_fairy,cat_classes[category])
356 html_comparisons+=
"<hr>" 361 if len(html_comparisons)!=0:
362 html=
'<div class="span-20"><h2 class="alt">%s Comparisons</h2></div>' %cat_names[category]
363 html+=html_comparisons
372 imgname=
"RankSummary.png" 373 gStyle.SetPadTickY(0)
374 c=TCanvas(
"ranks",
"ranks",500,400)
378 h=directory.rank_histo
379 rank_histof=TH1F(h.GetName(),
"",h.GetNbinsX(),h.GetXaxis().GetXmin(),h.GetXaxis().GetXmax())
380 rank_histof.SetLineWidth(2)
381 for i
in xrange(0,h.GetNbinsX()+1):
382 rank_histof.SetBinContent(i,h.GetBinContent(i))
383 h.SetTitle(
"Ranks Summary;Rank;Frequency")
386 rank_histof.ComputeIntegral()
387 integral = rank_histof.GetIntegral()
388 rank_histof.SetContent(integral)
390 rightmax = 1.1*rank_histof.GetMaximum()
391 scale = gPad.GetUymax()/rightmax
392 rank_histof.SetLineColor(kRed)
393 rank_histof.Scale(scale)
394 rank_histof.Draw(
"same")
397 axis = TGaxis(gPad.GetUxmax(),gPad.GetUymin(),gPad.GetUxmax(), gPad.GetUymax(),0,rightmax,510,
"+L")
398 axis.SetTitle(
"Cumulative")
399 axis.SetTitleColor(kRed)
400 axis.SetLineColor(kRed)
401 axis.SetLabelColor(kRed)
404 rank_histof.Draw(
"Same");
409 page_html=
'<div class="span-20"><h2 class="alt"><a name="rank_summary">Ranks Summary</a></h2>' 410 page_html+=
'<div class="span-19"><img src="%s"></div>' %imgname
411 page_html+=
'</div> <a href="#top">Top...</a><hr>' 419 """Method to get missing objects from directory: in case histogram/directory was in one ROOT file but not in other 421 page_html =
"Unpaired in %s</br>"%(directory.filename1)
422 for elem
in directory.different_histograms[
'file1']:
423 page_html +=
"name: %s type:%s </br>"%(elem,directory.different_histograms[
'file1'][elem])
425 page_html +=
"Unpaired in %s</br>"%(directory.filename2)
426 for elem
in directory.different_histograms[
'file2']:
427 page_html +=
"name: %s type:%s </br>"%(elem,directory.different_histograms[
'file2'][elem])
432 """Converts a directory tree into html pages, very nice ones. 443 for subdir
in directory.subdirs:
451 for do_cat,cat
in ((directory.n_comp_fails >0,FAIL ),
452 (directory.n_comp_nulls >0,NULL ),
454 (directory.n_comp_successes >0
and directory.draw_success,SUCCESS ),
455 (directory.n_comp_skiped >0,SKIPED)):
459 if (len(directory.different_histograms[
'file1']) >0)
or (len(directory.different_histograms[
'file2']) >0):
470 page_name=directory.name
472 if len(page_name)==0:
473 page_name=
"RelMonSummary" 475 if page_name !=
"RelMonSummary":
478 ofilename =
"%s.html" %(
hash_name(
join(directory.full_path), hashing))
480 ofilename =
"RelMonSummary.html" 482 ofilename=
"%s_%s.html" %(directory.mother_dir.replace(
"/",
"_"),page_name)
483 ofilename=ofilename.strip(
"_")
485 ofile=open(ofilename,
"w")
486 ofile.write(page_html)
493 def build_gauge(total_success_rate,minrate=.80,small=False,escaped=False):
494 total_success_rate_scaled=(total_success_rate-minrate)
495 total_success_rate_scaled_repr=total_success_rate_scaled/(1-minrate)
496 if total_success_rate_scaled_repr<0:
497 total_success_rate_scaled_repr=0
502 gauge_link =
"https://chart.googleapis.com/chart?chs=%s&cht=gom"%size_s
503 gauge_link+=
"&chd=t:%2.1f"%(total_success_rate_scaled_repr*100.)
505 gauge_link+=
"&chxt=x,y&chxl=0:|%2.1f%%|1:|%i%%|%i%%|100%%"%(total_success_rate*100,minrate*100.,(1+minrate)*50)
506 gauge_link+=
"&chma=10,10,10,0" 507 img_tag=
'<img src="%s">'%gauge_link
509 img_tag=cgi.escape(img_tag)
519 if the_aggr_pairs==[]:
520 for samplename,sampledir
in dir_dict.items():
521 for subsysdirname
in sorted(sampledir.get_subdirs_dict().
keys()):
522 if not subsysdirname
in list_of_names:
523 list_of_names.append(subsysdirname)
524 the_aggr_pairs.append((subsysdirname,[subsysdirname]))
527 for cat_name, subdir_list
in the_aggr_pairs:
529 total_directory_successes=0
534 for dirname, sampledir
in dir_dict.items():
536 for subdirname,subdir
in sampledir.get_subdirs_dict().
items():
537 if subdirname
in subdir_list:
538 nsucc=subdir.n_successes
539 total_successes+=nsucc
544 total_directory_successes+=
float(nsucc)/weight
545 if subdirname
in present_subdirs:
546 this_dir_dict=present_subdirs[subdirname]
547 this_dir_dict[
"nsucc"]+=nsucc
548 this_dir_dict[
"weight"]+=weight
550 present_subdirs[subdirname]={
"nsucc":nsucc,
"weight":weight}
552 for subsubdirname,subsubdir
in subdir.get_subdirs_dict().
items():
553 for pathname
in [name
for name
in subdir_list
if "/" in name]:
554 selected_subdirname,selected_subsubdirname = pathname.split(
"/")
555 if selected_subdirname == subdirname
and selected_subsubdirname==subsubdirname:
557 nsucc=subsubdir.n_successes
558 total_successes+=nsucc
559 weight=subsubdir.weight
562 total_directory_successes+=
float(nsucc)/weight
564 if subsubdirname
in present_subdirs:
565 this_dir_dict=present_subdirs[subsubdirname]
566 this_dir_dict[
"nsucc"]+=nsucc
567 this_dir_dict[
"weight"]+=weight
569 present_subdirs[subsubdirname]={
"nsucc":nsucc,
"weight":weight}
572 print(
"No directory of the category %s is present in the samples: skipping." %cat_name)
575 average_success_rate=total_directory_successes/(total_ndirs)
576 aggr_pairs_info.append((cat_name,present_subdirs,total_weight,average_success_rate))
578 return aggr_pairs_info
590 html=
'<div class="span-20 colborder">' 591 html+=
'<h2 class="alt"><a name="categories">Categories:</a></h2>' 593 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
595 html+=
'<div class="span-3 prepend-0 colborder">' 596 html+=
'<h3>%s</h3>'%cat_name
597 html+=
'<div><span class="alt">Avg. Success rate:</span></div>' 598 html+=
'<div><span class="alt">%2.1f%%</span></div>'%(average_success_rate*100)
600 html+=
'<div class="span-9">' 602 html+=
'<div><p><span class="caps alt">DQM Directories (%i comparisons):</span></p></div>' %total_weight
603 html+=
'<div><p><span class="alt">name: succ. rate - rel. weight</span></p></div>' 605 for subdirname
in sorted(present_subdirs.keys()):
606 this_dir_dict=present_subdirs[subdirname]
607 nsucc=this_dir_dict[
"nsucc"]
608 weight=this_dir_dict[
"weight"]
609 html+=
'<li><span class="caps">%s: %2.1f%% - %2.1f%%</span></li>'%(subdirname,100*
float(nsucc)/weight,100*
float(weight)/total_weight)
613 html+=
'<div class="span-6 last">' 618 return html+
'<br><a href="#top">Top...</a> </div><hr>' 625 meta= dir_dict.items()[0][1].meta
626 releases=sorted([meta.release1,meta.release2])
627 latest_release=releases[1].
split(
"-")[0]
634 html=
'<div class="span-20 colborder">' 635 html+=
'<h2 class="alt"><a name="twiki_table">Twiki snipppet for release managers</a></h2>' 636 html+=
'<div>| Release | Comparison |' 637 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
642 html+=
'<div>| %s | %%ICON{arrowdot}%% | '%latest_release
646 for cat_name,present_subdirs,total_weight,average_success_rate
in aggr_pairs_info:
648 html+=
build_gauge(average_success_rate,small=
True,escaped=
True)
651 html+=
'</div> <a href="#top">Top...</a>' 658 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())
668 <script type="text/javascript" src="https://www.google.com/jsapi"></script> 669 <script type="text/javascript"> 670 google.load("visualization", "1", {packages:["corechart"]}); 671 google.setOnLoadCallback(drawChart); 672 function drawChart() { 673 var data = new google.visualization.DataTable(); 674 data.addColumn('string', 'DQM Directory'); 675 data.addColumn('number', 'Success Rate'); 677 script+=
"data.addRows(%i);\n"%len(aggr_pairs_info)
679 for subsystname,present_directories,weight,success_rate
in aggr_pairs_info:
681 script+=
"data.setValue(%i, 0, '%s');\n"%(counter,subsystname)
682 script+=
"data.setValue(%i, 1, %2.2f);\n"%(counter,success_rate)
685 var chart = new google.visualization.BarChart(document.getElementById('%s')); 686 chart.draw(data, {width: 1024, height: %i, title: 'Success Rate', 687 vAxis: {title: '%s', titleTextStyle: {color: 'red'},textStyle: {fontSize: 14}} 691 """%(name,40*counter,title)
697 def make_summary_table(indir,aggregation_rules,aggregation_rules_twiki, hashing_flag, standalone_flag):
698 """Create a table, with as rows the directories and as columns the samples. 699 Each box in the table will contain a pie chart linking to the directory. 705 if os.path.isabs(indir):
709 title=title.strip(
".")
710 title=title.strip(
"/")
714 sample_pkls=[name
for name
in listdir(
"./")
if name.endswith(
".pkl")]
719 for sample_pkl
in sample_pkls:
721 dir_unpickler.start()
723 dir_unpicklers.append(dir_unpickler)
726 for dir_unpickler
in dir_unpicklers:
733 for dir_unpickler
in dir_unpicklers:
735 directory=dir_unpickler.directory
738 global_dir.meta=directory.meta
739 dir_dict[dir_unpickler.filename.replace(
".pkl",
"")]=directory
740 global_dir.subdirs.append(directory)
742 global_dir.calcStats()
747 page_html =
get_page_header(standalone=standalone_flag, additional_header=directories_barchart+categories_barchart)
751 rel1,rel2=title.split(
"VS")
753 rel1=global_dir.meta.release1.split(
"-")[0]
754 rel2=global_dir.meta.release2.split(
"-")[0]
755 global_dir.meta.release1=rel1
756 global_dir.meta.release2=rel2
760 for directory
in dir_dict.values():
761 for subdir_name
in directory.get_subdirs_names():
762 all_subdirs.append(subdir_name)
763 all_subdirs=sorted(
list(set(all_subdirs)))
768 page_html+=
'<div class="span-20">'+\
769 '<h2><a name="top" href="https://twiki.cern.ch/twiki/bin/view/CMSPublic/RelMon">RelMon</a> Global Report: %s</h2>'%title+\
771 '<div class="span-1">'+\
772 '<h2><a href="%s">main...</a></h2>' %relmon_mainpage+\
775 page_html+=
'<div class="span-24"><p></p></div>\n'*3
781 page_html+=
'<div class="span-24">' 782 page_html+=
'<div class="span-20 colborder"><h2 class="alt">Sections:</h2>'+\
784 '<li><a href="#summary_barchart">Summary Barchart</a></li>'+\
785 '<li><a href="#categories">Categories</a></li>'+\
786 '<li><a href="#detailed_barchart">Detailed Barchart</a></li>'+\
787 '<li><a href="#summary_table">Summary Table</a></li>'+\
788 '<li><a href="#rank_summary">Ranks Summary</a></li>'+\
789 '<li><a href="#twiki_table">Twiki Table</a></li>'+\
795 page_html+=
'<div class="span-24"><h2 class="alt"><a name="summary_barchart">Summary Barchart</a></h2></div>' 796 page_html+=
'<div id="cat_chart"></div> <a href="#top">Top...</a><hr>' 802 page_html+=
'<div class="span-24"><h2 class="alt"><a name="detailed_barchart">Detailed Barchart</a></h2></div>' 803 page_html+=
'<div id="dir_chart"></div> <a href="#top">Top...</a><hr>' 807 page_html+=
'<div class="span-24"><p></p></div>\n' 811 page_html+=
'<div class="span-24"><h2 class="alt"><a name="summary_table">Summary Table</a></h2></div>' 814 page_html+=
'<div class="span-24"><p></p></div>\n' 824 <td><div class="span-1"><p class="rotation" style="alt"><b>Summary</b></p></div></td>""" 826 sorted_samples=sorted(dir_dict.keys())
827 for sample
in sorted_samples:
837 <td><div class="span-1"><p class="rotation" style="">%s</p></div></td>"""%sample_nick
838 page_html+=
" </tr>\n" 844 page_html+=
'<td style="background-color:white;"><div class="span-1">' 846 page_html+=
'<b>Summary</b></div></td>' 847 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))
848 for sample
in sorted_samples:
851 summary_page_name=
"RelMonSummary.html" 853 summary_page_name=
hash_name(col.name, hashing_flag)+
".html" 854 img_link=col.get_summary_chart_ajax(55,55)
855 page_html+=
'<td style="background-color:white;"><div class="span-1">' 856 page_html+=
'<a href="%s/%s"><img src="%s" title="%s"></a></div></td>' %(sample,summary_page_name,img_link,
get_pie_tooltip(col))
860 for subdir_name
in all_subdirs:
863 page_html+=
' <td style="background-color:white;">%s</td>\n' %subdir_name
867 n_samples=len(sorted_samples)
869 for sample
in sorted_samples:
870 subdirs_dict=directory.get_subdirs_dict()
871 directory=dir_dict[sample]
872 dir_is_there=subdir_name
in subdirs_dict
874 row_summary.subdirs.append(subdirs_dict[subdir_name])
877 row_summary.calcStats()
878 img_link=row_summary.get_summary_chart_ajax(55,55)
879 page_html+=
'<td style="background-color:white;"><div class="span-1">' 880 page_html+=
'<img src="%s" title="%s"></div></td>' %(img_link,
get_pie_tooltip(row_summary))
882 for sample
in sorted_samples:
885 directory=dir_dict[sample]
886 subdirs_dict=directory.get_subdirs_dict()
889 if directory.name!=
"":
894 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+
"/"+subdir_name,hashing_flag)))
896 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+
"_"+subdir_name,hashing_flag)))
900 summary_page=
join(sample,
"%s.html"%(
hash_name(directory.name+subdir_name,hashing_flag)))
901 dir_is_there=subdir_name
in subdirs_dict
903 img_link=
"https://chart.googleapis.com/chart?cht=p3&chco=C0C0C0&chs=50x50&chd=t:1" 907 img_link=subdirs_dict[subdir_name].get_summary_chart_ajax(50,50)
910 page_html+=
'<td style="background-color:white;"><div class="span-1">' 912 page_html+=
'<a href="%s">'%(summary_page)
913 page_html+=
'<img src="%s" title="%s" height=50 width=50>' %(img_link,img_tooltip)
916 page_html+=
'</div></td>' 918 page_html+=
" </tr>\n" 922 page_html+=
'</table> <a href="#top">Top...</a><hr>' 936 return hashlib.md5(file_name).hexdigest()[:10]
def build_gauge(total_success_rate, minrate=.80, small=False, escaped=False)
def hash_name(file_name, flag)
def get_comparisons(category, directory)
def get_subdirs_section(directory, hashing_flag)
def get_pie_tooltip(directory)
def build_obj(run, sample, version, plot_path, tier)
S & print(S &os, JobReport::InputFile const &f)
def get_aggr_pairs_info(dir_dict, the_aggr_pairs=[])
def make_summary_table(indir, aggregation_rules, aggregation_rules_twiki, hashing_flag, standalone_flag)
def plot_size(h=250, w=200)
def get_page_header(directory=None, standalone=False, additional_header="")
def get_title_section(directory, hashing_flag, standalone, depth=2)
def get_dir_stats(directory)
def make_barchart_summary(dir_dict, name="the_chart", title="DQM directory", the_aggr_pairs=[])
def get_summary_section(directory, matrix_page=True)
def directory2html(directory, hashing, standalone, depth=0)
def make_twiki_table(dir_dict, aggregation_rules)
static std::string join(char **cmd)
def make_categories_summary(dir_dict, aggregation_rules)
def fairy_url_single(run, sample, version, plot_path, tier, draw_opts="", h=250, w=200)
def fairy_url(run1, run2, sample1, sample2, version1, version2, plot_path, tier1, tier2, draw_opts="", h=250, w=200)
def build_obj_addr(run, sample, version, plot_path, tier)
def get_missing_objs_section(directory)
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
def get_rank_section(directory)