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

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

Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5.

Apresentações semelhantes


Apresentação em tema: "Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5."— Transcrição da apresentação:

1 Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5

2 Ludwig Krippahl, 2009 2 Na aula de hoje... Estruturas. Vectores de estruturas (structure arrays). Leitura formatada. Recursividade Gráficos 3D

3 Ludwig Krippahl, 2009 3 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, 2009 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 Ludwig Krippahl, 2009 5 Estruturas prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } Estrutura

6 Ludwig Krippahl, 2009 6 Estruturas prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } Campos

7 Ludwig Krippahl, 2009 7 Estruturas prato = { nome = filetes pedidos = 10 2 3 5 9 5 9 preco = 12.500 } Valores

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

9 Ludwig Krippahl, 2009 9 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 }

10 Ludwig Krippahl, 2009 10 Structure arrays Podemos criar vectores de estruturas, desde que as estruturas tenham os mesmos campos (os valores do mesmo campo podem ser de tipos diferentes, mas não convém...) x.a=1 x.b=2 y.a=3 y.b=s V=[x,y]

11 Ludwig Krippahl, 2009 11 Structure arrays Não podemos criar vectores de estruturas se os campos forem diferentes y.c=4(acrescentamos um campo c ao y) V=[x,y](dá erro...)

12 Ludwig Krippahl, 2009 12 Structure arrays Um vector de estruturas funciona como um vector. for f=1:10 x(f).a=f; endfor x(2:2:10) Nota: podemos criar um vector atribuindo valores aos seus elementos: v(1)=1, v(2)=1...

13 Ludwig Krippahl, 2009 13 Structure arrays Se acrescentarmos um campo a um elemento acrescenta a todos, mas vazio. for f=1:10 x(f).a=f; endfor x(2:2:10) x(2).b=0

14 Ludwig Krippahl, 2009 14 Structure arrays Podemos também atribuir um valor a um campo de todos (ou alguns) elementos do vector x(:).b=1 x(1:5).b=2

15 Ludwig Krippahl, 2009 15 Exemplo: massa molecular Uma função que receba uma fórmula química e devolva a massa molecular. massamol(CHCl3) ans = 119.38

16 Ludwig Krippahl, 2009 16 Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos (e.g. Cl3 são 3 àtomos de Cl) Somar tudo.

17 Ludwig Krippahl, 2009 17 Exemplo: massa molecular Saber as massas atómicas Ficheiro elementos.txt (SQNomeNAMassaGP) AcActinium8922707 AgSilver47107.8682115 AlAluminium1326.9815386133 AmAmericium9524307

18 Ludwig Krippahl, 2009 18 Exemplo: massa molecular Saber as massas atómicas Ficheiro elementos.txt Separado por tabs

19 Ludwig Krippahl, 2009 19 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Variáveis onde guardar os valores.

20 Ludwig Krippahl, 2009 20 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Identificador do ficheiro

21 Ludwig Krippahl, 2009 21 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Formatação dos valores a ler (string, string, inteiro, fraccionário, inteiro, inteiro)

22 Ludwig Krippahl, 2009 22 Exemplo: massa molecular Leitura formatada (fscanf) O fscanf considera qualquer espaço em branco (espaço, tab, nova linha) como separando os valores e ignora-o. Por isso não precisamos dizer onde estão os tabs, etc. Mas se houver um espaço numa string o fscanf pensa que são duas.

23 Ludwig Krippahl, 2009 23 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Para os códigos da formatação ver printf (14.2.4)

24 Ludwig Krippahl, 2009 24 Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Indica que é para funcionar como na linguagem C. É importante não esquecer isto.

25 Ludwig Krippahl, 2009 25 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%s%s%d%f%d%d","C"); els(f).simb=simb; els(f).nome=nome; els(f).na=na; els(f).massa=massa; els(f).grupo=grupo; els(f).periodo=periodo; f=f+1; endwhile fclose(id); endfunction

26 Ludwig Krippahl, 2009 26 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Abre o ficheiro

27 Ludwig Krippahl, 2009 27 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Enquanto não chega ao fim lê cada linha para várias variáveis

28 Ludwig Krippahl, 2009 28 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction e constrói o elemento f do vector de estruturas

29 Ludwig Krippahl, 2009 29 Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Incrementa f para o próximo elemento

30 Ludwig Krippahl, 2009 30 Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos Somar tudo.

31 Ludwig Krippahl, 2009 31 Exemplo: massa molecular Decompor a fórmula: Retirar da primeira letra até à primeira maiúscula. Decompor o resto, se sobrar. Função recursiva.

