def degenerate(self, method=None): """ Parameters: method (str): S, Z, SZ, normal Returns: (str): Degenerated sequence using Zwick et al methods. """ self._check_reading_frame() self._correct_seq_based_on_reading_frame() if not method: table = self.table method = 'normal' else: table = 1 method = method res = Degenera(dna=str(self.seq), table=table, method=method) res.degenerate() return res.degenerated
# # Author: Gregory Mendez # # This script uses the degenerate_dna python library from https://github.com/carlosp420/degenerate-dna # # This script takes an input fasta file and converts the third codon position to # degenerate code that could produce the same amino acid for that codon. # # Example: # degenerate.py /home/mendezg/greenalgae/translations/cds/env10972015_1.cds from Bio import SeqIO from degenerate_dna import Degenera import argparse # Argument Parser parser = argparse.ArgumentParser(description = 'This script uses the degenerate_dna python library to substitute the third codon position of input DNA sequences with degenerate codes for the same codon.') parser.add_argument('--dna', required=True, help='The full file path to the desired input DNA sequence in FASTA format.') args = parser.parse_args() DNA = args.dna OUTPUT_FILE = ( "%s.deg.fas" % DNA.split("/")[-1].split(".")[0] ) INPUT_HANDLE = open(DNA, "rU") FASTA_SEQUENCES = SeqIO.parse(INPUT_HANDLE,'fasta') with open (OUTPUT_FILE, 'a') as FILE: for SeqRecord in FASTA_SEQUENCES: res = Degenera(dna=SeqRecord.seq, table=1, method='S') res.degenerate() DEG = res.degenerated FILE.write( ">%s\n%s\n" % ( SeqRecord.id, DEG ) )
class TestApi(unittest.TestCase): def setUp(self): self.dna = "AGTTCTTTACTACGTAGA" self.res = Degenera(dna=self.dna) def test_standard_code_normal(self): self.res.table = 1 self.res.method = "normal" self.res.degenerate() result = self.res.degenerated expected = "AGYTCNYTNYTNMGNMGN" self.assertEqual(expected, result) def test_standard_code_S(self): self.res.table = 1 self.res.method = "S" self.res.degenerate() result = self.res.degenerated expected = "AGYAGYYTNYTNMGNMGN" self.assertEqual(expected, result) def test_standard_code_Z(self): self.res.table = 1 self.res.method = "Z" self.res.degenerate() result = self.res.degenerated expected = "TCNTCNYTNYTNMGNMGN" self.assertEqual(expected, result) def test_standard_code_SZ(self): self.res.table = 1 self.res.method = "SZ" self.res.degenerate() result = self.res.degenerated expected = "NNNNNNYTNYTNMGNMGN" self.assertEqual(expected, result) def test_degenerate_code_nt1(self): self.res.dna = "ANN" self.res.table = 1 self.res.method = "SZ" self.res.degenerate() result = self.res.degenerated expected = "NNN" self.assertEqual(expected, result) def test_long_seq_table_1_normal(self): self.res.dna = "??????????aAGACGTGTTGGATGAG?TTGCCGACCTTCCGATCTGTCGGCGACGCCTTGAAAGATGCCTTCGAyGGAGCGTCGCGGGTCATGATGCCC---AACACAGAGTTGGAAGCGCCC---GCT---CAGCGGAACGAT---GCGGCTCCGCACAGAGTCCCGCGAAGAGATCGATACAGATTCCAACTTCGACCGCACAATCCTGACCATAAAACACCCGGGGACAAGGACCTAGTATACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGAGACTGGGCATTCCCGGTACGCACGGGCGTTCCTGCAACGACACGAGCATCGGCGTCGATGGCTGCGACCTGATGTGCTGTGGCCGGGGGTACCGGACTGAGACGATGTTTGTCGTCGA" self.res.table = 1 self.res.method = "normal" self.res.degenerate() result = self.res.degenerated expected = "NNNNNNNNNNNNGAYGTNYTNGAYGARNNNGCNGAYYTNCCNATHTGYMGNMGNMGNYTNGARMGNTGYYTNMGNNNNAGYGTNGCNGGNCAYGAYGCNC---AACAYMGNGTNGGNAGYGCNC---GCT---CAGCNGARMGNT---GCGGNTCNGCNCARAGYCCNGCNAARMGNTCNATHCARATHCCNACNTCNACNGCNCARTCNTGACCNTAAAAYACNMGNGGNCARGGNCCNAGYATHYTNGGNATHATHGCNGGNTTYYTNMGNAARGARCCNGARACNGGNCAYTCNMGNTAYGCNMGNGCNTTYYTNCARMGNCAYGARCAYMGNMGNMGNTGGYTNMGNCCNGAYGTNYTNTGGCCNGGNGTNCCNGAYTGAGAYGAYGTNTGYMGNMGN" self.assertEqual(expected, result) def test_long_seq_table_1_S(self): self.res.dna = "??????????aAGACGTGTTGGATGAG?TTGCCGACCTTCCGATCTGTCGGCGACGCCTTGAAAGATGCCTTCGAyGGAGCGTCGCGGGTCATGATGCCC---AACACAGAGTTGGAAGCGCCC---GCT---CAGCGGAACGAT---GCGGCTCCGCACAGAGTCCCGCGAAGAGATCGATACAGATTCCAACTTCGACCGCACAATCCTGACCATAAAACACCCGGGGACAAGGACCTAGTATACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGAGACTGGGCATTCCCGGTACGCACGGGCGTTCCTGCAACGACACGAGCATCGGCGTCGATGGCTGCGACCTGATGTGCTGTGGCCGGGGGTACCGGACTGAGACGATGTTTGTCGTCGA" self.res.table = 1 self.res.method = "S" self.res.degenerate() result = self.res.degenerated expected = "NNNNNNNNNNNNGAYGTNYTNGAYGARNNNGCNGAYYTNCCNATHTGYMGNMGNMGNYTNGARMGNTGYYTNMGNNNNAGYGTNGCNGGNCAYGAYGCNC---AACAYMGNGTNGGNAGYGCNC---GCT---CAGCNGARMGNT---GCGGNAGYGCNCARAGYCCNGCNAARMGNAGYATHCARATHCCNACNAGYACNGCNCARAGYTGACCNTAAAAYACNMGNGGNCARGGNCCNAGYATHYTNGGNATHATHGCNGGNTTYYTNMGNAARGARCCNGARACNGGNCAYAGYMGNTAYGCNMGNGCNTTYYTNCARMGNCAYGARCAYMGNMGNMGNTGGYTNMGNCCNGAYGTNYTNTGGCCNGGNGTNCCNGAYTGAGAYGAYGTNTGYMGNMGN" self.assertEqual(expected, result) def test_long_seq_table_1_Z(self): self.res.dna = "??????????aAGACGTGTTGGATGAG?TTGCCGACCTTCCGATCTGTCGGCGACGCCTTGAAAGATGCCTTCGAyGGAGCGTCGCGGGTCATGATGCCC---AACACAGAGTTGGAAGCGCCC---GCT---CAGCGGAACGAT---GCGGCTCCGCACAGAGTCCCGCGAAGAGATCGATACAGATTCCAACTTCGACCGCACAATCCTGACCATAAAACACCCGGGGACAAGGACCTAGTATACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGAGACTGGGCATTCCCGGTACGCACGGGCGTTCCTGCAACGACACGAGCATCGGCGTCGATGGCTGCGACCTGATGTGCTGTGGCCGGGGGTACCGGACTGAGACGATGTTTGTCGTCGA" self.res.table = 1 self.res.method = "Z" self.res.degenerate() result = self.res.degenerated expected = "NNNNNNNNNNNNGAYGTNYTNGAYGARNNNGCNGAYYTNCCNATHTGYMGNMGNMGNYTNGARMGNTGYYTNMGNNNNTCNGTNGCNGGNCAYGAYGCNC---AACAYMGNGTNGGNTCNGCNC---GCT---CAGCNGARMGNT---GCGGNTCNGCNCARTCNCCNGCNAARMGNTCNATHCARATHCCNACNTCNACNGCNCARTCNTGACCNTAAAAYACNMGNGGNCARGGNCCNTCNATHYTNGGNATHATHGCNGGNTTYYTNMGNAARGARCCNGARACNGGNCAYTCNMGNTAYGCNMGNGCNTTYYTNCARMGNCAYGARCAYMGNMGNMGNTGGYTNMGNCCNGAYGTNYTNTGGCCNGGNGTNCCNGAYTGAGAYGAYGTNTGYMGNMGN" self.assertEqual(expected, result) def test_long_seq_table_1_SZ(self): self.res.dna = "??????????aAGACGTGTTGGATGAG?TTGCCGACCTTCCGATCTGTCGGCGACGCCTTGAAAGATGCCTTCGAyGGAGCGTCGCGGGTCATGATGCCC---AACACAGAGTTGGAAGCGCCC---GCT---CAGCGGAACGAT---GCGGCTCCGCACAGAGTCCCGCGAAGAGATCGATACAGATTCCAACTTCGACCGCACAATCCTGACCATAAAACACCCGGGGACAAGGACCTAGTATACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGAGACTGGGCATTCCCGGTACGCACGGGCGTTCCTGCAACGACACGAGCATCGGCGTCGATGGCTGCGACCTGATGTGCTGTGGCCGGGGGTACCGGACTGAGACGATGTTTGTCGTCGA" self.res.table = 1 self.res.method = "SZ" self.res.degenerate() result = self.res.degenerated expected = "NNNNNNNNNNNNGAYGTNYTNGAYGARNNNGCNGAYYTNCCNATHTGYMGNMGNMGNYTNGARMGNTGYYTNMGNNNNNNNGTNGCNGGNCAYGAYGCNC---AACAYMGNGTNGGNNNNGCNC---GCT---CAGCNGARMGNT---GCGGNNNNGCNCARNNNCCNGCNAARMGNNNNATHCARATHCCNACNNNNACNGCNCARNNNTGACCNTAAAAYACNMGNGGNCARGGNCCNNNNATHYTNGGNATHATHGCNGGNTTYYTNMGNAARGARCCNGARACNGGNCAYNNNMGNTAYGCNMGNGCNTTYYTNCARMGNCAYGARCAYMGNMGNMGNTGGYTNMGNCCNGAYGTNYTNTGGCCNGGNGTNCCNGAYTGAGAYGAYGTNTGYMGNMGN" self.assertEqual(expected, result) def test_long_seq_table_5(self): self.res.dna = "??????????aAGACGTGTTGGATGAG?TTGCCGACCTTCCGATCTGTCGGCGACGCCTTGAAAGATGCCTTCGAyGGAGCGTCGCGGGTCATGATGCCC---AACACAGAGTTGGAAGCGCCC---GCT---CAGCGGAACGAT---GCGGCTCCGCACAGAGTCCCGCGAAGAGATCGATACAGATTCCAACTTCGACCGCACAATCCTGACCATAAAACACCCGGGGACAAGGACCTAGTATACTTGGAATCATCGCCGGGTTTCTGCGAAAAGAACCCGAGACTGGGCATTCCCGGTACGCACGGGCGTTCCTGCAACGACACGAGCATCGGCGTCGATGGCTGCGACCTGATGTGCTGTGGCCGGGGGTACCGGACTGAGACGATGTTTGTCGTCGA" self.res.table = 5 self.res.degenerate() result = self.res.degenerated expected = "NNNNNNNNNNNNGAYGTNYTNGAYGARNNNGCNGAYYTNCCNATYTGYCGNCGNCGNYTNGARAGNTGYYTNCGNNNNAGNGTNGCNGGNCAYGAYGCNC---AACAYAGNGTNGGNAGNGCNC---GCT---CAGCNGARCGNT---GCGGNTCNGCNCARAGNCCNGCNAARAGNTCNATRCARATYCCNACNTCNACNGCNCARTCNTGRCCNTAAAAYACNCGNGGNCARGGNCCNAGNATRYTNGGNATYATYGCNGGNTTYYTNCGNAARGARCCNGARACNGGNCAYTCNCGNTAYGCNCGNGCNTTYYTNCARCGNCAYGARCAYCGNCGNCGNTGRYTNCGNCCNGAYGTNYTNTGRCCNGGNGTNCCNGAYTGRGAYGAYGTNTGYCGNCGN" self.assertEqual(expected, result) def test_long_seq_table_5_normal(self): self.res.dna = "?ACTTTATATTTTATTTTTGGAATTTGAGCAG" self.res.table = 5 self.res.method = "normal" self.res.degenerate() result = self.res.degenerated expected = "NNNTTYATRTTYTAYTTYTGRAAYYTNAGNAG" self.assertEqual(expected, result) def test_incomplete_seq_table_5(self): self.res.dna = "?ACTTTATATTTTATTTTTGGAATTTGAGCAG" self.res.table = 5 self.res.degenerate() result = self.res.degenerated expected = "NNNTTYATRTTYTAYTTYTGRAAYYTNAGNAG" self.assertEqual(expected, result) def test_incomplete2_seq_table_5(self): self.res.dna = "ACTTTATATTTTATTTTTGGAATTTGAGCAG" self.res.table = 5 self.res.degenerate() result = self.res.degenerated expected = "ACNYTNTAYTTYATYTTYGGNATYTGRGCNG" self.assertEqual(expected, result)
def setUp(self): self.dna = "AGTTCTTTACTACGTAGA" self.res = Degenera(dna=self.dna)
# # Example: # degenerate.py /home/mendezg/greenalgae/translations/cds/env10972015_1.cds from Bio import SeqIO from degenerate_dna import Degenera import argparse # Argument Parser parser = argparse.ArgumentParser( description= 'This script uses the degenerate_dna python library to substitute the third codon position of input DNA sequences with degenerate codes for the same codon.' ) parser.add_argument( '--dna', required=True, help='The full file path to the desired input DNA sequence in FASTA format.' ) args = parser.parse_args() DNA = args.dna OUTPUT_FILE = ("%s.deg.fas" % DNA.split("/")[-1].split(".")[0]) INPUT_HANDLE = open(DNA, "rU") FASTA_SEQUENCES = SeqIO.parse(INPUT_HANDLE, 'fasta') with open(OUTPUT_FILE, 'a') as FILE: for SeqRecord in FASTA_SEQUENCES: res = Degenera(dna=SeqRecord.seq, table=1, method='S') res.degenerate() DEG = res.degenerated FILE.write(">%s\n%s\n" % (SeqRecord.id, DEG))