1 package jalview.ws.jws2;
3 import jalview.api.AlignCalcWorkerI;
4 import jalview.bin.Cache;
5 import jalview.datamodel.SequenceFeature;
6 import jalview.datamodel.SequenceI;
7 import jalview.gui.AlignFrame;
8 import jalview.schemes.GraduatedColor;
9 import jalview.ws.jws2.jabaws2.Jws2Instance;
10 import jalview.ws.params.WsParamSetI;
12 import java.awt.Color;
13 import java.util.Hashtable;
14 import java.util.Iterator;
15 import java.util.List;
18 import compbio.data.sequence.Range;
19 import compbio.data.sequence.Score;
20 import compbio.data.sequence.ScoreManager.ScoreHolder;
21 import compbio.metadata.Argument;
23 public class AADisorderClient extends JabawsAlignCalcWorker implements
35 public AADisorderClient(Jws2Instance sh, AlignFrame alignFrame,
36 WsParamSetI preset, List<Argument> paramset)
38 super(sh, alignFrame, preset, paramset);
41 methodName = sh.serviceType;
45 nucleotidesAllowed = false;
46 proteinAllowed = true;
51 public String getServiceActionText()
53 return "Submitting amino acid sequences for disorder prediction.";
57 public void updateResultAnnotation(boolean immediate)
60 if (immediate || !calcMan.isWorking(this) && scoremanager != null)
62 boolean dispFeatures = false;
63 Map<String,Object> fc=new Hashtable<String, Object>();
64 for (String seqId : seqNames.keySet())
66 SequenceI dseq, seq = seqNames.get(seqId);
67 int base = seq.getStart() - 1;
68 while ((dseq = seq).getDatasetSequence() != null)
70 seq = seq.getDatasetSequence();
73 ScoreHolder scores = scoremanager.getAnnotationForSequence(seqId);
74 float last=Float.NaN,val=Float.NaN;
75 for (Score scr : scores.scores)
78 if (scr.getRanges() != null && scr.getRanges().size() > 0)
80 Iterator<Float> vals = scr.getScores().iterator();
81 // make features on sequence
82 for (Range rn : scr.getRanges())
88 sf = new SequenceFeature(typeName + "(" + scr.getMethod()
89 + ")", "Disordered Region", base + rn.from, base
90 + rn.to, val=vals.next().floatValue(), methodName);
94 sf = new SequenceFeature(typeName + "(" + scr.getMethod()
95 + ")", "Disordered Region", null, base + rn.from,
96 base + rn.to, methodName);
98 dseq.addSequenceFeature(sf);
99 if (last!=val && last!=Float.NaN)
101 fc.put(sf.getType(),sf);
109 Iterator<Float> vals = scr.getScores().iterator();
110 for (int start = base + 1; vals.hasNext(); start++)
112 SequenceFeature sf = new SequenceFeature(typeName + "("
113 + scr.getMethod() + ")", "Disordered Region", start,
114 start, val=vals.next().floatValue(), methodName);
115 if (last!=val && last!=Float.NaN)
117 fc.put(sf.getType(),sf);
120 dseq.addSequenceFeature(sf);
129 jalview.gui.FeatureRenderer fr = ((jalview.gui.AlignmentPanel) ap).cloneFeatureRenderer();
130 // TODO: configure feature display settings for added types if they don't already exist
131 for (String ft:fc.keySet())
133 Cache.log.debug("Set graduated feature for new type:"+ft);
134 Object gc=fr.getFeatureStyle(ft);
135 if (gc instanceof Color)
137 // set graduated color as fading to white for minimum, and autoscaling to values on alignment
138 GraduatedColor ggc=new GraduatedColor(Color.white, (Color)gc,Float.MIN_VALUE, Float.MAX_VALUE);
139 ggc.setAutoScaled(true);
140 fr.setColour(ft, ggc);
143 af.alignPanel.updateFeatureRendererFrom(fr);
144 af.alignPanel.av.setShowSequenceFeatures(true);
145 ap.paintAlignment(true);