(JAL-961) use simplified notification logic to test if calculation can start
[jalview.git] / src / jalview / workers / ConservationThread.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
3  * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
10  * 
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package jalview.workers;
19
20 import jalview.analysis.Conservation;
21 import jalview.api.AlignCalcWorkerI;
22 import jalview.api.AlignmentViewPanel;
23 import jalview.api.AlignViewportI;
24 import jalview.datamodel.AlignmentAnnotation;
25 import jalview.datamodel.AlignmentI;
26
27 public class ConservationThread extends AlignCalcWorker implements AlignCalcWorkerI
28 {
29
30   private int ConsPercGaps = 25; // JBPNote : This should be a configurable property!
31   
32   public ConservationThread(AlignViewportI alignViewport, AlignmentViewPanel alignPanel)
33   {
34     super(alignViewport, alignPanel);
35     ConsPercGaps = alignViewport.getConsPercGaps();
36   }
37
38   public void run()
39   {
40     try
41     {
42       calcMan.notifyStart(this); // updatingConservation = true;
43
44       while (!calcMan.notifyWorking(this)) 
45       {
46         try
47         {
48           if (ap != null)
49           {
50             ap.paintAlignment(false);
51           }
52           Thread.sleep(200);
53         } catch (Exception ex)
54         {
55           ex.printStackTrace();
56         }
57       }
58       if (alignViewport.isClosed()) {
59         abortAndDestroy();
60       }
61
62       AlignmentI alignment=alignViewport.getAlignment();
63       AlignmentAnnotation conservation=alignViewport.getAlignmentConservationAnnotation();
64       AlignmentAnnotation quality=alignViewport.getAlignmentQualityAnnot();
65       // AlignViewport.UPDATING_CONSERVATION = true;
66
67       int alWidth;
68       
69       if (alignment==null || (alWidth=alignment.getWidth())< 0)
70       {
71         calcMan.workerComplete(this);
72         //.updatingConservation = false;
73         //AlignViewport.UPDATING_CONSERVATION = false;
74         
75         return;
76       }
77
78       Conservation cons = Conservation.calculateConservation("All",
79               jalview.schemes.ResidueProperties.propHash, 3,
80               alignment.getSequences(), 0, alWidth - 1, false, ConsPercGaps, quality!=null);
81       cons.completeAnnotations(conservation,
82               quality, 0, alWidth);
83     } catch (OutOfMemoryError error)
84     {
85       ap.raiseOOMWarning("calculating conservation", error);
86       calcMan.workerCannotRun(this);
87       // alignViewport.conservation = null;
88       // this.alignViewport.quality = null;
89
90     }
91     calcMan.workerComplete(this);
92
93     if (ap != null)
94     {
95       ap.paintAlignment(true);
96     }
97
98   }
99 }