X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignmentAnnotation.java;h=fdb62a144e32dc3f4118b47c0bb91d37db894b4e;hb=72e63582d51fbaa0cc5a3963abc96814f984039b;hp=f3cdae63cb5465743b18cbf6d63acaa76fc3b4ef;hpb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;p=jalview.git diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index f3cdae6..fdb62a1 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -20,12 +20,6 @@ */ package jalview.datamodel; -import java.util.Locale; - -import jalview.analysis.Rna; -import jalview.analysis.SecStrConsensus.SimpleBP; -import jalview.analysis.WUSSParseException; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -33,9 +27,14 @@ import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; +import jalview.analysis.Rna; +import jalview.analysis.SecStrConsensus.SimpleBP; +import jalview.analysis.WUSSParseException; + /** * DOCUMENT ME! * @@ -96,6 +95,10 @@ public class AlignmentAnnotation */ private long invalidrnastruc = -2; + private double bitScore; + + private double eValue; + /** * Updates the _rnasecstr field Determines the positions that base pair and * the positions of helices based on secondary structure from a Stockholm file @@ -382,21 +385,24 @@ public class AlignmentAnnotation // annotations[i].secondaryStructure + "'"); // TODO: 2.8.2 should this ss symbol validation check be a function in // RNA/ResidueProperties ? + // allow for DSSP extended code: + // https://www.wikidoc.org/index.php/Secondary_structure#The_DSSP_code + // GHITEBS as well as C and X (for missing?) if (annotations[i].secondaryStructure == '(' || annotations[i].secondaryStructure == '[' || annotations[i].secondaryStructure == '<' || annotations[i].secondaryStructure == '{' || annotations[i].secondaryStructure == 'A' - || annotations[i].secondaryStructure == 'B' - || annotations[i].secondaryStructure == 'C' + // || annotations[i].secondaryStructure == 'B' + // || annotations[i].secondaryStructure == 'C' || annotations[i].secondaryStructure == 'D' // || annotations[i].secondaryStructure == 'E' // ambiguous on // its own -- already checked above || annotations[i].secondaryStructure == 'F' - || annotations[i].secondaryStructure == 'G' + // || annotations[i].secondaryStructure == 'G' // || annotations[i].secondaryStructure == 'H' // ambiguous on // its own -- already checked above - || annotations[i].secondaryStructure == 'I' + // || annotations[i].secondaryStructure == 'I' || annotations[i].secondaryStructure == 'J' || annotations[i].secondaryStructure == 'K' || annotations[i].secondaryStructure == 'L' @@ -406,12 +412,12 @@ public class AlignmentAnnotation || annotations[i].secondaryStructure == 'P' || annotations[i].secondaryStructure == 'Q' || annotations[i].secondaryStructure == 'R' - || annotations[i].secondaryStructure == 'S' - || annotations[i].secondaryStructure == 'T' + // || annotations[i].secondaryStructure == 'S' + // || annotations[i].secondaryStructure == 'T' || annotations[i].secondaryStructure == 'U' || annotations[i].secondaryStructure == 'V' || annotations[i].secondaryStructure == 'W' - || annotations[i].secondaryStructure == 'X' + // || annotations[i].secondaryStructure == 'X' || annotations[i].secondaryStructure == 'Y' || annotations[i].secondaryStructure == 'Z') { @@ -547,12 +553,12 @@ public class AlignmentAnnotation : annotations[index + offset].displayCharacter == null || annotations[index + offset].displayCharacter - .length() == 0 - ? annotations[index - + offset].secondaryStructure - : annotations[index - + offset].displayCharacter - .charAt(0)); + .length() == 0 + ? annotations[index + + offset].secondaryStructure + : annotations[index + + offset].displayCharacter + .charAt(0)); } @Override @@ -594,7 +600,7 @@ public class AlignmentAnnotation } return null; } - + /** * Creates a new AlignmentAnnotation object. * @@ -706,7 +712,7 @@ public class AlignmentAnnotation } } } - + /** * Copy constructor creates a new independent annotation row with the same * associated sequenceRef @@ -716,6 +722,17 @@ public class AlignmentAnnotation public AlignmentAnnotation(AlignmentAnnotation annotation) { setAnnotationId(); + updateAlignmentAnnotationFrom(annotation); + } + + /** + * copy attributes and annotation from an existing annotation (used by copy + * constructor). This method does not update the unique annotationId + * + * @param annotation + */ + public void updateAlignmentAnnotationFrom(AlignmentAnnotation annotation) + { this.label = new String(annotation.label); if (annotation.description != null) { @@ -739,6 +756,9 @@ public class AlignmentAnnotation this.scaleColLabel = annotation.scaleColLabel; this.showAllColLabels = annotation.showAllColLabels; this.calcId = annotation.calcId; + this.bitScore = annotation.bitScore; + this.eValue = annotation.eValue; + if (annotation.properties != null) { properties = new HashMap<>(); @@ -834,15 +854,15 @@ public class AlignmentAnnotation } if (startRes >= annotations.length) { - startRes = annotations.length - 1; + startRes = annotations.length; } - if (endRes >= annotations.length) + if (endRes < 0) { - endRes = annotations.length - 1; + endRes = -1; } - if (annotations == null) + if (endRes >= annotations.length) { - return; + endRes = annotations.length - 1; } Annotation[] temp = new Annotation[endRes - startRes + 1]; if (startRes < annotations.length) @@ -970,6 +990,7 @@ public class AlignmentAnnotation * @param seqRef * @param startRes * @param alreadyMapped + * - annotation are at aligned columns */ public void createSequenceMapping(SequenceI seqRef, int startRes, boolean alreadyMapped) @@ -1171,7 +1192,7 @@ public class AlignmentAnnotation { return hasScore || !Double.isNaN(score); } - + /** * Score only annotation * @@ -1202,6 +1223,7 @@ public class AlignmentAnnotation makeVisibleAnnotation(hidden); } + public void setPadGaps(boolean padgaps, char gapchar) { this.padGaps = padgaps; @@ -1559,7 +1581,7 @@ public class AlignmentAnnotation { if (annotations != null) { - makeVisibleAnnotation(0, annotations.length, hiddenColumns); + makeVisibleAnnotation(0, annotations.length - 1, hiddenColumns); } } @@ -1603,6 +1625,8 @@ public class AlignmentAnnotation private void removeHiddenAnnotation(int start, int end, HiddenColumns hiddenColumns) { + start = Math.min(Math.max(0, start), annotations.length); + end = Math.min(Math.max(-1, end), annotations.length - 1); // mangle the alignmentAnnotation annotation array ArrayList annels = new ArrayList<>(); Annotation[] els = null; @@ -1661,7 +1685,6 @@ public class AlignmentAnnotation Iterable list, SequenceI seq, String calcId, String label) { - ArrayList aa = new ArrayList<>(); for (AlignmentAnnotation ann : list) { @@ -1706,7 +1729,6 @@ public class AlignmentAnnotation public static Iterable findAnnotation( List list, String calcId) { - List aa = new ArrayList<>(); if (calcId == null) { @@ -1724,4 +1746,42 @@ public class AlignmentAnnotation return aa; } + public double getBitScore() + { + return bitScore; + } + + public void setBitScore(double bitScore) + { + this.bitScore = bitScore; + } + + public double getEValue() + { + return eValue; + } + + public void setEValue(double eValue) + { + this.eValue = eValue; + } + + public static AlignmentAnnotation findFirstAnnotation( + Iterable alignmentAnnotation, String name, + String calcId, boolean autoCalc, SequenceI seqRef, + SequenceGroup groupRef) + { + + for (AlignmentAnnotation annot : alignmentAnnotation) + { + if (annot.autoCalculated == autoCalc && (name.equals(annot.label)) + && (calcId == null || annot.getCalcId().equals(calcId)) + && annot.sequenceRef == seqRef && annot.groupRef == groupRef) + { + return annot; + } + } + return null; + } + }