ludwig krippahl, 2008 programação para as ciências experimentais 2007/8 teórica 5
TRANSCRIPT
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
Ludwig Krippahl, 2008 3
Proteínas
Proteínas
Ludwig Krippahl, 2008 4
Problema
Proteínas• Sequência de aminoácidos
http://en.wikipedia.org/wiki/Amino_acid
Ludwig Krippahl, 2008 5
Problema
Ponto isoeléctrico• Dois grupos protonáveis
pKa=10
pKa=2
Ludwig Krippahl, 2008 6
Problema
Ponto isoeléctrico• Henderson-Hasselbalch
http://en.wikipedia.org/wiki/Henderson-Hasselbalch_equation
Ludwig Krippahl, 2008 7
Problema
Ponto isoeléctrico• pH=0, carga +1
pKa=10
pKa=2
+1
0
Ludwig Krippahl, 2008 8
Problema
Ponto isoeléctrico• pH=2, carga +0.5
pKa=10
pKa=2
+1
-0.5
Ludwig Krippahl, 2008 9
Problema
Ponto isoeléctrico• pH=7, carga 0
pKa=10
pKa=2
+1
-1
Ludwig Krippahl, 2008 10
Problema
Ponto isoeléctrico• pH=10, carga -0.5
pKa=10
pKa=2
+0.5
-1
Ludwig Krippahl, 2008 11
Problema
Ponto isoeléctrico• pH=12, carga -1
pKa=10
pKa=2
0
-1
Ludwig Krippahl, 2008 12
Problema
Proteínas
Ludwig Krippahl, 2008 13
Problema
Proteínas
Ludwig Krippahl, 2008 14
Problema
Proteínas
+1
-1
Ludwig Krippahl, 2008 15
Problema
Proteínas
http://www.biology.arizona.edu/biochemistry/problem_sets/aa/aa.html
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
Ludwig Krippahl, 2008 17
Simplificação
Estrutura Campo ... Só sequência
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
Ludwig Krippahl, 2008 19
Cargas em função do pH
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
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....
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
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
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.
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
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
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
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.
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)
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
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.
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
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
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)
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
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...
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.
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
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
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
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.
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.
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
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
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.
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)
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).
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.
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.
Ludwig Krippahl, 2008 50
Dúvidas