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
68 void checkValidRange()
\r
74 for (int j = 0; j < sequence.length(); j++)
\r
76 ch = sequence.charAt(j);
\r
77 if (!jalview.util.Comparison.isGap( (ch)))
\r
84 endRes += start - 1;
\r
93 * Creates a new Sequence object.
\r
95 * @param name DOCUMENT ME!
\r
96 * @param sequence DOCUMENT ME!
\r
98 public Sequence(String name, String sequence)
\r
100 this(name, sequence, 1, sequence.length());
\r
104 * Creates a new Sequence object.
\r
106 * @param seq DOCUMENT ME!
\r
108 public Sequence(SequenceI seq)
\r
110 this(seq.getName(), seq.getSequence(), seq.getStart(), seq.getEnd());
\r
116 * @param v DOCUMENT ME!
\r
118 public void setSequenceFeatures(Vector v)
\r
120 sequenceFeatures = v;
\r
123 public void addSequenceFeature(SequenceFeature sf)
\r
125 if(sequenceFeatures==null)
\r
126 sequenceFeatures = new Vector();
\r
128 sequenceFeatures.addElement(sf);
\r
134 * @return DOCUMENT ME!
\r
136 public Vector getSequenceFeatures()
\r
138 return sequenceFeatures;
\r
144 * @param id DOCUMENT ME!
\r
146 public void setPDBId(String id)
\r
154 * @return DOCUMENT ME!
\r
156 public String getPDBId()
\r
164 * @return DOCUMENT ME!
\r
166 public String getDisplayId(boolean dbref, boolean jvsuffix)
\r
168 StringBuffer result = new StringBuffer();
\r
169 if (dbref && dbrefs != null)
\r
171 for (int i = 0; i < dbrefs.size(); i++)
\r
173 DBRefEntry entry = (DBRefEntry) dbrefs.elementAt(i);
\r
174 result.append(entry.getSource() + "|" + entry.getAccessionId() + "|");
\r
178 result.append(name);
\r
182 result.append("/" + start + "-" + end);
\r
185 return result.toString();
\r
191 * @param name DOCUMENT ME!
\r
193 public void setName(String name)
\r
201 * @return DOCUMENT ME!
\r
203 public String getName()
\r
211 * @param start DOCUMENT ME!
\r
213 public void setStart(int start)
\r
215 this.start = start;
\r
221 * @return DOCUMENT ME!
\r
223 public int getStart()
\r
231 * @param end DOCUMENT ME!
\r
233 public void setEnd(int end)
\r
241 * @return DOCUMENT ME!
\r
243 public int getEnd()
\r
251 * @return DOCUMENT ME!
\r
253 public int getLength()
\r
255 return this.sequence.length();
\r
261 * @param seq DOCUMENT ME!
\r
263 public void setSequence(String seq)
\r
265 this.sequence = seq;
\r
272 * @return DOCUMENT ME!
\r
274 public String getSequence()
\r
276 return this.sequence;
\r
282 * @param start DOCUMENT ME!
\r
283 * @param end DOCUMENT ME!
\r
285 * @return DOCUMENT ME!
\r
287 public String getSequence(int start, int end)
\r
289 // JBPNote - left to user to pad the result here (TODO:Decide on this policy)
\r
290 if (start >= sequence.length())
\r
295 if (end >= sequence.length())
\r
297 end = sequence.length();
\r
300 return this.sequence.substring(start, end);
\r
306 * @param i DOCUMENT ME!
\r
308 * @return DOCUMENT ME!
\r
310 public char getCharAt(int i)
\r
312 if (i < sequence.length())
\r
314 return sequence.charAt(i);
\r
325 * @param desc DOCUMENT ME!
\r
327 public void setDescription(String desc)
\r
329 this.description = desc;
\r
335 * @return DOCUMENT ME!
\r
337 public String getDescription()
\r
339 return this.description;
\r
345 * @param pos DOCUMENT ME!
\r
347 * @return DOCUMENT ME!
\r
349 public int findIndex(int pos)
\r
351 // returns the alignment position for a residue
\r
355 while ((i < sequence.length()) && (j <= end) && (j <= pos))
\r
357 char c = sequence.charAt(i);
\r
359 if (!jalview.util.Comparison.isGap((c)))
\r
367 if ((j == end) && (j < pos))
\r
380 * @param i DOCUMENT ME!
\r
382 * @return DOCUMENT ME!
\r
384 public int findPosition(int i)
\r
386 // Returns the sequence position for an alignment position
\r
390 while ((j < i) && (j < sequence.length()))
\r
392 char c = sequence.charAt(j);
\r
394 if (!jalview.util.Comparison.isGap((c)))
\r
408 * @return DOCUMENT ME!
\r
410 public int[] gapMap()
\r
412 // Returns an int array giving the position of each residue in the sequence in the alignment
\r
413 String seq = jalview.analysis.AlignSeq.extractGaps("-. ", sequence);
\r
414 int[] map = new int[seq.length()];
\r
418 while (j < sequence.length())
\r
420 if (!jalview.util.Comparison.isGap(sequence.charAt(j)))
\r
434 * @param i DOCUMENT ME!
\r
436 public void deleteCharAt(int i)
\r
438 if (i >= sequence.length())
\r
443 sequence = sequence.substring(0, i) + sequence.substring(i + 1);
\r
449 * @param i DOCUMENT ME!
\r
450 * @param j DOCUMENT ME!
\r
452 public void deleteChars(int i, int j)
\r
454 if (i >= sequence.length())
\r
459 if (j >= sequence.length())
\r
461 sequence = sequence.substring(0, i);
\r
465 sequence = sequence.substring(0, i) + sequence.substring(j);
\r
472 * @param i DOCUMENT ME!
\r
473 * @param c DOCUMENT ME!
\r
475 public void insertCharAt(int i, char c)
\r
477 insertCharAt(i, c, true);
\r
483 * @param i DOCUMENT ME!
\r
484 * @param c DOCUMENT ME!
\r
485 * @param chop DOCUMENT ME!
\r
487 public void insertCharAt(int i, char c, boolean chop)
\r
489 String tmp = new String(sequence);
\r
491 if (i < sequence.length())
\r
493 sequence = tmp.substring(0, i) + String.valueOf(c) +
\r
498 // JBPNote : padding char at end of sequence. We'll not get away with this when we insert residues, I bet!
\r
499 char[] ch = new char[(1 + i) - sequence.length()];
\r
501 for (int j = 0, k = ch.length; j < k; j++)
\r
504 sequence = tmp + String.valueOf(ch);
\r
511 * @param c DOCUMENT ME!
\r
513 public void setColor(Color c)
\r
521 * @return DOCUMENT ME!
\r
523 public Color getColor()
\r
528 public String getVamsasId()
\r
533 public void setVamsasId(String id)
\r
538 public void setDBRef(Vector dbref)
\r
542 public Vector getDBRef()
\r
547 public void addDBRef(DBRefEntry entry)
\r
550 dbrefs = new Vector();
\r
552 dbrefs.addElement(entry);
\r
555 public void setDatasetSequence(SequenceI seq)
\r
557 datasetSequence = seq;
\r
560 public SequenceI getDatasetSequence()
\r
562 return datasetSequence;
\r