1 / 93

Programação para as Ciências Experimentais 2006/7

Programação para as Ciências Experimentais 2006/7. Teórica 8. Na aula de hoje. Estruturas. Listas. Ficheiros, leitura e escrita simples. Comparação de sequências. Exemplo de uma função recursiva. Estruturas. Vectores e matrizes guardam valores de um só tipo.

nika
Download Presentation

Programação para as Ciências Experimentais 2006/7

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. 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 = 10 2 3 5 9 5 9 preco = 12.500 }

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

  6. Estruturas • Estrutura de estrutura... octave:13> cliente.nome="Vitor Meireles"; octave:14> cliente.prato=prato cliente = { nome = Vitor Meireles prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } }

  7. 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. 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. Listas l = ( [1] = 1 1º elemento: escalar [2] = abc 2º elemento: string [3] = 3º elemento: estrutura { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } )

  10. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Ficheiros • Sabemos que o ficheiro chegou ao fim com a função feof: • feof( identificador ) • Devolve true se o ficheiro estiver no fim.

  22. 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. 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. 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. 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. 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. 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. 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. Exemplo: ler sequências de proteínas. Ciclo enquanto o ficheiro não chegou ao fim. r.seq=''; while!feof(id) s=fgetl(id); ifstrcmp(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

  30. Exemplo: ler sequências de proteínas. Lê uma linha e compara o primeiro caracter com “>” (quer dizer que encontrou uma proteína nova) r.seq=''; while!feof(id) s=fgetl(id); ifstrcmp(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

  31. Exemplo: ler sequências de proteínas. Se há uma sequência guardada, então acrescenta r à lista l É por isto que a sequência em r começa vazia r.seq=''; while!feof(id) s=fgetl(id); ifstrcmp(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

  32. Exemplo: ler sequências de proteínas. r.seq=''; while!feof(id) s=fgetl(id); ifstrcmp(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. Exemplo: ler sequências de proteínas. r.seq=''; while!feof(id) s=fgetl(id); ifstrcmp(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. Exemplo: ler sequências de proteínas. r.seq=''; while!feof(id) s=fgetl(id); ifstrcmp(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. Exemplo: centros Fe S

  36. Desulforedoxin, 1DXG Dímero

  37. Exemplo: centros Fe S • >...Desulforedoxin ANEGDVYKCELCGQVVKVLEEGGGTLVCCGEDMVKQ • Padrão do centro: • ...C-[até 4]-C- ... -C-[até 4]-C-...

  38. 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-...

  39. 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):443-53.

  40. Alinhar Sequências:Needleman-Wunsch • De duas sequências: • ABBCD e ABCED • Obter o alinhamento: ABBC-D | || | A-BCED

  41. 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)

  42. Alinhar Sequências:Needleman-Wunsch • Matriz

  43. 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.

  44. 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

  45. 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

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

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

More Related