nmr-processing 7.3.0 → 7.4.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/lib/constants/gyromagneticRatio.d.ts +5 -19
- package/lib/constants/gyromagneticRatio.js +2 -3
- package/lib/constants/gyromagneticRatio.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/signals/signals2DToZ.d.ts +1 -0
- package/lib/signals/signals2DToZ.js +19 -4
- package/lib/signals/signals2DToZ.js.map +1 -1
- package/lib/utilities/getFrequency.d.ts +21 -0
- package/lib/utilities/getFrequency.js +30 -0
- package/lib/utilities/getFrequency.js.map +1 -0
- package/lib-esm/constants/gyromagneticRatio.js +1 -2
- package/lib-esm/constants/gyromagneticRatio.js.map +1 -1
- package/lib-esm/index.js +1 -0
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/signals/signals2DToZ.js +19 -4
- package/lib-esm/signals/signals2DToZ.js.map +1 -1
- package/lib-esm/utilities/getFrequency.js +26 -0
- package/lib-esm/utilities/getFrequency.js.map +1 -0
- package/package.json +1 -1
- package/src/constants/gyromagneticRatio.ts +25 -1
- package/src/index.ts +1 -0
- package/src/signals/signals2DToZ.ts +29 -5
- package/src/utilities/getFrequency.ts +47 -0
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
export declare
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
'3H': number;
|
|
5
|
-
'3He': number;
|
|
6
|
-
'7Li': number;
|
|
7
|
-
'13C': number;
|
|
8
|
-
'14N': number;
|
|
9
|
-
'15N': number;
|
|
10
|
-
'17O': number;
|
|
11
|
-
'19F': number;
|
|
12
|
-
'23Na': number;
|
|
13
|
-
'27Al': number;
|
|
14
|
-
'29Si': number;
|
|
15
|
-
'31P': number;
|
|
16
|
-
'57Fe': number;
|
|
17
|
-
'63Cu': number;
|
|
18
|
-
'67Zn': number;
|
|
19
|
-
'129Xe': number;
|
|
1
|
+
export declare type Nuclei = '1H' | '2H' | '3H' | '3He' | '7Li' | '13C' | '14N' | '15N' | '17O' | '19F' | '23Na' | '27Al' | '29Si' | '31P' | '57Fe' | '63Cu' | '67Zn' | '129Xe';
|
|
2
|
+
declare type GyromagneticRatio = {
|
|
3
|
+
[key in Nuclei]: number;
|
|
20
4
|
};
|
|
5
|
+
export declare const GYROMAGNETIC_RATIO: GyromagneticRatio;
|
|
6
|
+
export {};
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
// sources:
|
|
3
3
|
// https://en.wikipedia.org/wiki/Gyromagnetic_ratio
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.
|
|
6
|
-
|
|
7
|
-
exports.gyromagneticRatio = {
|
|
5
|
+
exports.GYROMAGNETIC_RATIO = void 0;
|
|
6
|
+
exports.GYROMAGNETIC_RATIO = {
|
|
8
7
|
'1H': 267.52218744e6,
|
|
9
8
|
'2H': 41.065e6,
|
|
10
9
|
'3H': 285.3508e6,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gyromagneticRatio.js","sourceRoot":"","sources":["../../src/constants/gyromagneticRatio.ts"],"names":[],"mappings":";AAAA,WAAW;AACX,mDAAmD;;;
|
|
1
|
+
{"version":3,"file":"gyromagneticRatio.js","sourceRoot":"","sources":["../../src/constants/gyromagneticRatio.ts"],"names":[],"mappings":";AAAA,WAAW;AACX,mDAAmD;;;AA4BtC,QAAA,kBAAkB,GAAsB;IACnD,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,CAAC,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,QAAQ;IAChB,KAAK,EAAE,CAAC,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,CAAC,OAAO;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,CAAC,QAAQ;CACnB,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export * from './signals/signalsToXY';
|
|
|
19
19
|
export * from './signals/signals2DToZ';
|
|
20
20
|
export * from './utilities/resurrect';
|
|
21
21
|
export * from './utilities/rangeFromSignal';
|
|
22
|
+
export * from './utilities/getFrequency';
|
|
22
23
|
export * from './xy/xyAutoPeaksPicking';
|
|
23
24
|
export * from './xy/xyAutoRangesPicking';
|
|
24
25
|
export * from './xyz/xyzAutoZonesPicking';
|
package/lib/index.js
CHANGED
|
@@ -35,6 +35,7 @@ __exportStar(require("./signals/signalsToXY"), exports);
|
|
|
35
35
|
__exportStar(require("./signals/signals2DToZ"), exports);
|
|
36
36
|
__exportStar(require("./utilities/resurrect"), exports);
|
|
37
37
|
__exportStar(require("./utilities/rangeFromSignal"), exports);
|
|
38
|
+
__exportStar(require("./utilities/getFrequency"), exports);
|
|
38
39
|
__exportStar(require("./xy/xyAutoPeaksPicking"), exports);
|
|
39
40
|
__exportStar(require("./xy/xyAutoRangesPicking"), exports);
|
|
40
41
|
__exportStar(require("./xyz/xyzAutoZonesPicking"), exports);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,yDAAuC;AACvC,+DAA6C;AAE7C,gEAA8C;AAE9C,6DAA2C;AAC3C,6DAA2C;AAC3C,2DAAyC;AACzC,2DAAyC;AACzC,2DAAyC;AACzC,0DAAwC;AACxC,iEAA+C;AAE/C,gEAA8C;AAC9C,iEAA+C;AAC/C,8DAA4C;AAE5C,uDAAqC;AACrC,sDAAoC;AAEpC,4DAA0C;AAC1C,wDAAsC;AACtC,yDAAuC;AAEvC,wDAAsC;AACtC,8DAA4C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,yDAAuC;AACvC,+DAA6C;AAE7C,gEAA8C;AAE9C,6DAA2C;AAC3C,6DAA2C;AAC3C,2DAAyC;AACzC,2DAAyC;AACzC,2DAAyC;AACzC,0DAAwC;AACxC,iEAA+C;AAE/C,gEAA8C;AAC9C,iEAA+C;AAC/C,8DAA4C;AAE5C,uDAAqC;AACrC,sDAAoC;AAEpC,4DAA0C;AAC1C,wDAAsC;AACtC,yDAAuC;AAEvC,wDAAsC;AACtC,8DAA4C;AAC5C,2DAAyC;AAEzC,0DAAwC;AACxC,2DAAyC;AAEzC,4DAA0C;AAC1C,wDAAsC;AAEtC,0DAAwC;AACxC,+DAA6C;AAC7C,+DAA6C"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.signals2DToZ = void 0;
|
|
4
4
|
const spectrum_generator_1 = require("spectrum-generator");
|
|
5
5
|
function signals2DToZ(signals, options = {}) {
|
|
6
|
-
let { from = -1, to = 12, nbPoints = 512, width = 0.02 } = options;
|
|
6
|
+
let { from = -1, to = 12, nbPoints = 512, width = 0.02, factor = 3, } = options;
|
|
7
7
|
const peaks = signals.reduce((acc, { x, y }) => {
|
|
8
8
|
acc.x.push(x.delta);
|
|
9
9
|
acc.y.push(y.delta);
|
|
@@ -11,7 +11,7 @@ function signals2DToZ(signals, options = {}) {
|
|
|
11
11
|
return acc;
|
|
12
12
|
}, { x: [], y: [], z: [] });
|
|
13
13
|
width = ensureXYNumber(width);
|
|
14
|
-
return (0, spectrum_generator_1.generateSpectrum2D)(peaks, {
|
|
14
|
+
return (0, spectrum_generator_1.generateSpectrum2D)(mergeClosePeaks(peaks), {
|
|
15
15
|
generator: {
|
|
16
16
|
from: ensureXYNumber(from),
|
|
17
17
|
to: ensureXYNumber(to),
|
|
@@ -19,12 +19,27 @@ function signals2DToZ(signals, options = {}) {
|
|
|
19
19
|
},
|
|
20
20
|
peaks: {
|
|
21
21
|
width,
|
|
22
|
+
factor,
|
|
22
23
|
},
|
|
23
24
|
});
|
|
24
25
|
}
|
|
25
26
|
exports.signals2DToZ = signals2DToZ;
|
|
26
27
|
function ensureXYNumber(input) {
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
return typeof input !== 'object' ? { x: input, y: input } : { ...input };
|
|
29
|
+
}
|
|
30
|
+
function mergeClosePeaks(peaksIn) {
|
|
31
|
+
let peaks = JSON.parse(JSON.stringify(peaksIn));
|
|
32
|
+
for (let i = 0; i < peaks.x.length; i++) {
|
|
33
|
+
for (let j = i + 1; j < peaks.x.length; j++) {
|
|
34
|
+
if (peaks.x[i] === peaks.x[j] && peaks.y[i] === peaks.y[j]) {
|
|
35
|
+
peaks.z[i] += peaks.z[j];
|
|
36
|
+
peaks.x.splice(j, 1);
|
|
37
|
+
peaks.y.splice(j, 1);
|
|
38
|
+
peaks.z.splice(j, 1);
|
|
39
|
+
j--;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return peaks;
|
|
29
44
|
}
|
|
30
45
|
//# sourceMappingURL=signals2DToZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals2DToZ.js","sourceRoot":"","sources":["../../src/signals/signals2DToZ.ts"],"names":[],"mappings":";;;AAAA,2DAAwD;
|
|
1
|
+
{"version":3,"file":"signals2DToZ.js","sourceRoot":"","sources":["../../src/signals/signals2DToZ.ts"],"names":[],"mappings":";;;AAAA,2DAAwD;AAqCxD,SAAgB,YAAY,CAC1B,OAAsB,EACtB,UAA+B,EAAE;IAEjC,IAAI,EACF,IAAI,GAAG,CAAC,CAAC,EACT,EAAE,GAAG,EAAE,EACP,QAAQ,GAAG,GAAG,EACd,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,CAAC,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CACxB,CAAC;IAEF,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,IAAA,uCAAkB,EAAC,eAAe,CAAC,KAAK,CAAC,EAAE;QAChD,SAAS,EAAE;YACT,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;YAC1B,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC;YACtB,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;SACnC;QACD,KAAK,EAAE;YACL,KAAK;YACL,MAAM;SACP;KACF,CAAC,CAAC;AACL,CAAC;AAnCD,oCAmCC;AAED,SAAS,cAAc,CAAC,KAAwB;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,OAAqB;IAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC1D,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC;aACL;SACF;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Nuclei } from '../constants/gyromagneticRatio';
|
|
2
|
+
export interface ObjervedNucleusData {
|
|
3
|
+
/**
|
|
4
|
+
* nucleus to use as reference in the calculation of frequency
|
|
5
|
+
*/
|
|
6
|
+
nucleus: Nucleus;
|
|
7
|
+
/**
|
|
8
|
+
* frequency of the reference nucleus
|
|
9
|
+
*/
|
|
10
|
+
frequency: number;
|
|
11
|
+
}
|
|
12
|
+
declare type Nucleus = Nuclei | (string & Record<never, never>);
|
|
13
|
+
/**
|
|
14
|
+
* calculate the frequency of a nucleus with respect to a reference nucleus
|
|
15
|
+
*/
|
|
16
|
+
export declare function getFrequency(
|
|
17
|
+
/**
|
|
18
|
+
* nucleus to calculate the frequency
|
|
19
|
+
*/
|
|
20
|
+
nucleus: Nucleus, observedNucleusData: ObjervedNucleusData): number;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFrequency = void 0;
|
|
4
|
+
const gyromagneticRatio_1 = require("../constants/gyromagneticRatio");
|
|
5
|
+
/**
|
|
6
|
+
* calculate the frequency of a nucleus with respect to a reference nucleus
|
|
7
|
+
*/
|
|
8
|
+
function getFrequency(
|
|
9
|
+
/**
|
|
10
|
+
* nucleus to calculate the frequency
|
|
11
|
+
*/
|
|
12
|
+
nucleus, observedNucleusData) {
|
|
13
|
+
const { nucleus: obsNucleus, frequency } = observedNucleusData;
|
|
14
|
+
checkExistence(nucleus, obsNucleus);
|
|
15
|
+
return ((frequency * gyromagneticRatio_1.GYROMAGNETIC_RATIO[nucleus]) /
|
|
16
|
+
gyromagneticRatio_1.GYROMAGNETIC_RATIO[obsNucleus]);
|
|
17
|
+
}
|
|
18
|
+
exports.getFrequency = getFrequency;
|
|
19
|
+
function checkExistence(...nucleus) {
|
|
20
|
+
let nuclei = [];
|
|
21
|
+
for (const n of nucleus) {
|
|
22
|
+
if (!(n in gyromagneticRatio_1.GYROMAGNETIC_RATIO)) {
|
|
23
|
+
nuclei.push(n);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (nuclei.length !== 0) {
|
|
27
|
+
throw new Error(`${nuclei.join(' , ')} is not supported`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=getFrequency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFrequency.js","sourceRoot":"","sources":["../../src/utilities/getFrequency.ts"],"names":[],"mappings":";;;AAAA,sEAA4E;AAgB5E;;GAEG;AACH,SAAgB,YAAY;AAC1B;;GAEG;AACH,OAAgB,EAChB,mBAAwC;IAExC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC;IAE/D,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEpC,OAAO,CACL,CAAC,SAAS,GAAG,sCAAkB,CAAC,OAAiB,CAAC,CAAC;QACnD,sCAAkB,CAAC,UAAoB,CAAC,CACzC,CAAC;AACJ,CAAC;AAfD,oCAeC;AAED,SAAS,cAAc,CAAC,GAAG,OAAkB;IAC3C,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,CAAC,CAAC,CAAC,IAAI,sCAAkB,CAAC,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;KACF;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;KAC3D;AACH,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// sources:
|
|
2
2
|
// https://en.wikipedia.org/wiki/Gyromagnetic_ratio
|
|
3
|
-
|
|
4
|
-
export const gyromagneticRatio = {
|
|
3
|
+
export const GYROMAGNETIC_RATIO = {
|
|
5
4
|
'1H': 267.52218744e6,
|
|
6
5
|
'2H': 41.065e6,
|
|
7
6
|
'3H': 285.3508e6,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gyromagneticRatio.js","sourceRoot":"","sources":["../../src/constants/gyromagneticRatio.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,mDAAmD;
|
|
1
|
+
{"version":3,"file":"gyromagneticRatio.js","sourceRoot":"","sources":["../../src/constants/gyromagneticRatio.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,mDAAmD;AA4BnD,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,CAAC,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,QAAQ;IAChB,KAAK,EAAE,CAAC,QAAQ;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,CAAC,OAAO;IAChB,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,CAAC,QAAQ;CACnB,CAAC"}
|
package/lib-esm/index.js
CHANGED
|
@@ -19,6 +19,7 @@ export * from './signals/signalsToXY';
|
|
|
19
19
|
export * from './signals/signals2DToZ';
|
|
20
20
|
export * from './utilities/resurrect';
|
|
21
21
|
export * from './utilities/rangeFromSignal';
|
|
22
|
+
export * from './utilities/getFrequency';
|
|
22
23
|
export * from './xy/xyAutoPeaksPicking';
|
|
23
24
|
export * from './xy/xyAutoRangesPicking';
|
|
24
25
|
export * from './xyz/xyzAutoZonesPicking';
|
package/lib-esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAE/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,+BAA+B,CAAC;AAE9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAE/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AAEzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AAEtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { generateSpectrum2D } from 'spectrum-generator';
|
|
2
2
|
export function signals2DToZ(signals, options = {}) {
|
|
3
|
-
let { from = -1, to = 12, nbPoints = 512, width = 0.02 } = options;
|
|
3
|
+
let { from = -1, to = 12, nbPoints = 512, width = 0.02, factor = 3, } = options;
|
|
4
4
|
const peaks = signals.reduce((acc, { x, y }) => {
|
|
5
5
|
acc.x.push(x.delta);
|
|
6
6
|
acc.y.push(y.delta);
|
|
@@ -8,7 +8,7 @@ export function signals2DToZ(signals, options = {}) {
|
|
|
8
8
|
return acc;
|
|
9
9
|
}, { x: [], y: [], z: [] });
|
|
10
10
|
width = ensureXYNumber(width);
|
|
11
|
-
return generateSpectrum2D(peaks, {
|
|
11
|
+
return generateSpectrum2D(mergeClosePeaks(peaks), {
|
|
12
12
|
generator: {
|
|
13
13
|
from: ensureXYNumber(from),
|
|
14
14
|
to: ensureXYNumber(to),
|
|
@@ -16,11 +16,26 @@ export function signals2DToZ(signals, options = {}) {
|
|
|
16
16
|
},
|
|
17
17
|
peaks: {
|
|
18
18
|
width,
|
|
19
|
+
factor,
|
|
19
20
|
},
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
function ensureXYNumber(input) {
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
return typeof input !== 'object' ? { x: input, y: input } : { ...input };
|
|
25
|
+
}
|
|
26
|
+
function mergeClosePeaks(peaksIn) {
|
|
27
|
+
let peaks = JSON.parse(JSON.stringify(peaksIn));
|
|
28
|
+
for (let i = 0; i < peaks.x.length; i++) {
|
|
29
|
+
for (let j = i + 1; j < peaks.x.length; j++) {
|
|
30
|
+
if (peaks.x[i] === peaks.x[j] && peaks.y[i] === peaks.y[j]) {
|
|
31
|
+
peaks.z[i] += peaks.z[j];
|
|
32
|
+
peaks.x.splice(j, 1);
|
|
33
|
+
peaks.y.splice(j, 1);
|
|
34
|
+
peaks.z.splice(j, 1);
|
|
35
|
+
j--;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return peaks;
|
|
25
40
|
}
|
|
26
41
|
//# sourceMappingURL=signals2DToZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals2DToZ.js","sourceRoot":"","sources":["../../src/signals/signals2DToZ.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"signals2DToZ.js","sourceRoot":"","sources":["../../src/signals/signals2DToZ.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAqCxD,MAAM,UAAU,YAAY,CAC1B,OAAsB,EACtB,UAA+B,EAAE;IAEjC,IAAI,EACF,IAAI,GAAG,CAAC,CAAC,EACT,EAAE,GAAG,EAAE,EACP,QAAQ,GAAG,GAAG,EACd,KAAK,GAAG,IAAI,EACZ,MAAM,GAAG,CAAC,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;QAChB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CACxB,CAAC;IAEF,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAE9B,OAAO,kBAAkB,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;QAChD,SAAS,EAAE;YACT,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;YAC1B,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC;YACtB,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;SACnC;QACD,KAAK,EAAE;YACL,KAAK;YACL,MAAM;SACP;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,KAAwB;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,eAAe,CAAC,OAAqB;IAC5C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC1D,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,CAAC,EAAE,CAAC;aACL;SACF;KACF;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { GYROMAGNETIC_RATIO } from '../constants/gyromagneticRatio';
|
|
2
|
+
/**
|
|
3
|
+
* calculate the frequency of a nucleus with respect to a reference nucleus
|
|
4
|
+
*/
|
|
5
|
+
export function getFrequency(
|
|
6
|
+
/**
|
|
7
|
+
* nucleus to calculate the frequency
|
|
8
|
+
*/
|
|
9
|
+
nucleus, observedNucleusData) {
|
|
10
|
+
const { nucleus: obsNucleus, frequency } = observedNucleusData;
|
|
11
|
+
checkExistence(nucleus, obsNucleus);
|
|
12
|
+
return ((frequency * GYROMAGNETIC_RATIO[nucleus]) /
|
|
13
|
+
GYROMAGNETIC_RATIO[obsNucleus]);
|
|
14
|
+
}
|
|
15
|
+
function checkExistence(...nucleus) {
|
|
16
|
+
let nuclei = [];
|
|
17
|
+
for (const n of nucleus) {
|
|
18
|
+
if (!(n in GYROMAGNETIC_RATIO)) {
|
|
19
|
+
nuclei.push(n);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (nuclei.length !== 0) {
|
|
23
|
+
throw new Error(`${nuclei.join(' , ')} is not supported`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=getFrequency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFrequency.js","sourceRoot":"","sources":["../../src/utilities/getFrequency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAU,MAAM,gCAAgC,CAAC;AAgB5E;;GAEG;AACH,MAAM,UAAU,YAAY;AAC1B;;GAEG;AACH,OAAgB,EAChB,mBAAwC;IAExC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC;IAE/D,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAEpC,OAAO,CACL,CAAC,SAAS,GAAG,kBAAkB,CAAC,OAAiB,CAAC,CAAC;QACnD,kBAAkB,CAAC,UAAoB,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAG,OAAkB;IAC3C,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;QACvB,IAAI,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;KACF;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;KAC3D;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,31 @@
|
|
|
3
3
|
|
|
4
4
|
// TODO: #13 can we have a better source and more digits ? @jwist
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export type Nuclei =
|
|
7
|
+
| '1H'
|
|
8
|
+
| '2H'
|
|
9
|
+
| '3H'
|
|
10
|
+
| '3He'
|
|
11
|
+
| '7Li'
|
|
12
|
+
| '13C'
|
|
13
|
+
| '14N'
|
|
14
|
+
| '15N'
|
|
15
|
+
| '17O'
|
|
16
|
+
| '19F'
|
|
17
|
+
| '23Na'
|
|
18
|
+
| '27Al'
|
|
19
|
+
| '29Si'
|
|
20
|
+
| '31P'
|
|
21
|
+
| '57Fe'
|
|
22
|
+
| '63Cu'
|
|
23
|
+
| '67Zn'
|
|
24
|
+
| '129Xe';
|
|
25
|
+
|
|
26
|
+
type GyromagneticRatio = {
|
|
27
|
+
[key in Nuclei]: number;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const GYROMAGNETIC_RATIO: GyromagneticRatio = {
|
|
7
31
|
'1H': 267.52218744e6,
|
|
8
32
|
'2H': 41.065e6,
|
|
9
33
|
'3H': 285.3508e6,
|
package/src/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from './signals/signals2DToZ';
|
|
|
25
25
|
|
|
26
26
|
export * from './utilities/resurrect';
|
|
27
27
|
export * from './utilities/rangeFromSignal';
|
|
28
|
+
export * from './utilities/getFrequency';
|
|
28
29
|
|
|
29
30
|
export * from './xy/xyAutoPeaksPicking';
|
|
30
31
|
export * from './xy/xyAutoRangesPicking';
|
|
@@ -26,6 +26,7 @@ interface Signals2DToZOptions {
|
|
|
26
26
|
* @default 0.02
|
|
27
27
|
*/
|
|
28
28
|
width?: number | XYNumber;
|
|
29
|
+
factor?: number | XYNumber;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
export interface Peak2DSeries {
|
|
@@ -38,7 +39,13 @@ export function signals2DToZ(
|
|
|
38
39
|
signals: NMRSignal2D[],
|
|
39
40
|
options: Signals2DToZOptions = {},
|
|
40
41
|
) {
|
|
41
|
-
let {
|
|
42
|
+
let {
|
|
43
|
+
from = -1,
|
|
44
|
+
to = 12,
|
|
45
|
+
nbPoints = 512,
|
|
46
|
+
width = 0.02,
|
|
47
|
+
factor = 3,
|
|
48
|
+
} = options;
|
|
42
49
|
|
|
43
50
|
const peaks = signals.reduce<Peak2DSeries>(
|
|
44
51
|
(acc, { x, y }) => {
|
|
@@ -51,7 +58,8 @@ export function signals2DToZ(
|
|
|
51
58
|
);
|
|
52
59
|
|
|
53
60
|
width = ensureXYNumber(width);
|
|
54
|
-
|
|
61
|
+
|
|
62
|
+
return generateSpectrum2D(mergeClosePeaks(peaks), {
|
|
55
63
|
generator: {
|
|
56
64
|
from: ensureXYNumber(from),
|
|
57
65
|
to: ensureXYNumber(to),
|
|
@@ -59,11 +67,27 @@ export function signals2DToZ(
|
|
|
59
67
|
},
|
|
60
68
|
peaks: {
|
|
61
69
|
width,
|
|
70
|
+
factor,
|
|
62
71
|
},
|
|
63
72
|
});
|
|
64
73
|
}
|
|
65
74
|
|
|
66
|
-
function ensureXYNumber(input: number | XYNumber)
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
function ensureXYNumber(input: number | XYNumber) {
|
|
76
|
+
return typeof input !== 'object' ? { x: input, y: input } : { ...input };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function mergeClosePeaks(peaksIn: Peak2DSeries) {
|
|
80
|
+
let peaks = JSON.parse(JSON.stringify(peaksIn));
|
|
81
|
+
for (let i = 0; i < peaks.x.length; i++) {
|
|
82
|
+
for (let j = i + 1; j < peaks.x.length; j++) {
|
|
83
|
+
if (peaks.x[i] === peaks.x[j] && peaks.y[i] === peaks.y[j]) {
|
|
84
|
+
peaks.z[i] += peaks.z[j];
|
|
85
|
+
peaks.x.splice(j, 1);
|
|
86
|
+
peaks.y.splice(j, 1);
|
|
87
|
+
peaks.z.splice(j, 1);
|
|
88
|
+
j--;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return peaks;
|
|
69
93
|
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { GYROMAGNETIC_RATIO, Nuclei } from '../constants/gyromagneticRatio';
|
|
2
|
+
|
|
3
|
+
export interface ObjervedNucleusData {
|
|
4
|
+
/**
|
|
5
|
+
* nucleus to use as reference in the calculation of frequency
|
|
6
|
+
*/
|
|
7
|
+
nucleus: Nucleus;
|
|
8
|
+
/**
|
|
9
|
+
* frequency of the reference nucleus
|
|
10
|
+
*/
|
|
11
|
+
frequency: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//Literal type is extends string and when union it with string we lose the autocomplete and to solve this we distinguish string
|
|
15
|
+
type Nucleus = Nuclei | (string & Record<never, never>);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* calculate the frequency of a nucleus with respect to a reference nucleus
|
|
19
|
+
*/
|
|
20
|
+
export function getFrequency(
|
|
21
|
+
/**
|
|
22
|
+
* nucleus to calculate the frequency
|
|
23
|
+
*/
|
|
24
|
+
nucleus: Nucleus,
|
|
25
|
+
observedNucleusData: ObjervedNucleusData,
|
|
26
|
+
) {
|
|
27
|
+
const { nucleus: obsNucleus, frequency } = observedNucleusData;
|
|
28
|
+
|
|
29
|
+
checkExistence(nucleus, obsNucleus);
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
(frequency * GYROMAGNETIC_RATIO[nucleus as Nuclei]) /
|
|
33
|
+
GYROMAGNETIC_RATIO[obsNucleus as Nuclei]
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function checkExistence(...nucleus: Nucleus[]) {
|
|
38
|
+
let nuclei: string[] = [];
|
|
39
|
+
for (const n of nucleus) {
|
|
40
|
+
if (!(n in GYROMAGNETIC_RATIO)) {
|
|
41
|
+
nuclei.push(n);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (nuclei.length !== 0) {
|
|
45
|
+
throw new Error(`${nuclei.join(' , ')} is not supported`);
|
|
46
|
+
}
|
|
47
|
+
}
|