2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\r
5 * This program is free software; you can redistribute it and/or
\r
6 * modify it under the terms of the GNU General Public License
\r
7 * as published by the Free Software Foundation; either version 2
\r
8 * of the License, or (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU General Public License for more details.
\r
15 * You should have received a copy of the GNU General Public License
\r
16 * along with this program; if not, write to the Free Software
\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
\r
19 package jalview.datamodel;
\r
30 * @version $Revision$
\r
32 public class Sequence implements SequenceI
\r
34 protected String name;
\r
35 protected String sequence;
\r
36 protected String description;
\r
37 protected int start;
\r
39 protected String displayId;
\r
40 protected Color color = Color.white;
\r
46 /** DOCUMENT ME!! */
\r
47 public Vector sequenceFeatures = new Vector();
\r
50 * Creates a new Sequence object.
\r
52 * @param name DOCUMENT ME!
\r
53 * @param sequence DOCUMENT ME!
\r
54 * @param start DOCUMENT ME!
\r
55 * @param end DOCUMENT ME!
\r
57 public Sequence(String name, String sequence, int start, int end)
\r
60 this.sequence = sequence;
\r
69 void checkValidRange()
\r
75 for (int j = 0; j < sequence.length(); j++)
\r
77 ch = sequence.charAt(j);
\r
78 if (!jalview.util.Comparison.isGap( (ch)))
\r
85 endRes += start - 1;
\r
95 * Creates a new Sequence object.
\r
97 * @param name DOCUMENT ME!
\r
98 * @param sequence DOCUMENT ME!
\r
100 public Sequence(String name, String sequence)
\r
102 this(name, sequence, 1, sequence.length());
\r
106 * Creates a new Sequence object.
\r
108 * @param seq DOCUMENT ME!
\r
110 public Sequence(SequenceI seq)
\r
112 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
118 * @param v DOCUMENT ME!
\r
120 public void setSequenceFeatures(Vector v)
\r
122 sequenceFeatures = v;
\r
125 public void addSequenceFeature(SequenceFeature sf)
\r
127 if(sequenceFeatures==null)
\r
128 sequenceFeatures = new Vector();
\r
130 sequenceFeatures.addElement(sf);
\r
136 * @return DOCUMENT ME!
\r
138 public Vector getSequenceFeatures()
\r
140 return sequenceFeatures;
\r
146 * @param id DOCUMENT ME!
\r
148 public void setPDBId(String id)
\r
156 * @return DOCUMENT ME!
\r
158 public String getPDBId()
\r
166 * @return DOCUMENT ME!
\r
168 public String getDisplayId()
\r
176 public void setDisplayId()
\r
178 displayId = name + "/" + start + "-" + end;
\r
184 * @param name DOCUMENT ME!
\r
186 public void setName(String name)
\r
195 * @return DOCUMENT ME!
\r
197 public String getName()
\r
205 * @param start DOCUMENT ME!
\r
207 public void setStart(int start)
\r
209 this.start = start;
\r
216 * @return DOCUMENT ME!
\r
218 public int getStart()
\r
226 * @param end DOCUMENT ME!
\r
228 public void setEnd(int end)
\r
237 * @return DOCUMENT ME!
\r
239 public int getEnd()
\r
247 * @return DOCUMENT ME!
\r
249 public int getLength()
\r
251 return this.sequence.length();
\r
257 * @param seq DOCUMENT ME!
\r
259 public void setSequence(String seq)
\r
261 this.sequence = seq;
\r
268 * @return DOCUMENT ME!
\r
270 public String getSequence()
\r
272 return this.sequence;
\r
278 * @param start DOCUMENT ME!
\r
279 * @param end DOCUMENT ME!
\r
281 * @return DOCUMENT ME!
\r
283 public String getSequence(int start, int end)
\r
285 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
286 if (start >= sequence.length())
\r
291 if (end >= sequence.length())
\r
293 end = sequence.length();
\r
296 return this.sequence.substring(start, end);
\r
302 * @param i DOCUMENT ME!
\r
304 * @return DOCUMENT ME!
\r
306 public char getCharAt(int i)
\r
308 if (i < sequence.length())
\r
310 return sequence.charAt(i);
\r
321 * @param desc DOCUMENT ME!
\r
323 public void setDescription(String desc)
\r
325 this.description = desc;
\r
331 * @return DOCUMENT ME!
\r
333 public String getDescription()
\r
335 return this.description;
\r
341 * @param pos DOCUMENT ME!
\r
343 * @return DOCUMENT ME!
\r
345 public int findIndex(int pos)
\r
347 // returns the alignment position for a residue
\r
351 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
353 char c = sequence.charAt(i);
\r
355 if (!jalview.util.Comparison.isGap((c)))
\r
363 if ((j == end) && (j < pos))
\r
376 * @param i DOCUMENT ME!
\r
378 * @return DOCUMENT ME!
\r
380 public int findPosition(int i)
\r
382 // Returns the sequence position for an alignment position
\r
386 while ((j < i) && (j < sequence.length()))
\r
388 char c = sequence.charAt(j);
\r
390 if (!jalview.util.Comparison.isGap((c)))
\r
404 * @return DOCUMENT ME!
\r
406 public int[] gapMap()
\r
408 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
409 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
410 int[] map = new int[seq.length()];
\r
414 while (j < sequence.length())
\r
416 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
430 * @param i DOCUMENT ME!
\r
432 public void deleteCharAt(int i)
\r
434 if (i >= sequence.length())
\r
439 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
445 * @param i DOCUMENT ME!
\r
446 * @param j DOCUMENT ME!
\r
448 public void deleteChars(int i, int j)
\r
450 if (i >= sequence.length())
\r
455 if (j >= sequence.length())
\r
457 sequence = sequence.substring(0, i);
\r
461 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
468 * @param i DOCUMENT ME!
\r
469 * @param c DOCUMENT ME!
\r
471 public void insertCharAt(int i, char c)
\r
473 insertCharAt(i, c, true);
\r
479 * @param i DOCUMENT ME!
\r
480 * @param c DOCUMENT ME!
\r
481 * @param chop DOCUMENT ME!
\r
483 public void insertCharAt(int i, char c, boolean chop)
\r
485 String tmp = new String(sequence);
\r
487 if (i < sequence.length())
\r
489 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
494 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
495 char[] ch = new char[(1 + i) - sequence.length()];
\r
497 for (int j = 0, k = ch.length; j < k; j++)
\r
500 sequence = tmp + String.valueOf(ch);
\r
507 * @param c DOCUMENT ME!
\r
509 public void setColor(Color c)
\r
517 * @return DOCUMENT ME!
\r
519 public Color getColor()
\r
524 public String getVamsasId()
\r
529 public void setVamsasId(String id)
\r
534 public Vector getDBRef()
\r
539 public void addDBRef(DBRefEntry entry)
\r
542 dbrefs = new Vector();
\r
544 dbrefs.addElement(entry);
\r