X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fjws2%2FJPred301Client.java;h=c15f256bf5f528a6577231cc3261bde6d6231eaa;hb=37de9310bec3501cbc6381e0c3dcb282fcaad812;hp=71cbb7e6dece12ab3d578590ac563cdbce61fb6c;hpb=7b45ebcb44dd677bd13bc7f74aca9554edd10f50;p=jalview.git diff --git a/src/jalview/ws/jws2/JPred301Client.java b/src/jalview/ws/jws2/JPred301Client.java index 71cbb7e..c15f256 100644 --- a/src/jalview/ws/jws2/JPred301Client.java +++ b/src/jalview/ws/jws2/JPred301Client.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,7 +20,6 @@ */ package jalview.ws.jws2; -import jalview.api.AlignCalcWorkerI; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; import jalview.gui.AlignFrame; @@ -30,19 +29,20 @@ import jalview.ws.params.OptionI; import jalview.ws.params.WsParamSetI; import jalview.ws.uimodel.AlignAnalysisUIText; +import java.awt.Color; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import compbio.data.sequence.FastaSequence; import compbio.data.sequence.JpredAlignment; import compbio.metadata.Argument; public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker - implements AlignCalcWorkerI { - /** * * @return default args for this service when run as dynamic web service @@ -50,14 +50,14 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker public List selectDefaultArgs() { List rgs = new ArrayList(); - for (ArgumentI argi: service.getParamStore().getServiceParameters()) + for (ArgumentI argi : service.getParamStore().getServiceParameters()) { if (argi instanceof OptionI) { List o = ((OptionI) argi).getPossibleValues(); if (o.contains("-pred-nohits")) { - OptionI cpy = ((OptionI)argi).copy(); + OptionI cpy = ((OptionI) argi).copy(); cpy.setValue("-pred-nohits"); rgs.add(cpy); } @@ -84,23 +84,33 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker return (seqs.size() > 1); } + @Override public String getServiceActionText() { return "calculating consensus secondary structure prediction using JPred service"; } - private static HashMap jpredRowLabels = new HashMap(); - private static HashSetjpredRes_graph,jpredRes_ssonly; + + private static Map jpredRowLabels = new HashMap(); + + private static final Set jpredRes_graph; + + private static final Set jpredRes_ssonly; + static { - jpredRes_ssonly=new HashSet(); + jpredRes_ssonly = new HashSet(); jpredRes_ssonly.add("jnetpred".toLowerCase()); - jpredRes_graph=new HashSet(); + jpredRes_ssonly.add("jnetpssm".toLowerCase()); + jpredRes_ssonly.add("jnethmm".toLowerCase()); + jpredRes_graph = new HashSet(); jpredRes_graph.add("jnetconf".toLowerCase()); - + jpredRes_graph.add("jnet burial".toLowerCase()); } + /** * update the consensus annotation from the sequence profile data using * current visualization settings. */ + @Override public void updateResultAnnotation(boolean immediate) { if (immediate || !calcMan.isWorking(this) && msascoreset != null) @@ -110,27 +120,62 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker JpredAlignment jpres = (JpredAlignment) msascoreset; int alWidth = alignViewport.getAlignment().getWidth(); ArrayList ourAnnot = new ArrayList(); - for (FastaSequence fsq:jpres.getJpredSequences()) + char[] sol = new char[jpres.getJpredSequences().get(0).getLength()]; + boolean firstsol = true; + for (FastaSequence fsq : jpres.getJpredSequences()) { String[] k = jpredRowLabels.get(fsq.getId()); - if (k==null) + if (k == null) + { + k = new String[] { fsq.getId(), "JNet Output" }; + } + if (fsq.getId().startsWith("JNETSOL")) + { + char amnt = (fsq.getId().endsWith("25") ? "3" : fsq.getId() + .endsWith("5") ? "6" : "9").charAt(0); + char[] vseq = fsq.getSequence().toCharArray(); + for (int spos = 0, sposL = fsq.getLength(); spos < sposL; spos++) + { + if (firstsol) + { + sol[spos] = '0'; + } + if (vseq[spos] == 'B' + && (sol[spos] == '0' || sol[spos] < amnt)) + { + sol[spos] = amnt; + } + } + firstsol = false; + } + else { - k = new String[] { fsq.getId(), "JNet Output"}; + createAnnotationRowFromString( + ourAnnot, + getCalcId(), + alWidth, + k[0], + k[1], + jpredRes_graph.contains(fsq.getId()) ? AlignmentAnnotation.BAR_GRAPH + : AlignmentAnnotation.NO_GRAPH, 0f, 9f, + fsq.getSequence()); } - createAnnotationRowFromString(ourAnnot, getCalcId(), alWidth, - k[0],k[1], - jpredRes_graph.contains(fsq.getId()) ? AlignmentAnnotation.BAR_GRAPH : AlignmentAnnotation.NO_GRAPH, 0f, 0f, - fsq.getSequence()); } - for (FastaSequence fsq: jpres.getSequences()) + createAnnotationRowFromString( + ourAnnot, + getCalcId(), + alWidth, + "Jnet Burial", + "Prediction of Solvent Accessibility
levels are
  • 0 - Exposed
  • 3 - 25% or more S.A. accessible
  • 6 - 5% or more S.A. accessible
  • 9 - Buried (<5% exposed)
", + AlignmentAnnotation.BAR_GRAPH, 0f, 9f, new String(sol)); + for (FastaSequence fsq : jpres.getSequences()) { if (fsq.getId().equalsIgnoreCase("QUERY")) { createAnnotationRowFromString(ourAnnot, getCalcId(), alWidth, "Query", "JPred Reference Sequence", - AlignmentAnnotation.NO_GRAPH, 0f, 0f, - fsq.getSequence()); + AlignmentAnnotation.NO_GRAPH, 0f, 0f, fsq.getSequence()); } } if (ourAnnot.size() > 0) @@ -161,6 +206,7 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker { // created a valid annotation from the data ourAnnot.add(annotation); + // annotation.validateRangeAndDisplay(); } } } @@ -169,11 +215,19 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker AlignmentAnnotation annotation, String sourceData, int alWidth, int rowType) { - if (sourceData.length()==0 && alWidth>0) + if (sourceData.length() == 0 && alWidth > 0) { return false; } Annotation[] elm = new Annotation[alWidth]; + boolean ssOnly = jpredRes_ssonly.contains(annotation.label + .toLowerCase()); + boolean graphOnly = rowType != AlignmentAnnotation.NO_GRAPH; + if (!ssOnly && !graphOnly) + { + // for burial 'B' + annotation.showAllColLabels = true; + } for (int i = 0, iSize = sourceData.length(); i < iSize; i++) { @@ -189,13 +243,15 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker switch (rowType) { case AlignmentAnnotation.NO_GRAPH: - elm[i] = new Annotation("" + annot, "" + annot, annot, Float.NaN); + elm[i] = ssOnly ? new Annotation("", "", annot, Float.NaN, + colourSS(annot)) : new Annotation("" + annot, "" + annot, + '\0', Float.NaN); break; default: try { elm[i] = new Annotation("" + annot, "" + annot, annot, - Integer.valueOf(annot)); + Integer.valueOf("" + annot)); } catch (Exception x) { System.err.println("Expected numeric value in character '" @@ -210,6 +266,18 @@ public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker return true; } + private Color colourSS(char annot) + { + switch (annot) + { + case 'H': + return jalview.renderer.AnnotationRenderer.HELIX_COLOUR; + case 'E': + return jalview.renderer.AnnotationRenderer.SHEET_COLOUR; + } + return jalview.renderer.AnnotationRenderer.GLYPHLINE_COLOR; + } + @Override public String getCalcId() {