500 likes | 595 Views
Programação para as Ciências Experimentais 2007/8. Teórica 5. 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. Proteínas. Proteínas. Problema. Proteínas Sequência de aminoácidos.
E N D
Programação para as Ciências Experimentais2007/8 Teórica 5 Ludwig Krippahl, 2008
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
Proteínas • Proteínas
Problema • Proteínas • Sequência de aminoácidos http://en.wikipedia.org/wiki/Amino_acid
Problema • Ponto isoeléctrico • Dois grupos protonáveis pKa=2 pKa=10
Problema • Ponto isoeléctrico • Henderson-Hasselbalch http://en.wikipedia.org/wiki/Henderson-Hasselbalch_equation
Problema • Ponto isoeléctrico • pH=0, carga +1 pKa=2 0 pKa=10 +1
Problema • Ponto isoeléctrico • pH=2, carga +0.5 pKa=2 -0.5 pKa=10 +1
Problema • Ponto isoeléctrico • pH=7, carga 0 pKa=2 -1 pKa=10 +1
Problema • Ponto isoeléctrico • pH=10, carga -0.5 pKa=2 -1 pKa=10 +0.5
Problema • Ponto isoeléctrico • pH=12, carga -1 pKa=2 -1 pKa=10 0
Problema • Proteínas
Problema • Proteínas
Problema • Proteínas -1 +1
Problema • Proteínas http://www.biology.arizona.edu/biochemistry/problem_sets/aa/aa.html
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
Simplificação • Estrutura • Campo • ... • Só sequência
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
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
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....
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
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
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.
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
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
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
Ler sequências de proteínas. Ciclo enquanto o ficheiro não chegou ao fim. while!feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(seq,""') nomes=[nomes;nome]; seqs=[seqs;seq]; endif nome=s; seq=""; else seq=[seq,s]; endif endwhile
Ler sequências de proteínas. Lê uma linha e compara o primeiro caracter com “>” (quer dizer que encontrou uma proteína nova) while!feof(id) s=fgetl(id); if strcmp(s(1),'>') if !strcmp(seq,""') nomes=[nomes;nome]; seqs=[seqs;seq]; endif nome=s; seq=""; else seq=[seq,s]; endif endwhile
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]; endif nome=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
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]; endif nome=s; seq=""; else seq=[seq,s]; endif endwhile Quando encontra nova proteína guarda o identificador da proteína e limpa a sequência.
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]; endif nome=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
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
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)
Avaliação • Concepção: 4 valores • Implementação: 10 valores • Copy-paste das funções todas, na integra: function .... ... endfuntion function ... ... endfunction
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...
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.
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
Objectivo • Calcular concentrações de equilíbrio para um sistema de reacções químicas. • A função devolve: Concentrações de equilíbrio
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
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.
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.
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
Equilíbrio de uma reacção • Calcular o valor o zero de uma função 2A + B 2D
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.
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)
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).
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.
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.