/* * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.nbio.aaproperties; import org.biojava.nbio.aaproperties.PeptideProperties; import org.biojava.nbio.aaproperties.Utils; import org.biojava.nbio.aaproperties.xml.AminoAcidCompositionTable; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.bind.JAXBException; import java.io.File; import java.io.FileNotFoundException; import java.util.Map; import static org.junit.Assert.*; public class PeptidePropertiesImplTest { private final static Logger logger = LoggerFactory.getLogger(PeptidePropertiesImplTest.class); private static final double delta = 0.00001; /** * Test input */ private final String sequence = "MTADGPCRELLCQLRAAVRHRWWC1"; private final String fullInvalidSequence = "3176412372301230183--2310"; @Test public void testAAComposition() { //'W', 'C', 'M', 'H', 'Y', 'F', 'Q', 'N', 'I', 'R', 'D', 'P', 'T', 'K', 'E', 'V', 'S', 'G', 'A', 'L' Map<String, Double> composition = PeptideProperties.getAACompositionString(sequence); int sequenceLength = sequence.length() - Utils.getNumberOfInvalidChar(sequence, null, true); assertEquals(2.0/sequenceLength,composition.get("W"), delta); assertEquals(3.0/sequenceLength,composition.get("C"), delta); assertEquals(1.0/sequenceLength,composition.get("M"), delta); assertEquals(1.0/sequenceLength,composition.get("H"), delta); assertEquals(0.0/sequenceLength,composition.get("Y"), delta); assertEquals(0.0/sequenceLength,composition.get("F"), delta); assertEquals(1.0/sequenceLength,composition.get("Q"), delta); assertEquals(0.0/sequenceLength,composition.get("N"), delta); assertEquals(0.0/sequenceLength,composition.get("I"), delta); assertEquals(4.0/sequenceLength,composition.get("R"), delta); assertEquals(1.0/sequenceLength,composition.get("D"), delta); assertEquals(1.0/sequenceLength,composition.get("P"), delta); assertEquals(1.0/sequenceLength,composition.get("T"), delta); assertEquals(0.0/sequenceLength,composition.get("K"), delta); assertEquals(1.0/sequenceLength,composition.get("E"), delta); assertEquals(1.0/sequenceLength,composition.get("V"), delta); assertEquals(0.0/sequenceLength,composition.get("S"), delta); assertEquals(1.0/sequenceLength,composition.get("G"), delta); assertEquals(3.0/sequenceLength,composition.get("A"), delta); assertEquals(3.0/sequenceLength,composition.get("L"), delta); Map<String, Double> iComposition = PeptideProperties.getAACompositionString(fullInvalidSequence); assertEquals(0.0,iComposition.get("W"), delta); assertEquals(0.0,iComposition.get("C"), delta); assertEquals(0.0,iComposition.get("M"), delta); assertEquals(0.0,iComposition.get("H"), delta); assertEquals(0.0,iComposition.get("Y"), delta); assertEquals(0.0,iComposition.get("F"), delta); assertEquals(0.0,iComposition.get("Q"), delta); assertEquals(0.0,iComposition.get("N"), delta); assertEquals(0.0,iComposition.get("I"), delta); assertEquals(0.0,iComposition.get("R"), delta); assertEquals(0.0,iComposition.get("D"), delta); assertEquals(0.0,iComposition.get("P"), delta); assertEquals(0.0,iComposition.get("T"), delta); assertEquals(0.0,iComposition.get("K"), delta); assertEquals(0.0,iComposition.get("E"), delta); assertEquals(0.0,iComposition.get("V"), delta); assertEquals(0.0,iComposition.get("S"), delta); assertEquals(0.0,iComposition.get("G"), delta); assertEquals(0.0,iComposition.get("A"), delta); assertEquals(0.0,iComposition.get("L"), delta); //Null would be returned for invalid character assertNotSame(0d, composition.get("Z")); assertNull(composition.get(null)); assertNull(composition.get("")); assertNull(composition.get("1")); } @Test() public void testEnrichment() { //'W', 'C', 'M', 'H', 'Y', 'F', 'Q', 'N', 'I', 'R', 'D', 'P', 'T', 'K', 'E', 'V', 'S', 'G', 'A', 'L' int sequenceLength = sequence.length(); assertEquals(2.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "W"), delta); assertEquals(3.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "C"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "M"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "H"), delta); assertEquals(0.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "Y"), delta); assertEquals(0.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "F"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "Q"), delta); assertEquals(0.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "N"), delta); assertEquals(0.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "I"), delta); assertEquals(4.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "R"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "D"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "P"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "T"), delta); assertEquals(0.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "K"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "E"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "V"), delta); assertEquals(0.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "S"), delta); assertEquals(1.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "G"), delta); assertEquals(3.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "A"), delta); assertEquals(3.0/sequenceLength, PeptideProperties.getEnrichment(sequence, "L"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "W"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "C"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "M"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "H"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "Y"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "F"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "Q"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "N"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "I"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "R"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "D"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "P"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "T"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "K"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "E"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "V"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "S"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "G"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "A"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(fullInvalidSequence, "L"), delta); assertEquals(0.0, PeptideProperties.getEnrichment(sequence, "X"), delta); } @Test (expected = NullPointerException.class) public void testEnrichmentNull(){ assertEquals(0.0, PeptideProperties.getEnrichment(sequence, ""), delta); assertNull(PeptideProperties.getEnrichment(sequence, "1")); } @Test public void testMolecularWeight(){ //http://www.innovagen.se/custom-peptide-synthesis/peptide-property-calculator/peptide-property-calculator.asp //http://au.expasy.org/cgi-bin/protparam //2872.4 is the value computed by the above two web tools assertEquals(2872.4, Utils.roundToDecimals(PeptideProperties.getMolecularWeight(sequence), 1), delta); assertEquals(0.0, PeptideProperties.getMolecularWeight("Z"), delta); assertEquals(0.0, PeptideProperties.getMolecularWeight("1"), delta); assertEquals(0.0, PeptideProperties.getMolecularWeight(fullInvalidSequence), delta); } @Test public void testMolecularWeightXML() throws FileNotFoundException, JAXBException{ File elementMassFile = new File("./src/main/resources/ElementMass.xml"); File aminoAcidCompositionFile = new File("./src/main/resources/AminoAcidComposition.xml"); assertEquals( PeptideProperties.getMolecularWeight("A", elementMassFile, aminoAcidCompositionFile) * 5.0 - 4 * (17.0073 + 1.0079), PeptideProperties.getMolecularWeight("AAAAA", elementMassFile, aminoAcidCompositionFile), delta); } @Test public void testMolecularWeightXMLSingleFile() throws FileNotFoundException, JAXBException{ File aminoAcidCompositionFile = new File("./src/main/resources/AminoAcidComposition.xml"); assertEquals( PeptideProperties.getMolecularWeight("A", aminoAcidCompositionFile) * 5.0 - 4 * (17.0073 + 1.0079), PeptideProperties.getMolecularWeight("AAAAA", aminoAcidCompositionFile), delta); } @Test public void testMolecularWeightBasedOnAminoAcidCompositionTable() throws Exception{ File elementMassFile = new File("./src/main/resources/ElementMass.xml"); File aminoAcidCompositionFile = new File("./src/main/resources/AminoAcidComposition.xml"); AminoAcidCompositionTable table = PeptideProperties.obtainAminoAcidCompositionTable(elementMassFile, aminoAcidCompositionFile); assertEquals( PeptideProperties.getMolecularWeightBasedOnXML("A", table) * 5.0 - 4 * (17.0073 + 1.0079), PeptideProperties.getMolecularWeightBasedOnXML("AAAAA", table), delta); } @Test (expected = NullPointerException.class) public void testMolecularWeightXMLNull() throws FileNotFoundException, JAXBException{ PeptideProperties.getMolecularWeight(sequence, null, null); } @Test public void testExtinctionCoefficient(){ //http://au.expasy.org/cgi-bin/protparam assertEquals(11125.0, PeptideProperties.getExtinctionCoefficient(sequence, false), delta); assertEquals(11000.0, PeptideProperties.getExtinctionCoefficient(sequence, true), delta); assertEquals(0.0, PeptideProperties.getExtinctionCoefficient(fullInvalidSequence, true), delta); assertEquals(0.0, PeptideProperties.getExtinctionCoefficient(fullInvalidSequence, false), delta); } @Test (expected = NullPointerException.class) public void testExtinctionCoefficientNull(){ assertEquals(11000.0, PeptideProperties.getExtinctionCoefficient(null, true), delta); } @Test public void testAbsorbance(){ //http://au.expasy.org/cgi-bin/protparam assertEquals(3.830, PeptideProperties.getAbsorbance(sequence, true), 0.001); assertEquals(3.873, PeptideProperties.getAbsorbance(sequence, false), 0.001); assertEquals(0.0, PeptideProperties.getAbsorbance(fullInvalidSequence, true), 0.001); assertEquals(0.0, PeptideProperties.getAbsorbance(fullInvalidSequence, false), 0.001); } @Test (expected = NullPointerException.class) public void testAbsorbanceNull(){ assertEquals(3.830, PeptideProperties.getAbsorbance(null, false), delta); } @Test public void testInstabilityIndex(){ //http://au.expasy.org/cgi-bin/protparam assertEquals(38.48, PeptideProperties.getInstabilityIndex(sequence), 0.01); assertEquals(0.0, PeptideProperties.getInstabilityIndex(fullInvalidSequence), 0.01); } @Test (expected = NullPointerException.class) public void testInstabilityIndexNull(){ assertEquals(38.48, PeptideProperties.getInstabilityIndex(null), delta); } @Test public void testApliphaticIndex(){ //http://au.expasy.org/cgi-bin/protparam assertEquals(73.33, PeptideProperties.getApliphaticIndex(sequence), 0.01); assertEquals(0.0, PeptideProperties.getApliphaticIndex(fullInvalidSequence), 0.01); } @Test (expected = NullPointerException.class) public void testApliphaticIndexNull(){ assertEquals(73.33, PeptideProperties.getApliphaticIndex(null), 0.01); } @Test public void testAverageHydropathy(){ //http://au.expasy.org/cgi-bin/protparam assertEquals(-0.242, PeptideProperties.getAvgHydropathy(sequence), 0.001); assertEquals(0.0, PeptideProperties.getAvgHydropathy(fullInvalidSequence), 0.001); } @Test (expected = NullPointerException.class) public void testAverageHydropathyNull(){ assertEquals(-0.242, PeptideProperties.getAvgHydropathy(null), 0.001); } @Test public void testIsoelectricPointInnovagen(){ /* * Test for Innovagen */ //http://www.innovagen.se/custom-peptide-synthesis/peptide-property-calculator/peptide-property-calculator.asp assertEquals(9.01, PeptideProperties.getIsoelectricPoint(sequence, false), 0.01); assertEquals(7.00, PeptideProperties.getIsoelectricPoint(fullInvalidSequence, false), 0.01); assertEquals(2.70, PeptideProperties.getIsoelectricPoint("ACCACAAADADADACA", false), 0.01); } @Test public void testIsoelectricPointExpasy(){ /* * Test for Expasy */ assertEquals(3.42, PeptideProperties.getIsoelectricPoint("ACCACAAADADADACA"), 0.01); assertEquals(3.42, PeptideProperties.getIsoelectricPoint("ACCACAAADADADACM"), 0.01); // assertEquals(3.37, PeptideProperties.getIsoelectricPoint("ECCACAAADADADACS", true), 0.01); assertEquals(3.24, PeptideProperties.getIsoelectricPoint("ADCCACAAADADADACDAAAAAAAAAAAA", true), 0.01); //3.32 at Expasy assertEquals(3.32, PeptideProperties.getIsoelectricPoint("DCCACAAADADADACS", true), 0.01); assertEquals(3.17, PeptideProperties.getIsoelectricPoint("DCCACAAADADADACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD", true), 0.01); assertEquals(3.37, PeptideProperties.getIsoelectricPoint("ACCACAAADADADACE", true), 0.01); assertEquals(3.32, PeptideProperties.getIsoelectricPoint("ACCACAAADADADACAAAAAAAAAAAAAAD", true), 0.01); assertEquals(3.28, PeptideProperties.getIsoelectricPoint("DCCACAAADADADACE", true), 0.01); assertEquals(8.71, PeptideProperties.getIsoelectricPoint("MTADGPCRELLCQLRAAVRHRWWC", true), 0.01); assertEquals(8.71, PeptideProperties.getIsoelectricPoint(sequence, true), 0.01); assertEquals(0.0, PeptideProperties.getIsoelectricPoint(fullInvalidSequence, true), 0.01); } @Test (expected = NullPointerException.class) public void testIsoelectricPointNull(){ assertEquals(8.6, PeptideProperties.getIsoelectricPoint(null), 0.1); } @Test public void testNetCharge(){ /* * Test for Innovagen */ //http://www.innovagen.se/custom-peptide-synthesis/peptide-property-calculator/peptide-property-calculator.asp assertEquals(2.9, PeptideProperties.getNetCharge(sequence, false), 0.1); assertEquals(0.0, PeptideProperties.getNetCharge(fullInvalidSequence, false), 0.1); assertEquals(-3.2, PeptideProperties.getNetCharge("ACCACAAADADADACA", false), 0.1); /* * Did not test for Expasy because in their website, net charge is not given. * However, since Isoelectric point is given which rely on getNetCharge values therefore, * we infer that if getIsoelectricPoint is correct, getNetCharge would be correct for Expasy. */ /* * Provided by Steve Darnell to compare the difference between Innovagen and Expasy */ String[] alpha = {"A",/*"B",*/"C","D","E","F","G","H","I",/*"J",*/ "K","L","M","N",/*"O",*/"P","Q","R","S","T", /*"U",*/"V","W",/*"X",*/"Y"/*,"Z"*/}; for (String aa : alpha) { String p = String.format("AA%sAA", aa); logger.debug(p); logger.debug("pH\tInnovagen\tExpasy\tdiff"); for ( int i = 1; i < 15; i++) { double phPoint = (new Double(i)).doubleValue(); double chrgInnovagen = PeptideProperties.getNetCharge(p,false,phPoint); double chrgExpasy = PeptideProperties.getNetCharge(p,true,phPoint); logger.debug(String.format("%2.1f\t%2.2f\t%2.2f\t%2.2f", phPoint, chrgInnovagen, chrgExpasy, chrgInnovagen - chrgExpasy)); } } } @Test (expected = NullPointerException.class) public void testNetChargeNull(){ assertEquals(8.6, PeptideProperties.getNetCharge(null), delta); } }