X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FAlignmentAnnotation.java;h=5a2c46e0b3e2be52032af8a67f02cfbefdde6cfc;hb=521ce3c96d5977a9bd941894eda7a13dd09deea9;hp=35297b56bce55cbf0a93f2fbd00c22d17b95d05f;hpb=588042b69abf8e60bcc950b24c283933c7dd422f;p=jalview.git diff --git a/src/jalview/datamodel/AlignmentAnnotation.java b/src/jalview/datamodel/AlignmentAnnotation.java index 35297b5..5a2c46e 100755 --- a/src/jalview/datamodel/AlignmentAnnotation.java +++ b/src/jalview/datamodel/AlignmentAnnotation.java @@ -18,63 +18,151 @@ */ package jalview.datamodel; -public class AlignmentAnnotation { + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision$ + */ +public class AlignmentAnnotation +{ + public SequenceI sequenceRef; + + /** DOCUMENT ME!! */ public String label; + + /** DOCUMENT ME!! */ public String description; + + /** DOCUMENT ME!! */ public Annotation[] annotations; - public boolean isGraph = false; + + public java.util.Hashtable sequenceMapping; + + /** DOCUMENT ME!! */ public float graphMin; + + /** DOCUMENT ME!! */ public float graphMax; - public int windowLength; + + public GraphLine threshold; // Graphical hints and tips + + /** DOCUMENT ME!! */ public boolean editable = false; + + /** DOCUMENT ME!! */ public boolean hasIcons; // + + /** DOCUMENT ME!! */ public boolean hasText; + + /** DOCUMENT ME!! */ public boolean visible = true; + + public int graphGroup = -1; + + /** DOCUMENT ME!! */ public int height = 0; + public int graph = 0; + + public int graphHeight = 40; + + public static final int NO_GRAPH = 0; + + public static final int BAR_GRAPH = 1; + + public static final int LINE_GRAPH = 2; + + public static int getGraphValueFromString(String string) + { + if(string.equalsIgnoreCase("BAR_GRAPH")) + return BAR_GRAPH; + else if(string.equalsIgnoreCase("LINE_GRAPH")) + return LINE_GRAPH; + else + return NO_GRAPH; + } + + /** + * Creates a new AlignmentAnnotation object. + * + * @param label DOCUMENT ME! + * @param description DOCUMENT ME! + * @param annotations DOCUMENT ME! + */ public AlignmentAnnotation(String label, String description, - Annotation[] annotations) { + Annotation[] annotations) + { // always editable? editable = true; this.label = label; this.description = description; this.annotations = annotations; - for (int i = 0; i < annotations.length; i++) { + for (int i = 0; i < annotations.length; i++) + { if ((annotations[i] != null) && ((annotations[i].secondaryStructure == 'H') || - (annotations[i].secondaryStructure == 'E'))) { + (annotations[i].secondaryStructure == 'E'))) + { hasIcons = true; } if ((annotations[i] != null) && - (annotations[i].displayCharacter.length() > 0)) { + (annotations[i].displayCharacter.length() > 0)) + { hasText = true; } } } + /** + * Creates a new AlignmentAnnotation object. + * + * @param label DOCUMENT ME! + * @param description DOCUMENT ME! + * @param annotations DOCUMENT ME! + * @param min DOCUMENT ME! + * @param max DOCUMENT ME! + * @param winLength DOCUMENT ME! + */ public AlignmentAnnotation(String label, String description, - Annotation[] annotations, float min, float max, int winLength) { + Annotation[] annotations, float min, float max, int graphType) + { // graphs are not editable this.label = label; this.description = description; this.annotations = annotations; - isGraph = true; + graph = graphType; - if (min == max) { - for (int i = 0; i < annotations.length; i++) { - if (annotations[i] == null) { + boolean drawValues = true; + + if (min == max) + { + min = 999999999; + for (int i = 0; i < annotations.length; i++) + { + if (annotations[i] == null) + { continue; } - if (annotations[i].value > max) { + if(drawValues && annotations[i].displayCharacter.length() > 1 ) + { + drawValues = false; + } + + if (annotations[i].value > max) + { max = annotations[i].value; } - if (annotations[i].value < min) { + if (annotations[i].value < min) + { min = annotations[i].value; } } @@ -82,32 +170,58 @@ public class AlignmentAnnotation { graphMin = min; graphMax = max; - windowLength = winLength; - for (int i = 0; i < annotations.length; i++) { - if ((annotations[i] != null) && - ((annotations[i].secondaryStructure == 'H') || - (annotations[i].secondaryStructure == 'E'))) { + for (int i = 0; i < annotations.length; i++) + { + if (!hasIcons + && annotations[i] != null + && ((annotations[i].secondaryStructure == 'H') || + (annotations[i].secondaryStructure == 'E'))) + { hasIcons = true; } - if ((annotations[i] != null) && - (annotations[i].displayCharacter.length() > 0)) { + if (!hasText + && annotations[i]!=null + && annotations[i].displayCharacter.length() > 0) + { hasText = true; } } + + if(!drawValues && graphType!=NO_GRAPH) + { + for (int i = 0; i < annotations.length; i++) + { + if (annotations[i] != null) + annotations[i].displayCharacter = ""; + } + } } - public String toString() { + /** + * DOCUMENT ME! + * + * @return DOCUMENT ME! + */ + public String toString() + { StringBuffer buffer = new StringBuffer(); - for (int i = 0; i < annotations.length; i++) { - if (annotations[i] != null) { - if (isGraph) { + for (int i = 0; i < annotations.length; i++) + { + if (annotations[i] != null) + { + if (graph!=0) + { buffer.append(annotations[i].value); - } else if (hasIcons) { + } + else if (hasIcons) + { buffer.append(annotations[i].secondaryStructure); - } else { + } + else + { buffer.append(annotations[i].displayCharacter); } } @@ -115,11 +229,14 @@ public class AlignmentAnnotation { buffer.append(", "); } - if (label.equals("Consensus")) { + if (label.equals("Consensus")) + { buffer.append("\n"); - for (int i = 0; i < annotations.length; i++) { - if (annotations[i] != null) { + for (int i = 0; i < annotations.length; i++) + { + if (annotations[i] != null) + { buffer.append(annotations[i].description); } @@ -128,5 +245,85 @@ public class AlignmentAnnotation { } return buffer.toString(); - } + } + + public void setThreshold(GraphLine line) + { + threshold = line; + } + + public GraphLine getThreshold() + { + return threshold; + } + + /** + * This + */ + public void createSequenceMapping(SequenceI seqRef, int startRes) + { + if(seqRef == null) + return; + + sequenceMapping = new java.util.Hashtable(); + + sequenceRef = seqRef; + + if(startRes < sequenceRef.getStart()) + startRes = sequenceRef.getStart(); + + int seqPos; + + int fileOffset = 0; + if(startRes > sequenceRef.getStart()) + { + fileOffset = startRes - sequenceRef.getStart(); + } + + for(int i = 0; i < annotations.length; i++) + { + seqPos = sequenceRef.findPosition(i + fileOffset); + if(seqPos