@complat/react-spectra-editor 0.10.13-alpha.5

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 (109) hide show
  1. package/LICENSE +662 -0
  2. package/README.md +37 -0
  3. package/dist/actions/edit_peak.js +25 -0
  4. package/dist/actions/forecast.js +41 -0
  5. package/dist/actions/integration.js +33 -0
  6. package/dist/actions/jcamp.js +41 -0
  7. package/dist/actions/layout.js +17 -0
  8. package/dist/actions/manager.js +49 -0
  9. package/dist/actions/meta.js +17 -0
  10. package/dist/actions/multiplicity.js +57 -0
  11. package/dist/actions/scan.js +33 -0
  12. package/dist/actions/shift.js +25 -0
  13. package/dist/actions/status.js +33 -0
  14. package/dist/actions/submit.js +41 -0
  15. package/dist/actions/threshold.js +33 -0
  16. package/dist/actions/ui.js +50 -0
  17. package/dist/app.js +125 -0
  18. package/dist/components/cmd_bar/01_viewer.js +133 -0
  19. package/dist/components/cmd_bar/02_zoom.js +119 -0
  20. package/dist/components/cmd_bar/03_peak.js +176 -0
  21. package/dist/components/cmd_bar/04_integration.js +273 -0
  22. package/dist/components/cmd_bar/05_multiplicity.js +228 -0
  23. package/dist/components/cmd_bar/06_undo_redo.js +137 -0
  24. package/dist/components/cmd_bar/common.js +104 -0
  25. package/dist/components/cmd_bar/index.js +113 -0
  26. package/dist/components/cmd_bar/r01_layout.js +351 -0
  27. package/dist/components/cmd_bar/r02_scan.js +226 -0
  28. package/dist/components/cmd_bar/r03_threshold.js +209 -0
  29. package/dist/components/cmd_bar/r04_submit.js +349 -0
  30. package/dist/components/cmd_bar/r05_submit_btn.js +147 -0
  31. package/dist/components/cmd_bar/r06_predict_btn.js +307 -0
  32. package/dist/components/cmd_bar/tri_btn.js +202 -0
  33. package/dist/components/common/chem.js +115 -0
  34. package/dist/components/common/comps.js +29 -0
  35. package/dist/components/common/draw.js +41 -0
  36. package/dist/components/d3_line/index.js +236 -0
  37. package/dist/components/d3_line/line_focus.js +765 -0
  38. package/dist/components/d3_rect/index.js +200 -0
  39. package/dist/components/d3_rect/rect_focus.js +301 -0
  40. package/dist/components/forecast/comps.js +337 -0
  41. package/dist/components/forecast/ir_comps.js +224 -0
  42. package/dist/components/forecast/ir_viewer.js +172 -0
  43. package/dist/components/forecast/nmr_comps.js +253 -0
  44. package/dist/components/forecast/nmr_viewer.js +170 -0
  45. package/dist/components/forecast/section_loading.js +95 -0
  46. package/dist/components/forecast_viewer.js +190 -0
  47. package/dist/components/panel/compare.js +370 -0
  48. package/dist/components/panel/index.js +191 -0
  49. package/dist/components/panel/info.js +335 -0
  50. package/dist/components/panel/multiplicity.js +405 -0
  51. package/dist/components/panel/multiplicity_coupling.js +195 -0
  52. package/dist/components/panel/multiplicity_select.js +114 -0
  53. package/dist/components/panel/peaks.js +296 -0
  54. package/dist/constants/action_type.js +140 -0
  55. package/dist/constants/list_layout.js +23 -0
  56. package/dist/constants/list_shift.js +480 -0
  57. package/dist/constants/list_ui.js +33 -0
  58. package/dist/fn.js +31 -0
  59. package/dist/helpers/brush.js +109 -0
  60. package/dist/helpers/calc.js +10 -0
  61. package/dist/helpers/carbonFeatures.js +47 -0
  62. package/dist/helpers/cfg.js +89 -0
  63. package/dist/helpers/chem.js +594 -0
  64. package/dist/helpers/compass.js +91 -0
  65. package/dist/helpers/converter.js +74 -0
  66. package/dist/helpers/extractParams.js +77 -0
  67. package/dist/helpers/extractPeaksEdit.js +69 -0
  68. package/dist/helpers/focus.js +15 -0
  69. package/dist/helpers/format.js +403 -0
  70. package/dist/helpers/init.js +80 -0
  71. package/dist/helpers/integration.js +30 -0
  72. package/dist/helpers/mount.js +112 -0
  73. package/dist/helpers/multiplicity.js +44 -0
  74. package/dist/helpers/multiplicity_calc.js +117 -0
  75. package/dist/helpers/multiplicity_complat.js +126 -0
  76. package/dist/helpers/multiplicity_manual.js +94 -0
  77. package/dist/helpers/multiplicity_verify_basic.js +196 -0
  78. package/dist/helpers/shift.js +48 -0
  79. package/dist/helpers/zoom.js +32 -0
  80. package/dist/index.js +705 -0
  81. package/dist/layer_content.js +125 -0
  82. package/dist/layer_init.js +231 -0
  83. package/dist/layer_prism.js +186 -0
  84. package/dist/reducers/index.js +89 -0
  85. package/dist/reducers/reducer_edit_peak.js +111 -0
  86. package/dist/reducers/reducer_forecast.js +113 -0
  87. package/dist/reducers/reducer_integration.js +136 -0
  88. package/dist/reducers/reducer_jcamp.js +74 -0
  89. package/dist/reducers/reducer_layout.js +27 -0
  90. package/dist/reducers/reducer_manager.js +20 -0
  91. package/dist/reducers/reducer_meta.js +30 -0
  92. package/dist/reducers/reducer_multiplicity.js +131 -0
  93. package/dist/reducers/reducer_scan.js +55 -0
  94. package/dist/reducers/reducer_shift.js +99 -0
  95. package/dist/reducers/reducer_simulation.js +30 -0
  96. package/dist/reducers/reducer_status.js +41 -0
  97. package/dist/reducers/reducer_submit.js +54 -0
  98. package/dist/reducers/reducer_threshold.js +34 -0
  99. package/dist/reducers/reducer_ui.js +46 -0
  100. package/dist/reducers/undo_redo_config.js +24 -0
  101. package/dist/sagas/index.js +50 -0
  102. package/dist/sagas/saga_edit_peak.js +84 -0
  103. package/dist/sagas/saga_manager.js +116 -0
  104. package/dist/sagas/saga_meta.js +46 -0
  105. package/dist/sagas/saga_multiplicity.js +387 -0
  106. package/dist/sagas/saga_ui.js +392 -0
  107. package/dist/third_party/jAnalyzer.js +596 -0
  108. package/dist/third_party/peakInterval.js +107 -0
  109. package/package.json +77 -0
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _format = require('./format');
8
+
9
+ var _format2 = _interopRequireDefault(_format);
10
+
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+
13
+ var btnCmdAnaViewer = function btnCmdAnaViewer(layoutSt) {
14
+ return _format2.default.isMsLayout(layoutSt) || _format2.default.isRamanLayout(layoutSt) || _format2.default.is19FLayout(layoutSt) || _format2.default.isUvVisLayout(layoutSt) || _format2.default.isHplcUvVisLayout(layoutSt) || _format2.default.isTGALayout(layoutSt) || _format2.default.isXRDLayout(layoutSt);
15
+ };
16
+
17
+ var hideCmdAnaViewer = function hideCmdAnaViewer() {
18
+ return false;
19
+ };
20
+
21
+ var btnCmdAddPeak = function btnCmdAddPeak(layoutSt) {
22
+ return _format2.default.isMsLayout(layoutSt);
23
+ };
24
+
25
+ var btnCmdRmPeak = function btnCmdRmPeak(layoutSt) {
26
+ return _format2.default.isMsLayout(layoutSt);
27
+ };
28
+
29
+ var btnCmdSetRef = function btnCmdSetRef(layoutSt) {
30
+ return !_format2.default.isNmrLayout(layoutSt);
31
+ };
32
+
33
+ var btnCmdIntg = function btnCmdIntg(layoutSt) {
34
+ return !(_format2.default.isNmrLayout(layoutSt) || _format2.default.isUvVisLayout(layoutSt) || _format2.default.isHplcUvVisLayout(layoutSt));
35
+ };
36
+
37
+ var btnCmdMpy = function btnCmdMpy(layoutSt) {
38
+ return !_format2.default.isNmrLayout(layoutSt);
39
+ };
40
+
41
+ var btnCmdMpyPeak = function btnCmdMpyPeak(layoutSt, mpySt) {
42
+ var smExtext = mpySt.smExtext;
43
+
44
+ return btnCmdMpy(layoutSt) || !smExtext;
45
+ };
46
+
47
+ var hideCmdThres = function hideCmdThres(layoutSt) {
48
+ return _format2.default.isMsLayout(layoutSt);
49
+ };
50
+
51
+ var btnCmdThres = function btnCmdThres(thresVal) {
52
+ return !thresVal;
53
+ };
54
+
55
+ // const hidePanelPeak = layoutSt => Format.isMsLayout(layoutSt);
56
+ var hidePanelPeak = function hidePanelPeak(layoutSt) {
57
+ return true;
58
+ }; // eslint-disable-line
59
+
60
+ var hidePanelMpy = function hidePanelMpy(layoutSt) {
61
+ return !_format2.default.isNmrLayout(layoutSt);
62
+ };
63
+
64
+ var hidePanelCompare = function hidePanelCompare(layoutSt) {
65
+ return !(_format2.default.isIrLayout(layoutSt) || _format2.default.isUvVisLayout(layoutSt) || _format2.default.isHplcUvVisLayout(layoutSt));
66
+ };
67
+
68
+ var hideSolvent = function hideSolvent(layoutSt) {
69
+ return !_format2.default.isNmrLayout(layoutSt);
70
+ };
71
+
72
+ var Config = {
73
+ btnCmdAnaViewer: btnCmdAnaViewer,
74
+ hideCmdAnaViewer: hideCmdAnaViewer,
75
+ btnCmdAddPeak: btnCmdAddPeak,
76
+ btnCmdRmPeak: btnCmdRmPeak,
77
+ btnCmdSetRef: btnCmdSetRef,
78
+ btnCmdIntg: btnCmdIntg,
79
+ btnCmdMpy: btnCmdMpy,
80
+ btnCmdMpyPeak: btnCmdMpyPeak,
81
+ hideCmdThres: hideCmdThres,
82
+ btnCmdThres: btnCmdThres,
83
+ hidePanelPeak: hidePanelPeak,
84
+ hidePanelMpy: hidePanelMpy,
85
+ hidePanelCompare: hidePanelCompare,
86
+ hideSolvent: hideSolvent
87
+ };
88
+
89
+ exports.default = Config;
@@ -0,0 +1,594 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.GetComparisons = exports.Convert2Thres = exports.Convert2Scan = exports.Convert2Peak = exports.ToFrequency = exports.ToShiftPeaks = exports.ToThresEndPts = exports.Feature2Peak = exports.Topic2Seed = exports.ExtractJcamp = undefined;
7
+
8
+ var _jcampconverter = require('jcampconverter');
9
+
10
+ var _jcampconverter2 = _interopRequireDefault(_jcampconverter);
11
+
12
+ var _reselect = require('reselect');
13
+
14
+ var _shift = require('./shift');
15
+
16
+ var _cfg = require('./cfg');
17
+
18
+ var _cfg2 = _interopRequireDefault(_cfg);
19
+
20
+ var _format = require('./format');
21
+
22
+ var _format2 = _interopRequireDefault(_format);
23
+
24
+ var _list_layout = require('../constants/list_layout');
25
+
26
+ var _integration = require('./integration');
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
31
+
32
+ var getTopic = function getTopic(_, props) {
33
+ return props.topic;
34
+ };
35
+
36
+ var getFeature = function getFeature(_, props) {
37
+ return props.feature;
38
+ };
39
+
40
+ var getLayout = function getLayout(state, _) {
41
+ return state.layout;
42
+ }; // eslint-disable-line
43
+
44
+ var getShiftOffset = function getShiftOffset(state, _) {
45
+ // eslint-disable-line
46
+ var shift = state.shift;
47
+ var ref = shift.ref,
48
+ peak = shift.peak;
49
+
50
+ return (0, _shift.FromManualToOffset)(ref, peak);
51
+ };
52
+
53
+ var calcXYK = function calcXYK(xs, ys, maxY, offset) {
54
+ var sp = [];
55
+ var k = 0;
56
+ for (var i = 0; i < ys.length; i += 1) {
57
+ // no-downsample
58
+ var x = xs[i] - offset;
59
+ var y = ys[i];
60
+ var cy = y / maxY;
61
+ if (cy > 0.0) {
62
+ k += cy;
63
+ }
64
+ sp.push({ x: x, y: y, k: k });
65
+ }
66
+ return sp;
67
+ };
68
+
69
+ var calcXY = function calcXY(xs, ys, maxY, offset) {
70
+ var sp = [];
71
+ for (var i = 0; i < ys.length; i += 1) {
72
+ // no-downsample
73
+ var x = xs[i] - offset;
74
+ var y = ys[i];
75
+ sp.push({ x: x, y: y });
76
+ }
77
+ return sp;
78
+ };
79
+
80
+ var convertTopic = function convertTopic(topic, layout, feature, offset) {
81
+ var maxY = feature.maxY;
82
+
83
+ var xs = topic.x;
84
+ var ys = topic.y;
85
+
86
+ var isItgDisable = _cfg2.default.btnCmdIntg(layout);
87
+ if (!isItgDisable) return calcXYK(xs, ys, maxY, offset);
88
+ return calcXY(xs, ys, maxY, offset);
89
+ };
90
+
91
+ var Topic2Seed = (0, _reselect.createSelector)(getTopic, getLayout, getFeature, getShiftOffset, convertTopic);
92
+
93
+ var getOthers = function getOthers(_, props) {
94
+ return props.comparisons;
95
+ };
96
+
97
+ var calcRescaleXY = function calcRescaleXY(xs, ys, minY, maxY, show) {
98
+ var sp = [];
99
+ if (xs.length < 1) return sp;
100
+ var _ref = [Math.min.apply(Math, _toConsumableArray(ys)), Math.max.apply(Math, _toConsumableArray(ys))],
101
+ lowerY = _ref[0],
102
+ upperY = _ref[1];
103
+
104
+ var faktor = (maxY - minY) / (upperY - lowerY);
105
+ for (var i = 0; i < ys.length; i += 2) {
106
+ // downsample
107
+ var x = xs[i];
108
+ var y = (ys[i] - lowerY) * faktor + minY;
109
+ sp.push({ x: x, y: y });
110
+ }
111
+ return { data: sp, show: show };
112
+ };
113
+
114
+ var convertComparisons = function convertComparisons(layout, comparisons, feature) {
115
+ var minY = feature.minY,
116
+ maxY = feature.maxY;
117
+
118
+ if (!comparisons || !(_format2.default.isIrLayout(layout) || _format2.default.isHplcUvVisLayout(layout) || _format2.default.isUvVisLayout(layout))) return [];
119
+ return comparisons.map(function (c) {
120
+ var spectra = c.spectra,
121
+ show = c.show;
122
+
123
+ var topic = spectra[0].data[0];
124
+ var xs = topic.x;
125
+ var ys = topic.y;
126
+ return calcRescaleXY(xs, ys, minY, maxY, show);
127
+ });
128
+ };
129
+
130
+ var GetComparisons = (0, _reselect.createSelector)(getLayout, getOthers, getFeature, convertComparisons);
131
+
132
+ var convertFrequency = function convertFrequency(layout, feature) {
133
+ if (['1H', '13C', '19F', '31P', '15N', '29Si'].indexOf(layout) < 0) return false;
134
+ var observeFrequency = feature.observeFrequency;
135
+
136
+ var freq = Array.isArray(observeFrequency) ? observeFrequency[0] : observeFrequency;
137
+ return parseFloat(freq) || false;
138
+ };
139
+
140
+ var ToFrequency = (0, _reselect.createSelector)(getLayout, getFeature, convertFrequency);
141
+
142
+ var getThreshold = function getThreshold(state) {
143
+ return state.threshold ? state.threshold.value * 1.0 : false;
144
+ };
145
+
146
+ var Convert2Peak = function Convert2Peak(feature, threshold, offset) {
147
+ var peak = [];
148
+ if (!feature || !feature.data) return peak;
149
+ var data = feature.data[0];
150
+ var maxY = feature.maxY,
151
+ peakUp = feature.peakUp,
152
+ thresRef = feature.thresRef;
153
+
154
+ var thresVal = threshold || thresRef;
155
+ var yThres = thresVal * maxY / 100.0;
156
+ var corrOffset = offset || 0.0;
157
+ for (var i = 0; i < data.y.length; i += 1) {
158
+ var y = data.y[i];
159
+ var overThres = peakUp && Math.abs(y) >= yThres || !peakUp && Math.abs(y) <= yThres;
160
+ if (overThres) {
161
+ var x = data.x[i] - corrOffset;
162
+ peak.push({ x: x, y: y });
163
+ }
164
+ }
165
+ return peak;
166
+ };
167
+
168
+ var Feature2Peak = (0, _reselect.createSelector)(getFeature, getThreshold, getShiftOffset, Convert2Peak);
169
+
170
+ var convertThresEndPts = function convertThresEndPts(feature, threshold) {
171
+ var maxY = feature.maxY,
172
+ maxX = feature.maxX,
173
+ minX = feature.minX,
174
+ thresRef = feature.thresRef;
175
+
176
+
177
+ var thresVal = threshold || thresRef || 0;
178
+ if (!thresVal || !feature.data) return [];
179
+ var yThres = thresVal * maxY / 100.0;
180
+ var endPts = [{ x: minX - 200, y: yThres }, { x: maxX + 200, y: yThres }];
181
+ return endPts;
182
+ };
183
+
184
+ var ToThresEndPts = (0, _reselect.createSelector)(getFeature, getThreshold, convertThresEndPts);
185
+
186
+ var getShiftPeak = function getShiftPeak(state) {
187
+ return state.shift.peak;
188
+ };
189
+
190
+ var convertSfPeaks = function convertSfPeaks(peak, offset) {
191
+ if (!peak || !peak.x) return [];
192
+ return [{ x: peak.x - offset, y: peak.y }];
193
+ };
194
+
195
+ var ToShiftPeaks = (0, _reselect.createSelector)(getShiftPeak, getShiftOffset, convertSfPeaks);
196
+
197
+ // - - - - - - - - - - - - - - - - - - - - - -
198
+ // ExtractJcamp
199
+ // - - - - - - - - - - - - - - - - - - - - - -
200
+ var readLayout = function readLayout(jcamp) {
201
+ var xType = jcamp.xType,
202
+ spectra = jcamp.spectra;
203
+
204
+ if (xType && _format2.default.isNmrLayout(xType)) return xType;
205
+ var dataType = spectra[0].dataType;
206
+
207
+ if (dataType) {
208
+ if (dataType.includes('INFRARED SPECTRUM')) {
209
+ return _list_layout.LIST_LAYOUT.IR;
210
+ }
211
+ if (dataType.includes('RAMAN SPECTRUM')) {
212
+ return _list_layout.LIST_LAYOUT.RAMAN;
213
+ }
214
+ if (dataType.includes('UV/VIS SPECTRUM')) {
215
+ if (dataType.includes('HPLC')) {
216
+ return _list_layout.LIST_LAYOUT.HPLC_UVVIS;
217
+ }
218
+ return _list_layout.LIST_LAYOUT.UVVIS;
219
+ }
220
+ if (dataType.includes('THERMOGRAVIMETRIC ANALYSIS')) {
221
+ return _list_layout.LIST_LAYOUT.TGA;
222
+ }
223
+ if (dataType.includes('X-RAY DIFFRACTION')) {
224
+ return _list_layout.LIST_LAYOUT.XRD;
225
+ }
226
+ if (dataType.includes('MASS SPECTRUM')) {
227
+ return _list_layout.LIST_LAYOUT.MS;
228
+ }
229
+ }
230
+ return false;
231
+ };
232
+
233
+ var extrSpectraShare = function extrSpectraShare(spectra, layout) {
234
+ return spectra.map(function (s) {
235
+ return Object.assign({ layout: layout }, s);
236
+ }).filter(function (r) {
237
+ return r != null;
238
+ });
239
+ };
240
+
241
+ var extrSpectraMs = function extrSpectraMs(jcamp, layout) {
242
+ var scanCount = jcamp.info.$CSSCANCOUNT || 1;
243
+ var spc = extrSpectraShare(jcamp.spectra.slice(0, scanCount), layout);
244
+ return spc || [];
245
+ };
246
+
247
+ var extrSpectraNi = function extrSpectraNi(jcamp, layout) {
248
+ var categorys = jcamp.info.$CSCATEGORY || ['SPECTRUM'];
249
+ var targetIdx = categorys.indexOf('SPECTRUM');
250
+ var spectrum = extrSpectraShare(jcamp.spectra, layout)[targetIdx];
251
+ return [spectrum] || [jcamp.spectra[0]];
252
+ };
253
+
254
+ var calcThresRef = function calcThresRef(s, peakUp) {
255
+ var ys = s && s.data[0].y;
256
+ if (!ys) return null;
257
+ var ref = peakUp ? Math.min.apply(Math, _toConsumableArray(ys.map(function (a) {
258
+ return Math.abs(a);
259
+ }))) : Math.max.apply(Math, _toConsumableArray(ys));
260
+ return peakUp ? Math.floor(ref * 100 * 100 / s.maxY) / 100 : Math.ceil(ref * 100 * 100 / s.maxY) / 100;
261
+ };
262
+
263
+ var extractShift = function extractShift(s, jcamp) {
264
+ var shift = {
265
+ selectX: false,
266
+ solventName: false,
267
+ solventValue: false
268
+ };
269
+ if (!s) return shift;
270
+ if (s && s.sampleDescription) {
271
+ var desc = s.sampleDescription;
272
+ var info = desc.split(/;|=/);
273
+
274
+ return {
275
+ selectX: parseFloat(info[1]),
276
+ solventName: info[3],
277
+ solventValue: parseFloat(info[5])
278
+ };
279
+ }
280
+ return {
281
+ selectX: parseFloat(jcamp.info.$CSSOLVENTX) || false,
282
+ solventName: jcamp.info.$CSSOLVENTNAME || false,
283
+ solventValue: parseFloat(jcamp.info.$CSSOLVENTVALUE) || false
284
+ };
285
+ };
286
+
287
+ var buildPeakFeature = function buildPeakFeature(jcamp, layout, peakUp, s, thresRef) {
288
+ var xType = jcamp.xType,
289
+ info = jcamp.info;
290
+
291
+ var subTyp = xType ? ' - ' + xType : '';
292
+
293
+ return Object.assign({
294
+ typ: s.dataType + subTyp,
295
+ peakUp: peakUp,
296
+ thresRef: thresRef,
297
+ scanCount: +info.$CSSCANCOUNT,
298
+ scanAutoTarget: +info.$CSSCANAUTOTARGET,
299
+ scanEditTarget: +info.$CSSCANEDITTARGET,
300
+ shift: extractShift(s, jcamp),
301
+ operation: {
302
+ layout: layout,
303
+ nucleus: xType || ''
304
+ },
305
+ observeFrequency: info['.OBSERVEFREQUENCY'],
306
+ solventName: info['.SOLVENTNAME']
307
+ }, s);
308
+ };
309
+
310
+ var calcIntgRefArea = function calcIntgRefArea(spectra, stack) {
311
+ if (stack.length === 0) return 1;
312
+ var data = spectra[0].data[0];
313
+
314
+ var xs = data.x;
315
+ var ys = data.y;
316
+ var maxY = Math.max.apply(Math, _toConsumableArray(ys));
317
+ var xyk = calcXYK(xs, ys, maxY, 0);
318
+ var _stack$ = stack[0],
319
+ xL = _stack$.xL,
320
+ xU = _stack$.xU,
321
+ area = _stack$.area;
322
+
323
+ var rawArea = (0, _integration.getArea)(xL, xU, xyk);
324
+ var raw2realRatio = rawArea / area;
325
+ return { raw2realRatio: raw2realRatio };
326
+ };
327
+
328
+ var buildIntegFeature = function buildIntegFeature(jcamp, spectra) {
329
+ var _jcamp$info = jcamp.info,
330
+ $OBSERVEDINTEGRALS = _jcamp$info.$OBSERVEDINTEGRALS,
331
+ $OBSERVEDMULTIPLETS = _jcamp$info.$OBSERVEDMULTIPLETS;
332
+
333
+ var regx = /[^0-9.,-]/g;
334
+ var stack = [];
335
+ if ($OBSERVEDINTEGRALS) {
336
+ var its = $OBSERVEDINTEGRALS.split('\n').slice(1);
337
+ var itStack = its.map(function (t) {
338
+ var ts = t.replace(regx, '').split(',');
339
+ return {
340
+ xL: parseFloat(ts[0]),
341
+ xU: parseFloat(ts[1]),
342
+ area: parseFloat(ts[2])
343
+ };
344
+ });
345
+ stack = [].concat(_toConsumableArray(stack), _toConsumableArray(itStack));
346
+ }
347
+ if ($OBSERVEDMULTIPLETS) {
348
+ var mps = $OBSERVEDMULTIPLETS.split('\n');
349
+ var mpStack = mps.map(function (m) {
350
+ var ms = m.replace(regx, '').split(',');
351
+ return {
352
+ xL: parseFloat(ms[1]),
353
+ xU: parseFloat(ms[2]),
354
+ area: parseFloat(ms[4])
355
+ };
356
+ });
357
+ stack = [].concat(_toConsumableArray(stack), _toConsumableArray(mpStack));
358
+ }
359
+
360
+ var _calcIntgRefArea = calcIntgRefArea(spectra, stack),
361
+ raw2realRatio = _calcIntgRefArea.raw2realRatio;
362
+
363
+ var mStack = stack.map(function (st) {
364
+ return Object.assign({}, st, { area: st.area * raw2realRatio });
365
+ });
366
+
367
+ return {
368
+ refArea: raw2realRatio,
369
+ refFactor: 1,
370
+ shift: 0,
371
+ stack: mStack,
372
+ originStack: stack
373
+ };
374
+ };
375
+
376
+ /*
377
+ const range = (head, tail, length) => {
378
+ const actTail = tail || length - 1;
379
+ return (
380
+ Array(actTail - head + 1).fill().map((_, idx) => head + idx)
381
+ );
382
+ };
383
+ */
384
+
385
+ var buildSimFeature = function buildSimFeature(jcamp) {
386
+ var $CSSIMULATIONPEAKS = jcamp.info.$CSSIMULATIONPEAKS;
387
+
388
+ var nmrSimPeaks = $CSSIMULATIONPEAKS ? $CSSIMULATIONPEAKS.split('\n') : [];
389
+ nmrSimPeaks = nmrSimPeaks.map(function (x) {
390
+ return parseFloat(x).toFixed(2);
391
+ });
392
+ return {
393
+ nmrSimPeaks: nmrSimPeaks
394
+ };
395
+ };
396
+
397
+ var buildMpyFeature = function buildMpyFeature(jcamp) {
398
+ var _jcamp$info2 = jcamp.info,
399
+ $OBSERVEDMULTIPLETS = _jcamp$info2.$OBSERVEDMULTIPLETS,
400
+ $OBSERVEDMULTIPLETSPEAKS = _jcamp$info2.$OBSERVEDMULTIPLETSPEAKS;
401
+
402
+ var regx = /[^A-Za-z0-9.,-]/g;
403
+ var regxNum = /[^0-9.]/g;
404
+ var stack = [];
405
+ if (!$OBSERVEDMULTIPLETSPEAKS) return { stack: [] };
406
+ var allPeaks = $OBSERVEDMULTIPLETSPEAKS.split('\n').map(function (p) {
407
+ return p.replace(regx, '').split(',');
408
+ });
409
+
410
+ if ($OBSERVEDMULTIPLETS) {
411
+ var mp = $OBSERVEDMULTIPLETS.split('\n');
412
+ var mpStack = mp.map(function (m) {
413
+ var ms = m.replace(regx, '').split(',');
414
+ var idx = ms[0];
415
+ var ys = [];
416
+ var peaks = allPeaks.map(function (p) {
417
+ if (p[0] === idx) {
418
+ ys = [].concat(_toConsumableArray(ys), [parseFloat(p[2])]);
419
+ return { x: parseFloat(p[1]), y: parseFloat(p[2]) };
420
+ }
421
+ return null;
422
+ }).filter(function (r) {
423
+ return r != null;
424
+ });
425
+ var js = m.split(',');
426
+ js = js[js.length - 1].split(' ').map(function (j) {
427
+ return parseFloat(j.replace(regxNum, ''));
428
+ }).filter(Boolean);
429
+
430
+ return {
431
+ js: js,
432
+ mpyType: ms[6],
433
+ xExtent: {
434
+ xL: parseFloat(ms[1]),
435
+ xU: parseFloat(ms[2])
436
+ },
437
+ yExtent: {
438
+ yL: Math.min.apply(Math, _toConsumableArray(ys)),
439
+ yU: Math.max.apply(Math, _toConsumableArray(ys))
440
+ },
441
+ peaks: peaks
442
+ };
443
+ });
444
+ stack = [].concat(_toConsumableArray(stack), _toConsumableArray(mpStack));
445
+ }
446
+
447
+ return {
448
+ stack: stack,
449
+ shift: 0,
450
+ smExtext: false
451
+ };
452
+ };
453
+
454
+ var isPeakTable = function isPeakTable(s) {
455
+ return s.dataType && (s.dataType.includes('PEAKTABLE') || s.dataType.includes('PEAK ASSIGNMENTS'));
456
+ };
457
+
458
+ var extrFeaturesNi = function extrFeaturesNi(jcamp, layout, peakUp, spectra) {
459
+ var nfs = {};
460
+ var category = jcamp.info.$CSCATEGORY;
461
+ if (category) {
462
+ var idxEditPeak = category.indexOf('EDIT_PEAK');
463
+ if (idxEditPeak >= 0) {
464
+ var sEP = jcamp.spectra[idxEditPeak];
465
+ var thresRef = calcThresRef(sEP, peakUp);
466
+ nfs.editPeak = buildPeakFeature(jcamp, layout, peakUp, sEP, thresRef);
467
+ }
468
+ var idxAutoPeak = category.indexOf('AUTO_PEAK');
469
+ if (idxAutoPeak >= 0) {
470
+ var sAP = jcamp.spectra[idxAutoPeak];
471
+ var _thresRef = calcThresRef(sAP, peakUp);
472
+ nfs.autoPeak = buildPeakFeature(jcamp, layout, peakUp, sAP, _thresRef);
473
+ }
474
+ nfs.integration = buildIntegFeature(jcamp, spectra);
475
+ nfs.multiplicity = buildMpyFeature(jcamp);
476
+ nfs.simulation = buildSimFeature(jcamp);
477
+ return nfs;
478
+ }
479
+ // workaround for legacy design
480
+ var features = jcamp.spectra.map(function (s) {
481
+ var thresRef = calcThresRef(s, peakUp);
482
+ return isPeakTable(s) ? buildPeakFeature(jcamp, layout, peakUp, s, thresRef) : null;
483
+ }).filter(function (r) {
484
+ return r != null;
485
+ });
486
+
487
+ return { editPeak: features[0], autoPeak: features[1] };
488
+ };
489
+
490
+ var extrFeaturesXrd = function extrFeaturesXrd(jcamp, layout, peakUp) {
491
+ var base = jcamp.spectra[0];
492
+
493
+ var features = jcamp.spectra.map(function (s) {
494
+ var cpo = buildPeakFeature(jcamp, layout, peakUp, s, 100);
495
+ var bnd = getBoundary(s);
496
+ return Object.assign({}, base, cpo, bnd);
497
+ }).filter(function (r) {
498
+ return r != null;
499
+ });
500
+
501
+ return features;
502
+ };
503
+
504
+ var getBoundary = function getBoundary(s) {
505
+ var _s$data$ = s.data[0],
506
+ x = _s$data$.x,
507
+ y = _s$data$.y;
508
+
509
+ var maxX = Math.max.apply(Math, _toConsumableArray(x));
510
+ var minX = Math.min.apply(Math, _toConsumableArray(x));
511
+ var maxY = Math.max.apply(Math, _toConsumableArray(y));
512
+ var minY = Math.min.apply(Math, _toConsumableArray(y));
513
+ return {
514
+ maxX: maxX, minX: minX, maxY: maxY, minY: minY
515
+ };
516
+ };
517
+
518
+ var extrFeaturesMs = function extrFeaturesMs(jcamp, layout, peakUp) {
519
+ // const nfs = {};
520
+ // const category = jcamp.info.$CSCATEGORY;
521
+ // const scanCount = parseInt(jcamp.info.$CSSCANCOUNT, 10) - 1;
522
+ // if (category) {
523
+ // const idxEditPeak = category.indexOf('EDIT_PEAK');
524
+ // if (idxEditPeak >= 0) {
525
+ // const sEP = jcamp.spectra[idxEditPeak + scanCount];
526
+ // const thresRef = calcThresRef(sEP, peakUp);
527
+ // nfs.editPeak = buildPeakFeature(jcamp, layout, peakUp, sEP, thresRef);
528
+ // }
529
+ // const idxAutoPeak = category.indexOf('AUTO_PEAK');
530
+ // if (idxAutoPeak >= 0) {
531
+ // const sAP = jcamp.spectra[idxAutoPeak + scanCount];
532
+ // const thresRef = calcThresRef(sAP, peakUp);
533
+ // nfs.autoPeak = buildPeakFeature(jcamp, layout, peakUp, sAP, thresRef);
534
+ // }
535
+ // return nfs;
536
+ // }
537
+ // // workaround for legacy design
538
+ var thresRef = jcamp.info && jcamp.info.$CSTHRESHOLD * 100 || 5;
539
+ var base = jcamp.spectra[0];
540
+
541
+ var features = jcamp.spectra.map(function (s) {
542
+ var cpo = buildPeakFeature(jcamp, layout, peakUp, s, +thresRef.toFixed(4));
543
+ var bnd = getBoundary(s);
544
+ return Object.assign({}, base, cpo, bnd);
545
+ }).filter(function (r) {
546
+ return r != null;
547
+ });
548
+
549
+ return features;
550
+ };
551
+
552
+ var ExtractJcamp = function ExtractJcamp(source) {
553
+ var jcamp = _jcampconverter2.default.convert(source, {
554
+ xy: true,
555
+ keepRecordsRegExp: /(\$CSTHRESHOLD|\$CSSCANAUTOTARGET|\$CSSCANEDITTARGET|\$CSSCANCOUNT|\$CSSOLVENTNAME|\$CSSOLVENTVALUE|\$CSSOLVENTX|\$CSCATEGORY|\$CSITAREA|\$CSITFACTOR|\$OBSERVEDINTEGRALS|\$OBSERVEDMULTIPLETS|\$OBSERVEDMULTIPLETSPEAKS|\.SOLVENTNAME|\.OBSERVEFREQUENCY|\$CSSIMULATIONPEAKS)/ // eslint-disable-line
556
+ });
557
+ var layout = readLayout(jcamp);
558
+ var peakUp = !_format2.default.isIrLayout(layout);
559
+
560
+ var spectra = _format2.default.isMsLayout(layout) ? extrSpectraMs(jcamp, layout) : extrSpectraNi(jcamp, layout);
561
+ // const features = Format.isMsLayout(layout)
562
+ // ? extrFeaturesMs(jcamp, layout, peakUp)
563
+ // : extrFeaturesNi(jcamp, layout, peakUp, spectra);
564
+ var features = _format2.default.isMsLayout(layout) ? extrFeaturesMs(jcamp, layout, peakUp) : _format2.default.isXRDLayout(layout) ? extrFeaturesXrd(jcamp, layout, peakUp) : extrFeaturesNi(jcamp, layout, peakUp, spectra);
565
+
566
+ return { spectra: spectra, features: features, layout: layout };
567
+ };
568
+
569
+ var Convert2Scan = function Convert2Scan(feature, scanSt) {
570
+ var scanAutoTarget = feature.scanAutoTarget,
571
+ scanEditTarget = feature.scanEditTarget;
572
+ var target = scanSt.target,
573
+ isAuto = scanSt.isAuto;
574
+
575
+ var hasEdit = !!scanEditTarget;
576
+ var defaultIdx = isAuto || !hasEdit ? scanAutoTarget : scanEditTarget;
577
+ return target || defaultIdx;
578
+ };
579
+
580
+ var Convert2Thres = function Convert2Thres(feature, thresSt) {
581
+ var value = thresSt.value || feature.thresRef;
582
+ return value;
583
+ };
584
+
585
+ exports.ExtractJcamp = ExtractJcamp;
586
+ exports.Topic2Seed = Topic2Seed;
587
+ exports.Feature2Peak = Feature2Peak;
588
+ exports.ToThresEndPts = ToThresEndPts;
589
+ exports.ToShiftPeaks = ToShiftPeaks;
590
+ exports.ToFrequency = ToFrequency;
591
+ exports.Convert2Peak = Convert2Peak;
592
+ exports.Convert2Scan = Convert2Scan;
593
+ exports.Convert2Thres = Convert2Thres;
594
+ exports.GetComparisons = GetComparisons;