UNPKG

dirtybomb

Version:
151 lines (134 loc) 4.39 kB
/** * Created by austin on 6/16/16. */ /** * Predefined isotopes: Cobalt 60 Strontium 90 Iodine 129 Caesium 135 Caesium 137 Polonium 210 Radon 222 Radium 226 Torium 232 Uranium 233 Uranium 235 Uranium 238 Plutonium 238 Plutonium 239 Plutonium 240 Americium 241 Curium 242 * * * @type {*[]} */ const ISOTOPES = [ {name: "Cobalt", element: "Co", mass: 60, halfLife: 166349000, decayMode: "beta,gamma,gamma"}, {name: "Strontium", element: "Sr", mass: 90, halfLife: 908839000, decayMode: "betaminus"}, {name: "Iodine", element: "I", mass: 129, halfLife: 495444000000000, decayMode: "beta,gamma"}, {name: "Caesium", element: "Cs", mass: 135, halfLife: 7.25328e+13, decayMode: "beta"}, {name: "Caesium", element: "Cs", mass: 137, halfLife: 952072000, decayMode: "beta,gamma"}, {name: "Polonium", element: "Po", mass: 210, halfLife: 11955700, decayMode: "alpha"}, {name: "Radon", element: "Rn", mass: 222, halfLife: 330350, decayMode: "alpha"}, {name: "Radium", element: "Ra", mass: 226, halfLife: 50491100000, decayMode: "alpha"}, {name: "Thorium", element: "Th", mass: 232, halfLife: 443375000000000000, decayMode: "alpha"}, {name: "Uranium", element: "U", mass: 233, halfLife: 5023860000000, decayMode: "alpha"}, {name: "Uranium", element: "U", mass: 235, halfLife: 22209800000000000, decayMode: "alpha"}, {name: "Uranium", element: "U", mass: 238, halfLife: 140996000000000000, decayMode: "alpha"}, {name: "Plutonium", element: "Pu", mass: 238, halfLife: 2767540000, decayMode: "alpha"}, {name: "Plutonium", element: "Pu", mass: 239, halfLife: 760837000000, decayMode: "alpha"}, {name: "Plutonium", element: "Pu", mass: 240, halfLife: 207108000000, decayMode: "alpha"}, {name: "Americium", element: "Am", mass: 241, halfLife: 13638900000, decayMode: "alpha"}, {name: "Curium", element: "Cm", mass: 242, halfLife: 13824000, decayMode: "alpha"} ]; /** * Provides a few presets of common nuclear material as well as the ability to define a custom material */ class NuclearMaterial { /** * * @param {number|string} halfLifeOrName - either * @param {number} [atomicMass] - necessary with name if using preset (u) * @param {number} mass - Total mass of substance (g) * @param {string} [decayMode=''] * * @example * // 100 grams of Cobalt-60 * let cobalt60 = new NuclearMaterial("Cobalt", 60, 100); * * // 100 grams of Plutonium-238 * let pu238 = new NuclearMaterial(2767540000, 238, 100); */ constructor(halfLifeOrName, atomicMass, mass, decayMode = '') { if (typeof halfLifeOrName === 'number') { /** * * @type {number} * @private */ this._halfLife = halfLifeOrName; /** * @type {number|*} * @private */ this._atomicMass = atomicMass; /** * * @type {string} * @private */ this._decayMode = decayMode; } else { let isotopePreset; for (let i of ISOTOPES) { if (i.name === halfLifeOrName && i.mass == Math.round(atomicMass)) { isotopePreset = i; break; } } if (!isotopePreset) throw new Error('There is no preset for ' + halfLifeOrName + '-'+ atomicMass); this._halfLife = isotopePreset.halfLife; // Map to known substances this._atomicMass = isotopePreset.mass; this._decayMode = isotopePreset.decayMode; } /** * * @type {number} * @private */ this._mass = mass; } /** * * @returns {number} */ get mass() { return this._mass; } /** * * @returns {number|*} */ get atomicMass() { return this._atomicMass; } /** * * @returns {number|*} */ get halfLife() { return this._halfLife; } /** * * @returns {string|*} */ get decayMode() { return this._decayMode; } } NuclearMaterial.PRESETS = ISOTOPES; export default NuclearMaterial;