All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hfg.bio.NTerminalGroup Maven / Gradle / Ivy

There is a newer version: 20240423
Show newest version
package com.hfg.bio;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import com.hfg.chem.Charge;
import com.hfg.chem.Element;
import com.hfg.chem.IonizableGroup;
import com.hfg.chem.Molecule;
import com.hfg.xml.XMLNode;
import com.hfg.xml.XMLAttribute;
import com.hfg.util.StringUtil;

//------------------------------------------------------------------------------
/**
 N-terminal protein group.
 
@author J. Alex Taylor, hairyfatguy.com
*/ //------------------------------------------------------------------------------ // com.hfg XML/HTML Coding Library // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com // [email protected] //------------------------------------------------------------------------------ public class NTerminalGroup extends Molecule { // This declaration has to come before the public constants below. private static Set sValues = new HashSet<>(); //########################################################################## // PUBLIC FIELDS //########################################################################## public static final NTerminalGroup UNMODIFIED_N_TERMINUS = new NTerminalGroup("Unmodified", "<"); public static final NTerminalGroup BOC_T_BUTYLOXYCARBONYL = new NTerminalGroup("Boc (t-butyloxycarbonyl)-", "Boc-"); public static final NTerminalGroup CBZ_BENZYLOXYCARBONLYL = new NTerminalGroup("CBZ (Benzyloxycarbonyl)-", "CBZ-"); public static final NTerminalGroup N_ACETYL = new NTerminalGroup("N-acetyl-", "N-acetyl-"); public static final NTerminalGroup N_CARBAMYL = new NTerminalGroup("N-carbamyl-", "N-carbamyl-"); public static final NTerminalGroup N_FORMYL = new NTerminalGroup("N-formyl-", "N-formyl-"); public static final NTerminalGroup N_METHYL = new NTerminalGroup("N-methyl-", "N-methyl-"); public static final NTerminalGroup N_MYRISTOYL = new NTerminalGroup("N-myristoyl-", "N-myristoyl-"); public static final NTerminalGroup PYRO_GLU_N_TERM_GLU = new NTerminalGroup("Pyro-glu (N-term E)", "pyroglu-"); public static final NTerminalGroup PYRO_GLU_N_TERM_GLN = new NTerminalGroup("Pyro-glu (N-term Q)", "pyroglu-"); static { UNMODIFIED_N_TERMINUS .addAtoms(Element.HYDROGEN, 1) .addKa(new IonizableGroup(1.0E-8, Charge.POSITIVE)) // pKa 8.0 .lock() .register(); BOC_T_BUTYLOXYCARBONYL .addAtoms(Element.CARBON, 5) .addAtoms(Element.HYDROGEN, 9) .addAtoms(Element.OXYGEN, 2) .lock() .register(); CBZ_BENZYLOXYCARBONLYL .addAtoms(Element.CARBON, 8) .addAtoms(Element.HYDROGEN, 7) .addAtoms(Element.OXYGEN, 2) .lock() .register(); N_ACETYL .addAtoms(Element.CARBON, 2) .addAtoms(Element.HYDROGEN, 3) .addAtoms(Element.OXYGEN, 1) .lock() .register(); N_CARBAMYL .addAtoms(Element.CARBON, 1) .addAtoms(Element.HYDROGEN, 2) .addAtoms(Element.NITROGEN, 1) .addAtoms(Element.OXYGEN, 1) .lock() .register(); N_FORMYL .addAtoms(Element.CARBON, 1) .addAtoms(Element.HYDROGEN, 1) .addAtoms(Element.OXYGEN, 1) .lock() .register(); N_METHYL .addAtoms(Element.CARBON, 1) .addAtoms(Element.HYDROGEN, 3) .lock() .register(); N_MYRISTOYL .addAtoms(Element.CARBON, 14) .addAtoms(Element.HYDROGEN, 27) .addAtoms(Element.OXYGEN, 1) .lock() .register(); PYRO_GLU_N_TERM_GLN .addAtoms(Element.HYDROGEN, -2) .addAtoms(Element.NITROGEN, -1) .lock() .register(); PYRO_GLU_N_TERM_GLU .addAtoms(Element.HYDROGEN, -1) .addAtoms(Element.OXYGEN, -1) .lock() .register(); } //########################################################################## // PRIVATE FIELDS //########################################################################## private String mShortName; //########################################################################## // CONSTRUCTORS //########################################################################## //-------------------------------------------------------------------------- public NTerminalGroup(String inName) { super(inName); } //-------------------------------------------------------------------------- private NTerminalGroup(String inName, String inShortName) { super(inName); mShortName = inShortName; } //-------------------------------------------------------------------------- public NTerminalGroup(String inName, Map inElementalComposition) { super(inName, inElementalComposition); } //-------------------------------------------------------------------------- public NTerminalGroup(XMLNode inXML) { super(inXML.getAttributeValue(HfgBioXML.NAME_ATT)); if (! inXML.getTagName().equals(HfgBioXML.NTERM_TAG)) { throw new RuntimeException("Cannot construct an " + this.getClass().getSimpleName() + " from a " + inXML.getTagName() + " tag!"); } XMLNode sidechainKasTag = inXML.getOptionalSubtagByName(HfgBioXML.SIDECHAIN_KAS_TAG); if (sidechainKasTag != null) { for (XMLNode subtag : sidechainKasTag.getXMLNodeSubtags()) { addKa(new IonizableGroup(subtag)); } } mShortName = inXML.getAttributeValue(HfgBioXML.SHORT_NAME_ATT); XMLNode compTag = inXML.getOptionalSubtagByName(HfgBioXML.ELEMENTAL_COMP_TAG); if (compTag != null) { for (XMLAttribute attr : compTag.getAttributes()) { addAtoms(Element.valueOf(attr.getName()), Float.parseFloat(attr.getValue())); } } } //########################################################################## // PUBLIC METHODS //########################################################################## //-------------------------------------------------------------------------- public static NTerminalGroup[] values() { return sValues.toArray(new NTerminalGroup[sValues.size()]); } //-------------------------------------------------------------------------- /** Returns the NTerminalGroup whose name matches the specified String. @param inString the name for the NTerminalGroup to retrieve @return the NTerminalGroup whose name matches the specified String */ public static NTerminalGroup valueOf(String inString) { NTerminalGroup value = null; if (StringUtil.isSet(inString)) { for (NTerminalGroup group : sValues) { if (group.name().equalsIgnoreCase(inString)) { value = group; break; } } } return value; } //-------------------------------------------------------------------------- /** Puts the NTerminalGroup into the Set of unique NTerminalGroups returned by NTerminalGroup.values(). */ public void register() { if (! isLocked()) { throw new RuntimeException("Only locked NTerminalGroups can be added to the values list!"); } sValues.add(this); } //-------------------------------------------------------------------------- @Override public NTerminalGroup addAtoms(Element inElement, int inNum) { return (NTerminalGroup) super.addAtoms(inElement, inNum); } //-------------------------------------------------------------------------- @Override public NTerminalGroup lock() { return (NTerminalGroup) super.lock(); } //-------------------------------------------------------------------------- @Override public NTerminalGroup addKa(IonizableGroup inValue) { return (NTerminalGroup) super.addKa(inValue); } //-------------------------------------------------------------------------- public String getShortName() { return mShortName; } //-------------------------------------------------------------------------- @Override public XMLNode toXMLNode() { XMLNode node = super.toXMLNode(); node.setTagName(HfgBioXML.NTERM_TAG); if (StringUtil.isSet(mShortName)) node.setAttribute(HfgBioXML.SHORT_NAME_ATT, mShortName); return node; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy