Пример #1
0
def _update_genome_from_delta_data(franken_genome, external_genome,
                                   parser_state, distance_covered,
                                   is_external_insert):
    from nasp.nasp_objects import Genome

    if distance_covered == -1:
        distance_covered = parser_state['final_pos'] - parser_state[
            'reference_pos'] + 1
        is_external_insert = True
    if distance_covered > 0:
        if parser_state['external_is_reversed']:
            matching_segment = Genome.reverse_complement(''.join(
                external_genome.get_call(
                    (parser_state['external_pos'] - distance_covered + 1),
                    parser_state['external_pos'])))
        else:
            matching_segment = ''.join(
                external_genome.get_call(
                    parser_state['external_pos'],
                    (parser_state['external_pos'] + distance_covered - 1)))
        franken_genome.set_call(matching_segment,
                                parser_state['reference_pos'], 'X')
    parser_state[
        'reference_pos'] = parser_state['reference_pos'] + distance_covered
    parser_state['external_pos'] = parser_state['external_pos'] + (
        -distance_covered
        if parser_state['external_is_reversed'] else distance_covered)
    if is_external_insert:
        parser_state['external_pos'] += -1 if parser_state[
            'external_is_reversed'] else 1
    else:
        franken_genome.set_call('.', parser_state['reference_pos'], '!')
        parser_state['reference_pos'] += 1
    return parser_state
Пример #2
0
def _update_genome_from_delta_data(franken_genome, external_genome, parser_state, distance_covered, is_external_insert):
    from nasp.nasp_objects import Genome

    if distance_covered == -1:
        distance_covered = parser_state['final_pos'] - parser_state['reference_pos'] + 1
        is_external_insert = True
    if distance_covered > 0:
        if parser_state['external_is_reversed']:
            matching_segment = Genome.reverse_complement(''.join(
                external_genome.get_call(( parser_state['external_pos'] - distance_covered + 1 ),
                                         parser_state['external_pos'])))
        else:
            matching_segment = ''.join(external_genome.get_call(parser_state['external_pos'], (
                parser_state['external_pos'] + distance_covered - 1 )))
        franken_genome.set_call(matching_segment, parser_state['reference_pos'], 'X')
    parser_state['reference_pos'] = parser_state['reference_pos'] + distance_covered
    parser_state['external_pos'] = parser_state['external_pos'] + (
        -distance_covered if parser_state['external_is_reversed'] else distance_covered )
    if is_external_insert:
        parser_state['external_pos'] += -1 if parser_state['external_is_reversed'] else 1
    else:
        franken_genome.set_call('.', parser_state['reference_pos'], '!')
        parser_state['reference_pos'] += 1
    return parser_state
Пример #3
0
class GenomeTestCase(unittest.TestCase):
    def setUp(self):
        self.genome = Genome()

    @unittest.skip("Covered by GenomeStatus.set_value()")
    def test_set_call(self):
        pass

    @unittest.skip("Covered by GenomeStatus.get_value()")
    def test_get_call(self):
        pass

    # FIXME: it should throw an exception or the prefix should be optional
    # If the prefix is missing, the contig will be appended to the previous contig
    def test__import_fasta_line_missing_prefix(self):
        expected = "SEQUENCE"
        prefix = "prefix"
        identifier = ">" + expected
        self.genome._import_fasta_line(identifier, prefix)
        self.assertListEqual([expected], self.genome.get_contigs())

    # FIXME: assertRaises a specific Exception
    def test__import_fasta_line_missing_identifier(self):
        sequence = "ABCDGHMNRSTUVWXY"
        with self.assertRaises(Exception):
            self.genome._import_fasta_line(sequence)

    # FIXME: assertRaises a specific Exception
    def test__import_fasta_line_missing_contig(self):
        with self.assertRaises(Exception):
            self.genome._import_fasta_line("SEQUENCE1")
            self.genome._import_fasta_line("SEQUENCE2")

    def test__import_fasta_line_identifier_contains_spaces(self):
        identifier = ">prefixName Description"
        prefix = "prefix"
        expected = "Name"
        self.genome._import_fasta_line(identifier, prefix)
        self.assertListEqual([expected], self.genome.get_contigs())

    @unittest.skip("Covered by _import_fasta_file tests")
    def test_import_fasta_file(self):
        pass

    def test_reverse_complement(self):
        dna_string = "ABCDGHMNRSTUVWXYabcdghmnrstuvwxy"
        expected = "rxwbaasynkdchgvtRXWBAASYNKDCHGVT"
        dna_string2 = "ABCDGHKNRSTTVWXYabcdghknrsttvwxy"
        self.assertEqual(expected, self.genome.reverse_complement(dna_string))
        self.assertEqual(dna_string2, self.genome.reverse_complement(expected))

    def test_simple_call(self):
        expected = ["A", "C", "G", "T"]
        for expect in expected:
            self.assertEqual(expect, self.genome.simple_call(expect.lower()))
        # It should check the base at position one
        self.assertEqual("A", self.genome.simple_call("agctn"))
        # It should replace uracil with thymine
        self.assertEqual("T", self.genome.simple_call("u"))
        # It should replace X with N if not allowed
        self.assertEqual("N", self.genome.simple_call("X", allow_x=False))
        self.assertEqual("X", self.genome.simple_call("X", allow_x=True))
        # It should replace . with N if deletions are not allowed
        self.assertEqual("N", self.genome.simple_call(".", allow_del=False))
        self.assertEqual(".", self.genome.simple_call(".", allow_del=True))
        # It should replace degeneracies with N
        self.assertEqual("N", self.genome.simple_call("d"))

    def test_simple_call_with_empty(self):
        self.assertEqual("N", self.genome.simple_call("", allow_del=False))
        self.assertEqual(".", self.genome.simple_call("", allow_del=True))

    def test_simple_call_with_none(self):
        self.assertEqual("N", self.genome.simple_call(None, allow_del=False))
        self.assertEqual(".", self.genome.simple_call(None, allow_del=True))
