|
| 1 | +--- |
| 2 | +title: BioJava:CookbookPortuguese:Count:Residues |
| 3 | +--- |
| 4 | + |
| 5 | +Como eu posso contar os Residuos em uma Sequence? |
| 6 | +------------------------------------------------- |
| 7 | + |
| 8 | +Contar os resíduos em uma Sequence é uma tarefa muito comum na |
| 9 | +bioinformatica. Geralmente você construiria um array de inteiros e |
| 10 | +usaria algum sistema indexador. Melhor ainda, você poderia usar um |
| 11 | +AlphabetIndex para impor um índice unificado. Você obteria um do |
| 12 | +AlphabetManager que usa um de seus métodos getAlphabetIndex(). Porque |
| 13 | +este tipo de atividade é tão comum que o BioJava empacotou tudo |
| 14 | +indexação etc em uma classe chamada IndexedCount que é uma implementação |
| 15 | +da interface Count. |
| 16 | + |
| 17 | +O programa seguinte lê algum tipo de arquivo de sequencia e conta os |
| 18 | +resíduos, imprimindo seu resultados para STDOUT. Note que este programa |
| 19 | +não trabalha com símbolos de ambigüidade. Se você desejar contar |
| 20 | +símbolos de ambigüidade, você precisa adicionar uma conta parcial para |
| 21 | +cada Symbol que compõe a ambigüidade se esta for seu caso, você usaria |
| 22 | +esta solução. |
| 23 | + |
| 24 | +### Solução 1 |
| 25 | + |
| 26 | +<java> import java.io.\*; import java.util.\*; |
| 27 | + |
| 28 | +import org.biojava.bio.dist.\*; import org.biojava.bio.seq.\*; import |
| 29 | +org.biojava.bio.seq.io.\*; import org.biojava.bio.symbol.\*; |
| 30 | + |
| 31 | +public class CountResidues { |
| 32 | + |
| 33 | +` /**` |
| 34 | +` * Pega 3 argumentos, primeiro é o arquivo da sequencia o segundo é o` |
| 35 | +` * formato da sequencia (case insensitive) e o terceiro é a sequencia` |
| 36 | +` * do alphabet (ex DNA, também case insensitive)` |
| 37 | +` */` |
| 38 | +` public static void main(String[] args) {` |
| 39 | +` //referencia para object to manter os contadores` |
| 40 | +` Count counts = null;` |
| 41 | + |
| 42 | +` try {` |
| 43 | +` //abre o arquivo de sequencia` |
| 44 | +` BufferedReader br = new BufferedReader(new FileReader(args[0]));` |
| 45 | + |
| 46 | +` //adquire um SequenceIterator para as sequencias no arquivo` |
| 47 | +` SequenceIterator iter =` |
| 48 | +` (SequenceIterator)SeqIOTools.fileToBiojava(args[1],args[2],br);` |
| 49 | + |
| 50 | +` //para cada sequence` |
| 51 | +` while(iter.hasNext()){` |
| 52 | +` Sequence seq = iter.nextSequence();` |
| 53 | + |
| 54 | +` //se necessário, inicializa o contador` |
| 55 | +` if(counts == null){` |
| 56 | +` counts = new IndexedCount((FiniteAlphabet)seq.getAlphabet());` |
| 57 | +` }` |
| 58 | + |
| 59 | +` //iterate através dos Symbols na seq` |
| 60 | +` for (Iterator i = seq.iterator(); i.hasNext(); ) {` |
| 61 | +` AtomicSymbol sym = (AtomicSymbol)i.next();` |
| 62 | +` counts.increaseCount(sym,1.0);` |
| 63 | +` }` |
| 64 | +` }` |
| 65 | + |
| 66 | +` //agora imprime os resultados` |
| 67 | +` for (Iterator i = ((FiniteAlphabet)counts.getAlphabet()).iterator();` |
| 68 | +` i.hasNext(); ) {` |
| 69 | +` AtomicSymbol sym = (AtomicSymbol)i.next();` |
| 70 | +` System.out.println(sym.getName()+" : "+counts.getCount(sym));` |
| 71 | +` }` |
| 72 | +` }` |
| 73 | +` catch (Exception ex) {` |
| 74 | +` ex.printStackTrace();` |
| 75 | +` }` |
| 76 | +` }` |
| 77 | + |
| 78 | +} </java> |
| 79 | + |
| 80 | +### Solução 2 |
| 81 | + |
| 82 | +<java> import java.io.\*; import java.util.\*; |
| 83 | + |
| 84 | +import org.biojava.bio.dist.\*; import org.biojava.bio.seq.\*; import |
| 85 | +org.biojava.bio.seq.io.\*; import org.biojava.bio.symbol.\*; |
| 86 | + |
| 87 | +public class CountResidues2 { |
| 88 | + |
| 89 | +` /**` |
| 90 | +` * Pega 3 argumentos, primeiro é o arquivo da sequencia o segundo é o` |
| 91 | +` * formato da sequencia (case insensitive) e o terceiro é a sequencia` |
| 92 | +` * do alphabet (ex DNA, também case insensitive)` |
| 93 | +` */` |
| 94 | + |
| 95 | +` public static void main(String[] args) {` |
| 96 | +` //referencia o objeto para guardar os contadores` |
| 97 | +` Count counts = null;` |
| 98 | + |
| 99 | +` try {` |
| 100 | +` //abre o arquivo de sequence` |
| 101 | +` BufferedReader br = new BufferedReader(new FileReader(args[0]));` |
| 102 | + |
| 103 | +` //adquire um SequenceIterator para as sequencias no arquivo` |
| 104 | +` SequenceIterator iter =` |
| 105 | +` (SequenceIterator)SeqIOTools.fileToBiojava(args[1],args[2],br);` |
| 106 | + |
| 107 | +` //para cada sequence` |
| 108 | +` while(iter.hasNext()){` |
| 109 | +` Sequence seq = iter.nextSequence();` |
| 110 | + |
| 111 | +` //se necessário inicializa os contadores` |
| 112 | +` if(counts == null){` |
| 113 | +` counts = new IndexedCount((FiniteAlphabet)seq.getAlphabet());` |
| 114 | +` }` |
| 115 | + |
| 116 | +` //iterate através dos Symbols na seq` |
| 117 | +` for (Iterator i = seq.iterator(); i.hasNext(); ) {` |
| 118 | +` Symbol sym = (Symbol)i.next();` |
| 119 | + |
| 120 | +` /*` |
| 121 | +` * O Símbolo pode ser ambíguo assim soma uma conta parcial para cada Símbolo` |
| 122 | +` * isso compõe o Símbolo de ambigüidade. Ex a ambigüidade de DNA que n é feito` |
| 123 | +` * de um Alfabeto de quatro Símbolos, assim soma-se 0.25 ao count de cada um.` |
| 124 | +` */` |
| 125 | +` FiniteAlphabet subSymbols = (FiniteAlphabet)sym.getMatches();` |
| 126 | +` for (Iterator i2 = subSymbols.iterator(); i2.hasNext(); ) {` |
| 127 | +` AtomicSymbol sym2 = (AtomicSymbol)i2.next();` |
| 128 | +` counts.increaseCount(sym2, 1.0 / (double)subSymbols.size());` |
| 129 | +` }` |
| 130 | +` }` |
| 131 | +` }` |
| 132 | + |
| 133 | +` //agora imprime os resultados` |
| 134 | +` for (Iterator i = ((FiniteAlphabet)counts.getAlphabet()).iterator();` |
| 135 | +` i.hasNext(); ) {` |
| 136 | +` AtomicSymbol sym = (AtomicSymbol)i.next();` |
| 137 | +` System.out.println(sym.getName()+" : "+counts.getCount(sym));` |
| 138 | +` }` |
| 139 | +` }` |
| 140 | +` catch (Exception ex) {` |
| 141 | +` ex.printStackTrace();` |
| 142 | +` }` |
| 143 | +` }` |
| 144 | + |
| 145 | +} </java> |
0 commit comments