コード例 #1
0
ファイル: plots.py プロジェクト: ronniemaor/timefit
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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
ファイル: plots.py プロジェクト: ronniemaor/timefit
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 &nbsp; = &nbsp;
                    {% 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)