{"version":3,"file":"ml-airpls.js","sources":["../node_modules/cuthill-mckee/cuthill-mckee.js","../src/choleskySolver.js","../src/index.js"],"sourcesContent":["'use strict'\n\nmodule.exports = cuthillMckee\n\nfunction compareNum(a, b) { return a - b }\n\nfunction cuthillMckee(list, n) {\n  var adj = new Array(n)\n  var visited = new Array(n)\n  for(var i=0; i<n; ++i) {\n    adj[i]     = []\n    visited[i] = false\n  }\n\n  for(var i=0; i<list.length; ++i) {\n    var l = list[i]\n    adj[l[0]].push(l[1])\n  }\n\n  var toVisit = new Array(n)\n  var eol = 0\n  var ptr = 0\n  for(var i=0; i<n; ++i) {\n    if(visited[i]) {\n      continue\n    }\n    toVisit[eol++] = i\n    visited[i] = true\n    while(ptr < eol) {\n      var v = toVisit[ptr++]\n      var nbhd = adj[v]\n      nbhd.sort(compareNum)\n      for(var j=0; j<nbhd.length; ++j) {\n        var u = nbhd[j]\n        if(visited[u]) {\n          continue\n        }\n        visited[u] = true\n        toVisit[eol++] = u\n      }\n    }\n  }\n\n  var result = new Array(n)\n  for(var i=0; i<n; ++i) {\n    result[toVisit[i]] = i\n  }\n\n  return result\n}\n","function ldl_symbolic(\n    n, /* A and L are n-by-n, where n >= 0 */\n    Ap, /* input of size n + 1, not modified */\n    Ai, /* input of size nz=Ap[n], not modified */\n    Lp, /* output of size n + 1, not defined on input */\n    Parent, /* output of size n, not defined on input */\n    Lnz, /* output of size n, not defined on input */\n    Flag /* workspace of size n, not defn. on input or output */\n  ) {\n    var i, k, p, kk, p2;\n  \n    for (k = 0; k < n; k++) {\n      /* L(k,:) pattern: all nodes reachable in etree from nz in A(0:k-1,k) */\n      Parent[k] = -1; /* parent of k is not yet known */\n      Flag[k] = k; /* mark node k as visited */\n      Lnz[k] = 0; /* count of nonzeros in column k of L */\n      kk = (k); /* kth original, or permuted, column */\n      p2 = Ap[kk + 1];\n      for (p = Ap[kk]; p < p2; p++) {\n        /* A (i,k) is nonzero (original or permuted A) */\n        i = (Ai[p]);\n  \n        if (i < k) {\n          /* follow path from i to root of etree, stop at flagged node */\n          for (; Flag[i] !== k; i = Parent[i]) {\n            /* find parent of i if not yet determined */\n            if (Parent[i] === -1) Parent[i] = k;\n            Lnz[i]++; /* L (k,i) is nonzero */\n            Flag[i] = k; /* mark i as visited */\n          }\n        }\n      }\n    }\n    /* construct Lp index array from Lnz column counts */\n    Lp[0] = 0;\n    for (k = 0; k < n; k++) {\n      Lp[k + 1] = Lp[k] + Lnz[k];\n    }\n  }\n  \n  function ldl_numeric(\n    n, /* A and L are n-by-n, where n >= 0 */\n    Ap, /* input of size n+1, not modified */\n    Ai, /* input of size nz=Ap[n], not modified */\n    Ax, /* input of size nz=Ap[n], not modified */\n    Lp, /* input of size n+1, not modified */\n    Parent, /* input of size n, not modified */\n    Lnz, /* output of size n, not defn. on input */\n    Li, /* output of size lnz=Lp[n], not defined on input */\n    Lx, /* output of size lnz=Lp[n], not defined on input */\n    D, /* output of size n, not defined on input */\n    Y, /* workspace of size n, not defn. on input or output */\n    Pattern, /* workspace of size n, not defn. on input or output */\n    Flag /* workspace of size n, not defn. on input or output */\n  ) {\n    var yi, l_ki;\n    var i, k, p, kk, p2, len, top;\n    for (k = 0; k < n; k++) {\n      /* compute nonzero Pattern of kth row of L, in topological order */\n      Y[k] = 0.0; /* Y(0:k) is now all zero */\n      top = n; /* stack for pattern is empty */\n      Flag[k] = k; /* mark node k as visited */\n      Lnz[k] = 0; /* count of nonzeros in column k of L */\n      kk = (k); /* kth original, or permuted, column */\n      p2 = Ap[kk + 1];\n      for (p = Ap[kk]; p < p2; p++) {\n        i = (Ai[p]); /* get A(i,k) */\n        if (i <= k) {\n          Y[i] += Ax[p]; /* scatter A(i,k) into Y (sum duplicates) */\n          for (len = 0; Flag[i] !== k; i = Parent[i]) {\n            Pattern[len++] = i; /* L(k,i) is nonzero */\n            Flag[i] = k; /* mark i as visited */\n          }\n          while (len > 0) Pattern[--top] = Pattern[--len];\n        }\n      }\n      /* compute numerical values kth row of L (a sparse triangular solve) */\n      D[k] = Y[k]; /* get D(k,k) and clear Y(k) */\n      Y[k] = 0.0;\n      for (; top < n; top++) {\n        i = Pattern[top]; /* Pattern[top:n-1] is pattern of L(:,k) */\n        yi = Y[i]; /* get and clear Y(i) */\n        Y[i] = 0.0;\n        p2 = Lp[i] + Lnz[i];\n        for (p = Lp[i]; p < p2; p++) {\n          Y[Li[p]] -= Lx[p] * yi;\n        }\n        l_ki = yi / D[i]; /* the nonzero entry L(k,i) */\n        D[k] -= l_ki * yi;\n        Li[p] = k; /* store L(k,i) in column form of L */\n        Lx[p] = l_ki;\n        Lnz[i]++; /* increment count of nonzeros in col i */\n      }\n  \n      if (D[k] === 0.0) return (k); /* failure, D(k,k) is zero */\n    }\n  \n    return (n); /* success, diagonal of D is all nonzero */\n  }\n  \n  function ldl_lsolve(\n    n, /* L is n-by-n, where n >= 0 */\n    X, /* size n. right-hand-side on input, soln. on output */\n    Lp, /* input of size n+1, not modified */\n    Li, /* input of size lnz=Lp[n], not modified */\n    Lx /* input of size lnz=Lp[n], not modified */\n  ) {\n    var j, p, p2;\n    for (j = 0; j < n; j++) {\n      p2 = Lp[j + 1];\n      for (p = Lp[j]; p < p2; p++) {\n        X[Li[p]] -= Lx[p] * X[j];\n      }\n    }\n  }\n  function ldl_dsolve(\n    n, /* D is n-by-n, where n >= 0 */\n    X, /* size n. right-hand-side on input, soln. on output */\n    D /* input of size n, not modified */\n  ) {\n    var j;\n    for (j = 0; j < n; j++) {\n      X[j] /= D[j];\n    }\n  }\n  function ldl_ltsolve(\n    n, /* L is n-by-n, where n >= 0 */\n    X, /* size n. right-hand-side on input, soln. on output */\n    Lp, /* input of size n+1, not modified */\n    Li, /* input of size lnz=Lp[n], not modified */\n    Lx /* input of size lnz=Lp[n], not modified */\n  ) {\n    var j, p, p2;\n    for (j = n - 1; j >= 0; j--) {\n      p2 = Lp[j + 1];\n      for (p = Lp[j]; p < p2; p++) {\n        X[j] -= Lx[p] * X[Li[p]];\n      }\n    }\n  }\n  \n  function ldl_perm(\n    n,\t\t/* size of X, B, and P */\n    X,\t/* output of size n. */\n    B,\t/* input of size n. */\n    P\t/* input permutation array of size n. */\n  ) {\n    var j;\n    for (j = 0; j < n; j++) {\n      X[j] = B [P[j]];\n    }\n  }\n  \n  function ldl_permt(\n    n,\t\t/* size of X, B, and P */\n    X,\t/* output of size n. */\n    B,\t/* input of size n. */\n    P\t/* input permutation array of size n. */\n  ) {\n    var j;\n    for (j = 0; j < n; j++) {\n      X [P[j]] = B[j];\n    }\n  }\n  \n  function prepare(M, n, P) {\n    const ANZ = M.length;\n  \n    // if a permutation was specified, apply it.\n    if (P) {\n      var Pinv = new Array(n);\n  \n      for (let k = 0; k < n; k++) {\n        Pinv[P[k]] = k;\n      }\n  \n      var Mt = []; // scratch memory\n      // Apply permutation. We make M into P*M*P^T\n      for (var a = 0; a < M.length; ++a) {\n        var ar = Pinv[M[a][0]];\n        var ac = Pinv[M[a][1]];\n  \n        // we only store the upper-diagonal elements(since we assume matrix is symmetric, we only need to store these)\n        // if permuted element is below diagonal, we simply transpose it.\n        if (ac < ar) {\n          var t = ac;\n          ac = ar;\n          ar = t;\n        }\n  \n        Mt[a] = [];\n        Mt[a][0] = ar;\n        Mt[a][1] = ac;\n        Mt[a][2] = M[a][2];\n      }\n  \n      M = Mt; // copy scratch memory.\n    } else {\n      // if P argument is null, we just use an identity permutation.\n      var P = [];\n      for (var i = 0; i < n; ++i) {\n        P[i] = i;\n      }\n    }\n  \n    // The sparse matrix we are decomposing is A.\n    // Now we shall create A from M.\n    var Ap = new Array(n + 1);\n    var Ai = new Array(M.length);\n    var Ax = new Array(M.length);\n  \n    // count number of non-zero elements in columns.\n    var LNZ = [];\n    for (var i = 0; i < n; ++i) {\n      LNZ[i] = 0;\n    }\n    for (var a = 0; a < M.length; ++a) {\n      LNZ[M[a][1]]++;\n    }\n  \n    Ap[0] = 0;\n    for (var i = 0; i < n; ++i) {\n      Ap[i + 1] = Ap[i] + LNZ[i];\n    }\n  \n    var coloffset = [];\n    for (var a = 0; a < n; ++a) {\n      coloffset[a] = 0;\n    }\n  \n    // go through all elements in M, and add them to sparse matrix A.\n    for (var i = 0; i < M.length; ++i) {\n      var e = M[i];\n      var col = e[1];\n  \n      var adr = Ap[col] + coloffset[col];\n      Ai[adr] = e[0];\n      Ax[adr] = e[2];\n  \n      coloffset[col]++;\n    }\n  \n    var D = new Array(n);\n    var Y = new Array(n);\n    var Lp = new Array(n + 1);\n    var Parent = new Array(n);\n    var Lnz = new Array(n);\n    var Flag = new Array(n);\n    var Pattern = new Array(n);\n    var bp1 = new Array(n);\n    var x = new Array(n);\n    var d;\n  \n    ldl_symbolic(n, Ap, Ai, Lp, Parent, Lnz, Flag);\n  \n    var Lx = new Array(Lp[n]);\n    var Li = new Array(Lp[n]);\n  \n    d = ldl_numeric(n, Ap, Ai, Ax, Lp, Parent, Lnz, Li, Lx, D, Y, Pattern, Flag);\n  \n    if (d === n) {\n      return function (b) {\n        ldl_perm(n, bp1, b, P);\n        ldl_lsolve(n, bp1, Lp, Li, Lx);\n        ldl_dsolve(n, bp1, D);\n        ldl_ltsolve(n, bp1, Lp, Li, Lx);\n        ldl_permt(n, x, bp1, P);\n  \n        return x;\n      };\n    } else {\n      return null;\n    }\n  }\n  \n  export { prepare as default };\n  ","import cuthillMckee from 'cuthill-mckee';\nimport Cholesky from './choleskySolver';\n\n/**\n * Fit the baseline drift by iteratively changing weights of sum square error between the fitted baseline and original signals,\n * for further information about the parameters you can get the [paper of airPLS](https://github.com/zmzhang/airPLS/blob/master/airPLS_manuscript.pdf)\n * @param {Array} yData - original data\n * @param {object} [options={}] - options\n * @param {number} [options.maxIterations = 100] - maximal number of iterations if the method does not reach the stop criterion\n * @param {number} [options.factorCriterion = 0.001] - factor of the sum of absolute value of original data, to compute stop criterion\n * @param {Array} [options.weights = [1,1,...]] - initial weights vector, default each point has the same weight\n * @param {number} [options.lambda = 100] - factor of weights matrix in -> [I + lambda D'D]z = x\n * @returns {array} - list with baseline, corrected (original - baseline), iteration and error value.\n */\nfunction airPLS(yData, options = {}) {\n  let {\n    maxIterations = 100,\n    lambda = 100,\n    factorCriterion = 0.001,\n    weights = new Array(yData.length).fill(1),\n    controlPoints = []\n  } = options;\n\n  var nbPoints = yData.length;\n  var stopCriterion = factorCriterion * yData.reduce((sum, e) => Math.abs(e) + sum, 0);\n\n  var { lowerTriangularNonZeros, permutationEncodedArray } = getDeltaMatrix(nbPoints, lambda);\n\n  var sumNegDifferences = Number.MAX_SAFE_INTEGER;\n  for (var iteration = 0; (iteration < maxIterations && Math.abs(sumNegDifferences) > stopCriterion); iteration++) {\n    let [leftHandSide, rightHandSide] = updateSystem(lowerTriangularNonZeros, yData, weights);\n\n    let cho = Cholesky(leftHandSide, nbPoints, permutationEncodedArray);\n\n    var baseline = cho(rightHandSide);\n\n    sumNegDifferences = 0;\n\n    let difference = yData.map(calculateError);\n\n    let maxNegativeDiff = -1 * Number.MAX_SAFE_INTEGER;\n    for (var i = 1, l = nbPoints - 1; i < l; i++) {\n      let diff = difference[i];\n      if (diff >= 0) {\n        weights[i] = 0;\n      } else {\n        weights[i] = Math.exp(iteration * diff / sumNegDifferences);\n        if (maxNegativeDiff < diff) maxNegativeDiff = diff;\n      }\n    }\n\n    let value = Math.exp(iteration * maxNegativeDiff / sumNegDifferences);\n    weights[0] = value;\n    weights[l] = value;\n    controlPoints.forEach(i => (weights[i] = value))\n  }\n\n  return {\n    corrected: yData.map((e, i) => e - baseline[i]),\n    baseline,\n    iteration,\n    error: sumNegDifferences\n  };\n\n  function calculateError(e, i) {\n    let diff = e - baseline[i];\n    if (diff < 0) sumNegDifferences += diff;\n    return diff;\n  }\n}\n\n\nfunction getDeltaMatrix(nbPoints, lambda) {\n  var matrix = [];\n  for (var i = 0, last = nbPoints - 1; i < last; i++) {\n    matrix.push([i, i, lambda * 2]);\n    matrix.push([i + 1, i, -1 * lambda]);\n  }\n  matrix[0][2] = lambda;\n  matrix.push([last, last, lambda]);\n  return { lowerTriangularNonZeros: matrix, permutationEncodedArray: cuthillMckee(matrix, nbPoints) };\n}\n\nfunction updateSystem(matrix, yData, weights) {\n  let nbPoints = yData.length;\n  var newMatrix = new Array(matrix.length);\n  var newVector = new Float64Array(nbPoints);\n  for (var i = 0, l = nbPoints - 1; i < l; i++) {\n    let w = weights[i];\n    let diag = i * 2;\n    let next = diag + 1;\n    newMatrix[diag] = matrix[diag].slice();\n    newMatrix[next] = matrix[next].slice();\n    if (w === 0) {\n      newVector[i] = 0;\n    } else {\n      newVector[i] = yData[i] * w;\n      newMatrix[diag][2] += w;\n    }\n  }\n  newVector[l] = yData[l] * weights[l];\n  newMatrix[l * 2] = matrix[l * 2].slice();\n  newMatrix[l * 2][2] += weights[l];\n\n  return [newMatrix, newVector];\n}\n\n\nexport { airPLS as default };\n"],"names":["cuthillMckee","compareNum","a","b","list","n","adj","Array","visited","i","length","l","push","toVisit","eol","ptr","v","nbhd","sort","j","u","result","ldl_symbolic","Ap","Ai","Lp","Parent","Lnz","Flag","k","p","kk","p2","ldl_numeric","Ax","Li","Lx","D","Y","Pattern","yi","l_ki","len","top","ldl_lsolve","X","ldl_dsolve","ldl_ltsolve","ldl_perm","B","P","ldl_permt","prepare","M","ANZ","Pinv","Mt","ar","ac","t","LNZ","coloffset","e","col","adr","bp1","x","d","airPLS","yData","options","maxIterations","lambda","factorCriterion","weights","fill","controlPoints","nbPoints","stopCriterion","reduce","sum","Math","abs","lowerTriangularNonZeros","permutationEncodedArray","getDeltaMatrix","sumNegDifferences","Number","MAX_SAFE_INTEGER","iteration","leftHandSide","rightHandSide","updateSystem","cho","Cholesky","baseline","difference","map","calculateError","maxNegativeDiff","diff","exp","value","forEach","corrected","error","matrix","last","newMatrix","newVector","Float64Array","w","diag","next","slice"],"mappings":"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"}