baec45808176b807fa81b2e2042ce7bd09ff7b02
[jalview.git] / src / jalview / ws / jws2 / AADisorderClient.java
1 package jalview.ws.jws2;
2
3 import jalview.api.AlignCalcWorkerI;
4 import jalview.datamodel.SequenceFeature;
5 import jalview.datamodel.SequenceI;
6 import jalview.gui.AlignFrame;
7 import jalview.ws.jws2.jabaws2.Jws2Instance;
8 import jalview.ws.params.WsParamSetI;
9
10 import java.util.Iterator;
11 import java.util.List;
12
13 import compbio.data.sequence.Range;
14 import compbio.data.sequence.Score;
15 import compbio.data.sequence.ScoreManager.ScoreHolder;
16 import compbio.metadata.Argument;
17
18 public class AADisorderClient extends JabawsAlignCalcWorker implements
19         AlignCalcWorkerI
20 {
21
22   String typeName;
23
24   String methodName;
25
26   String groupName;
27
28   AlignFrame af;
29
30   public AADisorderClient(Jws2Instance sh, AlignFrame alignFrame,
31           WsParamSetI preset, List<Argument> paramset)
32   {
33     super(sh, alignFrame, preset, paramset);
34     af = alignFrame;
35     typeName = sh.action;
36     methodName = sh.serviceType;
37
38     submitGaps = false;
39     alignedSeqs = false;
40     nucleotidesAllowed = false;
41     proteinAllowed = true;
42     bySequence = true;
43   }
44
45   @Override
46   public String getServiceActionText()
47   {
48     return "Submitting amino acid sequences for disorder prediction.";
49   }
50
51   @Override
52   public void updateResultAnnotation(boolean immediate)
53   {
54
55     if (immediate || !calcMan.isWorking(this) && scoremanager != null)
56     {
57       boolean dispFeatures = false;
58       for (String seqId : seqNames.keySet())
59       {
60         SequenceI dseq, seq = seqNames.get(seqId);
61         int base = seq.getStart() - 1;
62         while ((dseq = seq).getDatasetSequence() != null)
63         {
64           seq = seq.getDatasetSequence();
65         }
66         ;
67         ScoreHolder scores = scoremanager.getAnnotationForSequence(seqId);
68
69         for (Score scr : scores.scores)
70         {
71
72           if (scr.getRanges() != null && scr.getRanges().size() > 0)
73           {
74             Iterator<Float> vals = scr.getScores().iterator();
75             // make features on sequence
76             for (Range rn : scr.getRanges())
77             {
78
79               SequenceFeature sf;
80               if (vals.hasNext())
81               {
82                 sf = new SequenceFeature(typeName + "(" + scr.getMethod()
83                         + ")", "Disordered Region", base + rn.from, base
84                         + rn.to, vals.next().floatValue(), methodName);
85               }
86               else
87               {
88                 sf = new SequenceFeature(typeName + "(" + scr.getMethod()
89                         + ")", "Disordered Region", null, base + rn.from,
90                         base + rn.to, methodName);
91               }
92               dseq.addSequenceFeature(sf);
93               dispFeatures = true;
94             }
95           }
96           else
97           {
98             Iterator<Float> vals = scr.getScores().iterator();
99             for (int start = base + 1; vals.hasNext(); start++)
100             {
101               SequenceFeature sf = new SequenceFeature(typeName + "("
102                       + scr.getMethod() + ")", "Disordered Region", start,
103                       start, vals.next().floatValue(), methodName);
104               dseq.addSequenceFeature(sf);
105               dispFeatures = true;
106             }
107           }
108         }
109       }
110       {
111         if (dispFeatures)
112         {
113           // TODO: configure feature display settings for added types if they don't already exist
114           
115           af.alignPanel.av.setShowSequenceFeatures(true);
116           ap.paintAlignment(true);
117         }
118       }
119       /*
120        * else { ap.paintAlignment(true); }
121        */
122     }
123   }
124
125 }