Ejemplo n.º 1
0
    def validation_analysis(self, data, clones_observations):
        validations = clones_observations.validate_all_clones(
            min_band_cutoff=data.bandsRange[0],
            max_band_cutoff=data.bandsRange[1],
            relative_tolerance=data.tolerance,
        )
        first_validation = list(validations.values())[0]
        ladder = list(first_validation.clone.digestions.values())[0].ladder

        # CREATE A ZIP WITH VALIDATION REPORTS

        zip_root = flametree.file_tree("@memory")
        self.logger(message="Generating the validation report...")
        zip_root._file("validations.pdf").write(
            clones_observations.plot_all_validations_patterns(validations))
        clones_observations.validations_summary_table(
            validations,
            zip_root._file("summary.csv").open("w"))
        if data.includeDigestionPlots:
            self.logger(message="Plotting cuts maps...")
            co = clones_observations

            plot_records_digestions(
                target=zip_root._file("digestions.pdf").open("wb"),
                ladder=ladder,
                records_and_digestions=[
                    (co.constructs_records[cst], digestion_)
                    for cst, digestions in co.constructs_digestions.items()
                    for digestion_ in digestions
                ],
            )
            # zip_root._file('digestions.pdf').write(pdf_data)

        self.logger(message="Generating the success plate map...")
        ax = clones_observations.plot_validations_plate_map(validations)
        ax.figure.savefig(
            zip_root._file("success_map.pdf").open("wb"),
            format="pdf",
            bbox_inches="tight",
        )

        self.logger(message="All done !")

        return {
            "zip_file": {
                "data": data_to_html_data(zip_root._close(), "zip"),
                "name": "validation_report.zip",
                "mimetype": "application/zip",
            },
            "success": "yeah!",
        }
Ejemplo n.º 2
0
    def validation_analysis(self, data, clones_observations):
        validations = clones_observations.validate_all_clones(
            min_band_cutoff=data.bandsRange[0],
            max_band_cutoff=data.bandsRange[1],
            relative_tolerance=data.tolerance)
        first_validation = list(validations.values())[0]
        ladder = list(first_validation.clone.digestions.values())[0].ladder

        # CREATE A ZIP WITH VALIDATION REPORTS

        zip_root = flametree.file_tree('@memory')
        self.logger(message="Generating the validation report...")
        zip_root._file('validations.pdf').write(
            clones_observations.plot_all_validations_patterns(validations))
        clones_observations.validations_summary_table(
            validations,
            zip_root._file('summary.csv').open('w'))
        if data.includeDigestionPlots:
            self.logger(message="Plotting cuts maps...")
            co = clones_observations

            plot_records_digestions(
                target=zip_root._file('digestions.pdf').open('wb'),
                ladder=ladder,
                records_and_digestions=[
                    (co.constructs_records[cst], digestion_)
                    for cst, digestions in co.constructs_digestions.items()
                    for digestion_ in digestions
                ])
            # zip_root._file('digestions.pdf').write(pdf_data)

        self.logger(message="Generating the success plate map...")
        ax = clones_observations.plot_validations_plate_map(validations)
        ax.figure.savefig(zip_root._file('success_map.pdf').open('wb'),
                          format='pdf',
                          bbox_inches='tight')

        self.logger(message="All done !")

        return {
            'zip_file': {
                'data': data_to_html_data(zip_root._close(), 'zip'),
                'name': 'validation_report.zip',
                'mimetype': 'application/zip'
            },
            'success': 'yeah!'
        }
Ejemplo n.º 3
0
def test_plot_records_digestions_ziplist(tmpdir):
    target = os.path.join(str(tmpdir), "test.pdf")
    plot_records_digestions(records_and_digestions=list(
        zip(records, digestions)),
                            ladder=LADDER_100_to_4k,
                            target=target)
Ejemplo n.º 4
0
def test_plot_records_digestions(tmpdir):
    target = os.path.join(str(tmpdir), "test.pdf")
    plot_records_digestions(records=records,
                            digestions=digestions,
                            ladder=LADDER_100_to_4k,
                            target=target)
from bandwagon import (
    plot_all_digestion_patterns,
    plot_records_digestions,
    load_record,
    LADDER_100_to_4k,
)
import os

records = [
    load_record(
        os.path.join("records", filename), id=filename, topology="circular"
    )
    for filename in sorted(os.listdir("records"))
]
digestions = [("BamHI", "NcoI"), ("BsaI", "XbaI"), ("StyI",)]

plot_records_digestions(
    records=records,
    digestions=digestions,
    ladder=LADDER_100_to_4k,
    target="plot_records_digestions_example.pdf",
)

axes = plot_all_digestion_patterns(
    records=records, digestions=digestions, ladder=LADDER_100_to_4k
)
axes[0].figure.savefig("plot_all_digestion_patterns.png", bbox_inches="tight")

Ejemplo n.º 6
0
    def work(self):

        self.logger(message="Exploring possible digestions...")

        data = self.data
        ladder = LADDERS[data.ladder]
        enzymes = data.possible_enzymes
        records = records_from_data_files(data.files)
        for record in records:
            set_record_topology(record, data.topology)
        # sequences = OrderedDict(
        #     [(record.id, str(record.seq)) for record in records]
        # )

        self.logger(message="Initializing...")

        if data.goal == "ideal":
            mini, maxi = data.bands_range
            problem = IdealDigestionsProblem(
                sequences=records,
                enzymes=enzymes,
                ladder=ladder,
                min_bands=mini,
                max_bands=maxi,
                max_enzymes_per_digestion=data.max_enzymes)
        else:
            problem = SeparatingDigestionsProblem(
                sequences=records,
                enzymes=enzymes,
                ladder=ladder,
                max_enzymes_per_digestion=data.max_enzymes,
            )
        self.logger(message="Selecting digestions...")
        score, selected_digestions = problem.select_digestions(
            max_digestions=data.max_digestions, search="full")
        bands_props = (None if not data.show_bands_sizes else dict(
            label="=size", label_fontdict=dict(size=6)))
        axes = problem.plot_digestions(
            selected_digestions,
            patterns_props={"label_fontdict": {
                "rotation": 35
            }},
            bands_props=bands_props,
        )
        figure_data = matplotlib_figure_to_svg_base64_data(axes[0].figure,
                                                           bbox_inches="tight")

        if data.plot_cuts:
            ladder = bandwagon.custom_ladder(None, ladder.bands)
            self.logger(message="Plotting cuts maps...")
            zip_root = flametree.file_tree("@memory")
            bandwagon.plot_records_digestions(
                target=zip_root._file("Details.pdf").open("wb"),
                ladder=ladder,
                records_and_digestions=[(rec, digestion) for rec in records
                                        for digestion in selected_digestions],
            )
            pdf_data = zip_root["Details.pdf"].read("rb")
            pdf_data = data_to_html_data(pdf_data, datatype="pdf")
        else:
            pdf_data = None

        return {
            "figure_data": figure_data,
            "digestions": selected_digestions,
            "score": score,
            "pdf_data": pdf_data,
        }