NGL@1.0.0-beta.7 Home Manual Reference Source Gallery

src/color/element-colormaker.js

/**
 * @file Element Colormaker
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 * @private
 */

import { ColormakerRegistry } from '../globals.js'
import { defaults } from '../utils.js'
import Colormaker from './colormaker.js'

// from Jmol http://jmol.sourceforge.net/jscolors/ (or 0xFFFFFF)
var ElementColors = {
  'H': 0xFFFFFF,
  'HE': 0xD9FFFF,
  'LI': 0xCC80FF,
  'BE': 0xC2FF00,
  'B': 0xFFB5B5,
  'C': 0x909090,
  'N': 0x3050F8,
  'O': 0xFF0D0D,
  'F': 0x90E050,
  'NE': 0xB3E3F5,
  'NA': 0xAB5CF2,
  'MG': 0x8AFF00,
  'AL': 0xBFA6A6,
  'SI': 0xF0C8A0,
  'P': 0xFF8000,
  'S': 0xFFFF30,
  'CL': 0x1FF01F,
  'AR': 0x80D1E3,
  'K': 0x8F40D4,
  'CA': 0x3DFF00,
  'SC': 0xE6E6E6,
  'TI': 0xBFC2C7,
  'V': 0xA6A6AB,
  'CR': 0x8A99C7,
  'MN': 0x9C7AC7,
  'FE': 0xE06633,
  'CO': 0xF090A0,
  'NI': 0x50D050,
  'CU': 0xC88033,
  'ZN': 0x7D80B0,
  'GA': 0xC28F8F,
  'GE': 0x668F8F,
  'AS': 0xBD80E3,
  'SE': 0xFFA100,
  'BR': 0xA62929,
  'KR': 0x5CB8D1,
  'RB': 0x702EB0,
  'SR': 0x00FF00,
  'Y': 0x94FFFF,
  'ZR': 0x94E0E0,
  'NB': 0x73C2C9,
  'MO': 0x54B5B5,
  'TC': 0x3B9E9E,
  'RU': 0x248F8F,
  'RH': 0x0A7D8C,
  'PD': 0x006985,
  'AG': 0xC0C0C0,
  'CD': 0xFFD98F,
  'IN': 0xA67573,
  'SN': 0x668080,
  'SB': 0x9E63B5,
  'TE': 0xD47A00,
  'I': 0x940094,
  'XE': 0x940094,
  'CS': 0x57178F,
  'BA': 0x00C900,
  'LA': 0x70D4FF,
  'CE': 0xFFFFC7,
  'PR': 0xD9FFC7,
  'ND': 0xC7FFC7,
  'PM': 0xA3FFC7,
  'SM': 0x8FFFC7,
  'EU': 0x61FFC7,
  'GD': 0x45FFC7,
  'TB': 0x30FFC7,
  'DY': 0x1FFFC7,
  'HO': 0x00FF9C,
  'ER': 0x00E675,
  'TM': 0x00D452,
  'YB': 0x00BF38,
  'LU': 0x00AB24,
  'HF': 0x4DC2FF,
  'TA': 0x4DA6FF,
  'W': 0x2194D6,
  'RE': 0x267DAB,
  'OS': 0x266696,
  'IR': 0x175487,
  'PT': 0xD0D0E0,
  'AU': 0xFFD123,
  'HG': 0xB8B8D0,
  'TL': 0xA6544D,
  'PB': 0x575961,
  'BI': 0x9E4FB5,
  'PO': 0xAB5C00,
  'AT': 0x754F45,
  'RN': 0x428296,
  'FR': 0x420066,
  'RA': 0x007D00,
  'AC': 0x70ABFA,
  'TH': 0x00BAFF,
  'PA': 0x00A1FF,
  'U': 0x008FFF,
  'NP': 0x0080FF,
  'PU': 0x006BFF,
  'AM': 0x545CF2,
  'CM': 0x785CE3,
  'BK': 0x8A4FE3,
  'CF': 0xA136D4,
  'ES': 0xB31FD4,
  'FM': 0xB31FBA,
  'MD': 0xB30DA6,
  'NO': 0xBD0D87,
  'LR': 0xC70066,
  'RF': 0xCC0059,
  'DB': 0xD1004F,
  'SG': 0xD90045,
  'BH': 0xE00038,
  'HS': 0xE6002E,
  'MT': 0xEB0026,
  'DS': 0xFFFFFF,
  'RG': 0xFFFFFF,
  'CN': 0xFFFFFF,
  'UUT': 0xFFFFFF,
  'FL': 0xFFFFFF,
  'UUP': 0xFFFFFF,
  'LV': 0xFFFFFF,
  'UUH': 0xFFFFFF,

  'D': 0xFFFFC0,
  'T': 0xFFFFA0
}
var DefaultElementColor = 0xFFFFFF

/**
 * Color by element
 */
class ElementColormaker extends Colormaker {
  constructor (params) {
    var p = params || {}
    p.value = defaults(p.value, ElementColors.C)

    super(p)
  }

  atomColor (a) {
    var element = a.element

    if (element === 'C') {
      return this.value
    } else {
      return ElementColors[ element ] || DefaultElementColor
    }
  }
}

ColormakerRegistry.add('element', ElementColormaker)

export default ElementColormaker