ir-spectrum 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,14 +17,25 @@ import IRSpectrum from 'ir-spectrum';
17
17
  let analysis = IRSpectrum.fromJcamp(jcamp);
18
18
  ```
19
19
 
20
- When loading an IRSpectrum from Jcamp we will systamatically add 2 new variables:
20
+ When loading an IR spectrum from JCAMP or SPC, two additional variables are systematically added:
21
21
 
22
- - a: containing the absorbance
23
- - t: containing the percent transmittance
22
+ | Key | Label | Units | Description | Always present |
23
+ | --- | ------------------ | ----- | -------------------------------- | -------------- |
24
+ | x | Wavenumber | cm⁻¹ | Infrared wavenumber | Yes |
25
+ | y | (from source file) | | Original y-axis data | Yes |
26
+ | a | Absorbance | | Absorbance values | Yes |
27
+ | t | Transmittance | % | Percent transmittance values | Yes |
24
28
 
25
- In order to calculate those 2 variables we will check the Y label. If it contains
26
- transmittance we calculate absorbance, if it contains absorbance we calculate transmittance.
27
- For transmittance we also check for the presence of a '%' sign.:w
29
+ The conversion is automatic: if the original y label contains "transmittance", absorbance is calculated; if it contains "absorbance", transmittance is calculated. For transmittance, the presence of '%' or 'percent' in the label is used to determine the scaling factor.
30
+
31
+ ### Selector for visualization
32
+
33
+ ```html
34
+ <select name="selector.variables">
35
+ <option value="a vs x">Absorbance versus wavenumber</option>
36
+ <option value="t vs x">Transmittance versus wavenumber</option>
37
+ </select>
38
+ ```
28
39
 
29
40
  ## [API Documentation](https://cheminfo.github.io/ir-spectrum/)
30
41
 
@@ -0,0 +1,18 @@
1
+ import type { TextData } from 'cheminfo-types';
2
+ import type { FromTextOptions as CommonFromTextOptions } from 'common-spectrum';
3
+ import { Analysis } from 'common-spectrum';
4
+ interface FromTextOptions extends CommonFromTextOptions {
5
+ /** Unique identifier for the analysis. */
6
+ id?: string;
7
+ /** Human-readable label for the analysis. */
8
+ label?: string;
9
+ }
10
+ /**
11
+ * Creates a new Analysis from text data (CSV, TSV, etc.).
12
+ * @param data - Text data containing x,y values.
13
+ * @param options - Options for parsing and analysis creation.
14
+ * @returns New Analysis element with the given data.
15
+ */
16
+ export declare function fromText(data: TextData, options?: FromTextOptions): Analysis;
17
+ export {};
18
+ //# sourceMappingURL=fromText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromText.d.ts","sourceRoot":"","sources":["../../src/from/fromText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,UAAU,eAAgB,SAAQ,qBAAqB;IACrD,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE,eAAoB,GAC5B,QAAQ,CA4BV"}
@@ -0,0 +1,28 @@
1
+ import { Analysis } from 'common-spectrum';
2
+ import { parseXYAndKeepInfo } from 'xy-parser';
3
+ /**
4
+ * Creates a new Analysis from text data (CSV, TSV, etc.).
5
+ * @param data - Text data containing x,y values.
6
+ * @param options - Options for parsing and analysis creation.
7
+ * @returns New Analysis element with the given data.
8
+ */
9
+ export function fromText(data, options = {}) {
10
+ const { info = {}, parser = {}, dataType = 'IR spectrum', title = '', ...rest } = options;
11
+ const analysis = new Analysis(rest);
12
+ const parsed = parseXYAndKeepInfo(data, parser);
13
+ const variables = {
14
+ x: {
15
+ data: parsed.data.x,
16
+ units: info.xUnits || '',
17
+ label: info.xLabel || '',
18
+ },
19
+ y: {
20
+ data: parsed.data.y,
21
+ units: info.yUnits || '',
22
+ label: info.yLabel || '',
23
+ },
24
+ };
25
+ analysis.pushSpectrum(variables, { dataType, title });
26
+ return analysis;
27
+ }
28
+ //# sourceMappingURL=fromText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fromText.js","sourceRoot":"","sources":["../../src/from/fromText.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAS/C;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAc,EACd,UAA2B,EAAE;IAE7B,MAAM,EACJ,IAAI,GAAG,EAAE,EACT,MAAM,GAAG,EAAE,EACX,QAAQ,GAAG,aAAa,EACxB,KAAK,GAAG,EAAE,EACV,GAAG,IAAI,EACR,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEpC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG;QAChB,CAAC,EAAE;YACD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SACzB;QACD,CAAC,EAAE;YACD,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;YACxB,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SACzB;KACF,CAAC;IAEF,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spectrumCallback.js","sourceRoot":"","sources":["../../../src/from/utils/spectrumCallback.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiC;IAEjC,4CAA4C;IAC5C,0BAA0B;IAC1B,6BAA6B;IAC7B,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9B,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,CAAC,GAAG;YACZ,GAAG,SAAS;YACZ,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,EAAc;SACzC,CAAC;QACF,SAAS,CAAC,CAAC,GAAG;YACZ,IAAI,EAAG,SAAS,CAAC,IAAiB,CAAC,GAAG,CACpC,CAAC,UAAkB,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAChD;YACD,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GACV,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,CAAC;QAER,SAAS,CAAC,CAAC,GAAG;YACZ,IAAI,EAAG,SAAS,CAAC,IAAiB,CAAC,GAAG,CACpC,CAAC,aAAqB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,CAC/D;YACD,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,EAAE;SACV,CAAC;QACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC5C,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAc,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,CAAC,GAAG;gBACZ,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE,GAAG;gBACX,IAAI,EAAG,SAAS,CAAC,IAAiB,CAAC,GAAG,CACpC,CAAC,aAAqB,EAAE,EAAE,CAAC,aAAa,GAAG,GAAG,CAC/C;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"spectrumCallback.js","sourceRoot":"","sources":["../../../src/from/utils/spectrumCallback.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiC;IAEjC,4CAA4C;IAC5C,0BAA0B;IAC1B,6BAA6B;IAC7B,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9B,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,CAAC,GAAG;YACZ,GAAG,SAAS;YACZ,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,EAAc;SACzC,CAAC;QACF,SAAS,CAAC,CAAC,GAAG;YACZ,IAAI,EAAG,SAAS,CAAC,IAAiB,CAAC,GAAG,CACpC,CAAC,UAAkB,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,CAChD;YACD,KAAK,EAAE,mBAAmB;YAC1B,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GACV,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAC7B,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,CAAC;QAER,SAAS,CAAC,CAAC,GAAG;YACZ,IAAI,EAAG,SAAS,CAAC,IAAiB,CAAC,GAAG,CACpC,CAAC,aAAqB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,CAC/D;YACD,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,EAAE;SACV,CAAC;QACF,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC5C,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,CAAC,GAAG;gBACZ,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,mBAAmB;gBAC1B,MAAM,EAAE,GAAG;gBACX,IAAI,EAAG,SAAS,CAAC,IAAiB,CAAC,GAAG,CACpC,CAAC,aAAqB,EAAE,EAAE,CAAC,aAAa,GAAG,GAAG,CAC/C;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/lib/index.d.ts CHANGED
@@ -22,6 +22,7 @@ export declare function peakPicking(spectrum: MeasurementXY, target: number, opt
22
22
  export declare function autoPeakPicking(spectrum: MeasurementXY, options?: AutoPeakPickingOptions): ConvertedPeak[];
23
23
  export { fromJcamp } from './from/fromJcamp.ts';
24
24
  export { fromSPC } from './from/fromSPC.ts';
25
+ export { fromText } from './from/fromText.ts';
25
26
  export declare const JSGraph: typeof OriginalJSGraph & {
26
27
  getAnnotations: typeof getAnnotations;
27
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,IAAI,eAAe,EAG3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,GAAG,SAAS,CAO3B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,aAAa,EAAE,CASjB;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,eAAO,MAAM,OAAO,EAAE,OAAO,eAAe,GAAG;IAC7C,cAAc,EAAE,OAAO,cAAc,CAAC;CACE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,OAAO,IAAI,eAAe,EAG3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,kBAAkB,GAC3B,aAAa,GAAG,SAAS,CAO3B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,aAAa,EAAE,CASjB;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,OAAO,EAAE,OAAO,eAAe,GAAG;IAC7C,cAAc,EAAE,OAAO,cAAc,CAAC;CACE,CAAC"}
package/lib/index.js CHANGED
@@ -29,5 +29,6 @@ export function autoPeakPicking(spectrum, options) {
29
29
  }
30
30
  export { fromJcamp } from "./from/fromJcamp.js";
31
31
  export { fromSPC } from "./from/fromSPC.js";
32
+ export { fromText } from "./from/fromText.js";
32
33
  export const JSGraph = { ...OriginalJSGraph, getAnnotations };
33
34
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,eAAe,IAAI,uBAAuB,EAC1C,WAAW,IAAI,mBAAmB,GACnC,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,QAAuB,EACvB,MAAc,EACd,OAA4B;IAE5B,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,WAAW,CAChB,IAAkE,EAClE,QAAQ,CACT,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,OAAgC;IAEhC,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,WAAW,CACT,IAAkE,EAClE,QAAQ,CACT,CACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,CAAC,MAAM,OAAO,GAEhB,EAAE,GAAG,eAAe,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,IAAI,eAAe,EAC1B,eAAe,IAAI,uBAAuB,EAC1C,WAAW,IAAI,mBAAmB,GACnC,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,QAAuB,EACvB,MAAc,EACd,OAA4B;IAE5B,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,WAAW,CAChB,IAAkE,EAClE,QAAQ,CACT,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAuB,EACvB,OAAgC;IAEhC,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,WAAW,CACT,IAAkE,EAClE,QAAQ,CACT,CACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,OAAO,GAEhB,EAAE,GAAG,eAAe,EAAE,cAAc,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ir-spectrum",
3
- "version": "4.0.0",
3
+ "version": "4.2.0",
4
4
  "description": "Package used to handle IR spectra in SciPeaks.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -13,9 +13,9 @@
13
13
  "scripts": {
14
14
  "build": "npm run tsc && cheminfo-build --entry lib/index.js --root IRSpectrum",
15
15
  "check-types": "tsc --noEmit",
16
- "clean": "rimraf lib",
16
+ "clean": "rimraf coverage lib",
17
17
  "eslint": "eslint src",
18
- "eslint-fix": "npm run eslint -- --fix",
18
+ "eslint-fix": "eslint src --fix",
19
19
  "prepack": "npm run tsc",
20
20
  "prettier": "prettier --check src",
21
21
  "prettier-write": "prettier --write src",
@@ -36,22 +36,23 @@
36
36
  },
37
37
  "homepage": "https://github.com/cheminfo/ir-spectrum#readme",
38
38
  "dependencies": {
39
- "common-spectrum": "3.1.0",
39
+ "common-spectrum": "3.2.0",
40
40
  "ml-gsd": "^13.1.1",
41
- "spc-parser": "^1.0.0"
41
+ "spc-parser": "^2.0.0",
42
+ "xy-parser": "^6.0.1"
42
43
  },
43
44
  "devDependencies": {
44
- "@types/node": "^25.3.0",
45
- "@vitest/coverage-v8": "^4.0.18",
46
- "@zakodium/tsconfig": "^1.0.2",
45
+ "@types/node": "^25.6.0",
46
+ "@vitest/coverage-v8": "^4.1.5",
47
+ "@zakodium/tsconfig": "^1.0.5",
47
48
  "cheminfo-build": "^1.3.2",
48
49
  "eslint": "^9.39.2",
49
- "eslint-config-cheminfo-typescript": "^21.1.0",
50
+ "eslint-config-cheminfo-typescript": "^22.0.0",
50
51
  "jest-matcher-deep-close-to": "^3.0.2",
51
- "prettier": "^3.8.1",
52
+ "prettier": "^3.8.3",
52
53
  "rimraf": "^6.1.3",
53
- "typescript": "^5.9.3",
54
- "vitest": "^4.0.18"
54
+ "typescript": "^6.0.3",
55
+ "vitest": "^4.1.5"
55
56
  },
56
57
  "info": {
57
58
  "logo": "https://raw.githubusercontent.com/cheminfo/font/master/src/ir/assignment.svg",
@@ -0,0 +1,50 @@
1
+ import type { TextData } from 'cheminfo-types';
2
+ import type { FromTextOptions as CommonFromTextOptions } from 'common-spectrum';
3
+ import { Analysis } from 'common-spectrum';
4
+ import { parseXYAndKeepInfo } from 'xy-parser';
5
+
6
+ interface FromTextOptions extends CommonFromTextOptions {
7
+ /** Unique identifier for the analysis. */
8
+ id?: string;
9
+ /** Human-readable label for the analysis. */
10
+ label?: string;
11
+ }
12
+
13
+ /**
14
+ * Creates a new Analysis from text data (CSV, TSV, etc.).
15
+ * @param data - Text data containing x,y values.
16
+ * @param options - Options for parsing and analysis creation.
17
+ * @returns New Analysis element with the given data.
18
+ */
19
+ export function fromText(
20
+ data: TextData,
21
+ options: FromTextOptions = {},
22
+ ): Analysis {
23
+ const {
24
+ info = {},
25
+ parser = {},
26
+ dataType = 'IR spectrum',
27
+ title = '',
28
+ ...rest
29
+ } = options;
30
+
31
+ const analysis = new Analysis(rest);
32
+
33
+ const parsed = parseXYAndKeepInfo(data, parser);
34
+ const variables = {
35
+ x: {
36
+ data: parsed.data.x,
37
+ units: info.xUnits || '',
38
+ label: info.xLabel || '',
39
+ },
40
+ y: {
41
+ data: parsed.data.y,
42
+ units: info.yUnits || '',
43
+ label: info.yLabel || '',
44
+ },
45
+ };
46
+
47
+ analysis.pushSpectrum(variables, { dataType, title });
48
+
49
+ return analysis;
50
+ }
@@ -48,7 +48,7 @@ export function spectrumCallback(
48
48
  };
49
49
  if (factor === 100) {
50
50
  variables.t = { ...yVariable, symbol: 't' };
51
- variables.t.data = variables.t.data.slice() as number[];
51
+ variables.t.data = variables.t.data.slice();
52
52
  } else {
53
53
  variables.t = {
54
54
  units: '',
package/src/index.ts CHANGED
@@ -58,6 +58,7 @@ export function autoPeakPicking(
58
58
 
59
59
  export { fromJcamp } from './from/fromJcamp.ts';
60
60
  export { fromSPC } from './from/fromSPC.ts';
61
+ export { fromText } from './from/fromText.ts';
61
62
 
62
63
  export const JSGraph: typeof OriginalJSGraph & {
63
64
  getAnnotations: typeof getAnnotations;