From e851b6e27ddf19394510347c1af298f1c377f101 Mon Sep 17 00:00:00 2001 From: jprocter Date: Sun, 2 Sep 2012 16:49:15 +0100 Subject: [PATCH] JAL-1007 refactored code and patched calculation bug --- src/jalview/analysis/AlignSeq.java | 81 ++++++++++++++++++++++++++++ src/jalview/appletgui/RedundancyPanel.java | 51 +----------------- src/jalview/gui/RedundancyPanel.java | 48 +---------------- 3 files changed, 85 insertions(+), 95 deletions(-) diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index 2ce08fc..bb4796f 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -918,4 +918,85 @@ public class AlignSeq } } } + + /** + * 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]