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

org.openscience.cdk.Isotope Maven / Gradle / Ivy

/*
 * Copyright (C) 1997-2012  Christoph Steinbeck 
 *                          Egon Willighagen 
 *                          Rajarshi Guha 
 *
 * Contact: [email protected]
 *
 * This program 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.
 * All I ask is that proper credit is given for my work, which includes
 * - but is not limited to - adding the above copyright notice to the beginning
 * of your source code files, and to any copyright notice that you may distribute
 * with programs based on this work.
 *
 * This program 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 program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 */
package org.openscience.cdk;

import org.openscience.cdk.interfaces.IElement;
import org.openscience.cdk.interfaces.IIsotope;

import java.io.Serializable;

/**
 * Used to store and retrieve data of a particular isotope.
 * For example, an carbon 13 isotope can be created with:
 * 
 *   Isotope carbon = new Isotope("C", 13);
 * 
* *

A full specification can be constructed with: *

 *   // make deuterium
 *   Isotope carbon = new Isotope(1, "H", 2, 2.01410179, 100.0);
 * 
* *

Once instantiated all field not filled by passing parameters * to the constructor are null. Isotopes can be configured by using * the IsotopeFactory.configure() method: *

 *   Isotope isotope = new Isotope("C", 13);
 *   IsotopeFactory if = IsotopeFactory.getInstance(isotope.getNewBuilder());
 *   if.configure(isotope);
 * 
* * @cdk.module data * @cdk.githash * * @author steinbeck * @cdk.created 2001-08-21 * * @cdk.keyword isotope */ public class Isotope extends Element implements Serializable, IIsotope, Cloneable { /** * Determines if a de-serialized object is compatible with this class. * * This value must only be changed if and only if the new version * of this class is incompatible with the old version. See Sun docs * for details. */ private static final long serialVersionUID = 6389365978927575858L; /** Exact mass of this isotope. */ public Double exactMass; /** Natural abundance of this isotope. */ public Double naturalAbundance; /** The mass number for this isotope. */ private Integer massNumber; /** * Constructor for the Isotope object. * * @param elementSymbol The element symbol, "O" for Oxygen, etc. */ public Isotope(String elementSymbol) { super(elementSymbol); } /** * Constructor for the Isotope object. * * @param atomicNumber The atomic number of the isotope * @param elementSymbol The element symbol, "O" for Oxygen, etc. * @param massNumber The atomic mass of the isotope, 16 for Oxygen, e.g. * @param exactMass The exact mass of the isotope, be a little more explicit here :-) * @param abundance The natural abundance of the isotope */ public Isotope(int atomicNumber, String elementSymbol, int massNumber, double exactMass, double abundance) { this(atomicNumber, elementSymbol, exactMass, abundance); this.massNumber = massNumber; } /** * Constructor for the Isotope object. * * @param atomicNumber The atomic number of the isotope, 8 for Oxygen * @param elementSymbol The element symbol, "O" for Oxygen, etc. * @param exactMass The exact mass of the isotope, be a little more explicit here :-) * @param abundance The natural abundance of the isotope */ public Isotope(int atomicNumber, String elementSymbol, double exactMass, double abundance) { super(elementSymbol, atomicNumber); this.exactMass = exactMass; this.naturalAbundance = abundance; } /** * Constructor for the Isotope object. * * @param elementSymbol The element symbol, "O" for Oxygen, etc. * @param massNumber The atomic mass of the isotope, 16 for Oxygen, e.g. */ public Isotope(String elementSymbol, int massNumber) { super(elementSymbol); this.massNumber = massNumber; } /** * Constructs an empty by copying the symbol, atomic number, * flags, and identifier from the given IElement. It does * not copy the listeners and properties. If the element is * an instance of IIsotope, then the exact mass, natural * abundance and mass number are copied too. * * @param element IElement to copy information from */ public Isotope(IElement element) { super(element); if (element instanceof IIsotope) { this.exactMass = ((IIsotope) element).getExactMass(); this.naturalAbundance = ((IIsotope) element).getNaturalAbundance(); this.massNumber = ((IIsotope) element).getMassNumber(); } } /** * Sets the NaturalAbundance attribute of the Isotope object. * * @param naturalAbundance The new NaturalAbundance value * * @see #getNaturalAbundance */ @Override public void setNaturalAbundance(Double naturalAbundance) { this.naturalAbundance = naturalAbundance; notifyChanged(); } /** * Sets the ExactMass attribute of the Isotope object. * * @param exactMass The new ExactMass value * * @see #getExactMass */ @Override public void setExactMass(Double exactMass) { this.exactMass = exactMass; notifyChanged(); } /** * Gets the NaturalAbundance attribute of the Isotope object. * *

Once instantiated all field not filled by passing parameters * to the constructor are null. Isotopes can be configured by using * the IsotopeFactory.configure() method: *

*
     *   Isotope isotope = new Isotope("C", 13);
     *   IsotopeFactory if = IsotopeFactory.getInstance(isotope.getNewBuilder());
     *   if.configure(isotope);
     * 
* * @return The NaturalAbundance value * * @see #setNaturalAbundance */ @Override public Double getNaturalAbundance() { return this.naturalAbundance; } /** * Gets the ExactMass attribute of the Isotope object. *

Once instantiated all field not filled by passing parameters * to the constructor are null. Isotopes can be configured by using * the IsotopeFactory.configure() method: *

*
     *   Isotope isotope = new Isotope("C", 13);
     *   IsotopeFactory if = IsotopeFactory.getInstance(isotope.getNewBuilder());
     *   if.configure(isotope);
     * 
* * @return The ExactMass value * * @see #setExactMass */ @Override public Double getExactMass() { return this.exactMass; } /** * Returns the atomic mass of this element. * *

Once instantiated all field not filled by passing parameters * to the constructor are null. Isotopes can be configured by using * the IsotopeFactory.configure() method: *

*
     *   Isotope isotope = new Isotope("C", 13);
     *   IsotopeFactory if = IsotopeFactory.getInstance(isotope.getNewBuilder());
     *   if.configure(isotope);
     * 
* * @return The atomic mass of this element * * @see #setMassNumber(Integer) */ @Override public Integer getMassNumber() { return this.massNumber; } /** * Sets the atomic mass of this element. * * @param massNumber The atomic mass to be assigned to this element * * @see #getMassNumber */ @Override public void setMassNumber(Integer massNumber) { this.massNumber = massNumber; notifyChanged(); } /** * A string representation of this isotope. * * @return A string representation of this isotope */ @Override public String toString() { StringBuffer resultString = new StringBuffer(32); resultString.append("Isotope(").append(hashCode()); if (massNumber != null) { resultString.append(", MN:").append(massNumber); } if (exactMass != null) { resultString.append(", EM:"); resultString.append(exactMass); } if (naturalAbundance != null) { resultString.append(", AB:"); resultString.append(naturalAbundance); } resultString.append(", ").append(super.toString()); resultString.append(')'); return resultString.toString(); } /** * Compares a atom type with this atom type. * * @param object Object of type AtomType * @return true if the atom types are equal */ @Override public boolean compare(Object object) { if (!(object instanceof Isotope)) { return false; } if (!super.compare(object)) { return false; } Isotope isotope = (Isotope) object; if (isotope.getMassNumber() != null && massNumber != null && isotope.getMassNumber().intValue() != this.getMassNumber().intValue()) return false; if (isotope.getMassNumber() == null && massNumber != null) return false; if (isotope.getExactMass() != null && exactMass != null) { double diff = Math.abs(isotope.getExactMass().doubleValue() - this.getExactMass().doubleValue()); if (diff > 0.0000001) return false; } if (isotope.getExactMass() == null && exactMass != null) return false; if (isotope.getNaturalAbundance() != null && naturalAbundance != null) { double diff = Math.abs(isotope.getNaturalAbundance().doubleValue() - this.getNaturalAbundance().doubleValue()); if (diff > 0.0000001) return false; } if (isotope.getNaturalAbundance() == null && naturalAbundance != null) return false; return true; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy