}
}
}
+
+ /**
+ * compute the PID vector used by the redundancy filter.
+ * @param originalSequences - sequences in alignment that are to filtered
+ * @param omitHidden - null or strings to be analysed (typically, visible portion of each sequence in alignment)
+ * @param start - first column in window for calculation
+ * @param end - last column in window for calculation
+ * @param ungapped - if true then use ungapped sequence to compute PID
+ * @return vector containing maximum PID for i-th sequence and any sequences longer than that seuqence
+ */
+ public static float[] computeRedundancyMatrix(SequenceI[] originalSequences,
+ String[] omitHidden, int start, int end, boolean ungapped)
+ {
+ int height=originalSequences.length;
+ float[] redundancy = new float[height];
+ int[] lngth=new int[height];
+ for (int i = 0; i < height; i++)
+ {
+ redundancy[i] = 0f;
+ lngth[i]=-1;
+ }
+
+
+ // long start = System.currentTimeMillis();
+
+ float pid;
+ String seqi, seqj;
+ for (int i = 0; i < height; i++)
+ {
+
+ for (int j = 0; j < i; j++)
+ {
+ if (i == j)
+ {
+ continue;
+ }
+
+ if (omitHidden == null)
+ {
+ seqi = originalSequences[i].getSequenceAsString(start, end);
+ seqj = originalSequences[j].getSequenceAsString(start, end);
+ }
+ else
+ {
+ seqi = omitHidden[i];
+ seqj = omitHidden[j];
+ }
+ if (lngth[i]==-1)
+ {
+ String ug=AlignSeq.extractGaps(Comparison.GapChars, seqi);
+ lngth[i]=ug.length();
+ if (ungapped)
+ {
+ seqi=ug;
+ }
+ }
+ if (lngth[j]==-1)
+ {
+ String ug=AlignSeq.extractGaps(Comparison.GapChars, seqj);
+ lngth[j]=ug.length();
+ if (ungapped)
+ {
+ seqj=ug;
+ }
+ }
+ pid = Comparison.PID(seqi, seqj);
+
+ // use real sequence length rather than string length
+ if (lngth[j]<lngth[i])
+ {
+ redundancy[j] = Math.max(pid, redundancy[j]);
+ }
+ else
+ {
+ redundancy[i] = Math.max(pid, redundancy[i]);
+ }
+
+ }
+ }
+ return redundancy;
+ }
}
import java.awt.*;
import java.awt.event.*;
+import jalview.analysis.AlignSeq;
import jalview.commands.*;
import jalview.datamodel.*;
height = originalSequences.length;
- redundancy = new float[height];
- for (int i = 0; i < height; i++)
- {
- redundancy[i] = 0f;
- }
-
- // if (ap.av.hasHiddenColumns)
- {
- // omitHidden = ap.av.getSelectionAsString();
- }
-
- // long start = System.currentTimeMillis();
-
- float pid;
- String seqi, seqj;
- for (int i = 0; i < height; i++)
- {
- for (int j = 0; j < i; j++)
- {
- if (i == j)
- {
- continue;
- }
-
- if (omitHidden == null)
- {
- seqi = originalSequences[i].getSequenceAsString(start, end);
- seqj = originalSequences[j].getSequenceAsString(start, end);
- }
- else
- {
- seqi = omitHidden[i];
- seqj = omitHidden[j];
- }
-
- pid = jalview.util.Comparison.PID(seqi, seqj);
-
- if (seqj.length() < seqi.length())
- {
- redundancy[j] = Math.max(pid, redundancy[j]);
- }
- else
- {
- redundancy[i] = Math.max(pid, redundancy[i]);
- }
-
- }
- }
-
+ redundancy = AlignSeq.computeRedundancyMatrix(originalSequences, omitHidden, start, end, false);
label.setText("Enter the redundancy threshold");
slider.setVisible(true);
applyButton.setEnabled(true);
import javax.swing.*;
import javax.swing.event.*;
+import jalview.analysis.AlignSeq;
import jalview.commands.*;
import jalview.datamodel.*;
import jalview.jbgui.*;
}
height = originalSequences.length;
-
- redundancy = new float[height];
- for (int i = 0; i < height; i++)
- {
- redundancy[i] = 0f;
- }
-
if (ap.av.hasHiddenColumns())
{
omitHidden = ap.av.getViewAsString(sg != null);
}
-
- // long start = System.currentTimeMillis();
-
- float pid;
- String seqi, seqj;
- for (int i = 0; i < height; i++)
- {
-
- for (int j = 0; j < i; j++)
- {
- if (i == j)
- {
- continue;
- }
-
- if (omitHidden == null)
- {
- seqi = originalSequences[i].getSequenceAsString(start, end);
- seqj = originalSequences[j].getSequenceAsString(start, end);
- }
- else
- {
- seqi = omitHidden[i];
- seqj = omitHidden[j];
- }
-
- pid = Comparison.PID(seqi, seqj);
-
- if (seqj.length() < seqi.length())
- {
- redundancy[j] = Math.max(pid, redundancy[j]);
- }
- else
- {
- redundancy[i] = Math.max(pid, redundancy[i]);
- }
-
- }
- }
+ redundancy = AlignSeq.computeRedundancyMatrix(originalSequences, omitHidden, start, end, false);
progress.setIndeterminate(false);
progress.setVisible(false);