package jalview.ws.jws2; import jalview.api.AlignCalcWorkerI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.WsParamSetI; import java.util.Iterator; import java.util.List; import compbio.data.sequence.Range; import compbio.data.sequence.Score; import compbio.data.sequence.ScoreManager.ScoreHolder; import compbio.metadata.Argument; public class AADisorderClient extends JabawsAlignCalcWorker implements AlignCalcWorkerI { String typeName; String methodName; String groupName; AlignFrame af; public AADisorderClient(Jws2Instance sh, AlignFrame alignFrame, WsParamSetI preset, List paramset) { super(sh, alignFrame, preset, paramset); af = alignFrame; typeName = sh.action; methodName = sh.serviceType; submitGaps = false; alignedSeqs = false; nucleotidesAllowed = false; proteinAllowed = true; bySequence = true; } @Override public String getServiceActionText() { return "Submitting amino acid sequences for disorder prediction."; } @Override public void updateResultAnnotation(boolean immediate) { if (immediate || !calcMan.isWorking(this) && scoremanager != null) { boolean dispFeatures = false; for (String seqId : seqNames.keySet()) { SequenceI dseq, seq = seqNames.get(seqId); int base = seq.getStart() - 1; while ((dseq = seq).getDatasetSequence() != null) { seq = seq.getDatasetSequence(); } ; ScoreHolder scores = scoremanager.getAnnotationForSequence(seqId); for (Score scr : scores.scores) { if (scr.getRanges() != null && scr.getRanges().size() > 0) { Iterator vals = scr.getScores().iterator(); // make features on sequence for (Range rn : scr.getRanges()) { SequenceFeature sf; if (vals.hasNext()) { sf = new SequenceFeature(typeName + "(" + scr.getMethod() + ")", "Disordered Region", base + rn.from, base + rn.to, vals.next().floatValue(), methodName); } else { sf = new SequenceFeature(typeName + "(" + scr.getMethod() + ")", "Disordered Region", null, base + rn.from, base + rn.to, methodName); } dseq.addSequenceFeature(sf); dispFeatures = true; } } else { Iterator vals = scr.getScores().iterator(); for (int start = base + 1; vals.hasNext(); start++) { SequenceFeature sf = new SequenceFeature(typeName + "(" + scr.getMethod() + ")", "Disordered Region", start, start, vals.next().floatValue(), methodName); dseq.addSequenceFeature(sf); dispFeatures = true; } } } } { if (dispFeatures) { // TODO: configure feature display settings for added types if they don't already exist af.alignPanel.av.setShowSequenceFeatures(true); ap.paintAlignment(true); } } /* * else { ap.paintAlignment(true); } */ } } }