{"version":3,"file":"jcampconverter.js","sources":["../node_modules/isutf8/dist/index.esm.js","../node_modules/ensure-string/lib-esm/index.js","../src/createTree.js","../node_modules/dynamic-typing/src/parseString.js","../src/complexChromatogram.js","../src/convertToFloatArray.js","../src/parse/fastParseXYData.js","../src/parse/parsePeakTable.js","../src/parse/parseXYA.js","../node_modules/is-any-array/lib-esm/index.js","../node_modules/median-quickselect/lib/median-quickselect.min.js","../node_modules/ml-array-median/lib-es6/index.js","../src/2d/convertTo3DZ.js","../src/2d/generateContourLines.js","../src/2d/add2D.js","../node_modules/gyromagnetic-ratio/lib-esm/index.js","../src/postProcessingNMR.js","../src/profiling.js","../src/simpleChromatogram.js","../src/postProcessing.js","../src/prepareNtuplesDatatable.js","../src/prepareSpectrum.js","../src/convert.js"],"sourcesContent":["/*\n    https://tools.ietf.org/html/rfc3629\n\n    UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4\n\n    UTF8-1    = %x00-7F\n\n    UTF8-2    = %xC2-DF UTF8-tail\n\n    UTF8-3    = %xE0 %xA0-BF UTF8-tail\n                %xE1-EC 2( UTF8-tail )\n                %xED %x80-9F UTF8-tail\n                %xEE-EF 2( UTF8-tail )\n\n    UTF8-4    = %xF0 %x90-BF 2( UTF8-tail )\n                %xF1-F3 3( UTF8-tail )\n                %xF4 %x80-8F 2( UTF8-tail )\n\n    UTF8-tail = %x80-BF\n*/\n/**\n * Check if a Node.js Buffer or Uint8Array is UTF-8.\n */\nfunction isUtf8(buf) {\n    if (!buf) {\n        return false;\n    }\n    var i = 0;\n    var len = buf.length;\n    while (i < len) {\n        // UTF8-1 = %x00-7F\n        if (buf[i] <= 0x7F) {\n            i++;\n            continue;\n        }\n        // UTF8-2 = %xC2-DF UTF8-tail\n        if (buf[i] >= 0xC2 && buf[i] <= 0xDF) {\n            // if(buf[i + 1] >= 0x80 && buf[i + 1] <= 0xBF) {\n            if (buf[i + 1] >> 6 === 2) {\n                i += 2;\n                continue;\n            }\n            else {\n                return false;\n            }\n        }\n        // UTF8-3 = %xE0 %xA0-BF UTF8-tail\n        // UTF8-3 = %xED %x80-9F UTF8-tail\n        if (((buf[i] === 0xE0 && buf[i + 1] >= 0xA0 && buf[i + 1] <= 0xBF) ||\n            (buf[i] === 0xED && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x9F)) && buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-3 = %xE1-EC 2( UTF8-tail )\n        // UTF8-3 = %xEE-EF 2( UTF8-tail )\n        if (((buf[i] >= 0xE1 && buf[i] <= 0xEC) ||\n            (buf[i] >= 0xEE && buf[i] <= 0xEF)) &&\n            buf[i + 1] >> 6 === 2 &&\n            buf[i + 2] >> 6 === 2) {\n            i += 3;\n            continue;\n        }\n        // UTF8-4 = %xF0 %x90-BF 2( UTF8-tail )\n        //          %xF1-F3 3( UTF8-tail )\n        //          %xF4 %x80-8F 2( UTF8-tail )\n        if (((buf[i] === 0xF0 && buf[i + 1] >= 0x90 && buf[i + 1] <= 0xBF) ||\n            (buf[i] >= 0xF1 && buf[i] <= 0xF3 && buf[i + 1] >> 6 === 2) ||\n            (buf[i] === 0xF4 && buf[i + 1] >= 0x80 && buf[i + 1] <= 0x8F)) &&\n            buf[i + 2] >> 6 === 2 &&\n            buf[i + 3] >> 6 === 2) {\n            i += 4;\n            continue;\n        }\n        return false;\n    }\n    return true;\n}\n\nexport { isUtf8 as default };\n","import isutf8 from 'isutf8';\n/**\n * Ensure that the data is string. If it is an ArrayBuffer it will be converted to string using TextDecoder.\n * @param blob\n * @param options\n * @returns\n */\nexport function ensureString(blob, options = {}) {\n    if (typeof blob === 'string') {\n        return blob;\n    }\n    if (ArrayBuffer.isView(blob) || blob instanceof ArrayBuffer) {\n        const { encoding = guessEncoding(blob) } = options;\n        const decoder = new TextDecoder(encoding);\n        return decoder.decode(blob);\n    }\n    throw new TypeError(`blob must be a string, ArrayBuffer or ArrayBufferView`);\n}\nfunction guessEncoding(blob) {\n    const uint8 = ArrayBuffer.isView(blob)\n        ? new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength)\n        : new Uint8Array(blob);\n    if (uint8.length >= 2) {\n        if (uint8[0] === 0xfe && uint8[1] === 0xff) {\n            return 'utf-16be';\n        }\n        if (uint8[0] === 0xff && uint8[1] === 0xfe) {\n            return 'utf-16le';\n        }\n    }\n    //@ts-expect-error an ArrayBuffer is also ok\n    if (!isutf8(blob))\n        return 'latin1';\n    return 'utf-8';\n}\n//# sourceMappingURL=index.js.map","import { ensureString } from 'ensure-string';\n\n/**\n *\n * @typedef {object} CreateTreeOptions\n * @property {boolean} [flatten=false]\n */\n\n/**\n *\n * @typedef {object} Tree\n * @property {string} title\n * @property {string} jcamp\n * @property {Tree[]} [children]\n */\n\n/**\n * Parse the jcamp to extract the structure as a tree.\n *\n * @param {string|ArrayBuffer|Uint8Array} jcamp\n * @param {CreateTreeOptions} [options={}]\n * @returns {Tree[]}\n */\nexport function createTree(jcamp, options = {}) {\n  jcamp = ensureString(jcamp);\n  const { flatten = false } = options;\n  if (typeof jcamp !== 'string') {\n    throw new TypeError('the JCAMP should be a string');\n  }\n\n  let lines = jcamp.split(/[\\r\\n]+/);\n  let flat = [];\n  let stack = [];\n  let result = [];\n  let current;\n  let ntupleLevel = 0;\n\n  let spaces = jcamp.includes('## ');\n\n  for (let i = 0; i < lines.length; i++) {\n    let line = lines[i];\n    let labelLine = spaces ? line.replace(/ /g, '') : line;\n\n    if (labelLine.substring(0, 9) === '##NTUPLES') {\n      ntupleLevel++;\n    }\n\n    if (labelLine.substring(0, 7) === '##TITLE') {\n      let title = [labelLine.substring(8).trim()];\n      for (let j = i + 1; j < lines.length; j++) {\n        if (lines[j].startsWith('##')) {\n          break;\n        } else {\n          title.push(lines[j].trim());\n        }\n      }\n      stack.push({\n        title: title.join('\\n'),\n        jcamp: `${line}\\n`,\n        children: [],\n      });\n      current = stack[stack.length - 1];\n      flat.push(current);\n    } else if (labelLine.substring(0, 5) === '##END' && ntupleLevel === 0) {\n      current.jcamp += `${line}\\n`;\n      let finished = stack.pop();\n      if (stack.length !== 0) {\n        current = stack[stack.length - 1];\n        current.children.push(finished);\n      } else {\n        current = undefined;\n        result.push(finished);\n      }\n    } else if (current && current.jcamp) {\n      current.jcamp += `${line}\\n`;\n      let match = labelLine.match(/^##(.*?)=(.+)/);\n      if (match) {\n        let canonicDataLabel = match[1].replace(/[ _-]/g, '').toUpperCase();\n        if (canonicDataLabel === 'DATATYPE') {\n          current.dataType = match[2].trim();\n        }\n        if (canonicDataLabel === 'DATACLASS') {\n          current.dataClass = match[2].trim();\n        }\n      }\n    }\n\n    if (labelLine.substring(0, 5) === '##END' && ntupleLevel > 0) {\n      ntupleLevel--;\n    }\n  }\n  if (flatten) {\n    flat.forEach((entry) => {\n      entry.children = undefined;\n    });\n    return flat;\n  } else {\n    return result;\n  }\n}\n","/**\n * Dynamically type a string\n * @param {string} value String to dynamically type\n * @returns {boolean|string|number}\n */\nexport function parseString(value) {\n  if (value.length === 4 || value.length === 5) {\n    let lowercase = value.toLowerCase();\n\n    if (lowercase === 'true') return true;\n    if (lowercase === 'false') return false;\n  }\n  let number = Number(value);\n  if (number === 0 && !value.includes('0')) {\n    return value;\n  }\n  if (!Number.isNaN(number)) return number;\n  return value;\n}\n","const GC_MS_FIELDS = ['TIC', '.RIC', 'SCANNUMBER'];\n\nexport function complexChromatogram(result) {\n  let spectra = result.spectra;\n  let length = spectra.length;\n  let chromatogram = {\n    times: new Array(length),\n    series: {\n      ms: {\n        dimension: 2,\n        data: new Array(length),\n      },\n    },\n  };\n\n  let existingGCMSFields = [];\n  for (let i = 0; i < GC_MS_FIELDS.length; i++) {\n    let label = convertMSFieldToLabel(GC_MS_FIELDS[i]);\n    if (spectra[0][label]) {\n      existingGCMSFields.push(label);\n      chromatogram.series[label] = {\n        dimension: 1,\n        data: new Array(length),\n      };\n    }\n  }\n\n  for (let i = 0; i < length; i++) {\n    let spectrum = spectra[i];\n    chromatogram.times[i] = spectrum.pageValue;\n    for (let j = 0; j < existingGCMSFields.length; j++) {\n      chromatogram.series[existingGCMSFields[j]].data[i] = Number(\n        spectrum[existingGCMSFields[j]],\n      );\n    }\n    if (spectrum.data) {\n      chromatogram.series.ms.data[i] = [spectrum.data.x, spectrum.data.y];\n    }\n  }\n  result.chromatogram = chromatogram;\n}\n\nexport function isMSField(canonicDataLabel) {\n  return GC_MS_FIELDS.indexOf(canonicDataLabel) !== -1;\n}\n\nexport function convertMSFieldToLabel(value) {\n  return value.toLowerCase().replace(/[^a-z0-9]/g, '');\n}\n","export default function convertToFloatArray(stringArray) {\n  let floatArray = [];\n  for (let i = 0; i < stringArray.length; i++) {\n    floatArray.push(Number(stringArray[i]));\n  }\n  return floatArray;\n}\n","export default function fastParseXYData(spectrum, value) {\n  // TODO need to deal with result\n  //  console.log(value);\n  // we check if deltaX is defined otherwise we calculate it\n\n  let yFactor = spectrum.yFactor;\n  let deltaX = spectrum.deltaX;\n\n  spectrum.isXYdata = true;\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  let currentX = spectrum.firstX;\n  let currentY = spectrum.firstY;\n\n  // we skip the first line\n  //\n  let endLine = false;\n  let ascii;\n  let i = 0;\n  for (; i < value.length; i++) {\n    ascii = value.charCodeAt(i);\n    if (ascii === 13 || ascii === 10) {\n      endLine = true;\n    } else if (endLine) {\n      break;\n    }\n  }\n\n  // we proceed taking the i after the first line\n  let newLine = true;\n  let isDifference = false;\n  let isLastDifference = false;\n  let lastDifference = 0;\n  let isDuplicate = false;\n  let inComment = false;\n  let currentValue = 0; // can be a difference or a duplicate\n  let lastValue = 0; // must be the real last value\n  let isNegative = false;\n  let inValue = false;\n  let skipFirstValue = false;\n  let decimalPosition = 0;\n  for (; i <= value.length; i++) {\n    if (i === value.length) ascii = 13;\n    else ascii = value.charCodeAt(i);\n    if (inComment) {\n      // we should ignore the text if we are after $$\n      if (ascii === 13 || ascii === 10) {\n        newLine = true;\n        inComment = false;\n      }\n    } else {\n      // when is it a new value ?\n      // when it is not a digit, . or comma\n      // it is a number that is either new or we continue\n      // eslint-disable-next-line no-lonely-if\n      if (ascii <= 57 && ascii >= 48) {\n        // a number\n        inValue = true;\n        if (decimalPosition > 0) {\n          currentValue += (ascii - 48) / Math.pow(10, decimalPosition++);\n        } else {\n          currentValue *= 10;\n          currentValue += ascii - 48;\n        }\n      } else if (ascii === 44 || ascii === 46) {\n        // a \",\" or \".\"\n        inValue = true;\n        decimalPosition++;\n      } else {\n        if (inValue) {\n          // need to process the previous value\n          if (newLine) {\n            newLine = false; // we don't check the X value\n            // console.log(\"NEW LINE\",isDifference, lastDifference);\n            // if new line and lastDifference, the first value is just a check !\n            // that we don't check ...\n            if (isLastDifference) skipFirstValue = true;\n          } else {\n            // need to deal with duplicate and differences\n            // eslint-disable-next-line no-lonely-if\n            if (skipFirstValue) {\n              skipFirstValue = false;\n            } else {\n              if (isDifference) {\n                lastDifference = isNegative ? 0 - currentValue : currentValue;\n                isLastDifference = true;\n                isDifference = false;\n              } else if (!isDuplicate) {\n                lastValue = isNegative ? 0 - currentValue : currentValue;\n              }\n              let duplicate = isDuplicate ? currentValue - 1 : 1;\n              for (let j = 0; j < duplicate; j++) {\n                if (isLastDifference) {\n                  currentY += lastDifference;\n                } else {\n                  currentY = lastValue;\n                }\n                currentData.x.push(currentX);\n                currentData.y.push(currentY * yFactor);\n                currentX += deltaX;\n              }\n            }\n          }\n          isNegative = false;\n          currentValue = 0;\n          decimalPosition = 0;\n          inValue = false;\n          isDuplicate = false;\n        }\n\n        // positive SQZ digits @ A B C D E F G H I (ascii 64-73)\n        if (ascii < 74 && ascii > 63) {\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 64;\n        } else if (ascii > 96 && ascii < 106) {\n          // negative SQZ digits a b c d e f g h i (ascii 97-105)\n          inValue = true;\n          isLastDifference = false;\n          currentValue = ascii - 96;\n          isNegative = true;\n        } else if (ascii === 115) {\n          // DUP digits S T U V W X Y Z s (ascii 83-90, 115)\n          inValue = true;\n          isDuplicate = true;\n          currentValue = 9;\n        } else if (ascii > 82 && ascii < 91) {\n          inValue = true;\n          isDuplicate = true;\n          currentValue = ascii - 82;\n        } else if (ascii > 73 && ascii < 83) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 73;\n        } else if (ascii > 105 && ascii < 115) {\n          // negative DIF digits j k l m n o p q r (ascii 106-114)\n          inValue = true;\n          isDifference = true;\n          currentValue = ascii - 105;\n          isNegative = true;\n        } else if (ascii === 36 && value.charCodeAt(i + 1) === 36) {\n          // $ sign, we need to check the next one\n          inValue = true;\n          inComment = true;\n        } else if (ascii === 37) {\n          // positive DIF digits % J K L M N O P Q R (ascii 37, 74-82)\n          inValue = true;\n          isDifference = true;\n          currentValue = 0;\n          isNegative = false;\n        } else if (ascii === 45) {\n          // a \"-\"\n          // check if after there is a number, decimal or comma\n          let ascii2 = value.charCodeAt(i + 1);\n          if (\n            (ascii2 >= 48 && ascii2 <= 57) ||\n            ascii2 === 44 ||\n            ascii2 === 46\n          ) {\n            inValue = true;\n            if (!newLine) isLastDifference = false;\n            isNegative = true;\n          }\n        } else if (ascii === 13 || ascii === 10) {\n          newLine = true;\n          inComment = false;\n        }\n        // and now analyse the details ... space or tabulation\n        // if \"+\" we just don't care\n      }\n    }\n  }\n}\n","const removeCommentRegExp = /\\$\\$.*/;\nconst peakTableSplitRegExp = /[,\\t ]+/;\n\nexport default function parsePeakTable(spectrum, value, result) {\n  spectrum.isPeaktable = true;\n\n  if (!spectrum.variables || Object.keys(spectrum.variables) === 2) {\n    parseXY(spectrum, value, result);\n  } else {\n    parseXYZ(spectrum, value, result);\n  }\n\n  // we will add the data in the variables\n  if (spectrum.variables) {\n    for (let key in spectrum.variables) {\n      spectrum.variables[key].data = spectrum.data[key];\n    }\n  }\n}\n\nfunction parseXY(spectrum, value, result) {\n  let currentData = { x: [], y: [] };\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % 2 === 0) {\n      for (let j = 0; j < values.length; j = j + 2) {\n        // takes around 40% of the time to add and parse the 2 values nearly exclusively because of Number\n        currentData.x.push(Number(values[j]) * spectrum.xFactor);\n        currentData.y.push(Number(values[j + 1]) * spectrum.yFactor);\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n\nfunction parseXYZ(spectrum, value, result) {\n  let currentData = {};\n  let variables = Object.keys(spectrum.variables);\n  let numberOfVariables = variables.length;\n  variables.forEach((variable) => (currentData[variable] = []));\n  spectrum.data = currentData;\n\n  // counts for around 20% of the time\n  let lines = value.split(/,? *,?[;\\r\\n]+ */);\n\n  for (let i = 1; i < lines.length; i++) {\n    let values = lines[i]\n      .trim()\n      .replace(removeCommentRegExp, '')\n      .split(peakTableSplitRegExp);\n    if (values.length % numberOfVariables === 0) {\n      for (let j = 0; j < values.length; j++) {\n        // todo should try to find a xFactor (y, ...)\n        currentData[variables[j % numberOfVariables]].push(Number(values[j]));\n      }\n    } else {\n      result.logs.push(`Format error: ${values}`);\n    }\n  }\n}\n","/*\n(5.4.4) ##РЕАК ASSIGNMENTS= (STRING). List\nof peak assignments for components or functional groups\nin the forms ##РЕАК ASSIGNMENTS= (ХУА),\n(XYW А), (ХУМА), (XYMW А). Each entry is surrounded Ьу parentheses and starts а new line. У, W (peak\nwidth), and М (multiplicity) values are optional. The\nsymbol А stands for а string detailing the assignment\nand must Ье enclosed Ьу angle brackets. If the peak width\nvalue is included, then the function used to calculate the\npeak width must Ье detailed in а $$ comment on the\nline(s) below ##PEAKASSIGNMENTS=. Priority OPTIONAL. N.B.: ##РЕАК ASSIGNMENTS= is the preferred method of transmitting peak information when\nthe assignments are known.\n */\n\nexport default function parseXYA(spectrum, value) {\n  spectrum.isXYAdata = true;\n  const currentData = {};\n  spectrum.data = currentData;\n\n  let lines = value.split(/\\r?\\n/);\n  const variables = lines[0]\n    .replace(/^.*?([A-Z]+).*$/, '$1')\n    .split('')\n    .map((variable) => variable.toLowerCase());\n\n  for (let i = 1; i < lines.length; i++) {\n    const fields = lines[i].replace(/^\\((.*)\\)$/, '$1').split(/ *, */);\n    for (let j = 0; j < variables.length; j++) {\n      let value = fields[j];\n      switch (variables[j]) {\n        case 'x':\n        case 'y':\n        case 'w':\n          value = Number.parseFloat(value);\n          break;\n        case 'a':\n          value = value.replace(/^<(.*)>$/, '$1');\n          break;\n        case 'm':\n          break;\n        default:\n          continue;\n      }\n      if (!currentData[variables[j]]) {\n        currentData[variables[j]] = [];\n      }\n      currentData[variables[j]].push(value);\n    }\n  }\n}\n","const toString = Object.prototype.toString;\n/**\n * Checks if an object is an instance of an Array (array or typed array).\n *\n * @param {any} value - Object to check.\n * @returns {boolean} True if the object is an array.\n */\nexport function isAnyArray(value) {\n    return toString.call(value).endsWith('Array]');\n}\n//# sourceMappingURL=index.js.map","(function(){function a(d){for(var e=0,f=d.length-1,g=void 0,h=void 0,i=void 0,j=c(e,f);!0;){if(f<=e)return d[j];if(f==e+1)return d[e]>d[f]&&b(d,e,f),d[j];for(g=c(e,f),d[g]>d[f]&&b(d,g,f),d[e]>d[f]&&b(d,e,f),d[g]>d[e]&&b(d,g,e),b(d,g,e+1),h=e+1,i=f;!0;){do h++;while(d[e]>d[h]);do i--;while(d[i]>d[e]);if(i<h)break;b(d,h,i)}b(d,e,i),i<=j&&(e=h),i>=j&&(f=i-1)}}var b=function b(d,e,f){var _ref;return _ref=[d[f],d[e]],d[e]=_ref[0],d[f]=_ref[1],_ref},c=function c(d,e){return~~((d+e)/2)};'undefined'!=typeof module&&module.exports?module.exports=a:window.median=a})();\n","import { isAnyArray } from 'is-any-array';\nimport quickSelectMedian from 'median-quickselect';\n\nfunction median(input) {\n  if (!isAnyArray(input)) {\n    throw new TypeError('input must be an array');\n  }\n\n  if (input.length === 0) {\n    throw new TypeError('input must not be empty');\n  }\n\n  return quickSelectMedian(input.slice());\n}\n\nexport { median as default };\n","import getMedian from 'ml-array-median';\n\nexport default function convertTo3DZ(spectra) {\n  let minZ = spectra[0].data.y[0];\n  let maxZ = minZ;\n  let ySize = spectra.length;\n  let xSize = spectra[0].data.x.length;\n\n  let z = new Array(ySize);\n  for (let i = 0; i < ySize; i++) {\n    z[i] = spectra[i].data.y;\n    for (let j = 0; j < xSize; j++) {\n      let value = z[i][j];\n      if (value < minZ) minZ = value;\n      if (value > maxZ) maxZ = value;\n    }\n  }\n\n  const firstX = spectra[0].data.x[0];\n  const lastX = spectra[0].data.x[spectra[0].data.x.length - 1]; // has to be -2 because it is a 1D array [x,y,x,y,...]\n  const firstY = spectra[0].pageValue;\n  const lastY = spectra[ySize - 1].pageValue;\n\n  // Because the min / max value are the only information about the matrix if we invert\n  // min and max we need to invert the array\n  if (firstX > lastX) {\n    for (let spectrum of z) {\n      spectrum.reverse();\n    }\n  }\n  if (firstY > lastY) {\n    z.reverse();\n  }\n\n  const medians = [];\n  for (let i = 0; i < z.length; i++) {\n    const row = Float64Array.from(z[i]);\n    for (let i = 0; i < row.length; i++) {\n      if (row[i] < 0) row[i] = -row[i];\n    }\n    medians.push(getMedian(row));\n  }\n  const median = getMedian(medians);\n\n  return {\n    z,\n    minX: Math.min(firstX, lastX),\n    maxX: Math.max(firstX, lastX),\n    minY: Math.min(firstY, lastY),\n    maxY: Math.max(firstY, lastY),\n    minZ,\n    maxZ,\n    noise: median,\n  };\n}\n","export default function generateContourLines(zData, options) {\n  let noise = zData.noise;\n  let z = zData.z;\n  let povarHeight0, povarHeight1, povarHeight2, povarHeight3;\n  let isOver0, isOver1, isOver2, isOver3;\n  let nbSubSpectra = z.length;\n  let nbPovars = z[0].length;\n  let pAx, pAy, pBx, pBy;\n\n  let x0 = zData.minX;\n  let xN = zData.maxX;\n  let dx = (xN - x0) / (nbPovars - 1);\n  let y0 = zData.minY;\n  let yN = zData.maxY;\n  let dy = (yN - y0) / (nbSubSpectra - 1);\n  let minZ = zData.minZ;\n  let maxZ = zData.maxZ;\n\n  // System.out.prvarln('y0 '+y0+' yN '+yN);\n  // -------------------------\n  // Povars attribution\n  //\n  // 0----1\n  // |  / |\n  // | /  |\n  // 2----3\n  //\n  // ---------------------d------\n\n  let iter = options.nbContourLevels * 2;\n  let contourLevels = new Array(iter);\n  let lineZValue;\n  for (let level = 0; level < iter; level++) {\n    // multiply by 2 for positif and negatif\n    let contourLevel = {};\n    contourLevels[level] = contourLevel;\n    let side = level % 2;\n    let factor =\n      (maxZ - options.noiseMultiplier * noise) *\n      Math.exp((level >> 1) - options.nbContourLevels);\n    if (side === 0) {\n      lineZValue = factor + options.noiseMultiplier * noise;\n    } else {\n      lineZValue = 0 - factor - options.noiseMultiplier * noise;\n    }\n    let lines = [];\n    contourLevel.zValue = lineZValue;\n    contourLevel.lines = lines;\n\n    if (lineZValue <= minZ || lineZValue >= maxZ) continue;\n\n    for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra - 1; iSubSpectra++) {\n      let subSpectra = z[iSubSpectra];\n      let subSpectraAfter = z[iSubSpectra + 1];\n      for (let povar = 0; povar < nbPovars - 1; povar++) {\n        povarHeight0 = subSpectra[povar];\n        povarHeight1 = subSpectra[povar + 1];\n        povarHeight2 = subSpectraAfter[povar];\n        povarHeight3 = subSpectraAfter[povar + 1];\n\n        isOver0 = povarHeight0 > lineZValue;\n        isOver1 = povarHeight1 > lineZValue;\n        isOver2 = povarHeight2 > lineZValue;\n        isOver3 = povarHeight3 > lineZValue;\n\n        // Example povar0 is over the plane and povar1 and\n        // povar2 are below, we find the varersections and add\n        // the segment\n        if (isOver0 !== isOver1 && isOver0 !== isOver2) {\n          pAx =\n            povar + (lineZValue - povarHeight0) / (povarHeight1 - povarHeight0);\n          pAy = iSubSpectra;\n          pBx = povar;\n          pBy =\n            iSubSpectra +\n            (lineZValue - povarHeight0) / (povarHeight2 - povarHeight0);\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // remove push does not help !!!!\n        if (isOver3 !== isOver1 && isOver3 !== isOver2) {\n          pAx = povar + 1;\n          pAy =\n            iSubSpectra +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight1 - povarHeight3);\n          pBx =\n            povar +\n            1 -\n            (lineZValue - povarHeight3) / (povarHeight2 - povarHeight3);\n          pBy = iSubSpectra + 1;\n          lines.push(pAx * dx + x0);\n          lines.push(pAy * dy + y0);\n          lines.push(pBx * dx + x0);\n          lines.push(pBy * dy + y0);\n        }\n        // test around the diagonal\n        if (isOver1 !== isOver2) {\n          pAx =\n            (povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dx +\n            x0;\n          pAy =\n            (iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight2 - povarHeight1)) *\n              dy +\n            y0;\n          if (isOver1 !== isOver0) {\n            pBx =\n              povar +\n              1 -\n              (lineZValue - povarHeight1) / (povarHeight0 - povarHeight1);\n            pBy = iSubSpectra;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver0) {\n            pBx = povar;\n            pBy =\n              iSubSpectra +\n              1 -\n              (lineZValue - povarHeight2) / (povarHeight0 - povarHeight2);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver1 !== isOver3) {\n            pBx = povar + 1;\n            pBy =\n              iSubSpectra +\n              (lineZValue - povarHeight1) / (povarHeight3 - povarHeight1);\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n          if (isOver2 !== isOver3) {\n            pBx =\n              povar +\n              (lineZValue - povarHeight2) / (povarHeight3 - povarHeight2);\n            pBy = iSubSpectra + 1;\n            lines.push(pAx);\n            lines.push(pAy);\n            lines.push(pBx * dx + x0);\n            lines.push(pBy * dy + y0);\n          }\n        }\n      }\n    }\n  }\n\n  return {\n    minX: zData.minX,\n    maxX: zData.maxX,\n    minY: zData.minY,\n    maxY: zData.maxY,\n    segments: contourLevels,\n  };\n}\n","import convertTo3DZ from './convertTo3DZ';\nimport generateContourLines from './generateContourLines';\n\nexport default function add2D(result, options) {\n  let zData = convertTo3DZ(result.spectra);\n  if (!options.noContour) {\n    result.contourLines = generateContourLines(zData, options);\n    delete zData.z;\n  }\n  result.minMax = zData;\n}\n","export const gyromagneticRatio = {\n    '1H': 267.52218744e6,\n    '2H': 41.065e6,\n    '3H': 285.3508e6,\n    '3He': -203.789e6,\n    '7Li': 103.962e6,\n    '13C': 67.28284e6,\n    '14N': 19.331e6,\n    '15N': -27.116e6,\n    '17O': -36.264e6,\n    '19F': 251.662e6,\n    '23Na': 70.761e6,\n    '27Al': 69.763e6,\n    '29Si': -53.19e6,\n    '31P': 108.291e6,\n    '57Fe': 8.681e6,\n    '63Cu': 71.118e6,\n    '67Zn': 16.767e6,\n    '129Xe': -73.997e6,\n};\n//# sourceMappingURL=index.js.map","import { gyromagneticRatio } from 'gyromagnetic-ratio';\n\nexport default function postProcessingNMR(entriesFlat) {\n  // specific NMR functions\n\n  for (let entry of entriesFlat) {\n    let observeFrequency = 0;\n    let shiftOffsetVal = 0;\n    for (let spectrum of entry.spectra) {\n      if (entry.ntuples && entry.ntuples.symbol) {\n        if (!observeFrequency && spectrum.observeFrequency) {\n          observeFrequency = spectrum.observeFrequency;\n        }\n        if (!shiftOffsetVal && spectrum.shiftOffsetVal) {\n          shiftOffsetVal = spectrum.shiftOffsetVal;\n        }\n      } else {\n        observeFrequency = spectrum.observeFrequency;\n        shiftOffsetVal = spectrum.shiftOffsetVal;\n      }\n\n      if (observeFrequency) {\n        if (spectrum.xUnits && spectrum.xUnits.toUpperCase().includes('HZ')) {\n          spectrum.xUnits = 'PPM';\n          spectrum.xFactor = spectrum.xFactor / observeFrequency;\n          spectrum.firstX = spectrum.firstX / observeFrequency;\n          spectrum.lastX = spectrum.lastX / observeFrequency;\n          spectrum.deltaX = spectrum.deltaX / observeFrequency;\n          for (let i = 0; i < spectrum.data.x.length; i++) {\n            spectrum.data.x[i] /= observeFrequency;\n          }\n        }\n      }\n      if (shiftOffsetVal && spectrum.xUnits.toLowerCase().includes('ppm')) {\n        let shift = spectrum.firstX - shiftOffsetVal;\n        spectrum.firstX = spectrum.firstX - shift;\n        spectrum.lastX = spectrum.lastX - shift;\n        for (let i = 0; i < spectrum.data.x.length; i++) {\n          spectrum.data.x[i] -= shift;\n        }\n      }\n\n      // we will check if some nucleus are missing ...\n      if (entry.ntuples && entry.ntuples.nucleus && entry.ntuples.symbol) {\n        for (let i = 0; i < entry.ntuples.nucleus.length; i++) {\n          let symbol = entry.ntuples.symbol[i];\n          let nucleus = entry.ntuples.nucleus[i];\n          if (symbol.startsWith('F') && !nucleus) {\n            if (symbol === 'F1') {\n              // if F1 is defined we will use F2\n              if (entry.tmp.$NUC2) {\n                entry.ntuples.nucleus[i] = entry.tmp.$NUC2;\n              } else {\n                let f2index = entry.ntuples.symbol.indexOf('F2');\n                if (f2index && entry.ntuples.nucleus[f2index]) {\n                  entry.ntuples.nucleus[i] = entry.ntuples.nucleus[f2index];\n                }\n              }\n            }\n            if (symbol === 'F2') entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n          }\n          if (symbol === 'F2') {\n            entry.yType = entry.ntuples.nucleus[0];\n          }\n        }\n      }\n\n      if (\n        observeFrequency &&\n        entry.ntuples &&\n        entry.ntuples.symbol &&\n        entry.ntuples.nucleus\n      ) {\n        let unit = '';\n        let pageSymbolIndex = entry.ntuples.symbol.indexOf(spectrum.pageSymbol);\n        if (entry.ntuples.units && entry.ntuples.units[pageSymbolIndex]) {\n          unit = entry.ntuples.units[pageSymbolIndex];\n        }\n        if (unit !== 'PPM') {\n          if (pageSymbolIndex !== 0) {\n            throw Error('Not sure about this ntuples format');\n          }\n\n          let ratio0 = gyromagneticRatio[entry.ntuples.nucleus[0]];\n          let ratio1 = gyromagneticRatio[entry.ntuples.nucleus[1]];\n          if (!ratio0 || !ratio1) {\n            throw Error('Problem with determination of gyromagnetic ratio');\n          }\n          let ratio = (ratio0 / ratio1) * observeFrequency;\n          spectrum.pageValue /= ratio;\n        }\n      }\n    }\n  }\n}\n","export default function profiling(result, action, options) {\n  if (result.profiling) {\n    result.profiling.push({\n      action,\n      time: Date.now() - options.start,\n    });\n  }\n}\n","export default function simpleChromatogram(result) {\n  let data = result.spectra[0].data;\n  result.chromatogram = {\n    times: data.x.slice(),\n    series: {\n      intensity: {\n        dimension: 1,\n        data: data.y.slice(),\n      },\n    },\n  };\n}\n","import add2D from './2d/add2D';\nimport { complexChromatogram } from './complexChromatogram';\nimport postProcessingNMR from './postProcessingNMR';\nimport profiling from './profiling';\nimport simpleChromatogram from './simpleChromatogram';\n\nexport default function postProcessing(entriesFlat, result, options) {\n  // converting Hz to ppm\n  postProcessingNMR(entriesFlat);\n\n  for (let entry of entriesFlat) {\n    if (Object.keys(entry.ntuples).length > 0) {\n      let newNtuples = [];\n      let keys = Object.keys(entry.ntuples);\n      for (let i = 0; i < keys.length; i++) {\n        let key = keys[i];\n        let values = entry.ntuples[key];\n        for (let j = 0; j < values.length; j++) {\n          if (!newNtuples[j]) newNtuples[j] = {};\n          newNtuples[j][key] = values[j];\n        }\n      }\n      entry.ntuples = newNtuples;\n    }\n\n    if (entry.twoD && options.wantXY) {\n      add2D(entry, options);\n\n      profiling(result, 'Finished countour plot calculation', options);\n\n      if (!options.keepSpectra) {\n        delete entry.spectra;\n      }\n    }\n\n    // maybe it is a GC (HPLC) / MS. In this case we add a new format\n    if (options.chromatogram) {\n      if (entry.spectra.length > 1) {\n        complexChromatogram(entry);\n      } else {\n        simpleChromatogram(entry);\n      }\n      profiling(result, 'Finished chromatogram calculation', options);\n    }\n\n    delete entry.tmp;\n  }\n}\n","export default function prepareNtuplesDatatable(currentEntry, spectrum, kind) {\n  let xIndex = -1;\n  let yIndex = -1;\n  let firstVariable = '';\n  let secondVariable = '';\n  if (kind.indexOf('++') > 0) {\n    firstVariable = kind.replace(/.*\\(([a-zA-Z0-9]+)\\+\\+.*/, '$1');\n    secondVariable = kind.replace(/.*\\.\\.([a-zA-Z0-9]+).*/, '$1');\n  } else {\n    kind = kind.replace(/[^a-zA-Z]/g, '');\n    firstVariable = kind.charAt(0);\n    secondVariable = kind.charAt(1);\n    spectrum.variables = {};\n    for (let symbol of kind) {\n      let lowerCaseSymbol = symbol.toLowerCase();\n      let index = currentEntry.ntuples.symbol.indexOf(symbol);\n      if (index === -1) throw Error(`Symbol undefined: ${symbol}`);\n      spectrum.variables[lowerCaseSymbol] = {};\n      for (let key in currentEntry.ntuples) {\n        if (currentEntry.ntuples[key][index]) {\n          spectrum.variables[lowerCaseSymbol][key.replace(/^var/, '')] =\n            currentEntry.ntuples[key][index];\n        }\n      }\n    }\n  }\n  xIndex = currentEntry.ntuples.symbol.indexOf(firstVariable);\n  yIndex = currentEntry.ntuples.symbol.indexOf(secondVariable);\n\n  if (xIndex === -1) xIndex = 0;\n  if (yIndex === -1) yIndex = 0;\n\n  if (currentEntry.ntuples.first) {\n    if (currentEntry.ntuples.first.length > xIndex) {\n      spectrum.firstX = currentEntry.ntuples.first[xIndex];\n    }\n    if (currentEntry.ntuples.first.length > yIndex) {\n      spectrum.firstY = currentEntry.ntuples.first[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.last) {\n    if (currentEntry.ntuples.last.length > xIndex) {\n      spectrum.lastX = currentEntry.ntuples.last[xIndex];\n    }\n    if (currentEntry.ntuples.last.length > yIndex) {\n      spectrum.lastY = currentEntry.ntuples.last[yIndex];\n    }\n  }\n  if (\n    currentEntry.ntuples.vardim &&\n    currentEntry.ntuples.vardim.length > xIndex\n  ) {\n    spectrum.nbPoints = currentEntry.ntuples.vardim[xIndex];\n  }\n  if (currentEntry.ntuples.factor) {\n    if (currentEntry.ntuples.factor.length > xIndex) {\n      spectrum.xFactor = currentEntry.ntuples.factor[xIndex];\n    }\n    if (currentEntry.ntuples.factor.length > yIndex) {\n      spectrum.yFactor = currentEntry.ntuples.factor[yIndex];\n    }\n  }\n  if (currentEntry.ntuples.units) {\n    if (currentEntry.ntuples.units.length > xIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[xIndex]\n      ) {\n        spectrum.xUnits = `${currentEntry.ntuples.varname[xIndex]} [${currentEntry.ntuples.units[xIndex]}]`;\n      } else {\n        spectrum.xUnits = currentEntry.ntuples.units[xIndex];\n      }\n    }\n    if (currentEntry.ntuples.units.length > yIndex) {\n      if (\n        currentEntry.ntuples.varname &&\n        currentEntry.ntuples.varname[yIndex]\n      ) {\n        spectrum.yUnits = `${currentEntry.ntuples.varname[yIndex]} [${currentEntry.ntuples.units[yIndex]}]`;\n      } else {\n        spectrum.yUnits = currentEntry.ntuples.units[yIndex];\n      }\n    }\n  }\n}\n","export default function prepareSpectrum(spectrum) {\n  if (!spectrum.xFactor) spectrum.xFactor = 1;\n  if (!spectrum.yFactor) spectrum.yFactor = 1;\n}\n","import { parseString } from 'dynamic-typing';\nimport { ensureString } from 'ensure-string';\n\nimport { isMSField, convertMSFieldToLabel } from './complexChromatogram';\nimport convertToFloatArray from './convertToFloatArray';\nimport fastParseXYData from './parse/fastParseXYData';\nimport parsePeakTable from './parse/parsePeakTable';\nimport parseXYA from './parse/parseXYA';\nimport postProcessing from './postProcessing';\nimport prepareNtuplesDatatable from './prepareNtuplesDatatable';\nimport prepareSpectrum from './prepareSpectrum';\nimport profiling from './profiling';\n\n// the following RegExp can only be used for XYdata, some peakTables have values with a \"E-5\" ...\nconst ntuplesSeparatorRegExp = /[ \\t]*,[ \\t]*/;\n\nconst defaultOptions = {\n  keepRecordsRegExp: /^$/,\n  canonicDataLabels: true,\n  canonicMetadataLabels: false,\n  dynamicTyping: true,\n  withoutXY: false,\n  chromatogram: false,\n  keepSpectra: false,\n  noContour: false,\n  nbContourLevels: 7,\n  noiseMultiplier: 5,\n  profiling: false,\n};\n\n/**\n * Conversion options\n * @typedef {object} ConvertOptions\n * @property {RegExp} [keepRecordsRegExp=/^$/] - By default we don't keep meta information.\n * @property {boolean} [canonicDataLabels=true] - Canonize the Labels (uppercase without symbol).\n * @property {boolean} [canonicMetadataLabels=false] - Canonize the metadata Labels (uppercase without symbol).\n * @property {boolean} [dynamicTyping=false] - Convert numbers to Number.\n * @property {boolean} [withoutXY=false] - Remove the XY data.\n * @property {boolean} [chromatogram=false] - Special post-processing for GC / HPLC / MS.\n * @property {boolean} [keepSpectra=false] - Force to keep the spectra in case of 2D.\n * @property {boolean} [noContour=false] - Don't calculate countour in case of 2D.\n * @property {number} [nbContourLevels=7] - Number of positive / negative contour levels to calculate.\n * @property {number} [noiseMultiplier=5] - Define for 2D the level as 5 times the median as default.\n * @property {boolean} [profiling=false] - Add profiling information.\n */\n\n/**\n *\n * @typedef {object} Ntuples\n * @property {string[]} [varname]\n * @property {string[]} [symbol]\n * @property {string[]} [vartype]\n * @property {string[]} [varform]\n * @property {number[]} [vardim]\n * @property {string[]} [units]\n * @property {number[]} [factor]\n * @property {number[]} [first]\n * @property {number[]} [last]\n * @property {number[]} [min]\n * @property {number[]} [max]\n * @property {string[]} [nucleus]\n */\n\n/**\n * @typedef { Record<string, any> } Spectrum\n * @property {Record<string, number[]>} [data]\n * @property {number} [firstX] - first X value\n * @property {number} [lastX] - last X value\n * @property {number} [deltaX] - distance between 2 consecutive x axis values\n * @property {number} [yFactor] - y axis scaling factor\n * @property {number} [xFactor] - x axis scaling factor\n * @property {number} [nbPoints] - Number of points\n */\n\n/**\n *\n * @typedef {object} Entry\n * @property {Spectrum[]} spectra\n * @property {Ntuples} ntuples\n * @property {object} meta\n * @property {object} info\n * @property {object} tmp\n * @property {string} [title]\n * @property {string} [dataType]\n * @property {string} [dataClass]\n * @property {boolean} [twoD]\n */\n\n/**\n *\n * @typedef { object } ConvertResult\n * @property { object[] | boolean } profiling\n * @property { string[] } logs\n * @property { object[] } entries\n * @property { Entry[] } flatten\n */\n\n/**\n * Parse a jcamp.\n * The data can be provide as a string or array buffer. In this later case\n * we will convert it first to a string before parsing.\n * @param {string|ArrayBuffer|Uint8Array} jcamp\n * @param {ConvertOptions} [options]\n * @returns {ConvertResult}\n */\n\nexport function convert(jcamp, options = {}) {\n  jcamp = ensureString(jcamp);\n  options = { ...defaultOptions, ...options };\n  options.wantXY = !options.withoutXY;\n  options.start = Date.now();\n\n  let entriesFlat = [];\n\n  let result = {\n    profiling: options.profiling ? [] : false,\n    logs: [],\n    entries: [],\n  };\n\n  let tmpResult = { children: [] };\n  let currentEntry = tmpResult;\n  let parentsStack = [];\n\n  let spectrum = {};\n\n  if (typeof jcamp !== 'string') {\n    throw new TypeError('the JCAMP should be a string');\n  }\n\n  profiling(result, 'Before split to LDRS', options);\n\n  let ldrs = jcamp.replace(/[\\r\\n]+##/g, '\\n##').split('\\n##');\n\n  profiling(result, 'Split to LDRS', options);\n\n  if (ldrs[0]) ldrs[0] = ldrs[0].replace(/^[\\r\\n ]*##/, '');\n\n  for (let ldr of ldrs) {\n    // This is a new LDR\n    let position = ldr.indexOf('=');\n    let dataLabel = position > 0 ? ldr.substring(0, position) : ldr;\n    let dataValue = position > 0 ? ldr.substring(position + 1).trim() : '';\n\n    let canonicDataLabel = dataLabel.replace(/[_ -]/g, '').toUpperCase();\n\n    if (canonicDataLabel === 'DATATABLE') {\n      let endLine = dataValue.indexOf('\\n');\n      if (endLine === -1) endLine = dataValue.indexOf('\\r');\n      if (endLine > 0) {\n        // ##DATA TABLE= (X++(I..I)), XYDATA\n        // We need to find the variables\n\n        let infos = dataValue.substring(0, endLine).split(/[ ,;\\t]+/);\n        prepareNtuplesDatatable(currentEntry, spectrum, infos[0]);\n\n        spectrum.datatable = infos[0];\n        if (infos[1] && infos[1].indexOf('PEAKS') > -1) {\n          canonicDataLabel = 'PEAKTABLE';\n        } else if (\n          infos[1] &&\n          (infos[1].indexOf('XYDATA') || infos[0].indexOf('++') > 0)\n        ) {\n          canonicDataLabel = 'XYDATA';\n          if (spectrum.nbPoints) {\n            spectrum.deltaX =\n              (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n          }\n        }\n      }\n    }\n\n    if (canonicDataLabel === 'XYDATA') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        // well apparently we should still consider it is a PEAK TABLE if there are no '++' after\n        if (dataValue.match(/.*\\+\\+.*/)) {\n          // ex: (X++(Y..Y))\n          if (spectrum.nbPoints) {\n            spectrum.deltaX =\n              (spectrum.lastX - spectrum.firstX) / (spectrum.nbPoints - 1);\n          }\n\n          fastParseXYData(spectrum, dataValue, result);\n        } else {\n          parsePeakTable(spectrum, dataValue, result);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = {};\n      }\n      continue;\n    } else if (canonicDataLabel === 'PEAKTABLE') {\n      if (options.wantXY) {\n        prepareSpectrum(spectrum);\n        parsePeakTable(spectrum, dataValue, result);\n        currentEntry.spectra.push(spectrum);\n        spectrum = {};\n      }\n      continue;\n    }\n    if (canonicDataLabel === 'PEAKASSIGNMENTS') {\n      if (options.wantXY) {\n        if (dataValue.match(/.*([^A-Z]*).*/)) {\n          // ex: (XYA)\n          parseXYA(spectrum, dataValue);\n        }\n        currentEntry.spectra.push(spectrum);\n        spectrum = {};\n      }\n      continue;\n    }\n\n    if (canonicDataLabel === 'TITLE') {\n      let parentEntry = currentEntry;\n      if (!parentEntry.children) {\n        parentEntry.children = [];\n      }\n      currentEntry = {\n        spectra: [],\n        ntuples: {},\n        info: {},\n        meta: {},\n        tmp: {}, // tmp information we need to keep for postprocessing\n      };\n      parentEntry.children.push(currentEntry);\n      parentsStack.push(parentEntry);\n      entriesFlat.push(currentEntry);\n      currentEntry.title = dataValue;\n    } else if (canonicDataLabel === 'DATATYPE') {\n      currentEntry.dataType = dataValue;\n      if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'NTUPLES') {\n      if (dataValue.match(/(^nd|\\snd\\s)/i)) {\n        currentEntry.twoD = true;\n      }\n    } else if (canonicDataLabel === 'DATACLASS') {\n      currentEntry.dataClass = dataValue;\n    } else if (canonicDataLabel === 'XUNITS') {\n      spectrum.xUnits = dataValue;\n    } else if (canonicDataLabel === 'YUNITS') {\n      spectrum.yUnits = dataValue;\n    } else if (canonicDataLabel === 'FIRSTX') {\n      spectrum.firstX = Number(dataValue);\n    } else if (canonicDataLabel === 'LASTX') {\n      spectrum.lastX = Number(dataValue);\n    } else if (canonicDataLabel === 'FIRSTY') {\n      spectrum.firstY = Number(dataValue);\n    } else if (canonicDataLabel === 'LASTY') {\n      spectrum.lastY = Number(dataValue);\n    } else if (canonicDataLabel === 'NPOINTS') {\n      spectrum.nbPoints = Number(dataValue);\n    } else if (canonicDataLabel === 'XFACTOR') {\n      spectrum.xFactor = Number(dataValue);\n    } else if (canonicDataLabel === 'YFACTOR') {\n      spectrum.yFactor = Number(dataValue);\n    } else if (canonicDataLabel === 'MAXX') {\n      spectrum.maxX = Number(dataValue);\n    } else if (canonicDataLabel === 'MINX') {\n      spectrum.minX = Number(dataValue);\n    } else if (canonicDataLabel === 'MAXY') {\n      spectrum.maxY = Number(dataValue);\n    } else if (canonicDataLabel === 'MINY') {\n      spectrum.minY = Number(dataValue);\n    } else if (canonicDataLabel === 'DELTAX') {\n      spectrum.deltaX = Number(dataValue);\n    } else if (\n      canonicDataLabel === '.OBSERVEFREQUENCY' ||\n      canonicDataLabel === '$SFO1'\n    ) {\n      if (!spectrum.observeFrequency) {\n        spectrum.observeFrequency = Number(dataValue);\n      }\n    } else if (canonicDataLabel === '.OBSERVENUCLEUS') {\n      if (!spectrum.xType) {\n        currentEntry.xType = dataValue.replace(/[^a-zA-Z0-9]/g, '');\n      }\n    } else if (canonicDataLabel === '$OFFSET') {\n      // OFFSET for Bruker spectra\n      currentEntry.shiftOffsetNum = 0;\n      if (!spectrum.shiftOffsetVal) {\n        spectrum.shiftOffsetVal = Number(dataValue);\n      }\n    } else if (canonicDataLabel === '$REFERENCEPOINT') {\n      // OFFSET for Varian spectra\n      // if we activate this part it does not work for ACD specmanager\n      //         } else if (canonicDataLabel=='.SHIFTREFERENCE') {   // OFFSET FOR Bruker Spectra\n      //                 var parts = dataValue.split(/ *, */);\n      //                 currentEntry.shiftOffsetNum = parseInt(parts[2].trim());\n      //                 spectrum.shiftOffsetVal = Number(parts[3].trim());\n    } else if (canonicDataLabel === 'VARNAME') {\n      currentEntry.ntuples.varname = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'SYMBOL') {\n      currentEntry.ntuples.symbol = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARTYPE') {\n      currentEntry.ntuples.vartype = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARFORM') {\n      currentEntry.ntuples.varform = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'VARDIM') {\n      currentEntry.ntuples.vardim = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'UNITS') {\n      currentEntry.ntuples.units = dataValue.split(ntuplesSeparatorRegExp);\n    } else if (canonicDataLabel === 'FACTOR') {\n      currentEntry.ntuples.factor = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'FIRST') {\n      currentEntry.ntuples.first = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'LAST') {\n      currentEntry.ntuples.last = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MIN') {\n      currentEntry.ntuples.min = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === 'MAX') {\n      currentEntry.ntuples.max = convertToFloatArray(\n        dataValue.split(ntuplesSeparatorRegExp),\n      );\n    } else if (canonicDataLabel === '.NUCLEUS') {\n      if (currentEntry.ntuples) {\n        currentEntry.ntuples.nucleus = dataValue.split(ntuplesSeparatorRegExp);\n      }\n    } else if (canonicDataLabel === 'PAGE') {\n      spectrum.page = dataValue.trim();\n      spectrum.pageValue = Number(dataValue.replace(/^.*=/, ''));\n      spectrum.pageSymbol = spectrum.page.replace(/[=].*/, '');\n    } else if (canonicDataLabel === 'RETENTIONTIME') {\n      spectrum.pageValue = Number(dataValue);\n    } else if (isMSField(canonicDataLabel)) {\n      spectrum[convertMSFieldToLabel(canonicDataLabel)] = dataValue;\n    } else if (canonicDataLabel === 'SAMPLEDESCRIPTION') {\n      spectrum.sampleDescription = dataValue;\n    } else if (canonicDataLabel.startsWith('$NUC')) {\n      if (!currentEntry.tmp[canonicDataLabel] && !dataValue.includes('off')) {\n        currentEntry.tmp[canonicDataLabel] = dataValue.replace(/[<>]/g, '');\n      }\n    } else if (canonicDataLabel === 'END') {\n      currentEntry = parentsStack.pop();\n    }\n\n    if (\n      currentEntry &&\n      currentEntry.info &&\n      currentEntry.meta &&\n      canonicDataLabel.match(options.keepRecordsRegExp)\n    ) {\n      let value = dataValue.trim();\n      let target, label;\n      if (dataLabel.startsWith('$')) {\n        label = options.canonicMetadataLabels\n          ? canonicDataLabel.substring(1)\n          : dataLabel.substring(1);\n        target = currentEntry.meta;\n      } else {\n        label = options.canonicDataLabels ? canonicDataLabel : dataLabel;\n        target = currentEntry.info;\n      }\n\n      if (options.dynamicTyping) {\n        value = parseString(value);\n      }\n      if (target[label]) {\n        if (!Array.isArray(target[label])) {\n          target[label] = [target[label]];\n        }\n        target[label].push(value);\n      } else {\n        target[label] = value;\n      }\n    }\n  }\n\n  profiling(result, 'Finished parsing', options);\n\n  postProcessing(entriesFlat, result, options);\n\n  profiling(result, 'Total time', options);\n\n  /*\n  if (result.children && result.children.length>0) {\n    result = { ...result, ...result.children[0] };\n  }\n  */\n  result.entries = tmpResult.children;\n  result.flatten = entriesFlat;\n\n  return result;\n}\n"],"names":["isUtf8","buf","i","len","length","ensureString","blob","options","ArrayBuffer","isView","encoding","guessEncoding","decoder","TextDecoder","decode","TypeError","uint8","Uint8Array","buffer","byteOffset","byteLength","isutf8","createTree","jcamp","flatten","lines","split","flat","stack","result","current","ntupleLevel","spaces","includes","line","labelLine","replace","substring","title","trim","j","startsWith","push","join","children","finished","pop","undefined","match","canonicDataLabel","toUpperCase","dataType","dataClass","forEach","entry","parseString","value","lowercase","toLowerCase","number","Number","isNaN","GC_MS_FIELDS","complexChromatogram","spectra","chromatogram","times","Array","series","ms","dimension","data","existingGCMSFields","label","convertMSFieldToLabel","spectrum","pageValue","x","y","isMSField","indexOf","convertToFloatArray","stringArray","floatArray","fastParseXYData","yFactor","deltaX","isXYdata","currentData","currentX","firstX","currentY","firstY","endLine","ascii","charCodeAt","newLine","isDifference","isLastDifference","lastDifference","isDuplicate","inComment","currentValue","lastValue","isNegative","inValue","skipFirstValue","decimalPosition","Math","pow","duplicate","ascii2","removeCommentRegExp","peakTableSplitRegExp","parsePeakTable","isPeaktable","variables","Object","keys","parseXY","parseXYZ","key","values","xFactor","logs","numberOfVariables","variable","parseXYA","isXYAdata","map","fields","parseFloat","toString","prototype","isAnyArray","call","endsWith","a","d","e","f","g","h","c","b","_ref","module","exports","window","median","input","quickSelectMedian","slice","convertTo3DZ","minZ","maxZ","ySize","xSize","z","lastX","lastY","reverse","medians","row","Float64Array","from","getMedian","minX","min","maxX","max","minY","maxY","noise","generateContourLines","zData","povarHeight0","povarHeight1","povarHeight2","povarHeight3","isOver0","isOver1","isOver2","isOver3","nbSubSpectra","nbPovars","pAx","pAy","pBx","pBy","x0","xN","dx","y0","yN","dy","iter","nbContourLevels","contourLevels","lineZValue","level","contourLevel","side","factor","noiseMultiplier","exp","zValue","iSubSpectra","subSpectra","subSpectraAfter","povar","segments","add2D","noContour","contourLines","minMax","gyromagneticRatio","postProcessingNMR","entriesFlat","observeFrequency","shiftOffsetVal","ntuples","symbol","xUnits","shift","nucleus","tmp","$NUC2","f2index","$NUC1","yType","unit","pageSymbolIndex","pageSymbol","units","Error","ratio0","ratio1","ratio","profiling","action","time","Date","now","start","simpleChromatogram","intensity","postProcessing","newNtuples","twoD","wantXY","keepSpectra","prepareNtuplesDatatable","currentEntry","kind","xIndex","yIndex","firstVariable","secondVariable","charAt","lowerCaseSymbol","index","first","last","vardim","nbPoints","varname","yUnits","prepareSpectrum","ntuplesSeparatorRegExp","defaultOptions","keepRecordsRegExp","canonicDataLabels","canonicMetadataLabels","dynamicTyping","withoutXY","convert","entries","tmpResult","parentsStack","ldrs","ldr","position","dataLabel","dataValue","infos","datatable","parentEntry","info","meta","xType","shiftOffsetNum","vartype","varform","page","sampleDescription","target","isArray"],"mappings":"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"}