2
// File: AlphabetTools.cpp
3
// Created by: Julien Dutheil
4
// Created on: Fri Oct 10 17:27:39 2003
7
#include "AlphabetTools.h"
8
#include <Bpp/Text/TextTools.h>
18
/**********************************************************************************************/
20
const DNA AlphabetTools::DNA_ALPHABET;
21
const RNA AlphabetTools::RNA_ALPHABET;
22
const ProteicAlphabet AlphabetTools::PROTEIN_ALPHABET;
23
const DefaultAlphabet AlphabetTools::DEFAULT_ALPHABET;
25
/**********************************************************************************************/
27
int AlphabetTools::getType(char state)
29
if(state == '-') return -1;
30
state = toupper(state);
31
bool d = DNA_ALPHABET.isCharInAlphabet(TextTools::toString(state));
32
bool r = RNA_ALPHABET.isCharInAlphabet(TextTools::toString(state));
33
bool p = PROTEIN_ALPHABET.isCharInAlphabet(TextTools::toString(state));
35
if(!d && !r && !p) return 0; //Unknown character
36
else if(d && !r && !p) return 1; //DNA specific
37
else if(!d && r && !p) return 2; //RNA specific
38
else if(!d && !r && p) return 3; //Protein specific
39
else if(d && r && !p) return 4; //Nucleotide specific
40
else if(d && !r && p) return 5; //DNA or Protein specific
41
else if(!d && r && p) return 6; //RNA or Protein specific
42
else return 7; //Non-specific character
45
/**********************************************************************************************/
47
bool AlphabetTools::checkAlphabetCodingSize(const Alphabet & alphabet) throw (AlphabetException)
49
if(alphabet.getNumberOfChars() == 0) return true; //Will this really happen?
50
unsigned int size = alphabet.intToChar(0).size();
51
for(unsigned int i = 1; i < alphabet.getNumberOfTypes(); i++)
53
if(alphabet.intToChar(i).size() != size) return false;
58
/**********************************************************************************************/
60
bool AlphabetTools::checkAlphabetCodingSize(const Alphabet * alphabet) throw (AlphabetException)
62
return checkAlphabetCodingSize(* alphabet);
65
/**********************************************************************************************/
67
int AlphabetTools::getAlphabetCodingSize(const Alphabet & alphabet) throw (AlphabetException)
69
if(!checkAlphabetCodingSize(alphabet)) throw AlphabetException("Bad alphabet in function Alphabet::getAlphabetCodingSize().");
70
return alphabet.intToChar(0).size();
73
/**********************************************************************************************/
75
int AlphabetTools::getAlphabetCodingSize(const Alphabet * alphabet) throw (AlphabetException)
77
return getAlphabetCodingSize(* alphabet);
80
/**********************************************************************************************/