Neurochirurgie minim invazivă
"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv. Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice. www.neurohope.ro |
Cum imbunatatesc algoritmul Needleman Wunsch de string matching ?
Last Updated: Feb 26 2015 16:08, Started by
urgenta
, Jan 01 2015 20:30
·
0
#1
Posted 01 January 2015 - 20:30
Pentru aliniamentul a doua siruri vreau o versiune a sa ce permite inserari de spatii goale si in sirul mare pentru cazul in care distanta e mai mica cand inserez in ambele siruri pentru a crea o potrivire mai buna.
Exemplu: AAABCDDDE si ABCCCDEEE. Dati-mi o idee va rog, sau pm cine e pasionat de algoritmica si imi poate zice unde sa caut. Edited by urgenta, 01 January 2015 - 20:31. |
#2
Posted 26 February 2015 - 16:08
#! usr/bin/env python # -*- coding: utf-8 -*- from score import Score from sequence import Sequence class NeedlemanWunsch: def __init__(self, firstSequence, secondSequence, score, openingGap, extendingGap): self.firstSequence_=firstSequence self.secondSequence_=secondSequence self.score_=score self.openingGap_=openingGap self.extendingGap_=extendingGap self.solutions_=[] self.V_=self.initMatrix() #Représentent les 3 matrices vues au cours self.W_=self.initMatrix() self.S_=self.initMatrix() self.calculS() #Calcul la matrice S self.findAlignement(len(self.firstSequence_)-1, len(self.secondSequence_)-1) def initMatrix(self, val=0): matrix=[] for i in range(len(self.firstSequence_)+1) : line=[] for j in range(len(self.secondSequence_)+1) : line+=[val] matrix.append(line) return matrix def calculS(self): for i in range(1, len(self.firstSequence_)+1): self.V_[i][0]=self.openingGap_+(i-1)*self.extendingGap_ self.W_[i][0]=self.openingGap_+(i-1)*self.extendingGap_ self.S_[i][0]=self.openingGap_+(i-1)*self.extendingGap_ for j in range(1, len(self.secondSequence_)+1): self.V_[0][j]=self.openingGap_+(j-1)*self.extendingGap_ self.W_[0][j]=self.openingGap_+(j-1)*self.extendingGap_ self.S_[0][j]=self.openingGap_+(j-1)*self.extendingGap_ for i in range(1, len(self.firstSequence_)+1): for j in range(1, len(self.secondSequence_)+1): self.V_[i][j]=max((self.S_[i-1][j]+self.openingGap_+self.extendingGap_), (self.V_[i-1][j]+self.extendingGap_)) self.W_[i][j]=max((self.S_[i][j-1]+self.openingGap_+self.extendingGap_), (self.W_[i][j-1]+self.extendingGap_)) self.S_[i][j]=max((self.S_[i-1][j-1]+self.score_.get(self.firstSequence_[i-1], self.secondSequence_[j-1])), (self.V_[i][j]), (self.W_[i][j])) def findAlignement(self, i, j, sequenceA="", sequenceB="", matching=""): if(i==0 or j==0): while(i>0): sequenceA=self.firstSequence_[i-1]+sequenceA sequenceB="-"+sequenceB matching=" "+matching i-=1 while(j>0): sequenceA="-"+sequenceA sequenceB=self.secondSequence_[j-1]+sequenceB matching=" "+matching j-=1 #Enregistrement dans la liste des résultats self.solutions_.append([self.S_[-1][-1], sequenceA, matching, sequenceB]) else: if(self.S_[i][j]==(self.S_[i-1][j-1]+self.score_.get(self.firstSequence_[i-1], self.secondSequence_[j-1]))): #Diagonale if(self.firstSequence_[i-1]==self.secondSequence_[j-1]): match="|" else: match=" " self.findAlignement(i-1, j-1, self.firstSequence_[i-1]+sequenceA, self.secondSequence_[j-1]+sequenceB, match+matching) if(self.S_[i][j]==self.V_[i][j]): #Haut self.findAlignement(i-1, j, self.firstSequence_[i-1]+sequenceA, "-"+sequenceB, " "+matching) if(self.S_[i][j]==self.W_[i][j]): #Bas self.findAlignement(i, j-1, "-"+sequenceA, self.secondSequence_[j-1]+sequenceB, " "+matching) def __str__(self): solution=(str(len(self.solutions_))+" alignement(s) au total, de score: "+str(self.solutions_[0][0])+"\n") for i in range(len(self.solutions_)): solution+=("\n" +(self.solutions_[i][1])+"\n" +(self.solutions_[i][2])+"\n" +(self.solutions_[i][3])+"\n") return solution if __name__ == '__main__': score=Score("blosum62.txt") sequences=Sequence("PDZ-sequences.fasta") openingGap=-14 extendingGap=-4 print(NeedlemanWunsch(sequences.getSequence(0), sequences.getSequence(1), score, openingGap, extendingGap)) Asta am facut pentru facultate anu trecut. E in python, calculeaza scorul de similaritate, la nevoie iti baga spatii in oricare din stranduri Edited by dilo00o, 26 February 2015 - 16:09. |
Anunturi
▶ 1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users