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 SequenceI datasetSequence;
\r
40 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
71 // Remove /start-end from sequence
\r
72 if (name.indexOf("/") > 0)
\r
74 String limits = name.substring(name.lastIndexOf("/")+1);
\r
77 StringTokenizer st = new StringTokenizer(limits, "-");
\r
79 if (st.countTokens() == 2)
\r
81 setStart(Integer.valueOf(st.nextToken()).intValue());
\r
82 setEnd(Integer.valueOf(st.nextToken()).intValue());
\r
85 // If we're still in this loop, parsing of start and end was ok
\r
86 // Therefore remove it from the sequence name
\r
87 name = name.substring(0, name.lastIndexOf("/"));
\r
89 catch (NumberFormatException ex)
\r
95 void checkValidRange()
\r
101 for (int j = 0; j < sequence.length(); j++)
\r
103 ch = sequence.charAt(j);
\r
104 if (!jalview.util.Comparison.isGap( (ch)))
\r
111 endRes += start - 1;
\r
120 * Creates a new Sequence object.
\r
122 * @param name DOCUMENT ME!
\r
123 * @param sequence DOCUMENT ME!
\r
125 public Sequence(String name, String sequence)
\r
127 this(name, sequence, 1, -1);
\r
131 * Creates a new Sequence object.
\r
133 * @param seq DOCUMENT ME!
\r
135 public Sequence(SequenceI seq)
\r
137 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
143 * @param v DOCUMENT ME!
\r
145 public void setSequenceFeatures(Vector v)
\r
147 sequenceFeatures = v;
\r
150 public void addSequenceFeature(SequenceFeature sf)
\r
152 if(sequenceFeatures==null)
\r
153 sequenceFeatures = new Vector();
\r
155 sequenceFeatures.addElement(sf);
\r
161 * @return DOCUMENT ME!
\r
163 public Vector getSequenceFeatures()
\r
165 return sequenceFeatures;
\r
168 public void addPDBId(PDBEntry entry)
\r
171 pdbIds = new Vector();
\r
173 pdbIds.addElement(entry);
\r
179 * @param id DOCUMENT ME!
\r
181 public void setPDBId(Vector id)
\r
189 * @return DOCUMENT ME!
\r
191 public Vector getPDBId()
\r
199 * @return DOCUMENT ME!
\r
201 public String getDisplayId(boolean jvsuffix)
\r
203 StringBuffer result = new StringBuffer(name);
\r
206 result.append("/" + start + "-" + end);
\r
209 return result.toString();
\r
215 * @param name DOCUMENT ME!
\r
217 public void setName(String name)
\r
226 * @return DOCUMENT ME!
\r
228 public String getName()
\r
236 * @param start DOCUMENT ME!
\r
238 public void setStart(int start)
\r
240 this.start = start;
\r
246 * @return DOCUMENT ME!
\r
248 public int getStart()
\r
256 * @param end DOCUMENT ME!
\r
258 public void setEnd(int end)
\r
266 * @return DOCUMENT ME!
\r
268 public int getEnd()
\r
276 * @return DOCUMENT ME!
\r
278 public int getLength()
\r
280 return this.sequence.length();
\r
286 * @param seq DOCUMENT ME!
\r
288 public void setSequence(String seq)
\r
290 this.sequence = seq;
\r
297 * @return DOCUMENT ME!
\r
299 public String getSequence()
\r
301 return this.sequence;
\r
307 * @param start DOCUMENT ME!
\r
308 * @param end DOCUMENT ME!
\r
310 * @return DOCUMENT ME!
\r
312 public String getSequence(int start, int end)
\r
314 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
315 if (start >= sequence.length())
\r
320 if (end >= sequence.length())
\r
322 end = sequence.length();
\r
325 return this.sequence.substring(start, end);
\r
331 * @param i DOCUMENT ME!
\r
333 * @return DOCUMENT ME!
\r
335 public char getCharAt(int i)
\r
337 if (i < sequence.length())
\r
339 return sequence.charAt(i);
\r
350 * @param desc DOCUMENT ME!
\r
352 public void setDescription(String desc)
\r
354 this.description = desc;
\r
360 * @return DOCUMENT ME!
\r
362 public String getDescription()
\r
364 return this.description;
\r
370 * @param pos DOCUMENT ME!
\r
372 * @return DOCUMENT ME!
\r
374 public int findIndex(int pos)
\r
376 // returns the alignment position for a residue
\r
380 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
382 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
390 if ((j == end) && (j < pos))
\r
403 * @param i DOCUMENT ME!
\r
405 * @return DOCUMENT ME!
\r
407 public int findPosition(int i)
\r
409 // Returns the sequence position for an alignment position
\r
413 while ((j < i) && (j < sequence.length()))
\r
415 if (!jalview.util.Comparison.isGap((sequence.charAt(j))))
\r
429 * @return DOCUMENT ME!
\r
431 public int[] gapMap()
\r
433 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
434 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
435 int[] map = new int[seq.length()];
\r
439 while (j < sequence.length())
\r
441 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
455 * @param i DOCUMENT ME!
\r
457 public void deleteCharAt(int i)
\r
459 if (i >= sequence.length())
\r
464 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
470 * @param i DOCUMENT ME!
\r
471 * @param j DOCUMENT ME!
\r
473 public void deleteChars(int i, int j)
\r
475 if (i >= sequence.length())
\r
480 if (j >= sequence.length())
\r
482 sequence = sequence.substring(0, i);
\r
486 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
493 * @param i DOCUMENT ME!
\r
494 * @param c DOCUMENT ME!
\r
496 public void insertCharAt(int i, char c)
\r
498 insertCharAt(i, c, true);
\r
504 * @param i DOCUMENT ME!
\r
505 * @param c DOCUMENT ME!
\r
506 * @param chop DOCUMENT ME!
\r
508 public void insertCharAt(int i, char c, boolean chop)
\r
510 String tmp = new String(sequence);
\r
512 if (i < sequence.length())
\r
514 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
519 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
520 char[] ch = new char[(1 + i) - sequence.length()];
\r
522 for (int j = 0, k = ch.length; j < k; j++)
\r
525 sequence = tmp + String.valueOf(ch);
\r
532 * @param c DOCUMENT ME!
\r
534 public void setColor(Color c)
\r
542 * @return DOCUMENT ME!
\r
544 public Color getColor()
\r
549 public String getVamsasId()
\r
554 public void setVamsasId(String id)
\r
559 public void setDBRef(Vector dbref)
\r
563 public Vector getDBRef()
\r
568 public void addDBRef(DBRefEntry entry)
\r
571 dbrefs = new Vector();
\r
573 dbrefs.addElement(entry);
\r
576 public void setDatasetSequence(SequenceI seq)
\r
578 datasetSequence = seq;
\r
581 public SequenceI getDatasetSequence()
\r
583 return datasetSequence;
\r