nmr-processing 8.0.0 → 8.3.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.
Files changed (199) hide show
  1. package/lib/apodization/apodization.d.ts +22 -0
  2. package/lib/apodization/apodization.js +18 -0
  3. package/lib/apodization/apodization.js.map +1 -0
  4. package/lib/apodization/applyWindow.d.ts +28 -0
  5. package/lib/apodization/applyWindow.js +20 -0
  6. package/lib/apodization/applyWindow.js.map +1 -0
  7. package/lib/apodization/compose.d.ts +23 -0
  8. package/lib/apodization/compose.js +25 -0
  9. package/lib/apodization/compose.js.map +1 -0
  10. package/lib/apodization/getFunction.d.ts +2 -0
  11. package/lib/apodization/getFunction.js +18 -0
  12. package/lib/apodization/getFunction.js.map +1 -0
  13. package/lib/apodization/shapes/WindowFunctions.d.ts +12 -0
  14. package/lib/apodization/shapes/WindowFunctions.js +3 -0
  15. package/lib/apodization/shapes/WindowFunctions.js.map +1 -0
  16. package/lib/apodization/shapes/exponential.d.ts +11 -0
  17. package/lib/apodization/shapes/exponential.js +10 -0
  18. package/lib/apodization/shapes/exponential.js.map +1 -0
  19. package/lib/apodization/shapes/lorentzToGauss.d.ts +26 -0
  20. package/lib/apodization/shapes/lorentzToGauss.js +15 -0
  21. package/lib/apodization/shapes/lorentzToGauss.js.map +1 -0
  22. package/lib/apodization/utils/getData.d.ts +4 -0
  23. package/lib/apodization/utils/getData.js +21 -0
  24. package/lib/apodization/utils/getData.js.map +1 -0
  25. package/lib/assignment/utils/buildAssignments.d.ts +2 -2
  26. package/lib/assignment/utils/exploreTreeRec.js +1 -1
  27. package/lib/assignment/utils/exploreTreeRec.js.map +1 -1
  28. package/lib/assignment/utils/getAssignment/checkIDs.d.ts +1 -1
  29. package/lib/assignment/utils/getAssignment/checkIDs.js.map +1 -1
  30. package/lib/databases/DatabaseNMREntry.d.ts +2 -0
  31. package/lib/index.d.ts +5 -1
  32. package/lib/index.js +5 -1
  33. package/lib/index.js.map +1 -1
  34. package/lib/peaks/NMRPeak1D.d.ts +0 -1
  35. package/lib/peaks/peaksToRanges.d.ts +16 -0
  36. package/lib/peaks/peaksToRanges.js +3 -2
  37. package/lib/peaks/peaksToRanges.js.map +1 -1
  38. package/lib/peaks/solventSuppression.d.ts +6 -0
  39. package/lib/peaks/solventSuppression.js +158 -0
  40. package/lib/peaks/solventSuppression.js.map +1 -0
  41. package/lib/peaks/util/jAnalyzer.d.ts +1 -1
  42. package/lib/peaks/util/jAnalyzer.js +26 -31
  43. package/lib/peaks/util/jAnalyzer.js.map +1 -1
  44. package/lib/peaks/util/peakOptimizer.js +12 -16
  45. package/lib/peaks/util/peakOptimizer.js.map +1 -1
  46. package/lib/prediction/predictAllSpectra.js +7 -9
  47. package/lib/prediction/predictAllSpectra.js.map +1 -1
  48. package/lib/prediction/predictCarbon.js +1 -1
  49. package/lib/prediction/predictCarbon.js.map +1 -1
  50. package/lib/prediction/utils/queryByHOSE.js +1 -1
  51. package/lib/prediction/utils/queryByHOSE.js.map +1 -1
  52. package/lib/ranges/markSolventSignal.d.ts +3 -0
  53. package/lib/ranges/markSolventSignal.js +107 -0
  54. package/lib/ranges/markSolventSignal.js.map +1 -0
  55. package/lib/ranges/rangesToACS.js +8 -4
  56. package/lib/ranges/rangesToACS.js.map +1 -1
  57. package/lib/ranges/rangesToXY.js +27 -3
  58. package/lib/ranges/rangesToXY.js.map +1 -1
  59. package/lib/signals/addDummySignals.d.ts +2 -0
  60. package/lib/signals/addDummySignals.js +56 -0
  61. package/lib/signals/addDummySignals.js.map +1 -0
  62. package/lib/signals/hackSignalsToXY.js +2 -48
  63. package/lib/signals/hackSignalsToXY.js.map +1 -1
  64. package/lib/signals/simulation/getPauliMatrix.js.map +1 -1
  65. package/lib/signals/simulation/simulate1D.d.ts +1 -39
  66. package/lib/signals/simulation/simulate1D.js +13 -240
  67. package/lib/signals/simulation/simulate1D.js.map +1 -1
  68. package/lib/signals/simulation/simulateXYPeaks.d.ts +47 -0
  69. package/lib/signals/simulation/simulateXYPeaks.js +246 -0
  70. package/lib/signals/simulation/simulateXYPeaks.js.map +1 -0
  71. package/lib/signals/simulation/splitSpinSystem.js +11 -13
  72. package/lib/signals/simulation/splitSpinSystem.js.map +1 -1
  73. package/lib/utilities/getFrequency.d.ts +1 -1
  74. package/lib/utilities/getFrequency.js +4 -4
  75. package/lib/utilities/getFrequency.js.map +1 -1
  76. package/lib/utilities/rangeFromSignal.d.ts +9 -5
  77. package/lib/utilities/rangeFromSignal.js +7 -7
  78. package/lib/utilities/rangeFromSignal.js.map +1 -1
  79. package/lib/utilities/resurrectRange.js +4 -7
  80. package/lib/utilities/resurrectRange.js.map +1 -1
  81. package/lib/xyz/util/formatZone.d.ts +3 -0
  82. package/lib/xyz/util/formatZone.js +38 -0
  83. package/lib/xyz/util/formatZone.js.map +1 -0
  84. package/lib/xyz/xyzAutoZonesPicking.d.ts +1 -2
  85. package/lib/xyz/xyzAutoZonesPicking.js +2 -34
  86. package/lib/xyz/xyzAutoZonesPicking.js.map +1 -1
  87. package/lib/xyz/xyzJResAnalyzer.d.ts +6 -1
  88. package/lib/xyz/xyzJResAnalyzer.js +9 -8
  89. package/lib/xyz/xyzJResAnalyzer.js.map +1 -1
  90. package/lib-esm/apodization/apodization.js +14 -0
  91. package/lib-esm/apodization/apodization.js.map +1 -0
  92. package/lib-esm/apodization/applyWindow.js +16 -0
  93. package/lib-esm/apodization/applyWindow.js.map +1 -0
  94. package/lib-esm/apodization/compose.js +21 -0
  95. package/lib-esm/apodization/compose.js.map +1 -0
  96. package/lib-esm/apodization/getFunction.js +14 -0
  97. package/lib-esm/apodization/getFunction.js.map +1 -0
  98. package/lib-esm/apodization/shapes/WindowFunctions.js +2 -0
  99. package/lib-esm/apodization/shapes/WindowFunctions.js.map +1 -0
  100. package/lib-esm/apodization/shapes/exponential.js +6 -0
  101. package/lib-esm/apodization/shapes/exponential.js.map +1 -0
  102. package/lib-esm/apodization/shapes/lorentzToGauss.js +11 -0
  103. package/lib-esm/apodization/shapes/lorentzToGauss.js.map +1 -0
  104. package/lib-esm/apodization/utils/getData.js +17 -0
  105. package/lib-esm/apodization/utils/getData.js.map +1 -0
  106. package/lib-esm/assignment/utils/buildAssignments.js +3 -3
  107. package/lib-esm/assignment/utils/exploreTreeRec.js +1 -1
  108. package/lib-esm/assignment/utils/exploreTreeRec.js.map +1 -1
  109. package/lib-esm/assignment/utils/getAssignment/buildAssignments.js +3 -3
  110. package/lib-esm/assignment/utils/getAssignment/checkIDs.js.map +1 -1
  111. package/lib-esm/index.js +5 -1
  112. package/lib-esm/index.js.map +1 -1
  113. package/lib-esm/peaks/peaksToRanges.js +2 -2
  114. package/lib-esm/peaks/peaksToRanges.js.map +1 -1
  115. package/lib-esm/peaks/solventSuppression.js +154 -0
  116. package/lib-esm/peaks/solventSuppression.js.map +1 -0
  117. package/lib-esm/peaks/util/jAnalyzer.js +26 -31
  118. package/lib-esm/peaks/util/jAnalyzer.js.map +1 -1
  119. package/lib-esm/peaks/util/peakOptimizer.js +12 -16
  120. package/lib-esm/peaks/util/peakOptimizer.js.map +1 -1
  121. package/lib-esm/prediction/predictAllSpectra.js +7 -9
  122. package/lib-esm/prediction/predictAllSpectra.js.map +1 -1
  123. package/lib-esm/prediction/predictCarbon.js +1 -1
  124. package/lib-esm/prediction/predictCarbon.js.map +1 -1
  125. package/lib-esm/prediction/utils/queryByHOSE.js +1 -1
  126. package/lib-esm/prediction/utils/queryByHOSE.js.map +1 -1
  127. package/lib-esm/ranges/markSolventSignal.js +100 -0
  128. package/lib-esm/ranges/markSolventSignal.js.map +1 -0
  129. package/lib-esm/ranges/rangesToACS.js +8 -4
  130. package/lib-esm/ranges/rangesToACS.js.map +1 -1
  131. package/lib-esm/ranges/rangesToXY.js +27 -3
  132. package/lib-esm/ranges/rangesToXY.js.map +1 -1
  133. package/lib-esm/signals/addDummySignals.js +52 -0
  134. package/lib-esm/signals/addDummySignals.js.map +1 -0
  135. package/lib-esm/signals/hackSignalsToXY.js +2 -48
  136. package/lib-esm/signals/hackSignalsToXY.js.map +1 -1
  137. package/lib-esm/signals/simulation/getPauliMatrix.js.map +1 -1
  138. package/lib-esm/signals/simulation/simulate1D.js +14 -238
  139. package/lib-esm/signals/simulation/simulate1D.js.map +1 -1
  140. package/lib-esm/signals/simulation/simulateXYPeaks.js +239 -0
  141. package/lib-esm/signals/simulation/simulateXYPeaks.js.map +1 -0
  142. package/lib-esm/signals/simulation/splitSpinSystem.js +11 -13
  143. package/lib-esm/signals/simulation/splitSpinSystem.js.map +1 -1
  144. package/lib-esm/utilities/getFrequency.js +1 -1
  145. package/lib-esm/utilities/getFrequency.js.map +1 -1
  146. package/lib-esm/utilities/rangeFromSignal.js +7 -7
  147. package/lib-esm/utilities/rangeFromSignal.js.map +1 -1
  148. package/lib-esm/utilities/resurrectRange.js +4 -7
  149. package/lib-esm/utilities/resurrectRange.js.map +1 -1
  150. package/lib-esm/xyz/util/formatZone.js +34 -0
  151. package/lib-esm/xyz/util/formatZone.js.map +1 -0
  152. package/lib-esm/xyz/xyzAutoZonesPicking.js +1 -33
  153. package/lib-esm/xyz/xyzAutoZonesPicking.js.map +1 -1
  154. package/lib-esm/xyz/xyzJResAnalyzer.js +9 -8
  155. package/lib-esm/xyz/xyzJResAnalyzer.js.map +1 -1
  156. package/package.json +16 -14
  157. package/src/apodization/apodization.ts +34 -0
  158. package/src/apodization/applyWindow.ts +51 -0
  159. package/src/apodization/compose.ts +47 -0
  160. package/src/apodization/getFunction.ts +15 -0
  161. package/src/apodization/shapes/WindowFunctions.ts +14 -0
  162. package/src/apodization/shapes/exponential.ts +16 -0
  163. package/src/apodization/shapes/lorentzToGauss.ts +41 -0
  164. package/src/apodization/utils/getData.ts +15 -0
  165. package/src/assignment/utils/buildAssignments.ts +4 -4
  166. package/src/assignment/utils/exploreTreeRec.ts +1 -1
  167. package/src/assignment/utils/getAssignment/buildAssignments.ts +3 -3
  168. package/src/assignment/utils/getAssignment/checkIDs.ts +1 -1
  169. package/src/databases/DatabaseNMREntry.ts +3 -0
  170. package/src/index.ts +7 -1
  171. package/src/peaks/NMRPeak1D.ts +0 -1
  172. package/src/peaks/peaksToRanges.ts +2 -2
  173. package/src/peaks/solventSuppression.ts +214 -0
  174. package/src/peaks/util/jAnalyzer.ts +27 -31
  175. package/src/peaks/util/peakOptimizer.ts +11 -15
  176. package/src/prediction/predictAllSpectra.ts +6 -8
  177. package/src/prediction/predictCarbon.ts +1 -1
  178. package/src/prediction/utils/queryByHOSE.ts +1 -1
  179. package/src/ranges/markSolventSignal.ts +121 -0
  180. package/src/ranges/rangesToACS.ts +9 -10
  181. package/src/ranges/rangesToXY.ts +33 -4
  182. package/src/signals/addDummySignals.ts +77 -0
  183. package/src/signals/hackSignalsToXY.ts +2 -72
  184. package/src/signals/simulation/getPauliMatrix.ts +1 -1
  185. package/src/signals/simulation/simulate1D.ts +14 -319
  186. package/src/signals/simulation/simulateXYPeaks.ts +332 -0
  187. package/src/signals/simulation/splitSpinSystem.ts +10 -12
  188. package/src/utilities/getFrequency.ts +1 -1
  189. package/src/utilities/rangeFromSignal.ts +19 -11
  190. package/src/utilities/resurrectRange.ts +4 -7
  191. package/src/xyz/util/formatZone.ts +36 -0
  192. package/src/xyz/xyzAutoZonesPicking.ts +1 -35
  193. package/src/xyz/xyzJResAnalyzer.ts +14 -7
  194. package/lib/constants/gyromagneticRatio.d.ts +0 -6
  195. package/lib/constants/gyromagneticRatio.js +0 -26
  196. package/lib/constants/gyromagneticRatio.js.map +0 -1
  197. package/lib-esm/constants/gyromagneticRatio.js +0 -23
  198. package/lib-esm/constants/gyromagneticRatio.js.map +0 -1
  199. package/src/constants/gyromagneticRatio.ts +0 -49
