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
61 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.lastIndexOf("/"));
\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
200 public void addPDBId(PDBEntry entry)
\r
203 pdbIds = new Vector();
\r
205 pdbIds.addElement(entry);
\r
211 * @param id DOCUMENT ME!
\r
213 public void setPDBId(Vector id)
\r
221 * @return DOCUMENT ME!
\r
223 public Vector getPDBId()
\r
231 * @return DOCUMENT ME!
\r
233 public String getDisplayId(boolean dbref, boolean jvsuffix)
\r
235 StringBuffer result = new StringBuffer();
\r
236 if (dbref && dbrefs != null)
\r
238 for (int i = 0; i < dbrefs.size(); i++)
\r
240 DBRefEntry entry = (DBRefEntry) dbrefs.elementAt(i);
\r
241 result.append(entry.getSource() + "|" + entry.getAccessionId() + "|");
\r
245 result.append(shortName);
\r
249 result.append("/" + start + "-" + end);
\r
252 return result.toString();
\r
258 * @param name DOCUMENT ME!
\r
260 public void setName(String name)
\r
269 * @return DOCUMENT ME!
\r
271 public String getName()
\r
279 * @param start DOCUMENT ME!
\r
281 public void setStart(int start)
\r
283 this.start = start;
\r
289 * @return DOCUMENT ME!
\r
291 public int getStart()
\r
299 * @param end DOCUMENT ME!
\r
301 public void setEnd(int end)
\r
309 * @return DOCUMENT ME!
\r
311 public int getEnd()
\r
319 * @return DOCUMENT ME!
\r
321 public int getLength()
\r
323 return this.sequence.length();
\r
329 * @param seq DOCUMENT ME!
\r
331 public void setSequence(String seq)
\r
333 this.sequence = seq;
\r
340 * @return DOCUMENT ME!
\r
342 public String getSequence()
\r
344 return this.sequence;
\r
350 * @param start DOCUMENT ME!
\r
351 * @param end DOCUMENT ME!
\r
353 * @return DOCUMENT ME!
\r
355 public String getSequence(int start, int end)
\r
357 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
358 if (start >= sequence.length())
\r
363 if (end >= sequence.length())
\r
365 end = sequence.length();
\r
368 return this.sequence.substring(start, end);
\r
374 * @param i DOCUMENT ME!
\r
376 * @return DOCUMENT ME!
\r
378 public char getCharAt(int i)
\r
380 if (i < sequence.length())
\r
382 return sequence.charAt(i);
\r
393 * @param desc DOCUMENT ME!
\r
395 public void setDescription(String desc)
\r
397 this.description = desc;
\r
403 * @return DOCUMENT ME!
\r
405 public String getDescription()
\r
407 return this.description;
\r
413 * @param pos DOCUMENT ME!
\r
415 * @return DOCUMENT ME!
\r
417 public int findIndex(int pos)
\r
419 // returns the alignment position for a residue
\r
423 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
425 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
433 if ((j == end) && (j < pos))
\r
446 * @param i DOCUMENT ME!
\r
448 * @return DOCUMENT ME!
\r
450 public int findPosition(int i)
\r
452 // Returns the sequence position for an alignment position
\r
456 while ((j < i) && (j < sequence.length()))
\r
458 char c = sequence.charAt(j);
\r
460 if (!jalview.util.Comparison.isGap((c)))
\r
474 * @return DOCUMENT ME!
\r
476 public int[] gapMap()
\r
478 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
479 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
480 int[] map = new int[seq.length()];
\r
484 while (j < sequence.length())
\r
486 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
500 * @param i DOCUMENT ME!
\r
502 public void deleteCharAt(int i)
\r
504 if (i >= sequence.length())
\r
509 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
515 * @param i DOCUMENT ME!
\r
516 * @param j DOCUMENT ME!
\r
518 public void deleteChars(int i, int j)
\r
520 if (i >= sequence.length())
\r
525 if (j >= sequence.length())
\r
527 sequence = sequence.substring(0, i);
\r
531 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
538 * @param i DOCUMENT ME!
\r
539 * @param c DOCUMENT ME!
\r
541 public void insertCharAt(int i, char c)
\r
543 insertCharAt(i, c, true);
\r
549 * @param i DOCUMENT ME!
\r
550 * @param c DOCUMENT ME!
\r
551 * @param chop DOCUMENT ME!
\r
553 public void insertCharAt(int i, char c, boolean chop)
\r
555 String tmp = new String(sequence);
\r
557 if (i < sequence.length())
\r
559 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
564 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
565 char[] ch = new char[(1 + i) - sequence.length()];
\r
567 for (int j = 0, k = ch.length; j < k; j++)
\r
570 sequence = tmp + String.valueOf(ch);
\r
577 * @param c DOCUMENT ME!
\r
579 public void setColor(Color c)
\r
587 * @return DOCUMENT ME!
\r
589 public Color getColor()
\r
594 public String getVamsasId()
\r
599 public void setVamsasId(String id)
\r
604 public void setDBRef(Vector dbref)
\r
608 public Vector getDBRef()
\r
613 public void addDBRef(DBRefEntry entry)
\r
616 dbrefs = new Vector();
\r
618 dbrefs.addElement(entry);
\r
621 public void setDatasetSequence(SequenceI seq)
\r
623 datasetSequence = seq;
\r
626 public SequenceI getDatasetSequence()
\r
628 return datasetSequence;
\r
631 public String getShortName()
\r