Source code for dnachisel.builtin_specifications.AllowPrimer

"""Ensure that the location is primer-friendly.

AllowPrimer is a good example SpecificationSet that will create specifications
of type RepeatedKmerPattern, UniquifyAllKmers, AvoidPattern,
EnforceMeltingTemperature, AvoidHeterodimerization.
"""

from ..Specification.SpecificationSet import SpecificationSet
from ..Location import Location
from ..SequencePattern import RepeatedKmerPattern
from .UniquifyAllKmers import UniquifyAllKmers
from .AvoidPattern import AvoidPattern
from .EnforceMeltingTemperature import EnforceMeltingTemperature
from .AvoidHeterodimerization import AvoidHeterodimerization


[docs]class AllowPrimer(SpecificationSet): """Enforce various specifications for enabling primers at the location. This is useful for making sure that you will be able to conduct a PCR or sanger sequencing with a primer annealing at a particular location of the sequence. Shorthand for annotations: "primer". Parameters ---------- location The exact location where the primer will anneal, i.e. the subsequence under this location will be the sequence tmin, tmax Minimum and maximum acceptable melting temperatures in Celcius, for instance 55 and 70. When the used as an optimization objective the "target" will be (tmin + tmax)/2. max_homology_length Maximal length of any homology between the subsequence at that location and anywhere else in the whole sequence. avoid_heterodim_with List of ATGC strings representing external (primer) sequences with which the optimised location should have no annealing. max_heterodim_tm Max melting temperature of the heterodimerization between this subsegment and the other sequences in "avoid_heterodim_with" avoided_repeats Properties of the repeated patterns avoided. List of pairs (K, N) meaning "avoid K-mers repeated N times in a row". """ shorthand_name = "primer" def __init__( self, location=None, tmin=50, tmax=70, max_homology_length=6, avoid_heterodim_with=None, max_heterodim_tm=5, avoided_repeats=((2, 5), (3, 4), (4, 3)), ): location = Location.from_data(location) specs = { "unique_sequence": UniquifyAllKmers( k=max_homology_length, location=location ), "melting_temperature": EnforceMeltingTemperature( mini=tmin, maxi=tmax, location=location ), **{ "repeats_%d_%d" % (k, n): AvoidPattern( RepeatedKmerPattern(k, n), location=location ) for (k, n) in avoided_repeats }, } if avoid_heterodim_with is not None: specs["avoid_heterodimerization"] = AvoidHeterodimerization( other_primers_sequences=avoid_heterodim_with, tmax=max_heterodim_tm, location=location, ) self.register_specifications(specs)