From 251bd6bbc7324e2235bb663b1b255317817957b1 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 1 Nov 2016 16:13:52 +0000 Subject: [PATCH] JAL-98 use Integer constants; tests added for propHash values --- src/jalview/schemes/ResidueProperties.java | 452 ++++++++++++----------- test/jalview/schemes/ResiduePropertiesTest.java | 59 +++ 2 files changed, 287 insertions(+), 224 deletions(-) diff --git a/src/jalview/schemes/ResidueProperties.java b/src/jalview/schemes/ResidueProperties.java index 90a7952..f855fde 100755 --- a/src/jalview/schemes/ResidueProperties.java +++ b/src/jalview/schemes/ResidueProperties.java @@ -222,10 +222,14 @@ public class ResidueProperties purinepyrimidineIndex['n'] = 2; } + private static final Integer ONE = Integer.valueOf(1); + + private static final Integer ZERO = Integer.valueOf(0); + static { - aa3Hash.put("ALA", Integer.valueOf(0)); - aa3Hash.put("ARG", Integer.valueOf(1)); + aa3Hash.put("ALA", ZERO); + aa3Hash.put("ARG", ONE); aa3Hash.put("ASN", Integer.valueOf(2)); aa3Hash.put("ASP", Integer.valueOf(3)); // D aa3Hash.put("CYS", Integer.valueOf(4)); @@ -910,267 +914,267 @@ public class ResidueProperties static { - hydrophobic.put("I", Integer.valueOf(1)); - hydrophobic.put("L", Integer.valueOf(1)); - hydrophobic.put("V", Integer.valueOf(1)); - hydrophobic.put("C", Integer.valueOf(1)); - hydrophobic.put("A", Integer.valueOf(1)); - hydrophobic.put("G", Integer.valueOf(1)); - hydrophobic.put("M", Integer.valueOf(1)); - hydrophobic.put("F", Integer.valueOf(1)); - hydrophobic.put("Y", Integer.valueOf(1)); - hydrophobic.put("W", Integer.valueOf(1)); - hydrophobic.put("H", Integer.valueOf(1)); - hydrophobic.put("K", Integer.valueOf(1)); - hydrophobic.put("X", Integer.valueOf(1)); - hydrophobic.put("-", Integer.valueOf(1)); - hydrophobic.put("*", Integer.valueOf(1)); - hydrophobic.put("R", Integer.valueOf(0)); - hydrophobic.put("E", Integer.valueOf(0)); - hydrophobic.put("Q", Integer.valueOf(0)); - hydrophobic.put("D", Integer.valueOf(0)); - hydrophobic.put("N", Integer.valueOf(0)); - hydrophobic.put("S", Integer.valueOf(0)); - hydrophobic.put("T", Integer.valueOf(0)); - hydrophobic.put("P", Integer.valueOf(0)); + hydrophobic.put("I", ONE); + hydrophobic.put("L", ONE); + hydrophobic.put("V", ONE); + hydrophobic.put("C", ONE); + hydrophobic.put("A", ONE); + hydrophobic.put("G", ONE); + hydrophobic.put("M", ONE); + hydrophobic.put("F", ONE); + hydrophobic.put("Y", ONE); + hydrophobic.put("W", ONE); + hydrophobic.put("H", ONE); + hydrophobic.put("K", ONE); + hydrophobic.put("X", ONE); + hydrophobic.put("-", ONE); + hydrophobic.put("*", ONE); + hydrophobic.put("R", ZERO); + hydrophobic.put("E", ZERO); + hydrophobic.put("Q", ZERO); + hydrophobic.put("D", ZERO); + hydrophobic.put("N", ZERO); + hydrophobic.put("S", ZERO); + hydrophobic.put("T", ZERO); + hydrophobic.put("P", ZERO); } static { - polar.put("Y", Integer.valueOf(1)); - polar.put("W", Integer.valueOf(1)); - polar.put("H", Integer.valueOf(1)); - polar.put("K", Integer.valueOf(1)); - polar.put("R", Integer.valueOf(1)); - polar.put("E", Integer.valueOf(1)); - polar.put("Q", Integer.valueOf(1)); - polar.put("D", Integer.valueOf(1)); - polar.put("N", Integer.valueOf(1)); - polar.put("S", Integer.valueOf(1)); - polar.put("T", Integer.valueOf(1)); - polar.put("X", Integer.valueOf(1)); - polar.put("-", Integer.valueOf(1)); - polar.put("*", Integer.valueOf(1)); - polar.put("I", Integer.valueOf(0)); - polar.put("L", Integer.valueOf(0)); - polar.put("V", Integer.valueOf(0)); - polar.put("C", Integer.valueOf(0)); - polar.put("A", Integer.valueOf(0)); - polar.put("G", Integer.valueOf(0)); - polar.put("M", Integer.valueOf(0)); - polar.put("F", Integer.valueOf(0)); - polar.put("P", Integer.valueOf(0)); + polar.put("Y", ONE); + polar.put("W", ONE); + polar.put("H", ONE); + polar.put("K", ONE); + polar.put("R", ONE); + polar.put("E", ONE); + polar.put("Q", ONE); + polar.put("D", ONE); + polar.put("N", ONE); + polar.put("S", ONE); + polar.put("T", ONE); + polar.put("X", ONE); + polar.put("-", ONE); + polar.put("*", ONE); + polar.put("I", ZERO); + polar.put("L", ZERO); + polar.put("V", ZERO); + polar.put("C", ZERO); + polar.put("A", ZERO); + polar.put("G", ZERO); + polar.put("M", ZERO); + polar.put("F", ZERO); + polar.put("P", ZERO); } static { - small.put("I", Integer.valueOf(0)); - small.put("L", Integer.valueOf(0)); - small.put("V", Integer.valueOf(1)); - small.put("C", Integer.valueOf(1)); - small.put("A", Integer.valueOf(1)); - small.put("G", Integer.valueOf(1)); - small.put("M", Integer.valueOf(0)); - small.put("F", Integer.valueOf(0)); - small.put("Y", Integer.valueOf(0)); - small.put("W", Integer.valueOf(0)); - small.put("H", Integer.valueOf(0)); - small.put("K", Integer.valueOf(0)); - small.put("R", Integer.valueOf(0)); - small.put("E", Integer.valueOf(0)); - small.put("Q", Integer.valueOf(0)); - small.put("D", Integer.valueOf(1)); - small.put("N", Integer.valueOf(1)); - small.put("S", Integer.valueOf(1)); - small.put("T", Integer.valueOf(1)); - small.put("P", Integer.valueOf(1)); - small.put("-", Integer.valueOf(1)); - small.put("*", Integer.valueOf(1)); + small.put("I", ZERO); + small.put("L", ZERO); + small.put("V", ONE); + small.put("C", ONE); + small.put("A", ONE); + small.put("G", ONE); + small.put("M", ZERO); + small.put("F", ZERO); + small.put("Y", ZERO); + small.put("W", ZERO); + small.put("H", ZERO); + small.put("K", ZERO); + small.put("R", ZERO); + small.put("E", ZERO); + small.put("Q", ZERO); + small.put("D", ONE); + small.put("N", ONE); + small.put("S", ONE); + small.put("T", ONE); + small.put("P", ONE); + small.put("-", ONE); + small.put("*", ONE); } static { - positive.put("I", Integer.valueOf(0)); - positive.put("L", Integer.valueOf(0)); - positive.put("V", Integer.valueOf(0)); - positive.put("C", Integer.valueOf(0)); - positive.put("A", Integer.valueOf(0)); - positive.put("G", Integer.valueOf(0)); - positive.put("M", Integer.valueOf(0)); - positive.put("F", Integer.valueOf(0)); - positive.put("Y", Integer.valueOf(0)); - positive.put("W", Integer.valueOf(0)); - positive.put("H", Integer.valueOf(1)); - positive.put("K", Integer.valueOf(1)); - positive.put("R", Integer.valueOf(1)); - positive.put("E", Integer.valueOf(0)); - positive.put("Q", Integer.valueOf(0)); - positive.put("D", Integer.valueOf(0)); - positive.put("N", Integer.valueOf(0)); - positive.put("S", Integer.valueOf(0)); - positive.put("T", Integer.valueOf(0)); - positive.put("P", Integer.valueOf(0)); - positive.put("-", Integer.valueOf(1)); - positive.put("*", Integer.valueOf(1)); + positive.put("I", ZERO); + positive.put("L", ZERO); + positive.put("V", ZERO); + positive.put("C", ZERO); + positive.put("A", ZERO); + positive.put("G", ZERO); + positive.put("M", ZERO); + positive.put("F", ZERO); + positive.put("Y", ZERO); + positive.put("W", ZERO); + positive.put("H", ONE); + positive.put("K", ONE); + positive.put("R", ONE); + positive.put("E", ZERO); + positive.put("Q", ZERO); + positive.put("D", ZERO); + positive.put("N", ZERO); + positive.put("S", ZERO); + positive.put("T", ZERO); + positive.put("P", ZERO); + positive.put("-", ONE); + positive.put("*", ONE); } static { - negative.put("I", Integer.valueOf(0)); - negative.put("L", Integer.valueOf(0)); - negative.put("V", Integer.valueOf(0)); - negative.put("C", Integer.valueOf(0)); - negative.put("A", Integer.valueOf(0)); - negative.put("G", Integer.valueOf(0)); - negative.put("M", Integer.valueOf(0)); - negative.put("F", Integer.valueOf(0)); - negative.put("Y", Integer.valueOf(0)); - negative.put("W", Integer.valueOf(0)); - negative.put("H", Integer.valueOf(0)); - negative.put("K", Integer.valueOf(0)); - negative.put("R", Integer.valueOf(0)); - negative.put("E", Integer.valueOf(1)); - negative.put("Q", Integer.valueOf(0)); - negative.put("D", Integer.valueOf(1)); - negative.put("N", Integer.valueOf(0)); - negative.put("S", Integer.valueOf(0)); - negative.put("T", Integer.valueOf(0)); - negative.put("P", Integer.valueOf(0)); - negative.put("-", Integer.valueOf(1)); - negative.put("*", Integer.valueOf(1)); + negative.put("I", ZERO); + negative.put("L", ZERO); + negative.put("V", ZERO); + negative.put("C", ZERO); + negative.put("A", ZERO); + negative.put("G", ZERO); + negative.put("M", ZERO); + negative.put("F", ZERO); + negative.put("Y", ZERO); + negative.put("W", ZERO); + negative.put("H", ZERO); + negative.put("K", ZERO); + negative.put("R", ZERO); + negative.put("E", ONE); + negative.put("Q", ZERO); + negative.put("D", ONE); + negative.put("N", ZERO); + negative.put("S", ZERO); + negative.put("T", ZERO); + negative.put("P", ZERO); + negative.put("-", ONE); + negative.put("*", ONE); } static { - charged.put("I", Integer.valueOf(0)); - charged.put("L", Integer.valueOf(0)); - charged.put("V", Integer.valueOf(0)); - charged.put("C", Integer.valueOf(0)); - charged.put("A", Integer.valueOf(0)); - charged.put("G", Integer.valueOf(0)); - charged.put("M", Integer.valueOf(0)); - charged.put("F", Integer.valueOf(0)); - charged.put("Y", Integer.valueOf(0)); - charged.put("W", Integer.valueOf(0)); - charged.put("H", Integer.valueOf(1)); - charged.put("K", Integer.valueOf(1)); - charged.put("R", Integer.valueOf(1)); - charged.put("E", Integer.valueOf(1)); - charged.put("Q", Integer.valueOf(0)); - charged.put("D", Integer.valueOf(1)); - charged.put("N", Integer.valueOf(0)); // Asparagine is polar but not + charged.put("I", ZERO); + charged.put("L", ZERO); + charged.put("V", ZERO); + charged.put("C", ZERO); + charged.put("A", ZERO); + charged.put("G", ZERO); + charged.put("M", ZERO); + charged.put("F", ZERO); + charged.put("Y", ZERO); + charged.put("W", ZERO); + charged.put("H", ONE); + charged.put("K", ONE); + charged.put("R", ONE); + charged.put("E", ONE); + charged.put("Q", ZERO); + charged.put("D", ONE); + charged.put("N", ZERO); // Asparagine is polar but not // charged. // Alternative would be charged and // negative (in basic form)? - charged.put("S", Integer.valueOf(0)); - charged.put("T", Integer.valueOf(0)); - charged.put("P", Integer.valueOf(0)); - charged.put("-", Integer.valueOf(1)); - charged.put("*", Integer.valueOf(1)); + charged.put("S", ZERO); + charged.put("T", ZERO); + charged.put("P", ZERO); + charged.put("-", ONE); + charged.put("*", ONE); } static { - aromatic.put("I", Integer.valueOf(0)); - aromatic.put("L", Integer.valueOf(0)); - aromatic.put("V", Integer.valueOf(0)); - aromatic.put("C", Integer.valueOf(0)); - aromatic.put("A", Integer.valueOf(0)); - aromatic.put("G", Integer.valueOf(0)); - aromatic.put("M", Integer.valueOf(0)); - aromatic.put("F", Integer.valueOf(1)); - aromatic.put("Y", Integer.valueOf(1)); - aromatic.put("W", Integer.valueOf(1)); - aromatic.put("H", Integer.valueOf(1)); - aromatic.put("K", Integer.valueOf(0)); - aromatic.put("R", Integer.valueOf(0)); - aromatic.put("E", Integer.valueOf(0)); - aromatic.put("Q", Integer.valueOf(0)); - aromatic.put("D", Integer.valueOf(0)); - aromatic.put("N", Integer.valueOf(0)); - aromatic.put("S", Integer.valueOf(0)); - aromatic.put("T", Integer.valueOf(0)); - aromatic.put("P", Integer.valueOf(0)); - aromatic.put("-", Integer.valueOf(1)); - aromatic.put("*", Integer.valueOf(1)); + aromatic.put("I", ZERO); + aromatic.put("L", ZERO); + aromatic.put("V", ZERO); + aromatic.put("C", ZERO); + aromatic.put("A", ZERO); + aromatic.put("G", ZERO); + aromatic.put("M", ZERO); + aromatic.put("F", ONE); + aromatic.put("Y", ONE); + aromatic.put("W", ONE); + aromatic.put("H", ONE); + aromatic.put("K", ZERO); + aromatic.put("R", ZERO); + aromatic.put("E", ZERO); + aromatic.put("Q", ZERO); + aromatic.put("D", ZERO); + aromatic.put("N", ZERO); + aromatic.put("S", ZERO); + aromatic.put("T", ZERO); + aromatic.put("P", ZERO); + aromatic.put("-", ONE); + aromatic.put("*", ONE); } static { - aliphatic.put("I", Integer.valueOf(1)); - aliphatic.put("L", Integer.valueOf(1)); - aliphatic.put("V", Integer.valueOf(1)); - aliphatic.put("C", Integer.valueOf(0)); - aliphatic.put("A", Integer.valueOf(0)); - aliphatic.put("G", Integer.valueOf(0)); - aliphatic.put("M", Integer.valueOf(0)); - aliphatic.put("F", Integer.valueOf(0)); - aliphatic.put("Y", Integer.valueOf(0)); - aliphatic.put("W", Integer.valueOf(0)); - aliphatic.put("H", Integer.valueOf(0)); - aliphatic.put("K", Integer.valueOf(0)); - aliphatic.put("R", Integer.valueOf(0)); - aliphatic.put("E", Integer.valueOf(0)); - aliphatic.put("Q", Integer.valueOf(0)); - aliphatic.put("D", Integer.valueOf(0)); - aliphatic.put("N", Integer.valueOf(0)); - aliphatic.put("S", Integer.valueOf(0)); - aliphatic.put("T", Integer.valueOf(0)); - aliphatic.put("P", Integer.valueOf(0)); - aliphatic.put("-", Integer.valueOf(1)); - aliphatic.put("*", Integer.valueOf(1)); + aliphatic.put("I", ONE); + aliphatic.put("L", ONE); + aliphatic.put("V", ONE); + aliphatic.put("C", ZERO); + aliphatic.put("A", ZERO); + aliphatic.put("G", ZERO); + aliphatic.put("M", ZERO); + aliphatic.put("F", ZERO); + aliphatic.put("Y", ZERO); + aliphatic.put("W", ZERO); + aliphatic.put("H", ZERO); + aliphatic.put("K", ZERO); + aliphatic.put("R", ZERO); + aliphatic.put("E", ZERO); + aliphatic.put("Q", ZERO); + aliphatic.put("D", ZERO); + aliphatic.put("N", ZERO); + aliphatic.put("S", ZERO); + aliphatic.put("T", ZERO); + aliphatic.put("P", ZERO); + aliphatic.put("-", ONE); + aliphatic.put("*", ONE); } static { - tiny.put("I", Integer.valueOf(0)); - tiny.put("L", Integer.valueOf(0)); - tiny.put("V", Integer.valueOf(0)); - tiny.put("C", Integer.valueOf(0)); - tiny.put("A", Integer.valueOf(1)); - tiny.put("G", Integer.valueOf(1)); - tiny.put("M", Integer.valueOf(0)); - tiny.put("F", Integer.valueOf(0)); - tiny.put("Y", Integer.valueOf(0)); - tiny.put("W", Integer.valueOf(0)); - tiny.put("H", Integer.valueOf(0)); - tiny.put("K", Integer.valueOf(0)); - tiny.put("R", Integer.valueOf(0)); - tiny.put("E", Integer.valueOf(0)); - tiny.put("Q", Integer.valueOf(0)); - tiny.put("D", Integer.valueOf(0)); - tiny.put("N", Integer.valueOf(0)); - tiny.put("S", Integer.valueOf(1)); - tiny.put("T", Integer.valueOf(0)); - tiny.put("P", Integer.valueOf(0)); - tiny.put("-", Integer.valueOf(1)); - tiny.put("*", Integer.valueOf(1)); + tiny.put("I", ZERO); + tiny.put("L", ZERO); + tiny.put("V", ZERO); + tiny.put("C", ZERO); + tiny.put("A", ONE); + tiny.put("G", ONE); + tiny.put("M", ZERO); + tiny.put("F", ZERO); + tiny.put("Y", ZERO); + tiny.put("W", ZERO); + tiny.put("H", ZERO); + tiny.put("K", ZERO); + tiny.put("R", ZERO); + tiny.put("E", ZERO); + tiny.put("Q", ZERO); + tiny.put("D", ZERO); + tiny.put("N", ZERO); + tiny.put("S", ONE); + tiny.put("T", ZERO); + tiny.put("P", ZERO); + tiny.put("-", ONE); + tiny.put("*", ONE); } static { - proline.put("I", Integer.valueOf(0)); - proline.put("L", Integer.valueOf(0)); - proline.put("V", Integer.valueOf(0)); - proline.put("C", Integer.valueOf(0)); - proline.put("A", Integer.valueOf(0)); - proline.put("G", Integer.valueOf(0)); - proline.put("M", Integer.valueOf(0)); - proline.put("F", Integer.valueOf(0)); - proline.put("Y", Integer.valueOf(0)); - proline.put("W", Integer.valueOf(0)); - proline.put("H", Integer.valueOf(0)); - proline.put("K", Integer.valueOf(0)); - proline.put("R", Integer.valueOf(0)); - proline.put("E", Integer.valueOf(0)); - proline.put("Q", Integer.valueOf(0)); - proline.put("D", Integer.valueOf(0)); - proline.put("N", Integer.valueOf(0)); - proline.put("S", Integer.valueOf(0)); - proline.put("T", Integer.valueOf(0)); - proline.put("P", Integer.valueOf(1)); - proline.put("-", Integer.valueOf(1)); - proline.put("*", Integer.valueOf(1)); + proline.put("I", ZERO); + proline.put("L", ZERO); + proline.put("V", ZERO); + proline.put("C", ZERO); + proline.put("A", ZERO); + proline.put("G", ZERO); + proline.put("M", ZERO); + proline.put("F", ZERO); + proline.put("Y", ZERO); + proline.put("W", ZERO); + proline.put("H", ZERO); + proline.put("K", ZERO); + proline.put("R", ZERO); + proline.put("E", ZERO); + proline.put("Q", ZERO); + proline.put("D", ZERO); + proline.put("N", ZERO); + proline.put("S", ZERO); + proline.put("T", ZERO); + proline.put("P", ONE); + proline.put("-", ONE); + proline.put("*", ONE); } static diff --git a/test/jalview/schemes/ResiduePropertiesTest.java b/test/jalview/schemes/ResiduePropertiesTest.java index b68ca68..41d7448 100644 --- a/test/jalview/schemes/ResiduePropertiesTest.java +++ b/test/jalview/schemes/ResiduePropertiesTest.java @@ -25,6 +25,7 @@ import static org.testng.AssertJUnit.assertNull; import java.util.Collections; import java.util.List; +import java.util.Map; import org.testng.annotations.Test; @@ -1556,4 +1557,62 @@ public class ResiduePropertiesTest assertEquals('Q', ResidueProperties.getSingleCharacterCode("Gln")); assertEquals('Q', ResidueProperties.getSingleCharacterCode("gln")); } + + @Test(groups = { "Functional" }) + public void testPhysicoChemicalProperties() + { + checkProperty("aromatic", "FYWH-*"); + checkProperty("aliphatic", "IVL-*"); + checkProperty("tiny", "GAS-*"); + checkProperty("small", "VCTGACSDNP-*"); + checkProperty("charged", "HKRDE-*"); + checkProperty("negative", "DE-*"); + checkProperty("polar", "YWHRKTSNDEQ-*X"); + checkProperty("positive", "HKR-*"); + checkProperty("proline", "P-*"); + checkProperty("hydrophobic", "MILVFYWHKCGAC-*X"); + } + + /** + * Verify that the residues in the list have the named property, and other + * residues do not + * + * @param property + * @param residues + */ + void checkProperty(String property, String residues) + { + Map props = ResidueProperties.propHash.get(property); + + /* + * assert residues have the property (value 1 in lookup) + */ + for (char res : residues.toCharArray()) + { + assertEquals(res + " should be " + property, 1, + props.get(String.valueOf(res)).intValue()); + } + + /* + * assert other residues do not (value 0 in lookup) + */ + for (String res : ResidueProperties.aa) + { + if (!residues.contains(res)) + { + Integer propValue = props.get(String.valueOf(res)); + + if (propValue != null) + { + /* + * conservation calculation assigns unexpected symbols + * the same value as '-'; here we just check those which + * explicitly do not have the property + */ + assertEquals(res + " should not be " + property, 0, + propValue.intValue()); + } + } + } + } } -- 1.7.10.2