32 Ludwig Krippahl, 2009 32 Exemplo: massa molecular Decompor a fórmula: Retirar da primeira letra até à primeira maiúscula. Decompor o resto, se sobrar. Função recursiva. Decompor CH3Cl é C, e decompor H3Cl

33 Ludwig Krippahl, 2009 33 Recursividade Factorial: N! = N * (N-1) * (N-2) *.. N! = N * (N-1)!

34 Ludwig Krippahl, 2009 34 Recursividade Factorial: function f=factorial(n) if n<=1 f=1; else f=n*factorial(n-1); endif endfunction Condição de paragem. É importante ser primeiro (ou antes de chamar a função novamente)

35 Ludwig Krippahl, 2009 35 Recursividade Factorial: function f=factorial(n) if n<=1 f=1; else f=n*factorial(n-1); endif endfunction Chamada recursiva. N!= N* (N-1)!

36 Ludwig Krippahl, 2009 36 Exemplo: massa molecular function le=decompor(formula) le=[]; if length(formula)>0 Guarda o 1º elemento, incluindo o número. Em p guarda a posição do próximo elemento if p<=length(formula) le=[le,decompor(formula(p:length(formula)))]; endif endfunction

37 Ludwig Krippahl, 2009 37 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor Guarda 1ª letra. A quantidade é string vazia e assume que não há próxima

38 Ludwig Krippahl, 2009 38 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor A partir do 2º caracter, se for digito vai para a string da quantidade

39 Ludwig Krippahl, 2009 39 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor senão, se for minúscula vai para o elemento.

40 Ludwig Krippahl, 2009 40 Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor Caso contrário há próximo. Guarda-se a posição em p e termina-se este ciclo

41 Ludwig Krippahl, 2009 41 If, caso geral (if, elseif, else) if cond1 se a cond1 for verdadeira elseif cond2 se a cond1 for falsa e a cond2 verdadeira elseif....... else caso nenhuma seja verdadeira endif

42 Ludwig Krippahl, 2009 42 Exemplo: massa molecular if !strcmp(quant,"") le(1).quant=str2num(quant); else le(1).quant=1; endif Terminado o ciclo guarda-se o número na quantidade, ou 1 se nenhuma quantidade foi encontrada

43 Ludwig Krippahl, 2009 43 Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos Somar tudo.

44 Ludwig Krippahl, 2009 44 Exemplo: massa molecular Encontrar a massa de um elemento na tabela function m=massael(simbolo,lista) m=0; for f=1:length(lista) if strcmp(lista(f).simb,simbolo) m=lista(f).massa; break endif endfor endfunction

45 Ludwig Krippahl, 2009 45 Exemplo: massa molecular Calcular tudo function m=massamol(formula) lista=lerelementos("elementos.txt") c=decompor(formula); m=0; for f=1:length(c) m=m+massael(c(f).el,lista)*c(f).quant; endfor endfunction

46 Ludwig Krippahl, 2009 46 Resumindo Leitura formatada (fscanf) Estruturas e vectores de estruturas Recursividade Massa molecular Ler os dados Partir a fórmula química em elementos e número Percorrer o vector encontrando a massa de cada elemento e somando

47 Ludwig Krippahl, 2009 47 Gráficos 3D Função meshgrid: cria matrizes para x, y [xx,yy]=meshgrid(1:3,4:6) xx = 1 2 3 yy = 4 4 4 5 5 5 6 6 6

48 Ludwig Krippahl, 2009 48 Gráficos 3D Função mesh: traça o gráfico 3D rede x=-10:10; y=-10:10; [xx,yy]=meshgrid(x,y); mesh(xx,yy,xx.^2-yy.^2+xx.*yy)

49 Ludwig Krippahl, 2009 49 Gráficos 3D

50 Ludwig Krippahl, 2009 50 Gráficos 3D Função surf: traça o gráfico 3D sólido x=-10:10; y=-10:10; [xx,yy]=meshgrid(x,y); surf(xx,yy,xx.^2-yy.^2+xx.*yy)

51 Ludwig Krippahl, 2009 51 Gráficos 3D

52 Ludwig Krippahl, 2009 52 Gráficos 3D Resumo: usar meshgrid para criar as matrizes para o x e y a partir dos vectores. calcular o z a partir das matrizes criadas com o meshgrid. mesh(x,y,z) para desenhar a rede surf(x,y,z) para superfície sólida.

53 Ludwig Krippahl, 2009 53 Resumindo... Estruturas e vectores de estruturas Secção 6.1 Data Structures Leitura formatada Secção 14.2 C-Style I/O Functions if – elseif – else Secção 10 Statements (10.1 para o if) Recursividade Gráficos 3D Secção 15.1 Plotting Basics

