nmr-processing 9.4.1 → 9.4.2-pre.1684301205

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 (128) hide show
  1. package/lib/constants/MultiplicityPatterns.d.ts +1 -0
  2. package/lib/constants/MultiplicityPatterns.js +3 -1
  3. package/lib/constants/MultiplicityPatterns.js.map +1 -1
  4. package/lib/constants/couplingPatterns.d.ts +1 -0
  5. package/lib/constants/couplingPatterns.js +5 -1
  6. package/lib/constants/couplingPatterns.js.map +1 -1
  7. package/lib/index.d.ts +6 -1
  8. package/lib/index.js +6 -1
  9. package/lib/index.js.map +1 -1
  10. package/lib/multiplicity/checkMultiplet.d.ts +1 -0
  11. package/lib/multiplicity/checkMultiplet.js +13 -0
  12. package/lib/multiplicity/checkMultiplet.js.map +1 -0
  13. package/lib/multiplicity/checkMultiplicity.d.ts +1 -0
  14. package/lib/multiplicity/checkMultiplicity.js +17 -0
  15. package/lib/multiplicity/checkMultiplicity.js.map +1 -0
  16. package/lib/multiplicity/findMultiplet.d.ts +1 -0
  17. package/lib/multiplicity/findMultiplet.js +12 -0
  18. package/lib/multiplicity/findMultiplet.js.map +1 -0
  19. package/lib/multiplicity/joinPatterns.d.ts +3 -0
  20. package/lib/{utilities → multiplicity}/joinPatterns.js +2 -2
  21. package/lib/multiplicity/joinPatterns.js.map +1 -0
  22. package/lib/multiplicity/splitPatterns.js.map +1 -0
  23. package/lib/multiplicity/translateMultiplet.d.ts +1 -0
  24. package/lib/multiplicity/translateMultiplet.js +14 -0
  25. package/lib/multiplicity/translateMultiplet.js.map +1 -0
  26. package/lib/ranges/rangesToACS.js +1 -0
  27. package/lib/ranges/rangesToACS.js.map +1 -1
  28. package/lib/signal/signalJoinCouplings.d.ts +5 -0
  29. package/lib/signal/signalJoinCouplings.js +7 -6
  30. package/lib/signal/signalJoinCouplings.js.map +1 -1
  31. package/lib/signal/signalMultiplicityPattern.d.ts +3 -1
  32. package/lib/signal/signalMultiplicityPattern.js +6 -2
  33. package/lib/signal/signalMultiplicityPattern.js.map +1 -1
  34. package/lib/utilities/normalizeNucleus.d.ts +1 -0
  35. package/lib/utilities/normalizeNucleus.js +22 -0
  36. package/lib/utilities/normalizeNucleus.js.map +1 -0
  37. package/lib/utilities/nucleusMap.d.ts +5 -0
  38. package/lib/utilities/nucleusMap.js +22 -0
  39. package/lib/utilities/nucleusMap.js.map +1 -0
  40. package/lib/utilities/resurrectRange.js +1 -1
  41. package/lib/utilities/resurrectRange.js.map +1 -1
  42. package/lib/utilities/selectACSPattern.d.ts +1 -0
  43. package/lib/utilities/selectACSPattern.js +14 -0
  44. package/lib/utilities/selectACSPattern.js.map +1 -0
  45. package/lib/xyz/Data2D.d.ts +7 -0
  46. package/lib/xyz/Data2D.js +3 -0
  47. package/lib/xyz/Data2D.js.map +1 -0
  48. package/lib/xyz/util/formatZone.d.ts +2 -1
  49. package/lib/xyz/util/formatZone.js.map +1 -1
  50. package/lib/xyz/util/padData.d.ts +10 -0
  51. package/lib/xyz/util/padData.js +38 -0
  52. package/lib/xyz/util/padData.js.map +1 -0
  53. package/lib/xyz/xyzAutoSignalsPicking.d.ts +84 -0
  54. package/lib/xyz/xyzAutoSignalsPicking.js +193 -0
  55. package/lib/xyz/xyzAutoSignalsPicking.js.map +1 -0
  56. package/lib/xyz/xyzAutoZonesPicking.d.ts +0 -22
  57. package/lib/xyz/xyzAutoZonesPicking.js +2 -214
  58. package/lib/xyz/xyzAutoZonesPicking.js.map +1 -1
  59. package/lib-esm/constants/MultiplicityPatterns.js +3 -1
  60. package/lib-esm/constants/MultiplicityPatterns.js.map +1 -1
  61. package/lib-esm/constants/couplingPatterns.js +4 -0
  62. package/lib-esm/constants/couplingPatterns.js.map +1 -1
  63. package/lib-esm/index.js +6 -1
  64. package/lib-esm/index.js.map +1 -1
  65. package/lib-esm/multiplicity/checkMultiplet.js +9 -0
  66. package/lib-esm/multiplicity/checkMultiplet.js.map +1 -0
  67. package/lib-esm/multiplicity/checkMultiplicity.js +13 -0
  68. package/lib-esm/multiplicity/checkMultiplicity.js.map +1 -0
  69. package/lib-esm/multiplicity/findMultiplet.js +8 -0
  70. package/lib-esm/multiplicity/findMultiplet.js.map +1 -0
  71. package/lib-esm/{utilities → multiplicity}/joinPatterns.js +3 -3
  72. package/lib-esm/multiplicity/joinPatterns.js.map +1 -0
  73. package/lib-esm/multiplicity/splitPatterns.js.map +1 -0
  74. package/lib-esm/multiplicity/translateMultiplet.js +10 -0
  75. package/lib-esm/multiplicity/translateMultiplet.js.map +1 -0
  76. package/lib-esm/ranges/rangesToACS.js +1 -0
  77. package/lib-esm/ranges/rangesToACS.js.map +1 -1
  78. package/lib-esm/signal/signalJoinCouplings.js +7 -6
  79. package/lib-esm/signal/signalJoinCouplings.js.map +1 -1
  80. package/lib-esm/signal/signalMultiplicityPattern.js +6 -2
  81. package/lib-esm/signal/signalMultiplicityPattern.js.map +1 -1
  82. package/lib-esm/utilities/normalizeNucleus.js +18 -0
  83. package/lib-esm/utilities/normalizeNucleus.js.map +1 -0
  84. package/lib-esm/utilities/nucleusMap.js +19 -0
  85. package/lib-esm/utilities/nucleusMap.js.map +1 -0
  86. package/lib-esm/utilities/resurrectRange.js +1 -1
  87. package/lib-esm/utilities/resurrectRange.js.map +1 -1
  88. package/lib-esm/utilities/selectACSPattern.js +10 -0
  89. package/lib-esm/utilities/selectACSPattern.js.map +1 -0
  90. package/lib-esm/xyz/Data2D.js +2 -0
  91. package/lib-esm/xyz/Data2D.js.map +1 -0
  92. package/lib-esm/xyz/util/formatZone.js.map +1 -1
  93. package/lib-esm/xyz/util/padData.js +31 -0
  94. package/lib-esm/xyz/util/padData.js.map +1 -0
  95. package/lib-esm/xyz/xyzAutoSignalsPicking.js +163 -0
  96. package/lib-esm/xyz/xyzAutoSignalsPicking.js.map +1 -0
  97. package/lib-esm/xyz/xyzAutoZonesPicking.js +2 -188
  98. package/lib-esm/xyz/xyzAutoZonesPicking.js.map +1 -1
  99. package/package.json +1 -1
  100. package/src/constants/MultiplicityPatterns.ts +4 -1
  101. package/src/constants/couplingPatterns.ts +9 -0
  102. package/src/index.ts +7 -1
  103. package/src/multiplicity/checkMultiplet.ts +11 -0
  104. package/src/multiplicity/checkMultiplicity.ts +21 -0
  105. package/src/multiplicity/findMultiplet.ts +8 -0
  106. package/src/{utilities → multiplicity}/joinPatterns.ts +9 -3
  107. package/src/multiplicity/translateMultiplet.ts +11 -0
  108. package/src/ranges/rangesToACS.ts +1 -0
  109. package/src/signal/signalJoinCouplings.ts +12 -5
  110. package/src/signal/signalMultiplicityPattern.ts +9 -2
  111. package/src/utilities/normalizeNucleus.ts +24 -0
  112. package/src/utilities/nucleusMap.ts +40 -0
  113. package/src/utilities/resurrectRange.ts +1 -1
  114. package/src/utilities/selectACSPattern.ts +10 -0
  115. package/src/xyz/Data2D.ts +7 -0
  116. package/src/xyz/util/formatZone.ts +2 -1
  117. package/src/xyz/util/padData.ts +37 -0
  118. package/src/xyz/xyzAutoSignalsPicking.ts +309 -0
  119. package/src/xyz/xyzAutoZonesPicking.ts +2 -276
  120. package/lib/utilities/joinPatterns.d.ts +0 -1
  121. package/lib/utilities/joinPatterns.js.map +0 -1
  122. package/lib/utilities/splitPatterns.js.map +0 -1
  123. package/lib-esm/utilities/joinPatterns.js.map +0 -1
  124. package/lib-esm/utilities/splitPatterns.js.map +0 -1
  125. /package/lib/{utilities → multiplicity}/splitPatterns.d.ts +0 -0
  126. /package/lib/{utilities → multiplicity}/splitPatterns.js +0 -0
  127. /package/lib-esm/{utilities → multiplicity}/splitPatterns.js +0 -0
  128. /package/src/{utilities → multiplicity}/splitPatterns.ts +0 -0
