X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSequence.java;h=24c409aa5e861f4ff28abb0eb727c8999e5dfeec;hb=a8f483d04205bb8273ee311c12968b7e86d205fa;hp=13f928c977b7f1ef50232630a6c90ae5b4dca744;hpb=153dd62dc91da13ae732600e6ea55ddbe15eab39;p=jalview.git
diff --git a/src/jalview/datamodel/Sequence.java b/src/jalview/datamodel/Sequence.java
index 13f928c..24c409a 100755
--- a/src/jalview/datamodel/Sequence.java
+++ b/src/jalview/datamodel/Sequence.java
@@ -1,25 +1,29 @@
/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- *
+ *
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.datamodel;
-import java.util.*;
+import jalview.analysis.AlignSeq;
+
+import java.util.Enumeration;
+import java.util.Vector;
-import jalview.analysis.*;
+import fr.orsay.lri.varna.models.rna.RNA;
/**
*
@@ -47,6 +51,8 @@ public class Sequence implements SequenceI
String vamsasId;
DBRefEntry[] dbrefs;
+
+ RNA rna;
/**
* This annotation is displayed below the alignment but the positions are tied
@@ -54,7 +60,12 @@ public class Sequence implements SequenceI
*/
Vector annotation;
- /** array of seuqence features - may not be null for a valid sequence object */
+ /**
+ * 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;
/**
@@ -116,7 +127,8 @@ public class Sequence implements SequenceI
void checkValidRange()
{
- if (end < 1)
+ // 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++)
@@ -131,7 +143,10 @@ public class Sequence implements SequenceI
endRes += start - 1;
}
- this.end = endRes;
+ if (end < endRes)
+ {
+ end = endRes;
+ }
}
}
@@ -569,20 +584,17 @@ public class Sequence implements SequenceI
return this.description;
}
- /**
- * Return the alignment position for a sequence position
- *
- * @param pos
- * lying from start to end
+ /*
+ * (non-Javadoc)
*
- * @return aligned position of residue pos
+ * @see jalview.datamodel.SequenceI#findIndex(int)
*/
public int findIndex(int pos)
{
// returns the alignment position for a residue
int j = start;
int i = 0;
-
+ // Rely on end being at least as long as the length of the sequence.
while ((i < sequence.length) && (j <= end) && (j <= pos))
{
if (!jalview.util.Comparison.isGap(sequence[i]))
@@ -700,6 +712,7 @@ public class Sequence implements SequenceI
{
tmp = new char[i];
System.arraycopy(sequence, 0, tmp, 0, i);
+ j=sequence.length;
}
else
{
@@ -708,6 +721,9 @@ public class Sequence implements SequenceI
System.arraycopy(sequence, j, tmp, i, sequence.length - j);
}
boolean createNewDs = false;
+ // TODO: take a look at the new dataset creation validation method below -
+ // this could become time comsuming for large sequences - consider making it
+ // more efficient
for (int s = i; s < j; s++)
{
if (jalview.schemes.ResidueProperties.aaIndex[sequence[s]] != 23)
@@ -893,8 +909,10 @@ public class Sequence implements SequenceI
{
this.annotation = new Vector();
}
-
- this.annotation.addElement(annotation);
+ if (!this.annotation.contains(annotation))
+ {
+ this.annotation.addElement(annotation);
+ }
annotation.setSequenceRef(this);
}
@@ -983,6 +1001,18 @@ public class Sequence implements SequenceI
datasetSequence.setPDBId(getPDBId());
setPDBId(null);
datasetSequence.updatePDBIds();
+ if (annotation != null)
+ {
+ Vector _annot = annotation;
+ annotation = null;
+ for (AlignmentAnnotation aa : _annot)
+ {
+ aa.sequenceRef = datasetSequence;
+ aa.adjustForAlignment(); // uses annotation's own record of
+ // sequence-column mapping
+ datasetSequence.addAlignmentAnnotation(aa);
+ }
+ }
}
return datasetSequence;
}
@@ -1170,4 +1200,30 @@ public class Sequence implements SequenceI
}
}
+ /**
+ * @return The index (zero-based) on this sequence in the MSA. It returns
+ * {@code -1} if this information is not available.
+ */
+ public int getIndex()
+ {
+ return index;
+ }
+
+ /**
+ * Defines the position of this sequence in the MSA. Use the value {@code -1}
+ * if this information is undefined.
+ *
+ * @param The
+ * position for this sequence. This value is zero-based (zero for
+ * this first sequence)
+ */
+ public void setIndex(int value)
+ {
+ index = value;
+ }
+
+ public void setRNA(RNA r){rna=r;}
+
+ public RNA getRNA() { return rna; }
+
}