54 Ludwig Krippahl, 2009 54 Próximas teóricas... 6: apresentação do trabalho 1 7: revisões e dúvidas

55 Ludwig Krippahl, 2009 55 Próxima prática Cálculo do ponto isoeléctrico de proteínas. Trabalho 1 de 07-08

56 Ludwig Krippahl, 2009 56 Problema Proteínas Sequência de aminoácidos http://en.wikipedia.org/wiki/Amino_acid

57 Ludwig Krippahl, 2009 57 Problema Ponto isoeléctrico Dois grupos protonáveis pKa=10 pKa=2

58 Ludwig Krippahl, 2009 58 Problema Ponto isoeléctrico Henderson-Hasselbalch http://en.wikipedia.org/wiki/Henderson-Hasselbalch_equation

59 Ludwig Krippahl, 2009 59 Problema Ponto isoeléctrico pH=0, carga +1 pKa=10 pKa=2 +1 0

60 Ludwig Krippahl, 2009 60 Problema Ponto isoeléctrico pH=2, carga +0.5 pKa=10 pKa=2 +1 -0.5

61 Ludwig Krippahl, 2009 61 Problema Ponto isoeléctrico pH=7, carga 0 pKa=10 pKa=2 +1

62 Ludwig Krippahl, 2009 62 Problema Ponto isoeléctrico pH=10, carga -0.5 pKa=10 pKa=2 +0.5

63 Ludwig Krippahl, 2009 63 Problema Ponto isoeléctrico pH=12, carga -1 pKa=10 pKa=2 0

64 Ludwig Krippahl, 2009 64 Problema Proteínas

65 Ludwig Krippahl, 2009 65 Problema Proteínas

66 Ludwig Krippahl, 2009 66 Problema Proteínas +1

67 Ludwig Krippahl, 2009 67 Problema Proteínas http://www.biology.arizona.edu/biochemistry/problem_sets/aa/aa.html

68 Ludwig Krippahl, 2009 68 Ficheiro pKas.txt CodigoCOOHNH3C.L.Carga(Desp) A2.39.9-- C1.810.88.6-1 D2104.5-1 E2.29.74.5-1 F1.89.1--... V2.39.6-- W2.49.4-- Y2.29.19.8-1

69 Ludwig Krippahl, 2009 69 Simplificação Calcular a carga a cada pH considerando: NH3 do primeiro da sequência Tem carga 0 desprotonado COOH do último da sequência Tem carga -1 desprotonado Cadeias laterais dos intermédios Ler a carga na tabela

70 Ludwig Krippahl, 2009 70 Cargas em função do pH

71 Ludwig Krippahl, 2009 71 Ficheiro seqs.txt > UniProt/Swiss-Prot|P00273|DESR_DESGI Desulforedoxin ANEGDVYKCELCGQVVKVLEEGGGTLVCCGEDMVKQ >UniProt/Swiss-Prot|P14073|FER_BUTME Ferredoxin AYKITDECIACGSCADQCPVEAISEGSIYEIDEALCTDCGACADQCPVEAIVPED >UniProt/Swiss-Prot|Q46495|DESR_DESBR Desulfoferrodoxin MPERLQVYKCEVCGNIVEVLNGGIGELVCCNQDMKLMSENTVDAAKEKHVPVIEKIDGGY KVKVGAVAHPMEEKHYIQWIELLADDKCYTQFLKPGQAPEAVFLIEAAKVVAREYCNIHG HWKAEN >UniProt/Swiss-Prot|P14393|GLB_APLJU Globin ALSAADAGLLAQSWAPVFANSDANGASFLVALFTQFPESANFFNDFKGKSLADIQASPKL RDVSSRIFARLNEFVSNAADAGKMGSMLQQFATEHAGFGVGSAQFQNVRSMFPGFVASLS APAADAAWNSLFGLIISALQSAGK >UniProt/TrEMBL|Q4VSD1|Q4VSD1_9HIV1 Protease SSCSFPQITLWQRTLVTVKIGGQLKEALLDTGADDTVLEDINLPGKWKPRMIGGIGGFIK VKQYDQILIEICGKKAIGTVLVGPTPVNIIGRNMLTQIGCTLNFPISPI

72 Ludwig Krippahl, 2009 72 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....

73 Ludwig Krippahl, 2009 73 Objectivo da aula Perceber o problema Compreender as funções e ficheiros fornecidos Planear como encaixam Implementar o que falta para pôr tudo a funcionar: Ler o ficheiro das sequências e produzir um ficheiro com os pontos isoeléctricos.

74 Ludwig Krippahl, 2009 74 Dúvidas


Carregar ppt "Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5."

Apresentações semelhantes


Anúncios Google