1 package jalview.ws2.actions.secstructpred;
3 import java.io.IOException;
4 import java.util.ArrayList;
7 import jalview.analysis.AlignmentAnnotationUtils;
8 import jalview.analysis.SeqsetUtils;
9 import jalview.api.AlignViewportI;
10 import jalview.bin.Console;
11 import jalview.datamodel.Alignment;
12 import jalview.datamodel.AlignmentAnnotation;
13 import jalview.datamodel.AlignmentI;
14 import jalview.datamodel.AlignmentView;
15 import jalview.datamodel.HiddenColumns;
16 import jalview.datamodel.SeqCigar;
17 import jalview.datamodel.SequenceI;
18 import jalview.io.AlignFile;
19 import jalview.io.JPredFile;
20 import jalview.io.JnetAnnotationMaker;
21 import jalview.util.Comparison;
22 import jalview.ws.params.ArgumentI;
23 import jalview.ws2.actions.BaseJob;
24 import jalview.ws2.actions.BaseTask;
25 import jalview.ws2.actions.ServiceInputInvalidException;
26 import jalview.ws2.api.Credentials;
27 import jalview.ws2.api.JobStatus;
28 import jalview.ws2.client.api.SecStructPredWebServiceClientI;
30 public class SecStructPredTask extends BaseTask<SecStructPredJob, AlignmentI>
32 private final SecStructPredWebServiceClientI client;
34 private final AlignmentView alignmentView;
36 private final AlignmentI currentView;
38 private final char gapChar;
40 SecStructPredTask(SecStructPredWebServiceClientI client, List<ArgumentI> args,
41 Credentials credentials, AlignViewportI viewport)
43 super(client, args, credentials);
45 this.alignmentView = viewport.getAlignmentView(true);
46 this.currentView = viewport.getAlignment();
47 this.gapChar = viewport.getGapCharacter();
51 protected List<SecStructPredJob> prepareJobs()
52 throws ServiceInputInvalidException
54 SeqCigar[] msf = alignmentView.getSequences();
55 SequenceI referenceSeq = msf[0].getSeq('-');
56 int[] delMap = alignmentView.getVisibleContigMapFor(referenceSeq.gapMap());
58 // TODO: assume MSA for now
59 SequenceI[] sequences = new SequenceI[msf.length];
60 for (int i = 0; i < msf.length; i++)
61 sequences[i] = msf[i].getSeq('-');
62 var sequenceInfo = SeqsetUtils.uniquify(sequences, true);
63 referenceSeq.setSequence(alignmentView.getASequenceString('-', 0));
64 for (int i = 0; i < sequences.length; i++)
65 sequences[i].setSequence(alignmentView.getASequenceString('-', i));
66 var sequencesList = filterEmptySequences(sequences);
67 var job = new SecStructPredJob(sequencesList, referenceSeq, delMap,
69 job.setStatus(JobStatus.READY);
73 private static List<SequenceI> filterEmptySequences(SequenceI[] seqs)
75 var filtered = new ArrayList<SequenceI>();
77 if (seq.getEnd() - seq.getStart() > 0)
83 protected AlignmentI collectResult(List<SecStructPredJob> jobs)
86 var job = jobs.get(0); // There shouldn't be more than one job
87 var status = job.getStatus();
90 .format("sec str pred job \"%s\" finished with status %s",
91 job.getServerJob().getJobId(), status));
92 if (status != JobStatus.COMPLETED)
94 JPredFile predictionFile = client.getPredictionFile(job.getServerJob());
95 AlignFile alignmentFile = client.getAlignmentFile(job.getServerJob());
97 Object[] alnAndHiddenCols = alignmentView
98 .getAlignmentAndHiddenColumns(gapChar);
99 SequenceI[] sequences = (SequenceI[]) alnAndHiddenCols[0];
100 Alignment aln = new Alignment(sequences);
101 HiddenColumns alhidden = (HiddenColumns) alnAndHiddenCols[1];
102 aln.setDataset(currentView.getDataset());
106 .add_annotation(predictionFile, aln, 0, false, job.getDelMap());
107 } catch (Exception e)
109 throw new IOException(e);
112 for (AlignmentAnnotation alnAnnot : aln.getAlignmentAnnotation())
114 if (alnAnnot.sequenceRef != null)
116 AlignmentAnnotationUtils
117 .replaceAnnotationOnAlignmentWith(alnAnnot, alnAnnot.label,
118 getClass().getSimpleName());
121 aln.setSeqrep(aln.getSequenceAt(0));