From 9fdd09ac998d8e26d3e4fd3e5e8ccdefda138a36 Mon Sep 17 00:00:00 2001 From: StudentMAGe <43290436+StudentMAGe@users.noreply.github.com> Date: Sun, 11 Nov 2018 18:43:55 +0300 Subject: [PATCH 1/6] Add files via upload Python script with Dna and Rna classes --- DNA-RNAclasses.py | 123 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 DNA-RNAclasses.py diff --git a/DNA-RNAclasses.py b/DNA-RNAclasses.py new file mode 100644 index 0000000..75cca59 --- /dev/null +++ b/DNA-RNAclasses.py @@ -0,0 +1,123 @@ + +# coding: utf-8 + +# In[ ]: + + +#Dna class. Inherited from str slass. +class Dna(str): + def __init__(self, sequence): + DNAcharlist = ('A', 'C', 'G', 'T', 'S', 'W', 'R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') + badseq = False + trueseq = '' + for char in sequence: + if char.upper() in DNAcharlist: + trueseq += char + else: + badseq = True + continue + self.sequence = trueseq + if badseq: + print ('While initializing Dna object non-DNA characters were omitted') + if len (sequence) == 0: + print ('Empty DNA sequence was created. Using gc() function will return None') + + def __repr__(self): + return (self.sequence) + + def __str__(self): + return (self.sequence) + +#transcribe function returns transcription in coordinates [transcrstart : transcrend] as an Rna class object +#whole sequence is transcribed by default + def transcribe(self, transcr_start = 1, transcr_end = None): + if transcr_end == None: + transcr_end = len(self) + Rnatext = self.sequence[(transcrstart-1):transcrend].replace('T', 'U').replace('t', 'u') + return Rna(Rnatext) + +#gc() function returns None if sequence length is 0 or all characters are ambiguous + def gc(self): + DNAgcdict = {'A' : 0, 'C' : 1, 'G' : 1, 'T' : 0, 'S' : 1, 'W' : 0} + notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] + gcs = 0 + definedbps = len(self.sequence) + if len(self.sequence) == 0: + return None + for char in self.sequence: + if char in notforgc: + definedbps -= 1 + else: + gcs += DNAgcdict[char.upper()] + if definedbps == 0: + return None + else: + return (gcs/definedbps) + +#reverse_complement() function returns Dna object of complementary strand in 5' - 3' orientation + def reverse_complement(self): + DNArcdict = {'A' : 'T', 'C' : 'G', 'G' : 'C', 'T' : 'A', 'S' : 'W', 'W' : 'S', 'R' : 'Y', 'Y' : 'R', + 'K' : 'M', 'M' : 'K', 'B' : 'V', 'D' : 'H', 'H' : 'D', 'V' : 'B', 'N' : 'N'} + rcseq = '' + for char in self.sequence: + if char.isupper(): + rcseq = DNArcdict[char] + rcseq + else: + rcseq = DNArcdict[char.upper()].lower() + rcseq + return Dna(rcseq) + + +#Rna class. Inherited from str class. Same as Dna, except transcribe() function is impossible +class Rna(str): + def __init__(self, sequence): + RNAcharlist = ('A', 'C', 'G', 'U', 'S', 'W', 'R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') + badseq = False + trueseq = '' + for char in sequence: + if char.upper() in RNAcharlist: + trueseq += char + else: + badseq = True + continue + self.sequence = trueseq + if badseq: + print ('While initializing Rna object non-RNA characters were omitted') + if len (sequence) == 0: + print ('Empty RNA sequence was created. Using gc() function will return None') + + def __repr__(self): + return (self.sequence) + + def __str__(self): + return (self.sequence) + +#gc() function returns None if sequence length is 0 or all characters are ambiguous + def gc(self): + RNAgcdict = {'A' : 0, 'C' : 1, 'G' : 1, 'U' : 0, 'S' : 1, 'W' : 0} + notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] + gcs = 0 + definedbps = len(self.sequence) + if len(self.sequence) == 0: + return None + for char in self.sequence: + if char in notforgc: + definedbps -= 1 + else: + gcs += RNAgcdict[char.upper()] + if definedbps == 0: + return None + else: + return (gcs/definedbps) + +#reverse_complement() function returns Rna object of complementary sequence in 5' - 3' orientation + def reverse_complement(self): + RNArcdict = {'A' : 'U', 'C' : 'G', 'G' : 'C', 'U' : 'A', 'S' : 'W', 'W' : 'S', 'R' : 'Y', 'Y' : 'R', + 'K' : 'M', 'M' : 'K', 'B' : 'V', 'D' : 'H', 'H' : 'D', 'V' : 'B', 'N' : 'N'} + rcseq = '' + for char in self.sequence: + if char.isupper(): + rcseq = RNArcdict[char] + rcseq + else: + rcseq = RNArcdict[char.upper()].lower() + rcseq + return Rna(rcseq) + From a3d9de441fc37101352b1d59fd0fbf871c6f591e Mon Sep 17 00:00:00 2001 From: StudentMAGe <43290436+StudentMAGe@users.noreply.github.com> Date: Mon, 12 Nov 2018 16:46:23 +0300 Subject: [PATCH 2/6] Update DNA-RNAclasses.py --- DNA-RNAclasses.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/DNA-RNAclasses.py b/DNA-RNAclasses.py index 75cca59..dc16dd4 100644 --- a/DNA-RNAclasses.py +++ b/DNA-RNAclasses.py @@ -33,12 +33,12 @@ def __str__(self): def transcribe(self, transcr_start = 1, transcr_end = None): if transcr_end == None: transcr_end = len(self) - Rnatext = self.sequence[(transcrstart-1):transcrend].replace('T', 'U').replace('t', 'u') + Rnatext = self.sequence[(transcr_start-1):transcr_end].replace('T', 'U').replace('t', 'u') return Rna(Rnatext) #gc() function returns None if sequence length is 0 or all characters are ambiguous def gc(self): - DNAgcdict = {'A' : 0, 'C' : 1, 'G' : 1, 'T' : 0, 'S' : 1, 'W' : 0} + DNAgcdict = {'A': 0, 'C': 1, 'G': 1, 'T': 0, 'S': 1, 'W': 0} notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] gcs = 0 definedbps = len(self.sequence) @@ -56,8 +56,8 @@ def gc(self): #reverse_complement() function returns Dna object of complementary strand in 5' - 3' orientation def reverse_complement(self): - DNArcdict = {'A' : 'T', 'C' : 'G', 'G' : 'C', 'T' : 'A', 'S' : 'W', 'W' : 'S', 'R' : 'Y', 'Y' : 'R', - 'K' : 'M', 'M' : 'K', 'B' : 'V', 'D' : 'H', 'H' : 'D', 'V' : 'B', 'N' : 'N'} + DNArcdict = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', + 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', 'H': 'D', 'V': 'B', 'N': 'N'} rcseq = '' for char in self.sequence: if char.isupper(): @@ -93,7 +93,7 @@ def __str__(self): #gc() function returns None if sequence length is 0 or all characters are ambiguous def gc(self): - RNAgcdict = {'A' : 0, 'C' : 1, 'G' : 1, 'U' : 0, 'S' : 1, 'W' : 0} + RNAgcdict = {'A': 0, 'C': 1, 'G': 1, 'U': 0, 'S': 1, 'W': 0} notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] gcs = 0 definedbps = len(self.sequence) @@ -111,8 +111,8 @@ def gc(self): #reverse_complement() function returns Rna object of complementary sequence in 5' - 3' orientation def reverse_complement(self): - RNArcdict = {'A' : 'U', 'C' : 'G', 'G' : 'C', 'U' : 'A', 'S' : 'W', 'W' : 'S', 'R' : 'Y', 'Y' : 'R', - 'K' : 'M', 'M' : 'K', 'B' : 'V', 'D' : 'H', 'H' : 'D', 'V' : 'B', 'N' : 'N'} + RNArcdict = {'A': 'U', 'C': 'G', 'G': 'C', 'U': 'A', 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', + 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', 'H': 'D', 'V': 'B', 'N': 'N'} rcseq = '' for char in self.sequence: if char.isupper(): @@ -120,4 +120,3 @@ def reverse_complement(self): else: rcseq = RNArcdict[char.upper()].lower() + rcseq return Rna(rcseq) - From f69beec91e5937196193961feda76e511fad5ecf Mon Sep 17 00:00:00 2001 From: StudentMAGe <43290436+StudentMAGe@users.noreply.github.com> Date: Mon, 12 Nov 2018 17:14:52 +0300 Subject: [PATCH 3/6] Update DNA-RNAclasses.py Fixed gc() output representation --- DNA-RNAclasses.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DNA-RNAclasses.py b/DNA-RNAclasses.py index dc16dd4..10d306f 100644 --- a/DNA-RNAclasses.py +++ b/DNA-RNAclasses.py @@ -52,7 +52,7 @@ def gc(self): if definedbps == 0: return None else: - return (gcs/definedbps) + return (round(gcs/definedbps, 2)) #reverse_complement() function returns Dna object of complementary strand in 5' - 3' orientation def reverse_complement(self): @@ -107,7 +107,7 @@ def gc(self): if definedbps == 0: return None else: - return (gcs/definedbps) + return (round(gcs/definedbps, 2)) #reverse_complement() function returns Rna object of complementary sequence in 5' - 3' orientation def reverse_complement(self): From 8058e5273e26002857c509baa99b65800a9fe372 Mon Sep 17 00:00:00 2001 From: StudentMAGe <43290436+StudentMAGe@users.noreply.github.com> Date: Mon, 12 Nov 2018 19:39:47 +0300 Subject: [PATCH 4/6] Update DNA-RNAclasses.py Minor fixes in code style --- DNA-RNAclasses.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/DNA-RNAclasses.py b/DNA-RNAclasses.py index 10d306f..a245ed1 100644 --- a/DNA-RNAclasses.py +++ b/DNA-RNAclasses.py @@ -4,7 +4,7 @@ # In[ ]: -#Dna class. Inherited from str slass. +# Dna class. Inherited from str class. class Dna(str): def __init__(self, sequence): DNAcharlist = ('A', 'C', 'G', 'T', 'S', 'W', 'R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') @@ -28,15 +28,15 @@ def __repr__(self): def __str__(self): return (self.sequence) -#transcribe function returns transcription in coordinates [transcrstart : transcrend] as an Rna class object -#whole sequence is transcribed by default +# transcribe function returns transcription in coordinates [transcrstart : transcrend] as an Rna class object +# whole sequence is transcribed by default def transcribe(self, transcr_start = 1, transcr_end = None): if transcr_end == None: transcr_end = len(self) Rnatext = self.sequence[(transcr_start-1):transcr_end].replace('T', 'U').replace('t', 'u') return Rna(Rnatext) -#gc() function returns None if sequence length is 0 or all characters are ambiguous +# gc() function returns None if sequence length is 0 or all characters are ambiguous def gc(self): DNAgcdict = {'A': 0, 'C': 1, 'G': 1, 'T': 0, 'S': 1, 'W': 0} notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] @@ -52,9 +52,9 @@ def gc(self): if definedbps == 0: return None else: - return (round(gcs/definedbps, 2)) + return (round(gcs / definedbps, 2)) -#reverse_complement() function returns Dna object of complementary strand in 5' - 3' orientation +# reverse_complement() function returns Dna object of complementary strand in 5' - 3' orientation def reverse_complement(self): DNArcdict = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', 'H': 'D', 'V': 'B', 'N': 'N'} @@ -67,7 +67,7 @@ def reverse_complement(self): return Dna(rcseq) -#Rna class. Inherited from str class. Same as Dna, except transcribe() function is impossible +# Rna class. Inherited from str class. Same as Dna, except transcribe() function is impossible class Rna(str): def __init__(self, sequence): RNAcharlist = ('A', 'C', 'G', 'U', 'S', 'W', 'R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') @@ -91,7 +91,7 @@ def __repr__(self): def __str__(self): return (self.sequence) -#gc() function returns None if sequence length is 0 or all characters are ambiguous +# gc() function returns None if sequence length is 0 or all characters are ambiguous def gc(self): RNAgcdict = {'A': 0, 'C': 1, 'G': 1, 'U': 0, 'S': 1, 'W': 0} notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] @@ -107,9 +107,9 @@ def gc(self): if definedbps == 0: return None else: - return (round(gcs/definedbps, 2)) + return (round(gcs / definedbps, 2)) -#reverse_complement() function returns Rna object of complementary sequence in 5' - 3' orientation +# reverse_complement() function returns Rna object of complementary sequence in 5' - 3' orientation def reverse_complement(self): RNArcdict = {'A': 'U', 'C': 'G', 'G': 'C', 'U': 'A', 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', 'H': 'D', 'V': 'B', 'N': 'N'} @@ -120,3 +120,4 @@ def reverse_complement(self): else: rcseq = RNArcdict[char.upper()].lower() + rcseq return Rna(rcseq) + From dd7e6bc6f5635825f1bcc041777807d6e1aec580 Mon Sep 17 00:00:00 2001 From: StudentMAGe <43290436+StudentMAGe@users.noreply.github.com> Date: Mon, 12 Nov 2018 23:12:17 +0300 Subject: [PATCH 5/6] Update DNA-RNAclasses.py reduced characters in lines for the sake of PEP8 --- DNA-RNAclasses.py | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/DNA-RNAclasses.py b/DNA-RNAclasses.py index a245ed1..b0fc344 100644 --- a/DNA-RNAclasses.py +++ b/DNA-RNAclasses.py @@ -7,7 +7,8 @@ # Dna class. Inherited from str class. class Dna(str): def __init__(self, sequence): - DNAcharlist = ('A', 'C', 'G', 'T', 'S', 'W', 'R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') + DNAcharlist = ('A', 'C', 'G', 'T', 'S', 'W', 'R', + 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') badseq = False trueseq = '' for char in sequence: @@ -28,7 +29,9 @@ def __repr__(self): def __str__(self): return (self.sequence) -# transcribe function returns transcription in coordinates [transcrstart : transcrend] as an Rna class object +# transcribe function returns transcription +# in coordinates [transcrstart : transcrend] +# as an Rna class object # whole sequence is transcribed by default def transcribe(self, transcr_start = 1, transcr_end = None): if transcr_end == None: @@ -36,7 +39,8 @@ def transcribe(self, transcr_start = 1, transcr_end = None): Rnatext = self.sequence[(transcr_start-1):transcr_end].replace('T', 'U').replace('t', 'u') return Rna(Rnatext) -# gc() function returns None if sequence length is 0 or all characters are ambiguous +# gc() function returns None if sequence length is 0 +# or all characters are ambiguous def gc(self): DNAgcdict = {'A': 0, 'C': 1, 'G': 1, 'T': 0, 'S': 1, 'W': 0} notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] @@ -54,10 +58,13 @@ def gc(self): else: return (round(gcs / definedbps, 2)) -# reverse_complement() function returns Dna object of complementary strand in 5' - 3' orientation +# reverse_complement() function returns Dna object +# of complementary strand in 5' - 3' orientation def reverse_complement(self): - DNArcdict = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', - 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', 'H': 'D', 'V': 'B', 'N': 'N'} + DNArcdict = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', + 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', + 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', + 'H': 'D', 'V': 'B', 'N': 'N'} rcseq = '' for char in self.sequence: if char.isupper(): @@ -67,10 +74,12 @@ def reverse_complement(self): return Dna(rcseq) -# Rna class. Inherited from str class. Same as Dna, except transcribe() function is impossible +# Rna class. Inherited from str class. Same as Dna, +# except transcribe() function is impossible class Rna(str): def __init__(self, sequence): - RNAcharlist = ('A', 'C', 'G', 'U', 'S', 'W', 'R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') + RNAcharlist = ('A', 'C', 'G', 'U', 'S', 'W', 'R', + 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N') badseq = False trueseq = '' for char in sequence: @@ -91,7 +100,8 @@ def __repr__(self): def __str__(self): return (self.sequence) -# gc() function returns None if sequence length is 0 or all characters are ambiguous +# gc() function returns None if sequence length is 0 +# or all characters are ambiguous def gc(self): RNAgcdict = {'A': 0, 'C': 1, 'G': 1, 'U': 0, 'S': 1, 'W': 0} notforgc = ['R', 'Y', 'K', 'M', 'B', 'D', 'H', 'V', 'N'] @@ -109,10 +119,13 @@ def gc(self): else: return (round(gcs / definedbps, 2)) -# reverse_complement() function returns Rna object of complementary sequence in 5' - 3' orientation +# reverse_complement() function returns Rna object +# of complementary sequence in 5' - 3' orientation def reverse_complement(self): - RNArcdict = {'A': 'U', 'C': 'G', 'G': 'C', 'U': 'A', 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', - 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', 'H': 'D', 'V': 'B', 'N': 'N'} + RNArcdict = {'A': 'U', 'C': 'G', 'G': 'C', 'U': 'A', + 'S': 'W', 'W': 'S', 'R': 'Y', 'Y': 'R', + 'K': 'M', 'M': 'K', 'B': 'V', 'D': 'H', + 'H': 'D', 'V': 'B', 'N': 'N'} rcseq = '' for char in self.sequence: if char.isupper(): From 9ebdcaa472716349220ffd31744aae0a6a04a178 Mon Sep 17 00:00:00 2001 From: StudentMAGe <43290436+StudentMAGe@users.noreply.github.com> Date: Mon, 12 Nov 2018 23:31:38 +0300 Subject: [PATCH 6/6] Update DNA-RNAclasses.py corrected couple of typos --- DNA-RNAclasses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DNA-RNAclasses.py b/DNA-RNAclasses.py index b0fc344..bd1c5c2 100644 --- a/DNA-RNAclasses.py +++ b/DNA-RNAclasses.py @@ -30,7 +30,7 @@ def __str__(self): return (self.sequence) # transcribe function returns transcription -# in coordinates [transcrstart : transcrend] +# in coordinates [transcr_start : transcr_end] # as an Rna class object # whole sequence is transcribed by default def transcribe(self, transcr_start = 1, transcr_end = None):