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 SequenceFeature [] 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(SequenceFeature [] features)
\r
141 sequenceFeatures = features;
\r
144 public void addSequenceFeature(SequenceFeature sf)
\r
146 if(sequenceFeatures==null)
\r
148 sequenceFeatures = new SequenceFeature[0];
\r
151 SequenceFeature [] temp = new SequenceFeature[sequenceFeatures.length+1];
\r
152 System.arraycopy(sequenceFeatures, 0, temp, 0, sequenceFeatures.length);
\r
153 temp[sequenceFeatures.length] = sf;
\r
156 sequenceFeatures = temp;
\r
159 SequenceFeature [] sfarray;
\r
161 public SequenceFeature[] getsfarray()
\r
170 * @return DOCUMENT ME!
\r
172 public SequenceFeature [] getSequenceFeatures()
\r
174 return sequenceFeatures;
\r
177 public void addPDBId(PDBEntry entry)
\r
180 pdbIds = new Vector();
\r
182 pdbIds.addElement(entry);
\r
188 * @param id DOCUMENT ME!
\r
190 public void setPDBId(Vector id)
\r
198 * @return DOCUMENT ME!
\r
200 public Vector getPDBId()
\r
208 * @return DOCUMENT ME!
\r
210 public String getDisplayId(boolean jvsuffix)
\r
212 StringBuffer result = new StringBuffer(name);
\r
215 result.append("/" + start + "-" + end);
\r
218 return result.toString();
\r
224 * @param name DOCUMENT ME!
\r
226 public void setName(String name)
\r
235 * @return DOCUMENT ME!
\r
237 public String getName()
\r
245 * @param start DOCUMENT ME!
\r
247 public void setStart(int start)
\r
249 this.start = start;
\r
255 * @return DOCUMENT ME!
\r
257 public int getStart()
\r
265 * @param end DOCUMENT ME!
\r
267 public void setEnd(int end)
\r
275 * @return DOCUMENT ME!
\r
277 public int getEnd()
\r
285 * @return DOCUMENT ME!
\r
287 public int getLength()
\r
289 return this.sequence.length();
\r
295 * @param seq DOCUMENT ME!
\r
297 public void setSequence(String seq)
\r
299 this.sequence = seq;
\r
306 * @return DOCUMENT ME!
\r
308 public String getSequence()
\r
310 return this.sequence;
\r
316 * @param start DOCUMENT ME!
\r
317 * @param end DOCUMENT ME!
\r
319 * @return DOCUMENT ME!
\r
321 public String getSequence(int start, int end)
\r
323 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
324 if (start >= sequence.length())
\r
329 if (end >= sequence.length())
\r
331 end = sequence.length();
\r
334 return this.sequence.substring(start, end);
\r
340 * @param i DOCUMENT ME!
\r
342 * @return DOCUMENT ME!
\r
344 public char getCharAt(int i)
\r
346 if (i < sequence.length())
\r
348 return sequence.charAt(i);
\r
359 * @param desc DOCUMENT ME!
\r
361 public void setDescription(String desc)
\r
363 this.description = desc;
\r
369 * @return DOCUMENT ME!
\r
371 public String getDescription()
\r
373 return this.description;
\r
379 * @param pos DOCUMENT ME!
\r
381 * @return DOCUMENT ME!
\r
383 public int findIndex(int pos)
\r
385 // returns the alignment position for a residue
\r
389 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
391 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
399 if ((j == end) && (j < pos))
\r
412 * @param i DOCUMENT ME!
\r
414 * @return DOCUMENT ME!
\r
416 public int findPosition(int i)
\r
418 // Returns the sequence position for an alignment position
\r
422 while ((j < i) && (j < sequence.length()))
\r
424 if (!jalview.util.Comparison.isGap((sequence.charAt(j))))
\r
438 * @return DOCUMENT ME!
\r
440 public int[] gapMap()
\r
442 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
443 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
444 int[] map = new int[seq.length()];
\r
448 while (j < sequence.length())
\r
450 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
464 * @param i DOCUMENT ME!
\r
466 public void deleteCharAt(int i)
\r
468 if (i >= sequence.length())
\r
473 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
479 * @param i DOCUMENT ME!
\r
480 * @param j DOCUMENT ME!
\r
482 public void deleteChars(int i, int j)
\r
484 if (i >= sequence.length())
\r
489 if (j >= sequence.length())
\r
491 sequence = sequence.substring(0, i);
\r
495 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
502 * @param i DOCUMENT ME!
\r
503 * @param c DOCUMENT ME!
\r
505 public void insertCharAt(int i, char c)
\r
507 insertCharAt(i, c, true);
\r
513 * @param i DOCUMENT ME!
\r
514 * @param c DOCUMENT ME!
\r
515 * @param chop DOCUMENT ME!
\r
517 public void insertCharAt(int i, char c, boolean chop)
\r
519 String tmp = new String(sequence);
\r
521 if (i < sequence.length())
\r
523 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
528 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
529 char[] ch = new char[(1 + i) - sequence.length()];
\r
531 for (int j = 0, k = ch.length; j < k; j++)
\r
534 sequence = tmp + String.valueOf(ch);
\r
541 * @param c DOCUMENT ME!
\r
543 public void setColor(Color c)
\r
551 * @return DOCUMENT ME!
\r
553 public Color getColor()
\r
558 public String getVamsasId()
\r
563 public void setVamsasId(String id)
\r
568 public void setDBRef(Vector dbref)
\r
572 public Vector getDBRef()
\r
577 public void addDBRef(DBRefEntry entry)
\r
580 dbrefs = new Vector();
\r
582 dbrefs.addElement(entry);
\r
585 public void setDatasetSequence(SequenceI seq)
\r
587 datasetSequence = seq;
\r
590 public SequenceI getDatasetSequence()
\r
592 return datasetSequence;
\r
595 public AlignmentAnnotation [] getAnnotation()
\r
597 if(annotation==null)
\r
600 AlignmentAnnotation [] ret = new AlignmentAnnotation[annotation.size()];
\r
601 for(int r = 0; r<ret.length; r++)
\r
602 ret[r] = (AlignmentAnnotation)annotation.elementAt(r);
\r
607 public void addAlignmentAnnotation(AlignmentAnnotation annotation)
\r
609 if(this.annotation==null)
\r
610 this.annotation = new Vector();
\r
612 this.annotation.addElement( annotation );
\r