From d0c6e0484c13fa7363b8b3e166e88c82a68e5748 Mon Sep 17 00:00:00 2001 From: Luc Patiny Date: Wed, 2 Oct 2024 14:59:22 +0200 Subject: [PATCH] test: add fromJcamp test --- package.json | 2 +- src/from/__tests__/data/uv.jdx | 517 ++++++++++++++++++ src/{ => from}/__tests__/data/uv.txt | 0 src/from/__tests__/fromJcamp.test.js | 40 ++ .../__tests__/fromText.test.js} | 3 +- src/from/utils/spectrumCallback.js | 4 +- 6 files changed, 563 insertions(+), 3 deletions(-) create mode 100644 src/from/__tests__/data/uv.jdx rename src/{ => from}/__tests__/data/uv.txt (100%) create mode 100644 src/from/__tests__/fromJcamp.test.js rename src/{__tests__/index.test.js => from/__tests__/fromText.test.js} (95%) diff --git a/package.json b/package.json index 96efb0f..f8ea0b5 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "rollup": "^4.24.0" }, "dependencies": { - "common-spectrum": "2.8.0", + "common-spectrum": "2.9.0", "ml-gsd": "^12.1.8", "vitest": "^2.1.1" }, diff --git a/src/from/__tests__/data/uv.jdx b/src/from/__tests__/data/uv.jdx new file mode 100644 index 0000000..9bb9226 --- /dev/null +++ b/src/from/__tests__/data/uv.jdx @@ -0,0 +1,517 @@ +##TITLE= +##JCAMP-DX=4.24 +##DATA TYPE=UV SPECTRUM +##ORIGIN= +##OWNER= +##XUNITS=wavelength [nm] +##YUNITS=Reflectance +##FIRSTX=300 +##LASTX=800 +##FIRSTY=4.112 +##LASTY=71.046 +##$header="johannin_MJ-STO-110-1 - RawData" +"Wavelength nm.","R%" +##NPOINTS=501 +##PEAK TABLE=(XY..XY) +300 4.112 +301 4.13 +302 4.129 +303 4.132 +304 4.123 +305 4.147 +306 4.16 +307 4.16 +308 4.138 +309 4.122 +310 4.138 +311 4.135 +312 4.148 +313 4.139 +314 4.138 +315 4.145 +316 4.161 +317 4.17 +318 4.159 +319 4.17 +320 4.197 +321 4.228 +322 4.244 +323 4.294 +324 4.348 +325 4.42 +326 4.509 +327 4.613 +328 4.74 +329 4.868 +330 5 +331 5.146 +332 5.311 +333 5.499 +334 5.683 +335 5.898 +336 6.107 +337 6.316 +338 6.502 +339 6.713 +340 6.92 +341 7.144 +342 7.365 +343 7.607 +344 7.847 +345 8.095 +346 8.358 +347 8.613 +348 8.921 +349 9.236 +350 9.569 +351 9.891 +352 10.224 +353 10.582 +354 10.977 +355 11.398 +356 11.829 +357 12.305 +358 12.847 +359 13.493 +360 14.214 +361 15.024 +362 15.946 +363 16.935 +364 18.025 +365 19.185 +366 20.375 +367 21.614 +368 22.842 +369 24.086 +370 25.317 +371 26.501 +372 27.625 +373 28.669 +374 29.688 +375 30.66 +376 31.574 +377 32.425 +378 33.196 +379 33.905 +380 34.526 +381 35.14 +382 35.636 +383 36.13 +384 36.597 +385 37.061 +386 37.464 +387 37.829 +388 38.217 +389 38.582 +390 38.93 +391 39.263 +392 39.592 +393 39.866 +394 40.129 +395 40.388 +396 40.7 +397 40.986 +398 41.225 +399 41.414 +400 41.574 +401 41.79 +402 42.046 +403 42.298 +404 42.528 +405 42.687 +406 42.912 +407 43.097 +408 43.314 +409 43.453 +410 43.611 +411 43.733 +412 43.874 +413 43.99 +414 44.113 +415 44.224 +416 44.329 +417 44.424 +418 44.539 +419 44.661 +420 44.705 +421 44.721 +422 44.761 +423 44.856 +424 44.902 +425 44.917 +426 44.939 +427 44.997 +428 45.072 +429 45.146 +430 45.239 +431 45.26 +432 45.274 +433 45.283 +434 45.33 +435 45.375 +436 45.38 +437 45.394 +438 45.408 +439 45.43 +440 45.454 +441 45.455 +442 45.479 +443 45.451 +444 45.479 +445 45.487 +446 45.549 +447 45.563 +448 45.567 +449 45.556 +450 45.583 +451 45.609 +452 45.626 +453 45.653 +454 45.64 +455 45.654 +456 45.649 +457 45.69 +458 45.711 +459 45.73 +460 45.735 +461 45.746 +462 45.76 +463 45.785 +464 45.809 +465 45.801 +466 45.808 +467 45.798 +468 45.797 +469 45.761 +470 45.755 +471 45.742 +472 45.749 +473 45.726 +474 45.727 +475 45.761 +476 45.822 +477 45.881 +478 45.924 +479 45.97 +480 46 +481 46.051 +482 46.086 +483 46.134 +484 46.143 +485 46.189 +486 46.196 +487 46.214 +488 46.178 +489 46.18 +490 46.201 +491 46.237 +492 46.254 +493 46.258 +494 46.264 +495 46.279 +496 46.311 +497 46.351 +498 46.386 +499 46.428 +500 46.46 +501 46.529 +502 46.565 +503 46.605 +504 46.63 +505 46.671 +506 46.716 +507 46.755 +508 46.791 +509 46.821 +510 46.84 +511 46.88 +512 46.936 +513 46.994 +514 47.04 +515 47.107 +516 47.181 +517 47.241 +518 47.261 +519 47.308 +520 47.368 +521 47.443 +522 47.529 +523 47.594 +524 47.692 +525 47.744 +526 47.851 +527 47.9 +528 47.983 +529 48.013 +530 48.202 +531 48.402 +532 48.593 +533 48.686 +534 48.728 +535 48.81 +536 48.853 +537 48.912 +538 49.011 +539 49.109 +540 49.215 +541 49.278 +542 49.379 +543 49.476 +544 49.61 +545 49.73 +546 49.86 +547 49.931 +548 50.008 +549 50.09 +550 50.22 +551 50.347 +552 50.458 +553 50.568 +554 50.69 +555 50.806 +556 50.933 +557 51.039 +558 51.172 +559 51.326 +560 51.477 +561 51.636 +562 51.75 +563 51.879 +564 52.022 +565 52.163 +566 52.326 +567 52.444 +568 52.595 +569 52.715 +570 52.878 +571 53.02 +572 53.204 +573 53.372 +574 53.515 +575 53.603 +576 53.731 +577 53.839 +578 53.981 +579 54.072 +580 54.183 +581 54.289 +582 54.402 +583 54.537 +584 54.668 +585 54.83 +586 54.974 +587 55.132 +588 55.263 +589 55.426 +590 55.616 +591 55.799 +592 55.98 +593 56.11 +594 56.268 +595 56.401 +596 56.567 +597 56.734 +598 56.935 +599 57.103 +600 57.249 +601 57.377 +602 57.483 +603 57.642 +604 57.831 +605 58.028 +606 58.176 +607 58.326 +608 58.462 +609 58.615 +610 58.705 +611 58.832 +612 58.986 +613 59.164 +614 59.328 +615 59.472 +616 59.603 +617 59.712 +618 59.857 +619 60.027 +620 60.181 +621 60.305 +622 60.391 +623 60.548 +624 60.684 +625 60.822 +626 60.979 +627 61.066 +628 61.19 +629 61.325 +630 61.485 +631 61.636 +632 61.724 +633 61.854 +634 61.965 +635 62.082 +636 62.225 +637 62.334 +638 62.464 +639 62.585 +640 62.705 +641 62.835 +642 62.907 +643 63.087 +644 63.159 +645 63.31 +646 63.383 +647 63.535 +648 63.62 +649 63.73 +650 63.883 +651 64.005 +652 64.085 +653 64.153 +654 64.283 +655 64.434 +656 64.549 +657 64.648 +658 64.748 +659 64.845 +660 64.918 +661 64.998 +662 65.04 +663 65.073 +664 65.088 +665 65.12 +666 65.212 +667 65.289 +668 65.373 +669 65.473 +670 65.64 +671 65.82 +672 65.989 +673 66.082 +674 66.172 +675 66.276 +676 66.436 +677 66.589 +678 66.706 +679 66.766 +680 66.84 +681 66.919 +682 67.011 +683 67.134 +684 67.23 +685 67.276 +686 67.31 +687 67.335 +688 67.434 +689 67.472 +690 67.52 +691 67.602 +692 67.72 +693 67.795 +694 67.802 +695 67.822 +696 67.916 +697 68 +698 68.11 +699 68.187 +700 68.284 +701 68.362 +702 68.365 +703 68.406 +704 68.456 +705 68.497 +706 68.547 +707 68.586 +708 68.67 +709 68.727 +710 68.739 +711 68.79 +712 68.778 +713 68.815 +714 68.852 +715 68.923 +716 68.977 +717 68.967 +718 69.022 +719 68.997 +720 69.076 +721 69.103 +722 69.194 +723 69.262 +724 69.321 +725 69.33 +726 69.351 +727 69.348 +728 69.443 +729 69.469 +730 69.476 +731 69.481 +732 69.564 +733 69.623 +734 69.701 +735 69.717 +736 69.828 +737 69.719 +738 69.731 +739 69.711 +740 69.777 +741 69.767 +742 69.856 +743 69.993 +744 69.988 +745 69.962 +746 69.825 +747 69.895 +748 69.915 +749 69.955 +750 70.022 +751 69.993 +752 70.114 +753 70.087 +754 70.209 +755 70.226 +756 70.237 +757 70.203 +758 70.201 +759 70.238 +760 70.237 +761 70.304 +762 70.357 +763 70.37 +764 70.454 +765 70.524 +766 70.545 +767 70.598 +768 70.516 +769 70.56 +770 70.491 +771 70.667 +772 70.738 +773 70.782 +774 70.77 +775 70.844 +776 70.917 +777 71.002 +778 70.978 +779 71.046 +780 70.955 +781 70.865 +782 70.815 +783 70.846 +784 70.892 +785 70.858 +786 70.726 +787 70.712 +788 70.642 +789 70.696 +790 70.704 +791 70.698 +792 70.751 +793 70.675 +794 70.727 +795 70.715 +796 70.819 +797 70.773 +798 70.726 +799 70.688 +800 70.683 +##END \ No newline at end of file diff --git a/src/__tests__/data/uv.txt b/src/from/__tests__/data/uv.txt similarity index 100% rename from src/__tests__/data/uv.txt rename to src/from/__tests__/data/uv.txt diff --git a/src/from/__tests__/fromJcamp.test.js b/src/from/__tests__/fromJcamp.test.js new file mode 100644 index 0000000..8c7ad5d --- /dev/null +++ b/src/from/__tests__/fromJcamp.test.js @@ -0,0 +1,40 @@ +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; + +import { test, expect } from 'vitest' + +import { fromJcamp } from '../..'; +import { AnalysesManager, getNormalizedSpectrum } from 'common-spectrum'; + +test('fromJcamp', () => { + + const arrayBuffer = readFileSync(join(__dirname, 'data/uv.jdx')); + const analysis = fromJcamp(arrayBuffer, { + info: { + xUnits: 'cm-1', + yUnits: '', + xLabel: 'Wavenumber', + yLabel: 'Intensity', + dataType: 'UV spectrum', + }, + }); + + + expect(analysis.spectra).toHaveLength(1); + + let first = analysis.spectra[0]; + expect(Object.keys(first.variables)).toHaveLength(6); + + expect(first.variables.x.data).toHaveLength(501); + expect(first.variables.y.data).toHaveLength(501); + expect(first.variables.x.label).toBe('wavelength'); + expect(first.variables.x.units).toBe('nm'); + expect(first.variables.y.label).toBe('Reflectance'); + expect(first.variables.y.units).toBe(undefined); + + const spectrumTauc = analysis.getXYSpectrum({ variables: 'c vs e' }) + const normalizedTauc = getNormalizedSpectrum(spectrumTauc, { from: 2.5, to: 3.5 }).variables; + expect(normalizedTauc.x.data).toHaveLength(141); + expect(normalizedTauc.y.data).toHaveLength(141); + +}); diff --git a/src/__tests__/index.test.js b/src/from/__tests__/fromText.test.js similarity index 95% rename from src/__tests__/index.test.js rename to src/from/__tests__/fromText.test.js index 29027b6..6b15f49 100644 --- a/src/__tests__/index.test.js +++ b/src/from/__tests__/fromText.test.js @@ -3,7 +3,7 @@ import { join } from 'node:path'; import { test, expect } from 'vitest' -import { fromText } from '..'; +import { fromText } from '../..'; test('fromText', () => { const arrayBuffer = readFileSync(join(__dirname, 'data/uv.txt')); @@ -19,6 +19,7 @@ test('fromText', () => { expect(analysis.spectra).toHaveLength(1); + let first = analysis.spectra[0]; expect(first.variables.x.data).toHaveLength(551); diff --git a/src/from/utils/spectrumCallback.js b/src/from/utils/spectrumCallback.js index 449364c..6b17f94 100644 --- a/src/from/utils/spectrumCallback.js +++ b/src/from/utils/spectrumCallback.js @@ -5,6 +5,8 @@ const C = 299792458; // speed of light (m / s) export function spectrumCallback(variables) { // we add missing absorbance / transmittance // variable a = absorbance + // variable e = energy + // variable c = tauc plot // variable t = transmittance // variable r = reflectance // variable k = Kubelka-Munk Function @@ -75,7 +77,7 @@ function parseAbsorbance(variables) { } else { const factor = yVariable.label.includes('%') || - yVariable.label.toLowerCase().includes('percent') + yVariable.label.toLowerCase().includes('percent') ? 100 : 1;