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
100 shortName = st.nextToken();
\r
102 limits = st.nextToken();
\r
104 st = new StringTokenizer(limits, "-");
\r
106 if (st.countTokens() == 2)
\r
108 setStart(Integer.valueOf(st.nextToken()).intValue());
\r
109 setEnd(Integer.valueOf(st.nextToken()).intValue());
\r
113 // If we're still in this loop, parsing of start and end was ok
\r
114 // Therefore remove it from the sequence name
\r
115 name = name.substring(0, name.indexOf("/"));
\r
117 catch (NumberFormatException ex)
\r
119 // Problem parsing sequence limits. Just add it back to the
\r
120 // Id so we dont lose this info
\r
121 shortName += "/" + limits;
\r
127 void checkValidRange()
\r
133 for (int j = 0; j < sequence.length(); j++)
\r
135 ch = sequence.charAt(j);
\r
136 if (!jalview.util.Comparison.isGap( (ch)))
\r
143 endRes += start - 1;
\r
152 * Creates a new Sequence object.
\r
154 * @param name DOCUMENT ME!
\r
155 * @param sequence DOCUMENT ME!
\r
157 public Sequence(String name, String sequence)
\r
159 this(name, sequence, 1, -1);
\r
163 * Creates a new Sequence object.
\r
165 * @param seq DOCUMENT ME!
\r
167 public Sequence(SequenceI seq)
\r
169 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
175 * @param v DOCUMENT ME!
\r
177 public void setSequenceFeatures(Vector v)
\r
179 sequenceFeatures = v;
\r
182 public void addSequenceFeature(SequenceFeature sf)
\r
184 if(sequenceFeatures==null)
\r
185 sequenceFeatures = new Vector();
\r
187 sequenceFeatures.addElement(sf);
\r
193 * @return DOCUMENT ME!
\r
195 public Vector getSequenceFeatures()
\r
197 return sequenceFeatures;
\r
203 * @param id DOCUMENT ME!
\r
205 public void setPDBId(Vector id)
\r
213 * @return DOCUMENT ME!
\r
215 public Vector getPDBId()
\r
223 * @return DOCUMENT ME!
\r
225 public String getDisplayId(boolean dbref, boolean jvsuffix)
\r
227 StringBuffer result = new StringBuffer();
\r
228 if (dbref && dbrefs != null)
\r
230 for (int i = 0; i < dbrefs.size(); i++)
\r
232 DBRefEntry entry = (DBRefEntry) dbrefs.elementAt(i);
\r
233 result.append(entry.getSource() + "|" + entry.getAccessionId() + "|");
\r
237 result.append(shortName);
\r
241 result.append("/" + start + "-" + end);
\r
244 return result.toString();
\r
250 * @param name DOCUMENT ME!
\r
252 public void setName(String name)
\r
261 * @return DOCUMENT ME!
\r
263 public String getName()
\r
271 * @param start DOCUMENT ME!
\r
273 public void setStart(int start)
\r
275 this.start = start;
\r
281 * @return DOCUMENT ME!
\r
283 public int getStart()
\r
291 * @param end DOCUMENT ME!
\r
293 public void setEnd(int end)
\r
301 * @return DOCUMENT ME!
\r
303 public int getEnd()
\r
311 * @return DOCUMENT ME!
\r
313 public int getLength()
\r
315 return this.sequence.length();
\r
321 * @param seq DOCUMENT ME!
\r
323 public void setSequence(String seq)
\r
325 this.sequence = seq;
\r
332 * @return DOCUMENT ME!
\r
334 public String getSequence()
\r
336 return this.sequence;
\r
342 * @param start DOCUMENT ME!
\r
343 * @param end DOCUMENT ME!
\r
345 * @return DOCUMENT ME!
\r
347 public String getSequence(int start, int end)
\r
349 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
350 if (start >= sequence.length())
\r
355 if (end >= sequence.length())
\r
357 end = sequence.length();
\r
360 return this.sequence.substring(start, end);
\r
366 * @param i DOCUMENT ME!
\r
368 * @return DOCUMENT ME!
\r
370 public char getCharAt(int i)
\r
372 if (i < sequence.length())
\r
374 return sequence.charAt(i);
\r
385 * @param desc DOCUMENT ME!
\r
387 public void setDescription(String desc)
\r
389 this.description = desc;
\r
395 * @return DOCUMENT ME!
\r
397 public String getDescription()
\r
399 return this.description;
\r
405 * @param pos DOCUMENT ME!
\r
407 * @return DOCUMENT ME!
\r
409 public int findIndex(int pos)
\r
411 // returns the alignment position for a residue
\r
415 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
417 char c = sequence.charAt(i);
\r
419 if (!jalview.util.Comparison.isGap((c)))
\r
427 if ((j == end) && (j < pos))
\r
440 * @param i DOCUMENT ME!
\r
442 * @return DOCUMENT ME!
\r
444 public int findPosition(int i)
\r
446 // Returns the sequence position for an alignment position
\r
450 while ((j < i) && (j < sequence.length()))
\r
452 char c = sequence.charAt(j);
\r
454 if (!jalview.util.Comparison.isGap((c)))
\r
468 * @return DOCUMENT ME!
\r
470 public int[] gapMap()
\r
472 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
473 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
474 int[] map = new int[seq.length()];
\r
478 while (j < sequence.length())
\r
480 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
494 * @param i DOCUMENT ME!
\r
496 public void deleteCharAt(int i)
\r
498 if (i >= sequence.length())
\r
503 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
509 * @param i DOCUMENT ME!
\r
510 * @param j DOCUMENT ME!
\r
512 public void deleteChars(int i, int j)
\r
514 if (i >= sequence.length())
\r
519 if (j >= sequence.length())
\r
521 sequence = sequence.substring(0, i);
\r
525 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
532 * @param i DOCUMENT ME!
\r
533 * @param c DOCUMENT ME!
\r
535 public void insertCharAt(int i, char c)
\r
537 insertCharAt(i, c, true);
\r
543 * @param i DOCUMENT ME!
\r
544 * @param c DOCUMENT ME!
\r
545 * @param chop DOCUMENT ME!
\r
547 public void insertCharAt(int i, char c, boolean chop)
\r
549 String tmp = new String(sequence);
\r
551 if (i < sequence.length())
\r
553 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
558 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
559 char[] ch = new char[(1 + i) - sequence.length()];
\r
561 for (int j = 0, k = ch.length; j < k; j++)
\r
564 sequence = tmp + String.valueOf(ch);
\r
571 * @param c DOCUMENT ME!
\r
573 public void setColor(Color c)
\r
581 * @return DOCUMENT ME!
\r
583 public Color getColor()
\r
588 public String getVamsasId()
\r
593 public void setVamsasId(String id)
\r
598 public void setDBRef(Vector dbref)
\r
602 public Vector getDBRef()
\r
607 public void addDBRef(DBRefEntry entry)
\r
610 dbrefs = new Vector();
\r
612 dbrefs.addElement(entry);
\r
615 public void setDatasetSequence(SequenceI seq)
\r
617 datasetSequence = seq;
\r
620 public SequenceI getDatasetSequence()
\r
622 return datasetSequence;
\r