/*
* 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.bio.proteomics;
import junit.framework.TestCase;
import org.biojava.bio.BioException;
import org.biojava.bio.seq.ProteinTools;
import org.biojava.bio.seq.io.SymbolTokenization;
import org.biojava.bio.symbol.AlphabetManager;
import org.biojava.bio.symbol.FiniteAlphabet;
import org.biojava.bio.symbol.IllegalSymbolException;
import org.biojava.bio.symbol.SimpleSymbolList;
import org.biojava.bio.symbol.SymbolList;
import org.biojava.bio.symbol.SymbolPropertyTable;
/**
* MassCalcTest
tests molecular mass calculation.
*
* @author Keith James
* @author George Waldon - EstimatedMass
*/
public class MassCalcTest extends TestCase
{
private final double delta = 0.000000001;
protected FiniteAlphabet protAlpha;
protected double monoH = 1.0078250;
protected double avgH = 1.00794;
protected double monoO = 15.9949146;
protected double avgO = 15.9994;
protected double monoAla = 71.037114;
protected double avgAla = 71.0788;
protected SymbolList syms1;
protected void setUp() throws BioException
{
protAlpha = (FiniteAlphabet)
AlphabetManager.alphabetForName("PROTEIN");
SymbolTokenization protToke = protAlpha.getTokenization("token");
syms1 = new SimpleSymbolList(protToke, "A");
}
public MassCalcTest(String name)
{
super(name);
}
public void testStaticgetMolecularWeight() {
try {
SymbolList pro = ProteinTools.createProtein("arndceqghilkmfpstwyv");
double m1 = MassCalc.getMolecularWeight(pro);
double m2 = MassCalc.getMass(pro,SymbolPropertyTable.AVG_MASS,false);
assertTrue(m1==m2);
SymbolList proX = ProteinTools.createProtein("xxxxxxxxxxxxxxxxxxxx");
double m3 = MassCalc.getMolecularWeight(proX);
assertTrue( Math.abs(m3-m1)<0.000000000001 );
SymbolList proX2 = ProteinTools.createProtein("xxxxxx-xxxxxxxxxxxxxx");
double m4 = MassCalc.getMolecularWeight(proX2);
assertTrue( Math.abs(m4-m1)<0.000000000001 );
} catch (IllegalSymbolException ex) {
fail(ex.getMessage());
}
}
/**
* testStaticGetMass
tests the static
* getMass
method.
*
* @exception IllegalSymbolException if an error occurs.
*/
public void testStaticGetMass() throws IllegalSymbolException
{
double mass = 0.0;
//double delta = 0.0;
mass = MassCalc.getMass(syms1,
SymbolPropertyTable.MONO_MASS,
false);
assertEquals(monoAla + (monoO + monoH) + monoH,
mass, delta);
mass = MassCalc.getMass(syms1,
SymbolPropertyTable.MONO_MASS,
true);
assertEquals(monoAla + (monoO + monoH) + monoH + monoH,
mass, delta);
mass = MassCalc.getMass(syms1,
SymbolPropertyTable.AVG_MASS,
false);
assertEquals(avgAla + (avgO + avgH) + avgH,
mass, delta);
mass = MassCalc.getMass(syms1,
SymbolPropertyTable.AVG_MASS,
true);
assertEquals(avgAla + (avgO + avgH) + avgH + avgH,
mass, delta);
}
/**
* testGetMass
tests the non-static
* getMass
method.
*
* @exception IllegalSymbolException if an error occurs.
*/
public void testGetMass() throws IllegalSymbolException
{
//double delta = 0.0;
MassCalc mCalc;
mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, false);
assertEquals(monoAla + (monoO + monoH) + monoH,
mCalc.getMass(syms1), delta);
mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, true);
assertEquals(monoAla + (monoO + monoH) + monoH + monoH,
mCalc.getMass(syms1), delta);
mCalc = new MassCalc(SymbolPropertyTable.AVG_MASS, false);
assertEquals(avgAla + (avgO + avgH) + avgH,
mCalc.getMass(syms1), delta);
mCalc = new MassCalc(SymbolPropertyTable.AVG_MASS, true);
assertEquals(avgAla + (avgO + avgH) + avgH + avgH,
mCalc.getMass(syms1), delta);
}
/**
* testGetTermMass
which returns the terminal mass
* being added by the instance.
*/
public void testGetTermMass() throws IllegalSymbolException
{
//double delta = 0.0;
MassCalc mCalc;
mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, false);
assertEquals(monoO + monoH + monoH,
mCalc.getTermMass(), delta);
mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, true);
assertEquals(monoO + monoH + monoH + monoH,
mCalc.getTermMass(), delta);
mCalc = new MassCalc(SymbolPropertyTable.AVG_MASS, false);
assertEquals(avgO + avgH + avgH,
mCalc.getTermMass(), delta);
mCalc = new MassCalc(SymbolPropertyTable.AVG_MASS, true);
assertEquals(avgO + avgH + avgH + avgH,
mCalc.getTermMass(), delta);
}
/**
* testSetSymbolModification
which allows a user
* defined mass to be set for a residue.
*
* @exception IllegalSymbolException if an error occurs.
*/
public void testSetSymbolModification() throws IllegalSymbolException
{
//double delta = 0.0;
double newAla = 1.0;
MassCalc mCalc;
mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, false);
mCalc.setSymbolModification('A', newAla);
assertEquals(newAla + (monoO + monoH) + monoH,
mCalc.getMass(syms1), delta);
mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, true);
mCalc.setSymbolModification('A', newAla);
assertEquals(newAla + (monoO + monoH) + monoH + monoH,
mCalc.getMass(syms1), delta);
mCalc = new MassCalc(SymbolPropertyTable.AVG_MASS, false);
mCalc.setSymbolModification('A', newAla);
assertEquals(newAla + (avgO + avgH) + avgH,
mCalc.getMass(syms1), delta);
mCalc = new MassCalc(SymbolPropertyTable.AVG_MASS, true);
mCalc.setSymbolModification('A', newAla);
assertEquals(newAla + (avgO + avgH) + avgH + avgH,
mCalc.getMass(syms1), delta);
}
/**
* Checks the MassCalc can use PROTEIN and PROTEIN-TERM
*/
public void testAlphabetTolerance(){
try {
SymbolList syms = ProteinTools.createProtein("achtyilqw");
MassCalc mCalc = new MassCalc(SymbolPropertyTable.MONO_MASS, false);
mCalc.getMass(syms);
} catch (IllegalSymbolException ex) {
fail(ex.getMessage());
}
}
}