def test_eq(self):
        target = get_data_from_csv(data_1)[0]
        primers_pair1 = self.create_primers_pair(target)
        primers_pair2 = self.create_primers_pair(target)
        self.assertTrue(primers_pair1 == primers_pair2)

        target2 = get_data_from_csv(data_16)[0]
        primers_pair3 = self.create_primers_pair(target2)
        self.assertTrue(primers_pair3 != primers_pair2)
        l = [primers_pair1]
        self.assertTrue(primers_pair1 in l)
        self.assertTrue(primers_pair2 in l)
        self.assertTrue(primers_pair3 not in l)
Exemple #2
0
 def test_get_target_sequence(self):
     """
     Tests if the correct target sequence is grabbed
     """
     target = get_data_from_csv(data_1)[0]
     target.get_target_sequence(100)
     self.assertTrue(len(target.sequence) == 201)
    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)
    def test_run_blast(self):
        """
        Tests if blast hits are correct respect to our constraint.
        """
        target = get_data_from_csv(data_1)[0]
        target.compute_optimal_primers_pairs()
        blast = Blast(target.all_primers_pairs)
        u_l_primers, u_r_primers = blast.get_unique_primers()
        blast.run_blast(u_l_primers[0])
        with open(blast_output_file_path, "r") as o:
            for line in o:
                blast_result = line.split()
                self.assertTrue(float(blast_result[2]) == 100.)
                self.assertTrue(float(blast_result[-2]) < 1)
                self.assertTrue(
                    int(blast_result[3]) / float(blast_result[7]) >= 0.8)

        blast.run_blast(u_r_primers[0])
        with open(blast_output_file_path, "r") as o:
            for line in o:
                blast_result = line.split()
                self.assertTrue(float(blast_result[2]) == 100.)
                self.assertTrue(float(blast_result[-2]) < 1)
                self.assertTrue(
                    int(blast_result[3]) / float(blast_result[7]) >= 0.8)
Exemple #5
0
 def test_compute_optimal_raw_primers_pairs_helper(file_data_path):
     target = get_data_from_csv(file_data_path)[0]
     result = target.compute_optimal_raw_primers_pairs()
     raw_primers_pairs = result[0]
     ranges_left = result[1]
     for i in range(len(raw_primers_pairs)):
         variant_position = ranges_left[i] + 1
         self.primers_caract(raw_primers_pairs[i], variant_position)
Exemple #6
0
 def create_targets(self):
     """
     Creates and save targets for not re-execute the whole creation of primers pair
     execute only one time.
     """
     targets = get_data_from_csv(data1_10)
     for target in targets:
         target.compute_list_primers_pairs()
     return targets
Exemple #7
0
 def test_design_primers(self):
     """
     Tests if designed primers pair are compatible with constraints
     """
     target = get_data_from_csv(data_1)[0]
     target.get_target_sequence(100)
     primers_pair = target.design_primers(target.range, target.sequence)
     print(primers_pair)
     self.primers_caract(primers_pair, target.range)
 def add_hybridization_sites(self):
     """
     Tests succinctly the main function of BLAST class
     """
     target = get_data_from_csv(data_16)[0]
     target.compute_optimal_primers_pairs()
     primers_pair = target.all_primers_pairs
     blast = Blast(target.all_primers_pairs)
     blast.add_hybridization_sites()
     print(len(primers_pair))
Exemple #9
0
 def test_sort_by_penalty(self):
     """
     Tests if primers pairs instance have been correctly sorted by penalty.
     """
     target = get_data_from_csv(data_1)[0]
     target.compute_optimal_primers_pairs()
     target.sort_by_penalty()
     global_penalty = target.all_primers_pairs[0].penalty
     for primers_pair in target.all_primers_pairs[1:]:
         self.assertTrue(primers_pair.penalty >= global_penalty)
         global_penalty = primers_pair.penalty
Exemple #10
0
 def test_sort_by_tfgr(self):
     """
     Tests if primers pairs instance have been correctly sorted by TFGR.
     """
     target = get_data_from_csv(data_1)[0]
     target.compute_optimal_primers_pairs()
     target.sort_by_tfgr()
     amplicon_range = target.all_primers_pairs[0].amplicon_range
     for primers_pair in target.all_primers_pairs[1:]:
         self.assertTrue(primers_pair.amplicon_range >= amplicon_range)
         amplicon_range = primers_pair.amplicon_range
Exemple #11
0
 def test_remove_primers_pair_with_hybridisation(self):
     """
     Tests if the function remove all primers_pair with any hybridisation sites.
     """
     target = get_data_from_csv(data_1)[0]
     target.compute_optimal_primers_pairs()
     target.remove_primers_pair_with_hybridisation()
     for primers_pair in target.all_primers_pairs:
         self.assertTrue(
             not primers_pair.left_primer.primer_hybridization_sites)
         self.assertTrue(
             not primers_pair.right_primer.primer_hybridization_sites)
Exemple #12
0
 def test_get_data_from_csv_damaging(self):
     """
     Tests if a target with a damaging variant is correctly initialise
     """
     result = get_data_from_csv(data_21)
     self.assertTrue(len(result) == 1)
     target = result[0]
     self.assertTrue(target.no_chromosome == "chr10")
     self.assertTrue(target.mutation_pos == 89720807)
     self.assertTrue(target.var_freq == 0.2705)
     self.assertTrue(target.bio_imp == "Damaging")
     self.assertTrue(target.var_key == "CHR10_89720808_T_TA")
