50
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Embed Size (px)

Citation preview

Page 1: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008

Programação para as Ciências Experimentais

2007/8

Teórica 5

Page 2: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 2

Na aula de hoje...

Trabalho prático 1• Cálculo do ponto isoeléctrico de proteínas.

Como planear um programa• Exemplo do trabalho 1 de 06/07

Page 3: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 3

Proteínas

Proteínas

Page 4: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 4

Problema

Proteínas• Sequência de aminoácidos

http://en.wikipedia.org/wiki/Amino_acid

Page 5: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 5

Problema

Ponto isoeléctrico• Dois grupos protonáveis

pKa=10

pKa=2

Page 6: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 6

Problema

Ponto isoeléctrico• Henderson-Hasselbalch

http://en.wikipedia.org/wiki/Henderson-Hasselbalch_equation

Page 7: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 7

Problema

Ponto isoeléctrico• pH=0, carga +1

pKa=10

pKa=2

+1

0

Page 8: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 8

Problema

Ponto isoeléctrico• pH=2, carga +0.5

pKa=10

pKa=2

+1

-0.5

Page 9: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 9

Problema

Ponto isoeléctrico• pH=7, carga 0

pKa=10

pKa=2

+1

-1

Page 10: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 10

Problema

Ponto isoeléctrico• pH=10, carga -0.5

pKa=10

pKa=2

+0.5

-1

Page 11: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 11

Problema

Ponto isoeléctrico• pH=12, carga -1

pKa=10

pKa=2

0

-1

Page 12: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 12

Problema

Proteínas

Page 13: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 13

Problema

Proteínas

Page 14: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 14

Problema

Proteínas

+1

-1

Page 15: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 15

Problema

Proteínas

http://www.biology.arizona.edu/biochemistry/problem_sets/aa/aa.html

Page 16: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 16

Ficheiro pKas.txt

Codigo COOH NH3 C.L. Carga(Desp)A 2.3 9.9 - - C 1.8 10.8 8.6 -1 D 2 10 4.5 -1 E 2.2 9.7 4.5 -1 F 1.8 9.1 - - ...V 2.3 9.6 - - W 2.4 9.4 - - Y 2.2 9.1 9.8 -1

Page 17: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 17

Simplificação

Estrutura Campo ... Só sequência

Page 18: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 18

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

Page 19: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 19

Cargas em função do pH

Page 20: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 20

Ficheiro seqs.txt>UniProt/Swiss-Prot|P00273|DESR_DESGI DesulforedoxinANEGDVYKCELCGQVVKVLEEGGGTLVCCGEDMVKQ>UniProt/Swiss-Prot|P14073|FER_BUTME FerredoxinAYKITDECIACGSCADQCPVEAISEGSIYEIDEALCTDCGACADQCPVEAIVPED>UniProt/Swiss-Prot|Q46495|DESR_DESBR DesulfoferrodoxinMPERLQVYKCEVCGNIVEVLNGGIGELVCCNQDMKLMSENTVDAAKEKHVPVIEKIDGGYKVKVGAVAHPMEEKHYIQWIELLADDKCYTQFLKPGQAPEAVFLIEAAKVVAREYCNIHGHWKAEN>UniProt/Swiss-Prot|P14393|GLB_APLJU GlobinALSAADAGLLAQSWAPVFANSDANGASFLVALFTQFPESANFFNDFKGKSLADIQASPKLRDVSSRIFARLNEFVSNAADAGKMGSMLQQFATEHAGFGVGSAQFQNVRSMFPGFVASLSAPAADAAWNSLFGLIISALQSAGK>UniProt/TrEMBL|Q4VSD1|Q4VSD1_9HIV1 ProteaseSSCSFPQITLWQRTLVTVKIGGQLKEALLDTGADDTVLEDINLPGKWKPRMIGGIGGFIKVKQYDQILIEICGKKAIGTVLVGPTPVNIIGRNMLTQIGCTLNFPISPI

