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

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 http://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);
}

Comments
2 Responses to “calcolare il punto isoelettrico di un peptide (o almeno stimarlo)”
  1. dalloliogm ha detto:

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

  2. dalloliogm ha detto:

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

    Usa il tag ‘code’!

Lascia un commento

  • Fonti di informazioni