X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fjws2%2FAADisorderClient.java;h=e5a39a7ddda0e29281ce4d586beeade6a5423294;hb=b2f9a8d7bce642ff4011bc6d49e02bb0569fbb11;hp=f3f8ae310e13ef319146fe3ffd855055f17465ac;hpb=5bcf9b9b906d619519ae9de88ab648a94b47e32b;p=jalview.git diff --git a/src/jalview/ws/jws2/AADisorderClient.java b/src/jalview/ws/jws2/AADisorderClient.java index f3f8ae3..e5a39a7 100644 --- a/src/jalview/ws/jws2/AADisorderClient.java +++ b/src/jalview/ws/jws2/AADisorderClient.java @@ -1,9 +1,26 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1) + * 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.ws.jws2; import jalview.api.AlignCalcWorkerI; import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; - import jalview.datamodel.GraphLine; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; @@ -20,17 +37,18 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; + import compbio.data.sequence.Range; import compbio.data.sequence.Score; import compbio.data.sequence.ScoreManager.ScoreHolder; import compbio.metadata.Argument; -import compbio.ws.client.Services; -public class AADisorderClient extends JabawsAlignCalcWorker implements +public class AADisorderClient extends JabawsCalcWorker implements AlignCalcWorkerI { private static final String THRESHOLD = "THRESHOLD"; + private static final String RANGE = "RANGE"; String typeName; @@ -66,10 +84,12 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements private static Map>> annotMap; private static String DONTCOMBINE = "DONTCOMBINE"; + private static String INVISIBLE = "INVISIBLE"; static { - // TODO: turn this into some kind of configuration file that's a bit easier to edit + // TODO: turn this into some kind of configuration file that's a bit easier + // to edit featureMap = new HashMap>(); Map fmap; featureMap.put(compbio.ws.client.Services.IUPredWS.toString(), @@ -98,27 +118,54 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements amap = new HashMap>()); amap.put("Dydx", new HashMap()); amap.get("Dydx").put(DONTCOMBINE, DONTCOMBINE); - amap.get("Dydx").put(THRESHOLD, new double[] {1, 0}); + amap.get("Dydx").put(THRESHOLD, new double[] + { 1, 0 }); + amap.get("Dydx").put(RANGE, new float[] + { -1, +1 }); + amap.put("SmoothedScore", new HashMap()); - amap.get("SmoothedScore").put(INVISIBLE,INVISIBLE); + amap.get("SmoothedScore").put(INVISIBLE, INVISIBLE); amap.put("RawScore", new HashMap()); - amap.get("RawScore").put(INVISIBLE,INVISIBLE); + amap.get("RawScore").put(INVISIBLE, INVISIBLE); annotMap.put(compbio.ws.client.Services.DisemblWS.toString(), amap = new HashMap>()); amap.put("COILS", new HashMap()); amap.put("HOTLOOPS", new HashMap()); amap.put("REM465", new HashMap()); - amap.get("COILS").put(THRESHOLD, new double[] { 1, 0.516}); - amap.get("HOTLOOPS").put(THRESHOLD, new double[] { 1, 0.6}); - amap.get("REM465").put(THRESHOLD, new double[] { 1, 0.1204}); - + amap.get("COILS").put(THRESHOLD, new double[] + { 1, 0.516 }); + amap.get("COILS").put(RANGE, new float[] + { 0, 1 }); + + amap.get("HOTLOOPS").put(THRESHOLD, new double[] + { 1, 0.6 }); + amap.get("HOTLOOPS").put(RANGE, new float[] + { 0, 1 }); + amap.get("REM465").put(THRESHOLD, new double[] + { 1, 0.1204 }); + amap.get("REM465").put(RANGE, new float[] + { 0, 1 }); + + annotMap.put(compbio.ws.client.Services.IUPredWS.toString(), amap = new HashMap>()); amap.put("Long", new HashMap()); amap.put("Short", new HashMap()); - amap.get("Long").put(THRESHOLD, new double[] { 1, 0.5}); - amap.get("Short").put(THRESHOLD, new double[] { 1, 0.5}); - + amap.get("Long").put(THRESHOLD, new double[] + { 1, 0.5 }); + amap.get("Long").put(RANGE, new float[] + { 0, 1 }); + amap.get("Short").put(THRESHOLD, new double[] + { 1, 0.5 }); + amap.get("Short").put(RANGE, new float[] + { 0, 1 }); + annotMap.put(compbio.ws.client.Services.JronnWS.toString(), + amap = new HashMap>()); + amap.put("JRonn", new HashMap()); + amap.get("JRonn").put(THRESHOLD, new double[] + { 1, 0.5 }); + amap.get("JRonn").put(RANGE, new float[] + { 0, 1 }); } @Override @@ -137,7 +184,7 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements /** * grouping for any annotation rows created */ - int graphGroup = 1, iGraphGroup = 1; + int graphGroup = 1; if (alignViewport.getAlignment().getAlignmentAnnotation() != null) { for (AlignmentAnnotation ala : alignViewport.getAlignment() @@ -154,99 +201,127 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements { boolean sameGroup = false; SequenceI dseq, aseq, seq = seqNames.get(seqId); - int base = seq.getStart() - 1; + int base = seq.findPosition(start)-1; aseq = seq; while ((dseq = seq).getDatasetSequence() != null) { seq = seq.getDatasetSequence(); } - ; - ScoreHolder scores = scoremanager.getAnnotationForSequence(seqId); + ScoreHolder scores = null; + try { + scores = scoremanager.getAnnotationForSequence(seqId); + } catch (Exception q) + { + Cache.log + .info("Couldn't recover disorder prediction for sequence " + + seq.getName() + + "(Prediction name was " + + seqId+")" + + "\nSee http://issues.jalview.org/browse/JAL-1319 for one possible reason why disorder predictions might fail."); + } float last = Float.NaN, val = Float.NaN; int lastAnnot = ourAnnot.size(); - for (Score scr : scores.scores) - { - - if (scr.getRanges() != null && scr.getRanges().size() > 0) + if (scores!=null && scores.scores!=null) { + for (Score scr : scores.scores) { - Iterator vals = scr.getScores().iterator(); - // make features on sequence - for (Range rn : scr.getRanges()) - { - SequenceFeature sf; - String[] type = featureTypeMap.get(scr.getMethod()); - if (type == null) - { - // create a default type for this feature - type = new String[] - { typeName + " (" + scr.getMethod() + ")", - service.getActionText() }; - } - if (vals.hasNext()) + if (scr.getRanges() != null && scr.getRanges().size() > 0) + { + Iterator vals = scr.getScores().iterator(); + // make features on sequence + for (Range rn : scr.getRanges()) { - sf = new SequenceFeature(type[0], type[1], base + rn.from, - base + rn.to, val = vals.next().floatValue(), - methodName); + + SequenceFeature sf; + String[] type = featureTypeMap.get(scr.getMethod()); + if (type == null) + { + // create a default type for this feature + type = new String[] + { typeName + " (" + scr.getMethod() + ")", + service.getActionText() }; + } + if (vals.hasNext()) + { + sf = new SequenceFeature(type[0], type[1], + base + rn.from, base + rn.to, val = vals.next() + .floatValue(), methodName); + } + else + { + sf = new SequenceFeature(type[0], type[1], null, base + + rn.from, base + rn.to, methodName); + } + dseq.addSequenceFeature(sf); + if (last != val && last != Float.NaN) + { + fc.put(sf.getType(), sf); + } + last = val; + dispFeatures = true; } - else + } + else + { + if (scr.getScores().size() == 0) { - sf = new SequenceFeature(type[0], type[1], null, base - + rn.from, base + rn.to, methodName); + continue; } - dseq.addSequenceFeature(sf); - if (last != val && last != Float.NaN) + AlignmentAnnotation annot = createAnnotationRowsForScores( + ourAnnot, + service.serviceType + " (" + scr.getMethod() + ")", + service.getServiceTypeURI() + "/" + scr.getMethod(), + aseq, base + 1, scr); + annot.graph = AlignmentAnnotation.LINE_GRAPH; + + Map styleMap = (annotTypeMap == null) ? null : annotTypeMap.get(scr.getMethod()); + + annot.visible = (styleMap == null || styleMap.get(INVISIBLE) == null); + double[] thrsh = (styleMap==null) ? null + : (double[]) styleMap.get( + THRESHOLD); + float[] range = (styleMap==null) ? null : (float[]) styleMap.get( + RANGE); + if (range!=null) { - fc.put(sf.getType(), sf); + annot.graphMin = range[0]; + annot.graphMax = range[1]; } - last = val; - dispFeatures = true; - } - } - else - { - if (scr.getScores().size()==0) - { - continue; - } - AlignmentAnnotation annot = createAnnotationRowsForScores( - ourAnnot, service.serviceType + " (" + scr.getMethod() - + ")", service.getServiceTypeURI()+"/"+ scr.getMethod(), aseq, - base, scr); - annot.graph = AlignmentAnnotation.LINE_GRAPH; - annot.visible = (annotTypeMap==null || annotTypeMap.get(scr.getMethod())==null || annotTypeMap.get(scr.getMethod()).get(INVISIBLE) == null); - double[] thrsh=(annotTypeMap==null || annotTypeMap.get(scr.getMethod())==null) ? null : (double[]) annotTypeMap.get(scr.getMethod()).get(THRESHOLD); - if (annotTypeMap==null || annotTypeMap.get(scr.getMethod())==null || annotTypeMap.get(scr.getMethod()).get(DONTCOMBINE) == null) - { + if (styleMap==null || styleMap.get(DONTCOMBINE) == null) { - if (!sameGroup) { - graphGroup++; - sameGroup = true; + if (!sameGroup) + { + graphGroup++; + sameGroup = true; + } + + annot.graphGroup = graphGroup; } + } - annot.graphGroup = graphGroup; + annot.description = "" + service.getActionText() + + " - raw scores"; + if (thrsh != null) + { + String threshNote = (thrsh[0] > 0 ? "Above " : "Below ") + + thrsh[1] + " indicates disorder"; + annot.threshold = new GraphLine((float) thrsh[1], + threshNote, Color.red); + annot.description += "
" + threshNote; } - } - - annot.description = ""+service.getActionText() + " - raw scores"; - if (thrsh!=null) - { - String threshNote=(thrsh[0]>0 ? "Above " : "Below ")+thrsh[1]+" indicates disorder"; - annot.threshold=new GraphLine((float) thrsh[1], threshNote, Color.red); - annot.description+="
"+threshNote; - } - annot.description+=""; - Color col = new UserColourScheme(typeName) - .createColourFromName(typeName + scr.getMethod()); - for (int p = 0, ps = annot.annotations.length; p < ps; p++) - { - if (annot.annotations[p] != null) + annot.description += ""; + Color col = new UserColourScheme(typeName) + .createColourFromName(typeName + scr.getMethod()); + for (int p = 0, ps = annot.annotations.length; p < ps; p++) { - annot.annotations[p].colour = col; + if (annot.annotations[p] != null) + { + annot.annotations[p].colour = col; + } } + annot._linecolour = col; } - annot._linecolour=col; } } if (lastAnnot + 1 == ourAnnot.size()) @@ -273,13 +348,14 @@ public class AADisorderClient extends JabawsAlignCalcWorker implements fr.setColour(ft, ggc); } } - // TODO: JAL-1150 - create sequence feature settings API for defining styles and enabling/disabling feature overlay on alignment panel + // TODO: JAL-1150 - create sequence feature settings API for defining + // styles and enabling/disabling feature overlay on alignment panel ((jalview.gui.AlignmentPanel) ap).updateFeatureRendererFrom(fr); - if (af.alignPanel==ap) + if (af.alignPanel == ap) { // only do this if the alignFrame is currently showing this view. af.setShowSeqFeatures(true); - } + } ap.paintAlignment(true); } if (ourAnnot.size() > 0)