BioJava:CookbookPortuguese:Count:Frequency

Como eu calculo a frequencia de um simbolo em uma Sequence?

Uma das classes mais úteis no BioJava é a classe Distribution. Esta classe é um mapa de frequencias referentes aos simbolos. As distribuições são calculadas com base nos simbolos observados utilizando-se a classe DistributionTrainerContext. Esta classe, por sua vez, pode treinar diversas distribuições registradas no contexto compreendendo os simbolos de qualquer alfabeto.

O programa a seguir demonstra o treinamento de 3 (tres) Distribuições com sequencias de 3 (tres) alfabetos diferentes.

```java import org.biojava.bio.seq.*; import org.biojava.bio.symbol.*; import org.biojava.bio.dist.*; import org.biojava.utils.*; import java.util.*;

public class Frequency {

 public static void main(String[] args) {

   try {
     //Cria uma SymbolList de DNA
     SymbolList dna = DNATools.createDNA("atcgctagcgtyagcntatsggca");

     //Cria uma SymbolList de RNA
     SymbolList rna = RNATools.createRNA("aucgcuaucccaggga");

     //Cria uma SymbolList de Proteina
     SymbolList protein = ProteinTools.createProtein("asrvgchvhilmkapqrt");

     SymbolList[] sla = {dna, rna, protein};

     //instancia a classe DistributionTrainerContext
     DistributionTrainerContext dtc = new SimpleDistributionTrainerContext();

     //Cria 3 (tres) Distributions
     Distribution dnaDist =
         DistributionFactory.DEFAULT.createDistribution(dna.getAlphabet());
     Distribution rnaDist =
         DistributionFactory.DEFAULT.createDistribution(rna.getAlphabet());
     Distribution proteinDist =
         DistributionFactory.DEFAULT.createDistribution(protein.getAlphabet());

     Distribution[] da = {dnaDist, rnaDist, proteinDist};

     //registra as Distributions no treinador
     dtc.registerDistribution(dnaDist);
     dtc.registerDistribution(rnaDist);
     dtc.registerDistribution(proteinDist);

     //para cada Sequence
     for (int i = 0; i < sla.length; i++) {
       //conte cada Symbol na sua Distribution apropriada
       for(int j = 1; j <= sla[i].length(); j++){
         dtc.addCount(da[i], sla[i].symbolAt(j), 1.0);
       }
     }

     //treine as Distributions
     dtc.train();

     //imprime os pesos de cada Distribution
     for (int i = 0; i < da.length; i++) {
       for (Iterator iter = ((FiniteAlphabet)da[i].getAlphabet()).iterator();
            iter.hasNext(); ) {

         Symbol sym = (Symbol)iter.next();
         System.out.println(sym.getName()+" : "+da[i].getWeight(sym));
       }
       System.out.println("\n");
     }

   }
   catch (Exception ex) {
     ex.printStackTrace();
   }
 }

} ```