{"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.match(/^[F|T]/) && !nucleus) {\n            if (symbol.match(/[F|T]1/)) {\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(\n                  symbol.replace(/^([F|T]).*/, '$12'),\n                );\n                if (f2index && entry.ntuples.nucleus[f2index]) {\n                  entry.ntuples.nucleus[i] = entry.ntuples.nucleus[f2index];\n                }\n              }\n            }\n            if (symbol.match(/[F|T]2/)) {\n              entry.ntuples.nucleus[i] = entry.tmp.$NUC1;\n            }\n          }\n          if (symbol.match(/[F|T]2/)) {\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  options.logger?.trace(action);\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 {import('@types/pino').Logger} [logger] - A logger like 'pino'\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\n  options.logger?.debug('Starting jcamp conversion');\n\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","arguments","undefined","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","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","logger","trace","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","debug","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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"}