import import_ipynb
import SGC
import itertools
import numpy as np
from definition of itertools.product:
The nested loops cycle like an odometer with the rightmost element advancing on every iteration. This pattern creates a lexicographic ordering so that if the input’s iterables are sorted, the product tuples are emitted in sorted order.
def codonOrdering():
'''Generator function which return tuples with:
-nucleotide order
-position order
-codons sorted based on nucleotide and position order i ndarray.'''
nucleotides=['A','T','G','C']
for nucOrder in itertools.permutations(nucleotides):
triplets=list(itertools.product(nucOrder,repeat=3))
positionPerGen=itertools.permutations([list(np.array(triplets).T[i]) for i in range(3)])
for positionOrder in itertools.permutations([1,2,3]):
positionPer=np.array(next(positionPerGen)).T
yield (nucOrder,positionOrder,positionPer)
bestlength=64
bestNucOrder=[]
bestPosOrder=[]
licznik=0
for order in codonOrdering():
licznik+=1
codonNucOrder=order[2]
codonOrder=[''.join(codonNucOrder[i]) for i in range(64)]
foundedAA=set()
i=0
for codon in codonOrder:
i+=1
if SGC.codonToAmin[codon] not in foundedAA:
foundedAA.add(SGC.codonToAmin[codon])
if len(foundedAA) == len(SGC.aminToCodons):
if bestlength==i:
bestNucOrder.append(order[0])
bestPosOrder.append(order[1])
if bestlength>i:
bestlength=i
bestNucOrder=[order[0]]
bestPosOrder=[order[1]]
break
print(bestlength)
print(bestNucOrder)
print(bestPosOrder)
licznik
6*24
def generateDot(codons, name):
out=open(name,"w")
print("strict graph {", file=out)
codons=[''.join(c) for c in codons]
for c in codons:
for i in range(3):
for n in ['A','T','C','G']:
c1=c[:i]+n+c[i+1:]
if not c1==c and c1 in codons:
print(c1,"--",c,file=out)
print("}", file=out)
orig=np.array(list(itertools.product(('T', 'G', 'A', 'C'),repeat=3)))
order=np.full((64,3),'X')
order[:,0]=orig[:,2]
order[:,2]=orig[:,0]
order[:,1]=orig[:,1]
codons=[''.join(order[i]) for i in range(64)]
aa=[SGC.codonToAmin[cod] for cod in codons]
aa=np.array(aa[:28])
print(aa)
len(np.unique(aa))
order[:28]
generateDot(order[:28], "tgac.dot")
orig=np.array(list(itertools.product(('G', 'T', 'A', 'C'),repeat=3)))
order=np.full((64,3),'X')
order[:,0]=orig[:,2]
order[:,2]=orig[:,0]
order[:,1]=orig[:,1]
codons=[''.join(order[i]) for i in range(64)]
aa=[SGC.codonToAmin[cod] for cod in codons]
aa=np.array(aa[:28])
print(aa)
len(np.unique(aa))
order[28:]
len(np.unique(aa[:27]))
generateDot(order[:28], "gtac.dot")
len(codons)
C28prim=dict([(codons[i],i) for i in range(28,64)])
tableOrder=["T","C","A","G"]
for i in range(4):
for j in range(16):
c=tableOrder[i]+tableOrder[j%4]+tableOrder[j//4]
if c in C28prim:
print(r"\textcolor{blue}{",end="")
else:
print(r"\textcolor{red}{",end="")
print(c,sep="", end="} ")
if c in C28prim:
print("A",(C28prim[c]//4)-7,sep="",end=" ")
if (j+1)%4==0:
print(r"\\")
else:
print("& ",end="")
print(r"\hline")