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
46 /** DOCUMENT ME!! */
\r
47 public Vector sequenceFeatures;
\r
50 * Creates a new Sequence object.
\r
52 * @param name DOCUMENT ME!
\r
53 * @param sequence DOCUMENT ME!
\r
54 * @param start DOCUMENT ME!
\r
55 * @param end DOCUMENT ME!
\r
57 public Sequence(String name, String sequence, int start, int end)
\r
60 this.sequence = sequence;
\r
69 static com.stevesoft.pat.Regex limitrx = new com.stevesoft.pat.Regex(
\r
70 "[/][0-9]{1,}[-][0-9]{1,}$");
\r
71 static com.stevesoft.pat.Regex endrx = new com.stevesoft.pat.Regex(
\r
76 // Does sequence have the /start-end signiature?
\r
77 if(limitrx.search(name))
\r
79 name = limitrx.left();
\r
80 endrx.search(limitrx.stringMatched());
\r
81 setStart( Integer.parseInt( limitrx.stringMatched().substring(1,endrx.matchedFrom()-1 )));
\r
82 setEnd( Integer.parseInt( endrx.stringMatched() ));
\r
86 void checkValidRange()
\r
92 for (int j = 0; j < sequence.length(); j++)
\r
94 ch = sequence.charAt(j);
\r
95 if (!jalview.util.Comparison.isGap( (ch)))
\r
102 endRes += start - 1;
\r
111 * Creates a new Sequence object.
\r
113 * @param name DOCUMENT ME!
\r
114 * @param sequence DOCUMENT ME!
\r
116 public Sequence(String name, String sequence)
\r
118 this(name, sequence, 1, -1);
\r
122 * Creates a new Sequence object.
\r
124 * @param seq DOCUMENT ME!
\r
126 public Sequence(SequenceI seq)
\r
128 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
134 * @param v DOCUMENT ME!
\r
136 public void setSequenceFeatures(Vector v)
\r
138 sequenceFeatures = v;
\r
141 public void addSequenceFeature(SequenceFeature sf)
\r
143 if(sequenceFeatures==null)
\r
144 sequenceFeatures = new Vector();
\r
146 sequenceFeatures.addElement(sf);
\r
152 * @return DOCUMENT ME!
\r
154 public Vector getSequenceFeatures()
\r
156 return sequenceFeatures;
\r
159 public void addPDBId(PDBEntry entry)
\r
162 pdbIds = new Vector();
\r
164 pdbIds.addElement(entry);
\r
170 * @param id DOCUMENT ME!
\r
172 public void setPDBId(Vector id)
\r
180 * @return DOCUMENT ME!
\r
182 public Vector getPDBId()
\r
190 * @return DOCUMENT ME!
\r
192 public String getDisplayId(boolean jvsuffix)
\r
194 StringBuffer result = new StringBuffer(name);
\r
197 result.append("/" + start + "-" + end);
\r
200 return result.toString();
\r
206 * @param name DOCUMENT ME!
\r
208 public void setName(String name)
\r
217 * @return DOCUMENT ME!
\r
219 public String getName()
\r
227 * @param start DOCUMENT ME!
\r
229 public void setStart(int start)
\r
231 this.start = start;
\r
237 * @return DOCUMENT ME!
\r
239 public int getStart()
\r
247 * @param end DOCUMENT ME!
\r
249 public void setEnd(int end)
\r
257 * @return DOCUMENT ME!
\r
259 public int getEnd()
\r
267 * @return DOCUMENT ME!
\r
269 public int getLength()
\r
271 return this.sequence.length();
\r
277 * @param seq DOCUMENT ME!
\r
279 public void setSequence(String seq)
\r
281 this.sequence = seq;
\r
288 * @return DOCUMENT ME!
\r
290 public String getSequence()
\r
292 return this.sequence;
\r
298 * @param start DOCUMENT ME!
\r
299 * @param end DOCUMENT ME!
\r
301 * @return DOCUMENT ME!
\r
303 public String getSequence(int start, int end)
\r
305 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
306 if (start >= sequence.length())
\r
311 if (end >= sequence.length())
\r
313 end = sequence.length();
\r
316 return this.sequence.substring(start, end);
\r
322 * @param i DOCUMENT ME!
\r
324 * @return DOCUMENT ME!
\r
326 public char getCharAt(int i)
\r
328 if (i < sequence.length())
\r
330 return sequence.charAt(i);
\r
341 * @param desc DOCUMENT ME!
\r
343 public void setDescription(String desc)
\r
345 this.description = desc;
\r
351 * @return DOCUMENT ME!
\r
353 public String getDescription()
\r
355 return this.description;
\r
361 * @param pos DOCUMENT ME!
\r
363 * @return DOCUMENT ME!
\r
365 public int findIndex(int pos)
\r
367 // returns the alignment position for a residue
\r
371 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
373 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
381 if ((j == end) && (j < pos))
\r
394 * @param i DOCUMENT ME!
\r
396 * @return DOCUMENT ME!
\r
398 public int findPosition(int i)
\r
400 // Returns the sequence position for an alignment position
\r
404 while ((j < i) && (j < sequence.length()))
\r
406 if (!jalview.util.Comparison.isGap((sequence.charAt(j))))
\r
420 * @return DOCUMENT ME!
\r
422 public int[] gapMap()
\r
424 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
425 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
426 int[] map = new int[seq.length()];
\r
430 while (j < sequence.length())
\r
432 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
446 * @param i DOCUMENT ME!
\r
448 public void deleteCharAt(int i)
\r
450 if (i >= sequence.length())
\r
455 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
461 * @param i DOCUMENT ME!
\r
462 * @param j DOCUMENT ME!
\r
464 public void deleteChars(int i, int j)
\r
466 if (i >= sequence.length())
\r
471 if (j >= sequence.length())
\r
473 sequence = sequence.substring(0, i);
\r
477 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
484 * @param i DOCUMENT ME!
\r
485 * @param c DOCUMENT ME!
\r
487 public void insertCharAt(int i, char c)
\r
489 insertCharAt(i, c, true);
\r
495 * @param i DOCUMENT ME!
\r
496 * @param c DOCUMENT ME!
\r
497 * @param chop DOCUMENT ME!
\r
499 public void insertCharAt(int i, char c, boolean chop)
\r
501 String tmp = new String(sequence);
\r
503 if (i < sequence.length())
\r
505 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
510 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
511 char[] ch = new char[(1 + i) - sequence.length()];
\r
513 for (int j = 0, k = ch.length; j < k; j++)
\r
516 sequence = tmp + String.valueOf(ch);
\r
523 * @param c DOCUMENT ME!
\r
525 public void setColor(Color c)
\r
533 * @return DOCUMENT ME!
\r
535 public Color getColor()
\r
540 public String getVamsasId()
\r
545 public void setVamsasId(String id)
\r
550 public void setDBRef(Vector dbref)
\r
554 public Vector getDBRef()
\r
559 public void addDBRef(DBRefEntry entry)
\r
562 dbrefs = new Vector();
\r
564 dbrefs.addElement(entry);
\r
567 public void setDatasetSequence(SequenceI seq)
\r
569 datasetSequence = seq;
\r
572 public SequenceI getDatasetSequence()
\r
574 return datasetSequence;
\r