/*
* P2P.java
*
* Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard
*
* This file is part of BEAST.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* BEAST is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package dr.evolution.datatype;
/**
* @version 08/01/2010
*
* @author Marc A. Suchard
* @author Yu-Nong Gong
*/
public class P2P extends DataType {
/**
* Name of data type. For XML and human reading of data type.
*/
public static final String DESCRIPTION = "P2P";
public static final int TYPE = 42;
public static final P2P INSTANCE = new P2P();
// public static final int ZERO_STATE = 0;
// public static final int ONE_STATE = 1;
// public static final int UNKNOWN_STATE = 2;
// public static final int GAP_STATE = 3;
/**
* A table to translate state numbers (0-3) into character codes
*/
// public static final char[] P2P_CHARS =
// { 'A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R',
// 'S','T','V','W','Y','B','Z','X'};
/**
* A table to map state numbers (0-3) to their ambiguities
*/
public static final String[] P2P_AMBIGUITIES = {
"AA","AR","AN","AD","AC","AQ","AE","AG","AH","AI","AL","AK","AM","AF","AP","AS","AT","AW","AY","AV",
"RA","RR","RN","RD","RC","RQ","RE","RG","RH","RI","RL","RK","RM","RF","RP","RS","RT","RW","RY","RV",
"NA","NR","NN","ND","NC","NQ","NE","NG","NH","NI","NL","NK","NM","NF","NP","NS","NT","NW","NY","NV",
"DA","DR","DN","DD","DC","DQ","DE","DG","DH","DI","DL","DK","DM","DF","DP","DS","DT","DW","DY","DV",
"CA","CR","CN","CD","CC","CQ","CE","CG","CH","CI","CL","CK","CM","CF","CP","CS","CT","CW","CY","CV",
"QA","QR","QN","QD","QC","QQ","QE","QG","QH","QI","QL","QK","QM","QF","QP","QS","QT","QW","QY","QV",
"EA","ER","EN","ED","EC","EQ","EE","EG","EH","EI","EL","EK","EM","EF","EP","ES","ET","EW","EY","EV",
"GA","GR","GN","GD","GC","GQ","GE","GG","GH","GI","GL","GK","GM","GF","GP","GS","GT","GW","GY","GV",
"HA","HR","HN","HD","HC","HQ","HE","HG","HH","HI","HL","HK","HM","HF","HP","HS","HT","HW","HY","HV",
"IA","IR","IN","ID","IC","IQ","IE","IG","IH","II","IL","IK","IM","IF","IP","IS","IT","IW","IY","IV",
"LA","LR","LN","LD","LC","LQ","LE","LG","LH","LI","LL","LK","LM","LF","LP","LS","LT","LW","LY","LV",
"KA","KR","KN","KD","KC","KQ","KE","KG","KH","KI","KL","KK","KM","KF","KP","KS","KT","KW","KY","KV",
"MA","MR","MN","MD","MC","MQ","ME","MG","MH","MI","ML","MK","MM","MF","MP","MS","MT","MW","MY","MV",
"FA","FR","FN","FD","FC","FQ","FE","FG","FH","FI","FL","FK","FM","FF","FP","FS","FT","FW","FY","FV",
"PA","PR","PN","PD","PC","PQ","PE","PG","PH","PI","PL","PK","PM","PF","PP","PS","PT","PW","PY","PV",
"SA","SR","SN","SD","SC","SQ","SE","SG","SH","SI","SL","SK","SM","SF","SP","SS","ST","SW","SY","SV",
"TA","TR","TN","TD","TC","TQ","TE","TG","TH","TI","TL","TK","TM","TF","TP","TS","TT","TW","TY","TV",
"WA","WR","WN","WD","WC","WQ","WE","WG","WH","WI","WL","WK","WM","WF","WP","WS","WT","WW","WY","WV",
"YA","YR","YN","YD","YC","YQ","YE","YG","YH","YI","YL","YK","YM","YF","YP","YS","YT","YW","YY","YV",
"VA","VR","VN","VD","VC","VQ","VE","VG","VH","VI","VL","VK","VM","VF","VP","VS","VT","VW","VY","VV"
};
/**
* Private constructor - DEFAULT_INSTANCE provides the only instance
*/
private P2P() {
stateCount = 400;
// ambiguousStateCount = 4;
}
@Override
public char[] getValidChars() {
return null;
}
/**
* Get character corresponding to a given state
*
* @param state state
*
* return corresponding character
*/
public char getChar(int state) {
throw new IllegalArgumentException("P2P datatype cannot be expressed as char");
}
public String getCode(int state) {
return P2P_AMBIGUITIES[state];
}
/**
* returns an array containing the non-ambiguous states
* that this state represents.
*/
// public int[] getStates(int state) {
// String stateString = P2P_AMBIGUITIES[state];
// int[] states = new int[stateString.length()];
// for (int i = 0; i < stateString.length(); i++) {
// states[i] = getState(stateString.charAt(i));
// }
// return states;
// }
/**
* returns an array containing the non-ambiguous states that this state represents.
*/
public boolean[] getStateSet(int state) {
boolean[] stateSet = new boolean[stateCount];
for(int i=0;i<stateCount;i++){
stateSet[i] = true;
}
return stateSet;
}
/**
* description of data type
*
* @return string describing the data type
*/
public String getDescription() {
return DESCRIPTION;
}
/**
* type of data type
*
* @return integer code for the data type
*/
public int getType() {
return TYPE;
}
}