@@ -0,0 +1,38 @@
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.padData = void 0;
7
+ const ml_matrix_1 = __importDefault(require("ml-matrix"));
8
+ function padData(spectraData, options) {
9
+ let { minX, maxX, minY, maxY } = spectraData;
10
+ const width = options.width;
11
+ let nbPoints = spectraData.z[0].length;
12
+ let nbSubSpectra = spectraData.z.length;
13
+ let yInterval = (maxY - minY) / (nbSubSpectra - 1);
14
+ let xInterval = (maxX - minX) / (nbPoints - 1);
15
+ let yDiff = width - nbSubSpectra;
16
+ let xDiff = Math.max(width - nbPoints, 0);
17
+ if (xDiff % 2)
18
+ xDiff++;
19
+ if (yDiff % 2)
20
+ yDiff++;
21
+ let xOffset = xDiff / 2;
22
+ let yOffset = yDiff / 2;
23
+ let newMatrix = ml_matrix_1.default.zeros(nbSubSpectra + yDiff, nbPoints + xDiff);
24
+ for (let i = 0; i < nbSubSpectra; i++) {
25
+ for (let j = 0; j < nbPoints; j++) {
26
+ newMatrix.set(i + yOffset, j + xOffset, spectraData.z[i][j]);
27
+ }
28
+ }
29
+ return {
30
+ z: newMatrix.to2DArray(),
31
+ minX: minX - xOffset * xInterval,
32
+ maxX: maxX + xOffset * xInterval,
33
+ minY: minY - yOffset * yInterval,
34
+ maxY: maxY + yOffset * yInterval,
35
+ };
36
+ }
37
+ exports.padData = padData;
38
+ //# sourceMappingURL=padData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"padData.js","sourceRoot":"","sources":["../../../src/xyz/util/padData.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA+B;AAI/B,SAAgB,OAAO,CAAC,WAAmB,EAAE,OAA0B;IACrE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAE7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE5B,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;IAExC,IAAI,SAAS,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,SAAS,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAE/C,IAAI,KAAK,GAAG,KAAK,GAAG,YAAY,CAAC;IACjC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC1C,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,EAAE,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC;QAAE,KAAK,EAAE,CAAC;IAEvB,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;IACxB,IAAI,SAAS,GAAG,mBAAM,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9D;KACF;IAED,OAAO;QACL,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE;QACxB,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS;QAChC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS;QAChC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS;QAChC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,SAAS;KACjC,CAAC;AACJ,CAAC;AAhCD,0BAgCC"}
@@ -0,0 +1,84 @@
1
+ import * as matrixPeakFinders from 'ml-matrix-peaks-finder';
2
+ import type { Peak2D } from 'ml-matrix-peaks-finder';
3
+ import type { GetKernelOptions } from '../peaks/util/getKernel';
4
+ import { MakeMandatory } from '../utilities/MakeMandatory';
5
+ import { Data2D } from './Data2D';
6
+ import type { NMRSignal2D } from './NMRSignal2D';
7
+ export interface XYZAutoSignalsPickingOptions {
8
+ /**
9
+ * max number of points in any dimension to pad the input data, this is needed to avoid lost peaks when the input matrix is too small.
10
+ * @default 14
11
+ */
12
+ sizeToPad?: number;
13
+ /**
14
+ * If it's true, try to find the real maximum for each bidimensional peak.
15
+ * @default true
16
+ */
17
+ realTopDetection?: boolean;
18
+ /**
19
+ * positive value filter small peaks by intensity
20
+ * @default 0.5
21
+ */
22
+ thresholdFactor?: number;
23
+ /**
24
+ * specify the nuclei of each dimension
25
+ * @default ['1H','1H']
26
+ */
27
+ nuclei?: string[];
28
+ /**
29
+ * specify the frequency for each dimension.
30
+ */
31
+ observedFrequencies: number[] | Float64Array;
32
+ /**
33
+ * If it's true, it try to ajust the shift and add missing cross peaks, useful only for homonuclear data.
34
+ * @default false
35
+ */
36
+ enhanceSymmetry?: boolean;
37
+ /**
38
+ * If it's true, peaks with less than a specific percentage (maxPercentCutOff) of the maximum intensity will be removed.
39
+ * @default true;
40
+ */
41
+ clean?: boolean;
42
+ /**
43
+ * percentage of maximum intensity as cutoff for small peaks.
44
+ * @default 0.03
45
+ */
46
+ maxPercentCutOff?: number;
47
+ /**
48
+ * Specify the minimum distance in Hz for each dimension to join peaks in a signal.
49
+ * @default [24,24]
50
+ */
51
+ tolerances?: number[];
52
+ /**
53
+ * If it is true, the convolution will be forced by FFT
54
+ * @default true
55
+ */
56
+ convolutionByFFT?: boolean;
57
+ /**
58
+ * kernel options to calculate a laplacianOfGaussian kernel with a specify size.
59
+ */
60
+ kernel?: GetKernelOptions;
61
+ }
62
+ export type NMRSignal2DWithID<T extends Peak2D = Peak2D> = MakeMandatory<NMRSignal2D<T>, 'id'>;
63
+ export declare function xyzAutoSignalsPicking(spectraData: Data2D, options: XYZAutoSignalsPickingOptions): NMRSignal2DWithID<matrixPeakFinders.Peak2D & {
64
+ id: string;
65
+ }>[];
66
+ /**
67
+ * This function converts a set of 2D-peaks in 2D-signals. Each signal could be composed
68
+ * of many 2D-peaks, and it has some additional information related to the NMR spectrum.
69
+ * @private
70
+ */
71
+ export interface CreateSignals2DOptions {
72
+ nCols: number;
73
+ nRows: number;
74
+ absoluteData: number[] | Float64Array;
75
+ originalData: number[] | Float64Array;
76
+ observedFrequencies: number[] | Float64Array;
77
+ tolerances: number[];
78
+ nuclei: string[];
79
+ realTopDetection: boolean;
80
+ minY: number;
81
+ maxY: number;
82
+ minX: number;
83
+ maxX: number;
84
+ }
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.xyzAutoSignalsPicking = void 0;
30
+ const uuid_1 = require("@lukeed/uuid");
31
+ const convolution = __importStar(require("ml-matrix-convolution"));
32
+ const matrixPeakFinders = __importStar(require("ml-matrix-peaks-finder"));
33
+ const ml_simple_clustering_1 = __importDefault(require("ml-simple-clustering"));
34
+ const addMissingIDs_1 = require("../peaks/util/addMissingIDs");
35
+ const determineRealTop_1 = require("../peaks/util/determineRealTop");
36
+ const getKernel_1 = require("../peaks/util/getKernel");
37
+ const PeakOptimizer = __importStar(require("../peaks/util/peakOptimizer"));
38
+ const padData_1 = require("./util/padData");
39
+ const smallFilter = [
40
+ [0, 0, 1, 2, 2, 2, 1, 0, 0],
41
+ [0, 1, 4, 7, 7, 7, 4, 1, 0],
42
+ [1, 4, 5, 3, 0, 3, 5, 4, 1],
43
+ [2, 7, 3, -12, -23, -12, 3, 7, 2],
44
+ [2, 7, 0, -23, -40, -23, 0, 7, 2],
45
+ [2, 7, 3, -12, -23, -12, 3, 7, 2],
46
+ [1, 4, 5, 3, 0, 3, 5, 4, 1],
47
+ [0, 1, 3, 7, 7, 7, 3, 1, 0],
48
+ [0, 0, 1, 2, 2, 2, 1, 0, 0],
49
+ ];
50
+ function xyzAutoSignalsPicking(spectraData, options) {
51
+ let { sizeToPad = 14, realTopDetection = true, thresholdFactor = 0.5, nuclei = ['1H', '1H'], observedFrequencies, enhanceSymmetry = false, clean = true, maxPercentCutOff = 0.03, tolerances = [24, 24], convolutionByFFT = true, kernel: kernelOptions, } = options;
52
+ if (!Array.isArray(observedFrequencies) &&
53
+ !ArrayBuffer.isView(observedFrequencies)) {
54
+ throw new Error('observedFrequencies is mandatory');
55
+ }
56
+ thresholdFactor = thresholdFactor === 0 ? 1 : Math.abs(thresholdFactor);
57
+ let nbPoints = spectraData.z[0].length;
58
+ let nbSubSpectra = spectraData.z.length;
59
+ if (nbSubSpectra < sizeToPad) {
60
+ spectraData = (0, padData_1.padData)(spectraData, { width: sizeToPad });
61
+ nbPoints = spectraData.z[0].length;
62
+ nbSubSpectra = spectraData.z.length;
63
+ }
64
+ let absoluteData = new Float64Array(nbPoints * nbSubSpectra);
65
+ let originalData = new Float64Array(nbPoints * nbSubSpectra);
66
+ for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra; iSubSpectra++) {
67
+ let spectrum = spectraData.z[iSubSpectra];
68
+ for (let iCol = 0; iCol < nbPoints; iCol++) {
69
+ let index = iSubSpectra * nbPoints + iCol;
70
+ absoluteData[index] = Math.abs(spectrum[iCol]);
71
+ originalData[index] = spectrum[iCol]; //@todo pensar si se puede evitar originalData
72
+ }
73
+ }
74
+ const kernel = kernelOptions ? (0, getKernel_1.getKernel)(kernelOptions) : smallFilter;
75
+ let convolutedSpectrum = convolutionByFFT
76
+ ? convolution.fft(absoluteData, kernel, {
77
+ rows: nbSubSpectra,
78
+ cols: nbPoints,
79
+ })
80
+ : convolution.direct(absoluteData, kernel, {
81
+ rows: nbSubSpectra,
82
+ cols: nbPoints,
83
+ });
84
+ let peaksMC1 = matrixPeakFinders.findPeaks2DRegion(absoluteData, {
85
+ originalData,
86
+ filteredData: convolutedSpectrum,
87
+ rows: nbSubSpectra,
88
+ cols: nbPoints,
89
+ nStdDev: thresholdFactor,
90
+ });
91
+ if (clean) {
92
+ // Remove peaks with less than x% of the intensity of the highest peak
93
+ peaksMC1 = PeakOptimizer.clean(peaksMC1, maxPercentCutOff);
94
+ }
95
+ let signals = createSignals2D((0, addMissingIDs_1.addMissingIDs)(peaksMC1), {
96
+ nRows: nbSubSpectra,
97
+ nCols: nbPoints,
98
+ minX: spectraData.minX,
99
+ maxX: spectraData.maxX,
100
+ minY: spectraData.minY,
101
+ maxY: spectraData.maxY,
102
+ absoluteData,
103
+ originalData,
104
+ tolerances,
105
+ nuclei,
106
+ observedFrequencies,
107
+ realTopDetection,
108
+ });
109
+ if (enhanceSymmetry) {
110
+ signals = PeakOptimizer.enhanceSymmetry(signals);
111
+ }
112
+ return signals;
113
+ }
114
+ exports.xyzAutoSignalsPicking = xyzAutoSignalsPicking;
115
+ function createSignals2D(peaks, options) {
116
+ let { nCols, nRows, absoluteData, originalData, observedFrequencies, tolerances, nuclei, realTopDetection, minY, maxY, minX, maxX, } = options;
117
+ let [nucleusX, nucleusY] = nuclei;
118
+ let [toleranceX, toleranceY] = tolerances;
119
+ let [observeFrequencyX, observeFrequencyY] = observedFrequencies;
120
+ let dy = (maxY - minY) / (nRows - 1);
121
+ let dx = (maxX - minX) / (nCols - 1);
122
+ if (realTopDetection) {
123
+ peaks = (0, determineRealTop_1.determineRealTop)(peaks, {
124
+ nCols,
125
+ absoluteData,
126
+ originalData,
127
+ minX,
128
+ maxX,
129
+ minY,
130
+ maxY,
131
+ });
132
+ }
133
+ for (let i = peaks.length - 1; i >= 0; i--) {
134
+ let { x, y } = peaks[i];
135
+ peaks[i].x = minX + dx * x;
136
+ peaks[i].y = minY + dy * y;
137
+ peaks[i].minX = minX + dx * peaks[i].minX;
138
+ peaks[i].minY = minY + dy * peaks[i].minY;
139
+ peaks[i].maxX = minX + dx * peaks[i].maxX;
140
+ peaks[i].maxY = minY + dy * peaks[i].maxY;
141
+ // Still having problems to correctly detect peaks on those areas. So I'm removing everything there.
142
+ }
143
+ // The connectivity matrix is an square and symmetric matrix, so we'll only store the upper diagonal in an
144
+ // array like form
145
+ let connectivity = [];
146
+ for (let i = 0; i < peaks.length; i++) {
147
+ for (let j = i; j < peaks.length; j++) {
148
+ if (Math.abs(peaks[i].x - peaks[j].x) * observeFrequencyX < toleranceX &&
149
+ Math.abs(peaks[i].y - peaks[j].y) * observeFrequencyY < toleranceY) {
150
+ // 24*24Hz We cannot distinguish peaks with less than 20 Hz of separation
151
+ connectivity.push(1);
152
+ }
153
+ else {
154
+ connectivity.push(0);
155
+ }
156
+ }
157
+ }
158
+ let clusters = (0, ml_simple_clustering_1.default)(connectivity);
159
+ let signals = [];
160
+ if (clusters) {
161
+ for (const cluster of clusters) {
162
+ let signal = {
163
+ id: (0, uuid_1.v4)(),
164
+ x: {
165
+ delta: 0,
166
+ nucleus: nucleusX,
167
+ resolution: dx,
168
+ },
169
+ y: {
170
+ delta: 0,
171
+ nucleus: nucleusY,
172
+ resolution: dy,
173
+ },
174
+ };
175
+ let peaks2D = [];
176
+ let sumZ = 0;
177
+ for (let jPeak = 0; jPeak < cluster.length; jPeak++) {
178
+ if (cluster[jPeak] === 1) {
179
+ peaks2D.push(peaks[jPeak]);
180
+ signal.x.delta += peaks[jPeak].x * peaks[jPeak].z;
181
+ signal.y.delta += peaks[jPeak].y * peaks[jPeak].z;
182
+ sumZ += peaks[jPeak].z;
183
+ }
184
+ }
185
+ signal.x.delta /= sumZ;
186
+ signal.y.delta /= sumZ;
187
+ signal.peaks = peaks2D;
188
+ signals.push(signal);
189
+ }
190
+ }
191
+ return signals;
192
+ }
193
+ //# sourceMappingURL=xyzAutoSignalsPicking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xyzAutoSignalsPicking.js","sourceRoot":"","sources":["../../src/xyz/xyzAutoSignalsPicking.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
- import type { Peak2D } from 'ml-matrix-peaks-finder';
2
1
  import type { GetKernelOptions } from '../peaks/util/getKernel';
