X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fdatamodel%2FCigarArray.java;h=17e9ea6fc65e17faad9b7f76656fa0f1a30cdf68;hb=0ae965fc73680bdc69b06986c060ff17342c4787;hp=a48a178179221382a27a44a595a374e222af900c;hpb=d1707d4c26db76cfeb640f0dbeb3e3427fd40eb7;p=jalview.git diff --git a/src/jalview/datamodel/CigarArray.java b/src/jalview/datamodel/CigarArray.java index a48a178..17e9ea6 100644 --- a/src/jalview/datamodel/CigarArray.java +++ b/src/jalview/datamodel/CigarArray.java @@ -20,9 +20,7 @@ */ package jalview.datamodel; -import htsjdk.samtools.Cigar; - -import java.util.List; +import java.util.Iterator; public class CigarArray extends CigarBase { @@ -70,7 +68,8 @@ public class CigarArray extends CigarBase for (int c = 0; c < cigars.length; c++) { refCigars[c] = cigars[c]; - if (!((cigars[c] instanceof SeqCigar) || cigars[c] instanceof CigarCigar)) + if (!((cigars[c] instanceof SeqCigar) + || cigars[c] instanceof CigarCigar)) { seqcigararray = false; } @@ -91,9 +90,7 @@ public class CigarArray extends CigarBase SequenceGroup selectionGroup) { this(constructSeqCigarArray(alignment, selectionGroup)); - constructFromAlignment(alignment, - hidden != null ? hidden.getListOfCols() - : null, selectionGroup); + constructFromAlignment(alignment, hidden, selectionGroup); } private static int[] _calcStartEndBounds(AlignmentI alignment, @@ -155,48 +152,38 @@ public class CigarArray extends CigarBase * @param selectionGroup */ private void constructFromAlignment(AlignmentI alignment, - List list, SequenceGroup selectionGroup) + HiddenColumns hidden, SequenceGroup selectionGroup) { int[] _startend = _calcStartEndBounds(alignment, selectionGroup); - int start = _startend[1], end = _startend[2]; + int start = _startend[1]; + int end = _startend[2]; // now construct the CigarArray operations - if (list != null) + if (hidden != null) { int[] region; - int hideStart, hideEnd; + int hideStart; + int hideEnd; int last = start; - for (int j = 0; last < end & j < list.size(); j++) + + Iterator regions = hidden.getBoundedIterator(start, end); + while (regions.hasNext()) { - region = list.get(j); + region = regions.next(); hideStart = region[0]; hideEnd = region[1]; - // edit hidden regions to selection range - if (hideStart < last) - { - if (hideEnd > last) - { - hideStart = last; - } - else - { - continue; - } - } - if (hideStart > end) + // truncate region at start if last falls in region + if ((hideStart < last) && (hideEnd >= last)) { - break; + hideStart = last; } - if (hideEnd > end) + // truncate region at end if end falls in region + if (hideEnd > end) // already checked that hideStart<=end { hideEnd = end; } - if (hideStart > hideEnd) - { - break; - } /** * form operations... */ @@ -207,8 +194,9 @@ public class CigarArray extends CigarBase addOperation(CigarArray.D, 1 + hideEnd - hideStart); last = hideEnd + 1; } + // Final match if necessary. - if (last < end) + if (last <= end) { addOperation(CigarArray.M, end - last + 1); } @@ -220,7 +208,7 @@ public class CigarArray extends CigarBase } /** - * @see Cigar.getSequenceAndDeletions + * @see CigarBase.getSequenceAndDeletions * @param GapChar * char * @return Object[][]