def test_constraints_text_summary(): problem = DnaOptimizationProblem(sequence="ATTGCCATATGCGC", constraints=[ EnforceGCContent(mini=0.4, maxi=0.6), AvoidPattern('ATT') ]) text = problem.constraints_text_summary() assert 'FAILURE: 1 constraints evaluations failed' in text
from dnachisel import (EnforceTranslation, DnaOptimizationProblem, random_dna_sequence, Location, EnforcePattern) # sequence = random_dna_sequence(5000, seed=123456) # sequence = random_dna_sequence(5000, seed=2) # sequence = random_dna_sequence(5000, seed=3) # for seed in [2, 3, 123456]: sequence = random_dna_sequence(5000, seed=123) constraints = [ EnforceTranslation(Location(1000, 2500)), EnforceTranslation(Location(3000, 4500)), EnforcePattern("ANANANANTT", location=Location(1100, 2150)), EnforcePattern("ATGATGCCTK", location=Location(2700, 2800)) ] problem = DnaOptimizationProblem(sequence=sequence, constraints=constraints) print(problem.constraints_text_summary()) assert not problem.all_constraints_pass() problem.resolve_constraints() assert problem.all_constraints_pass() print(problem.constraints_text_summary())
all_9mers = [sequence[i:i + 9] for i in range(len(sequence) - 9)] number_of_non_unique_9mers = sum([ count for ninemer, count in Counter(all_9mers).items() if count > 1 ]) score = -(9.0 * number_of_non_unique_9mers) / len(sequence) return SpecEvaluation(self, problem, score=score, locations=[Location(0, len(sequence))], message="Score: %.02f (%d non-unique ninemers)" % (score, number_of_non_unique_9mers)) def __str__(self): """String representation.""" return "MinimizeNinemersScore" sequence = reverse_translate(random_protein_sequence(300)) problem = DnaOptimizationProblem(sequence=sequence, constraints=[EnforceTranslation()], objectives=[MinimizeNinemersScore()]) print("\n=== Status before optimization ===") print(problem.objectives_text_summary()) problem.optimize() print("\n=== Status after optimization ===") print(problem.objectives_text_summary()) print(problem.constraints_text_summary(failed_only=True))
""" from dnachisel import DnaOptimizationProblem, random_dna_sequence, AvoidMatches from genome_collector import GenomeCollection # THIS CREATES THE ECOLI BLAST DATABASE ON YOUR MACHINE IF NOT ALREADY HERE collection = GenomeCollection() ecoli_index = collection.get_taxid_bowtie_index_path(511145, version="1") # DEFINE AND SOLVE THE PROBLEM problem = DnaOptimizationProblem( sequence=random_dna_sequence(500, seed=123), constraints=[ AvoidMatches(bowtie_index=ecoli_index, match_length=15, mismatches=1) ], ) print( "Constraints validity before optimization\n", problem.constraints_text_summary(), ) print("\nNow resolving the problems\n") problem.resolve_constraints(final_check=True) print( "Constraints validity after optimization\n", problem.constraints_text_summary(), )