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
66 this.sequence = sequence;
\r
74 // Read in any DB refs first
\r
75 StringTokenizer st = new StringTokenizer(name, "|");
\r
76 if(st.countTokens()<1)
\r
82 while (st.countTokens() > 1)
\r
84 String a = st.nextToken();
\r
85 String b = st.nextToken();
\r
86 addDBRef(new DBRefEntry(a, "0", b));
\r
89 if (st.hasMoreTokens())
\r
90 shortName = st.nextToken();
\r
92 // Remove /start-end from sequence
\r
93 if (shortName.indexOf("/") > 0)
\r
95 st = new StringTokenizer(shortName, "/");
\r
96 String limits = null;
\r
99 if (st.countTokens() == 2)
\r
102 shortName = st.nextToken();
\r
104 limits = st.nextToken();
\r
106 st = new StringTokenizer(limits, "-");
\r
108 if (st.countTokens() == 2)
\r
110 setStart(Integer.valueOf(st.nextToken()).intValue());
\r
111 setEnd(Integer.valueOf(st.nextToken()).intValue());
\r
115 // If we're still in this loop, parsing of start and end was ok
\r
116 // Therefore remove it from the sequence name
\r
117 name = name.substring(0, name.indexOf("/"));
\r
119 catch (NumberFormatException ex)
\r
121 // Problem parsing sequence limits. Just add it back to the
\r
122 // Id so we dont lose this info
\r
123 shortName += "/" + limits;
\r
129 void checkValidRange()
\r
135 for (int j = 0; j < sequence.length(); j++)
\r
137 ch = sequence.charAt(j);
\r
138 if (!jalview.util.Comparison.isGap( (ch)))
\r
145 endRes += start - 1;
\r
154 * Creates a new Sequence object.
\r
156 * @param name DOCUMENT ME!
\r
157 * @param sequence DOCUMENT ME!
\r
159 public Sequence(String name, String sequence)
\r
161 this(name, sequence, 1, -1);
\r
165 * Creates a new Sequence object.
\r
167 * @param seq DOCUMENT ME!
\r
169 public Sequence(SequenceI seq)
\r
171 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
177 * @param v DOCUMENT ME!
\r
179 public void setSequenceFeatures(Vector v)
\r
181 sequenceFeatures = v;
\r
184 public void addSequenceFeature(SequenceFeature sf)
\r
186 if(sequenceFeatures==null)
\r
187 sequenceFeatures = new Vector();
\r
189 sequenceFeatures.addElement(sf);
\r
195 * @return DOCUMENT ME!
\r
197 public Vector getSequenceFeatures()
\r
199 return sequenceFeatures;
\r
202 public void addPDBId(PDBEntry entry)
\r
205 pdbIds = new Vector();
\r
207 pdbIds.addElement(entry);
\r
213 * @param id DOCUMENT ME!
\r
215 public void setPDBId(Vector id)
\r
223 * @return DOCUMENT ME!
\r
225 public Vector getPDBId()
\r
233 * @return DOCUMENT ME!
\r
235 public String getDisplayId(boolean dbref, boolean jvsuffix)
\r
237 StringBuffer result = new StringBuffer();
\r
238 if (dbref && dbrefs != null)
\r
240 for (int i = 0; i < dbrefs.size(); i++)
\r
242 DBRefEntry entry = (DBRefEntry) dbrefs.elementAt(i);
\r
243 result.append(entry.getSource() + "|" + entry.getAccessionId() + "|");
\r
247 result.append(shortName);
\r
251 result.append("/" + start + "-" + end);
\r
254 return result.toString();
\r
260 * @param name DOCUMENT ME!
\r
262 public void setName(String name)
\r
271 * @return DOCUMENT ME!
\r
273 public String getName()
\r
281 * @param start DOCUMENT ME!
\r
283 public void setStart(int start)
\r
285 this.start = start;
\r
291 * @return DOCUMENT ME!
\r
293 public int getStart()
\r
301 * @param end DOCUMENT ME!
\r
303 public void setEnd(int end)
\r
311 * @return DOCUMENT ME!
\r
313 public int getEnd()
\r
321 * @return DOCUMENT ME!
\r
323 public int getLength()
\r
325 return this.sequence.length();
\r
331 * @param seq DOCUMENT ME!
\r
333 public void setSequence(String seq)
\r
335 this.sequence = seq;
\r
342 * @return DOCUMENT ME!
\r
344 public String getSequence()
\r
346 return this.sequence;
\r
352 * @param start DOCUMENT ME!
\r
353 * @param end DOCUMENT ME!
\r
355 * @return DOCUMENT ME!
\r
357 public String getSequence(int start, int end)
\r
359 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
360 if (start >= sequence.length())
\r
365 if (end >= sequence.length())
\r
367 end = sequence.length();
\r
370 return this.sequence.substring(start, end);
\r
376 * @param i DOCUMENT ME!
\r
378 * @return DOCUMENT ME!
\r
380 public char getCharAt(int i)
\r
382 if (i < sequence.length())
\r
384 return sequence.charAt(i);
\r
395 * @param desc DOCUMENT ME!
\r
397 public void setDescription(String desc)
\r
399 this.description = desc;
\r
405 * @return DOCUMENT ME!
\r
407 public String getDescription()
\r
409 return this.description;
\r
415 * @param pos DOCUMENT ME!
\r
417 * @return DOCUMENT ME!
\r
419 public int findIndex(int pos)
\r
421 // returns the alignment position for a residue
\r
425 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
427 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
435 if ((j == end) && (j < pos))
\r
448 * @param i DOCUMENT ME!
\r
450 * @return DOCUMENT ME!
\r
452 public int findPosition(int i)
\r
454 // Returns the sequence position for an alignment position
\r
458 while ((j < i) && (j < sequence.length()))
\r
460 char c = sequence.charAt(j);
\r
462 if (!jalview.util.Comparison.isGap((c)))
\r
476 * @return DOCUMENT ME!
\r
478 public int[] gapMap()
\r
480 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
481 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
482 int[] map = new int[seq.length()];
\r
486 while (j < sequence.length())
\r
488 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
502 * @param i DOCUMENT ME!
\r
504 public void deleteCharAt(int i)
\r
506 if (i >= sequence.length())
\r
511 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
517 * @param i DOCUMENT ME!
\r
518 * @param j DOCUMENT ME!
\r
520 public void deleteChars(int i, int j)
\r
522 if (i >= sequence.length())
\r
527 if (j >= sequence.length())
\r
529 sequence = sequence.substring(0, i);
\r
533 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
540 * @param i DOCUMENT ME!
\r
541 * @param c DOCUMENT ME!
\r
543 public void insertCharAt(int i, char c)
\r
545 insertCharAt(i, c, true);
\r
551 * @param i DOCUMENT ME!
\r
552 * @param c DOCUMENT ME!
\r
553 * @param chop DOCUMENT ME!
\r
555 public void insertCharAt(int i, char c, boolean chop)
\r
557 String tmp = new String(sequence);
\r
559 if (i < sequence.length())
\r
561 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
566 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
567 char[] ch = new char[(1 + i) - sequence.length()];
\r
569 for (int j = 0, k = ch.length; j < k; j++)
\r
572 sequence = tmp + String.valueOf(ch);
\r
579 * @param c DOCUMENT ME!
\r
581 public void setColor(Color c)
\r
589 * @return DOCUMENT ME!
\r
591 public Color getColor()
\r
596 public String getVamsasId()
\r
601 public void setVamsasId(String id)
\r
606 public void setDBRef(Vector dbref)
\r
610 public Vector getDBRef()
\r
615 public void addDBRef(DBRefEntry entry)
\r
618 dbrefs = new Vector();
\r
620 dbrefs.addElement(entry);
\r
623 public void setDatasetSequence(SequenceI seq)
\r
625 datasetSequence = seq;
\r
628 public SequenceI getDatasetSequence()
\r
630 return datasetSequence;
\r
633 public String getShortName()
\r