A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 8.

Apresentações semelhantes


Apresentação em tema: "Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 8."— Transcrição da apresentação:

1 Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 8

2 Ludwig Krippahl, Na aula de hoje... Estruturas. Listas. Ficheiros, leitura e escrita simples. Comparação de sequências. Exemplo de uma função recursiva.

3 Ludwig Krippahl, Estruturas Vectores e matrizes guardam valores de um só tipo. Estruturas podem guardar valores de vários tipos. Sintaxe: variável.campo

4 Ludwig Krippahl, Estruturas Exemplo: octave:7> prato.nome="filetes"; octave:8> prato.preco=12.5; octave:9> prato.pedidos=[10,2,3,5,9,5,9]; octave:10> prato prato = { nome = filetes pedidos = preco = }

5 Ludwig Krippahl, Estruturas Recapitulando nome_da_variavel.campo1=val1 nome_da_variavel.campo2=val2 Cada campo pode ter um valor de tipo diferente, incluindo ser outra estrutura.

6 Ludwig Krippahl, Estruturas Estrutura de estrutura... octave:13> cliente.nome="Vitor Meireles"; octave:14> cliente.prato=prato cliente = { nome = Vitor Meireles prato = { nome = filetes pedidos = preco = }

7 Ludwig Krippahl, Listas Não podemos criar vectores de estruturas: octave:15> v=[prato,cliente] error: octave_base_value::matrix_value(): wrong type argument `struct' error: evaluating assignment expression near line 15, column 2

8 Ludwig Krippahl, Listas Para agrupar estruturas ou variáveis de vários tipos temos que criar uma lista. Usamos a função list, que recebe em cada argumento um valor e devolve uma lista com esses valores. Ex: octave:17> l=list(1,"abc",prato)

9 Ludwig Krippahl, Listas l = ( [1] = 11º elemento: escalar [2] = abc2º elemento: string [3] =3º elemento: estrutura { nome = filetes pedidos = preco = } )

10 Ludwig Krippahl, Listas Podemos criar a lista incrementalmente, partindo da lista vazia: l=list; E acrescentando um valor de cada vez: l=append(l,1) l=append(l,"abc") l=append(l,prato)

11 Ludwig Krippahl, Listas append(x,y) Devolve a lista resultante de acrescentar y no final de x. Se y for uma lista acrescenta todos os elementos de y no final de x.

12 Ludwig Krippahl, Listas append(x,y) octave:21> l=list l = () octave:22> l=append(l,1) l = ( [1] = 1 ) octave:23> l=append(l,"abc") l = ( [1] = 1 [2] = abc )

13 Ludwig Krippahl, Listas Aceder a um elemento da lista: como um vector ou usar a função nth, que devolve o n-ésimo elemento da lista. octave:42> l(1:2) ans = ( [1] = 1 [2] = abc ) octave:43> nth(l,2) ans = abc

14 Ludwig Krippahl, Listas Aceder a um elemento da lista: como um vector ou usar a função nth, que devolve o n-ésimo elemento da lista. Atenção: Ao aceder à lista como um vector o resultado é uma lista. Ex: l(1) não é o primeiro elemento, mas uma lista com o primeiro elemento. Para obter o elemento n usar nth(l,n).

15 Ludwig Krippahl, Ficheiros Para aceder a um ficheiro temos que o identificar com uma estrutura com informação acerca do ficheiro. Usamos a função fopen para abrir o ficheiro (e obter o identificador), fclose para fechar e deixar livre o ficheiro para outras aplicações.

16 Ludwig Krippahl, Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = { id = 3 name = teste.txt mode = w arch = native status = 1 }

17 Ludwig Krippahl, Ficheiros fopen(nome, modo, arquitectura) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") Guarda na variável teste a estrutura que identifica o ficheiro.

18 Ludwig Krippahl, Ficheiros fopen(nome, modo, arquitectura) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") Guarda na variável teste a estrutura que identifica o ficheiro. No final fechamos o ficheiro: octave:8> fclose(teste) ans = 0

19 Ludwig Krippahl, Ficheiros fopen(teste.txt, w) Modo w, write, para escrita. Apaga o conteúdo original. Modo r, read, para leitura. Modo a, append, para acrescentar ao ficheiro. Preserva o conteúdo original (Ver outros modos no manual)

20 Ludwig Krippahl, Ficheiros Ler dados de um ficheiro: fgetl( identificador, comprimento) Lê uma linha do ficheiro identificado, ou o número de caracteres no comprimento. Se o comprimento é omitido, lê todos os caracteres até ao final da linha. Se não há mais linhas devolve -1.

21 Ludwig Krippahl, Ficheiros Sabemos que o ficheiro chegou ao fim com a função feof: feof( identificador ) Devolve true se o ficheiro estiver no fim.

22 Ludwig Krippahl, Exemplo: ler sequências de proteínas. O formato FASTA é um formato de texto para guardar sequências. As linhas começadas por > identificam a molécula (proteína, RNA, ou DNA): >UniProt/Swiss-Prot|P00273|DE....

23 Ludwig Krippahl, Exemplo: ler sequências de proteínas. O formato FASTA é um formato de texto para guardar sequências. As restantes linhas contêm a sequência: ALSAADAGLLAQSWAPVFANSDANGASF... RDVSSRIFARLNEFVSNAADAGKMGSML... APAADAAWNSLFGLIISALQSAGK

24 Ludwig Krippahl, Exemplo: ler sequências de proteínas. O formato FASTA é um formato de texto para guardar sequências. Como no máximo este formato usa 80 caracteres por linha a sequência pode estar partida em várias linhas. ALSAADAGLLAQSWAPVFANSDANGASF... RDVSSRIFARLNEFVSNAADAGKMGSML... APAADAAWNSLFGLIISALQSAGK

25 Ludwig Krippahl, Exemplo: ler sequências de proteínas. Função lefasta(nome) Lê o ficheiro cujo nome é fornecido e devolve uma lista de estruturas. Em cada estrutura tem dois campos, id, com a identificação da proteína, e seq, com a sequência da proteína.

26 Ludwig Krippahl, Exemplo: ler sequências de proteínas. function l=lefasta(nome) id=fopen(nome,r); l=list; (Ciclo de leitura do ficheiro) fclose(id); endfunction Abre o ficheiro e guarda o identificador

27 Ludwig Krippahl, Exemplo: ler sequências de proteínas. function l=lefasta(nome) id=fopen(nome); l=list; (Ciclo de leitura do ficheiro) fclose(id); endfunction Cria uma lista vazia

28 Ludwig Krippahl, Exemplo: ler sequências de proteínas. function l=lefasta(nome) id=fopen(nome); l=list; (Ciclo de leitura do ficheiro) fclose(id); endfunction Depois de ler o ficheiro, fecha e termina a função

29 Ludwig Krippahl, Exemplo: ler sequências de proteínas. r.seq=''; while !feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(r.seq,'') l=append(l,r); endif r.id=s; r.seq=''; else r.seq=[r.seq,s]; endif endwhile if !strcmp(r.seq,'') l=append(l,r); endif Ciclo enquanto o ficheiro não chegou ao fim.

30 Ludwig Krippahl, Exemplo: ler sequências de proteínas. r.seq=''; while !feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(r.seq,'') l=append(l,r); endif r.id=s; r.seq=''; else r.seq=[r.seq,s]; endif endwhile if !strcmp(r.seq,'') l=append(l,r); endif Lê uma linha e compara o primeiro caracter com > (quer dizer que encontrou uma proteína nova)

31 Ludwig Krippahl, Exemplo: ler sequências de proteínas. r.seq=''; while !feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(r.seq,'') l=append(l,r); endif r.id=s; r.seq=''; else r.seq=[r.seq,s]; endif endwhile if !strcmp(r.seq,'') l=append(l,r); endif Se há uma sequência guardada, então acrescenta r à lista l É por isto que a sequência em r começa vazia

32 Ludwig Krippahl, Exemplo: ler sequências de proteínas. r.seq=''; while !feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(r.seq,'') l=append(l,r); endif r.id=s; r.seq=''; else r.seq=[r.seq,s]; endif endwhile if !strcmp(r.seq,'') l=append(l,r); endif Quando encontra nova proteína guarda o identificador da proteína e limpa a sequência.

33 Ludwig Krippahl, Exemplo: ler sequências de proteínas. r.seq=''; while !feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(r.seq,'') l=append(l,r); endif r.id=s; r.seq=''; else r.seq=[r.seq,s]; endif endwhile if !strcmp(r.seq,'') l=append(l,r); endif Se não é uma proteína nova então é outra linha da sequência, para juntar à sequência lida até agora

34 Ludwig Krippahl, Exemplo: ler sequências de proteínas. r.seq=''; while !feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(r.seq,'') l=append(l,r); endif r.id=s; r.seq=''; else r.seq=[r.seq,s]; endif endwhile if !strcmp(r.seq,'') l=append(l,r); endif No final do ciclo acrescentar a última proteína lida, se houver

35 Ludwig Krippahl, Exemplo: centros Fe S

36 Ludwig Krippahl, Desulforedoxin, 1DXG Dímero

37 Ludwig Krippahl,

38 Ludwig Krippahl,

39 Ludwig Krippahl,

40 Ludwig Krippahl, Exemplo: centros Fe S >...Desulforedoxin ANEGDVYKCELCGQVVKVLEEGGGTLV CCGEDMVKQ Padrão do centro:...C-[até 4]-C-... -C-[até 4]-C-...

41 Ludwig Krippahl, Exemplo: centros Fe S Para fazer na aula prática: Função vec=contafes(lista) A partir da lista de estruturas com seq, a sequência de cada proteína, devolve o número estimado de centros de Fe-S contando as cisteínas no padrão:...C-[até 4]-C-... -C-[até 4]-C-...

42 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Saul Needleman e Christian Wunsch A general method applicable to the search for similarities in the amino acid sequence of two proteins, J Mol Biol. 48(3):

43 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch De duas sequências: ABBCD e ABCED Obter o alinhamento: ABBC-D | || | A-BCED

44 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Duas sequências: Exemplo: ABBCD e ABCED Construir uma matriz com tantas linhas quanto o comprimento da primeira e colunas quanto o comprimento da segunda (todas as combinações)

45 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Matriz

46 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Em cada célula contamos 1 se os elementos da sequência forem iguais. E somamos o máximo obtido por alinhar os elementos anteriores. Regra: Cada célula é o máximo da matriz acima e à esquerda, +1 se os elementos forem iguais.

47 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo da matriz acima e à esquerda, +1 se os elementos forem iguais. Alinhar o 1º elemento com todos os outros

48 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo da matriz acima e à esquerda, +1 se os elementos forem iguais. Alinhar o 2º elemento com todos os outros

49 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo da matriz acima e à esquerda, +1 se os elementos forem iguais. Somar em o melhor alinhamento anterior

50 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo da matriz acima e à esquerda, +1 se os elementos forem iguais. Somar em o melhor alinhamento anterior

51 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch O alinhamento é dado pelo máximo, depois o máximo das sub-matrizes à esquerda e acima.

52 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo, depois o máximo das sub- matrizes à esquerda e acima. D | D

53 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo, depois o máximo das sub- matrizes à esquerda e acima. C-D | CED

54 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo, depois o máximo das sub- matrizes à esquerda e acima. BC-D || | BCED

55 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Máximo, depois o máximo das sub- matrizes à esquerda e acima. ABBC-D | || | A-BCED

56 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Precisamos: Calcular os valores. Calcular a linha e coluna do máximo de uma matriz. Construir o alinhamento: ABBC-D | || | A-BCED

57 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Calcular os valores: function mat=nwcriamatriz(seq1,seq2)

58 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function mat=nwcriamatriz(seq1,seq2) l1=length(seq1); l2=length(seq2); mat=zeros(l1,l2); for f=1:l1 for g=1:l2 a=(seq1(f)==seq2(g)); if (f>1) & (g>1) m=max(max(mat(f-1,1:g-1))); else m=0; endif... Cria a matriz a zeros, e guarda os comprimentos das sequências.

59 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... for f=1:l1 for g=1:l2 a=(seq1(f)==seq2(g)); if (f>1) & (g>1) m=max(max(mat(1:f-1,1:g-1))); else m=0; endif mat(f,g)=a+m; endfor endfunction Ciclo para percorrer linhas e colunas

60 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... for f=1:l1 for g=1:l2 a=(seq1(f)==seq2(g)); if (f>1) & (g>1) m=max(max(mat(1:f-1,1:g-1))); else m=0; endif mat(f,g)=a+m; endfor endfunction a é 0 ou 1 conforme os elementos são diferentes ou iguais.

61 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... for f=1:l1 for g=1:l2 a=(seq1(f)==seq2(g)); if (f>1) & (g>1) m=max(max(mat(1:f-1,1:g-1))); else m=0; endif mat(f,g)=a+m; endfor endfunction Se não estamos nem na linha 1 nem na coluna 1, m fica com o máximo da sub-matriz anterior.

62 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... for f=1:l1 for g=1:l2 a=(seq1(f)==seq2(g)); if (f>1) & (g>1) m=max(max(mat(1:f-1,1:g-1))); else m=0; endif mat(f,g)=a+m; endfor endfunction O valor da célula f,g é o máximo do anterior mais 1 se iguais

63 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Calcular os valores: function mat=nwcriamatriz(seq1,seq2) Linha e coluna do máximo da matriz: function [l,c]=maxmatriz(t)

64 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [l,c]=maxmatriz(t) l=rows(t); c=columns(t); [ml,il]=max(t(:,columns(t))); [mc,ic]=max(t(rows(t),:)); if ml>mc l=il; else c=ic; endif endfunction Começar por assumir que l e c estão na última linha e coluna

65 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [l,c]=maxmatriz(t) l=rows(t); c=columns(t); [ml,il]=max(t(:,columns(t))); [mc,ic]=max(t(rows(t),:)); if ml>mc l=il; else c=ic; endif endfunction Pelo algoritmo, sabemos que o máximo tem que estar ou na última linha ou na última coluna

66 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [l,c]=maxmatriz(t) l=rows(t); c=columns(t); [ml,il]=max(t(:,columns(t))); [mc,ic]=max(t(rows(t),:)); if ml>mc l=il; else c=ic; endif endfunction ml e mc são os valores máximo, il e ic os indices da linha e da coluna. Ver help max.

67 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [l,c]=maxmatriz(t) l=rows(t); c=columns(t); [ml,il]=max(t(:,columns(t))); [mc,ic]=max(t(rows(t),:)); if ml>mc l=il; else c=ic; endif endfunction Ajustamos c e l conforme o máximo da linha é maior que o máximo da coluna

68 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Construir alinhamento: Percorrer a matriz, e criar uma matriz com os pares que alinham: ABBC-D1,1 | || |3,2 A-BCED4,3 5,5

69 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Construir alinhamento: Percorrer a matriz, e criar uma matriz com os pares que alinham: ABBC-D1,1 | || |3,2 A-BCED4,3 5,5 Construir o texto a partir dessa matriz.

70 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Construir o texto ABBC-D1,1 | || |3,2 A-BCED4,3 5,5 Equivale a alinhar o primeiro (A-A),e processar o resto, subtraindo 1 aos índices do vector: BBC-D2,1era 3,2 || |3,2era 4,3 -BCED4,4era 4,4

71 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Recursividade: a função chama-se a si mesma. function mat=alinhaseqs(seq1,seq2,alinhamento); Alinha o 1º par do vector alinhamento. Se há mais, chama novamente alinhaseq com o que sobra das sequências e alinhamento, e acrescenta à matriz.

72 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function mat=alinhaseqs(seq1,seq2,alinhamento); p1=alinhamento(1,1); p2=alinhamento(1,2); s1=seq1(1:p1); s2=seq2(1:p2);... Guardamos o primeiro par a alinhar, p1 e p2, e criamos s1 e s2 com esses caracteres da sequência

73 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... sm=""; while length(s1)!=length(s2) if length(s1)

74 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... sm=""; while length(s1)!=length(s2) if length(s1)

75 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... if rows(alinhamento)>1 alinhamento(:,1)=alinhamento(:,1)-p1; alinhamento(:,2)=alinhamento(:,2)-p2; seq1=seq1(p1+1:length(seq1)); seq2=seq2(p2+1:length(seq2)); alinhamento=alinhamento(2:rows(alinhamento),:); mat=[mat,alinhaseqs(seq1,seq2,alinhamento)]; endif endfunction Se ainda há mais para alinhar

76 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... if rows(alinhamento)>1 alinhamento(:,1)=alinhamento(:,1)-p1; alinhamento(:,2)=alinhamento(:,2)-p2; seq1=seq1(p1+1:length(seq1)); seq2=seq2(p2+1:length(seq2)); alinhamento=alinhamento(2:rows(alinhamento),:); mat=[mat,alinhaseqs(seq1,seq2,alinhamento)]; endif endfunction Subtraímos p1 e p2 aos índices

77 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... if rows(alinhamento)>1 alinhamento(:,1)=alinhamento(:,1)-p1; alinhamento(:,2)=alinhamento(:,2)-p2; seq1=seq1(p1+1:length(seq1)); seq2=seq2(p2+1:length(seq2)); alinhamento=alinhamento(2:rows(alinhamento),:); mat=[mat,alinhaseqs(seq1,seq2,alinhamento)]; endif endfunction Eliminamos os primeiros p1 e p2 elementos das sequências (já estão alinhados)

78 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... if rows(alinhamento)>1 alinhamento(:,1)=alinhamento(:,1)-p1; alinhamento(:,2)=alinhamento(:,2)-p2; seq1=seq1(p1+1:length(seq1)); seq2=seq2(p2+1:length(seq2)); alinhamento=alinhamento(2:rows(alinhamento),:); mat=[mat,alinhaseqs(seq1,seq2,alinhamento)]; endif endfunction Eliminamos o primeiros par do alinhamento (já está alinhado)

79 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch... if rows(alinhamento)>1 alinhamento(:,1)=alinhamento(:,1)-p1; alinhamento(:,2)=alinhamento(:,2)-p2; seq1=seq1(p1+1:length(seq1)); seq2=seq2(p2+1:length(seq2)); alinhamento=alinhamento(2:rows(alinhamento),:); mat=[mat,alinhaseqs(seq1,seq2,alinhamento)]; endif endfunction E acrescentamos à matriz o resultado de alinhar o resto de acordo com o alinhamento ajustado.

80 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch O que acontece Recebe ABBCD, ABCED 1,1 3,2 4,3 5,5 Cria: A | A

81 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Chama novamente com BBCD, BCED 2,1 3,2 4,4 Cria: BB(posição 2) | -B(posição 1)

82 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Chama novamente com CD, CED 1,1 2,3 Cria: C | C

83 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Chama novamente com D, ED 1,2 Cria: -D | ED Termina, e devolve o que criou.

84 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch A chamada anterior tinha criado C e recebe -D | CED Devolve C-D | CED

85 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch A anterior a essa tinha criado BB e recebe C-D || | -BCED Devolve à primeira BBC-D || | -BCED

86 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch A primeira tinha criado A e recebe BBC-D | || | A-BCED Resultado final: ABBC-D | || | A-BCED

87 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch Percorrer a matriz, e criar uma matriz com os pares que alinham: ABBC-D1,1 | || |3,2 A-BCED4,3 5,5 Função principal function [amat,score]=nwalinha(seq1,seq2)

88 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [amat,score]=nwalinha(seq1,seq2) amat=nwcriamatriz(seq1,seq2); al=[]; [l,c]=maxmatriz(amat); score=amat(l,c); while (l>1) & (c>1) al=[l,c;al]; [l,c]=maxmatriz(amat(1:l-1,1:c-1)); endwhile al=[l,c;al]; amat=alinhaseqs(seq1,seq2,al); endfunction Cria a matriz com as pontuações e o alinhamento vazio

89 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [amat,score]=nwalinha(seq1,seq2) amat=nwcriamatriz(seq1,seq2); al=[]; [l,c]=maxmatriz(amat); score=amat(l,c); while (l>1) & (c>1) al=[l,c;al]; [l,c]=maxmatriz(amat(1:l-1,1:c-1)); endwhile al=[l,c;al]; amat=alinhaseqs(seq1,seq2,al); endfunction Coordenadas do máximo. O valor nessa célula é a pontuação total do alinhamento (número de elementos iguais).

90 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [amat,score]=nwalinha(seq1,seq2) amat=nwcriamatriz(seq1,seq2); al=[]; [l,c]=maxmatriz(amat); score=amat(l,c); while (l>1) & (c>1) al=[l,c;al]; [l,c]=maxmatriz(amat(1:l-1,1:c-1)); endwhile al=[l,c;al]; amat=alinhaseqs(seq1,seq2,al); endfunction Enquanto não chega à primeira linha ou primeira coluna, vai acrescentando ao alinhamento (do fim para o princípio).

91 Ludwig Krippahl, Alinhar Sequências: Needleman-Wunsch function [amat,score]=nwalinha(seq1,seq2) amat=nwcriamatriz(seq1,seq2); al=[]; [l,c]=maxmatriz(amat); score=amat(l,c); while (l>1) & (c>1) al=[l,c;al]; [l,c]=maxmatriz(amat(1:l-1,1:c-1)); endwhile al=[l,c;al]; amat=alinhaseqs(seq1,seq2,al); endfunction Acrescenta o último valor ao alinhamento (no princípio) e constrói a matriz.

92 Ludwig Krippahl, Recapitulando Estruturas e listas Perceber como criar. Acrescentar, e aceder a elementos da lista Ficheiros: fopen, fclose, fgetl, feof. Importância do identificador Recursividade Função chama-se a si própria e vai juntando os valores. Atenção: tem que terminar.

93 Ludwig Krippahl, Dúvidas


Carregar ppt "Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 8."

Apresentações semelhantes


Anúncios Google