BioJava:CookbookFrench:Proteomics

Comment la masse et le pI d’une protéine?

Si vous travaillez sur un projet de protéomique, il est important de savoir la masse approximative et le pI de peptides provenant des gènes d’intérêt. BioJava possède deux classes (MassCalc et IsoelectricPointCalc), contenues dans le package org.biojava.bio.proteomics, qui peuvent calculer ces valeurs pour vous.

Le programme qui suit montre l’usage de base de ces deux classes. Cet exemple simple utilise des paramètres par défaut mais autant MassCalc que IsoelectricPointCalc possèdent des options spécialisées qui ne sont pas montré ici. Consulter l’API de Biojava afin d’en savoir plus.

```java import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.PrintWriter;

import org.biojava.bio.BioException; import org.biojava.bio.proteomics.IsoelectricPointCalc; import org.biojava.bio.proteomics.MassCalc; import org.biojava.bio.seq.ProteinTools; import org.biojava.bio.seq.RNATools; import org.biojava.bio.seq.Sequence; import org.biojava.bio.seq.SequenceIterator; import org.biojava.bio.seq.io.SeqIOTools; import org.biojava.bio.symbol.Edit; import org.biojava.bio.symbol.IllegalAlphabetException; import org.biojava.bio.symbol.IllegalSymbolException; import org.biojava.bio.symbol.SimpleSymbolList; import org.biojava.bio.symbol.SymbolList; import org.biojava.bio.symbol.SymbolPropertyTable;

/**

*  Calculer la masse et le point isoelectrique d'une collection de
*  séquences  
*/

public class CalcMass {

 /**
  *  Méthode définissant l'info d"utilisation, terminant le programme
  *  après.
  */
 public static void help(){
   System.out.println(
       "usage: java calcMass ` `` `<DNA|RNA|PROTEIN>` ``");` `   System.exit( -1);`

 }

 public CalcMass() {
 }

 /**
  *  Calcule  la masse du peptide en Daltons, en utilisant la masse
  *  isotopique moyenne.
  *  @param protein: le peptide
  *  @lance IllegalSymbolException si protein n'est pas une proteine
  *  @retourne mass, la masse
  */
 public double mass(SymbolList protein)throws IllegalSymbolException{
   double mass = 0.0;
   MassCalc mc = new MassCalc(SymbolPropertyTable.AVG_MASS, true);
   mass = mc.getMass(protein);
   return mass;
 }

 /**
  *  Calcule le point isoelectrique en assumant des extrémités
  *  NH2 et COOH libres
  *  @param protein: le peptide
  *  @lance IllegalAlphabetException si protein n'est pas une proteine
  *  @lance BioException
  *  @return pI: le pI de type double
  */
 public double pI(SymbolList protein)
     throws IllegalAlphabetException, BioException{

   double pI = 0.0;
   IsoelectricPointCalc ic = new IsoelectricPointCalc();
   pI = ic.getPI(protein, true, true);
   return pI;
 }

 public static void main(String[] args) throws Exception{
   if(args.length != 4)
     help();

   BufferedReader br = null;
   PrintWriter out = null;
   try{
     // lecture des séquences
     br = new BufferedReader(new FileReader(args[0]));
     SequenceIterator seqi =
         (SequenceIterator)SeqIOTools.fileToBiojava(args[1], args[2], br);

     out = new PrintWriter(new FileOutputStream(args[3]));

     // écrire l'en-tête du rapport
     out.println("name, mass, pI, size, sequence");

     // initialiser le calcul de la masse
     CalcMass calcMass = new CalcMass();

     while (seqi.hasNext()) {
       SymbolList syms = seqi.nextSequence();
       String name = null;

       // obtenir un nom approprié pour la protéine
      if(args[1].equalsIgnoreCase("fasta")){
         name = ((Sequence) syms).getAnnotation().
             getProperty("description_line").toString();
       }else{
         name = ((Sequence)syms).getName();
       }
       out.print(name+",");

       // si la séquence n'est pas une protéine, la traduire.
       if(syms.getAlphabet() != ProteinTools.getAlphabet() &&
          syms.getAlphabet() != ProteinTools.getTAlphabet()){
         if(syms.getAlphabet() != RNATools.getRNA()){
           syms = RNATools.transcribe(syms);
         }

         // si non-divisible par 3, tronquer la protéine
         if(syms.length() % 3 != 0){
           syms = syms.subList(1, syms.length() - (syms.length() %3));
         }

         syms = RNATools.translate(syms);

        /*
         * Tranduction des codons GTG et TTG produit une Methionine si
         * ils sont les codons d"initiation (toute proteine commence avec f-Met). 
         * Par conséquent, il faut éditer la séquence.
         */      
         if(syms.symbolAt(1) != ProteinTools.met()){
           
           // Les objets SimpleSymbolLists peuvent être 
           // modifiés mais d'autres pourraient ne pas l'être
           syms = new SimpleSymbolList(syms);
           Edit e = new Edit(1, syms.getAlphabet(), ProteinTools.met());
           syms.edit(e);
         }
       }

       // si les séquences se termine avec un * (terminaison), il faut
       // enlever ce caractère
       if (syms.symbolAt(syms.length()) == ProteinTools.ter()) {
         syms = syms.subList(1, syms.length()-1);
       }

       // effectuer les calculs
     double mass = calcMass.mass(syms);
       double pI = calcMass.pI(syms);

       // imprimer les résultats pour cette protéine
       out.println(mass+","+pI+","+syms.length()+","+syms.seqString());
     }
   }
   finally{ // pour en finir
     if(br != null){
       br.close();
     }
     if(out != null){
       out.flush();
       out.close();
     }
   }
 }

} ```