/* * 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.analysis.scoremodels; import jalview.datamodel.AlignmentI; import jalview.datamodel.SequenceFeature; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.JvOptionPane; import jalview.io.DataSourceType; import jalview.io.FileLoader; import java.util.Arrays; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class FeatureScoreModelTest { @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } public static String alntestFile = "FER1_MESCR/72-76 DVYIL\nFER1_SPIOL/71-75 DVYIL\nFER3_RAPSA/21-25 DVYVL\nFER1_MAIZE/73-77 DVYIL\n"; int[] sf1 = new int[] { 74, 74, 73, 73, 23, 23, -1, -1 }; int[] sf2 = new int[] { -1, -1, 74, 75, -1, -1, 76, 77 }; int[] sf3 = new int[] { -1, -1, -1, -1, -1, -1, 76, 77 }; public AlignFrame getTestAlignmentFrame() { AlignFrame alf = new FileLoader(false).LoadFileWaitTillLoaded( alntestFile, DataSourceType.PASTE); AlignmentI al = alf.getViewport().getAlignment(); Assert.assertEquals(al.getHeight(), 4); Assert.assertEquals(al.getWidth(), 5); for (int i = 0; i < 4; i++) { SequenceI ds = al.getSequenceAt(i).getDatasetSequence(); if (sf1[i * 2] > 0) { ds.addSequenceFeature(new SequenceFeature("sf1", "sf1", "sf1", sf1[i * 2], sf1[i * 2 + 1], "sf1")); } if (sf2[i * 2] > 0) { ds.addSequenceFeature(new SequenceFeature("sf2", "sf2", "sf2", sf2[i * 2], sf2[i * 2 + 1], "sf2")); } if (sf3[i * 2] > 0) { ds.addSequenceFeature(new SequenceFeature("sf3", "sf3", "sf3", sf3[i * 2], sf3[i * 2 + 1], "sf3")); } } alf.setShowSeqFeatures(true); alf.getFeatureRenderer().setVisible("sf1"); alf.getFeatureRenderer().setVisible("sf2"); alf.getFeatureRenderer().setVisible("sf3"); alf.getFeatureRenderer().findAllFeatures(true); Assert.assertEquals(alf.getFeatureRenderer().getDisplayedFeatureTypes() .size(), 3, "Number of feature types"); Assert.assertTrue(alf.getCurrentView().areFeaturesDisplayed()); return alf; } @Test(groups = { "Functional" }) public void testFeatureScoreModel() throws Exception { AlignFrame alf = getTestAlignmentFrame(); FeatureScoreModel fsm = new FeatureScoreModel(); Assert.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView() .getAlignPanel())); alf.selectAllSequenceMenuItem_actionPerformed(null); float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView( true)); Assert.assertTrue(dm[0][2] == 0f, "FER1_MESCR (0) should be identical with RAPSA (2)"); Assert.assertTrue(dm[0][1] > dm[0][2], "FER1_MESCR (0) should be further from SPIOL (1) than it is from RAPSA (2)"); } @Test(groups = { "Functional" }) public void testFeatureScoreModel_hiddenFirstColumn() throws Exception { AlignFrame alf = getTestAlignmentFrame(); // hiding first two columns shouldn't affect the tree alf.getViewport().hideColumns(0, 1); FeatureScoreModel fsm = new FeatureScoreModel(); Assert.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView() .getAlignPanel())); alf.selectAllSequenceMenuItem_actionPerformed(null); float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView( true)); Assert.assertTrue(dm[0][2] == 0f, "FER1_MESCR (0) should be identical with RAPSA (2)"); Assert.assertTrue(dm[0][1] > dm[0][2], "FER1_MESCR (0) should be further from SPIOL (1) than it is from RAPSA (2)"); } @Test(groups = { "Functional" }) public void testFeatureScoreModel_HiddenColumns() throws Exception { AlignFrame alf = getTestAlignmentFrame(); // hide columns and check tree changes alf.getViewport().hideColumns(3, 4); alf.getViewport().hideColumns(0, 1); FeatureScoreModel fsm = new FeatureScoreModel(); Assert.assertTrue(fsm.configureFromAlignmentView(alf.getCurrentView() .getAlignPanel())); alf.selectAllSequenceMenuItem_actionPerformed(null); float[][] dm = fsm.findDistances(alf.getViewport().getAlignmentView( true)); Assert.assertTrue( dm[0][2] == 0f, "After hiding last two columns FER1_MESCR (0) should still be identical with RAPSA (2)"); Assert.assertTrue( dm[0][1] == 0f, "After hiding last two columns FER1_MESCR (0) should now also be identical with SPIOL (1)"); for (int s = 0; s < 3; s++) { Assert.assertTrue(dm[s][3] > 0f, "After hiding last two columns " + alf.getViewport().getAlignment().getSequenceAt(s).getName() + "(" + s + ") should still be distinct from FER1_MAIZE (3)"); } } /** * Check findFeatureAt doesn't return contact features except at contact * points TODO:move to under the FeatureRendererModel test suite */ @Test(groups = { "Functional" }) public void testFindFeatureAt_PointFeature() throws Exception { String alignment = "a CCCCCCGGGGGGCCCCCC\n" + "b CCCCCCGGGGGGCCCCCC\n" + "c CCCCCCGGGGGGCCCCCC\n"; AlignFrame af = new jalview.io.FileLoader(false) .LoadFileWaitTillLoaded(alignment, DataSourceType.PASTE); SequenceI aseq = af.getViewport().getAlignment().getSequenceAt(0); SequenceFeature sf = null; sf = new SequenceFeature("disulphide bond", "", 2, 5, Float.NaN, ""); aseq.addSequenceFeature(sf); Assert.assertTrue(sf.isContactFeature()); af.refreshFeatureUI(true); af.getFeatureRenderer().setAllVisible(Arrays.asList("disulphide bond")); Assert.assertEquals(af.getFeatureRenderer().getDisplayedFeatureTypes() .size(), 1, "Should be just one feature type displayed"); // step through and check for pointwise feature presence/absence Assert.assertEquals(af.getFeatureRenderer().findFeaturesAtRes(aseq, 1) .size(), 0); // step through and check for pointwise feature presence/absence Assert.assertEquals(af.getFeatureRenderer().findFeaturesAtRes(aseq, 2) .size(), 1); // step through and check for pointwise feature presence/absence Assert.assertEquals(af.getFeatureRenderer().findFeaturesAtRes(aseq, 3) .size(), 0); // step through and check for pointwise feature presence/absence Assert.assertEquals(af.getFeatureRenderer().findFeaturesAtRes(aseq, 4) .size(), 0); // step through and check for pointwise feature presence/absence Assert.assertEquals(af.getFeatureRenderer().findFeaturesAtRes(aseq, 5) .size(), 1); // step through and check for pointwise feature presence/absence Assert.assertEquals(af.getFeatureRenderer().findFeaturesAtRes(aseq, 6) .size(), 0); } }