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