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
41 Color color = Color.white;
\r
47 /** DOCUMENT ME!! */
\r
48 public Vector sequenceFeatures = new Vector();
\r
51 * Creates a new Sequence object.
\r
53 * @param name DOCUMENT ME!
\r
54 * @param sequence DOCUMENT ME!
\r
55 * @param start DOCUMENT ME!
\r
56 * @param end DOCUMENT ME!
\r
58 public Sequence(String name, String sequence, int start, int end)
\r
63 this.sequence = sequence;
\r
72 // Read in any DB refs first
\r
73 StringTokenizer st = new StringTokenizer(name, "|");
\r
74 if(st.countTokens()<1)
\r
80 while (st.countTokens() > 1)
\r
82 String a = st.nextToken();
\r
83 String b = st.nextToken();
\r
84 addDBRef(new DBRefEntry(a, "0", b));
\r
87 if (st.hasMoreTokens())
\r
88 shortName = st.nextToken();
\r
90 // Remove /start-end from sequence
\r
91 if (shortName.indexOf("/") > 0)
\r
93 st = new StringTokenizer(shortName, "/");
\r
94 String limits = null;
\r
97 if (st.countTokens() == 2)
\r
99 shortName = st.nextToken();
\r
101 limits = st.nextToken();
\r
103 st = new StringTokenizer(limits, "-");
\r
105 if (st.countTokens() == 2)
\r
107 setStart(Integer.valueOf(st.nextToken()).intValue());
\r
108 setEnd(Integer.valueOf(st.nextToken()).intValue());
\r
112 catch (NumberFormatException ex)
\r
114 // Problem parsing sequence limits. Just add it back to the
\r
115 // Id so we dont lose this info
\r
116 shortName += "/" + limits;
\r
121 void checkValidRange()
\r
127 for (int j = 0; j < sequence.length(); j++)
\r
129 ch = sequence.charAt(j);
\r
130 if (!jalview.util.Comparison.isGap( (ch)))
\r
137 endRes += start - 1;
\r
146 * Creates a new Sequence object.
\r
148 * @param name DOCUMENT ME!
\r
149 * @param sequence DOCUMENT ME!
\r
151 public Sequence(String name, String sequence)
\r
153 this(name, sequence, 1, -1);
\r
157 * Creates a new Sequence object.
\r
159 * @param seq DOCUMENT ME!
\r
161 public Sequence(SequenceI seq)
\r
163 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
169 * @param v DOCUMENT ME!
\r
171 public void setSequenceFeatures(Vector v)
\r
173 sequenceFeatures = v;
\r
176 public void addSequenceFeature(SequenceFeature sf)
\r
178 if(sequenceFeatures==null)
\r
179 sequenceFeatures = new Vector();
\r
181 sequenceFeatures.addElement(sf);
\r
187 * @return DOCUMENT ME!
\r
189 public Vector getSequenceFeatures()
\r
191 return sequenceFeatures;
\r
197 * @param id DOCUMENT ME!
\r
199 public void setPDBId(String id)
\r
207 * @return DOCUMENT ME!
\r
209 public String getPDBId()
\r
217 * @return DOCUMENT ME!
\r
219 public String getDisplayId(boolean dbref, boolean jvsuffix)
\r
221 StringBuffer result = new StringBuffer();
\r
222 if (dbref && dbrefs != null)
\r
224 for (int i = 0; i < dbrefs.size(); i++)
\r
226 DBRefEntry entry = (DBRefEntry) dbrefs.elementAt(i);
\r
227 result.append(entry.getSource() + "|" + entry.getAccessionId() + "|");
\r
231 result.append(shortName);
\r
235 result.append("/" + start + "-" + end);
\r
238 return result.toString();
\r
244 * @param name DOCUMENT ME!
\r
246 public void setName(String name)
\r
255 * @return DOCUMENT ME!
\r
257 public String getName()
\r
265 * @param start DOCUMENT ME!
\r
267 public void setStart(int start)
\r
269 this.start = start;
\r
275 * @return DOCUMENT ME!
\r
277 public int getStart()
\r
285 * @param end DOCUMENT ME!
\r
287 public void setEnd(int end)
\r
295 * @return DOCUMENT ME!
\r
297 public int getEnd()
\r
305 * @return DOCUMENT ME!
\r
307 public int getLength()
\r
309 return this.sequence.length();
\r
315 * @param seq DOCUMENT ME!
\r
317 public void setSequence(String seq)
\r
319 this.sequence = seq;
\r
326 * @return DOCUMENT ME!
\r
328 public String getSequence()
\r
330 return this.sequence;
\r
336 * @param start DOCUMENT ME!
\r
337 * @param end DOCUMENT ME!
\r
339 * @return DOCUMENT ME!
\r
341 public String getSequence(int start, int end)
\r
343 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
344 if (start >= sequence.length())
\r
349 if (end >= sequence.length())
\r
351 end = sequence.length();
\r
354 return this.sequence.substring(start, end);
\r
360 * @param i DOCUMENT ME!
\r
362 * @return DOCUMENT ME!
\r
364 public char getCharAt(int i)
\r
366 if (i < sequence.length())
\r
368 return sequence.charAt(i);
\r
379 * @param desc DOCUMENT ME!
\r
381 public void setDescription(String desc)
\r
383 this.description = desc;
\r
389 * @return DOCUMENT ME!
\r
391 public String getDescription()
\r
393 return this.description;
\r
399 * @param pos DOCUMENT ME!
\r
401 * @return DOCUMENT ME!
\r
403 public int findIndex(int pos)
\r
405 // returns the alignment position for a residue
\r
409 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
411 char c = sequence.charAt(i);
\r
413 if (!jalview.util.Comparison.isGap((c)))
\r
421 if ((j == end) && (j < pos))
\r
434 * @param i DOCUMENT ME!
\r
436 * @return DOCUMENT ME!
\r
438 public int findPosition(int i)
\r
440 // Returns the sequence position for an alignment position
\r
444 while ((j < i) && (j < sequence.length()))
\r
446 char c = sequence.charAt(j);
\r
448 if (!jalview.util.Comparison.isGap((c)))
\r
462 * @return DOCUMENT ME!
\r
464 public int[] gapMap()
\r
466 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
467 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
468 int[] map = new int[seq.length()];
\r
472 while (j < sequence.length())
\r
474 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
488 * @param i DOCUMENT ME!
\r
490 public void deleteCharAt(int i)
\r
492 if (i >= sequence.length())
\r
497 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
503 * @param i DOCUMENT ME!
\r
504 * @param j DOCUMENT ME!
\r
506 public void deleteChars(int i, int j)
\r
508 if (i >= sequence.length())
\r
513 if (j >= sequence.length())
\r
515 sequence = sequence.substring(0, i);
\r
519 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
526 * @param i DOCUMENT ME!
\r
527 * @param c DOCUMENT ME!
\r
529 public void insertCharAt(int i, char c)
\r
531 insertCharAt(i, c, true);
\r
537 * @param i DOCUMENT ME!
\r
538 * @param c DOCUMENT ME!
\r
539 * @param chop DOCUMENT ME!
\r
541 public void insertCharAt(int i, char c, boolean chop)
\r
543 String tmp = new String(sequence);
\r
545 if (i < sequence.length())
\r
547 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
552 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
553 char[] ch = new char[(1 + i) - sequence.length()];
\r
555 for (int j = 0, k = ch.length; j < k; j++)
\r
558 sequence = tmp + String.valueOf(ch);
\r
565 * @param c DOCUMENT ME!
\r
567 public void setColor(Color c)
\r
575 * @return DOCUMENT ME!
\r
577 public Color getColor()
\r
582 public String getVamsasId()
\r
587 public void setVamsasId(String id)
\r
592 public void setDBRef(Vector dbref)
\r
596 public Vector getDBRef()
\r
601 public void addDBRef(DBRefEntry entry)
\r
604 dbrefs = new Vector();
\r
606 dbrefs.addElement(entry);
\r
609 public void setDatasetSequence(SequenceI seq)
\r
611 datasetSequence = seq;
\r
614 public SequenceI getDatasetSequence()
\r
616 return datasetSequence;
\r