Skip to content

Instantly share code, notes, and snippets.

@finswimmer
Created June 16, 2018 04:44
Show Gist options
  • Save finswimmer/12271981350825f54f1c49859a357ac2 to your computer and use it in GitHub Desktop.
Save finswimmer/12271981350825f54f1c49859a357ac2 to your computer and use it in GitHub Desktop.
import sys
from Bio import SeqIO
def mismatch(seq1, seq2):
index = []
for i, (s1, s2) in enumerate(zip(seq1, seq2)):
if s1 != s2:
index.append(i)
return index
sequences = SeqIO.index(sys.argv[1], "fasta")
result = []
for i in range(0, len(sequences['species1'].seq), 3):
codon_s1 = sequences['species1'].seq[i:i+3]
codon_s2 = sequences['species2'].seq[i:i+3]
codon_s3 = sequences['species3'].seq[i:i+3]
if codon_s1 != codon_s2:
effect = "."
mismatches = mismatch(codon_s1, codon_s2)
if len(mismatches) == 1:
if codon_s1.translate() == codon_s3.translate():
effect = "synonymous"
else:
effect = "non-synonymous"
for m in mismatches:
result.append((
i+m+1,
codon_s1[m],
codon_s2[m],
codon_s3[m],
effect
))
print("#POS", "species1", "species2", "species3", "effect", sep="\t")
for row in result:
print("\t".join(map(str, row)))
@finswimmer
Copy link
Author

Answer on biostars question: https://www.biostars.org/p/320742

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment