def create_score_distribution_html(fits, use_correlations, dirname): ensure_dir(dirname) with interactive(False): hist_filename = 'R2-hist.png' fig = plot_score_distribution(fits,use_correlations) save_figure(fig, join(dirname,hist_filename), b_close=True) if use_correlations: scatter_filename = 'comparison-scatter.png' fig = plot_score_comparison_scatter_for_correlations(fits) save_figure(fig, join(dirname,scatter_filename), b_close=True) delta_hist_filename = 'R2-delta-hist.png' fig = plot_score_improvement_histogram_for_correlations(fits) save_figure(fig, join(dirname,delta_hist_filename), b_close=True) image_size = "50%" from jinja2 import Template import shutil html = Template(""" <html> <head> <link rel="stylesheet" type="text/css" href="score-distribution.css"> </head> <body> <center><H1>R2 Score Distribution</H1></center> <a href="{{hist_filename}}"> <img src="{{hist_filename}}" height="{{image_size}}"></a> {% if use_correlations %} <a href="{{delta_hist_filename}}"> <img src="{{delta_hist_filename}}" height="{{image_size}}"></a> <a href="{{scatter_filename}}"> <img src="{{scatter_filename}}" height="{{image_size}}"></a> {% endif %} </body> </html> """).render(**locals()) filename = join(dirname,'scores.html') with open(filename, 'w') as f: f.write(html) shutil.copy(join(resources_dir(),'score-distribution.css'), dirname)
def create_score_distribution_html(fits, use_correlations, dirname): ensure_dir(dirname) with interactive(False): hist_filename = 'R2-hist.png' fig = plot_score_distribution(fits, use_correlations) save_figure(fig, join(dirname, hist_filename), b_close=True) if use_correlations: scatter_filename = 'comparison-scatter.png' fig = plot_score_comparison_scatter_for_correlations(fits) save_figure(fig, join(dirname, scatter_filename), b_close=True) delta_hist_filename = 'R2-delta-hist.png' fig = plot_score_improvement_histogram_for_correlations(fits) save_figure(fig, join(dirname, delta_hist_filename), b_close=True) image_size = "50%" import shutil html = get_jinja_env().get_template('R2.jinja').render(**locals()) filename = join(dirname, 'scores.html') with open(filename, 'w') as f: f.write(html) shutil.copy(join(resources_dir(), 'score-distribution.css'), dirname)
def create_html(data, fitter, fits, basedir, gene_dir, exons_dir, series_dir, scores_dir, correlations_dir=None, use_correlations=False, link_to_correlation_plots=False, b_pathways=False, exons_layout=False, show_R2=True, gene_names=None, region_names=None, extra_columns=None, extra_fields_per_fit=None, extra_top_links=None, b_inline_images=False, inline_image_size=None, b_R2_dist=True, ttl=None, top_text=None, filename=None): import shutil if gene_names is None: gene_names = data.gene_names if region_names is None: region_names = data.region_names if extra_columns is None: extra_columns = [] if extra_fields_per_fit is None: extra_fields_per_fit = [] if extra_top_links is None: extra_top_links = [] if inline_image_size is None: inline_image_size = '20%' if ttl is None: ttl = 'Fits for every Gene and Region' if filename is None: filename = 'fits' if b_pathways: create_pathway_index_html(data, fitter, fits, basedir, gene_dir, series_dir, use_correlations=use_correlations, b_unique=True) create_pathway_index_html(data, fitter, fits, basedir, gene_dir, series_dir, use_correlations=use_correlations, b_unique=False) n_ranks = 3 # actually we'll have ranks of 0 to n_ranks flat_fits = {} # (gene,region) -> fit (may be None) for g in gene_names: for r in region_names: flat_fits[(g, r)] = None for dsfits in fits.itervalues(): for (g, r), fit in dsfits.iteritems(): if use_correlations: score = fit.with_correlations.LOO_score else: score = fit.LOO_score fit.score = score fit.rank = int(np.ceil(n_ranks * score)) if score > 0 else 0 flat_fits[(g, r)] = fit if exons_layout: #html is organized differently when data is on exons level scores_per_gene = {} for (g, r), fit in flat_fits.iteritems(): key = (g[:g.index(cfg.exon_separator)], r) if fit.score is None: continue if key in scores_per_gene: scores_per_gene[key].append(fit.score) else: scores_per_gene[key] = [fit.score] gene_names = np.lib.arraysetops.unique( [name[:name.index(cfg.exon_separator)] for name in gene_names]) flat_fits = {} exons_per_plot = cfg.exons_per_series_plot if 'series' in exons_dir else cfg.exons_per_plot for (g, r), scores in scores_per_gene.iteritems(): min_score, max_score = min(scores), max(scores) min_rank = int(np.ceil(n_ranks * max_score)) if max_score > 0 else 0 max_rank = int(np.ceil(n_ranks * max_score)) if max_score > 0 else 0 flat_fits[(g, r)] = Bunch( min_score=min_score, min_rank=min_rank, max_score=max_score, max_rank=max_rank, num_of_plots=len(scores) / exons_per_plot + 1) extra_fields_per_fit = list(enumerate(extra_fields_per_fit)) template_file = 'main_exons.jinja' if exons_layout else 'main.jinja' html = get_jinja_env().get_template(template_file).render(**locals()) filename = join(basedir, '{}.html'.format(filename)) print 'Saving HTML to {}'.format(filename) with open(filename, 'w') as f: f.write(html) shutil.copy(join(resources_dir(), 'fits.css'), basedir)
def create_html(data, fitter, fits, basedir, gene_dir, series_dir, scores_dir, correlations_dir = None, use_correlations = False, link_to_correlation_plots = False, b_pathways = False, show_R2 = True, gene_names=None, region_names=None, extra_columns=None, extra_fields_per_fit=None, extra_top_links=None, b_inline_images=False, inline_image_size=None, b_R2_dist=True, ttl=None, top_text=None, filename=None): from jinja2 import Template import shutil if gene_names is None: gene_names = data.gene_names if region_names is None: region_names = data.region_names if extra_columns is None: extra_columns = [] if extra_fields_per_fit is None: extra_fields_per_fit = [] if extra_top_links is None: extra_top_links = [] if inline_image_size is None: inline_image_size = '20%' if ttl is None: ttl = 'Fits for every Gene and Region' if filename is None: filename = 'fits' if b_pathways: create_pathway_index_html(data, fitter, fits, basedir, gene_dir, series_dir, use_correlations=use_correlations, b_unique=True) create_pathway_index_html(data, fitter, fits, basedir, gene_dir, series_dir, use_correlations=use_correlations, b_unique=False) n_ranks = 3 # actually we'll have ranks of 0 to n_ranks flat_fits = {} # (gene,region) -> fit (may be None) for g in gene_names: for r in region_names: flat_fits[(g,r)] = None for dsfits in fits.itervalues(): for (g,r),fit in dsfits.iteritems(): if use_correlations: score = fit.with_correlations.LOO_score else: score = fit.LOO_score fit.score = score fit.rank = int(np.ceil(n_ranks * score)) if score > 0 else 0 flat_fits[(g,r)] = fit extra_fields_per_fit = list(enumerate(extra_fields_per_fit)) html = Template(""" <html> <head> <link rel="stylesheet" type="text/css" href="fits.css"> </head> <body> <H1>{{ttl}}</H1> {% if b_R2_dist %} <P> <a href="{{scores_dir}}/scores.html">Distribution of LOO R2 scores</a> </P> {% endif %} {% if b_pathways %} <P> <a href="pathway-fits-unique.html">Breakdown of fits for 17 pathways (unique)</a><br/> <a href="pathway-fits.html">Breakdown of fits for 17 pathways (overlapping)</a> </P> {% endif %} {% for href,txt in extra_top_links %} <a href={{href}}>{{txt}}</a><br/> {% endfor %} {% if top_text %} {{ top_text }} {% endif %} <P> Column/row headings and/or cell entries may link to more details for the corresponding entity. </P> <P> <table> <th> {% for column_name,dct_vals in extra_columns %} <td class="tableExtraColumnHeading"> <b>{{column_name}}</b> </td> {% endfor %} {% for region_name in region_names %} <td class="tableHeading"> {% if link_to_correlation_plots %} <a class=noColorChange href="{{correlations_dir}}/{{region_name}}.png"><b>{{region_name}}</b></a> {% else %} <b>{{region_name}}</b> {% endif %} </td> {% endfor %} </th> {% for gene_name in gene_names %} <tr> <td> <a href="{{gene_dir}}/{{gene_name}}.png"><b>{{gene_name}}</b></a> </td> {% for column_name,dct_vals in extra_columns %} <td> {{ '%.2g' | format(dct_vals[gene_name]) }} </td> {% endfor %} {% for region_name in region_names %} <td> {% if flat_fits[(gene_name,region_name)] %} <a class=noColorChange href="{{series_dir}}/fit-{{gene_name}}-{{region_name}}.png"> {% if flat_fits[(gene_name,region_name)].score %} {% if b_inline_images %} R2 = {% endif %} {% if show_R2 %} <div class="score rank{{flat_fits[(gene_name,region_name)].rank}}"> {{flat_fits[(gene_name,region_name)].score | round(2)}} </div> {% endif %} {% for i,f in extra_fields_per_fit %} {% set txt,cls = f(flat_fits[(gene_name,region_name)]) %} {% if i>0 or show_R2 %} <br/> {% endif %} <div class="fitField {{cls}}"> <b>{{txt}}</b> </div> {% endfor %} {% else %} No Score {% endif %} {% if b_inline_images %} <br/> <img src="{{series_dir}}/fit-{{gene_name}}-{{region_name}}.png" height="{{inline_image_size}}"> {% endif %} </a> {% endif %} </td> {% endfor %} </tr> {% endfor %} </table> </P> </body> </html> """).render(**locals()) filename = join(basedir,'{}.html'.format(filename)) print 'Saving HTML to {}'.format(filename) with open(filename, 'w') as f: f.write(html) shutil.copy(join(resources_dir(),'fits.css'), basedir)