Page 21: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 21

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

Page 22: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 22

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

Page 23: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 23

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

Page 24: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 24

Ler sequências de proteínas.

Função [nomes,seqs]=lefasta(nome)• Lê o ficheiro cujo nome é fornecido e

devolve uma lista de estruturas.

• Devolva duas tabelas de strings com os nomes (identificadores) e as sequências.

Page 25: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 25

Ler sequências de proteínas.

function [nomes,seqs]=lefasta(nome)id=fopen(nome,”r”);nomes="";seqs="";seq='';

(Ciclo de leitura do ficheiro)

fclose(id);endfunction

Abre o ficheiro e guarda o identificador

Page 26: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 26

Ler sequências de proteínas.

function [nomes,seqs]=lefasta(nome)id=fopen(nome);nomes="";seqs="";seq='';

(Ciclo de leitura do ficheiro)

fclose(id);endfunction

Cria tabelas vazias

Sequência inicial vazia

Page 27: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 27

Ler sequências de proteínas.

function [nomes,seqs]=lefasta(nome)id=fopen(nome);nomes="";seqs="";seq='';

(Ciclo de leitura do ficheiro)

fclose(id);endfunction

Depois de ler o ficheiro, fecha e termina a

função

Page 28: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 28

Ler sequências de proteínas.

while !feof(id)s=fgetl(id);

