X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Frenderer%2Fseqfeatures%2FFeatureRendererTest.java;h=dc86605ea6219b389045b6ade5a04793911a2472;hb=2066caec85bf0b332d924472fcfdbdaa07f56f1e;hp=ab5c137cbb8e772c1a70af2ddbbc9ffd17575af4;hpb=f5c1419b96dc540087bcf565140e6bbcdc2096aa;p=jalview.git diff --git a/test/jalview/renderer/seqfeatures/FeatureRendererTest.java b/test/jalview/renderer/seqfeatures/FeatureRendererTest.java index ab5c137..dc86605 100644 --- a/test/jalview/renderer/seqfeatures/FeatureRendererTest.java +++ b/test/jalview/renderer/seqfeatures/FeatureRendererTest.java @@ -14,6 +14,7 @@ import jalview.io.FileLoader; import jalview.schemes.FeatureColour; import java.awt.Color; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -138,9 +139,9 @@ public class FeatureRendererTest } @Test(groups = "Functional") - public void testFindFeaturesAtRes() + public void testFindFeaturesAtColumn() { - String seqData = ">s1\nabcdefghijklmnopqrstuvwxyz\n"; + String seqData = ">s1/4-29\n-ab--cdefghijklmnopqrstuvwxyz\n"; AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(seqData, DataSourceType.PASTE); AlignViewportI av = af.getViewport(); @@ -150,7 +151,7 @@ public class FeatureRendererTest /* * with no features */ - List features = fr.findFeaturesAtRes(seq, 3); + List features = fr.findFeaturesAtColumn(seq, 3); assertTrue(features.isEmpty()); /* @@ -159,34 +160,43 @@ public class FeatureRendererTest SequenceFeature sf1 = new SequenceFeature("Type1", "Desc", 0, 0, 1f, "Group"); // non-positional seq.addSequenceFeature(sf1); - SequenceFeature sf2 = new SequenceFeature("Type2", "Desc", 5, 15, 1f, + SequenceFeature sf2 = new SequenceFeature("Type2", "Desc", 8, 18, 1f, "Group1"); seq.addSequenceFeature(sf2); - SequenceFeature sf3 = new SequenceFeature("Type3", "Desc", 5, 15, 1f, + SequenceFeature sf3 = new SequenceFeature("Type3", "Desc", 8, 18, 1f, "Group2"); seq.addSequenceFeature(sf3); - SequenceFeature sf4 = new SequenceFeature("Type3", "Desc", 5, 15, 1f, + SequenceFeature sf4 = new SequenceFeature("Type3", "Desc", 8, 18, 1f, null); // null group is always treated as visible seq.addSequenceFeature(sf4); /* * add contact features */ - SequenceFeature sf5 = new SequenceFeature("Disulphide Bond", "Desc", 4, - 12, 1f, "Group1"); + SequenceFeature sf5 = new SequenceFeature("Disulphide Bond", "Desc", 7, + 15, 1f, "Group1"); seq.addSequenceFeature(sf5); - SequenceFeature sf6 = new SequenceFeature("Disulphide Bond", "Desc", 4, - 12, 1f, "Group2"); + SequenceFeature sf6 = new SequenceFeature("Disulphide Bond", "Desc", 7, + 15, 1f, "Group2"); seq.addSequenceFeature(sf6); - SequenceFeature sf7 = new SequenceFeature("Disulphide Bond", "Desc", 4, - 12, 1f, null); + SequenceFeature sf7 = new SequenceFeature("Disulphide Bond", "Desc", 7, + 15, 1f, null); seq.addSequenceFeature(sf7); + // feature spanning B--C + SequenceFeature sf8 = new SequenceFeature("Type1", "Desc", 5, 6, 1f, + "Group"); + seq.addSequenceFeature(sf8); + // contact feature B/C + SequenceFeature sf9 = new SequenceFeature("Disulphide Bond", "Desc", 5, + 6, 1f, "Group"); + seq.addSequenceFeature(sf9); + /* * let feature renderer discover features (and make visible) */ fr.findAllFeatures(true); - features = fr.findFeaturesAtRes(seq, 12); // all positional + features = fr.findFeaturesAtColumn(seq, 15); // all positional assertEquals(features.size(), 6); assertTrue(features.contains(sf2)); assertTrue(features.contains(sf3)); @@ -198,7 +208,7 @@ public class FeatureRendererTest /* * at a non-contact position */ - features = fr.findFeaturesAtRes(seq, 11); + features = fr.findFeaturesAtColumn(seq, 14); assertEquals(features.size(), 3); assertTrue(features.contains(sf2)); assertTrue(features.contains(sf3)); @@ -214,7 +224,8 @@ public class FeatureRendererTest data[2] = new Object[] { "Type3", colour, true }; data[3] = new Object[] { "Disulphide Bond", colour, true }; fr.setFeaturePriority(data); - features = fr.findFeaturesAtRes(seq, 12); + + features = fr.findFeaturesAtColumn(seq, 15); assertEquals(features.size(), 5); // no sf2 assertTrue(features.contains(sf3)); assertTrue(features.contains(sf4)); @@ -226,10 +237,127 @@ public class FeatureRendererTest * make "Group2" not displayed */ fr.setGroupVisibility("Group2", false); - features = fr.findFeaturesAtRes(seq, 12); + + features = fr.findFeaturesAtColumn(seq, 15); assertEquals(features.size(), 3); // no sf2, sf3, sf6 assertTrue(features.contains(sf4)); assertTrue(features.contains(sf5)); assertTrue(features.contains(sf7)); + + // features 'at' a gap between b and c + // - returns enclosing feature BC but not contact feature B/C + features = fr.findFeaturesAtColumn(seq, 4); + assertEquals(features.size(), 1); + assertTrue(features.contains(sf8)); + features = fr.findFeaturesAtColumn(seq, 5); + assertEquals(features.size(), 1); + assertTrue(features.contains(sf8)); + } + + @Test(groups = "Functional") + public void testFilterFeaturesForDisplay() + { + String seqData = ">s1\nabcdef\n"; + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(seqData, + DataSourceType.PASTE); + AlignViewportI av = af.getViewport(); + FeatureRenderer fr = new FeatureRenderer(av); + + List features = new ArrayList<>(); + fr.filterFeaturesForDisplay(features, null); // empty list, does nothing + + SequenceI seq = av.getAlignment().getSequenceAt(0); + SequenceFeature sf1 = new SequenceFeature("Cath", "", 6, 8, Float.NaN, + "group1"); + seq.addSequenceFeature(sf1); + SequenceFeature sf2 = new SequenceFeature("Cath", "", 5, 11, 2f, + "group2"); + seq.addSequenceFeature(sf2); + SequenceFeature sf3 = new SequenceFeature("Cath", "", 5, 11, 3f, + "group3"); + seq.addSequenceFeature(sf3); + SequenceFeature sf4 = new SequenceFeature("Cath", "", 6, 8, 4f, + "group4"); + seq.addSequenceFeature(sf4); + SequenceFeature sf5 = new SequenceFeature("Cath", "", 6, 9, 5f, + "group4"); + seq.addSequenceFeature(sf5); + + fr.findAllFeatures(true); + + features = seq.getSequenceFeatures(); + assertEquals(features.size(), 5); + assertTrue(features.contains(sf1)); + assertTrue(features.contains(sf2)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf4)); + assertTrue(features.contains(sf5)); + + /* + * filter out duplicate (co-located) features + * note: which gets removed is not guaranteed + */ + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.blue)); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertTrue(features.contains(sf2) || features.contains(sf3)); + assertFalse(features.contains(sf2) && features.contains(sf3)); + assertTrue(features.contains(sf5)); + + /* + * hide group 3 - sf3 is removed, sf2 is retained + */ + fr.setGroupVisibility("group3", false); + features = seq.getSequenceFeatures(); + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.blue)); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertTrue(features.contains(sf2)); + assertFalse(features.contains(sf3)); + assertTrue(features.contains(sf5)); + + /* + * hide group 2, show group 3 - sf2 is removed, sf3 is retained + */ + fr.setGroupVisibility("group2", false); + fr.setGroupVisibility("group3", true); + features = seq.getSequenceFeatures(); + fr.filterFeaturesForDisplay(features, null); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertFalse(features.contains(sf2)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf5)); + + /* + * no filtering of co-located features with graduated colour scheme + * filterFeaturesForDisplay does _not_ check colour threshold + * sf2 is removed as its group is hidden + */ + features = seq.getSequenceFeatures(); + fr.filterFeaturesForDisplay(features, new FeatureColour(Color.black, + Color.white, 0f, 1f)); + assertEquals(features.size(), 4); + assertTrue(features.contains(sf1)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf4)); + assertTrue(features.contains(sf5)); + + /* + * filtering of co-located features with colour by label + */ + features = seq.getSequenceFeatures(); + FeatureColour fc = new FeatureColour(Color.black); + fc.setColourByLabel(true); + fr.filterFeaturesForDisplay(features, fc); + assertEquals(features.size(), 3); + assertTrue(features.contains(sf1) || features.contains(sf4)); + assertFalse(features.contains(sf1) && features.contains(sf4)); + assertFalse(features.contains(sf2)); + assertTrue(features.contains(sf3)); + assertTrue(features.contains(sf5)); } }