X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=src%2Fjalview%2Fworkers%2FStrucConsensusThread.java;h=4a0f41d39d5f6e78e6a54d964b0b41868424619e;hp=6f816761d928984a90f5011aa0063a945a08d489;hb=7301a2415adab88038b291fc54caeeb3a5a47a44;hpb=6154cb57a6eac3bb1344b8342495f5bb701ee921 diff --git a/src/jalview/workers/StrucConsensusThread.java b/src/jalview/workers/StrucConsensusThread.java index 6f81676..4a0f41d 100644 --- a/src/jalview/workers/StrucConsensusThread.java +++ b/src/jalview/workers/StrucConsensusThread.java @@ -31,16 +31,27 @@ import jalview.datamodel.SequenceI; import java.util.Hashtable; +/** + * + * untested + * + * @author Bob Hanson + * + */ public class StrucConsensusThread extends AlignCalcWorker implements AlignCalcWorkerI { + private AlignmentAnnotation rnaStruc = null; private AlignmentAnnotation strucConsensus; private Hashtable[] hStrucConsensus; private long nseq = -1; + private AlignmentAnnotation[] aa; + private SequenceI[] arr; + @Override public AlignCalcWorkerI getNewWorker() { @@ -53,108 +64,106 @@ public class StrucConsensusThread extends AlignCalcWorker implements super(alignViewport, alignPanel); } - @Override - public void run() - { - try - { - if (calcMan.isPending(this)) - { - return; - } - calcMan.notifyStart(this); - while (!calcMan.notifyWorking(this)) - { - try - { - if (ap != null) - { - // ap.paintAlignment(false); - } - - Thread.sleep(200); - } catch (Exception ex) - { - ex.printStackTrace(); - } - } - if (alignViewport.isClosed()) - { - abortAndDestroy(); - return; - } - AlignmentI alignment = alignViewport.getAlignment(); - - int aWidth = -1; - - if (alignment == null || (aWidth = alignment.getWidth()) < 0) - { - calcMan.workerComplete(this); - return; - } - strucConsensus = alignViewport.getAlignmentStrucConsensusAnnotation(); - hStrucConsensus = alignViewport.getRnaStructureConsensusHash(); - strucConsensus.annotations = null; - strucConsensus.annotations = new Annotation[aWidth]; - - hStrucConsensus = new Hashtable[aWidth]; - - AlignmentAnnotation[] aa = alignViewport.getAlignment() - .getAlignmentAnnotation(); - AlignmentAnnotation rnaStruc = null; - // select rna struct to use for calculation - for (int i = 0; i < aa.length; i++) - { - if (aa[i].getRNAStruc() != null && aa[i].isValidStruc()) - { - rnaStruc = aa[i]; - break; - } - } - // check to see if its valid - - if (rnaStruc == null || !rnaStruc.isValidStruc()) - { - calcMan.workerComplete(this); - return; - } - - try - { - final SequenceI[] arr = alignment.getSequencesArray(); - nseq = arr.length; - StructureFrequency.calculate(arr, 0, + @Override + protected void run1(int state) { + if (alignViewport.isClosed()) { + abortAndDestroy(); + return; + } + while (!interrupted()) { + try { + switch (state) { + case INIT: + if (calcMan.isPending(this)) + return; + calcMan.notifyStart(this); + state = LOOP_STANDBY; + break; + case LOOP_STANDBY: + while (!calcMan.notifyWorking(this)) { + if (ap != null) { + ap.paintAlignment(false); + } + try { + if (sleepAndReturn(200, state)) + return; + } catch (InterruptedException e) { + state = DONE; + break; + } + } + if (alignViewport.isClosed()) { + abortAndDestroy(); + state = DONE; + break; + } + alignment = alignViewport.getAlignment(); + aWidth = -1; + if (alignment == null || (aWidth = alignment.getWidth()) < 0) { + state = DONE; + } + strucConsensus = alignViewport.getAlignmentStrucConsensusAnnotation(); + hStrucConsensus = alignViewport.getRnaStructureConsensusHash(); + strucConsensus.annotations = null; + strucConsensus.annotations = new Annotation[aWidth]; + + hStrucConsensus = new Hashtable[aWidth]; + + aa = alignViewport.getAlignment().getAlignmentAnnotation(); + // select rna struct to use for calculation + for (int i = 0; i < aa.length; i++) + { + if (aa[i].getRNAStruc() != null && aa[i].isValidStruc()) + { + rnaStruc = aa[i]; + break; + } + } + // check to see if its valid + + if (rnaStruc == null || !rnaStruc.isValidStruc()) + { + calcMan.workerComplete(this); + return; + } + arr = alignment.getSequencesArray(); + nseq = arr.length; + + state = LOOP_CALCULATE; + break; + case LOOP_CALCULATE: + iFirst = iLast; + iLast = Math.min(iLast + nPer, aWidth); + if (iLast == iFirst) { + state = DONE; + } else { + StructureFrequency.calculate(arr, 0, alignment.getWidth(), hStrucConsensus, true, rnaStruc); - } catch (ArrayIndexOutOfBoundsException x) - { - calcMan.workerComplete(this); - return; - } - alignViewport.setRnaStructureConsensusHash(hStrucConsensus); - // TODO AlignmentAnnotation rnaStruc!!! - updateResultAnnotation(true); - if (alignViewport.getGlobalColourScheme() != null) - { - alignViewport.getGlobalColourScheme().setConsensus(hStrucConsensus); - } - - } catch (OutOfMemoryError error) - { - calcMan.workerCannotRun(this); - - // consensus = null; - // hconsensus = null; - ap.raiseOOMWarning("calculating RNA structure consensus", error); - } finally - { - calcMan.workerComplete(this); - if (ap != null) - { - ap.paintAlignment(true); - } - } - - } + if (sleepAndReturn(0, state)) + return; + } + break; + case DONE: + alignViewport.setRnaStructureConsensusHash(hStrucConsensus); + // TODO AlignmentAnnotation rnaStruc!!! + updateResultAnnotation(true); + if (alignViewport.getGlobalColourScheme() != null) + { + alignViewport.getGlobalColourScheme().setConsensus(hStrucConsensus); + } + notifyDone(); + return; + } + } catch (OutOfMemoryError error) { + calcMan.workerCannotRun(this); + ap.raiseOOMWarning("calculating RNA structure consensus", error); + } catch (Throwable e) { + System.out.println("Error in ConsensusThread: " + e); + e.printStackTrace(); + calcMan.workerComplete(this); + } + } + } /** * update the consensus annotation from the sequence profile data using @@ -178,10 +187,4 @@ public class StrucConsensusThread extends AlignCalcWorker implements } } - @Override - protected void run1(int state) { - // TODO Auto-generated method stub - - } - }