/* * PairedDataType.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; /** * implements DataType for nucleotides with hidden state(s) * * @version $Id: PairedDataType.java,v 1.6 2005/06/30 09:54:51 rambaut Exp $ * * @author Alexei Drummond */ public class PairedDataType extends DataType { public static final String DESCRIPTION = "pairedDataType"; public static final PairedDataType PAIRED_NUCLEOTIDES = new PairedDataType(Nucleotides.INSTANCE); public static final PairedDataType PAIRED_AMINO_ACIDS = new PairedDataType(AminoAcids.INSTANCE); public static final PairedDataType PAIRED_CODONS = new PairedDataType(Codons.UNIVERSAL); public PairedDataType(DataType baseDataType) { this.baseDataType = baseDataType; stateCount = baseDataType.getStateCount() * baseDataType.getStateCount(); ambiguousStateCount = stateCount + 2; } public final int getState(int state1, int state2) { if (baseDataType.isAmbiguousState(state1) || baseDataType.isAmbiguousState(state2)) { return getUnknownState(); } return (state1 * baseDataType.getStateCount()) + state2; } public final int getState(char c1, char c2) { return getState(baseDataType.getState(c1), baseDataType.getState(c2)); } public final int getFirstState(int state) { return state / baseDataType.getStateCount(); } public final int getSecondState(int state) { return state % baseDataType.getStateCount(); } @Override public char[] getValidChars() { return null; } public final int getState(char c) { throw new IllegalArgumentException("Paired datatype cannot be expressed as char"); } public int getUnknownState() { return stateCount; } public int getGapState() { return stateCount + 1; } public final char getChar(int state) { throw new IllegalArgumentException("Paired datatype cannot be expressed as char"); } public final String getTriplet(int state) { throw new IllegalArgumentException("Paired datatype cannot be expressed as triplets"); } public final int[] getTripletStates(int state) { throw new IllegalArgumentException("Paired datatype cannot be expressed as triplets"); } public String getDescription() { return DESCRIPTION; } public int getType() { return -1; } // Private members private DataType baseDataType; }