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!", }
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!' }
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)
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")
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, }