From: gmungoc Date: Wed, 11 Oct 2017 12:41:13 +0000 (+0100) Subject: Merge branch 'bug/JAL-2742' into develop X-Git-Tag: Release_2_10_3b1~111 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=653724613f7082c87b17ed519fef06f704876e2a;hp=a588fe849a5b6d8b965c3120b931771029b94196;p=jalview.git Merge branch 'bug/JAL-2742' into develop --- diff --git a/src/jalview/api/AlignViewportI.java b/src/jalview/api/AlignViewportI.java index 9e6d1c0..3cb06c1 100644 --- a/src/jalview/api/AlignViewportI.java +++ b/src/jalview/api/AlignViewportI.java @@ -24,7 +24,6 @@ import jalview.analysis.Conservation; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; -import jalview.datamodel.CigarArray; import jalview.datamodel.ColumnSelection; import jalview.datamodel.ProfilesI; import jalview.datamodel.SearchResultsI; @@ -243,16 +242,6 @@ public interface AlignViewportI extends ViewStyleI void clearSequenceColours(); /** - * This method returns the visible alignment as text, as seen on the GUI, ie - * if columns are hidden they will not be returned in the result. Use this for - * calculating trees, PCA, redundancy etc on views which contain hidden - * columns. - * - * @return String[] - */ - CigarArray getViewAsCigars(boolean selectedRegionOnly); - - /** * return a compact representation of the current alignment selection to pass * to an analysis function * @@ -486,6 +475,7 @@ public interface AlignViewportI extends ViewStyleI * * @return */ + @Override boolean isProteinFontAsCdna(); /** @@ -493,5 +483,6 @@ public interface AlignViewportI extends ViewStyleI * * @return */ + @Override void setProteinFontAsCdna(boolean b); } diff --git a/src/jalview/datamodel/CigarArray.java b/src/jalview/datamodel/CigarArray.java index b6224c2..1723f1d 100644 --- a/src/jalview/datamodel/CigarArray.java +++ b/src/jalview/datamodel/CigarArray.java @@ -170,32 +170,30 @@ public class CigarArray extends CigarBase hideStart = region[0]; hideEnd = region[1]; // edit hidden regions to selection range - if (hideStart < last) + + // just move on if hideEnd is before last + if (hideEnd < last) { - if (hideEnd > last) - { - hideStart = last; - } - else - { - continue; - } + continue; } - + // exit if next region is after end if (hideStart > end) { break; } - if (hideEnd > end) + // truncate region at start if last falls in region + if ((hideStart < last) && (hideEnd >= last)) { - hideEnd = end; + hideStart = last; } - if (hideStart > hideEnd) + // truncate region at end if end falls in region + if (hideEnd > end) // already checked that hideStart<=end { - break; + hideEnd = end; } + /** * form operations... */ @@ -207,7 +205,7 @@ public class CigarArray extends CigarBase last = hideEnd + 1; } // Final match if necessary. - if (last < end) + if (last <= end) { addOperation(CigarArray.M, end - last + 1); } diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 3702cd0..b260cab 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -33,7 +33,6 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.AlignmentView; import jalview.datamodel.Annotation; -import jalview.datamodel.CigarArray; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; import jalview.datamodel.HiddenSequences; @@ -1673,13 +1672,6 @@ public abstract class AlignmentViewport } @Override - public CigarArray getViewAsCigars(boolean selectedRegionOnly) - { - return new CigarArray(alignment, alignment.getHiddenColumns(), - (selectedRegionOnly ? selectionGroup : null)); - } - - @Override public jalview.datamodel.AlignmentView getAlignmentView( boolean selectedOnly) { diff --git a/test/jalview/datamodel/CigarArrayTest.java b/test/jalview/datamodel/CigarArrayTest.java new file mode 100644 index 0000000..7bee423 --- /dev/null +++ b/test/jalview/datamodel/CigarArrayTest.java @@ -0,0 +1,141 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.datamodel; + +import static org.testng.Assert.assertEquals; + +import jalview.gui.JvOptionPane; + +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class CigarArrayTest +{ + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + + @Test(groups = "Functional") + public void testConstructor() + { + SequenceI seq1 = new Sequence("sq1", + "ASFDDABACBACBACBACBACBACBABCABCBACBABCAB"); + Sequence seq2 = new Sequence("sq2", + "TTTTTTACBCBABCABCABCABCBACBACBABCABCABCBA"); + + // construct alignment + AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 }); + + // hide columns + HiddenColumns hc = new HiddenColumns(); + hc.hideColumns(3, 6); + hc.hideColumns(16, 20); + + // select group + SequenceGroup sg1 = new SequenceGroup(); + sg1.addSequence(seq1, false); + sg1.setStartRes(2); + sg1.setEndRes(23); + + // Cigar array meanings: + // M = match + // D = deletion + // I = insertion + // number preceding M/D/I is the number of residues which + // match/are deleted/are inserted + // In the CigarArray constructor only matches or deletions are created, as + // we are comparing a sequence to its own subsequence (the group) + hidden + // columns. + + // no hidden columns case + CigarArray cig = new CigarArray(al, null, sg1); + String result = cig.getCigarstring(); + assertEquals(result, "22M"); + + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "1M4D9M5D3M"); + + // group starts at hidden cols + sg1.setStartRes(3); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "4D9M5D3M"); + + // group starts at last but 1 hidden col + sg1.setStartRes(5); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M5D3M"); + + // group starts at last hidden col + sg1.setStartRes(6); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "1D9M5D3M"); + + // group starts just after hidden region + sg1.setStartRes(7); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "9M5D3M"); + + // group ends just before start of hidden region + sg1.setStartRes(5); + sg1.setEndRes(15); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M"); + + // group ends at start of hidden region + sg1.setEndRes(16); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M1D"); + + // group ends 1 after start of hidden region + sg1.setEndRes(17); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M2D"); + + // group ends at end of hidden region + sg1.setEndRes(20); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M5D"); + + // group ends just after end of hidden region + sg1.setEndRes(21); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M5D1M"); + + // group ends 2 after end of hidden region + sg1.setEndRes(22); + cig = new CigarArray(al, hc, sg1); + result = cig.getCigarstring(); + assertEquals(result, "2D9M5D2M"); + } +}