+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public SequenceFeature[] getSequenceFeatures()
+ {
+ return sequenceFeatures;
+ }
+
+ public void addPDBId(PDBEntry entry)
+ {
+ if (pdbIds == null)
+ {
+ pdbIds = new Vector();
+ }
+
+ pdbIds.addElement(entry);
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param id DOCUMENT ME!
+ */
+ public void setPDBId(Vector id)
+ {
+ pdbIds = id;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public Vector getPDBId()
+ {
+ return pdbIds;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getDisplayId(boolean jvsuffix)
+ {
+ StringBuffer result = new StringBuffer(name);
+ if (jvsuffix)
+ {
+ result.append("/" + start + "-" + end);
+ }
+
+ return result.toString();
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param name DOCUMENT ME!
+ */
+ public void setName(String name)
+ {
+ this.name = name;
+ this.parseId();
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getName()
+ {
+ return this.name;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param start DOCUMENT ME!
+ */
+ public void setStart(int start)
+ {
+ this.start = start;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getStart()
+ {
+ return this.start;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param end DOCUMENT ME!
+ */
+ public void setEnd(int end)
+ {
+ this.end = end;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getEnd()
+ {
+ return this.end;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getLength()
+ {
+ return this.sequence.length;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param seq DOCUMENT ME!
+ */
+ public void setSequence(String seq)
+ {
+ this.sequence = seq.toCharArray();
+ checkValidRange();
+ }
+
+
+ public String getSequenceAsString()
+ {
+ return new String(sequence);
+ }
+
+ public String getSequenceAsString(int start, int end)
+ {
+ return new String(getSequence(start, end));
+ }
+
+
+ public char [] getSequence()
+ {
+ return sequence;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param start DOCUMENT ME!
+ * @param end DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public char [] getSequence(int start, int end)
+ {
+ if (start<0)
+ start=0;
+ // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
+ if (start >= sequence.length)
+ {
+ return new char[0];
+ }
+
+ if (end >= sequence.length)
+ {
+ end = sequence.length;
+ }
+
+ char [] reply = new char[end-start];
+ System.arraycopy(sequence, start, reply, 0, end-start);
+
+ return reply;
+ }
+
+
+ /**
+ * make a new Sequence object from start to end (including gaps) over this seqeunce
+ * @param start int
+ * @param end int
+ * @return SequenceI
+ */
+ public SequenceI getSubSequence(int start, int end)
+ {
+ if (start < 0)
+ {
+ start = 0;
+ }
+ char [] seq = getSequence(start, end);
+ if (seq.length == 0)
+ {
+ return null;
+ }
+ int nstart = findPosition(start);
+ int nend = findPosition(end) - 1;
+ // JBPNote - this is an incomplete copy.
+ SequenceI nseq = new Sequence(this.getName(), seq, nstart, nend);
+ nseq.setDescription(description);
+ if (datasetSequence!=null)
+ {
+ nseq.setDatasetSequence(datasetSequence);
+ }
+ else
+ {
+ nseq.setDatasetSequence(this);
+ }
+ return nseq;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param i DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public char getCharAt(int i)
+ {
+ if (i < sequence.length)
+ {
+ return sequence[i];
+ }
+ else
+ {
+ return ' ';
+ }
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param desc DOCUMENT ME!
+ */
+ public void setDescription(String desc)
+ {
+ this.description = desc;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getDescription()
+ {
+ return this.description;
+ }
+
+ /**
+ * Return the alignment position for a sequence position
+ *
+ * @param pos lying from start to end
+ *
+ * @return aligned position of residue pos
+ */
+ public int findIndex(int pos)
+ {
+ // returns the alignment position for a residue
+ int j = start;
+ int i = 0;