/* * Sequence.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.sequence; import dr.evolution.datatype.DataType; import dr.evolution.util.Taxon; import dr.util.Attributable; import dr.util.Identifiable; import java.util.Iterator; /** * Class for storing a molecular sequence. * * @author Alexei Drummond * @author Andrew Rambaut * @version $Id: Sequence.java,v 1.35 2005/05/25 09:35:28 rambaut Exp $ */ public class Sequence implements Identifiable, Attributable { /** * Empty constructor. */ public Sequence() { sequenceString = new StringBuffer(); } /** * Constructor with initial sequence string. * * @param sequence a string representing the sequence */ public Sequence(String sequence) { sequenceString = new StringBuffer(); setSequenceString(sequence); } /** * Clone constructor * * @param sequence the sequence to clone */ public Sequence(Sequence sequence) { // should clone taxon as well! this(sequence.getTaxon(), sequence.getSequenceString()); } /** * Constructor with taxon and sequence string. * * @param taxon the sequence's taxon * @param sequence the sequence's symbol string */ public Sequence(Taxon taxon, String sequence) { sequenceString = new StringBuffer(); setTaxon(taxon); setSequenceString(sequence); } /** * @return the DataType of the sequences. */ public DataType getDataType() { return dataType; } /** * @return the length of the sequences. */ public int getLength() { return sequenceString.length(); } /** * @return a String containing the sequences. */ public String getSequenceString() { return sequenceString.toString(); } /** * @return a char containing the state at index. */ public char getChar(int index) { return sequenceString.charAt(index); } /** * @return the state at site index. */ public int getState(int index) { return dataType.getState(sequenceString.charAt(index)); } /** */ public final void setState(int index, int state) { sequenceString.setCharAt(index, dataType.getChar(state)); } /** * Characters are copied from the sequences into the destination character array dst. */ public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) { sequenceString.getChars(srcBegin, srcEnd, dst, dstBegin); } /** * Set the DataType of the sequences. */ public void setDataType(DataType dataType) { this.dataType = dataType; } /** * Set the DataType of the sequences. */ public DataType guessDataType() { return DataType.guessDataType(sequenceString.toString()); } /** * Set the sequences using a string. */ public void setSequenceString(String sequence) { sequenceString.setLength(0); sequenceString.append(sequence.toUpperCase()); } /** * Append a string to the sequences. */ public void appendSequenceString(String sequence) { sequenceString.append(sequence); } /** * Insert a string into the sequences. */ public void insertSequenceString(int offset, String sequence) { sequenceString.insert(offset, sequence); } /** * Sets a taxon for this sequences. * * @param taxon the taxon. */ public void setTaxon(Taxon taxon) { this.taxon = taxon; } /** * @return the taxon for this sequences. */ public Taxon getTaxon() { return taxon; } // ************************************************************** // Attributable IMPLEMENTATION // ************************************************************** private Attributable.AttributeHelper attributes = null; /** * Sets an named attribute for this object. * * @param name the name of the attribute. * @param value the new value of the attribute. */ public void setAttribute(String name, Object value) { if (attributes == null) attributes = new Attributable.AttributeHelper(); attributes.setAttribute(name, value); } /** * @param name the name of the attribute of interest. * @return an object representing the named attributed for this object. */ public Object getAttribute(String name) { if (attributes == null) return null; else return attributes.getAttribute(name); } /** * @return an iterator of the attributes that this object has. */ public Iterator<String> getAttributeNames() { if (attributes == null) return null; else return attributes.getAttributeNames(); } // ************************************************************** // Identifiable IMPLEMENTATION // ************************************************************** protected String id = null; /** * @return the id. */ public String getId() { return id; } /** * Sets the id. */ public void setId(String id) { this.id = id; } // ************************************************************** // INSTANCE VARIABLES // ************************************************************** protected Taxon taxon = null; protected StringBuffer sequenceString = null; protected DataType dataType = null; }