BioJava:CookbookPortuguese:Proteomics

From BioJava

Jump to: navigation, search

Como eu posso calcular a massa e pI de um peptideo?

Se voce está fazendo um projeto em proteômica, é importante saber o quanto a massa se aproxima do pI no gene. BioJava contém duas classes (MassCalc e IsoelectricPointCalc) no pacote proteomics que irá calcular estes números para você.

O código abaixo demonstra um uso básico destas classes. Este exemplo simples utiliza parametros razoavelmente padroes, porém as funções MassCalc e IsoelectricPointCalc tem outras opções especializadas que não serão demonstradas aqui. Consulte a API do biojava para informações sobre estas opções.

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;
 
/**
 * Calcula a massa eo ponto isoeletrico de uma coleção de
 * sequencias
 */
 
public class CalcMass {
 
  /**
   * Chame isto para exibir informações de uso, o programa encerra após sua chamada.
   */
  public static void help(){
    System.out.println(
        "uso: java calcMass <file> <format> <DNA|RNA|PROTEIN> <out file>");
    System.exit( -1);
 
  }
 
  public CalcMass() {
  }
 
  /**
   * Calcula a Massa do peptideo em Daltons. Utilizando a massa 
   * média do Isótopo
   * @param proteina
   * @throws IllegalSymbolException se <code>protein</code> não for uma proteina
   * @return uma massa
   */
  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;
  }
 
  /**
   * Calcula o ponto isoeletrico assumindo NH e COOH livres
   * @param proteina
   * @throws IllegalAlphabetException se <code>protein</code> não for uma proteina
   * @throws BioException
   * @return double o valor de pI
   */
  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{
      //Le as sequencias
      br = new BufferedReader(new FileReader(args[0]));
      SequenceIterator seqi =
          (SequenceIterator)SeqIOTools.fileToBiojava(args[1], args[2], br);
 
      out = new PrintWriter(new FileOutputStream(args[3]));
 
      //Escreve o cabeçalho
      out.println("name, mass, pI, size, sequence");
 
      //Inicializa o calculador
      CalcMass calcMass = new CalcMass();
 
      while (seqi.hasNext()) {
        SymbolList syms = seqi.nextSequence();
        String name = null;
 
        //pega o nome do peptideo
        if(args[1].equalsIgnoreCase("fasta")){
          name = ((Sequence) syms).getAnnotation().
              getProperty("description_line").toString();
        }else{
          name = ((Sequence)syms).getName();
        }
        out.print(name+",");
 
        //se nao for uma proteina é necessário traduzir.
        if(syms.getAlphabet() != ProteinTools.getAlphabet() &&
           syms.getAlphabet() != ProteinTools.getTAlphabet()){
          if(syms.getAlphabet() != RNATools.getRNA()){
            syms = RNATools.transcribe(syms);
          }
 
          //se nao for divisível por 3 trunca
          if(syms.length() % 3 != 0){
            syms = syms.subList(1, syms.length() - (syms.length() %3));
          }
 
          syms = RNATools.translate(syms);
          if(syms.symbolAt(1) != ProteinTools.met()){
 
            //SimpleSymbolLists são editaveis outros podem não ser
            syms = new SimpleSymbolList(syms);
            Edit e = new Edit(1, syms.getAlphabet(), ProteinTools.met());
            syms.edit(e);
          }
        }
 
        //se a sequencia termina com um * é necessário remove-lo
        if (syms.symbolAt(syms.length()) == ProteinTools.ter()) {
          syms = syms.subList(1, syms.length()-1);
        }
 
        //calcula
        double mass = calcMass.mass(syms);
        double pI = calcMass.pI(syms);
 
        //mostra o resultado para esta proteina
        out.println(mass+","+pI+","+syms.length()+","+syms.seqString());
      }
    }
    finally{ 
      if(br != null){
        br.close();
      }
      if(out != null){
        out.flush();
        out.close();
      }
    }
  }
}
Personal tools