packages/miew/src/vendors/mmtf.js

Summary

Maintainability
F
1 wk
Test Coverage
!(function (r, t) {
  if ('function' == typeof define && define.amd) define(['exports'], t)
  else if ('object' == typeof exports && 'undefined' != typeof module)
    t(exports)
  else t((r.MMTF = r.MMTF || {}))
})(this, function (r) {
  'use strict'
  function t(r, t, n) {
    for (var e = (r.byteLength, 0), i = n.length; i > e; e++) {
      var o = n.charCodeAt(e)
      if (128 > o) r.setUint8(t++, ((o >>> 0) & 127) | 0)
      else if (2048 > o)
        r.setUint8(t++, ((o >>> 6) & 31) | 192),
          r.setUint8(t++, ((o >>> 0) & 63) | 128)
      else if (65536 > o)
        r.setUint8(t++, ((o >>> 12) & 15) | 224),
          r.setUint8(t++, ((o >>> 6) & 63) | 128),
          r.setUint8(t++, ((o >>> 0) & 63) | 128)
      else {
        if (!(1114112 > o)) throw new Error('bad codepoint ' + o)
        r.setUint8(t++, ((o >>> 18) & 7) | 240),
          r.setUint8(t++, ((o >>> 12) & 63) | 128),
          r.setUint8(t++, ((o >>> 6) & 63) | 128),
          r.setUint8(t++, ((o >>> 0) & 63) | 128)
      }
    }
  }
  function n(r) {
    for (var t = 0, n = 0, e = r.length; e > n; n++) {
      var i = r.charCodeAt(n)
      if (128 > i) t += 1
      else if (2048 > i) t += 2
      else if (65536 > i) t += 3
      else {
        if (!(1114112 > i)) throw new Error('bad codepoint ' + i)
        t += 4
      }
    }
    return t
  }
  function e(r, i, o) {
    var a = typeof r
    if ('string' === a) {
      var u = n(r)
      if (32 > u) return i.setUint8(o, 160 | u), t(i, o + 1, r), 1 + u
      if (256 > u)
        return i.setUint8(o, 217), i.setUint8(o + 1, u), t(i, o + 2, r), 2 + u
      if (65536 > u)
        return i.setUint8(o, 218), i.setUint16(o + 1, u), t(i, o + 3, r), 3 + u
      if (4294967296 > u)
        return i.setUint8(o, 219), i.setUint32(o + 1, u), t(i, o + 5, r), 5 + u
    }
    if (r instanceof Uint8Array) {
      var u = r.byteLength,
        s = new Uint8Array(i.buffer)
      if (256 > u)
        return i.setUint8(o, 196), i.setUint8(o + 1, u), s.set(r, o + 2), 2 + u
      if (65536 > u)
        return i.setUint8(o, 197), i.setUint16(o + 1, u), s.set(r, o + 3), 3 + u
      if (4294967296 > u)
        return i.setUint8(o, 198), i.setUint32(o + 1, u), s.set(r, o + 5), 5 + u
    }
    if ('number' === a) {
      if (!isFinite(r)) throw new Error('Number not finite: ' + r)
      if (Math.floor(r) !== r)
        return i.setUint8(o, 203), i.setFloat64(o + 1, r), 9
      if (r >= 0) {
        if (128 > r) return i.setUint8(o, r), 1
        if (256 > r) return i.setUint8(o, 204), i.setUint8(o + 1, r), 2
        if (65536 > r) return i.setUint8(o, 205), i.setUint16(o + 1, r), 3
        if (4294967296 > r) return i.setUint8(o, 206), i.setUint32(o + 1, r), 5
        throw new Error('Number too big 0x' + r.toString(16))
      }
      if (r >= -32) return i.setInt8(o, r), 1
      if (r >= -128) return i.setUint8(o, 208), i.setInt8(o + 1, r), 2
      if (r >= -32768) return i.setUint8(o, 209), i.setInt16(o + 1, r), 3
      if (r >= -2147483648) return i.setUint8(o, 210), i.setInt32(o + 1, r), 5
      throw new Error('Number too small -0x' + (-r).toString(16).substr(1))
    }
    if (null === r) return i.setUint8(o, 192), 1
    if ('boolean' === a) return i.setUint8(o, r ? 195 : 194), 1
    if ('object' === a) {
      var u,
        f = 0,
        c = Array.isArray(r)
      if (c) u = r.length
      else {
        var d = Object.keys(r)
        u = d.length
      }
      var f
      if (
        (16 > u
          ? (i.setUint8(o, u | (c ? 144 : 128)), (f = 1))
          : 65536 > u
          ? (i.setUint8(o, c ? 220 : 222), i.setUint16(o + 1, u), (f = 3))
          : 4294967296 > u &&
            (i.setUint8(o, c ? 221 : 223), i.setUint32(o + 1, u), (f = 5)),
        c)
      )
        for (var l = 0; u > l; l++) f += e(r[l], i, o + f)
      else
        for (var l = 0; u > l; l++) {
          var v = d[l]
          ;(f += e(v, i, o + f)), (f += e(r[v], i, o + f))
        }
      return f
    }
    throw new Error('Unknown type ' + a)
  }
  function i(r) {
    var t = typeof r
    if ('string' === t) {
      var e = n(r)
      if (32 > e) return 1 + e
      if (256 > e) return 2 + e
      if (65536 > e) return 3 + e
      if (4294967296 > e) return 5 + e
    }
    if (r instanceof Uint8Array) {
      var e = r.byteLength
      if (256 > e) return 2 + e
      if (65536 > e) return 3 + e
      if (4294967296 > e) return 5 + e
    }
    if ('number' === t) {
      if (Math.floor(r) !== r) return 9
      if (r >= 0) {
        if (128 > r) return 1
        if (256 > r) return 2
        if (65536 > r) return 3
        if (4294967296 > r) return 5
        throw new Error('Number too big 0x' + r.toString(16))
      }
      if (r >= -32) return 1
      if (r >= -128) return 2
      if (r >= -32768) return 3
      if (r >= -2147483648) return 5
      throw new Error('Number too small -0x' + r.toString(16).substr(1))
    }
    if ('boolean' === t || null === r) return 1
    if ('object' === t) {
      var e,
        o = 0
      if (Array.isArray(r)) {
        e = r.length
        for (var a = 0; e > a; a++) o += i(r[a])
      } else {
        var u = Object.keys(r)
        e = u.length
        for (var a = 0; e > a; a++) {
          var s = u[a]
          o += i(s) + i(r[s])
        }
      }
      if (16 > e) return 1 + o
      if (65536 > e) return 3 + o
      if (4294967296 > e) return 5 + o
      throw new Error('Array or object too long 0x' + e.toString(16))
    }
    throw new Error('Unknown type ' + t)
  }
  function o(r) {
    var t = new ArrayBuffer(i(r)),
      n = new DataView(t)
    return e(r, n, 0), new Uint8Array(t)
  }
  function a(r, t, n) {
    return t ? new r(t.buffer, t.byteOffset, t.byteLength / (n || 1)) : void 0
  }
  function u(r) {
    return a(DataView, r)
  }
  function s(r) {
    return a(Uint8Array, r)
  }
  function f(r) {
    return a(Int8Array, r)
  }
  function c(r) {
    return a(Int32Array, r, 4)
  }
  function d(r) {
    return a(Float32Array, r, 4)
  }
  function l(r, t) {
    var n = r.length / 2
    t || (t = new Int16Array(n))
    for (var e = 0, i = 0; n > e; ++e, i += 2)
      t[e] = (r[i] << 8) ^ (r[i + 1] << 0)
    return t
  }
  function v(r, t) {
    var n = r.length
    t || (t = new Uint8Array(2 * n))
    for (var e = u(t), i = 0; n > i; ++i) e.setInt16(2 * i, r[i])
    return s(t)
  }
  function g(r, t) {
    var n = r.length / 4
    t || (t = new Int32Array(n))
    for (var e = 0, i = 0; n > e; ++e, i += 4)
      t[e] = (r[i] << 24) ^ (r[i + 1] << 16) ^ (r[i + 2] << 8) ^ (r[i + 3] << 0)
    return t
  }
  function L(r, t) {
    var n = r.length
    t || (t = new Uint8Array(4 * n))
    for (var e = u(t), i = 0; n > i; ++i) e.setInt32(4 * i, r[i])
    return s(t)
  }
  function h(r, t) {
    var n = r.length
    t || (t = new Float32Array(n / 4))
    for (var e = u(t), i = u(r), o = 0, a = 0, s = n / 4; s > o; ++o, a += 4)
      e.setFloat32(a, i.getFloat32(a), !0)
    return t
  }
  function y(r, t, n) {
    var e = r.length,
      i = 1 / t
    n || (n = new Float32Array(e))
    for (var o = 0; e > o; ++o) n[o] = r[o] * i
    return n
  }
  function m(r, t, n) {
    var e = r.length
    n || (n = new Int32Array(e))
    for (var i = 0; e > i; ++i) n[i] = Math.round(r[i] * t)
    return n
  }
  function p(r, t) {
    var n, e
    if (!t) {
      var i = 0
      for (n = 0, e = r.length; e > n; n += 2) i += r[n + 1]
      t = new r.constructor(i)
    }
    var o = 0
    for (n = 0, e = r.length; e > n; n += 2)
      for (var a = r[n], u = r[n + 1], s = 0; u > s; ++s) (t[o] = a), ++o
    return t
  }
  function U(r) {
    if (0 === r.length) return new Int32Array()
    var t,
      n,
      e = 2
    for (t = 1, n = r.length; n > t; ++t) r[t - 1] !== r[t] && (e += 2)
    var i = new Int32Array(e),
      o = 0,
      a = 1
    for (t = 1, n = r.length; n > t; ++t)
      r[t - 1] !== r[t]
        ? ((i[o] = r[t - 1]), (i[o + 1] = a), (a = 1), (o += 2))
        : ++a
    return (i[o] = r[r.length - 1]), (i[o + 1] = a), i
  }
  function b(r, t) {
    var n = r.length
    t || (t = new r.constructor(n)), n && (t[0] = r[0])
    for (var e = 1; n > e; ++e) t[e] = r[e] + t[e - 1]
    return t
  }
  function I(r, t) {
    var n = r.length
    t || (t = new r.constructor(n)), (t[0] = r[0])
    for (var e = 1; n > e; ++e) t[e] = r[e] - r[e - 1]
    return t
  }
  function w(r, t) {
    var n,
      e,
      i = r instanceof Int8Array ? 127 : 32767,
      o = -i - 1,
      a = r.length
    if (!t) {
      var u = 0
      for (n = 0; a > n; ++n) r[n] < i && r[n] > o && ++u
      t = new Int32Array(u)
    }
    for (n = 0, e = 0; a > n; ) {
      for (var s = 0; r[n] === i || r[n] === o; ) (s += r[n]), ++n
      ;(s += r[n]), ++n, (t[e] = s), ++e
    }
    return t
  }
  function C(r, t) {
    var n,
      e = t ? 127 : 32767,
      i = -e - 1,
      o = r.length,
      a = 0
    for (n = 0; o > n; ++n) {
      var u = r[n]
      0 === u
        ? ++a
        : (a +=
            u === e || u === i
              ? 2
              : u > 0
              ? Math.ceil(u / e)
              : Math.ceil(u / i))
    }
    var s = t ? new Int8Array(a) : new Int16Array(a),
      f = 0
    for (n = 0; o > n; ++n) {
      var u = r[n]
      if (u >= 0) for (; u >= e; ) (s[f] = e), ++f, (u -= e)
      else for (; i >= u; ) (s[f] = i), ++f, (u -= i)
      ;(s[f] = u), ++f
    }
    return s
  }
  function A(r, t) {
    return b(p(r), t)
  }
  function x(r) {
    return U(I(r))
  }
  function M(r, t, n) {
    return y(p(r, c(n)), t, n)
  }
  function F(r, t) {
    return U(m(r, t))
  }
  function S(r, t, n) {
    return y(b(r, c(n)), t, n)
  }
  function E(r, t, n) {
    return I(m(r, t), n)
  }
  function N(r, t, n) {
    return y(w(r, c(n)), t, n)
  }
  function O(r, t, n) {
    var e = w(r, c(n))
    return S(e, t, d(e))
  }
  function T(r, t, n) {
    return C(E(r, t), n)
  }
  function k(r) {
    var t = u(r),
      n = t.getInt32(0),
      e = t.getInt32(4),
      i = r.subarray(8, 12),
      r = r.subarray(12)
    return [n, r, e, i]
  }
  function j(r, t, n, e) {
    var i = new ArrayBuffer(12 + e.byteLength),
      o = new Uint8Array(i),
      a = new DataView(i)
    return a.setInt32(0, r), a.setInt32(4, t), n && o.set(n, 8), o.set(e, 12), o
  }
  function q(r) {
    var t = r.length,
      n = s(r)
    return j(2, t, void 0, n)
  }
  function D(r) {
    var t = r.length,
      n = L(r)
    return j(4, t, void 0, n)
  }
  function P(r, t) {
    var n = r.length / t,
      e = L([t]),
      i = s(r)
    return j(5, n, e, i)
  }
  function z(r) {
    var t = r.length,
      n = L(U(r))
    return j(6, t, void 0, n)
  }
  function B(r) {
    var t = r.length,
      n = L(x(r))
    return j(8, t, void 0, n)
  }
  function V(r, t) {
    var n = r.length,
      e = L([t]),
      i = L(F(r, t))
    return j(9, n, e, i)
  }
  function G(r, t) {
    var n = r.length,
      e = L([t]),
      i = v(T(r, t))
    return j(10, n, e, i)
  }
  function R(r) {
    var t = {}
    return (
      rr.forEach(function (n) {
        void 0 !== r[n] && (t[n] = r[n])
      }),
      r.bondAtomList && (t.bondAtomList = D(r.bondAtomList)),
      r.bondOrderList && (t.bondOrderList = q(r.bondOrderList)),
      (t.xCoordList = G(r.xCoordList, 1e3)),
      (t.yCoordList = G(r.yCoordList, 1e3)),
      (t.zCoordList = G(r.zCoordList, 1e3)),
      r.bFactorList && (t.bFactorList = G(r.bFactorList, 100)),
      r.atomIdList && (t.atomIdList = B(r.atomIdList)),
      r.altLocList && (t.altLocList = z(r.altLocList)),
      r.occupancyList && (t.occupancyList = V(r.occupancyList, 100)),
      (t.groupIdList = B(r.groupIdList)),
      (t.groupTypeList = D(r.groupTypeList)),
      r.secStructList && (t.secStructList = q(r.secStructList, 1)),
      r.insCodeList && (t.insCodeList = z(r.insCodeList)),
      r.sequenceIndexList && (t.sequenceIndexList = B(r.sequenceIndexList)),
      (t.chainIdList = P(r.chainIdList, 4)),
      r.chainNameList && (t.chainNameList = P(r.chainNameList, 4)),
      t
    )
  }
  function H(r) {
    function t(r) {
      for (var t = {}, n = 0; r > n; n++) {
        var e = o()
        t[e] = o()
      }
      return t
    }
    function n(t) {
      var n = r.subarray(a, a + t)
      return (a += t), n
    }
    function e(t) {
      var n = r.subarray(a, a + t)
      a += t
      var e = 65535
      if (t > e) {
        for (var i = [], o = 0; o < n.length; o += e)
          i.push(String.fromCharCode.apply(null, n.subarray(o, o + e)))
        return i.join('')
      }
      return String.fromCharCode.apply(null, n)
    }
    function i(r) {
      for (var t = new Array(r), n = 0; r > n; n++) t[n] = o()
      return t
    }
    function o() {
      var o,
        s,
        f = r[a]
      if (0 === (128 & f)) return a++, f
      if (128 === (240 & f)) return (s = 15 & f), a++, t(s)
      if (144 === (240 & f)) return (s = 15 & f), a++, i(s)
      if (160 === (224 & f)) return (s = 31 & f), a++, e(s)
      if (224 === (224 & f)) return (o = u.getInt8(a)), a++, o
      switch (f) {
        case 192:
          return a++, null
        case 194:
          return a++, !1
        case 195:
          return a++, !0
        case 196:
          return (s = u.getUint8(a + 1)), (a += 2), n(s)
        case 197:
          return (s = u.getUint16(a + 1)), (a += 3), n(s)
        case 198:
          return (s = u.getUint32(a + 1)), (a += 5), n(s)
        case 202:
          return (o = u.getFloat32(a + 1)), (a += 5), o
        case 203:
          return (o = u.getFloat64(a + 1)), (a += 9), o
        case 204:
          return (o = r[a + 1]), (a += 2), o
        case 205:
          return (o = u.getUint16(a + 1)), (a += 3), o
        case 206:
          return (o = u.getUint32(a + 1)), (a += 5), o
        case 208:
          return (o = u.getInt8(a + 1)), (a += 2), o
        case 209:
          return (o = u.getInt16(a + 1)), (a += 3), o
        case 210:
          return (o = u.getInt32(a + 1)), (a += 5), o
        case 217:
          return (s = u.getUint8(a + 1)), (a += 2), e(s)
        case 218:
          return (s = u.getUint16(a + 1)), (a += 3), e(s)
        case 219:
          return (s = u.getUint32(a + 1)), (a += 5), e(s)
        case 220:
          return (s = u.getUint16(a + 1)), (a += 3), i(s)
        case 221:
          return (s = u.getUint32(a + 1)), (a += 5), i(s)
        case 222:
          return (s = u.getUint16(a + 1)), (a += 3), t(s)
        case 223:
          return (s = u.getUint32(a + 1)), (a += 5), t(s)
      }
      throw new Error('Unknown type 0x' + f.toString(16))
    }
    var a = 0,
      u = new DataView(r.buffer)
    return o()
  }
  function W(r, t, n, e) {
    switch (r) {
      case 1:
        return h(t)
      case 2:
        return f(t)
      case 3:
        return l(t)
      case 4:
        return g(t)
      case 5:
        return s(t)
      case 6:
        return p(g(t), new Uint8Array(n))
      case 7:
        return p(g(t))
      case 8:
        return A(g(t))
      case 9:
        return M(g(t), g(e)[0])
      case 10:
        return O(l(t), g(e)[0])
      case 11:
        return y(l(t), g(e)[0])
      case 12:
        return N(l(t), g(e)[0])
      case 13:
        return N(f(t), g(e)[0])
      case 14:
        return w(l(t))
      case 15:
        return w(f(t))
    }
  }
  function X(r, t) {
    t = t || {}
    var n = t.ignoreFields,
      e = {}
    return (
      nr.forEach(function (t) {
        var i = n ? -1 !== n.indexOf(t) : !1,
          o = r[t]
        i ||
          void 0 === o ||
          (o instanceof Uint8Array ? (e[t] = W.apply(null, k(o))) : (e[t] = o))
      }),
      e
    )
  }
  function J(r) {
    return String.fromCharCode.apply(null, r).replace(/\0/g, '')
  }
  function K(r, t, n) {
    n = n || {}
    var e,
      i,
      o,
      a,
      u,
      s,
      f = n.firstModelOnly,
      c = t.onModel,
      d = t.onChain,
      l = t.onGroup,
      v = t.onAtom,
      g = t.onBond,
      L = 0,
      h = 0,
      y = 0,
      m = 0,
      p = 0,
      U = -1,
      b = r.chainNameList,
      I = r.secStructList,
      w = r.insCodeList,
      C = r.sequenceIndexList,
      A = r.atomIdList,
      x = r.bFactorList,
      M = r.altLocList,
      F = r.occupancyList,
      S = r.bondAtomList,
      E = r.bondOrderList
    for (e = 0, i = r.chainsPerModel.length; i > e && !(f && L > 0); ++e) {
      var N = r.chainsPerModel[L]
      for (c && c({ chainCount: N, modelIndex: L }), o = 0; N > o; ++o) {
        var O = r.groupsPerChain[h]
        if (d) {
          var T = J(r.chainIdList.subarray(4 * h, 4 * h + 4)),
            k = null
          b && (k = J(b.subarray(4 * h, 4 * h + 4))),
            d({
              groupCount: O,
              chainIndex: h,
              modelIndex: L,
              chainId: T,
              chainName: k
            })
        }
        for (a = 0; O > a; ++a) {
          var j = r.groupList[r.groupTypeList[y]],
            q = j.atomNameList.length
          if (l) {
            var D = null
            I && (D = I[y])
            var P = null
            r.insCodeList && (P = String.fromCharCode(w[y]))
            var z = null
            C && (z = C[y]),
              l({
                atomCount: q,
                groupIndex: y,
                chainIndex: h,
                modelIndex: L,
                groupId: r.groupIdList[y],
                groupType: r.groupTypeList[y],
                groupName: j.groupName,
                singleLetterCode: j.singleLetterCode,
                chemCompType: j.chemCompType,
                secStruct: D,
                insCode: P,
                sequenceIndex: z
              })
          }
          for (u = 0; q > u; ++u) {
            if (v) {
              var B = null
              A && (B = A[m])
              var V = null
              x && (V = x[m])
              var G = null
              M && (G = String.fromCharCode(M[m]))
              var R = null
              F && (R = F[m]),
                v({
                  atomIndex: m,
                  groupIndex: y,
                  chainIndex: h,
                  modelIndex: L,
                  atomId: B,
                  element: j.elementList[u],
                  atomName: j.atomNameList[u],
                  formalCharge: j.formalChargeList[u],
                  xCoord: r.xCoordList[m],
                  yCoord: r.yCoordList[m],
                  zCoord: r.zCoordList[m],
                  bFactor: V,
                  altLoc: G,
                  occupancy: R
                })
            }
            m += 1
          }
          if (g) {
            var H = j.bondAtomList
            for (u = 0, s = j.bondOrderList.length; s > u; ++u)
              g({
                atomIndex1: m - q + H[2 * u],
                atomIndex2: m - q + H[2 * u + 1],
                bondOrder: j.bondOrderList[u]
              })
          }
          y += 1
        }
        h += 1
      }
      if (((p = U + 1), (U = m - 1), g && S))
        for (u = 0, s = S.length; s > u; u += 2) {
          var W = S[u],
            X = S[u + 1]
          ;((W >= p && U >= W) || (X >= p && U >= X)) &&
            g({ atomIndex1: W, atomIndex2: X, bondOrder: E ? E[u / 2] : null })
        }
      L += 1
    }
  }
  function Q(r) {
    return o(R(r))
  }
  function Y(r, t) {
    r instanceof ArrayBuffer && (r = new Uint8Array(r))
    var n
    return (n = r instanceof Uint8Array ? H(r) : r), X(n, t)
  }
  function Z(r, t, n, e) {
    function i() {
      try {
        var r = Y(o.response)
        n(r)
      } catch (t) {
        e(t)
      }
    }
    var o = new XMLHttpRequest()
    o.addEventListener('load', i, !0),
      o.addEventListener('error', e, !0),
      (o.responseType = 'arraybuffer'),
      o.open('GET', t + r.toUpperCase()),
      o.send()
  }
  function $(r, t, n) {
    Z(r, or, t, n)
  }
  function _(r, t, n) {
    Z(r, ar, t, n)
  }
  var rr = [
      'mmtfVersion',
      'mmtfProducer',
      'unitCell',
      'spaceGroup',
      'structureId',
      'title',
      'depositionDate',
      'releaseDate',
      'experimentalMethods',
      'resolution',
      'rFree',
      'rWork',
      'bioAssemblyList',
      'ncsOperatorList',
      'entityList',
      'groupList',
      'numBonds',
      'numAtoms',
      'numGroups',
      'numChains',
      'numModels',
      'groupsPerChain',
      'chainsPerModel'
    ],
    tr = [
      'xCoordList',
      'yCoordList',
      'zCoordList',
      'groupIdList',
      'groupTypeList',
      'chainIdList',
      'bFactorList',
      'atomIdList',
      'altLocList',
      'occupancyList',
      'secStructList',
      'insCodeList',
      'sequenceIndexList',
      'chainNameList',
      'bondAtomList',
      'bondOrderList'
    ],
    nr = rr.concat(tr),
    er = 'v1.1.0dev',
    ir = '//mmtf.rcsb.org/v1.0/',
    or = ir + 'full/',
    ar = ir + 'reduced/'
  ;(r.encode = Q),
    (r.decode = Y),
    (r.traverse = K),
    (r.fetch = $),
    (r.fetchReduced = _),
    (r.version = er),
    (r.fetchUrl = or),
    (r.fetchReducedUrl = ar),
    (r.encodeMsgpack = o),
    (r.encodeMmtf = R),
    (r.decodeMsgpack = H),
    (r.decodeMmtf = X)
})