3
2
  import { MakeMandatory } from '../utilities/MakeMandatory';
4
- import type { NMRSignal2D } from './NMRSignal2D';
5
3
  import { NMRZone } from './NMRZone';
6
4
  export interface Data2D {
7
5
  z: number[][] | Float64Array[];
@@ -65,25 +63,5 @@ export interface XYZAutoZonesPickingOptions {
65
63
  */
66
64
  kernel?: GetKernelOptions;
67
65
  }
68
- export type NMRSignal2DWithID<T extends Peak2D = Peak2D> = MakeMandatory<NMRSignal2D<T>, 'id'>;
69
66
  export type NMRZoneWithID = MakeMandatory<NMRZone, 'id'>;
70
67
  export declare function xyzAutoZonesPicking(spectraData: Data2D, options: XYZAutoZonesPickingOptions): NMRZoneWithID[];
71
- /**
72
- * This function converts a set of 2D-peaks in 2D-signals. Each signal could be composed
73
- * of many 2D-peaks, and it has some additional information related to the NMR spectrum.
74
- * @private
75
- */
76
- export interface CreateSignals2DOptions {
77
- nCols: number;
78
- nRows: number;
79
- absoluteData: number[] | Float64Array;
80
- originalData: number[] | Float64Array;
81
- observedFrequencies: number[] | Float64Array;
82
- tolerances: number[];
83
- nuclei: string[];
84
- realTopDetection: boolean;
85
- minY: number;
86
- maxY: number;
87
- minX: number;
88
- maxX: number;
89
- }
@@ -1,223 +1,11 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
2
  Object.defineProperty(exports, "__esModule", { value: true });
29
3
  exports.xyzAutoZonesPicking = void 0;
30
- const uuid_1 = require("@lukeed/uuid");
31
- const ml_matrix_1 = require("ml-matrix");
32
- const convolution = __importStar(require("ml-matrix-convolution"));
33
- const matrixPeakFinders = __importStar(require("ml-matrix-peaks-finder"));
34
- const ml_simple_clustering_1 = __importDefault(require("ml-simple-clustering"));
35
- const addMissingIDs_1 = require("../peaks/util/addMissingIDs");
36
- const determineRealTop_1 = require("../peaks/util/determineRealTop");
37
- const getKernel_1 = require("../peaks/util/getKernel");
38
- const PeakOptimizer = __importStar(require("../peaks/util/peakOptimizer"));
4
+ const __1 = require("..");
39
5
  const formatZone_1 = require("./util/formatZone");
40
- const smallFilter = [
41
- [0, 0, 1, 2, 2, 2, 1, 0, 0],
42
- [0, 1, 4, 7, 7, 7, 4, 1, 0],
43
- [1, 4, 5, 3, 0, 3, 5, 4, 1],
44
- [2, 7, 3, -12, -23, -12, 3, 7, 2],
45
- [2, 7, 0, -23, -40, -23, 0, 7, 2],
46
- [2, 7, 3, -12, -23, -12, 3, 7, 2],
47
- [1, 4, 5, 3, 0, 3, 5, 4, 1],
48
- [0, 1, 3, 7, 7, 7, 3, 1, 0],
49
- [0, 0, 1, 2, 2, 2, 1, 0, 0],
50
- ];
51
6
  function xyzAutoZonesPicking(spectraData, options) {
52
- let { sizeToPad = 14, realTopDetection = true, thresholdFactor = 0.5, nuclei = ['1H', '1H'], observedFrequencies, enhanceSymmetry = false, clean = true, maxPercentCutOff = 0.03, tolerances = [24, 24], convolutionByFFT = true, kernel: kernelOptions, } = options;
53
- if (!Array.isArray(observedFrequencies) &&
54
- !ArrayBuffer.isView(observedFrequencies)) {
55
- throw new Error('observedFrequencies is mandatory');
56
- }
57
- thresholdFactor = thresholdFactor === 0 ? 1 : Math.abs(thresholdFactor);
58
- let nbPoints = spectraData.z[0].length;
59
- let nbSubSpectra = spectraData.z.length;
60
- if (nbSubSpectra < sizeToPad) {
61
- spectraData = padData(spectraData, { width: sizeToPad });
62
- nbPoints = spectraData.z[0].length;
63
- nbSubSpectra = spectraData.z.length;
64
- }
65
- let absoluteData = new Float64Array(nbPoints * nbSubSpectra);
66
- let originalData = new Float64Array(nbPoints * nbSubSpectra);
67
- for (let iSubSpectra = 0; iSubSpectra < nbSubSpectra; iSubSpectra++) {
68
- let spectrum = spectraData.z[iSubSpectra];
69
- for (let iCol = 0; iCol < nbPoints; iCol++) {
70
- let index = iSubSpectra * nbPoints + iCol;
71
- absoluteData[index] = Math.abs(spectrum[iCol]);
72
- originalData[index] = spectrum[iCol]; //@todo pensar si se puede evitar originalData
73
- }
74
- }
75
- const kernel = kernelOptions ? (0, getKernel_1.getKernel)(kernelOptions) : smallFilter;
76
- let convolutedSpectrum = convolutionByFFT
77
- ? convolution.fft(absoluteData, kernel, {
78
- rows: nbSubSpectra,
79
- cols: nbPoints,
80
- })
81
- : convolution.direct(absoluteData, kernel, {
82
- rows: nbSubSpectra,
83
- cols: nbPoints,
84
- });
85
- let peaksMC1 = matrixPeakFinders.findPeaks2DRegion(absoluteData, {
86
- originalData,
87
- filteredData: convolutedSpectrum,
88
- rows: nbSubSpectra,
89
- cols: nbPoints,
90
- nStdDev: thresholdFactor,
91
- });
92
- if (clean) {
93
- // Remove peaks with less than x% of the intensity of the highest peak
94
- peaksMC1 = PeakOptimizer.clean(peaksMC1, maxPercentCutOff);
95
- }
96
- let signals = createSignals2D((0, addMissingIDs_1.addMissingIDs)(peaksMC1), {
97
- nRows: nbSubSpectra,
98
- nCols: nbPoints,
99
- minX: spectraData.minX,
100
- maxX: spectraData.maxX,
101
- minY: spectraData.minY,
102
- maxY: spectraData.maxY,
103
- absoluteData,
104
- originalData,
105
- tolerances,
106
- nuclei,
107
- observedFrequencies,
108
- realTopDetection,
109
- });
110
- if (enhanceSymmetry) {
111
- signals = PeakOptimizer.enhanceSymmetry(signals);
112
- }
7
+ const signals = (0, __1.xyzAutoSignalsPicking)(spectraData, options);
113
8
  return (0, formatZone_1.formatZones)(signals);
114
9
  }
115
10
  exports.xyzAutoZonesPicking = xyzAutoZonesPicking;
116
- function createSignals2D(peaks, options) {
117
- let { nCols, nRows, absoluteData, originalData, observedFrequencies, tolerances, nuclei, realTopDetection, minY, maxY, minX, maxX, } = options;
118
- let [nucleusX, nucleusY] = nuclei;
119
- let [toleranceX, toleranceY] = tolerances;
120
- let [observeFrequencyX, observeFrequencyY] = observedFrequencies;
121
- let dy = (maxY - minY) / (nRows - 1);
122
- let dx = (maxX - minX) / (nCols - 1);
123
- if (realTopDetection) {
124
- peaks = (0, determineRealTop_1.determineRealTop)(peaks, {
125
- nCols,
126
- absoluteData,
127
- originalData,
128
- minX,
129
- maxX,
130
- minY,
131
- maxY,
132
- });
133
- }
134
- for (let i = peaks.length - 1; i >= 0; i--) {
135
- let { x, y } = peaks[i];
136
- peaks[i].x = minX + dx * x;
137
- peaks[i].y = minY + dy * y;
138
- peaks[i].minX = minX + dx * peaks[i].minX;
139
- peaks[i].minY = minY + dy * peaks[i].minY;
140
- peaks[i].maxX = minX + dx * peaks[i].maxX;
141
- peaks[i].maxY = minY + dy * peaks[i].maxY;
142
- // Still having problems to correctly detect peaks on those areas. So I'm removing everything there.
143
- }
144
- // The connectivity matrix is an square and symmetric matrix, so we'll only store the upper diagonal in an
145
- // array like form
146
- let connectivity = [];
147
- for (let i = 0; i < peaks.length; i++) {
148
- for (let j = i; j < peaks.length; j++) {
149
- if (Math.abs(peaks[i].x - peaks[j].x) * observeFrequencyX < toleranceX &&
150
- Math.abs(peaks[i].y - peaks[j].y) * observeFrequencyY < toleranceY) {
151
- // 24*24Hz We cannot distinguish peaks with less than 20 Hz of separation
152
- connectivity.push(1);
153
- }
154
- else {
155
- connectivity.push(0);
156
- }
157
- }
158
- }
159
- let clusters = (0, ml_simple_clustering_1.default)(connectivity);
160
- let signals = [];
161
- if (clusters) {
162
- for (const cluster of clusters) {
163
- let signal = {
164
- id: (0, uuid_1.v4)(),
165
- x: {
166
- delta: 0,
167
- nucleus: nucleusX,
168
- resolution: dx,
169
- },
170
- y: {
171
- delta: 0,
172
- nucleus: nucleusY,
173
- resolution: dy,
174
- },
175
- };
176
- let peaks2D = [];
177
- let sumZ = 0;
178
- for (let jPeak = 0; jPeak < cluster.length; jPeak++) {
179
- if (cluster[jPeak] === 1) {
180
- peaks2D.push(peaks[jPeak]);
181
- signal.x.delta += peaks[jPeak].x * peaks[jPeak].z;
182
- signal.y.delta += peaks[jPeak].y * peaks[jPeak].z;
183
- sumZ += peaks[jPeak].z;
184
- }
185
- }
186
- signal.x.delta /= sumZ;
187
- signal.y.delta /= sumZ;
188
- signal.peaks = peaks2D;
189
- signals.push(signal);
190
- }
191
- }
192
- return signals;
193
- }
194
- function padData(spectraData, options) {
195
- let { minX, maxX, minY, maxY } = spectraData;
196
- const width = options.width;
197
- let nbPoints = spectraData.z[0].length;
198
- let nbSubSpectra = spectraData.z.length;
199
- let yInterval = (maxY - minY) / (nbSubSpectra - 1);
200
- let xInterval = (maxX - minX) / (nbPoints - 1);
201
- let yDiff = width - nbSubSpectra;
202
- let xDiff = Math.max(width - nbPoints, 0);
203
- if (xDiff % 2)
204
- xDiff++;
205
- if (yDiff % 2)
206
- yDiff++;
207
- let xOffset = xDiff / 2;
208
- let yOffset = yDiff / 2;
209
- let newMatrix = ml_matrix_1.Matrix.zeros(nbSubSpectra + yDiff, nbPoints + xDiff);
210
- for (let i = 0; i < nbSubSpectra; i++) {
211
- for (let j = 0; j < nbPoints; j++) {
212
- newMatrix.set(i + yOffset, j + xOffset, spectraData.z[i][j]);
213
- }
214
- }
215
- return {
216
- z: newMatrix.to2DArray(),
217
- minX: minX - xOffset * xInterval,
218
- maxX: maxX + xOffset * xInterval,
219
- minY: minY - yOffset * yInterval,
220
- maxY: maxY + yOffset * yInterval,
221
- };
222
- }
223
11
  //# sourceMappingURL=xyzAutoZonesPicking.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"xyzAutoZonesPicking.js","sourceRoot":"","sources":["../../src/xyz/xyzAutoZonesPicking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xyzAutoZonesPicking.js","sourceRoot":"","sources":["../../src/xyz/xyzAutoZonesPicking.ts"],"names":[],"mappings":";;;AAAA,0BAA2C;AAK3C,kDAAgD;AAmEhD,SAAgB,mBAAmB,CACjC,WAAmB,EACnB,OAAmC;IAEnC,MAAM,OAAO,GAAG,IAAA,yBAAqB,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5D,OAAO,IAAA,wBAAW,EAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAND,kDAMC"}
@@ -1,11 +1,12 @@
1
1
  export const MultiplicityPatterns = [
2
2
  { label: 'singlet', value: 's', multiplicity: 1, names: ['br s'] },
3
- { label: 'doublet', value: 'd', multiplicity: 2, names: [] },
4
3
  { label: 'triplet', value: 't', multiplicity: 3, names: [] },
4
+ { label: 'doublet', value: 'd', multiplicity: 2, names: [] },
5
5
  { label: 'quartet', value: 'q', multiplicity: 4, names: [] },
6
6
  {
7
7
  label: 'quintet',
8
8
  value: 'i',
9
+ acs: 'quint',
9
10
  multiplicity: 5,
10
11
  names: ['quint', 'qui', 'qnt', 'pentet', 'pnt', 'pent'],
11
12
  },
@@ -18,6 +19,7 @@ export const MultiplicityPatterns = [
18
19
  {
19
20
  label: 'septet',
20
21
  value: 'p',
22
+ acs: 'sept',
21
23
  multiplicity: 7,
22
24
  names: ['sept', 'spt', 'heptet', 'hpt', 'hept'],
23
25
  },
@@ -1 +1 @@
1
- {"version":3,"file":"MultiplicityPatterns.js","sourceRoot":"","sources":["../../src/constants/MultiplicityPatterns.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,oBAAoB,GAA0B;IACzD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;IAClE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D;QACE,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;KACxD;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;KACxC;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;KAChD;IACD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CAChE,CAAC"}
1
+ {"version":3,"file":"MultiplicityPatterns.js","sourceRoot":"","sources":["../../src/constants/MultiplicityPatterns.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,oBAAoB,GAA0B;IACzD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;IAClE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC5D;QACE,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,OAAO;QACZ,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;KACxD;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,GAAG;QACV,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC;KACxC;IACD;QACE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,MAAM;QACX,YAAY,EAAE,CAAC;QACf,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;KAChD;IACD,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;IAC/D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;CAChE,CAAC"}
@@ -1,3 +1,7 @@
1
1
  import { MultiplicityPatterns } from './MultiplicityPatterns';
2
+ MultiplicityPatterns.sort((a, b) => a.multiplicity !== null && b.multiplicity !== null
3
+ ? a.multiplicity - b.multiplicity
4
+ : Number.MAX_SAFE_INTEGER);
2
5
  export const couplingPatterns = MultiplicityPatterns.map((m) => m.value);
6
+ export const couplingACSPatterns = MultiplicityPatterns.map((m) => m.acs || m.value);
3
7
  //# sourceMappingURL=couplingPatterns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"couplingPatterns.js","sourceRoot":"","sources":["../../src/constants/couplingPatterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"couplingPatterns.js","sourceRoot":"","sources":["../../src/constants/couplingPatterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACjC,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI;IAChD,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,YAAY;IACjC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAC5B,CAAC;AACF,MAAM,CAAC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,GAAG,CACzD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CACxB,CAAC"}