From c4d991e1b3d77b8f18e705d671f0a26e289a5b5c Mon Sep 17 00:00:00 2001 From: jprocter Date: Thu, 2 Dec 2010 16:15:57 +0000 Subject: [PATCH] refactored visible contig/gap map array intersection code to alignmentView --- src/jalview/datamodel/AlignmentView.java | 38 ++++++++++++++++++++++++++++++ src/jalview/ws/jws1/JPredClient.java | 28 +--------------------- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/jalview/datamodel/AlignmentView.java b/src/jalview/datamodel/AlignmentView.java index 4079c9c..76f7bd8 100644 --- a/src/jalview/datamodel/AlignmentView.java +++ b/src/jalview/datamodel/AlignmentView.java @@ -539,4 +539,42 @@ public class AlignmentView // TODO Auto-generated method stub return firstCol; } + + /** + * compute a deletion map for the current view according to the given + * gap/match map + * + * @param gapMap (as returned from SequenceI.gapMap()) + * @return int[] {intersection of visible regions with gapMap) + */ + public int[] getVisibleContigMapFor(int[] gapMap) + { + int[] delMap = null; + int[] viscontigs = getVisibleContigs(); + int spos = 0; + int i = 0; + if (viscontigs != null) + { + // viscontigs maps from a subset of the gapMap to the gapMap, so it will + // always be equal to or shorter than gapMap + delMap = new int[gapMap.length]; + for (int contig = 0; contig < viscontigs.length; contig += 2) + { + + while (spos < gapMap.length && gapMap[spos] < viscontigs[contig]) + { + spos++; + } + while (spos < gapMap.length + && gapMap[spos] <= viscontigs[contig + 1]) + { + delMap[i++] = spos++; + } + } + int tmap[] = new int[i]; + System.arraycopy(delMap, 0, tmap, 0, i); + delMap = tmap; + } + return delMap; + } } diff --git a/src/jalview/ws/jws1/JPredClient.java b/src/jalview/ws/jws1/JPredClient.java index 8fff195..f479347 100644 --- a/src/jalview/ws/jws1/JPredClient.java +++ b/src/jalview/ws/jws1/JPredClient.java @@ -99,33 +99,7 @@ public class JPredClient extends WS1Client if (viewonly) { - int[] viscontigs = alview.getVisibleContigs(); - int spos = 0; - int i = 0; - if (viscontigs != null) - { - // Construct the delMap - mapping from the positions within the input to - // Jnet to the contigs in the original sequence - - delMap = new int[seq.getEnd() - seq.getStart() + 1]; - int gapMap[] = seq.gapMap(); - for (int contig = 0; contig < viscontigs.length; contig += 2) - { - - while (spos < gapMap.length && gapMap[spos] < viscontigs[contig]) - { - spos++; - } - while (spos < gapMap.length - && gapMap[spos] <= viscontigs[contig + 1]) - { - delMap[i++] = spos++; - } - } - int tmap[] = new int[i]; - System.arraycopy(delMap, 0, tmap, 0, i); - delMap = tmap; - } + delMap = alview.getVisibleContigMapFor(seq.gapMap()); } if (msa && msf.length > 1) { -- 1.7.10.2