From: jprocter Date: Mon, 14 Aug 2006 08:46:44 +0000 (+0000) Subject: fixing residue clip bug in MsaWSThread and adding minimum sequence length constraints. X-Git-Tag: Release_2_1~87 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=b31d6ded1992d8d8ea16f4321672b432b425693c;p=jalview.git fixing residue clip bug in MsaWSThread and adding minimum sequence length constraints. --- diff --git a/src/jalview/datamodel/SeqCigar.java b/src/jalview/datamodel/SeqCigar.java index 816e531..08c66d2 100644 --- a/src/jalview/datamodel/SeqCigar.java +++ b/src/jalview/datamodel/SeqCigar.java @@ -62,10 +62,11 @@ public class SeqCigar throw new Error( "Implementation Error - unexpected null from getSequenceAndDeletions"); } - + int bounds[] = (int[]) edit_result[1]; seq = new Sequence(refseq.getName(), (String) edit_result[0], - refseq.getStart() + start+( (int[]) edit_result[1])[0], - refseq.getStart() + start+( (int[]) edit_result[1])[2]); + refseq.getStart() + start+bounds[0], + refseq.getStart() + start+((bounds[2]==0) ? -1 : bounds[2])); + // seq.checkValidRange(); probably not needed seq.setDatasetSequence(refseq); return seq; } diff --git a/src/jalview/ws/MsaWSThread.java b/src/jalview/ws/MsaWSThread.java index d51bc76..090af4e 100644 --- a/src/jalview/ws/MsaWSThread.java +++ b/src/jalview/ws/MsaWSThread.java @@ -74,7 +74,14 @@ class MsaWSThread extends Thread implements WSClientI { */ public MsaWSJob(int jobNum, SequenceI[] inSeqs) { this.jobnum = jobNum; - prepareInput(inSeqs); + if (!prepareInput(inSeqs,2)) { + submitted=true; + subjobComplete=true; + result = new MsaResult(); + result.setFinished(true); + result.setStatus("Job never ran - input returned to user."); + } + } int allowedServerExceptions = 3; // thread dies if too many @@ -85,15 +92,24 @@ class MsaWSThread extends Thread implements WSClientI { Hashtable SeqNames = new Hashtable(); Vector emptySeqs = new Vector(); - private void prepareInput(SequenceI[] seqs) { + /** + * prepare input sequences for MsaWS service + * @param seqs jalview sequences to be prepared + * @param minlen minimum number of residues required for this MsaWS service + * @return true if seqs contains sequences to be submitted to service. + */ + private boolean prepareInput(SequenceI[] seqs, int minlen) { int nseqs = 0; + if (minlen<0) + throw new Error("Implementation error: minlen must be zero or more."); for (int i = 0; i < seqs.length; i++) { - if (seqs[i].getStart() < seqs[i].getEnd()) { + if (seqs[i].getEnd()-seqs[i].getStart()>minlen-1) { nseqs++; } } + boolean valid=nseqs>1; // need at least two seqs vamsas.objects.simple.Sequence[] seqarray = - (nseqs>0) + (valid) ? new vamsas.objects.simple.Sequence[nseqs] :null; for (int i = 0, n = 0; i < seqs.length; i++) { @@ -104,7 +120,7 @@ class MsaWSThread extends Thread implements WSClientI { // subjob SeqNames.put(newname, jalview.analysis.SeqsetUtils .SeqCharacterHash(seqs[i])); - if (seqs[i].getStart() < seqs[i].getEnd()) { + if (valid && seqs[i].getEnd()-seqs[i].getStart()>minlen-1) { seqarray[n] = new vamsas.objects.simple.Sequence(); seqarray[n].setId(newname); seqarray[n++].setSeq((submitGaps) ? seqs[i].getSequence() @@ -112,11 +128,19 @@ class MsaWSThread extends Thread implements WSClientI { jalview.util.Comparison.GapChars, seqs[i] .getSequence())); } else { - emptySeqs.add(newname); + String empty=null; + if (seqs[i].getEnd()>=seqs[i].getStart()) { + empty = (submitGaps) ? seqs[i].getSequence() + : AlignSeq.extractGaps( + jalview.util.Comparison.GapChars, seqs[i] + .getSequence()); + } + emptySeqs.add(new String[] { newname, empty}); } } this.seqs = new vamsas.objects.simple.SequenceSet(); this.seqs.setSeqs(seqarray); + return valid; } /** * @@ -150,12 +174,40 @@ class MsaWSThread extends Thread implements WSClientI { alseqs[i] = null; } } + // check that aligned width is at least as wide as emptySeqs width. + int ow=w,nw=w; + for (i=0, w=emptySeqs.size(); isw) { + // pad at end + alseqs[i].setSequence(t_alseqs[i].getSequence()+insbuff.substring(0,sw-nw)); + } + } + } for (i=0, w=emptySeqs.size(); i=hseq.getStart()) + alignment[s].setEnd(hseq.getEnd()); } } // mark hidden segment as hidden in the new alignment @@ -632,7 +685,7 @@ class MsaWSThread extends Thread implements WSClientI { cshift+=contigs[contig+2]; } // Do final job - if it exists - if (j=mseq[s].getStart()) + alignment[s].setEnd(mseq[s].getEnd()); ((AlignmentOrder) subalg[1]).updateSequence(mseq[s], alignment[s]); } }