/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.datamodel; import jalview.analysis.*; import java.awt.*; import java.util.*; import MCview.*; public class Sequence implements SequenceI { protected String name; protected String sequence; protected String description; protected int start; protected int end; protected String displayId; protected Color color = Color.white; String pdbId; public Vector sequenceFeatures = new Vector(); public void setSequenceFeatures(Vector v) { sequenceFeatures = v; } public Vector getSequenceFeatures() {return sequenceFeatures; } public void setPDBId(String id) { pdbId = id; } public String getPDBId() { return pdbId; } public Sequence(String name, String sequence, int start, int end) { this.name = name; this.sequence = sequence; this.start = start; this.end = end; setDisplayId(); } public Sequence(String name,String sequence) { this(name,sequence,1,sequence.length()); } public Sequence(SequenceI seq) { this(seq.getName(),seq.getSequence(),seq.getStart(),seq.getEnd()); } public String getDisplayId() { return displayId; } public void setDisplayId() { displayId = name + "/" + start + "-" + end; } public void setName(String name) { this.name = name; setDisplayId(); } public String getName() { return this.name; } public void setStart(int start) { this.start = start; setDisplayId(); } public int getStart() { return this.start; } public void setEnd(int end) { this.end = end; setDisplayId(); } public int getEnd() { return this.end; } public int getLength() { return this.sequence.length(); } public void setSequence(String seq) { this.sequence = seq; } public String getSequence() { return this.sequence; } public String getSequence(int start,int end) { // JBPNote - left to user to pad the result here (TODO:Decide on this policy) if(start>=sequence.length()) return ""; if(end>=sequence.length()) end = sequence.length(); return this.sequence.substring(start,end); } public char getCharAt(int i) { if (i < sequence.length()) { return sequence.charAt(i); } else { return ' '; } } public void setDescription(String desc) { this.description = desc; } public String getDescription() { return this.description; } public int findIndex(int pos) { // returns the alignment position for a residue int j = start; int i = 0; while (i< sequence.length() && j <= end && j <= pos) { char c = sequence.charAt(i); if (!jalview.util.Comparison.isGap((c))) j++; i++; } if (j == end && j < pos) return end+1; else return i; } public int findPosition(int i) { // Returns the sequence position for an alignment position int j = 0; int pos = start; while (j < i && j=sequence.length()) return; sequence = sequence.substring(0,i) + sequence.substring(i+1); } public void deleteChars(int i, int j) { if (i>=sequence.length()) return; if (j>=sequence.length()) sequence = sequence.substring(0,i); else sequence = sequence.substring(0,i) + sequence.substring(j); } public void insertCharAt(int i, char c) { insertCharAt(i,c,true); } public void insertCharAt(int i,char c,boolean chop) { String tmp = new String(sequence); if (i < sequence.length()) { sequence = tmp.substring(0,i) + String.valueOf(c) + tmp.substring(i); } else { // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet! char[] ch = new char[1+i-sequence.length()]; for (int j=0, k=ch.length; j