X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FJPredThread.java;h=272b1478187108124e671238b1085ca1e89d9d92;hb=2763845dada91cdfe266200cf852146c70392ad7;hp=6aebfdce9c850887c6703157f93d6479b9c7b5ee;hpb=a5481d6e853a962af603f4a21b171ba6fc9c200d;p=jalview.git diff --git a/src/jalview/ws/JPredThread.java b/src/jalview/ws/JPredThread.java index 6aebfdc..272b147 100644 --- a/src/jalview/ws/JPredThread.java +++ b/src/jalview/ws/JPredThread.java @@ -1,43 +1,65 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) + * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * + * This program 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 2 + * of the License, or (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ package jalview.ws; import java.util.*; -import javax.swing.*; - -import vamsas.objects.simple.JpredResult; - -import ext.vamsas.*; import jalview.analysis.*; import jalview.bin.*; import jalview.datamodel.*; +import jalview.datamodel.Alignment; import jalview.gui.*; import jalview.io.*; import jalview.util.*; -import jalview.ws.WSThread.*; +import vamsas.objects.simple.JpredResult; -class JPredThread -extends WSThread -implements WSClientI +class JPredThread extends WSThread implements WSClientI { - // TODO: put mapping between JPredJob input and input data here - JNetAnnotation adding is done after result parsing. - class JPredJob - extends WSThread.WSJob + // TODO: put mapping between JPredJob input and input data here - + // JNetAnnotation adding is done after result parsing. + class JPredJob extends WSThread.WSJob { - // TODO: make JPredJob deal only with what was sent to and received from a JNet service - int[] predMap=null; // mapping from sequence(i) to the original sequence(predMap[i]) being predicted on + // TODO: make JPredJob deal only with what was sent to and received from a + // JNet service + int[] predMap = null; // mapping from sequence(i) to the original + // sequence(predMap[i]) being predicted on + vamsas.objects.simple.Sequence sequence; + vamsas.objects.simple.Msfalignment msa; + java.util.Hashtable SequenceInfo = null; - int msaIndex=0; // the position of the original sequence in the array of Sequences in the input object that this job holds a prediction for + + int msaIndex = 0; // the position of the original sequence in the array of + // Sequences in the input object that this job holds a + // prediction for + /** - * - * @return true if getResultSet will return a valid alignment and prediction result. + * + * @return true if getResultSet will return a valid alignment and prediction + * result. */ public boolean hasResults() { if (subjobComplete && result != null && result.isFinished() - && ( (JpredResult) result).getPredfile() != null && - ( (JpredResult) result).getAligfile() != null) + && ((JpredResult) result).getPredfile() != null + && ((JpredResult) result).getAligfile() != null) { return true; } @@ -52,205 +74,271 @@ implements WSClientI } return false; } + /** * - * @return null or Object[] { annotated alignment for this prediction, ColumnSelection for this prediction} or null if no results available. + * @return null or Object[] { annotated alignment for this prediction, + * ColumnSelection for this prediction} or null if no results + * available. * @throws Exception */ - public Object[] getResultSet() - throws Exception + public Object[] getResultSet() throws Exception { if (result == null || !result.isFinished()) { return null; } Alignment al = null; - ColumnSelection alcsel=null; + ColumnSelection alcsel = null; int FirstSeq = -1; // the position of the query sequence in Alignment al - JpredResult result = (JpredResult)this.result; + JpredResult result = (JpredResult) this.result; jalview.bin.Cache.log.debug("Parsing output from JNet job."); - // JPredFile prediction = new JPredFile("C:/JalviewX/files/jpred.txt", "File"); - jalview.io.JPredFile prediction = new jalview.io.JPredFile(result. - getPredfile(), - "Paste"); + // JPredFile prediction = new JPredFile("C:/JalviewX/files/jpred.txt", + // "File"); + jalview.io.JPredFile prediction = new jalview.io.JPredFile(result + .getPredfile(), "Paste"); SequenceI[] preds = prediction.getSeqsAsArray(); jalview.bin.Cache.log.debug("Got prediction profile."); - if ( (this.msa != null) && (result.getAligfile() != null)) + if ((this.msa != null) && (result.getAligfile() != null)) { jalview.bin.Cache.log.debug("Getting associated alignment."); - // we ignore the returned alignment if we only predicted on a single sequence - String format = new jalview.io.IdentifyFile().Identify(result. - getAligfile(), - "Paste"); + // we ignore the returned alignment if we only predicted on a single + // sequence + String format = new jalview.io.IdentifyFile().Identify(result + .getAligfile(), "Paste"); if (jalview.io.FormatAdapter.isValidFormat(format)) { SequenceI sqs[]; - if (predMap!=null) { - Object[] alandcolsel = input.getAlignmentAndColumnSelection(alignFrame.getViewport().getGapCharacter()); + if (predMap != null) + { + Object[] alandcolsel = input + .getAlignmentAndColumnSelection(getGapChar()); sqs = (SequenceI[]) alandcolsel[0]; al = new Alignment(sqs); - alcsel=(ColumnSelection) alandcolsel[1]; - } else { - al = new Alignment(new FormatAdapter().readFile(result.getAligfile(), - "Paste", format)); + alcsel = (ColumnSelection) alandcolsel[1]; + } + else + { + al = new FormatAdapter().readFile(result.getAligfile(), + "Paste", format); sqs = new SequenceI[al.getHeight()]; for (int i = 0, j = al.getHeight(); i < j; i++) { sqs[i] = al.getSequenceAt(i); - } - if (!jalview.analysis.SeqsetUtils.deuniquify( (Hashtable) - SequenceInfo, sqs)) + } + if (!jalview.analysis.SeqsetUtils.deuniquify( + (Hashtable) SequenceInfo, sqs)) { throw (new Exception( - "Couldn't recover sequence properties for alignment.")); + "Couldn't recover sequence properties for alignment.")); } } FirstSeq = 0; al.setDataset(null); - jalview.io.JnetAnnotationMaker.add_annotation(prediction, al, FirstSeq, - false,predMap); + jalview.io.JnetAnnotationMaker.add_annotation(prediction, al, + FirstSeq, false, predMap); } else { - throw (new Exception( - "Unknown format "+format+" for file : \n" + - result.getAligfile())); + throw (new Exception("Unknown format " + format + + " for file : \n" + result.getAligfile())); } } else { al = new Alignment(preds); FirstSeq = prediction.getQuerySeqPosition(); - if (predMap!=null) { - char gc = alignFrame.getViewport().getGapCharacter(); - SequenceI[] sqs = (SequenceI[]) ((java.lang.Object[]) input.getAlignmentAndColumnSelection(gc))[0]; - if (this.msaIndex>=sqs.length) - throw new Error("Implementation Error! Invalid msaIndex for JPredJob on parent MSA input object!"); - sqs[msaIndex].removeGaps(); - SequenceI profileseq=al.getSequenceAt(FirstSeq); - profileseq.setSequence(sqs[msaIndex].getSequence()); + if (predMap != null) + { + char gc = getGapChar(); + SequenceI[] sqs = (SequenceI[]) ((java.lang.Object[]) input + .getAlignmentAndColumnSelection(gc))[0]; + if (this.msaIndex >= sqs.length) + { + throw new Error( + "Implementation Error! Invalid msaIndex for JPredJob on parent MSA input object!"); + } + + // /// + // Uses RemoveGapsCommand + // /// + new jalview.commands.RemoveGapsCommand("Remove Gaps", + new SequenceI[] + { sqs[msaIndex] }, currentView); + + SequenceI profileseq = al.getSequenceAt(FirstSeq); + profileseq.setSequence(sqs[msaIndex].getSequenceAsString()); } - if (!jalview.analysis.SeqsetUtils.SeqCharacterUnhash( - al.getSequenceAt(FirstSeq), SequenceInfo)) + if (!jalview.analysis.SeqsetUtils.SeqCharacterUnhash(al + .getSequenceAt(FirstSeq), SequenceInfo)) { throw (new Exception( - "Couldn't recover sequence properties for JNet Query sequence!")); - } else { + "Couldn't recover sequence properties for JNet Query sequence!")); + } + else + { al.setDataset(null); - jalview.io.JnetAnnotationMaker.add_annotation(prediction, al, FirstSeq, - true, predMap); - SequenceI profileseq=al.getSequenceAt(0); // this includes any gaps. + jalview.io.JnetAnnotationMaker.add_annotation(prediction, al, + FirstSeq, true, predMap); + SequenceI profileseq = al.getSequenceAt(0); // this includes any gaps. alignToProfileSeq(al, profileseq); - if (predMap!=null) { + if (predMap != null) + { // Adjust input view for gaps // propagate insertions into profile - alcsel=propagateInsertions(profileseq, al, input); + alcsel = propagateInsertions(profileseq, al, input); } } } - return new Object[] { al, alcsel}; // , FirstSeq, noMsa}; + return new Object[] + { al, alcsel }; // , FirstSeq, noMsa}; } + /** - * Given an alignment where all other sequences except profileseq are aligned to the ungapped profileseq, insert gaps in the other sequences to realign them with the residues in profileseq + * Given an alignment where all other sequences except profileseq are + * aligned to the ungapped profileseq, insert gaps in the other sequences to + * realign them with the residues in profileseq + * * @param al * @param profileseq */ - private void alignToProfileSeq(Alignment al, SequenceI profileseq) { + private void alignToProfileSeq(Alignment al, SequenceI profileseq) + { char gc = al.getGapCharacter(); int[] gapMap = profileseq.gapMap(); // insert gaps into profile - for (int lp=0,r=0; r1) { - StringBuffer sb=new StringBuffer(); - for (int s=0, ns=gapMap[r]-lp; s 1) + { + StringBuffer sb = new StringBuffer(); + for (int s = 0, ns = gapMap[r] - lp; s < ns; s++) + { sb.append(gc); } - for (int s=1,ns=al.getHeight(); s0) { + for (int s = 1, ns = al.getHeight(); s < ns; s++) + { + String sq = al.getSequenceAt(s).getSequenceAsString(); + int diff = gapMap[r] - sq.length(); + if (diff > 0) + { // pad gaps - sq=sq+sb; - while ((diff=gapMap[r]-sq.length())>0) { - sq=sq+((diff>=sb.length()) ? sb.toString() : sb.substring(0, diff)); + sq = sq + sb; + while ((diff = gapMap[r] - sq.length()) > 0) + { + sq = sq + + ((diff >= sb.length()) ? sb.toString() : sb + .substring(0, diff)); } al.getSequenceAt(s).setSequence(sq); - } else { - al.getSequenceAt(s).setSequence(sq.substring(0,gapMap[r])+sb.toString()+sq.substring(gapMap[r])); + } + else + { + al.getSequenceAt(s).setSequence( + sq.substring(0, gapMap[r]) + sb.toString() + + sq.substring(gapMap[r])); } } } - lp=gapMap[r]; + lp = gapMap[r]; } } /** - * Add gaps into the sequences aligned to profileseq under the given AlignmentView + * Add gaps into the sequences aligned to profileseq under the given + * AlignmentView + * * @param profileseq * @param al * @param input */ - private ColumnSelection propagateInsertions(SequenceI profileseq, Alignment al, AlignmentView input) { + private ColumnSelection propagateInsertions(SequenceI profileseq, + Alignment al, AlignmentView input) + { char gc = al.getGapCharacter(); Object[] alandcolsel = input.getAlignmentAndColumnSelection(gc); ColumnSelection nview = (ColumnSelection) alandcolsel[1]; SequenceI origseq; - nview.pruneDeletions(ShiftList.parseMap((origseq=((SequenceI[]) alandcolsel[0])[0]).gapMap())); // recover original prediction sequence's mapping to view. - int[] viscontigs=nview.getVisibleContigs(0, profileseq.getLength()); - int spos=0; - int offset=0; - // input.pruneDeletions(ShiftList.parseMap(((SequenceI[]) alandcolsel[0])[0].gapMap())) + nview.pruneDeletions(ShiftList + .parseMap((origseq = ((SequenceI[]) alandcolsel[0])[0]) + .gapMap())); // recover original prediction sequence's + // mapping to view. + int[] viscontigs = nview.getVisibleContigs(0, profileseq.getLength()); + int spos = 0; + int offset = 0; + // input.pruneDeletions(ShiftList.parseMap(((SequenceI[]) + // alandcolsel[0])[0].gapMap())) // add profile to visible contigs - for (int v=0; vspos) { - StringBuffer sb=new StringBuffer(); - for (int s=0, ns=viscontigs[v]-spos; s spos) + { + StringBuffer sb = new StringBuffer(); + for (int s = 0, ns = viscontigs[v] - spos; s < ns; s++) + { sb.append(gc); } - for (int s=0,ns=al.getHeight(); s0) { + int diff = spos + offset - sq.length() - 1; + if (diff > 0) + { // pad gaps - sq=sq+sb; - while ((diff=spos+offset-sq.length()-1)>0) { - sq=sq+((diff>=sb.length()) ? sb.toString() : sb.substring(0, diff)); + sq = sq + sb; + while ((diff = spos + offset - sq.length() - 1) > 0) + { + sq = sq + + ((diff >= sb.length()) ? sb.toString() : sb + .substring(0, diff)); } } - sq+=sb.toString(); - } else { - al.getSequenceAt(s).setSequence(sq.substring(0,spos+offset)+sb.toString()+sq.substring(spos+offset)); + sq += sb.toString(); + } + else + { + al.getSequenceAt(s).setSequence( + sq.substring(0, spos + offset) + sb.toString() + + sq.substring(spos + offset)); } } } - //offset+=sb.length(); + // offset+=sb.length(); } - spos = viscontigs[v+1]+1; + spos = viscontigs[v + 1] + 1; } - if ((offset+spos)0) { - sq=sq+((diff>=sb.length()) ? sb.toString() : sb.substring(0, diff)); - diff=origseq.getLength()-sq.length(); + int diff = origseq.getLength() - sq.length(); + while (diff > 0) + { + sq = sq + + ((diff >= sb.length()) ? sb.toString() : sb + .substring(0, diff)); + diff = origseq.getLength() - sq.length(); } } } @@ -261,7 +349,8 @@ implements WSClientI { super(); this.predMap = delMap; - String sq = AlignSeq.extractGaps(Comparison.GapChars, seq.getSequence()); + String sq = AlignSeq.extractGaps(Comparison.GapChars, seq + .getSequenceAsString()); if (sq.length() >= 20) { this.SequenceInfo = SequenceInfo; @@ -285,52 +374,59 @@ implements WSClientI } } } + ext.vamsas.Jpred server; + String altitle = ""; - JPredThread(WebserviceInfo wsinfo, String altitle, ext.vamsas.Jpred server, String wsurl, AlignmentView alview, AlignFrame alframe) { - super(); + + JPredThread(WebserviceInfo wsinfo, String altitle, + ext.vamsas.Jpred server, String wsurl, AlignmentView alview, + AlignFrame alframe) + { + super(alframe, wsinfo, alview, wsurl); this.altitle = altitle; this.server = server; - this.wsInfo = wsinfo; - this.input = alview; - this.alignFrame = alframe; - WsUrl = wsurl; } - - JPredThread(WebserviceInfo wsinfo, String altitle, ext.vamsas.Jpred server, String wsurl, Hashtable SequenceInfo,SequenceI seq, int[] delMap, AlignmentView alview, AlignFrame alframe) + JPredThread(WebserviceInfo wsinfo, String altitle, + ext.vamsas.Jpred server, String wsurl, Hashtable SequenceInfo, + SequenceI seq, int[] delMap, AlignmentView alview, + AlignFrame alframe) { - this(wsinfo, altitle, server,wsurl, alview, alframe); + this(wsinfo, altitle, server, wsurl, alview, alframe); JPredJob job = new JPredJob(SequenceInfo, seq, delMap); if (job.hasValidInput()) { OutputHeader = wsInfo.getProgressText(); jobs = new WSJob[] - { - job}; + { job }; job.jobnum = 0; } } - JPredThread(WebserviceInfo wsinfo, String altitle, ext.vamsas.Jpred server, Hashtable SequenceInfo, SequenceI[] msf, int[] delMap, AlignmentView alview, AlignFrame alframe, String wsurl) + JPredThread(WebserviceInfo wsinfo, String altitle, + ext.vamsas.Jpred server, Hashtable SequenceInfo, SequenceI[] msf, + int[] delMap, AlignmentView alview, AlignFrame alframe, + String wsurl) { - this(wsinfo, altitle, server,wsurl, alview, alframe); + this(wsinfo, altitle, server, wsurl, alview, alframe); JPredJob job = new JPredJob(SequenceInfo, msf, delMap); if (job.hasValidInput()) { jobs = new WSJob[] - { - job}; + { job }; OutputHeader = wsInfo.getProgressText(); job.jobnum = 0; } } + void StartJob(WSJob j) { - if (! (j instanceof JPredJob)) + if (!(j instanceof JPredJob)) { - throw new Error("Implementation error - StartJob(JpredJob) called on " + - j.getClass()); + throw new Error( + "Implementation error - StartJob(JpredJob) called on " + + j.getClass()); } try { @@ -339,19 +435,20 @@ implements WSClientI { job.jobId = server.predictOnMsa(job.msa); } - else - if (job.sequence!=null) - { - job.jobId = server.predict(job.sequence); // debug like : job.jobId = "/jobs/www-jpred/jp_Yatat29";// - } + else if (job.sequence != null) + { + job.jobId = server.predict(job.sequence); // debug like : job.jobId = + // "/jobs/www-jpred/jp_Yatat29";// + } if (job.jobId != null) { if (job.jobId.startsWith("Broken")) { - job.result = (vamsas.objects.simple.Result)new JpredResult(); + job.result = (vamsas.objects.simple.Result) new JpredResult(); job.result.setInvalid(true); job.result.setStatus("Submission " + job.jobId); + throw new Exception(job.jobId); } else { @@ -364,19 +461,23 @@ implements WSClientI { throw new Exception("Server timed out - try again later\n"); } - } - catch (Exception e) + } catch (Exception e) { + // kill the whole job. + wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_SERVERERROR); if (e.getMessage().indexOf("Exception") > -1) { - wsInfo.setStatus(j.jobnum, WebserviceInfo.STATE_STOPPED_SERVERERROR); - wsInfo.setProgressText(j.jobnum, - "Failed to submit the prediction. (Just close the window)\n" - + - "It is most likely that there is a problem with the server.\n"); - System.err.println( - "JPredWS Client: Failed to submit the prediction. Quite possibly because of a server error - see below)\n" + - e.getMessage() + "\n"); + wsInfo + .setStatus(j.jobnum, + WebserviceInfo.STATE_STOPPED_SERVERERROR); + wsInfo + .setProgressText( + j.jobnum, + "Failed to submit the prediction. (Just close the window)\n" + + "It is most likely that there is a problem with the server.\n"); + System.err + .println("JPredWS Client: Failed to submit the prediction. Quite possibly because of a server error - see below)\n" + + e.getMessage() + "\n"); jalview.bin.Cache.log.warn("Server Exception", e); } @@ -385,11 +486,11 @@ implements WSClientI wsInfo.setStatus(j.jobnum, WebserviceInfo.STATE_STOPPED_ERROR); // JBPNote - this could be a popup informing the user of the problem. wsInfo.appendProgressText(j.jobnum, - "Failed to submit the prediction:\n" - + e.getMessage() + - wsInfo.getProgressText()); + "Failed to submit the prediction:\n" + e.getMessage() + + wsInfo.getProgressText()); - jalview.bin.Cache.log.debug("Failed Submission of job " + j.jobnum, e); + jalview.bin.Cache.log.debug("Failed Submission of job " + j.jobnum, + e); } j.allowedServerExceptions = -1; @@ -406,39 +507,37 @@ implements WSClientI for (int j = 0; j < jobs.length; j++) { finalState.updateJobPanelState(wsInfo, OutputHeader, jobs[j]); - if (jobs[j].submitted && jobs[j].subjobComplete && jobs[j].hasResults()) + if (jobs[j].submitted && jobs[j].subjobComplete + && jobs[j].hasResults()) { results++; } } - } - catch (Exception ex) + } catch (Exception ex) { - Cache.log.error("Unexpected exception when processing results for " + - altitle, ex); + Cache.log.error("Unexpected exception when processing results for " + + altitle, ex); wsInfo.setStatus(WebserviceInfo.STATE_STOPPED_ERROR); } if (results > 0) { wsInfo.showResultsNewFrame - .addActionListener(new java.awt.event.ActionListener() - { - public void actionPerformed( - java.awt.event.ActionEvent evt) - { - displayResults(true); - } - }); + .addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(java.awt.event.ActionEvent evt) + { + displayResults(true); + } + }); wsInfo.mergeResults - .addActionListener(new java.awt.event.ActionListener() - { - public void actionPerformed( - java.awt.event.ActionEvent evt) - { - displayResults(false); - } - }); + .addActionListener(new java.awt.event.ActionListener() + { + public void actionPerformed(java.awt.event.ActionEvent evt) + { + displayResults(false); + } + }); wsInfo.setResultsReady(); } else @@ -453,7 +552,7 @@ implements WSClientI if (jobs != null) { Object[] res = null; - boolean msa=false; + boolean msa = false; for (int jn = 0; jn < jobs.length; jn++) { Object[] jobres = null; @@ -461,31 +560,32 @@ implements WSClientI if (j.hasResults()) { - // hack - we only deal with all single seuqence predictions or all profile predictions - msa = (j.msa!=null) ? true : msa; + // hack - we only deal with all single seuqence predictions or all + // profile predictions + msa = (j.msa != null) ? true : msa; try { jalview.bin.Cache.log.debug("Parsing output of job " + jn); jobres = j.getResultSet(); jalview.bin.Cache.log.debug("Finished parsing output."); - if (jobs.length==1) + if (jobs.length == 1) + { res = jobres; - else { + } + else + { // do merge with other job results - throw new Error("Multiple JNet subjob merging not yet implemented."); + throw new Error( + "Multiple JNet subjob merging not yet implemented."); } - } - catch (Exception e) + } catch (Exception e) { jalview.bin.Cache.log.error( - "JNet Client: JPred Annotation Parse Error", - e); + "JNet Client: JPred Annotation Parse Error", e); wsInfo.setStatus(j.jobnum, WebserviceInfo.STATE_STOPPED_ERROR); - wsInfo.appendProgressText(j.jobnum, - OutputHeader + "\n" + - j.result.getStatus() + - "\nInvalid JNet job result data!\n" + - e.getMessage()); + wsInfo.appendProgressText(j.jobnum, OutputHeader + "\n" + + j.result.getStatus() + + "\nInvalid JNet job result data!\n" + e.getMessage()); j.result.setBroken(true); } } @@ -496,30 +596,41 @@ implements WSClientI if (newWindow) { AlignFrame af; - if (input==null) { - if (res[1]!=null) { - af = new AlignFrame((Alignment)res[0], (ColumnSelection) res[1], AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); - } else { - af = new AlignFrame((Alignment)res[0], AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + if (input == null) + { + if (res[1] != null) + { + af = new AlignFrame((Alignment) res[0], + (ColumnSelection) res[1], AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); } - } else { - /*java.lang.Object[] alandcolsel = input.getAlignmentAndColumnSelection(alignFrame.getViewport().getGapCharacter()); - - if (((SequenceI[])alandcolsel[0])[0].getLength()!=res.getWidth()) { - if (msa) { - throw new Error("Implementation Error! ColumnSelection from input alignment will not map to result alignment!"); - } + else + { + af = new AlignFrame((Alignment) res[0], + AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); } - if (!msa) { - // update hidden regions to account for loss of gaps in profile. - if any - // gapMap returns insert list, interpreted as delete list by pruneDeletions - //((ColumnSelection) alandcolsel[1]).pruneDeletions(ShiftList.parseMap(((SequenceI[]) alandcolsel[0])[0].gapMap())); - }*/ - - af = new AlignFrame((Alignment) res[0], (ColumnSelection) res[1],AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); } - Desktop.addInternalFrame(af, altitle, - AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT); + else + { + /* + * java.lang.Object[] alandcolsel = + * input.getAlignmentAndColumnSelection(alignFrame.getViewport().getGapCharacter()); + * if (((SequenceI[])alandcolsel[0])[0].getLength()!=res.getWidth()) { + * if (msa) { throw new Error("Implementation Error! ColumnSelection + * from input alignment will not map to result alignment!"); } } if + * (!msa) { // update hidden regions to account for loss of gaps in + * profile. - if any // gapMap returns insert list, interpreted as + * delete list by pruneDeletions //((ColumnSelection) + * alandcolsel[1]).pruneDeletions(ShiftList.parseMap(((SequenceI[]) + * alandcolsel[0])[0].gapMap())); } + */ + + af = new AlignFrame((Alignment) res[0], + (ColumnSelection) res[1], AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); + } + Desktop.addInternalFrame(af, altitle, AlignFrame.DEFAULT_WIDTH, + AlignFrame.DEFAULT_HEIGHT); } else { @@ -528,11 +639,12 @@ implements WSClientI } } } - void pollJob(WSJob job) - throws Exception + + void pollJob(WSJob job) throws Exception { job.result = server.getresult(job.jobId); } + public boolean isCancellable() { return false; @@ -549,5 +661,3 @@ implements WSClientI } } - -