- SequenceI datasetSequence;
- String name;
- private String sequence;
- String description;
- int start;
- int end;
- Color color = Color.white;
- Vector pdbIds;
- String vamsasId;
- DBRefEntry [] dbrefs;
-
- /** This annotation is displayed below the alignment but the
- * positions are tied to the residues of this sequence */
- Vector annotation;
-
- /** DOCUMENT ME!! */
- public SequenceFeature [] sequenceFeatures;
-
- /** This array holds hidden sequences
- * of which this sequence is the representitive member of a group
- */
- SequenceGroup hiddenSequences;
-
- /**
- * Creates a new Sequence object.
- *
- * @param name DOCUMENT ME!
- * @param sequence DOCUMENT ME!
- * @param start DOCUMENT ME!
- * @param end DOCUMENT ME!
- */
- public Sequence(String name, String sequence, int start, int end)
- {
- this.name = name;
- this.sequence = sequence;
- this.start = start;
- this.end = end;
-
- parseId();
-
- checkValidRange();
- }
-
- com.stevesoft.pat.Regex limitrx = new com.stevesoft.pat.Regex(
- "[/][0-9]{1,}[-][0-9]{1,}$");
- com.stevesoft.pat.Regex endrx = new com.stevesoft.pat.Regex(
- "[0-9]{1,}$");
-
- void parseId()
- {
- // Does sequence have the /start-end signiature?
- if(limitrx.search(name))
- {
- name = limitrx.left();
- endrx.search(limitrx.stringMatched());
- setStart( Integer.parseInt( limitrx.stringMatched().substring(1,endrx.matchedFrom()-1 )));
- setEnd( Integer.parseInt( endrx.stringMatched() ));
- }
- }
-
- void checkValidRange()
- {
- if (end < 1)
- {
- int endRes = 0;
- char ch;
- for (int j = 0; j < sequence.length(); j++)
- {
- ch = sequence.charAt(j);
- if (!jalview.util.Comparison.isGap( (ch)))
- {
- endRes++;
- }
- }
- if (endRes > 0)
+ SequenceI datasetSequence;
+
+ String name;
+
+ private char[] sequence;
+
+ String description;
+
+ int start;
+
+ int end;
+
+ Vector<PDBEntry> pdbIds;
+
+ String vamsasId;
+
+ DBRefEntry[] dbrefs;
+
+ RNA rna;
+
+ /**
+ * This annotation is displayed below the alignment but the positions are tied
+ * to the residues of this sequence
+ *
+ * TODO: change to List<>
+ */
+ Vector<AlignmentAnnotation> annotation;
+
+ /**
+ * The index of the sequence in a MSA
+ */
+ int index = -1;
+
+ /** array of sequence features - may not be null for a valid sequence object */
+ public SequenceFeature[] sequenceFeatures;
+
+ /**
+ * Creates a new Sequence object.
+ *
+ * @param name
+ * display name string
+ * @param sequence
+ * string to form a possibly gapped sequence out of
+ * @param start
+ * first position of non-gap residue in the sequence
+ * @param end
+ * last position of ungapped residues (nearly always only used for
+ * display purposes)
+ */
+ public Sequence(String name, String sequence, int start, int end)
+ {
+ initSeqAndName(name, sequence.toCharArray(), start, end);
+ }
+
+ public Sequence(String name, char[] sequence, int start, int end)
+ {
+ initSeqAndName(name, sequence, start, end);
+ }
+
+ /**
+ * Stage 1 constructor - assign name, sequence, and set start and end fields.
+ * start and end are updated values from name2 if it ends with /start-end
+ *
+ * @param name2
+ * @param sequence2
+ * @param start2
+ * @param end2
+ */
+ protected void initSeqAndName(String name2, char[] sequence2, int start2,
+ int end2)
+ {
+ this.name = name2;
+ this.sequence = sequence2;
+ this.start = start2;
+ this.end = end2;
+ parseId();
+ checkValidRange();
+ }
+
+ com.stevesoft.pat.Regex limitrx = new com.stevesoft.pat.Regex(
+ "[/][0-9]{1,}[-][0-9]{1,}$");
+
+ com.stevesoft.pat.Regex endrx = new com.stevesoft.pat.Regex("[0-9]{1,}$");
+
+ void parseId()
+ {
+ if (name == null)
+ {
+ System.err
+ .println("POSSIBLE IMPLEMENTATION ERROR: null sequence name passed to constructor.");
+ name = "";
+ }
+ // Does sequence have the /start-end signature?
+ if (limitrx.search(name))
+ {
+ name = limitrx.left();
+ endrx.search(limitrx.stringMatched());
+ setStart(Integer.parseInt(limitrx.stringMatched().substring(1,
+ endrx.matchedFrom() - 1)));
+ setEnd(Integer.parseInt(endrx.stringMatched()));
+ }
+ }
+
+ void checkValidRange()
+ {
+ // Note: JAL-774 :
+ // http://issues.jalview.org/browse/JAL-774?focusedCommentId=11239&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-11239
+ {
+ int endRes = 0;
+ for (int j = 0; j < sequence.length; j++)
+ {
+ if (!jalview.util.Comparison.isGap(sequence[j]))