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
45 /** This annotation is displayed below the alignment but the
\r
46 * positions are tied to the residues of this sequence */
\r
49 /** DOCUMENT ME!! */
\r
50 public Vector sequenceFeatures;
\r
53 * Creates a new Sequence object.
\r
55 * @param name DOCUMENT ME!
\r
56 * @param sequence DOCUMENT ME!
\r
57 * @param start DOCUMENT ME!
\r
58 * @param end DOCUMENT ME!
\r
60 public Sequence(String name, String sequence, int start, int end)
\r
63 this.sequence = sequence;
\r
72 com.stevesoft.pat.Regex limitrx = new com.stevesoft.pat.Regex(
\r
73 "[/][0-9]{1,}[-][0-9]{1,}$");
\r
74 com.stevesoft.pat.Regex endrx = new com.stevesoft.pat.Regex(
\r
79 // Does sequence have the /start-end signiature?
\r
80 if(limitrx.search(name))
\r
82 name = limitrx.left();
\r
83 endrx.search(limitrx.stringMatched());
\r
84 setStart( Integer.parseInt( limitrx.stringMatched().substring(1,endrx.matchedFrom()-1 )));
\r
85 setEnd( Integer.parseInt( endrx.stringMatched() ));
\r
89 void checkValidRange()
\r
95 for (int j = 0; j < sequence.length(); j++)
\r
97 ch = sequence.charAt(j);
\r
98 if (!jalview.util.Comparison.isGap( (ch)))
\r
105 endRes += start - 1;
\r
114 * Creates a new Sequence object.
\r
116 * @param name DOCUMENT ME!
\r
117 * @param sequence DOCUMENT ME!
\r
119 public Sequence(String name, String sequence)
\r
121 this(name, sequence, 1, -1);
\r
125 * Creates a new Sequence object.
\r
127 * @param seq DOCUMENT ME!
\r
129 public Sequence(SequenceI seq)
\r
131 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
137 * @param v DOCUMENT ME!
\r
139 public void setSequenceFeatures(Vector v)
\r
141 sequenceFeatures = v;
\r
144 public void addSequenceFeature(SequenceFeature sf)
\r
146 if(sequenceFeatures==null)
\r
147 sequenceFeatures = new Vector();
\r
149 sequenceFeatures.addElement(sf);
\r
155 * @return DOCUMENT ME!
\r
157 public Vector getSequenceFeatures()
\r
159 return sequenceFeatures;
\r
162 public void addPDBId(PDBEntry entry)
\r
165 pdbIds = new Vector();
\r
167 pdbIds.addElement(entry);
\r
173 * @param id DOCUMENT ME!
\r
175 public void setPDBId(Vector id)
\r
183 * @return DOCUMENT ME!
\r
185 public Vector getPDBId()
\r
193 * @return DOCUMENT ME!
\r
195 public String getDisplayId(boolean jvsuffix)
\r
197 StringBuffer result = new StringBuffer(name);
\r
200 result.append("/" + start + "-" + end);
\r
203 return result.toString();
\r
209 * @param name DOCUMENT ME!
\r
211 public void setName(String name)
\r
220 * @return DOCUMENT ME!
\r
222 public String getName()
\r
230 * @param start DOCUMENT ME!
\r
232 public void setStart(int start)
\r
234 this.start = start;
\r
240 * @return DOCUMENT ME!
\r
242 public int getStart()
\r
250 * @param end DOCUMENT ME!
\r
252 public void setEnd(int end)
\r
260 * @return DOCUMENT ME!
\r
262 public int getEnd()
\r
270 * @return DOCUMENT ME!
\r
272 public int getLength()
\r
274 return this.sequence.length();
\r
280 * @param seq DOCUMENT ME!
\r
282 public void setSequence(String seq)
\r
284 this.sequence = seq;
\r
291 * @return DOCUMENT ME!
\r
293 public String getSequence()
\r
295 return this.sequence;
\r
301 * @param start DOCUMENT ME!
\r
302 * @param end DOCUMENT ME!
\r
304 * @return DOCUMENT ME!
\r
306 public String getSequence(int start, int end)
\r
308 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
309 if (start >= sequence.length())
\r
314 if (end >= sequence.length())
\r
316 end = sequence.length();
\r
319 return this.sequence.substring(start, end);
\r
325 * @param i DOCUMENT ME!
\r
327 * @return DOCUMENT ME!
\r
329 public char getCharAt(int i)
\r
331 if (i < sequence.length())
\r
333 return sequence.charAt(i);
\r
344 * @param desc DOCUMENT ME!
\r
346 public void setDescription(String desc)
\r
348 this.description = desc;
\r
354 * @return DOCUMENT ME!
\r
356 public String getDescription()
\r
358 return this.description;
\r
364 * @param pos DOCUMENT ME!
\r
366 * @return DOCUMENT ME!
\r
368 public int findIndex(int pos)
\r
370 // returns the alignment position for a residue
\r
374 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
376 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
384 if ((j == end) && (j < pos))
\r
397 * @param i DOCUMENT ME!
\r
399 * @return DOCUMENT ME!
\r
401 public int findPosition(int i)
\r
403 // Returns the sequence position for an alignment position
\r
407 while ((j < i) && (j < sequence.length()))
\r
409 if (!jalview.util.Comparison.isGap((sequence.charAt(j))))
\r
423 * @return DOCUMENT ME!
\r
425 public int[] gapMap()
\r
427 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
428 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
429 int[] map = new int[seq.length()];
\r
433 while (j < sequence.length())
\r
435 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
449 * @param i DOCUMENT ME!
\r
451 public void deleteCharAt(int i)
\r
453 if (i >= sequence.length())
\r
458 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
464 * @param i DOCUMENT ME!
\r
465 * @param j DOCUMENT ME!
\r
467 public void deleteChars(int i, int j)
\r
469 if (i >= sequence.length())
\r
474 if (j >= sequence.length())
\r
476 sequence = sequence.substring(0, i);
\r
480 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
487 * @param i DOCUMENT ME!
\r
488 * @param c DOCUMENT ME!
\r
490 public void insertCharAt(int i, char c)
\r
492 insertCharAt(i, c, true);
\r
498 * @param i DOCUMENT ME!
\r
499 * @param c DOCUMENT ME!
\r
500 * @param chop DOCUMENT ME!
\r
502 public void insertCharAt(int i, char c, boolean chop)
\r
504 String tmp = new String(sequence);
\r
506 if (i < sequence.length())
\r
508 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
513 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
514 char[] ch = new char[(1 + i) - sequence.length()];
\r
516 for (int j = 0, k = ch.length; j < k; j++)
\r
519 sequence = tmp + String.valueOf(ch);
\r
526 * @param c DOCUMENT ME!
\r
528 public void setColor(Color c)
\r
536 * @return DOCUMENT ME!
\r
538 public Color getColor()
\r
543 public String getVamsasId()
\r
548 public void setVamsasId(String id)
\r
553 public void setDBRef(Vector dbref)
\r
557 public Vector getDBRef()
\r
562 public void addDBRef(DBRefEntry entry)
\r
565 dbrefs = new Vector();
\r
567 dbrefs.addElement(entry);
\r
570 public void setDatasetSequence(SequenceI seq)
\r
572 datasetSequence = seq;
\r
575 public SequenceI getDatasetSequence()
\r
577 return datasetSequence;
\r
580 public AlignmentAnnotation [] getAnnotation()
\r
582 if(annotation==null)
\r
585 AlignmentAnnotation [] ret = new AlignmentAnnotation[annotation.size()];
\r
586 for(int r = 0; r<ret.length; r++)
\r
587 ret[r] = (AlignmentAnnotation)annotation.elementAt(r);
\r
592 public void addAlignmentAnnotation(AlignmentAnnotation annotation)
\r
594 if(this.annotation==null)
\r
595 this.annotation = new Vector();
\r
597 this.annotation.addElement( annotation );
\r