Ejemplo n.º 1
0
    def compute_thermofisher_good_pos(self,
                                      file_data_path,
                                      range_left=100,
                                      range_right=100):
        target = get_data_from_csv(file_data_path)[0]
        target.get_target_sequence(target.range)
        sequence = ""
        if range_right == 100:
            sequence = target.sequence[(target.range - range_left):]
        else:
            sequence = target.sequence[(
                target.range - range_left):-(target.range - range_right)]
        primers_pair = target.design_primers(range_left, sequence)
        left_primer = Primer(primers_pair["PRIMER_LEFT_0_SEQUENCE"], "left",
                             primers_pair["PRIMER_LEFT_0"][0], range_left,
                             target)
        right_primer = Primer(primers_pair["PRIMER_RIGHT_0_SEQUENCE"], "right",
                              primers_pair["PRIMER_RIGHT_0"][0], range_left,
                              target)

        self.assertTrue(
            left_primer.TFGP < target.mutation_pos < right_primer.TFGP)
        self.assertTrue(target.mutation_pos - left_primer.TFGP == range_left +
                        1 - (primers_pair["PRIMER_LEFT_0"][0] +
                             primers_pair["PRIMER_LEFT_0"][1]))
        self.assertTrue(
            right_primer.TFGP -
            target.mutation_pos == (primers_pair["PRIMER_RIGHT_0"][0] -
                                    primers_pair["PRIMER_RIGHT_0"][1]) -
            range_left + 1)
Ejemplo n.º 2
0
class TestPrimer1(ut.TestCase):
    def setUp(self):
        self.primer = Primer(7)

    def test_check_prime(self):
        self.assertTrue(self.primer.check_prime(2))
        self.assertTrue(self.primer.check_prime(3))
        self.assertTrue(self.primer.check_prime(5))
        self.assertFalse(self.primer.check_prime(10))
Ejemplo n.º 3
0
 def test_dinucleotides_repeats(self):
     """
     Tests if the function detects di-nucleotides repeats
     """
     target = get_data_from_csv(data_1)[0]
     target.get_target_sequence(target.range)
     primers_pair = target.design_primers(target.range, target.sequence)
     left_primer = Primer(primers_pair["PRIMER_LEFT_0_SEQUENCE"], "left",
                          primers_pair["PRIMER_LEFT_0"][0], target.range,
                          target)
     self.assertFalse(left_primer.dinucleotides_repeats())
     left_primer.sequence = "GTTCAGTT" + "GCGCGCGCGC" + "CACAGTGCAGCG"
     self.assertTrue(left_primer.dinucleotides_repeats())
Ejemplo n.º 4
0
    def test_eq(self):
        """
        Tests equality and inequality between two primers
        """
        target = get_data_from_csv(data_1)[0]
        target.get_target_sequence(target.range)
        primers_pair = target.design_primers(target.range, target.sequence)

        left_primer = Primer(primers_pair["PRIMER_LEFT_0_SEQUENCE"], "left",
                             primers_pair["PRIMER_LEFT_0"][0], 100, target)
        right_primer = Primer(primers_pair["PRIMER_RIGHT_0_SEQUENCE"], "right",
                              primers_pair["PRIMER_RIGHT_0"][0], 100, target)

        self.assertTrue(right_primer == right_primer)
        self.assertTrue(left_primer == left_primer)
        self.assertTrue(right_primer != left_primer)
    def create_primers_pair(self, target):
        """
        Creates a primers_pair from a target instance

        :param target: target instance

        :return: a primers_pair instance (in target sequence)
        """
        target.get_target_sequence(target.range)
        primers_pair = target.design_primers(target.range, target.sequence)

        left_primer = Primer(primers_pair["PRIMER_LEFT_0_SEQUENCE"], "left",
                             primers_pair["PRIMER_LEFT_0"][0], target.range,
                             target)
        right_primer = Primer(primers_pair["PRIMER_RIGHT_0_SEQUENCE"], "right",
                              primers_pair["PRIMER_RIGHT_0"][0], target.range,
                              target)

        return PrimersPair(left_primer, right_primer)
Ejemplo n.º 6
0
class TestPrimer2(ut.TestCase):
    def setUp(self):
        self.primer = Primer(7)

    def test_generate_0(self):
        expected = list(self.primer.generate(0))
        self.assertEqual(expected, [])

    def test_generate_num_within_limit(self):
        expected = list(self.primer.generate(2))
        self.assertEqual(expected, [2, 3])

    @ut.skip('not now')
    def test_generate_num_exact_limit(self):
        expected = list(self.primer.generate(4))
        self.assertEqual(expected, [2, 3, 5, 7])

    def test_generate_num_exceed_limit(self):
        expected = list(self.primer.generate(5))
        self.assertEqual(expected, [2, 3, 5, 7])