@@ -1,9 +1,5 @@
1
- import binarySearch from 'binary-search';
2
- import { Matrix, EVD } from 'ml-matrix';
3
- import { SparseMatrix } from 'ml-sparse-matrix';
4
- import { SpectrumGenerator } from 'spectrum-generator';
5
- import getPauliMatrix from './getPauliMatrix';
6
- const smallValue = 1e-2;
1
+ import { generateSpectrum } from 'spectrum-generator';
2
+ import { simulateXYPeaks } from './simulateXYPeaks';
7
3
  /**
8
4
  * 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).
9
5
  */
@@ -12,241 +8,21 @@ export default function simulate1D(
12
8
  * The SpinSystem object to be simulated
13
9
  */
14
10
  spinSystem, options = {}) {
15
- let { lineWidth = 1, maxClusterSize = 8, frequency: frequencyMHz = 400, from = 0, to = 10, nbPoints = 1024, shape = {
11
+ let { lineWidth = 1, frequency: frequencyMHz = 400, from = 0, to = 10, nbPoints = 1024, shape = {
16
12
  kind: 'gaussian',
17
13
  }, } = options;
18
14
  let peakWidth = lineWidth / frequencyMHz;
19
- let spectrumGenerator = new SpectrumGenerator({
20
- from,
21
- to,
22
- nbPoints,
23
- shape,
24
- peakWidthFct: () => peakWidth,
15
+ const xyPeaks = simulateXYPeaks(spinSystem, options);
16
+ return generateSpectrum(xyPeaks, {
17
+ generator: {
18
+ from,
19
+ to,
20
+ nbPoints,
21
+ },
22
+ peakOptions: {
23
+ shape,
24
+ width: peakWidth,
25
+ },
25
26
  });
26
- const chemicalShifts = spinSystem.chemicalShifts.slice();
27
- for (let i = 0; i < chemicalShifts.length; i++) {
28
- chemicalShifts[i] = chemicalShifts[i] * frequencyMHz;
29
- }
30
- const multiplicity = spinSystem.multiplicity;
31
- for (const cluster of spinSystem.clusters) {
32
- let clusterFake = cluster.map((cluster) => cluster < 0 ? -cluster - 1 : cluster);
33
- let weight = 1;
34
- let sumI = 0;
35
- let frequencies = [];
36
- let intensities = [];
37
- if (cluster.length > maxClusterSize) {
38
- // This is a single spin, but the cluster exceeds the maxClusterSize criteria
39
- // we use the simple multiplicity algorithm
40
- // Add the central peak. It will be split with every single J coupling.
41
- let index = 0;
42
- while (cluster[index++] < 0)
43
- ;
44
- index = cluster[index - 1];
45
- frequencies.push(-chemicalShifts[index]);
46
- for (let i = 0; i < cluster.length; i++) {
47
- if (cluster[i] < 0) {
48
- let jc = spinSystem.couplingConstants.get(index, clusterFake[i]) / 2;
49
- let currentSize = frequencies.length;
50
- for (let j = 0; j < currentSize; j++) {
51
- frequencies.push(frequencies[j] + jc);
52
- frequencies[j] -= jc;
53
- }
54
- }
55
- }
56
- frequencies.sort((a, b) => a - b);
57
- sumI = frequencies.length;
58
- weight = 1;
59
- for (let i = 0; i < sumI; i++) {
60
- intensities.push(1);
61
- }
62
- }
63
- else {
64
- const hamiltonian = getHamiltonian(chemicalShifts, spinSystem.couplingConstants, multiplicity, spinSystem.connectivity, clusterFake);
65
- const hamSize = hamiltonian.rows;
66
- // TODO: add support for sparse matrix in matrix types.
67
- // @ts-expect-error sparse matrix not supported
68
- const evd = new EVD(hamiltonian);
69
- const V = evd.eigenvectorMatrix;
70
- const diagB = evd.realEigenvalues;
71
- const assignmentMatrix = new SparseMatrix(hamSize, hamSize);
72
- const multLen = cluster.length;
73
- weight = 0;
74
- for (let n = 0; n < multLen; n++) {
75
- const L = getPauliMatrix(multiplicity[clusterFake[n]]);
76
- let temp = 1;
77
- for (let j = 0; j < n; j++) {
78
- temp *= multiplicity[clusterFake[j]];
79
- }
80
- const A = SparseMatrix.eye(temp);
81
- temp = 1;
82
- for (let j = n + 1; j < multLen; j++) {
83
- temp *= multiplicity[clusterFake[j]];
84
- }
85
- const B = SparseMatrix.eye(temp);
86
- const tempMat = A.kroneckerProduct(L.m).kroneckerProduct(B);
87
- if (cluster[n] >= 0) {
88
- assignmentMatrix.add(tempMat.mul(cluster[n] + 1));
89
- weight++;
90
- }
91
- else {
92
- assignmentMatrix.add(tempMat.mul(cluster[n]));
93
- }
94
- }
95
- let rhoip = Matrix.zeros(hamSize, hamSize);
96
- assignmentMatrix.forEachNonZero((i, j, v) => {
97
- if (v > 0) {
98
- for (let k = 0; k < V.columns; k++) {
99
- let element = V.get(j, k);
100
- if (element !== 0) {
101
- rhoip.set(i, k, rhoip.get(i, k) + element);
102
- }
103
- }
104
- }
105
- return v;
106
- });
107
- let rhoip2 = rhoip.clone();
108
- assignmentMatrix.forEachNonZero((i, j, v) => {
109
- if (v < 0) {
110
- for (let k = 0; k < V.columns; k++) {
111
- let element = V.get(j, k);
112
- if (element !== 0) {
113
- rhoip2.set(i, k, rhoip2.get(i, k) + element);
114
- }
115
- }
116
- }
117
- return v;
118
- });
119
- const tV = V.transpose();
120
- rhoip = tV.mmul(rhoip);
121
- const sparseRhoip = new SparseMatrix(rhoip.to2DArray(), {
122
- threshold: smallValue,
123
- });
124
- triuTimesAbs(sparseRhoip, smallValue);
125
- rhoip2 = tV.mmul(rhoip2);
126
- const sparseRhoip2 = new SparseMatrix(rhoip2.to2DArray(), {
127
- threshold: smallValue,
128
- });
129
- sparseRhoip2.forEachNonZero((i, j, v) => {
130
- return v;
131
- });
132
- triuTimesAbs(sparseRhoip2, smallValue);
133
- sparseRhoip2.forEachNonZero((i, j, v) => {
134
- let val = rhoip.get(i, j);
135
- val = Math.min(Math.abs(val), Math.abs(v));
136
- val *= val;
137
- sumI += val;
138
- let valFreq = diagB[i] - diagB[j];
139
- let insertIn = binarySearch(frequencies, valFreq, (a, b) => a - b);
140
- if (insertIn < 0) {
141
- frequencies.splice(-1 - insertIn, 0, valFreq);
142
- intensities.splice(-1 - insertIn, 0, val);
143
- }
144
- else {
145
- intensities[insertIn] += val;
146
- }
147
- });
148
- }
149
- const numFreq = frequencies.length;
150
- if (numFreq > 0) {
151
- weight /= sumI;
152
- const diff = lineWidth / 64;
153
- let valFreq = frequencies[0];
154
- let inte = intensities[0];
155
- let count = 1;
156
- for (let i = 1; i < numFreq; i++) {
157
- if (Math.abs(frequencies[i] - valFreq / count) < diff) {
158
- inte += intensities[i];
159
- valFreq += frequencies[i];
160
- count++;
161
- }
162
- else {
163
- spectrumGenerator.addPeak({
164
- x: -valFreq / count / frequencyMHz,
165
- y: inte * weight,
166
- });
167
- valFreq = frequencies[i];
168
- inte = intensities[i];
169
- count = 1;
170
- }
171
- }
172
- spectrumGenerator.addPeak({
173
- x: -valFreq / count / frequencyMHz,
174
- y: inte * weight,
175
- });
176
- }
177
- }
178
- return spectrumGenerator.getSpectrum();
179
- }
180
- function triuTimesAbs(A, val) {
181
- A.forEachNonZero((i, j, v) => {
182
- if (i > j)
183
- return 0;
184
- if (Math.abs(v) <= val)
185
- return 0;
186
- return v;
187
- });
188
- }
189
- /**
190
- * Create a hamiltonian matrix for the given spinsystem
191
- * @param {Array} chemicalShifts - An array containing the chemical shift in Hz
192
- * @param {Array} couplingConstants - An array containing the coupling constants in Hz
193
- * @param {Array} multiplicity - An array specifiying the multiplicities of each scalar coupling
194
- * @param {Array} conMatrix - A one step connectivity matrix for the given spin system
195
- * @param {Array} cluster - An binary array specifiying the spins to be considered for this hamiltonial
196
- * @return {object}
197
- */
198
- function getHamiltonian(chemicalShifts, couplingConstants, multiplicity, conMatrix, cluster) {
199
- let hamSize = 1;
200
- for (const element of cluster) {
201
- hamSize *= multiplicity[element];
202
- }
203
- const clusterHam = new SparseMatrix(hamSize, hamSize);
204
- for (let pos = 0; pos < cluster.length; pos++) {
205
- let n = cluster[pos];
206
- const L = getPauliMatrix(multiplicity[n]);
207
- let A1, B1;
208
- let temp = 1;
209
- for (let i = 0; i < pos; i++) {
210
- temp *= multiplicity[cluster[i]];
211
- }
212
- A1 = SparseMatrix.eye(temp);
213
- temp = 1;
214
- for (let i = pos + 1; i < cluster.length; i++) {
215
- temp *= multiplicity[cluster[i]];
216
- }
217
- B1 = SparseMatrix.eye(temp);
218
- const alpha = chemicalShifts[n];
219
- const kronProd = A1.kroneckerProduct(L.z).kroneckerProduct(B1);
220
- clusterHam.add(kronProd.mul(alpha));
221
- for (let pos2 = 0; pos2 < cluster.length; pos2++) {
222
- const k = cluster[pos2];
223
- if (conMatrix.get(n, k) === 1) {
224
- const S = getPauliMatrix(multiplicity[k]);
225
- let A2, B2;
226
- let temp = 1;
227
- for (let i = 0; i < pos2; i++) {
228
- temp *= multiplicity[cluster[i]];
229
- }
230
- A2 = SparseMatrix.eye(temp);
231
- temp = 1;
232
- for (let i = pos2 + 1; i < cluster.length; i++) {
233
- temp *= multiplicity[cluster[i]];
234
- }
235
- B2 = SparseMatrix.eye(temp);
236
- const kron1 = A1.kroneckerProduct(L.x)
237
- .kroneckerProduct(B1)
238
- .mmul(A2.kroneckerProduct(S.x).kroneckerProduct(B2));
239
- kron1.add(A1.kroneckerProduct(L.y)
240
- .kroneckerProduct(B1)
241
- .mul(-1)
242
- .mmul(A2.kroneckerProduct(S.y).kroneckerProduct(B2)));
243
- kron1.add(A1.kroneckerProduct(L.z)
244
- .kroneckerProduct(B1)
245
- .mmul(A2.kroneckerProduct(S.z).kroneckerProduct(B2)));
246
- clusterHam.add(kron1.mul(couplingConstants.get(n, k) / 2));
247
- }
248
- }
249
- }
250
- return clusterHam;
251
27
  }
252
28
  //# sourceMappingURL=simulate1D.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"simulate1D.js","sourceRoot":"","sources":["../../../src/signals/simulation/simulate1D.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simulate1D.js","sourceRoot":"","sources":["../../../src/signals/simulation/simulate1D.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AAEH,MAAM,CAAC,OAAO,UAAU,UAAU;AAChC;;GAEG;AACH,UAAsB,EACtB,UAA6B,EAAE;IAE/B,IAAI,EACF,SAAS,GAAG,CAAC,EACb,SAAS,EAAE,YAAY,GAAG,GAAG,EAC7B,IAAI,GAAG,CAAC,EACR,EAAE,GAAG,EAAE,EACP,QAAQ,GAAG,IAAI,EACf,KAAK,GAAG;QACN,IAAI,EAAE,UAAU;KACjB,GACF,GAAG,OAAO,CAAC;IAEZ,IAAI,SAAS,GAAG,SAAS,GAAG,YAAY,CAAC;IAEzC,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAErD,OAAO,gBAAgB,CAAC,OAAO,EAAE;QAC/B,SAAS,EAAE;YACT,IAAI;YACJ,EAAE;YACF,QAAQ;SACT;QACD,WAAW,EAAE;YACX,KAAK;YACL,KAAK,EAAE,SAAS;SACjB;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,239 @@
1
+ import binarySearch from 'binary-search';
2
+ import { Matrix, EVD } from 'ml-matrix';
3
+ import { SparseMatrix } from 'ml-sparse-matrix';
4
+ import getPauliMatrix from './getPauliMatrix';
5
+ const smallValue = 1e-2;
6
+ export function simulateXYPeaks(
7
+ /**
8
+ * The SpinSystem object to be simulated
9
+ */
10
+ spinSystem, options = {}) {
11
+ let { lineWidth = 1, maxClusterSize = 8, frequency: frequencyMHz = 400, } = options;
12
+ const chemicalShifts = spinSystem.chemicalShifts.slice();
13
+ for (let i = 0; i < chemicalShifts.length; i++) {
14
+ chemicalShifts[i] = chemicalShifts[i] * frequencyMHz;
15
+ }
16
+ const multiplicity = spinSystem.multiplicity;
17
+ const xyPeaks = [];
18
+ for (const cluster of spinSystem.clusters) {
19
+ let clusterFake = cluster.map((cluster) => cluster < 0 ? -cluster - 1 : cluster);
20
+ let weight = 1;
21
+ let sumI = 0;
22
+ let frequencies = [];
23
+ let intensities = [];
24
+ if (cluster.length > maxClusterSize) {
25
+ // This is a single spin, but the cluster exceeds the maxClusterSize criteria
26
+ // we use the simple multiplicity algorithm
27
+ // Add the central peak. It will be split with every single J coupling.
28
+ let index = 0;
29
+ while (cluster[index++] < 0)
30
+ ;
31
+ index = cluster[index - 1];
32
+ frequencies.push(-chemicalShifts[index]);
33
+ for (let i = 0; i < cluster.length; i++) {
34
+ if (cluster[i] < 0) {
35
+ let jc = spinSystem.couplingConstants.get(index, clusterFake[i]) / 2;
36
+ let currentSize = frequencies.length;
37
+ for (let j = 0; j < currentSize; j++) {
38
+ frequencies.push(frequencies[j] + jc);
39
+ frequencies[j] -= jc;
40
+ }
41
+ }
42
+ }
43
+ frequencies.sort((a, b) => a - b);
44
+ sumI = frequencies.length;
45
+ weight = 1;
46
+ for (let i = 0; i < sumI; i++) {
47
+ intensities.push(1);
48
+ }
49
+ }
50
+ else {
51
+ const hamiltonian = getHamiltonian(chemicalShifts, spinSystem.couplingConstants, multiplicity, spinSystem.connectivity, clusterFake);
52
+ const hamSize = hamiltonian.rows;
53
+ // TODO: add support for sparse matrix in matrix types.
54
+ // @ts-expect-error sparse matrix not supported
55
+ const evd = new EVD(hamiltonian);
56
+ const V = evd.eigenvectorMatrix;
57
+ const diagB = evd.realEigenvalues;
58
+ const assignmentMatrix = new SparseMatrix(hamSize, hamSize);
59
+ const multLen = cluster.length;
60
+ weight = 0;
61
+ for (let n = 0; n < multLen; n++) {
62
+ const L = getPauliMatrix(multiplicity[clusterFake[n]]);
63
+ let temp = 1;
64
+ for (let j = 0; j < n; j++) {
65
+ temp *= multiplicity[clusterFake[j]];
66
+ }
67
+ const A = SparseMatrix.eye(temp);
68
+ temp = 1;
69
+ for (let j = n + 1; j < multLen; j++) {
70
+ temp *= multiplicity[clusterFake[j]];
71
+ }
72
+ const B = SparseMatrix.eye(temp);
73
+ const tempMat = A.kroneckerProduct(L.m).kroneckerProduct(B);
74
+ if (cluster[n] >= 0) {
75
+ assignmentMatrix.add(tempMat.mul(cluster[n] + 1));
76
+ weight++;
77
+ }
78
+ else {
79
+ assignmentMatrix.add(tempMat.mul(cluster[n]));
80
+ }
81
+ }
82
+ let rhoip = Matrix.zeros(hamSize, hamSize);
83
+ assignmentMatrix.forEachNonZero((i, j, v) => {
84
+ if (v > 0) {
85
+ for (let k = 0; k < V.columns; k++) {
86
+ let element = V.get(j, k);
87
+ if (element !== 0) {
88
+ rhoip.set(i, k, rhoip.get(i, k) + element);
89
+ }
90
+ }
91
+ }
92
+ return v;
93
+ });
94
+ let rhoip2 = rhoip.clone();
95
+ assignmentMatrix.forEachNonZero((i, j, v) => {
96
+ if (v < 0) {
97
+ for (let k = 0; k < V.columns; k++) {
98
+ let element = V.get(j, k);
99
+ if (element !== 0) {
100
+ rhoip2.set(i, k, rhoip2.get(i, k) + element);
101
+ }
102
+ }
103
+ }
104
+ return v;
105
+ });
106
+ const tV = V.transpose();
107
+ rhoip = tV.mmul(rhoip);
108
+ const sparseRhoip = new SparseMatrix(rhoip.to2DArray(), {
109
+ threshold: smallValue,
110
+ });
111
+ triuTimesAbs(sparseRhoip, smallValue);
112
+ rhoip2 = tV.mmul(rhoip2);
113
+ const sparseRhoip2 = new SparseMatrix(rhoip2.to2DArray(), {
114
+ threshold: smallValue,
115
+ });
116
+ sparseRhoip2.forEachNonZero((i, j, v) => {
117
+ return v;
118
+ });
119
+ triuTimesAbs(sparseRhoip2, smallValue);
120
+ sparseRhoip2.forEachNonZero((i, j, v) => {
121
+ let val = rhoip.get(i, j);
122
+ val = Math.min(Math.abs(val), Math.abs(v));
123
+ val *= val;
124
+ sumI += val;
125
+ let valFreq = diagB[i] - diagB[j];
126
+ let insertIn = binarySearch(frequencies, valFreq, (a, b) => a - b);
127
+ if (insertIn < 0) {
128
+ frequencies.splice(-1 - insertIn, 0, valFreq);
129
+ intensities.splice(-1 - insertIn, 0, val);
130
+ }
131
+ else {
132
+ intensities[insertIn] += val;
133
+ }
134
+ });
135
+ }
136
+ const numFreq = frequencies.length;
137
+ if (numFreq > 0) {
138
+ weight /= sumI;
139
+ const diff = lineWidth / 64;
140
+ let valFreq = frequencies[0];
141
+ let inte = intensities[0];
142
+ let count = 1;
143
+ for (let i = 1; i < numFreq; i++) {
144
+ if (Math.abs(frequencies[i] - valFreq / count) < diff) {
145
+ inte += intensities[i];
146
+ valFreq += frequencies[i];
147
+ count++;
148
+ }
149
+ else {
150
+ xyPeaks.push({
151
+ x: -valFreq / count / frequencyMHz,
152
+ y: inte * weight,
153
+ });
154
+ valFreq = frequencies[i];
155
+ inte = intensities[i];
156
+ count = 1;
157
+ }
158
+ }
159
+ xyPeaks.push({
160
+ x: -valFreq / count / frequencyMHz,
161
+ y: inte * weight,
162
+ });
163
+ }
164
+ }
165
+ return xyPeaks;
166
+ }
167
+ function triuTimesAbs(A, val) {
168
+ A.forEachNonZero((i, j, v) => {
169
+ if (i > j)
170
+ return 0;
171
+ if (Math.abs(v) <= val)
172
+ return 0;
173
+ return v;
174
+ });
175
+ }
176
+ /**
177
+ * Create a hamiltonian matrix for the given spinsystem
178
+ * @param {Array} chemicalShifts - An array containing the chemical shift in Hz
179
+ * @param {Array} couplingConstants - An array containing the coupling constants in Hz
180
+ * @param {Array} multiplicity - An array specifiying the multiplicities of each scalar coupling
181
+ * @param {Array} conMatrix - A one step connectivity matrix for the given spin system
182
+ * @param {Array} cluster - An binary array specifiying the spins to be considered for this hamiltonial
183
+ * @return {object}
184
+ */
185
+ function getHamiltonian(chemicalShifts, couplingConstants, multiplicity, conMatrix, cluster) {
186
+ let hamSize = 1;
187
+ for (const element of cluster) {
188
+ hamSize *= multiplicity[element];
189
+ }
190
+ const clusterHam = new SparseMatrix(hamSize, hamSize);
191
+ for (let pos = 0; pos < cluster.length; pos++) {
192
+ let n = cluster[pos];
193
+ const L = getPauliMatrix(multiplicity[n]);
194
+ let A1, B1;
195
+ let temp = 1;
196
+ for (let i = 0; i < pos; i++) {
197
+ temp *= multiplicity[cluster[i]];
198
+ }
199
+ A1 = SparseMatrix.eye(temp);
200
+ temp = 1;
201
+ for (let i = pos + 1; i < cluster.length; i++) {
202
+ temp *= multiplicity[cluster[i]];
203
+ }
204
+ B1 = SparseMatrix.eye(temp);
205
+ const alpha = chemicalShifts[n];
206
+ const kronProd = A1.kroneckerProduct(L.z).kroneckerProduct(B1);
207
+ clusterHam.add(kronProd.mul(alpha));
208
+ for (let pos2 = 0; pos2 < cluster.length; pos2++) {
209
+ const k = cluster[pos2];
210
+ if (conMatrix.get(n, k) === 1) {
211
+ const S = getPauliMatrix(multiplicity[k]);
212
+ let A2, B2;
213
+ let temp = 1;
214
+ for (let i = 0; i < pos2; i++) {
215
+ temp *= multiplicity[cluster[i]];
216
+ }
217
+ A2 = SparseMatrix.eye(temp);
218
+ temp = 1;
219
+ for (let i = pos2 + 1; i < cluster.length; i++) {
220
+ temp *= multiplicity[cluster[i]];
221
+ }
222
+ B2 = SparseMatrix.eye(temp);
223
+ const kron1 = A1.kroneckerProduct(L.x)
224
+ .kroneckerProduct(B1)
225
+ .mmul(A2.kroneckerProduct(S.x).kroneckerProduct(B2));
226
+ kron1.add(A1.kroneckerProduct(L.y)
227
+ .kroneckerProduct(B1)
228
+ .mul(-1)
229
+ .mmul(A2.kroneckerProduct(S.y).kroneckerProduct(B2)));
230
+ kron1.add(A1.kroneckerProduct(L.z)
231
+ .kroneckerProduct(B1)
232
+ .mmul(A2.kroneckerProduct(S.z).kroneckerProduct(B2)));
233
+ clusterHam.add(kron1.mul(couplingConstants.get(n, k) / 2));
234
+ }
235
+ }
236
+ }
237
+ return clusterHam;
238
+ }
239
+ //# sourceMappingURL=simulateXYPeaks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulateXYPeaks.js","sourceRoot":"","sources":["../../../src/signals/simulation/simulateXYPeaks.ts"],"names":[],"mappings":"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"}
@@ -52,20 +52,18 @@ function splitCluster(cluster, clusterList, options) {
52
52
  if (count <= maxClusterSize) {
53
53
  clusterList.push(members);
54
54
  }
55
+ else if (child.index < 0) {
56
+ splitCluster(child, clusterList, {
57
+ maxClusterSize,
58
+ force: true,
59
+ nSpins,
60
+ connectivity,
61
+ });
62
+ }
55
63
  else {
56
- if (child.index < 0) {
57
- splitCluster(child, clusterList, {
58
- maxClusterSize,
59
- force: true,
60
- nSpins,
61
- connectivity,
62
- });
63
- }
64
- else {
65
- // We have to threat this spin alone and use the resurrection algorithm instead of the simulation
66
- members[child.index] = 2;
67
- clusterList.push(members);
68
- }
64
+ // We have to threat this spin alone and use the resurrection algorithm instead of the simulation
65
+ members[child.index] = 2;
66
+ clusterList.push(members);
69
67
  }
70
68
  }
71
69
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"splitSpinSystem.js","sourceRoot":"","sources":["../../../src/signals/simulation/splitSpinSystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"splitSpinSystem.js","sourceRoot":"","sources":["../../../src/signals/simulation/splitSpinSystem.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { gyromagneticRatio } from '../constants/gyromagneticRatio';
1
+ import { gyromagneticRatio } from 'gyromagnetic-ratio';
2
2
  /**
3
3
  * calculate the frequency of a nucleus with respect to a reference nucleus
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"getFrequency.js","sourceRoot":"","sources":["../../src/utilities/getFrequency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAU,MAAM,gCAAgC,CAAC;AAgB3E;;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,iBAAiB,CAAC,OAAiB,CAAC,CAAC;QAClD,iBAAiB,CAAC,UAAoB,CAAC,CACxC,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,iBAAiB,CAAC,EAAE;YAC7B,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
+ {"version":3,"file":"getFrequency.js","sourceRoot":"","sources":["../../src/utilities/getFrequency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAU,MAAM,oBAAoB,CAAC;AAgB/D;;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,iBAAiB,CAAC,OAAiB,CAAC,CAAC;QAClD,iBAAiB,CAAC,UAAoB,CAAC,CACxC,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,iBAAiB,CAAC,EAAE;YAC7B,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,13 +1,13 @@
1
1
  import { couplingValues } from '../constants/couplingValues';
2
- export function rangeFromSignal(signal, options = {}) {
2
+ export function rangeFromSignal(signal, options) {
3
3
  const { nucleus = '1h', frequency = 400 } = options;
4
4
  const { tolerance = getTolerance(nucleus) / frequency } = options;
5
- let halfWidth = (signal.js || []).reduce((total, j) => {
6
- const { coupling, multiplicity = 'd' } = j;
7
- return total + (couplingValues[multiplicity] * coupling) / frequency;
8
- }, 0) /
9
- 2 +
10
- tolerance;
5
+ let halfWidth = 0;
6
+ for (const js of signal.js || []) {
7
+ const { coupling, multiplicity = 'd' } = js;
8
+ halfWidth += (couplingValues[multiplicity] * coupling) / frequency;
9
+ }
10
+ halfWidth = tolerance + halfWidth / 2;
11
11
  return {
12
12
  from: signal.delta - halfWidth,
13
13
  to: signal.delta + halfWidth,
@@ -1 +1 @@
1
- {"version":3,"file":"rangeFromSignal.js","sourceRoot":"","sources":["../../src/utilities/rangeFromSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAgB7D,MAAM,UAAU,eAAe,CAAC,MAAmB,EAAE,UAAe,EAAE;IACpE,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAClE,IAAI,SAAS,GACX,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,KAAK,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC;IACvE,CAAC,EAAE,CAAC,CAAC;QACH,CAAC;QACH,SAAS,CAAC;IACZ,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS;QAC9B,EAAE,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,QAAQ,OAAO,CAAC,iBAAiB,EAAE,EAAE;QACnC,KAAK,IAAI;YACP,OAAO,GAAG,CAAC;QACb,KAAK,KAAK;YACR,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;KACZ;AACH,CAAC"}
1
+ {"version":3,"file":"rangeFromSignal.js","sourceRoot":"","sources":["../../src/utilities/rangeFromSignal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAoB7D,MAAM,UAAU,eAAe,CAC7B,MAAmB,EACnB,OAA+B;IAE/B,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IACpD,MAAM,EAAE,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC;IAElE,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE;QAChC,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5C,SAAS,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC;KACpE;IAED,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IACtC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS;QAC9B,EAAE,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS;KAC7B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,QAAQ,OAAO,CAAC,iBAAiB,EAAE,EAAE;QACnC,KAAK,IAAI;YACP,OAAO,GAAG,CAAC;QACb,KAAK,KAAK;YACR,OAAO,CAAC,CAAC;QACX;YACE,OAAO,CAAC,CAAC;KACZ;AACH,CAAC"}