bioinfusion

blog di vita bioinformatica stremata

calcolare il punto isoelettrico di un peptide (o almeno stimarlo)

Pubblicato da fuliggians su 14 Maggio 2007

Mi hanno chiesto di scrivere un piccolo script per calcolare l’IP di un peptide.

Il problema solito è che questi tipi di stima vengono fatti sull’intera sequenza proteica, non il singolo peptide. Comunque on line ho trovato almeno 2 tools in grado di fare questi calcoli. Sfortunatamente, testandoli un po’ se ne generano dei risultati ben differenti quando si inserisce una sequenza di circa 15 aa.

A questo punto ho scelto di seguire le linee guida del sofware integrato nella “sequence manipulator suite” (consigliato), e specificamente l’algoritmo sviluppato da David Tabb. L’ho trasformato in Perl, e mi sentivo tanto contento.

Ma il problema è che mi avevano pure chiesto di aggiunge l’opzione che alcuni amino acidi siano modificati (per lo più fosforilati). Un bel problema!

Infatti sebbene Google is my friend, non sono riuscito a trovare una lista di valori del pK degli amino acidi modificati. Questi valori infatti sono necessari per implementare il calcolo del IP. Cercando bene, ho individuato 3 diversi set di valori pKa per aminoacidi fosforilati. Come c’era da aspettarsi, sono completamente diversi! :-(

Ecco quello che ho trovato:

  1. nel phosphosite web page www.phosphosite.org/Login.jsp c’è la possibilità di predirre il pI per vari siti di fosforilazione. E’ basato sull’articolo: Bjellqvist, B., Hughes, G.J., Pasquali, Ch., Paquet, N., Ravier, F., Sanchez, J.-Ch., Frutiger, S. & Hochstrasser, D.F., The focusing positions of polypeptides in immobilized pH gradients can be predicted from their amino acid sequences, Electrophoresis 1993, 14:1023-1031.
  2. http://prometheus.brc.mcw.edu/promost/
  3. E infine ho trovato questo http://scansite.mit.edu/calc_mw_pi.htmlin cui si può aggiungere una serie di fosforilazioni!

Comunque mettendo insieme il tutto, ne è uscito questo script, non è certo perfetto, ma se qualcuno di trova ad affrontare le stesse problematiche potrebbe dargli qualche idea.

L’intero script potrete trovarlo tra i file utili nella barra laterale, qui sotto giusto l’implementazione dell’algoritmo.

#####
# for the aa modified we have to insert the relative pK
# and we have to develop a new terminology, maybe different uppercase or lowercase
#####

# The focusing positions of polypeptides in immobilized pH gradients can be predicted from their amino acid sequences,
#Electrophoresis 1993, 14:1023-1031).
#We have added the option to include phosphorylations, using pKa = 2.12 for the first ionization and pKa = 7.21 for the second.
## Phosphoserine/threonine(S/T): pKa1 = 6.90 pKa2=1.2
# Phosphotyrosine(Y) = identical
# http://prometheus.brc.mcw.edu/promost/
############
sub pepIep {
############
$pep=();
$pep= shift @_;
$pkSet= shift @_;#variables
$pH = 7;
$step=3.5;
$charge=0;
$last_charge=0;

#dataset_pk
if ($pkSet == 1) {
$N_term_pK=8;
$K_pK=10;
$R_pK=12;
$H_pK=6.5;
$D_pK=4.4;
$E_pK=4.4;
$C_pK=8.5;
$Y_pK=10;
$C_term_pK=3.1;
}
else {
$N_term_pK=8.6;
$K_pK=10.8;
$R_pK=12.5;
$H_pK=6.5;
$D_pK=3.9;
$E_pK=4.1;
$C_pK=8.5;
$Y_pK=10.1;
$C_term_pK=3.6;
}
#dataset modification
$m1_pK=2.12;
$m2_pK=7.21;

@pepSplitted=();
%aaList=();
@aaModifiedList=();

@pepSplitted=split //, $pep;
foreach my $aa (@pepSplitted) {
$aaList{lc $aa}++;
if ($aa eq ‘*’) {
$aaList{lc $last_aa}–;
$aaList{lc $last_aa.$aa}++;
push @aaModifiedList, lc $last_aa.$aa;
}
$last_aa=lc $aa;
}
while (1) {
#charge Standard
$charge=&partial_charge($N_term_pK,$pH)+$aaList{k}*&partial_charge($K_pK,$pH)+$aaList{r}*&partial_charge($R_pK,$pH)+$aaList{h}*&partial_charge($H_pK,$pH)-$aaList{d}*&partial_charge($pH,$D_pK)-$aaList{e}*&partial_charge($pH,$E_pK)-$aaList{c}*&partial_charge($pH,$C_pK)-$aaList{y}*&partial_charge($pH,$Y_pK)-&partial_charge($pH,$C_term_pK);
#charge Modified (in case they have the same pK values)
foreach $aaMod (@aaModifiedList) {
if ($aaList{$aaMod}==1) { $charge-=&partial_charge($pH,$m1_pK);}
elsif ($aaList{$aaMod}>1) { $charge-=&partial_charge($pH,$m1_pK)-($aaList{$aaMod}-1)*&partial_charge($pH,$m2_pK);}
}
#check
if (sprintf(“%d”,$charge*100)/100 == sprintf(“%d”,$last_charge*100)/100) {last;}
if ($charge>0){$pH=$pH+$step;}
else {$pH=$pH-$step;}
$step=$step/2;
$last_charge=$charge;
}
return sprintf(“%.2f”,$pH);
}

2 Risposte a “calcolare il punto isoelettrico di un peptide (o almeno stimarlo)”

  1. dalloliogm detto

    hola!
    ehi se vuoi un consiglio, usa il tag di wordpress per i codici, viene impaginato molto meglio! :)

  2. dalloliogm detto

    come non detto, wordpress mi ha distrutto il commento sopra.

    Usa il tag ‘code’!

Lascia un commento

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>