Exemple #13
0
 def test_get_data_from_csv_polymorphism(self):
     """
     Tests if a target with a probably polymorphism variant is correctly initialise
     """
     result = get_data_from_csv(data_1)
     self.assertTrue(len(result) == 1)
     target = result[0]
     self.assertTrue(target.no_chromosome == "chr6")
     self.assertTrue(target.mutation_pos == 117622183)
     self.assertTrue(target.var_freq == 0.5105)
     self.assertTrue(target.bio_imp == "Probably Polymorphism")
     self.assertTrue(target.var_key == "CHR6_117622184_G_C")
Exemple #14
0
 def test_get_data_from_csv_unknown(self):
     """
     Tests if a target with a unknown variant is correctly initialise
     """
     result = get_data_from_csv(data_16)
     self.assertTrue(len(result) == 1)
     target = result[0]
     self.assertTrue(target.no_chromosome == "chr11")
     self.assertTrue(target.mutation_pos == 314206)
     self.assertTrue(target.var_freq == 0.9159)
     self.assertTrue(target.bio_imp == "Unknown")
     self.assertTrue(target.var_key == "CHR11_314207_C_G")
 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())
 def test_get_unique_primers(self):
     """
     Tests if the function get correctly each unique primers and\
     each primer has not been forgotten.
     """
     target = get_data_from_csv(data_1)[0]
     target.compute_optimal_primers_pairs()
     blast = Blast(target.all_primers_pairs)
     u_l_primers, u_r_primers = blast.get_unique_primers()
     self.assertTrue(len(u_l_primers) == len(set(u_l_primers)))
     self.assertTrue(len(u_r_primers) == len(set(u_r_primers)))
     for primers_pair in target.all_primers_pairs:
         self.assertTrue(primers_pair.right_primer in u_r_primers)
         self.assertTrue(primers_pair.left_primer in u_l_primers)
    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 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)
Exemple #19
0
def launch(path_of_data_file):
    """
    Launches the algorithm.

    :param path_of_data_file: the path of the data file

    :return: nothing but creates a bed file corresponding to good chromosomic range.
    """
    print("Welcome to primers design program!")
    print("-------------------------------------------------------------")
    print("Documentation of the program in pydoc/_build/html/index.html")
    print("-------------------------------------------------------------")
    print("Processing...")
    start_time = time.time()
    targets = get_data_from_csv(path_of_data_file)
    size = len(targets)
    res = []
    good_targets = []
    for target in targets:
        target.compute_list_primers_pairs()
        if target.all_primers_pairs:
            print("target design successfully: " + target.no_chromosome + " " +
                  str(target.mutation_pos) + " " + target.bio_imp)
            res.append(target.all_primers_pairs[0])
            good_targets.append(target)
        else:
            print("fail to design target: " + target.no_chromosome + " " +
                  str(target.mutation_pos) + " " + target.bio_imp)
    if len(good_targets) > 1:
        pt = PostTreatments(good_targets)
        if overlap:
            print("checking overlap ...")
            res = pt.check_overlap()
        elif size > 1 and multiplex:
            print("multiplex in progress ...")
            res = pt.run_multiplex()
        elif size > 1 and pseudo_multiplex:
            print("pseudo multiplex in progress ...")
            res = pt.run_pseudo_multiplex()

    if not multiplex:
        create_bed_file_chromosome(res)
    if multiplex:
        create_bed_file_chromosome(res.components)
    print("program finish in: " + seconds_to_str(time.time() - start_time))
    def test_search_hybridization_site_rr_ll(self):
        """
        Tests if the function detects well rr or ll hybridisation
        Tests the function is_primers_compatible as well.
        """
        target = get_data_from_csv(data_16)[0]
        target.compute_optimal_primers_pairs()
        blast = Blast(target.all_primers_pairs)
        u_l_primers, u_r_primers = blast.get_unique_primers()
        blast.parse_blast_output(u_l_primers[0])
        self.assertFalse(blast.search_hybridization_site_rr_ll(u_l_primers[0]))
        u_l_primers[0].primer_hybridization_sites["chr20"].append(
            [50283620, 50283640, 1])
        self.assertTrue(blast.search_hybridization_site_rr_ll(u_l_primers[0]))

        blast.parse_blast_output(u_r_primers[0])
        self.assertFalse(blast.search_hybridization_site_rr_ll(u_r_primers[0]))
        u_r_primers[0].primer_hybridization_sites["chr11"].append(
            [60672820, 60672805, -1])
        self.assertTrue(blast.search_hybridization_site_rr_ll(u_r_primers[0]))
    def test_search_hybridization_sites_lr_rl(self):
        """
        Tests if the function detects well lr or rl hybridisation
        """
        target = get_data_from_csv(data_16)[0]
        target.compute_optimal_primers_pairs()
        blast = Blast(target.all_primers_pairs)
        u_l_primers, u_r_primers = blast.get_unique_primers()
        blast.parse_blast_output(u_l_primers[0])
        blast.parse_blast_output(u_r_primers[0])
        self.assertFalse(
            blast.search_hybridization_sites_lr_rl(
                u_l_primers[0].primer_hybridization_sites,
                u_r_primers[0].primer_hybridization_sites))

        u_r_primers[0].primer_hybridization_sites["chr20"] = [[
            50283620, 50283640, 1
        ]]
        self.assertTrue(
            blast.search_hybridization_sites_lr_rl(
                u_l_primers[0].primer_hybridization_sites,
                u_r_primers[0].primer_hybridization_sites))