if strcmp(s(1),'>')if !strcmp(seq,""')

nomes=[nomes;nome];seqs=[seqs;seq];

endifnome=s;seq="";

else seq=[seq,s];endif

endwhile

Ciclo enquanto o ficheiro não chegou ao

fim.

Page 29: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 29

Ler sequências de proteínas.

while !feof(id)s=fgetl(id);if strcmp(s(1),'>')

if !strcmp(seq,""')nomes=[nomes;nome];seqs=[seqs;seq];

endifnome=s;seq="";

else seq=[seq,s];endif

endwhile

Lê uma linha e compara o primeiro caracter com

“>”

(quer dizer que encontrou uma proteína

nova)

Page 30: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 30

Ler sequências de proteínas.

while !feof(id)s=fgetl(id);if strcmp(s(1),'>')

if !strcmp(seq,""')nomes=[nomes;nome];seqs=[seqs;seq];

endifnome=s;seq="";

else seq=[seq,s];endif

endwhile

Se há uma sequência guardada acrescenta à tabela (nomes e seqs)

É por isto que a sequência seq começa

vazia

Page 31: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 31

Ler sequências de proteínas.

while !feof(id)s=fgetl(id);if strcmp(s(1),'>')

if !strcmp(seq,""')nomes=[nomes;nome];seqs=[seqs;seq];

endifnome=s;seq="";

else seq=[seq,s];endif

endwhile

Quando encontra nova proteína guarda o identificador da

proteína e limpa a sequência.

Page 32: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 32

Ler sequências de proteínas.

while !feof(id)s=fgetl(id);if strcmp(s(1),'>')

if !strcmp(seq,""')nomes=[nomes;nome];seqs=[seqs;seq];

endifnome=s;seq="";

else seq=[seq,s];endif

endwhile

Se não é uma proteína nova então é outra linha da sequência,

para juntar à sequência lida até agora

Page 33: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 33

Ler sequências de proteínas.

endwhile

if !strcmp(seq,"")nomes=[nomes;nome];seqs=[seqs;seq];

endif

fclose(id);endfunction

No final do ciclo acrescentar a última

proteína lida, se houver

Page 34: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 34

Avaliação

Concepção: 4 valores• Explicar muito resumidamente cada função

Função: soma

Argumentos: dois valores numéricos (a,b)

Valor devolvido: a soma dos argumentos

Funcionamento: Soma os valores e devolve o resultado

• No funcionamento indicar que outras funções usa (das que implementaram)

Page 35: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 35

Avaliação

Concepção: 4 valores Implementação: 10 valores

• Copy-paste das funções todas, na integra:

function ....

...

endfuntion

function ...

...

endfunction

Page 36: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 36

Avaliação

Concepção: 4 valores Implementação: 10 valores Testes: 3 valores

• Listagem dos testes que fizeram. É importante testar cada função individualmente, senão pode ser difícil encontrar erros...

Page 37: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 37

Avaliação

Concepção: 4 valores Implementação: 10 valores Testes: 3 valores Avaliação e crítica: 3 valores

• Sugestões para melhorias ou vulnerabilidades do código • Por exemplo, quando implementámos a função

umelem tinha a limitação de assumir elementos com uma só letra.

Page 38: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 38

Exemplo (Trabalho 1 de 06/07)

Calcular concentrações de equilíbrio para um sistema de reacções químicas.

A função recebe:

CH3COOH H+ + CH3COO-

H2O H+ + OH-

Concentrações iniciais

Constantes

Page 39: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 39

Objectivo

Calcular concentrações de equilíbrio para um sistema de reacções químicas.

A função devolve:

Concentrações de equilíbrio

Page 40: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 40

Objectivo

Exemplo:

octave:7> mat=['CH3COOH = H+ + CH3COO-';'H2O = H+ + OH-'];

octave:8> eks=[1.78e-5,1.8e-16];

octave:9> esps=['CH3COOH';'H+';'CH3COO-';'H2O';'OH-'];

octave:10> cis=[0.01,0,0,55.346,0];

octave:11> res=sistema(mat,esps,eks,cis,1e-8)

res =

9.5869e-03 4.1309e-04 4.1308e-04 5.5346e+01 6.4431e-09

Page 41: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 41

Concepção

O trabalho pode ser dividido em duas partes autónomas:• Parte A: Interpretar o texto das reacções para

um formato conveniente

• Parte B: Calcular as concentrações e equilíbrio

Estas partes podem ser implementadas e testadas de forma independente.

Page 42: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 42

Concepção

Parte A: Interpretar o texto das reacções para um formato conveniente• Problema: o que é o formato conveniente?

• Resposta: é o que der jeito para a parte B. O melhor é começar pela B.

Page 43: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 43

Concepção

Parte B: Calcular as concentrações e equilíbrio.• B1: calcular o equilíbrio de uma reacção.

• B2: usar B1 para calcular para todas

Page 44: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 44

Equilíbrio de uma reacção

Calcular o valor o zero de uma função

2A + B 2D

022

2

2

DBAkeBA

Dke

Page 45: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 45

Equilíbrio de uma reacção

Calcular o valor o zero de uma função Precisamos:

• Coeficientes de estequiometria (um vector)

• Concentrações iniciais (um vector)

• Constante de equilibrio.

Page 46: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 46

Equilíbrio de várias reacções

Calcular o equilíbrio de uma Alterar concentrações Fazer o mesmo na próxima, até

percorrer todas Repetir até que não mude nada (dentro

de uma precisão)

Page 47: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 47

Equilíbrio de várias reacções

Iterar o equilíbrio de cada uma até ficar tudo na mesma.

Precisamos:• Coeficientes de estequiometria (matriz)

• Concentrações iniciais (um vector)

• Constantes de equilibrio (um vector).

Page 48: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 48

Concepção

Parte B: Calcular as concentrações e equilíbrio• Precisa de matriz com coeficientes de

estequiometria.

Parte A: Interpretar o texto das reacções para um formato conveniente• Quer dizer, converter numa matriz com os

coeficientes de estequiometria.

Page 49: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 49

Concepção

Identificar tarefas separáveis.• Onde podemos “partir” o problema

Identificar dependências.• O que é que uma parte precisa da outra

Fazer e refazer• Se ficamos encravados não ter medo de voltar atrás

para fazer melhor... Eficiência

• Por exemplo, ler ficheiros é lento. Ler só uma vez se possível.

Page 50: Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 5

Ludwig Krippahl, 2008 50

Dúvidas