Ejemplo n.º 7
0
    def generate_primers(self):
        forward_homology = self.forward_homology_arm(self.fwd_ha_len)
        reverse_homology = self.reverse_homology_arm(self.rev_ha_len)

        forward_primer, reverse_primer = Primer.from_sequence(
            self.sequence,
            forward_overhang=forward_homology + self.degeneracy,
            reverse_overhang=reverse_homology.reverse_complement()
        )

        return forward_primer, reverse_primer
Ejemplo n.º 8
0
    def __init__(self,
                 sequence,
                 seqLocation,
                 alignLocation,
                 parent,
                 primer=None):
        self.parent = [parent]
        self.seqLocation = [seqLocation]
        self.alignLocation = alignLocation
        self.sequence = sequence

        if primer is None:
            self.primer = Primer(self.sequence)
        else:
            self.primer = primer
Ejemplo n.º 9
0
def find_primers(target_dna, user_parameters, search_range):
    primers = []
    if target_dna.len < 500:
        ideal_len = (16, 18)
    elif target_dna.len > 2500:
        ideal_len = (20, 24)
    else:
        ideal_len = (17, 22)
    search_start = max(0, target_dna.start-search_range)
    
    for i in range(search_start, target_dna.start+1):
        for j in range(ideal_len[0], ideal_len[1]+1):
            primer = Primer(target_dna, i, i+j)
            parameters = primer.parameters()
            
            if user_parameters[0][0] <= parameters[0] <= user_parameters[0][1] and\
               user_parameters[1][0] <= parameters[1] <= user_parameters[1][1] and\
               not parameters[3] and not parameters[4] and parameters[5]:
                if user_parameters[2] == None:
                    primers.append(primer)
                else:
                    if user_parameters[2] == parameters[2]:
                        primers.append(primer)                   
    return primers
Ejemplo n.º 10
0
    def compute_optimal_primers_pairs(self):
        """
        Computes a list of primers pairs containing primersPair instance
        Use this function to get a list of primers pairs respecting all constraints
        with no post-treatment (no BLAST, no sort,...)

        :return: a list of primersPair instance.
        """
        all_primers_pairs = []
        result = self.compute_optimal_raw_primers_pairs()
        all_raw_primers_pairs = result[0]
        ranges_left = result[1]
        SNP = self.get_snp()
        for i in range(len(all_raw_primers_pairs)):

            left_primer = Primer(
                all_raw_primers_pairs[i]["PRIMER_LEFT_0_SEQUENCE"], "left",
                all_raw_primers_pairs[i]["PRIMER_LEFT_0"][0], ranges_left[i],
                self, all_raw_primers_pairs[i]["PRIMER_LEFT_0_PENALTY"])

            right_primer = Primer(
                all_raw_primers_pairs[i]["PRIMER_RIGHT_0_SEQUENCE"], "right",
                all_raw_primers_pairs[i]["PRIMER_RIGHT_0"][0], ranges_left[i],
                self, all_raw_primers_pairs[i]["PRIMER_RIGHT_0_PENALTY"])

            if not left_primer.dinucleotides_repeats(
            ) and not right_primer.dinucleotides_repeats():
                if math.fabs(right_primer.TFGP - left_primer.TFGP) <= 90:
                    if right_primer.check_snp_in_primer(SNP) == 0 and \
                            left_primer.check_snp_in_primer(SNP) == 0:

                        primers_pair = PrimersPair(left_primer, right_primer)
                        if primers_pair not in all_primers_pairs:
                            all_primers_pairs.append(primers_pair)

        self.all_primers_pairs = all_primers_pairs
        return all_primers_pairs
Ejemplo n.º 11
0
    def test_check_snp_in_primer(self):
        """
        Tests snp and no snp in primer sequence
        """
        target = get_data_from_csv(data_1)[0]
        target.get_target_sequence(target.range)
        snp = target.get_snp()
        primers_pair = target.design_primers(target.range, target.sequence)
        left_primer = Primer(primers_pair["PRIMER_LEFT_0_SEQUENCE"], "left",
                             primers_pair["PRIMER_LEFT_0"][0], target.range,
                             target)
        right_primer = Primer(primers_pair["PRIMER_RIGHT_0_SEQUENCE"], "right",
                              primers_pair["PRIMER_RIGHT_0"][0], target.range,
                              target)

        self.assertTrue(left_primer.check_snp_in_primer(snp) == 0)
        self.assertTrue(right_primer.check_snp_in_primer(snp) == 0)
Ejemplo n.º 12
0
 def setUp(self):
     self.primer = Primer(7)
Ejemplo n.º 13
0
from primer import Primer

if __name__ == '__main__':
    prime = Primer(20)
    for p in prime.generate(9):
        print(p)