nmr-processing 8.0.0 → 8.1.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/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/peaks/NMRPeak1D.d.ts +0 -1
- package/lib/peaks/solventSuppression.d.ts +3 -0
- package/lib/peaks/solventSuppression.js +147 -0
- package/lib/peaks/solventSuppression.js.map +1 -0
- package/lib/peaks/util/jAnalyzer.d.ts +1 -1
- package/lib/ranges/rangesToXY.js +27 -3
- package/lib/ranges/rangesToXY.js.map +1 -1
- package/lib/signals/addDummySignals.d.ts +2 -0
- package/lib/signals/addDummySignals.js +56 -0
- package/lib/signals/addDummySignals.js.map +1 -0
- package/lib/signals/hackSignalsToXY.js +2 -48
- package/lib/signals/hackSignalsToXY.js.map +1 -1
- package/lib/signals/simulation/simulate1D.d.ts +1 -39
- package/lib/signals/simulation/simulate1D.js +13 -240
- package/lib/signals/simulation/simulate1D.js.map +1 -1
- package/lib/signals/simulation/simulateXYPeaks.d.ts +47 -0
- package/lib/signals/simulation/simulateXYPeaks.js +246 -0
- package/lib/signals/simulation/simulateXYPeaks.js.map +1 -0
- package/lib/utilities/getFrequency.d.ts +1 -1
- package/lib/utilities/getFrequency.js +4 -4
- package/lib/utilities/getFrequency.js.map +1 -1
- package/lib-esm/index.js +1 -1
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/peaks/solventSuppression.js +140 -0
- package/lib-esm/peaks/solventSuppression.js.map +1 -0
- package/lib-esm/ranges/rangesToXY.js +27 -3
- package/lib-esm/ranges/rangesToXY.js.map +1 -1
- package/lib-esm/signals/addDummySignals.js +52 -0
- package/lib-esm/signals/addDummySignals.js.map +1 -0
- package/lib-esm/signals/hackSignalsToXY.js +2 -48
- package/lib-esm/signals/hackSignalsToXY.js.map +1 -1
- package/lib-esm/signals/simulation/simulate1D.js +14 -238
- package/lib-esm/signals/simulation/simulate1D.js.map +1 -1
- package/lib-esm/signals/simulation/simulateXYPeaks.js +239 -0
- package/lib-esm/signals/simulation/simulateXYPeaks.js.map +1 -0
- package/lib-esm/utilities/getFrequency.js +1 -1
- package/lib-esm/utilities/getFrequency.js.map +1 -1
- package/package.json +4 -2
- package/src/index.ts +1 -1
- package/src/peaks/NMRPeak1D.ts +0 -1
- package/src/peaks/solventSuppression.ts +186 -0
- package/src/peaks/util/jAnalyzer.ts +1 -1
- package/src/ranges/rangesToXY.ts +33 -4
- package/src/signals/addDummySignals.ts +77 -0
- package/src/signals/hackSignalsToXY.ts +2 -72
- package/src/signals/simulation/simulate1D.ts +14 -319
- package/src/signals/simulation/simulateXYPeaks.ts +332 -0
- package/src/utilities/getFrequency.ts +1 -1
- package/lib/constants/gyromagneticRatio.d.ts +0 -6
- package/lib/constants/gyromagneticRatio.js +0 -26
- package/lib/constants/gyromagneticRatio.js.map +0 -1
- package/lib-esm/constants/gyromagneticRatio.js +0 -23
- package/lib-esm/constants/gyromagneticRatio.js.map +0 -1
- package/src/constants/gyromagneticRatio.ts +0 -49
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("
|
|
17
|
+
__exportStar(require("gyromagnetic-ratio"), exports);
|
|
18
18
|
__exportStar(require("./constants/impurities"), exports);
|
|
19
19
|
__exportStar(require("./constants/couplingPatterns"), exports);
|
|
20
20
|
__exportStar(require("./peaks/peaksFilterImpurities"), exports);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,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"}
|
package/lib/peaks/NMRPeak1D.d.ts
CHANGED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.solventSuppression = void 0;
|
|
7
|
+
const linear_sum_assignment_1 = __importDefault(require("linear-sum-assignment"));
|
|
8
|
+
const ml_matrix_1 = require("ml-matrix");
|
|
9
|
+
const ml_peak_shape_generator_1 = require("ml-peak-shape-generator");
|
|
10
|
+
const ml_spectra_processing_1 = require("ml-spectra-processing");
|
|
11
|
+
const addDummySignals_1 = require("../signals/addDummySignals");
|
|
12
|
+
const signalsToSpinSystem_1 = require("../signals/simulation/signalsToSpinSystem");
|
|
13
|
+
const simulateXYPeaks_1 = require("../signals/simulation/simulateXYPeaks");
|
|
14
|
+
const splitSpinSystem_1 = require("../signals/simulation/splitSpinSystem");
|
|
15
|
+
function solventSuppression(peakList, solvent, options = {}) {
|
|
16
|
+
const peaks = [...peakList];
|
|
17
|
+
sortAscending(peaks);
|
|
18
|
+
const xValues = peaks.map((peak) => peak.x);
|
|
19
|
+
const { markSolventPeaks = false } = options;
|
|
20
|
+
let solventSignals = solvent; //addDummySignals(solvent);
|
|
21
|
+
// solventSignals = solventSignals.slice(0, solventSignals.findIndex((signal) => signal.delta > 400));
|
|
22
|
+
for (const solventSignal of solventSignals) {
|
|
23
|
+
const solventXYPeaks = solventSignal.peaks
|
|
24
|
+
? solventSignal.peaks
|
|
25
|
+
: getSolventPeaks(solventSignal);
|
|
26
|
+
sortAscending(solventXYPeaks);
|
|
27
|
+
let upIndex = (0, ml_spectra_processing_1.xFindClosestIndex)(xValues, solventXYPeaks[solventXYPeaks.length - 1].x + 1);
|
|
28
|
+
let lowIndex = (0, ml_spectra_processing_1.xFindClosestIndex)(xValues, solventXYPeaks[0].x - 1);
|
|
29
|
+
if (upIndex === lowIndex)
|
|
30
|
+
continue;
|
|
31
|
+
const nearPeaks = peaks.slice(lowIndex, upIndex + 1);
|
|
32
|
+
const amplitudeResiduals = [];
|
|
33
|
+
const deltaResiduals = [];
|
|
34
|
+
const positionResiduals = [];
|
|
35
|
+
for (let peak of nearPeaks) {
|
|
36
|
+
const shiftedSolventPeaks = getShiftedSolventPeaks(peak, solventSignal, solventXYPeaks);
|
|
37
|
+
const closestPeaks = getClosestPeaks(shiftedSolventPeaks, nearPeaks);
|
|
38
|
+
let deltaResidual = 0;
|
|
39
|
+
let amplitudeResidual = 0;
|
|
40
|
+
let positionResidual = 0;
|
|
41
|
+
for (let i = 0; i < closestPeaks.length; i++) {
|
|
42
|
+
amplitudeResidual += Math.abs(shiftedSolventPeaks[i].y - closestPeaks[i].y);
|
|
43
|
+
deltaResidual += Math.abs(shiftedSolventPeaks[i].x - closestPeaks[i].x);
|
|
44
|
+
}
|
|
45
|
+
if (closestPeaks.length === 0) {
|
|
46
|
+
deltaResidual = Number.MAX_SAFE_INTEGER;
|
|
47
|
+
amplitudeResidual = Number.MAX_SAFE_INTEGER;
|
|
48
|
+
positionResidual = Number.MAX_SAFE_INTEGER;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
positionResidual = (0, ml_peak_shape_generator_1.gaussianFct)(solventSignal.delta - peak.x, 0.5);
|
|
52
|
+
}
|
|
53
|
+
amplitudeResiduals.push(amplitudeResidual);
|
|
54
|
+
deltaResiduals.push(deltaResidual);
|
|
55
|
+
positionResiduals.push(positionResidual);
|
|
56
|
+
}
|
|
57
|
+
const maxAmplitude = (0, ml_spectra_processing_1.xMaxValue)(amplitudeResiduals);
|
|
58
|
+
const maxDelta = (0, ml_spectra_processing_1.xMaxValue)(deltaResiduals);
|
|
59
|
+
const maxPosition = (0, ml_spectra_processing_1.xMaxValue)(positionResiduals);
|
|
60
|
+
let minIndex = -1;
|
|
61
|
+
let minScore = Number.MAX_SAFE_INTEGER;
|
|
62
|
+
for (let i = 0; i < deltaResiduals.length; i++) {
|
|
63
|
+
const value = (amplitudeResiduals[i] / maxAmplitude +
|
|
64
|
+
deltaResiduals[i] / maxDelta +
|
|
65
|
+
(1 - positionResiduals[i]) / maxPosition) /
|
|
66
|
+
3;
|
|
67
|
+
if (minScore > value) {
|
|
68
|
+
minIndex = i;
|
|
69
|
+
minScore = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const shiftedSolventPeaks = getShiftedSolventPeaks(nearPeaks[minIndex], solventSignal, solventXYPeaks);
|
|
73
|
+
const diff = getDiffMatrix(shiftedSolventPeaks, nearPeaks);
|
|
74
|
+
const { rowAssignments, gain } = (0, linear_sum_assignment_1.default)(diff, {
|
|
75
|
+
maximaze: false,
|
|
76
|
+
});
|
|
77
|
+
if (gain === -1)
|
|
78
|
+
return peaks;
|
|
79
|
+
if (markSolventPeaks) {
|
|
80
|
+
for (let index of rowAssignments) {
|
|
81
|
+
peaks[index + lowIndex].kind = 'solvent';
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
rowAssignments.sort((a, b) => b - a);
|
|
86
|
+
for (let index of rowAssignments) {
|
|
87
|
+
peaks.splice(index + lowIndex, 1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return peaks;
|
|
92
|
+
}
|
|
93
|
+
exports.solventSuppression = solventSuppression;
|
|
94
|
+
function getSolventPeaks(signal, options = {}) {
|
|
95
|
+
let signals = (0, addDummySignals_1.addDummySignals)([signal]);
|
|
96
|
+
let spinSystem = (0, signalsToSpinSystem_1.signalsToSpinSystem)(signals);
|
|
97
|
+
const { frequency = 400, maxClusterSize = 8 } = options;
|
|
98
|
+
spinSystem.clusters = (0, splitSpinSystem_1.splitSpinSystem)(spinSystem, {
|
|
99
|
+
frequency,
|
|
100
|
+
maxClusterSize,
|
|
101
|
+
});
|
|
102
|
+
const peaks = (0, simulateXYPeaks_1.simulateXYPeaks)(spinSystem);
|
|
103
|
+
return peaks.filter((peak) => peak.x < 1000);
|
|
104
|
+
}
|
|
105
|
+
function getShiftedSolventPeaks(peak, solventSignal, solventXYPeaks) {
|
|
106
|
+
const shiftedSolventPeaks = JSON.parse(JSON.stringify(solventXYPeaks));
|
|
107
|
+
// shift x values of solventPeaks to center it to the current peak.
|
|
108
|
+
const deltaPPM = peak.x - solventSignal.delta;
|
|
109
|
+
const maxIntensity = shiftedSolventPeaks.reduce((max, current) => (current.y > max ? current.y : max), shiftedSolventPeaks[0].y);
|
|
110
|
+
for (let shiftedSolventPeak of shiftedSolventPeaks) {
|
|
111
|
+
shiftedSolventPeak.x += deltaPPM;
|
|
112
|
+
shiftedSolventPeak.y /= maxIntensity;
|
|
113
|
+
}
|
|
114
|
+
return shiftedSolventPeaks;
|
|
115
|
+
}
|
|
116
|
+
function getClosestPeaks(shiftedSolventPeaks, nearPeaks) {
|
|
117
|
+
const diff = getDiffMatrix(shiftedSolventPeaks, nearPeaks);
|
|
118
|
+
const { rowAssignments, gain } = (0, linear_sum_assignment_1.default)(diff, {
|
|
119
|
+
maximaze: false,
|
|
120
|
+
});
|
|
121
|
+
if (gain === -1)
|
|
122
|
+
return [];
|
|
123
|
+
const assignmentPeaks = [];
|
|
124
|
+
let maxValue = Number.MIN_SAFE_INTEGER;
|
|
125
|
+
for (let index of rowAssignments) {
|
|
126
|
+
if (maxValue < nearPeaks[index].y)
|
|
127
|
+
maxValue = nearPeaks[index].y;
|
|
128
|
+
assignmentPeaks.push({ ...nearPeaks[index] });
|
|
129
|
+
}
|
|
130
|
+
assignmentPeaks.forEach((peak, i, arr) => (arr[i].y /= maxValue));
|
|
131
|
+
return assignmentPeaks;
|
|
132
|
+
}
|
|
133
|
+
function sortAscending(peaks) {
|
|
134
|
+
return peaks[0].x > peaks[1].x ? peaks.sort((a, b) => a.x - b.x) : peaks;
|
|
135
|
+
}
|
|
136
|
+
function getDiffMatrix(rows, columns) {
|
|
137
|
+
const nbColumns = columns.length;
|
|
138
|
+
const nbRows = rows.length;
|
|
139
|
+
const diff = new ml_matrix_1.Matrix(nbRows, nbColumns);
|
|
140
|
+
for (let r = 0; r < nbRows; r++) {
|
|
141
|
+
for (let c = 0; c < nbColumns; c++) {
|
|
142
|
+
diff.set(r, c, Math.abs(rows[r].x - columns[c].x));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return diff;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=solventSuppression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solventSuppression.js","sourceRoot":"","sources":["../../src/peaks/solventSuppression.ts"],"names":[],"mappings":";;;;;;AACA,kFAAwD;AACxD,yCAAmC;AACnC,qEAAsD;AACtD,iEAAqE;AAGrE,gEAA6D;AAC7D,mFAAgF;AAChF,2EAAwE;AACxE,2EAAwE;AAIxE,SAAgB,kBAAkB,CAChC,QAAqB,EACrB,OAAsB,EACtB,UAAe,EAAE;IAEjB,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC5B,aAAa,CAAC,KAAK,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,EAAE,gBAAgB,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE7C,IAAI,cAAc,GAAG,OAAO,CAAC,CAAC,2BAA2B;IACzD,sGAAsG;IAEtG,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;QAC1C,MAAM,cAAc,GAAG,aAAa,CAAC,KAAK;YACxC,CAAC,CAAC,aAAa,CAAC,KAAK;YACrB,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QACnC,aAAa,CAAC,cAAc,CAAC,CAAC;QAC9B,IAAI,OAAO,GAAG,IAAA,yCAAiB,EAC7B,OAAO,EACP,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAChD,CAAC;QACF,IAAI,QAAQ,GAAG,IAAA,yCAAiB,EAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,IAAI,OAAO,KAAK,QAAQ;YAAE,SAAS;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,kBAAkB,GAAG,EAAE,CAAC;QAC9B,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,KAAK,IAAI,IAAI,IAAI,SAAS,EAAE;YAC1B,MAAM,mBAAmB,GAAG,sBAAsB,CAChD,IAAI,EACJ,aAAa,EACb,cAAc,CACf,CAAC;YACF,MAAM,YAAY,GAAG,eAAe,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;YACrE,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAC3B,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7C,CAAC;gBACF,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzE;YAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC7B,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;gBACxC,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;gBAC5C,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;aAC5C;iBAAM;gBACL,gBAAgB,GAAG,IAAA,qCAAW,EAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACnE;YACD,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC3C,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SAC1C;QAED,MAAM,YAAY,GAAG,IAAA,iCAAS,EAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAA,iCAAS,EAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAA,iCAAS,EAAC,iBAAiB,CAAC,CAAC;QAEjD,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,KAAK,GACT,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,YAAY;gBACnC,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ;gBAC5B,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;gBAC3C,CAAC,CAAC;YACJ,IAAI,QAAQ,GAAG,KAAK,EAAE;gBACpB,QAAQ,GAAG,CAAC,CAAC;gBACb,QAAQ,GAAG,KAAK,CAAC;aAClB;SACF;QACD,MAAM,mBAAmB,GAAG,sBAAsB,CAChD,SAAS,CAAC,QAAQ,CAAC,EACnB,aAAa,EACb,cAAc,CACf,CAAC;QACF,MAAM,IAAI,GAAG,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAA,+BAAmB,EAAC,IAAI,EAAE;YACzD,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,IAAI,IAAI,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAE9B,IAAI,gBAAgB,EAAE;YACpB,KAAK,IAAI,KAAK,IAAI,cAAc,EAAE;gBAChC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC;aAC1C;SACF;aAAM;YACL,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,KAAK,IAAI,KAAK,IAAI,cAAc,EAAE;gBAChC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;aACnC;SACF;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAnGD,gDAmGC;AAED,SAAS,eAAe,CACtB,MAAmB,EACnB,UAA2D,EAAE;IAE7D,IAAI,OAAO,GAAG,IAAA,iCAAe,EAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,IAAI,UAAU,GAAG,IAAA,yCAAmB,EAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,EAAE,SAAS,GAAG,GAAG,EAAE,cAAc,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAExD,UAAU,CAAC,QAAQ,GAAG,IAAA,iCAAe,EAAC,UAAU,EAAE;QAChD,SAAS;QACT,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAA,iCAAe,EAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAa,EACb,aAAkB,EAClB,cAAyB;IAEzB,MAAM,mBAAmB,GAAc,IAAI,CAAC,KAAK,CAC/C,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAC/B,CAAC;IACF,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAC7C,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EACrD,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CACzB,CAAC;IACF,KAAK,IAAI,kBAAkB,IAAI,mBAAmB,EAAE;QAClD,kBAAkB,CAAC,CAAC,IAAI,QAAQ,CAAC;QACjC,kBAAkB,CAAC,CAAC,IAAI,YAAY,CAAC;KACtC;IACD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,mBAA8B,EAAE,SAAoB;IAC3E,MAAM,IAAI,GAAG,aAAa,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,IAAA,+BAAmB,EAAC,IAAI,EAAE;QACzD,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACvC,KAAK,IAAI,KAAK,IAAI,cAAc,EAAE;QAChC,IAAI,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjE,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KAC/C;IACD,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAClE,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB;IACrC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,IAAe,EAAE,OAAkB;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,kBAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACpD;KACF;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -10,7 +10,7 @@ interface IntergralData {
|
|
|
10
10
|
from: number;
|
|
11
11
|
to: number;
|
|
12
12
|
}
|
|
13
|
-
export declare type Peak1DIntern = Omit<NMRPeak1D, 'y' | 'shape'
|
|
13
|
+
export declare type Peak1DIntern = Omit<NMRPeak1D, 'y' | 'shape'> & {
|
|
14
14
|
intensity: number;
|
|
15
15
|
};
|
|
16
16
|
export interface SignalIntern {
|
package/lib/ranges/rangesToXY.js
CHANGED
|
@@ -13,17 +13,26 @@ function checkForSignals(ranges) {
|
|
|
13
13
|
throw new Error('range has not signals');
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
+
const defaultFromTo = (nucleus = '') => {
|
|
17
|
+
switch (nucleus.toUpperCase()) {
|
|
18
|
+
case '13C':
|
|
19
|
+
return { from: -5, to: 206 };
|
|
20
|
+
default:
|
|
21
|
+
return { from: -0.5, to: 10.5 };
|
|
22
|
+
}
|
|
23
|
+
};
|
|
16
24
|
function rangesToXY(ranges, options = {}) {
|
|
17
25
|
checkForSignals(ranges);
|
|
18
|
-
let { frequency = 400, lineWidth = 1,
|
|
26
|
+
let { frequency = 400, lineWidth = 1, nbPoints = 16 * 1024, shape = { kind: 'gaussian' }, } = options;
|
|
19
27
|
const addSpectrum = (a, b) => {
|
|
20
28
|
for (let i = 0; i < nbPoints; i++) {
|
|
21
29
|
a[i] += b[i];
|
|
22
30
|
}
|
|
23
31
|
};
|
|
32
|
+
const { from, to } = getFromTo(ranges, options);
|
|
24
33
|
const spectrumOptions = {
|
|
25
|
-
from,
|
|
26
34
|
to,
|
|
35
|
+
from,
|
|
27
36
|
nbPoints,
|
|
28
37
|
shape,
|
|
29
38
|
lineWidth,
|
|
@@ -84,7 +93,7 @@ function broadPeakOrMultipletSpectrum(signals, options = {}) {
|
|
|
84
93
|
return spectrumGenerator.getSpectrum();
|
|
85
94
|
}
|
|
86
95
|
function peaksOfMultiplet(delta, options) {
|
|
87
|
-
const { frequency, lineWidth, intensities = [1, 2, 5, 4, 5,
|
|
96
|
+
const { frequency, lineWidth, intensities = [1, 2, 5, 4, 5, 7, 5, 4, 5, 2, 1], } = options;
|
|
88
97
|
const lineWidthPpm = lineWidth / frequency;
|
|
89
98
|
const spaceBetweenPeaks = lineWidthPpm * 1.5;
|
|
90
99
|
const peaks = [];
|
|
@@ -111,4 +120,19 @@ function normalizeSpectrum(spectrum, signals, options = {}) {
|
|
|
111
120
|
}
|
|
112
121
|
}
|
|
113
122
|
}
|
|
123
|
+
function getFromTo(ranges, options) {
|
|
124
|
+
const { from: defaultFrom, to: defaultTo } = defaultFromTo(options.nucleus);
|
|
125
|
+
let rangesFrom = Number.MAX_SAFE_INTEGER;
|
|
126
|
+
let rangesTo = Number.MIN_SAFE_INTEGER;
|
|
127
|
+
for (const range of ranges) {
|
|
128
|
+
for (const signal of range.signals || []) {
|
|
129
|
+
if (rangesFrom > signal.delta)
|
|
130
|
+
rangesFrom = signal.delta;
|
|
131
|
+
if (rangesTo < signal.delta)
|
|
132
|
+
rangesTo = signal.delta;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const { from = Math.min(rangesFrom - 0.5, defaultFrom), to = Math.max(rangesTo + 0.5, defaultTo), } = options;
|
|
136
|
+
return { from, to };
|
|
137
|
+
}
|
|
114
138
|
//# sourceMappingURL=rangesToXY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rangesToXY.js","sourceRoot":"","sources":["../../src/ranges/rangesToXY.ts"],"names":[],"mappings":";;;;;;AACA,wFAA2D;AAE3D,2DAAuD;AAGvD,gEAA6D;AAsC7D,SAAS,eAAe,CACtB,MAAkB;IAElB,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;KAC9D;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"rangesToXY.js","sourceRoot":"","sources":["../../src/ranges/rangesToXY.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDummySignals = void 0;
|
|
4
|
+
const couplingPatterns_1 = require("../constants/couplingPatterns");
|
|
5
|
+
function addDummySignals(signals) {
|
|
6
|
+
let newSignals = JSON.parse(JSON.stringify(signals));
|
|
7
|
+
signals.forEach((signal, s) => {
|
|
8
|
+
const { js: jCouplings = [], atoms: signalAssignment = [s] } = signal;
|
|
9
|
+
let { newCouplings, tempSignals } = checkCouplings(jCouplings, newSignals, signalAssignment);
|
|
10
|
+
if (tempSignals.length > 0)
|
|
11
|
+
newSignals.push(...tempSignals);
|
|
12
|
+
newSignals[s].js = newCouplings;
|
|
13
|
+
newSignals[s].atoms = signalAssignment;
|
|
14
|
+
});
|
|
15
|
+
return newSignals.sort((a, b) => a.delta - b.delta);
|
|
16
|
+
}
|
|
17
|
+
exports.addDummySignals = addDummySignals;
|
|
18
|
+
function checkCouplings(jCouplings, signals, signalAssignment) {
|
|
19
|
+
let newSignalAssignment = signals.length - 1;
|
|
20
|
+
let tempSignals = [];
|
|
21
|
+
const newCouplings = jCouplings.reduce((newCouplings, jCoupling) => {
|
|
22
|
+
const { atoms = [], multiplicity, coupling } = jCoupling;
|
|
23
|
+
if (atoms.length === 0) {
|
|
24
|
+
if (coupling && multiplicity) {
|
|
25
|
+
let tempCouplings = [];
|
|
26
|
+
const nbLinks = couplingPatterns_1.couplingPatterns.indexOf(multiplicity);
|
|
27
|
+
for (let i = 0; i < nbLinks; i++) {
|
|
28
|
+
newSignalAssignment++;
|
|
29
|
+
tempCouplings.push({
|
|
30
|
+
coupling,
|
|
31
|
+
atoms: [newSignalAssignment],
|
|
32
|
+
});
|
|
33
|
+
tempSignals.push(formatSignal(coupling, [newSignalAssignment], signalAssignment));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
newCouplings.push(jCoupling);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return newCouplings;
|
|
41
|
+
}, []);
|
|
42
|
+
return { newCouplings, tempSignals };
|
|
43
|
+
}
|
|
44
|
+
function formatSignal(coupling, newSignalAssignment, signalAssignment) {
|
|
45
|
+
return {
|
|
46
|
+
delta: 100000,
|
|
47
|
+
atoms: newSignalAssignment,
|
|
48
|
+
js: [
|
|
49
|
+
{
|
|
50
|
+
coupling,
|
|
51
|
+
atoms: signalAssignment,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=addDummySignals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addDummySignals.js","sourceRoot":"","sources":["../../src/signals/addDummySignals.ts"],"names":[],"mappings":";;;AAAA,oEAAiE;AAKjE,SAAgB,eAAe,CAAC,OAAsB;IACpD,IAAI,UAAU,GAAkB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAEpE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC;QAEtE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,cAAc,CAChD,UAAU,EACV,UAAU,EACV,gBAAgB,CACjB,CAAC;QAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAE5D,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC;QAChC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,gBAAgB,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAnBD,0CAmBC;AAED,SAAS,cAAc,CACrB,UAAuB,EACvB,OAAsB,EACtB,gBAA0B;IAE1B,IAAI,mBAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C,IAAI,WAAW,GAAkB,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CACpC,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE;QAC1B,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;QACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACtB,IAAI,QAAQ,IAAI,YAAY,EAAE;gBAC5B,IAAI,aAAa,GAAgB,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,mCAAgB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;oBAChC,mBAAmB,EAAE,CAAC;oBACtB,aAAa,CAAC,IAAI,CAAC;wBACjB,QAAQ;wBACR,KAAK,EAAE,CAAC,mBAAmB,CAAC;qBAC7B,CAAC,CAAC;oBACH,WAAW,CAAC,IAAI,CACd,YAAY,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,CAChE,CAAC;iBACH;aACF;iBAAM;gBACL,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC9B;SACF;QACD,OAAO,YAAY,CAAC;IACtB,CAAC,EACD,EAAE,CACH,CAAC;IACF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CACnB,QAAgB,EAChB,mBAA6B,EAC7B,gBAA0B;IAE1B,OAAO;QACL,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,mBAAmB;QAC1B,EAAE,EAAE;YACF;gBACE,QAAQ;gBACR,KAAK,EAAE,gBAAgB;aACxB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,61 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hackSignalsToXY = void 0;
|
|
4
|
-
const
|
|
4
|
+
const addDummySignals_1 = require("./addDummySignals");
|
|
5
5
|
const signalsToXY_1 = require("./signalsToXY");
|
|
6
6
|
/**
|
|
7
7
|
* Create the xy object from an array of 1D signals.
|
|
8
8
|
* @param signals Array of signals with assigned or unassigned couplings.
|
|
9
9
|
*/
|
|
10
10
|
function hackSignalsToXY(signals, options = {}) {
|
|
11
|
-
let newSignals =
|
|
12
|
-
signals.forEach((signal, s) => {
|
|
13
|
-
const { js: jCouplings = [], atoms: signalAssignment = [s] } = signal;
|
|
14
|
-
let { newCouplings, tempSignals } = checkCouplings(jCouplings, newSignals, signalAssignment);
|
|
15
|
-
if (tempSignals.length > 0)
|
|
16
|
-
newSignals.push(...tempSignals);
|
|
17
|
-
newSignals[s].js = newCouplings;
|
|
18
|
-
newSignals[s].atoms = signalAssignment;
|
|
19
|
-
});
|
|
11
|
+
let newSignals = (0, addDummySignals_1.addDummySignals)(signals);
|
|
20
12
|
return (0, signalsToXY_1.signalsToXY)(newSignals, options);
|
|
21
13
|
}
|
|
22
14
|
exports.hackSignalsToXY = hackSignalsToXY;
|
|
23
|
-
function checkCouplings(jCouplings, signals, signalAssignment) {
|
|
24
|
-
let newSignalAssignment = signals.length - 1;
|
|
25
|
-
let tempSignals = [];
|
|
26
|
-
const newCouplings = jCouplings.reduce((newCouplings, jCoupling) => {
|
|
27
|
-
const { atoms = [], multiplicity, coupling } = jCoupling;
|
|
28
|
-
if (atoms.length === 0) {
|
|
29
|
-
if (coupling && multiplicity) {
|
|
30
|
-
let tempCouplings = [];
|
|
31
|
-
const nbLinks = couplingPatterns_1.couplingPatterns.indexOf(multiplicity);
|
|
32
|
-
for (let i = 0; i < nbLinks; i++) {
|
|
33
|
-
newSignalAssignment++;
|
|
34
|
-
tempCouplings.push({
|
|
35
|
-
coupling,
|
|
36
|
-
atoms: [newSignalAssignment],
|
|
37
|
-
});
|
|
38
|
-
tempSignals.push(formatSignal(coupling, [newSignalAssignment], signalAssignment));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
newCouplings.push(jCoupling);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return newCouplings;
|
|
46
|
-
}, []);
|
|
47
|
-
return { newCouplings, tempSignals };
|
|
48
|
-
}
|
|
49
|
-
function formatSignal(coupling, newSignalAssignment, signalAssignment) {
|
|
50
|
-
return {
|
|
51
|
-
delta: 100000,
|
|
52
|
-
atoms: newSignalAssignment,
|
|
53
|
-
js: [
|
|
54
|
-
{
|
|
55
|
-
coupling,
|
|
56
|
-
atoms: signalAssignment,
|
|
57
|
-
},
|
|
58
|
-
],
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
15
|
//# sourceMappingURL=hackSignalsToXY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hackSignalsToXY.js","sourceRoot":"","sources":["../../src/signals/hackSignalsToXY.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"hackSignalsToXY.js","sourceRoot":"","sources":["../../src/signals/hackSignalsToXY.ts"],"names":[],"mappings":";;;AACA,uDAAoD;AACpD,+CAAgE;AAEhE;;;GAGG;AAEH,SAAgB,eAAe,CAC7B,OAAsB,EACtB,UAA8B,EAAE;IAEhC,IAAI,UAAU,GAAG,IAAA,iCAAe,EAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,IAAA,yBAAW,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAND,0CAMC"}
|
|
@@ -1,43 +1,6 @@
|
|
|
1
1
|
import { DataXY } from 'cheminfo-types';
|
|
2
|
-
import type { Shape1D } from 'ml-peak-shape-generator';
|
|
3
2
|
import type { SpinSystem } from '../spinSystem';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The linewidth of the output spectrum, expresed in Hz.
|
|
7
|
-
* @default 1
|
|
8
|
-
*/
|
|
9
|
-
lineWidth?: number;
|
|
10
|
-
/**
|
|
11
|
-
* Maximum number of atoms on each cluster that can be considered to be simulated together. It affects the the quality and speed of the simulation.
|
|
12
|
-
* @default 8
|
|
13
|
-
*/
|
|
14
|
-
maxClusterSize?: number;
|
|
15
|
-
/**
|
|
16
|
-
* The frequency in Mhz of the fake spectrometer that records the spectrum.
|
|
17
|
-
* @default 400
|
|
18
|
-
*/
|
|
19
|
-
frequency?: number;
|
|
20
|
-
/**
|
|
21
|
-
* The low limit of the ordinate variable.
|
|
22
|
-
* @default 0
|
|
23
|
-
*/
|
|
24
|
-
from?: number;
|
|
25
|
-
/**
|
|
26
|
-
* The upper limit of the ordinate variable.
|
|
27
|
-
* @default 10
|
|
28
|
-
*/
|
|
29
|
-
to?: number;
|
|
30
|
-
/**
|
|
31
|
-
* Number of points of the output spectrum.
|
|
32
|
-
* @default 16K
|
|
33
|
-
*/
|
|
34
|
-
nbPoints?: number;
|
|
35
|
-
/**
|
|
36
|
-
* Shape options
|
|
37
|
-
* @default {kind:'gaussian'}
|
|
38
|
-
*/
|
|
39
|
-
shape?: Shape1D;
|
|
40
|
-
}
|
|
3
|
+
import type { Simulate1DOptions } from './simulateXYPeaks';
|
|
41
4
|
/**
|
|
42
5
|
* This function simulates a one dimensional nmr spectrum. This function returns an array containing the relative intensities of the spectrum in the specified simulation window (from-to).
|
|
43
6
|
*/
|
|
@@ -46,4 +9,3 @@ export default function simulate1D(
|
|
|
46
9
|
* The SpinSystem object to be simulated
|
|
47
10
|
*/
|
|
48
11
|
spinSystem: SpinSystem, options?: Simulate1DOptions): DataXY;
|
|
49
|
-
export {};
|