From 34286266321abbbab6d462c39f500650f9c860c9 Mon Sep 17 00:00:00 2001 From: jprocter Date: Thu, 27 Oct 2011 12:22:33 +0100 Subject: [PATCH] (JAL-961) refactored consensus and rna structure consensus workers from alignViewport(s) --- src/jalview/workers/ConsensusThread.java | 117 ++++++++++++++++++++++++ src/jalview/workers/StrucConsensusThread.java | 122 +++++++++++++++++++++++++ 2 files changed, 239 insertions(+) create mode 100644 src/jalview/workers/ConsensusThread.java create mode 100644 src/jalview/workers/StrucConsensusThread.java diff --git a/src/jalview/workers/ConsensusThread.java b/src/jalview/workers/ConsensusThread.java new file mode 100644 index 0000000..7dd25f8 --- /dev/null +++ b/src/jalview/workers/ConsensusThread.java @@ -0,0 +1,117 @@ +package jalview.workers; + +import jalview.analysis.AAFrequency; +import jalview.api.AlignCalcWorkerI; +import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Annotation; +import jalview.schemes.ColourSchemeI; + +import java.util.Hashtable; + +public class ConsensusThread extends AlignCalcWorker implements AlignCalcWorkerI +{ + public ConsensusThread(AlignViewportI alignViewport, + AlignmentViewPanel alignPanel) + { + super(alignViewport, alignPanel); + } + + public void run() + { + try + { + AlignmentAnnotation consensus = alignViewport.getAlignmentConsensusAnnotation(); + if (consensus==null) { return; + } + calcMan.notifyStart(this); + while (!calcMan.notifyWorking(this)) + { + try + { + if (ap != null) + { + ap.paintAlignment(false); + } + + Thread.sleep(200); + } catch (Exception ex) + { + ex.printStackTrace(); + } + } + calcMan.notifyWorking(this); + if (alignViewport.isClosed()) + { + abortAndDestroy(); + } + AlignmentI alignment = alignViewport.getAlignment(); + + int aWidth = -1; + + if (alignment == null || (aWidth = alignment.getWidth()) < 0) + { + calcMan.workerComplete(this); + // .updatingConservation = false; + // AlignViewport.UPDATING_CONSERVATION = false; + + return; + } + consensus = alignViewport + .getAlignmentConsensusAnnotation(); + + consensus.annotations = null; + consensus.annotations = new Annotation[aWidth]; + Hashtable[] hconsensus = alignViewport.getSequenceConsensusHash(); + hconsensus = new Hashtable[aWidth]; + AAFrequency.calculate(alignment.getSequencesArray(), 0, + alignment.getWidth(), hconsensus, true); + alignViewport.setSequenceConsensusHash(hconsensus); + updateResultAnnotation(true); + ColourSchemeI globalColourScheme = alignViewport + .getGlobalColourScheme(); + if (globalColourScheme != null) + { + globalColourScheme.setConsensus(hconsensus); + } + + } catch (OutOfMemoryError error) + { + calcMan.workerCannotRun(this); + + // consensus = null; + // hconsensus = null; + ap.raiseOOMWarning("calculating consensus", error); + } + + calcMan.workerComplete(this); + if (ap != null) + { + ap.paintAlignment(true); + } + } + + /** + * update the consensus annotation from the sequence profile data using + * current visualization settings. + */ + public void updateAnnotation() + { + updateResultAnnotation(false); + } + + public void updateResultAnnotation(boolean immediate) + { + AlignmentAnnotation consensus = alignViewport + .getAlignmentConsensusAnnotation(); + Hashtable[] hconsensus = alignViewport.getSequenceConsensusHash(); + if (immediate || !calcMan.isWorking(this) && consensus!=null && hconsensus!=null) + { + AAFrequency.completeConsensus(consensus, hconsensus, 0, + hconsensus.length, alignViewport.getIgnoreGapsConsensus(), + alignViewport.isShowSequenceLogo()); + } + } +} diff --git a/src/jalview/workers/StrucConsensusThread.java b/src/jalview/workers/StrucConsensusThread.java new file mode 100644 index 0000000..eda64b5 --- /dev/null +++ b/src/jalview/workers/StrucConsensusThread.java @@ -0,0 +1,122 @@ +package jalview.workers; + +import java.util.Hashtable; + +import jalview.analysis.AAFrequency; +import jalview.analysis.StructureFrequency; +import jalview.api.AlignCalcWorkerI; +import jalview.api.AlignViewportI; +import jalview.api.AlignmentViewPanel; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Annotation; + +public class StrucConsensusThread extends AlignCalcWorker implements AlignCalcWorkerI +{ + public StrucConsensusThread(AlignViewportI alignViewport, + AlignmentViewPanel alignPanel) + { + super(alignViewport, alignPanel); + } + public void run() + { + try + { + 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(); + } + AlignmentI alignment = alignViewport.getAlignment(); + + int aWidth = -1; + + if (alignment == null || (aWidth = alignment.getWidth()) < 0) + { + calcMan.workerComplete(this); + return; + } + AlignmentAnnotation strucConsensus=alignViewport.getAlignmentStrucConsensusAnnotation(); + Hashtable[] hStrucConsensus=alignViewport.getRnaStructureConsensusHash(); + strucConsensus.annotations = null; + strucConsensus.annotations = new Annotation[aWidth]; + + hStrucConsensus = new Hashtable[aWidth]; + + AlignmentAnnotation[] aa = alignViewport.getAlignment() + .getAlignmentAnnotation(); + AlignmentAnnotation rnaStruc = null; + for (int i = 0; i < aa.length; i++) + { + if (aa[i].getRNAStruc() != null) + { + rnaStruc = aa[i]; + break; + } + } + + jalview.analysis.StructureFrequency.calculate(alignment.getSequencesArray(), 0, + alignment.getWidth(), hStrucConsensus, true, rnaStruc); + 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); + } + + calcMan.workerComplete(this); + if (ap != null) + { + ap.paintAlignment(true); + } + + } + /** + * update the consensus annotation from the sequence profile data using + * current visualization settings. + */ + public void updateAnnotation() + { + updateResultAnnotation(false); + } + + public void updateResultAnnotation(boolean immediate) + { + AlignmentAnnotation strucConsensus = alignViewport + .getAlignmentStrucConsensusAnnotation(); + Hashtable[] hStrucConsensus = alignViewport.getRnaStructureConsensusHash(); + if (immediate || !calcMan.isWorking(this) && strucConsensus!=null && hStrucConsensus!=null) + { + StructureFrequency.completeConsensus(strucConsensus, + hStrucConsensus, 0, hStrucConsensus.length, + alignViewport.getIgnoreGapsConsensus(), + alignViewport.isShowSequenceLogo()); + } + } + +} \ No newline at end of file -- 1.7.10.2