complément du TP sur les séquences

publicité
Les fonctions de sequence.py
from string import *
# lecture d'un fichier au format fasta avec une seule sequence
# version 1 la sequence est recuperee sous la forme de deux chaines de
caracteres
# ----------------------------------------------------------------------------def readFasta(file):
"This function read one sequence in a fasta file and returns two strings"
infile=open(file, 'r')
seq=""
name = ""
tmp=infile.readlines()
infile.close()
name =tmp[0][1:-1] # pour eliminer le > du debut et le \n de fin
for x in tmp[1:] :
seq=seq+upper(x[:-1]) #upper passe les caracteres en majuscule
return name,seq # la fonction retourne le nom et la sequence
# lecture d'un fichier au format fasta
# version 2 avec 2 listes et le join
# ----------------------------------------------------------------------------def readFastas2(f):
seqs = []
names = []
infile=open(f, 'r')
lines = infile.readlines()
infile.close()
seq=[]
for li in lines:
if li[0] == '>':
if len(seq) != 0:
seqs.append(join(seq,''))
seq=[]
names.append(li[1:-1]) # on omet le ">"
else:
seq.append(upper(li[0:-1])) # on omet le "\n" de la fin de ligne
seqs.append(join(seq,''))
return names, seqs
# lecture d'un fichier au format fasta
# version 3 avec 2 listes et le join
# ----------------------------------------------------------------------------def readFastas(f):
seqs = []
names = []
infile=open(f, 'r')
lines = infile.readlines()
infile.close()
seq=[]
for li in lines:
if li[0] == '>':
if len(seq) != 0:
seqs.append(seq)
seq=""
names.append(li[1:-1]) # on omet le ">"
else:
seq=seq+upper(li[0:-1]) # on omet le "\n" de la fin de ligne
seqs.append(seq)
return names, seqs
# 1/ fonction qui calcule le %de G+C le long d'une sequence
# les pourcentages locaux sont calcules en utilisant une fenetre glissante
# qui avance d'un certain pas
#-------------------------------------------------------------------------def computeSlidingGC(seq,window,step):
L=len(seq)
results=[]
for i in range (0, L-window+1, step):
GC=0
for j in range (i, i+window) :
if seq[j]=="C" or seq[j] == "G" :
GC+=1
results.append((i+1, float(GC)/window))
return results
# 2/ version optimisee, on ne recalcule pas les parties chevauchantes
# de deux fenetres successives = gain de temps
def computeSlidingGCOPtim(seq,window,step):
results=[]
L=len(seq)
# premiere fenetre
GC=0
#print "calcul du gc pour la premiere fenetre"
for j in range(0,window):
if seq[j]=="C" or seq[j] == "G":
GC=GC+1
results.append((1, float(GC)/window))
#pour les autres fenetres
for i in range(step,L-window+1,step):
for j in range(i-step,i):
if seq[j]=="C" or seq[j] == "G":
GC=GC-1
for j in range(i+window-step,i+window):
if seq[j]=="C" or seq[j] == "G":
GC=GC+1
results.append((i+1, float(GC)/window))
return results
Les fonctions de composition.py
#!/Library/Frameworks/Python.framework/Versions/Current/bin/python
from sequence import *
tex="mgen.fst"
nom,seq=readFasta(tex)
pas=1000
lf=50000
#pos_gc=computeSlidingGC(seq,lf,pas)
pos_gc=computeSlidingGCOPtim(seq,lf,pas)
for i in pos_gc :
print i[0], i[1]
Le test dans le shell
chmod +x composition.py
time ./composition.py > toto
1.174u 0.076s 0:01.32 93.9%
0+0k 0+0io 0pf+0w
#sans l'optimisation
time ./composition.py > toto
28.037u 0.591s 0:30.33 94.3% 0+0k 0+2io 0pf+0w
#avec l'optimisation
Afficher une documentation pour une fonction dans l'interpréteur python
>>> from sequence import *
>>>print readFasta.__doc__
This function read one sequence in a fasta file and returns two
strings
>>> import sequence
>>> help (sequence.readFasta)
Help on function readFasta in module sequence:
readFasta(file)
This function read one sequence in a fasta file and returns
two strings
Téléchargement