Пример #4
0
class GenomeTestCase(unittest.TestCase):
    def setUp(self):
        self.genome = Genome()

    @unittest.skip("Covered by GenomeStatus.set_value()")
    def test_set_call(self):
        pass

    @unittest.skip("Covered by GenomeStatus.get_value()")
    def test_get_call(self):
        pass

    # FIXME: it should throw an exception or the prefix should be optional
    # If the prefix is missing, the contig will be appended to the previous contig
    def test__import_fasta_line_missing_prefix(self):
        expected = 'SEQUENCE'
        prefix = 'prefix'
        identifier = '>' + expected
        self.genome._import_fasta_line(identifier, prefix)
        self.assertListEqual([expected], self.genome.get_contigs())

    # FIXME: assertRaises a specific Exception
    def test__import_fasta_line_missing_identifier(self):
        sequence = 'ABCDGHMNRSTUVWXY'
        with self.assertRaises(Exception):
            self.genome._import_fasta_line(sequence)

    # FIXME: assertRaises a specific Exception
    def test__import_fasta_line_missing_contig(self):
        with self.assertRaises(Exception):
            self.genome._import_fasta_line('SEQUENCE1')
            self.genome._import_fasta_line('SEQUENCE2')

    def test__import_fasta_line_identifier_contains_spaces(self):
        identifier = '>prefixName Description'
        prefix = 'prefix'
        expected = 'Name'
        self.genome._import_fasta_line(identifier, prefix)
        self.assertListEqual([expected], self.genome.get_contigs())

    @unittest.skip("Covered by _import_fasta_file tests")
    def test_import_fasta_file(self):
        pass

    def test_reverse_complement(self):
        dna_string = 'ABCDGHMNRSTUVWXYabcdghmnrstuvwxy'
        expected = 'rxwbaasynkdchgvtRXWBAASYNKDCHGVT'
        dna_string2 = 'ABCDGHKNRSTTVWXYabcdghknrsttvwxy'
        self.assertEqual(expected, self.genome.reverse_complement(dna_string))
        self.assertEqual(dna_string2, self.genome.reverse_complement(expected))

    def test_simple_call(self):
        expected = ['A', 'C', 'G', 'T']
        for expect in expected:
            self.assertEqual(expect, self.genome.simple_call(expect.lower()))
        # It should check the base at position one
        self.assertEqual('A', self.genome.simple_call('agctn'))
        # It should replace uracil with thymine
        self.assertEqual('T', self.genome.simple_call('u'))
        # It should replace X with N if not allowed
        self.assertEqual('N', self.genome.simple_call('X', allow_x=False))
        self.assertEqual('X', self.genome.simple_call('X', allow_x=True))
        # It should replace . with N if deletions are not allowed
        self.assertEqual('N', self.genome.simple_call('.', allow_del=False))
        self.assertEqual('.', self.genome.simple_call('.', allow_del=True))
        # It should replace degeneracies with N
        self.assertEqual('N', self.genome.simple_call('d'))

    def test_simple_call_with_empty(self):
        self.assertEqual('N', self.genome.simple_call('', allow_del=False))
        self.assertEqual('.', self.genome.simple_call('', allow_del=True))

    def test_simple_call_with_none(self):
        self.assertEqual('N', self.genome.simple_call(None, allow_del=False))
        self.assertEqual('.', self.genome.simple_call(None, allow_del=True))