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
52 /** This array holds hidden sequences
\r
53 * of which this sequence is the representitive member of a group
\r
55 SequenceGroup hiddenSequences;
\r
58 * Creates a new Sequence object.
\r
60 * @param name DOCUMENT ME!
\r
61 * @param sequence DOCUMENT ME!
\r
62 * @param start DOCUMENT ME!
\r
63 * @param end DOCUMENT ME!
\r
65 public Sequence(String name, String sequence, int start, int end)
\r
68 this.sequence = sequence;
\r
77 com.stevesoft.pat.Regex limitrx = new com.stevesoft.pat.Regex(
\r
78 "[/][0-9]{1,}[-][0-9]{1,}$");
\r
79 com.stevesoft.pat.Regex endrx = new com.stevesoft.pat.Regex(
\r
84 // Does sequence have the /start-end signiature?
\r
85 if(limitrx.search(name))
\r
87 name = limitrx.left();
\r
88 endrx.search(limitrx.stringMatched());
\r
89 setStart( Integer.parseInt( limitrx.stringMatched().substring(1,endrx.matchedFrom()-1 )));
\r
90 setEnd( Integer.parseInt( endrx.stringMatched() ));
\r
94 void checkValidRange()
\r
100 for (int j = 0; j < sequence.length(); j++)
\r
102 ch = sequence.charAt(j);
\r
103 if (!jalview.util.Comparison.isGap( (ch)))
\r
110 endRes += start - 1;
\r
119 * Creates a new Sequence object.
\r
121 * @param name DOCUMENT ME!
\r
122 * @param sequence DOCUMENT ME!
\r
124 public Sequence(String name, String sequence)
\r
126 this(name, sequence, 1, -1);
\r
130 * Creates a new Sequence object.
\r
132 * @param seq DOCUMENT ME!
\r
134 public Sequence(SequenceI seq)
\r
136 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
142 * @param v DOCUMENT ME!
\r
144 public void setSequenceFeatures(SequenceFeature [] features)
\r
146 sequenceFeatures = features;
\r
149 public void addSequenceFeature(SequenceFeature sf)
\r
151 if(sequenceFeatures==null)
\r
153 sequenceFeatures = new SequenceFeature[0];
\r
156 for(int i=0; i<sequenceFeatures.length; i++)
\r
158 if(sequenceFeatures[i].equals(sf))
\r
164 SequenceFeature [] temp = new SequenceFeature[sequenceFeatures.length+1];
\r
165 System.arraycopy(sequenceFeatures, 0, temp, 0, sequenceFeatures.length);
\r
166 temp[sequenceFeatures.length] = sf;
\r
169 sequenceFeatures = temp;
\r
172 SequenceFeature [] sfarray;
\r
174 public SequenceFeature[] getsfarray()
\r
183 * @return DOCUMENT ME!
\r
185 public SequenceFeature [] getSequenceFeatures()
\r
187 return sequenceFeatures;
\r
190 public void addPDBId(PDBEntry entry)
\r
193 pdbIds = new Vector();
\r
195 pdbIds.addElement(entry);
\r
201 * @param id DOCUMENT ME!
\r
203 public void setPDBId(Vector id)
\r
211 * @return DOCUMENT ME!
\r
213 public Vector getPDBId()
\r
221 * @return DOCUMENT ME!
\r
223 public String getDisplayId(boolean jvsuffix)
\r
225 StringBuffer result = new StringBuffer(name);
\r
228 result.append("/" + start + "-" + end);
\r
231 return result.toString();
\r
237 * @param name DOCUMENT ME!
\r
239 public void setName(String name)
\r
248 * @return DOCUMENT ME!
\r
250 public String getName()
\r
258 * @param start DOCUMENT ME!
\r
260 public void setStart(int start)
\r
262 this.start = start;
\r
268 * @return DOCUMENT ME!
\r
270 public int getStart()
\r
278 * @param end DOCUMENT ME!
\r
280 public void setEnd(int end)
\r
288 * @return DOCUMENT ME!
\r
290 public int getEnd()
\r
298 * @return DOCUMENT ME!
\r
300 public int getLength()
\r
302 return this.sequence.length();
\r
308 * @param seq DOCUMENT ME!
\r
310 public void setSequence(String seq)
\r
312 this.sequence = seq;
\r
319 * @return DOCUMENT ME!
\r
321 public String getSequence()
\r
323 return this.sequence;
\r
329 * @param start DOCUMENT ME!
\r
330 * @param end DOCUMENT ME!
\r
332 * @return DOCUMENT ME!
\r
334 public String getSequence(int start, int end)
\r
336 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
337 if (start >= sequence.length())
\r
342 if (end >= sequence.length())
\r
344 end = sequence.length();
\r
347 return this.sequence.substring(start, end);
\r
353 * @param i DOCUMENT ME!
\r
355 * @return DOCUMENT ME!
\r
357 public char getCharAt(int i)
\r
359 if (i < sequence.length())
\r
361 return sequence.charAt(i);
\r
372 * @param desc DOCUMENT ME!
\r
374 public void setDescription(String desc)
\r
376 this.description = desc;
\r
382 * @return DOCUMENT ME!
\r
384 public String getDescription()
\r
386 return this.description;
\r
392 * @param pos DOCUMENT ME!
\r
394 * @return DOCUMENT ME!
\r
396 public int findIndex(int pos)
\r
398 // returns the alignment position for a residue
\r
402 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
404 if (!jalview.util.Comparison.isGap(sequence.charAt(i)))
\r
412 if ((j == end) && (j < pos))
\r
425 * @param i DOCUMENT ME!
\r
427 * @return DOCUMENT ME!
\r
429 public int findPosition(int i)
\r
431 // Returns the sequence position for an alignment position
\r
435 while ((j < i) && (j < sequence.length()))
\r
437 if (!jalview.util.Comparison.isGap((sequence.charAt(j))))
\r
451 * @return DOCUMENT ME!
\r
453 public int[] gapMap()
\r
455 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
456 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
457 int[] map = new int[seq.length()];
\r
461 while (j < sequence.length())
\r
463 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
477 * @param i DOCUMENT ME!
\r
479 public void deleteCharAt(int i)
\r
481 if (i >= sequence.length())
\r
486 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
492 * @param i DOCUMENT ME!
\r
493 * @param j DOCUMENT ME!
\r
495 public void deleteChars(int i, int j)
\r
497 if (i >= sequence.length())
\r
502 if (j >= sequence.length())
\r
504 sequence = sequence.substring(0, i);
\r
508 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
516 * @param i DOCUMENT ME!
\r
517 * @param c DOCUMENT ME!
\r
518 * @param chop DOCUMENT ME!
\r
520 public void insertCharAt(int i, char c)
\r
522 String tmp = new String(sequence);
\r
524 if (i < sequence.length())
\r
526 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
531 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
532 char[] ch = new char[(1 + i) - sequence.length()];
\r
534 for (int j = 0, k = ch.length; j < k; j++)
\r
537 sequence = tmp + String.valueOf(ch);
\r
544 * @param c DOCUMENT ME!
\r
546 public void setColor(Color c)
\r
554 * @return DOCUMENT ME!
\r
556 public Color getColor()
\r
561 public String getVamsasId()
\r
566 public void setVamsasId(String id)
\r
571 public void setDBRef(Vector dbref)
\r
575 public Vector getDBRef()
\r
580 public void addDBRef(DBRefEntry entry)
\r
583 dbrefs = new Vector();
\r
585 dbrefs.addElement(entry);
\r
588 public void setDatasetSequence(SequenceI seq)
\r
590 datasetSequence = seq;
\r
593 public SequenceI getDatasetSequence()
\r
595 return datasetSequence;
\r
598 public AlignmentAnnotation [] getAnnotation()
\r
600 if(annotation==null)
\r
603 AlignmentAnnotation [] ret = new AlignmentAnnotation[annotation.size()];
\r
604 for(int r = 0; r<ret.length; r++)
\r
605 ret[r] = (AlignmentAnnotation)annotation.elementAt(r);
\r
610 public void addAlignmentAnnotation(AlignmentAnnotation annotation)
\r
612 if(this.annotation==null)
\r
613 this.annotation = new Vector();
\r
615 this.annotation.addElement( annotation );
\r
618 public SequenceGroup getHiddenSequences()
\r
620 return hiddenSequences;
\r
623 public void addHiddenSequence(SequenceI seq)
\r
625 if(hiddenSequences==null)
\r
627 hiddenSequences = new SequenceGroup();
\r
629 hiddenSequences.addSequence(seq, false);
\r
632 public void showHiddenSequence(SequenceI seq)
\r
634 hiddenSequences.deleteSequence(seq, false);
\r
635 if (hiddenSequences.getSize() < 1)
\r
637 hiddenSequences = null;
\r