org.biojava.nbio.aaproperties.xml.AminoAcidCompositionTable Maven / Gradle / Ivy
/*
* 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.xml;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@XmlRootElement(name="compoundtable", namespace="http://biojava.org")
@XmlAccessorType(XmlAccessType.NONE)
public class AminoAcidCompositionTable {
/**
* Contains the list of amino acid composition
*/
@XmlElement(name = "compound", required = true)
private List aminoacid;
/**
* Defines the amino acid compound set unique to this table
*/
private ModifiedAminoAcidCompoundSet modifiedAminoAcidCompoundSet;
/**
* Stores the mapping of amino acid symbol to its molecular weight
*/
private Map aaSymbol2MolecularWeight;
public AminoAcidCompositionTable(){}
public AminoAcidCompositionTable(List aaList){
this.setAminoacid(aaList);
}
public ModifiedAminoAcidCompoundSet getAminoAcidCompoundSet(){
return this.modifiedAminoAcidCompoundSet;
}
public List getAminoacid() {
return aminoacid;
}
public void setAminoacid(List aminoacid) {
this.aminoacid = aminoacid;
}
public Set getSymbolSet(){
return this.aaSymbol2MolecularWeight.keySet();
}
private void generatesAminoAcidCompoundSet(){
this.modifiedAminoAcidCompoundSet = new ModifiedAminoAcidCompoundSet(this.aminoacid, this.aaSymbol2MolecularWeight);
}
/**
* Computes and store the molecular weight of each amino acid by its symbol in aaSymbol2MolecularWeight.
*
* @param eTable
* Stores the mass of elements and isotopes
*/
public void computeMolecularWeight(ElementTable eTable){
this.aaSymbol2MolecularWeight = new HashMap();
for(AminoAcidComposition a:aminoacid){
//Check to ensure that the symbol is of single character
if(a.getSymbol().length() != 1){
throw new Error(a.getSymbol() + " is not allowed. Symbols must be single character.\r\nPlease check AminoAcidComposition XML file");
}
//Check to ensure that the symbols are not repeated
char c = a.getSymbol().charAt(0);
if(this.aaSymbol2MolecularWeight.keySet().contains(c)){
throw new Error("Symbol " + c + " is repeated.\r\n" +
"Please check AminoAcidComposition XML file to ensure there are no repeated symbols. Note that this is case-insensitive.\r\n" +
"This means that having 'A' and 'a' would be repeating.");
}
double total = 0.0;
if(a.getElementList() != null){
for(Name2Count element:a.getElementList()){
element.getName();
if(eTable.getElement(element.getName()) == null){
throw new Error("Element " + element.getName() + " could not be found. " +
"\r\nPlease ensure that its name is correct in AminoAcidComposition.xml and is defined in ElementMass.xml.");
}
eTable.getElement(element.getName()).getMass();
total += eTable.getElement(element.getName()).getMass() * element.getCount();
}
}
if(a.getIsotopeList() != null){
for(Name2Count isotope:a.getIsotopeList()){
isotope.getName();
if(eTable.getIsotope(isotope.getName()) == null){
throw new Error("Isotope " + isotope.getName() + " could not be found. " +
"\r\nPlease ensure that its name is correct in AminoAcidComposition.xml and is defined in ElementMass.xml.");
}
eTable.getIsotope(isotope.getName()).getMass();
total += eTable.getIsotope(isotope.getName()).getMass() * isotope.getCount();
}
}
c = a.getSymbol().charAt(0);
this.aaSymbol2MolecularWeight.put(c, total);
}
generatesAminoAcidCompoundSet();
}
/**
* @param aaSymbol
* Standard symbol of Amino Acid
* @return the molecular weight given its symbol
* @throws NullPointerException
* thrown if AminoAcidCompositionTable.computeMolecularWeight(ElementTable) is not called before this method
*/
public double getMolecularWeight(Character aaSymbol) throws NullPointerException{
if(this.aaSymbol2MolecularWeight == null){
throw new NullPointerException("Please call AminoAcidCompositionTable.computeMolecularWeight(ElementTable) before this method");
}
Double d = this.aaSymbol2MolecularWeight.get(aaSymbol);
if(d == null)
return 0;
else
return d;
}
}