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