Clover icon

Coverage Report

  1. Project Clover database Thu Aug 13 2020 12:04:21 BST
  2. Package jalview.appletgui

File RedundancyPanel.java

 

Coverage histogram

../../img/srcFileCovDistChart0.png
56% of files have more coverage

Code metrics

26
92
14
1
305
216
29
0.32
6.57
14
2.07

Classes

Class Line # Actions
RedundancyPanel 43 92 29
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
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
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.appletgui;
22   
23    import jalview.analysis.AlignSeq;
24    import jalview.commands.CommandI;
25    import jalview.commands.EditCommand;
26    import jalview.commands.EditCommand.Action;
27    import jalview.datamodel.AlignmentI;
28    import jalview.datamodel.SequenceGroup;
29    import jalview.datamodel.SequenceI;
30    import jalview.util.MessageManager;
31   
32    import java.awt.Frame;
33    import java.awt.event.ActionEvent;
34    import java.awt.event.AdjustmentEvent;
35    import java.awt.event.AdjustmentListener;
36    import java.awt.event.WindowEvent;
37    import java.awt.event.WindowListener;
38    import java.util.ArrayList;
39    import java.util.List;
40    import java.util.Stack;
41    import java.util.Vector;
42   
 
43    public class RedundancyPanel extends SliderPanel
44    implements Runnable, WindowListener
45    {
46    Stack historyList = new Stack(); // simpler than synching with alignFrame.
47   
48    float[] redundancy;
49   
50    SequenceI[] originalSequences;
51   
52    Frame frame;
53   
54    Vector redundantSeqs;
55   
 
56  0 toggle public RedundancyPanel(AlignmentPanel ap)
57    {
58  0 super(ap, 0, false, null);
59   
60  0 redundantSeqs = new Vector();
61  0 this.ap = ap;
62  0 undoButton.setVisible(true);
63  0 applyButton.setVisible(true);
64  0 allGroupsCheck.setVisible(false);
65   
66  0 label.setText(
67    MessageManager.getString("label.enter_redundancy_threshold"));
68  0 valueField.setText("100");
69   
70  0 slider.setVisibleAmount(1);
71  0 slider.setMinimum(0);
72  0 slider.setMaximum(100 + slider.getVisibleAmount());
73  0 slider.setValue(100);
74   
75  0 slider.addAdjustmentListener(new AdjustmentListener()
76    {
 
77  0 toggle @Override
78    public void adjustmentValueChanged(AdjustmentEvent evt)
79    {
80  0 valueField.setText(String.valueOf(slider.getValue()));
81  0 sliderValueChanged();
82    }
83    });
84   
85  0 frame = new Frame();
86  0 frame.add(this);
87  0 jalview.bin.JalviewLite.addFrame(frame, MessageManager
88    .getString("label.redundancy_threshold_selection"), 400, 100);
89   
90  0 frame.addWindowListener(this);
91   
92  0 Thread worker = new Thread(this);
93  0 worker.start();
94    }
95   
96    /**
97    * This is a copy of remove redundancy in jalivew.datamodel.Alignment except
98    * we dont want to remove redundancy, just calculate once so we can use the
99    * slider to dynamically hide redundant sequences
100    *
101    * @param threshold
102    * DOCUMENT ME!
103    * @param sel
104    * DOCUMENT ME!
105    *
106    * @return DOCUMENT ME!
107    */
 
108  0 toggle @Override
109    public void run()
110    {
111  0 label.setText(MessageManager.getString("label.calculating"));
112   
113  0 slider.setVisible(false);
114  0 applyButton.setEnabled(false);
115  0 valueField.setVisible(false);
116   
117  0 validate();
118   
119  0 String[] omitHidden = null;
120   
121  0 SequenceGroup sg = ap.av.getSelectionGroup();
122  0 int height;
123   
124  0 int start, end;
125   
126  0 if ((sg != null) && (sg.getSize() >= 1))
127    {
128  0 originalSequences = sg.getSequencesInOrder(ap.av.getAlignment());
129  0 start = sg.getStartRes();
130  0 end = sg.getEndRes();
131    }
132    else
133    {
134  0 originalSequences = ap.av.getAlignment().getSequencesArray();
135  0 start = 0;
136  0 end = ap.av.getAlignment().getWidth();
137    }
138   
139  0 height = originalSequences.length;
140   
141  0 redundancy = AlignSeq.computeRedundancyMatrix(originalSequences,
142    omitHidden, start, end, false);
143  0 label.setText(
144    MessageManager.getString("label.enter_redundancy_threshold"));
145  0 slider.setVisible(true);
146  0 applyButton.setEnabled(true);
147  0 valueField.setVisible(true);
148   
149  0 validate();
150  0 sliderValueChanged();
151    // System.out.println("blob done "+ (System.currentTimeMillis()-start));
152    }
153   
 
154  0 toggle void sliderValueChanged()
155    {
156  0 if (redundancy == null)
157    {
158  0 return;
159    }
160   
161  0 float value = slider.getValue();
162   
163  0 List<SequenceI> redundantSequences = new ArrayList<>();
164  0 for (int i = 0; i < redundancy.length; i++)
165    {
166  0 if (value <= redundancy[i])
167    {
168  0 redundantSequences.add(originalSequences[i]);
169    }
170    }
171   
172  0 ap.idPanel.idCanvas.setHighlighted(redundantSequences);
173  0 PaintRefresher.Refresh(this, ap.av.getSequenceSetId(), true, true);
174   
175    }
176   
 
177  0 toggle @Override
178    public void applyButton_actionPerformed()
179    {
180  0 Vector del = new Vector();
181   
182  0 undoButton.setEnabled(true);
183   
184  0 float value = slider.getValue();
185  0 SequenceGroup sg = ap.av.getSelectionGroup();
186   
187  0 for (int i = 0; i < redundancy.length; i++)
188    {
189  0 if (value <= redundancy[i])
190    {
191  0 del.addElement(originalSequences[i]);
192    }
193    }
194   
195    // This has to be done before the restoreHistoryItem method of alignFrame
196    // will
197    // actually restore these sequences.
198  0 if (del.size() > 0)
199    {
200  0 SequenceI[] deleted = new SequenceI[del.size()];
201   
202  0 int width = 0;
203  0 for (int i = 0; i < del.size(); i++)
204    {
205  0 deleted[i] = (SequenceI) del.elementAt(i);
206  0 if (deleted[i].getLength() > width)
207    {
208  0 width = deleted[i].getLength();
209    }
210    }
211   
212  0 EditCommand cut = new EditCommand(
213    MessageManager.getString("action.remove_redundancy"),
214    Action.CUT, deleted, 0, width, ap.av.getAlignment());
215  0 AlignmentI alignment = ap.av.getAlignment();
216  0 for (int i = 0; i < del.size(); i++)
217    {
218  0 alignment.deleteSequence(deleted[i]);
219  0 if (sg != null)
220    {
221  0 sg.deleteSequence(deleted[i], false);
222    }
223    }
224   
225  0 historyList.push(cut);
226   
227  0 ap.alignFrame.addHistoryItem(cut);
228   
229  0 PaintRefresher.Refresh(this, ap.av.getSequenceSetId(), true, true);
230  0 ap.av.firePropertyChange("alignment", null,
231    ap.av.getAlignment().getSequences());
232    }
233   
234    }
235   
 
236  0 toggle @Override
237    public void undoButton_actionPerformed()
238    {
239  0 CommandI command = (CommandI) historyList.pop();
240  0 command.undoCommand(null);
241   
242  0 if (ap.av.getHistoryList().contains(command))
243    {
244  0 ap.av.getHistoryList().remove(command);
245  0 ap.alignFrame.updateEditMenuBar();
246  0 ap.av.firePropertyChange("alignment", null,
247    ap.av.getAlignment().getSequences());
248    }
249   
250  0 ap.paintAlignment(true, true);
251   
252  0 if (historyList.size() == 0)
253    {
254  0 undoButton.setEnabled(false);
255    }
256    }
257   
 
258  0 toggle public void valueField_actionPerformed(ActionEvent e)
259    {
260  0 try
261    {
262  0 int i = Integer.parseInt(valueField.getText());
263  0 slider.setValue(i);
264    } catch (Exception ex)
265    {
266  0 valueField.setText(slider.getValue() + "");
267    }
268    }
269   
 
270  0 toggle @Override
271    public void windowOpened(WindowEvent evt)
272    {
273    }
274   
 
275  0 toggle @Override
276    public void windowClosing(WindowEvent evt)
277    {
278  0 ap.idPanel.idCanvas.setHighlighted(null);
279    }
280   
 
281  0 toggle @Override
282    public void windowClosed(WindowEvent evt)
283    {
284    }
285   
 
286  0 toggle @Override
287    public void windowActivated(WindowEvent evt)
288    {
289    }
290   
 
291  0 toggle @Override
292    public void windowDeactivated(WindowEvent evt)
293    {
294    }
295   
 
296  0 toggle @Override
297    public void windowIconified(WindowEvent evt)
298    {
299    }
300   
 
301  0 toggle @Override
302    public void windowDeiconified(WindowEvent evt)
303    {
304    }
305    }