X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2FAnnotationFile.java;h=49e99a105ae5703c6e8656c71b536e63e7546b35;hb=c51dbe7933683b64548f5353e67561d2b5e377f7;hp=571ed793bcee4927e1da25e68a99c8c40fe355c2;hpb=500bc57b2d6901ff09f6b1511289f85ba9dec823;p=jalview.git diff --git a/src/jalview/io/AnnotationFile.java b/src/jalview/io/AnnotationFile.java index 571ed79..49e99a1 100755 --- a/src/jalview/io/AnnotationFile.java +++ b/src/jalview/io/AnnotationFile.java @@ -26,18 +26,21 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; +import jalview.datamodel.DynamicData; +import jalview.datamodel.DynamicData.DataType; import jalview.datamodel.GraphLine; +import jalview.datamodel.HiddenColumns; import jalview.datamodel.HiddenSequences; import jalview.datamodel.PDBEntry; import jalview.datamodel.PDBEntry.Type; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; -import jalview.gui.Desktop; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; -import jalview.schemes.UserColourScheme; import jalview.structure.StructureSelectionManager; +import jalview.util.ColorUtils; +import java.awt.Color; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -55,6 +58,28 @@ import java.util.Vector; public class AnnotationFile { + StringBuffer text; + + SequenceI refSeq = null; + + String refSeqId = null; + + String[] StructModelHeader = null; + + long nlinesread = 0; + + String lastread = ""; + + /** + * used for resolving absolute references to resources relative to + * annotationFile location + */ + String baseUri = ""; + + private static String GRAPHLINE = "GRAPHLINE", COMBINE = "COMBINE", + STRUCTMODEL = "STRUCTMODEL", + HEADER_STRUCT_MODEL = "HEADER_STRUCT_MODEL"; + public AnnotationFile() { init(); @@ -81,7 +106,6 @@ public class AnnotationFile return newline; } - StringBuffer text; private void init() { @@ -113,23 +137,22 @@ public class AnnotationFile */ public class ViewDef { - public String viewname; + // TODO this class is not used - remove? + public final String viewname; - public HiddenSequences hidseqs; + public final HiddenSequences hidseqs; - public ColumnSelection hiddencols; + public final HiddenColumns hiddencols; - public Vector visibleGroups; + public final Hashtable hiddenRepSeqs; - public Hashtable hiddenRepSeqs; - - public ViewDef(String viewname, HiddenSequences hidseqs, - ColumnSelection hiddencols, Hashtable hiddenRepSeqs) + public ViewDef(String vname, HiddenSequences hseqs, + HiddenColumns hcols, Hashtable hRepSeqs) { - this.viewname = viewname; - this.hidseqs = hidseqs; - this.hiddencols = hiddencols; - this.hiddenRepSeqs = hiddenRepSeqs; + this.viewname = vname; + this.hidseqs = hseqs; + this.hiddencols = hcols; + this.hiddenRepSeqs = hRepSeqs; } } @@ -145,7 +168,8 @@ public class AnnotationFile */ public String printAnnotations(AlignmentAnnotation[] annotations, List list, Hashtable properties, - ColumnSelection cs, AlignmentI al, ViewDef view) + HiddenColumns cs, + AlignmentI al, ViewDef view) { if (view != null) { @@ -155,7 +179,7 @@ public class AnnotationFile } if (list == null) { - list = view.visibleGroups; + // list = view.visibleGroups; } if (cs == null) { @@ -174,7 +198,7 @@ public class AnnotationFile if (cs != null && cs.hasHiddenColumns()) { text.append("VIEW_HIDECOLS\t"); - List hc = cs.getHiddenColumns(); + List hc = cs.getHiddenRegions(); boolean comma = false; for (int[] r : hc) { @@ -540,7 +564,7 @@ public class AnnotationFile return false; } - public void printGroups(List list) + protected void printGroups(List list) { SequenceI seqrep = null; for (SequenceGroup sg : list) @@ -586,7 +610,8 @@ public class AnnotationFile if (sg.cs != null) { text.append("colour="); - text.append(ColourSchemeProperty.getColourName(sg.cs)); + text.append(ColourSchemeProperty.getColourName(sg.cs + .getColourScheme())); text.append("\t"); if (sg.cs.getThreshold() != 0) { @@ -660,23 +685,26 @@ public class AnnotationFile } } - SequenceI refSeq = null; - - String refSeqId = null; public boolean annotateAlignmentView(AlignViewportI viewport, String file, DataSourceType protocol) { ColumnSelection colSel = viewport.getColumnSelection(); + HiddenColumns hidden = viewport.getAlignment().getHiddenColumns(); if (colSel == null) { colSel = new ColumnSelection(); } - boolean rslt = readAnnotationFile(viewport.getAlignment(), colSel, + if (hidden == null) + { + hidden = new HiddenColumns(); + } + boolean rslt = readAnnotationFile(viewport.getAlignment(), hidden, file, protocol); - if (rslt && (colSel.hasSelectedColumns() || colSel.hasHiddenColumns())) + if (rslt && (colSel.hasSelectedColumns() || hidden.hasHiddenColumns())) { viewport.setColumnSelection(colSel); + viewport.getAlignment().setHiddenColumns(hidden); } return rslt; @@ -688,7 +716,7 @@ public class AnnotationFile return readAnnotationFile(al, null, file, sourceType); } - public boolean readAnnotationFile(AlignmentI al, ColumnSelection colSel, + public boolean readAnnotationFile(AlignmentI al, HiddenColumns hidden, String file, DataSourceType sourceType) { baseUri = ""; @@ -739,7 +767,7 @@ public class AnnotationFile } if (in != null) { - return parseAnnotationFrom(al, colSel, in); + return parseAnnotationFrom(al, hidden, in); } } catch (Exception ex) @@ -756,20 +784,8 @@ public class AnnotationFile return false; } - long nlinesread = 0; - String lastread = ""; - - /** - * used for resolving absolute references to resources relative to - * annotationFile location - */ - String baseUri = ""; - - private static String GRAPHLINE = "GRAPHLINE", COMBINE = "COMBINE", - STRUCTMODEL = "STRUCTMODEL"; - - public boolean parseAnnotationFrom(AlignmentI al, ColumnSelection colSel, + public boolean parseAnnotationFrom(AlignmentI al, HiddenColumns hidden, BufferedReader in) throws Exception { nlinesread = 0; @@ -961,12 +977,6 @@ public class AnnotationFile modified = true; continue; } - // else if (token.equalsIgnoreCase("VIEW_DEF")) - // { - // addOrSetView(al,st); - // modified = true; - // continue; - // } else if (token.equalsIgnoreCase("VIEW_SETREF")) { if (refSeq != null) @@ -980,11 +990,11 @@ public class AnnotationFile { if (st.hasMoreTokens()) { - if (colSel == null) + if (hidden == null) { - colSel = new ColumnSelection(); + hidden = new HiddenColumns(); } - parseHideCols(colSel, st.nextToken()); + parseHideCols(hidden, st.nextToken()); } modified = true; continue; @@ -998,7 +1008,7 @@ public class AnnotationFile } if (sr != null) { - if (colSel == null) + if (hidden == null) { System.err .println("Cannot process HIDE_INSERTIONS without an alignment view: Ignoring line: " @@ -1007,19 +1017,29 @@ public class AnnotationFile else { // consider deferring this till after the file has been parsed ? - colSel.hideInsertionsFor(sr); + hidden.hideInsertionsFor(sr); } } modified = true; continue; } + else if (token.equalsIgnoreCase(HEADER_STRUCT_MODEL)) + { + int hSize = st.countTokens(); + StructModelHeader = new String[hSize]; + for (int x = 0; x < hSize; x++) + { + StructModelHeader[x] = st.nextToken(); + } + continue; + } else if (token.equalsIgnoreCase(STRUCTMODEL)) { boolean failedtoadd = true; - // expect - // STRUCTMODEL - // <%.I.D> - // [] + // expects STRUCTMODEL + // + String querySeqId = !st.hasMoreTokens() ? "" : st.nextToken(); + SequenceI querySeq = al.findName(querySeqId); if (st.hasMoreTokens()) { refSeq = al.findName(refSeqId = st.nextToken()); if (refSeq == null) @@ -1030,16 +1050,16 @@ public class AnnotationFile } else { - String tempId = st.nextToken(); - String fastaMapping = st.nextToken(); - String confidence = 100 * Double.valueOf(st.nextToken()) + ""; - String pid = st.nextToken(); - String alignRange = st.nextToken() + "-" + st.nextToken(); - String otherInfo = st.hasMoreTokens() ? st.nextToken() : ""; - String coverage = ""; - if (add_structmodel(al, refSeq, tempId, fastaMapping, - alignRange, coverage, - confidence, pid, otherInfo)) + int tSize = st.countTokens() + 2; + String[] rowData = new String[tSize]; + rowData[0] = querySeqId; + rowData[1] = refSeqId; + for (int x = 2; x < tSize; x++) + { + rowData[x] = st.nextToken(); + } + if (processStructModel(al, querySeq, refSeq, + StructModelHeader, rowData, baseUri)) { failedtoadd = false; } @@ -1048,9 +1068,8 @@ public class AnnotationFile if (failedtoadd) { System.err - .println("Need <%.I.D> [] as tab separated fields after" - + STRUCTMODEL - + ".\nNote: other information could be provided in html format "); + .println("Need minimum of as tab separated fields after" + + STRUCTMODEL); } else { modified = true; } @@ -1255,36 +1274,46 @@ public class AnnotationFile return modified; } + /** - * resolve a structural model and generate and add an alignment sequence for - * it + * Resolve structural model to a reference sequence and register it to + * StructureSelectionManager * - * @param refSeq2 - * @param tempId - * @param urlToModel - * @param urlToPairwise + * @param al + * @param querySequence + * @param templateSeq + * @param structModelHeader + * @param structModelData * @return true if model and sequence was added */ - private boolean add_structmodel(AlignmentI al, SequenceI refSeq, - String modelFile, String fastaFile, String aRange, - String coverage, String confidence, - String pid, String otherInfo) + static boolean processStructModel(AlignmentI al, SequenceI querySequence, + SequenceI templateSeq, + String[] structModelHeader, + String[] structModelData, String baseUri) { String warningMessage = null; boolean added = false; try { - String structureModelFile = resolveAbsolute(modelFile); - String fastaMappingFile = resolveAbsolute(fastaFile); - // System.out.println("Model File >> " + fastaMappingFile); - // System.out.println("Fasta File >> " + structureModelFile); - PDBEntry phyre2PDBEntry = new PDBEntry(modelFile, null, Type.FILE, + String structureModelFile = resolveAbsolutePath(structModelData[2], + baseUri); + String fastaMappingFile = resolveAbsolutePath(structModelData[3], + baseUri); + // System.out.println("Model File >> " + structureModelFile); + // System.out.println("Fasta File >> " + fastaMappingFile); + String modelName = StructureFile.safeName(structureModelFile); + PDBEntry phyre2PDBEntry = new PDBEntry(modelName, " ", + Type.PDB, structureModelFile); - String phyre2ModelDesc = generatePhyre2InfoHTMLTable(aRange, - coverage, confidence, pid, otherInfo); - phyre2PDBEntry.setProperty("PHYRE2_MODEL_INFO", phyre2ModelDesc); - refSeq.getDatasetSequence().addPDBId(phyre2PDBEntry); + List phyreDD = generatePhyreDynamicDataList( + structModelHeader, structModelData); + phyre2PDBEntry.setProperty("DYNAMIC_DATA_PHYRE2", phyreDD); + templateSeq.getDatasetSequence().addPDBId(phyre2PDBEntry); + if (querySequence != null) + { + querySequence.getDatasetSequence().addPDBId(phyre2PDBEntry); + } StructureSelectionManager ssm = StructureSelectionManager - .getStructureSelectionManager(Desktop.instance); + .getStructureSelectionManager(); ssm.registerPhyre2Template(structureModelFile, fastaMappingFile); added = true; @@ -1300,53 +1329,46 @@ public class AnnotationFile return added; } - private String generatePhyre2InfoHTMLTable(String aRange, - String coverage, String confidence, String pid, String otherInfo) + static List generatePhyreDynamicDataList( + String[] headerArray, + String[] dataArray) { - StringBuilder phyre2InfoBuilder = new StringBuilder(); - phyre2InfoBuilder.append(""); - phyre2InfoBuilder - .append(""); - if (aRange != null && !aRange.isEmpty()) - { - phyre2InfoBuilder.append(""); - } - if (coverage != null && !coverage.isEmpty()) - { - phyre2InfoBuilder.append(""); - } - if (confidence != null && !confidence.isEmpty()) + + if (headerArray == null || dataArray == null) { - phyre2InfoBuilder.append(""); + throw new IllegalArgumentException( + "Header or data arrays must not be null"); } - if (pid != null && !pid.isEmpty()) + + if (headerArray.length != dataArray.length) { - phyre2InfoBuilder.append(""); + throw new IllegalArgumentException( + "Header and data arrays must be of same lenght"); } - if (otherInfo != null && !otherInfo.isEmpty()) + List dynamicDataList = new ArrayList(); + int x = 0; + for (String data : dataArray) { - phyre2InfoBuilder.append(""); + // first four column should be hidden; + boolean show = (x > 4); + dynamicDataList.add(new DynamicData(headerArray[x], data, DataType.S, + "PHYRE2", show)); + x++; } - phyre2InfoBuilder.append("
Phyre2 Template Info
").append("Aligned range") - .append("").append(aRange).append("
").append("Coverage") - .append("").append(coverage).append("
").append("Confidence") - .append("").append(confidence).append("
").append("%.i.d") - .append("").append(pid).append("
").append("Other information") - .append("").append(otherInfo).append("
"); - return phyre2InfoBuilder.toString(); + return dynamicDataList; } - private String resolveAbsolute(String relURI) + static String resolveAbsolutePath(String relURI, String _baseUri) { if (relURI.indexOf(":/") > -1 || relURI.startsWith("/") - || "".equals(baseUri) || relURI.startsWith(baseUri)) + || "".equals(_baseUri) || relURI.startsWith(_baseUri)) { return relURI; } - return baseUri + relURI; + return _baseUri + relURI; } - private void parseHideCols(ColumnSelection colSel, String nextToken) + private void parseHideCols(HiddenColumns hidden, String nextToken) { StringTokenizer inval = new StringTokenizer(nextToken, ","); while (inval.hasMoreTokens()) @@ -1358,7 +1380,7 @@ public class AnnotationFile from = to = Integer.parseInt(range); if (from >= 0) { - colSel.hideColumns(from, to); + hidden.hideColumns(from, to); } } else @@ -1374,7 +1396,7 @@ public class AnnotationFile } if (from > 0 && to >= from) { - colSel.hideColumns(from, to); + hidden.hideColumns(from, to); } } } @@ -1390,29 +1412,21 @@ public class AnnotationFile Annotation parseAnnotation(String string, int graphStyle) { - boolean hasSymbols = (graphStyle == AlignmentAnnotation.NO_GRAPH); // don't - // do the - // glyph - // test - // if we - // don't - // want - // secondary - // structure + // don't do the glyph test if we don't want secondary structure + boolean hasSymbols = (graphStyle == AlignmentAnnotation.NO_GRAPH); String desc = null, displayChar = null; char ss = ' '; // secondaryStructure float value = 0; boolean parsedValue = false, dcset = false; // find colour here - java.awt.Color colour = null; + Color colour = null; int i = string.indexOf("["); int j = string.indexOf("]"); if (i > -1 && j > -1) { - UserColourScheme ucs = new UserColourScheme(); - - colour = ucs.getColourFromString(string.substring(i + 1, j)); + colour = ColorUtils.parseColourString(string.substring(i + 1, + j)); if (i > 0 && string.charAt(i - 1) == ',') { // clip the preceding comma as well @@ -1514,7 +1528,7 @@ public class AnnotationFile void colourAnnotations(AlignmentI al, String label, String colour) { - UserColourScheme ucs = new UserColourScheme(colour); + Color awtColour = ColorUtils.parseColourString(colour); Annotation[] annotations; for (int i = 0; i < al.getAlignmentAnnotation().length; i++) { @@ -1525,7 +1539,7 @@ public class AnnotationFile { if (annotations[j] != null) { - annotations[j].colour = ucs.findColour('A'); + annotations[j].colour = awtColour; } } } @@ -1595,15 +1609,22 @@ public class AnnotationFile SequenceGroup groupRef) { String group = st.nextToken(); - AlignmentAnnotation annotation = null, alannot[] = al - .getAlignmentAnnotation(); - float value = new Float(st.nextToken()).floatValue(); + AlignmentAnnotation[] alannot = al.getAlignmentAnnotation(); + String nextToken = st.nextToken(); + float value = 0f; + try + { + value = Float.valueOf(nextToken); + } catch (NumberFormatException e) + { + System.err.println("line " + nlinesread + ": Threshold '" + nextToken + + "' invalid, setting to zero"); + } String label = st.hasMoreTokens() ? st.nextToken() : null; - java.awt.Color colour = null; + Color colour = null; if (st.hasMoreTokens()) { - UserColourScheme ucs = new UserColourScheme(st.nextToken()); - colour = ucs.findColour('A'); + colour = ColorUtils.parseColourString(st.nextToken()); } if (alannot != null) { @@ -1617,10 +1638,6 @@ public class AnnotationFile } } } - if (annotation == null) - { - return; - } } void addGroup(AlignmentI al, StringTokenizer st) @@ -1780,8 +1797,7 @@ public class AnnotationFile if (sg != null) { String keyValue, key, value; - ColourSchemeI def = sg.cs; - sg.cs = null; + ColourSchemeI def = sg.getColourScheme(); while (st.hasMoreTokens()) { keyValue = st.nextToken(); @@ -1794,7 +1810,8 @@ public class AnnotationFile } else if (key.equalsIgnoreCase("colour")) { - sg.cs = ColourSchemeProperty.getColour(al, value); + sg.cs.setColourScheme(ColourSchemeProperty + .getColourScheme(al, value)); } else if (key.equalsIgnoreCase("pidThreshold")) { @@ -1815,7 +1832,7 @@ public class AnnotationFile } else if (key.equalsIgnoreCase("outlineColour")) { - sg.setOutlineColour(new UserColourScheme(value).findColour('A')); + sg.setOutlineColour(ColorUtils.parseColourString(value)); } else if (key.equalsIgnoreCase("displayBoxes")) { @@ -1835,11 +1852,11 @@ public class AnnotationFile } else if (key.equalsIgnoreCase("textCol1")) { - sg.textColour = new UserColourScheme(value).findColour('A'); + sg.textColour = ColorUtils.parseColourString(value); } else if (key.equalsIgnoreCase("textCol2")) { - sg.textColour2 = new UserColourScheme(value).findColour('A'); + sg.textColour2 = ColorUtils.parseColourString(value); } else if (key.equalsIgnoreCase("textColThreshold")) { @@ -1847,9 +1864,8 @@ public class AnnotationFile } else if (key.equalsIgnoreCase("idColour")) { - // consider warning if colour doesn't resolve to a real colour - sg.setIdColour((def = new UserColourScheme(value)) - .findColour('A')); + Color idColour = ColorUtils.parseColourString(value); + sg.setIdColour(idColour == null ? Color.black : idColour); } else if (key.equalsIgnoreCase("hide")) { @@ -1863,9 +1879,9 @@ public class AnnotationFile } sg.recalcConservation(); } - if (sg.cs == null) + if (sg.getColourScheme() == null) { - sg.cs = def; + sg.setColourScheme(def); } } } @@ -1959,7 +1975,7 @@ public class AnnotationFile return printAnnotations(viewport.isShowAnnotation() ? viewport .getAlignment().getAlignmentAnnotation() : null, viewport .getAlignment().getGroups(), viewport.getAlignment() - .getProperties(), viewport.getColumnSelection(), + .getProperties(), viewport.getAlignment().getHiddenColumns(), viewport.getAlignment(), null); }