@complat/react-spectra-editor 1.0.0-rc2 → 1.0.0-rc20.patch-1

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 (202) hide show
  1. package/README.md +16 -0
  2. package/dist/__tests__/fixtures/aif_jcamp_1.js +136 -0
  3. package/dist/__tests__/fixtures/aif_jcamp_2.js +122 -0
  4. package/dist/__tests__/fixtures/backup/nmr1h_a.js +3518 -0
  5. package/dist/__tests__/fixtures/backup/xrd_jcamp_1.js +10705 -0
  6. package/dist/__tests__/fixtures/cds_jcamp.js +861 -0
  7. package/dist/__tests__/fixtures/compare_ir_1_jcamp.js +585 -0
  8. package/dist/__tests__/fixtures/compare_ir_2_jcamp.js +515 -0
  9. package/dist/__tests__/fixtures/compare_uv_vis_jcamp.js +640 -0
  10. package/dist/__tests__/fixtures/cyclic_voltammetry_1.js +778 -0
  11. package/dist/__tests__/fixtures/cyclic_voltammetry_2.js +758 -0
  12. package/dist/__tests__/fixtures/cyclic_voltammetry_3.js +759 -0
  13. package/dist/__tests__/fixtures/dls_acf_jcamp.js +148 -0
  14. package/dist/__tests__/fixtures/dls_intensity_jcamp.js +151 -0
  15. package/dist/__tests__/fixtures/emissions_jcamp.js +883 -0
  16. package/dist/__tests__/fixtures/hplc_uvvis_jcamp.js +638 -0
  17. package/dist/__tests__/fixtures/hplc_uvvis_jcamp_2.js +221 -0
  18. package/dist/__tests__/fixtures/ir_jcamp.js +148 -0
  19. package/dist/__tests__/fixtures/ir_result.js +46 -0
  20. package/dist/__tests__/fixtures/ir_svg.js +8 -0
  21. package/dist/__tests__/fixtures/ms_jcamp.js +64 -0
  22. package/dist/__tests__/fixtures/nmr13c_dept_jcamp.js +3543 -0
  23. package/dist/__tests__/fixtures/nmr13c_jcamp.js +1229 -0
  24. package/dist/__tests__/fixtures/nmr15n_jcamp.js +7177 -0
  25. package/dist/__tests__/fixtures/nmr19f_jcamp.js +6560 -0
  26. package/dist/__tests__/fixtures/nmr1h_2_jcamp.js +2005 -0
  27. package/dist/__tests__/fixtures/nmr1h_jcamp.js +4516 -0
  28. package/dist/__tests__/fixtures/nmr29si_jcamp.js +3029 -0
  29. package/dist/__tests__/fixtures/nmr31p_jcamp.js +3418 -0
  30. package/dist/__tests__/fixtures/nmr_result.js +68 -0
  31. package/dist/__tests__/fixtures/nmr_svg.js +8 -0
  32. package/dist/__tests__/fixtures/phenylalanin.js +142 -0
  33. package/dist/__tests__/fixtures/qDescValue.js +65 -0
  34. package/dist/__tests__/fixtures/raman_jcamp.js +410 -0
  35. package/dist/__tests__/fixtures/sec_1_jcamp.js +425 -0
  36. package/dist/__tests__/fixtures/sec_2_jcamp.js +407 -0
  37. package/dist/__tests__/fixtures/sec_3_jcamp.js +408 -0
  38. package/dist/__tests__/fixtures/sec_4_jcamp.js +407 -0
  39. package/dist/__tests__/fixtures/tga_jcamp.js +4157 -0
  40. package/dist/__tests__/fixtures/uv_vis_jcamp.js +249 -0
  41. package/dist/__tests__/fixtures/xrd_jcamp_1.js +436 -0
  42. package/dist/__tests__/fixtures/xrd_jcamp_2.js +955 -0
  43. package/dist/__tests__/fixtures/xrd_jcamp_3.js +1871 -0
  44. package/dist/__tests__/units/components/panel/graph_selection.test.js +72 -0
  45. package/dist/__tests__/units/components/panel/peaks.test.js +87 -0
  46. package/dist/actions/curve.js +15 -14
  47. package/dist/actions/cyclic_voltammetry.js +40 -60
  48. package/dist/actions/edit_peak.js +8 -12
  49. package/dist/actions/forecast.js +16 -24
  50. package/dist/actions/integration.js +12 -18
  51. package/dist/actions/jcamp.js +16 -24
  52. package/dist/actions/layout.js +4 -6
  53. package/dist/actions/manager.js +20 -30
  54. package/dist/actions/meta.js +4 -6
  55. package/dist/actions/multiplicity.js +24 -36
  56. package/dist/actions/scan.js +12 -18
  57. package/dist/actions/shift.js +8 -12
  58. package/dist/actions/status.js +12 -18
  59. package/dist/actions/submit.js +16 -24
  60. package/dist/actions/threshold.js +20 -30
  61. package/dist/actions/ui.js +25 -31
  62. package/dist/actions/wavelength.js +4 -6
  63. package/dist/app.js +25 -23
  64. package/dist/components/cmd_bar/01_viewer.js +24 -34
  65. package/dist/components/cmd_bar/02_zoom.js +18 -28
  66. package/dist/components/cmd_bar/03_peak.js +50 -66
  67. package/dist/components/cmd_bar/04_integration.js +70 -84
  68. package/dist/components/cmd_bar/05_multiplicity.js +42 -56
  69. package/dist/components/cmd_bar/06_undo_redo.js +22 -36
  70. package/dist/components/cmd_bar/07_pecker.js +24 -34
  71. package/dist/components/cmd_bar/common.js +11 -7
  72. package/dist/components/cmd_bar/index.js +17 -23
  73. package/dist/components/cmd_bar/r01_layout.js +79 -56
  74. package/dist/components/cmd_bar/r02_scan.js +70 -87
  75. package/dist/components/cmd_bar/r03_threshold.js +54 -68
  76. package/dist/components/cmd_bar/r04_submit.js +71 -83
  77. package/dist/components/cmd_bar/r05_submit_btn.js +64 -72
  78. package/dist/components/cmd_bar/r06_predict_btn.js +142 -152
  79. package/dist/components/cmd_bar/r07_wavelength_btn.js +28 -36
  80. package/dist/components/cmd_bar/tri_btn.js +91 -113
  81. package/dist/components/common/chem.js +2 -3
  82. package/dist/components/common/comps.js +2 -2
  83. package/dist/components/common/draw.js +30 -11
  84. package/dist/components/d3_line/index.js +154 -176
  85. package/dist/components/d3_line/line_focus.js +595 -739
  86. package/dist/components/d3_multi/index.js +153 -174
  87. package/dist/components/d3_multi/multi_focus.js +725 -850
  88. package/dist/components/d3_rect/index.js +112 -134
  89. package/dist/components/d3_rect/rect_focus.js +163 -208
  90. package/dist/components/forecast/comps.js +60 -68
  91. package/dist/components/forecast/ir_comps.js +49 -56
  92. package/dist/components/forecast/ir_viewer.js +61 -68
  93. package/dist/components/forecast/nmr_comps.js +62 -72
  94. package/dist/components/forecast/nmr_viewer.js +59 -68
  95. package/dist/components/forecast/section_loading.js +39 -63
  96. package/dist/components/forecast_viewer.js +109 -119
  97. package/dist/components/multi_jcamps_viewer.js +97 -113
  98. package/dist/components/panel/compare.js +183 -192
  99. package/dist/components/panel/cyclic_voltamery_data.js +149 -165
  100. package/dist/components/panel/graph_selection.js +143 -132
  101. package/dist/components/panel/index.js +112 -144
  102. package/dist/components/panel/info.js +125 -132
  103. package/dist/components/panel/multiplicity.js +215 -223
  104. package/dist/components/panel/multiplicity_coupling.js +108 -136
  105. package/dist/components/panel/multiplicity_select.js +43 -51
  106. package/dist/components/panel/peaks.js +130 -132
  107. package/dist/constants/action_type.js +23 -39
  108. package/dist/constants/list_layout.js +7 -4
  109. package/dist/constants/list_shift.js +117 -103
  110. package/dist/constants/list_ui.js +3 -6
  111. package/dist/constants/list_wavelength.js +7 -8
  112. package/dist/fn.js +2 -3
  113. package/dist/helpers/brush.js +49 -65
  114. package/dist/helpers/calc.js +2 -4
  115. package/dist/helpers/carbonFeatures.js +22 -20
  116. package/dist/helpers/cfg.js +49 -67
  117. package/dist/helpers/chem.js +450 -393
  118. package/dist/helpers/compass.js +92 -83
  119. package/dist/helpers/converter.js +52 -65
  120. package/dist/helpers/extractParams.js +60 -52
  121. package/dist/helpers/extractPeaksEdit.js +29 -25
  122. package/dist/helpers/focus.js +2 -6
  123. package/dist/helpers/format.js +416 -361
  124. package/dist/helpers/init.js +41 -37
  125. package/dist/helpers/integration.js +18 -21
  126. package/dist/helpers/mount.js +57 -61
  127. package/dist/helpers/multiplicity.js +19 -24
  128. package/dist/helpers/multiplicity_calc.js +39 -50
  129. package/dist/helpers/multiplicity_complat.js +21 -47
  130. package/dist/helpers/multiplicity_manual.js +49 -55
  131. package/dist/helpers/multiplicity_verify_basic.js +108 -111
  132. package/dist/helpers/shift.js +15 -23
  133. package/dist/helpers/zoom.js +7 -11
  134. package/dist/index.js +680 -630
  135. package/dist/layer_content.js +40 -43
  136. package/dist/layer_init.js +162 -184
  137. package/dist/layer_prism.js +38 -41
  138. package/dist/reducers/index.js +2 -3
  139. package/dist/reducers/reducer_curve.js +35 -26
  140. package/dist/reducers/reducer_edit_peak.js +122 -98
  141. package/dist/reducers/reducer_forecast.js +57 -44
  142. package/dist/reducers/reducer_integration.js +135 -103
  143. package/dist/reducers/reducer_jcamp.js +49 -44
  144. package/dist/reducers/reducer_layout.js +5 -6
  145. package/dist/reducers/reducer_manager.js +5 -6
  146. package/dist/reducers/reducer_meta.js +5 -6
  147. package/dist/reducers/reducer_multiplicity.js +100 -77
  148. package/dist/reducers/reducer_scan.js +17 -20
  149. package/dist/reducers/reducer_shift.js +115 -70
  150. package/dist/reducers/reducer_simulation.js +7 -8
  151. package/dist/reducers/reducer_status.js +5 -6
  152. package/dist/reducers/reducer_submit.js +12 -15
  153. package/dist/reducers/reducer_threshold.js +5 -6
  154. package/dist/reducers/reducer_ui.js +5 -6
  155. package/dist/reducers/reducer_voltammetry.js +156 -96
  156. package/dist/reducers/reducer_wavelength.js +5 -6
  157. package/dist/reducers/undo_redo_config.js +3 -5
  158. package/dist/sagas/index.js +2 -15
  159. package/dist/sagas/saga_edit_peak.js +54 -68
  160. package/dist/sagas/saga_manager.js +86 -130
  161. package/dist/sagas/saga_meta.js +25 -31
  162. package/dist/sagas/saga_multi_entities.js +40 -103
  163. package/dist/sagas/saga_multiplicity.js +336 -406
  164. package/dist/sagas/saga_ui.js +296 -475
  165. package/dist/setupTests.js +8 -0
  166. package/dist/third_party/jAnalyzer.js +66 -67
  167. package/dist/third_party/peakInterval.js +34 -34
  168. package/package.json +14 -14
  169. package/dist/components/cmd_bar/03_peak_bk.js +0 -139
  170. package/dist/components/cmd_bar/04_integration_bk.js +0 -180
  171. package/dist/components/cmd_bar/05_multiplicity_bk.js +0 -131
  172. package/dist/components/cmd_bar/r01_layout_bk.js +0 -186
  173. package/dist/components/cmd_bar/r06_predict_btn_bk.js +0 -220
  174. package/dist/components/d3_line/line_focus_bk.js +0 -825
  175. package/dist/components/d3_multi/index_bk.js +0 -210
  176. package/dist/components/d3_multi/multi_focus_bk.js +0 -533
  177. package/dist/components/panel/compare_bk.js +0 -256
  178. package/dist/components/panel/cyclic_voltamery_data_bk.js +0 -292
  179. package/dist/components/panel/index_bk.js +0 -178
  180. package/dist/components/panel/info_bk.js +0 -235
  181. package/dist/components/panel/multiplicity_bk.js +0 -280
  182. package/dist/helpers/carbonFeatures_bk.js +0 -45
  183. package/dist/helpers/cfg_bk.js +0 -80
  184. package/dist/helpers/chem_bk.js +0 -787
  185. package/dist/helpers/compass_bk.js +0 -149
  186. package/dist/helpers/converter_bk.js +0 -96
  187. package/dist/helpers/extractPeaksEdit_bk.js +0 -53
  188. package/dist/helpers/format_bk.js +0 -497
  189. package/dist/index_bk.js +0 -640
  190. package/dist/layer_content_bk.js +0 -105
  191. package/dist/layer_init_bk.js +0 -235
  192. package/dist/layer_prism_bk.js +0 -133
  193. package/dist/reducers/reducer_edit_peak_bk.js +0 -108
  194. package/dist/reducers/reducer_integration_bk.js +0 -134
  195. package/dist/reducers/reducer_jcamp_bk.js +0 -71
  196. package/dist/reducers/reducer_multiplicity_bk.js +0 -126
  197. package/dist/reducers/reducer_shift_bk.js +0 -88
  198. package/dist/reducers/reducer_voltammetry_bk.js +0 -287
  199. package/dist/sagas/saga_edit_peak_bk.js +0 -73
  200. package/dist/sagas/saga_multi_entities_bk.js +0 -106
  201. package/dist/sagas/saga_multiplicity_bk.js +0 -351
  202. package/dist/sagas/saga_ui_bk.js +0 -453
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _enzyme = _interopRequireDefault(require("enzyme"));
5
+ var _enzymeAdapterReact = _interopRequireDefault(require("@wojtekmaj/enzyme-adapter-react-17"));
6
+ _enzyme.default.configure({
7
+ adapter: new _enzymeAdapterReact.default()
8
+ });
@@ -11,18 +11,18 @@ exports.default = void 0;
11
11
  * This library implements the J analyser described by Cobas et al in the paper:
12
12
  * A two-stage approach to automatic determination of 1H NMR coupling constants
13
13
  */
14
- var patterns = ['s', 'd', 't', 'q', 'quint', 'h', 'sept', 'o', 'n'];
15
- var symRatio = 1.5;
16
- var maxErrorIter1 = 2.5; // Hz
17
- var maxErrorIter2 = 1; // Hz
18
- var _default = {
14
+ const patterns = ['s', 'd', 't', 'q', 'quint', 'h', 'sept', 'o', 'n'];
15
+ let symRatio = 1.5;
16
+ let maxErrorIter1 = 2.5; // Hz
17
+ let maxErrorIter2 = 1; // Hz
18
+ var _default = exports.default = {
19
19
  /**
20
20
  * The compilation process implements at the first stage a normalization procedure described by Golotvin et al.
21
21
  * embedding in peak-component-counting method described by Hoyes et al.
22
22
  * @param {object} signal
23
23
  * @private
24
24
  */
25
- compilePattern: function compilePattern(signal) {
25
+ compilePattern: function (signal) {
26
26
  signal.multiplicity = 'm';
27
27
  // 1.1 symmetrize
28
28
  // It will add a set of peaks(signal.peaksComp) to the signal that will be used during
@@ -33,15 +33,15 @@ var _default = {
33
33
  if (signal.symRank >= 0.95 && signal.peaksComp.length < 32) {
34
34
  signal.asymmetric = false;
35
35
  var i, j, n, P1, n2, maxFlagged;
36
- var k = 1;
37
- var Jc = [];
36
+ let k = 1;
37
+ let Jc = [];
38
38
 
39
39
  // Loop over the possible number of coupling contributing to the multiplet
40
40
  for (n = 0; n < 9; n++) {
41
41
  // 1.2 Normalize. It makes a deep copy of the peaks before to modify them.
42
- var peaks = normalize(signal, n);
42
+ let peaks = normalize(signal, n);
43
43
  // signal.peaksCompX = peaks;
44
- var validPattern = false; // It will change to true, when we find the good patter
44
+ let validPattern = false; // It will change to true, when we find the good patter
45
45
  // Lets check if the signal could be a singulet.
46
46
  if (peaks.length === 1 && n === 0) {
47
47
  validPattern = true;
@@ -51,16 +51,16 @@ var _default = {
51
51
  }
52
52
  }
53
53
  // 1.3 Establish a range for the Heights Hi [peaks.intensity*0.85,peaks.intensity*1.15];
54
- var ranges = getRanges(peaks);
54
+ let ranges = getRanges(peaks);
55
55
  n2 = Math.pow(2, n);
56
56
 
57
57
  // 1.4 Find a combination of integer heights Hi, one from each Si, that sums to 2^n.
58
- var heights = null;
59
- var counter = 1;
58
+ let heights = null;
59
+ let counter = 1;
60
60
  while (!validPattern && (heights = getNextCombination(ranges, n2)) !== null && counter < 400) {
61
61
  // 2.1 Number the components of the multiplet consecutively from 1 to 2n,
62
62
  // starting at peak 1
63
- var numbering = new Array(heights.length);
63
+ let numbering = new Array(heights.length);
64
64
  k = 1;
65
65
  for (i = 0; i < heights.length; i++) {
66
66
  numbering[i] = new Array(heights[i]);
@@ -76,7 +76,7 @@ var _default = {
76
76
  numbering[0].splice(0, 1); // Flagged
77
77
  numbering[1].splice(0, 1); // Flagged
78
78
  k = 1;
79
- var nFlagged = 2;
79
+ let nFlagged = 2;
80
80
  maxFlagged = Math.pow(2, n) - 1;
81
81
  while (Jc.length < n && nFlagged < maxFlagged && k < peaks.length) {
82
82
  counter += 1;
@@ -92,9 +92,9 @@ var _default = {
92
92
  numbering[k].splice(0, 1); // Flageed
93
93
  nFlagged++;
94
94
  // Flag the other components of the multiplet
95
- for (var u = 2; u <= j; u++) {
95
+ for (let u = 2; u <= j; u++) {
96
96
  // TODO improve those loops
97
- var jSum = 0;
97
+ let jSum = 0;
98
98
  for (i = 0; i < u; i++) {
99
99
  jSum += Jc[i];
100
100
  }
@@ -110,7 +110,7 @@ var _default = {
110
110
  }
111
111
  }
112
112
  // Calculate the ideal patter by using the extracted j-couplings
113
- var pattern = idealPattern(Jc);
113
+ let pattern = idealPattern(Jc);
114
114
  // Compare the ideal pattern with the proposed intensities.
115
115
  // All the intensities have to match to accept the multiplet
116
116
  validPattern = true;
@@ -138,11 +138,10 @@ var _default = {
138
138
  * @param {*} signal
139
139
  * @param {*} Jc
140
140
  */
141
- exports.default = _default;
142
141
  function updateSignal(signal, Jc) {
143
142
  // Update the limits of the signal
144
- var peaks = signal.peaksComp; // Always in Hz
145
- var nbPeaks = peaks.length;
143
+ let peaks = signal.peaksComp; // Always in Hz
144
+ let nbPeaks = peaks.length;
146
145
  signal.startX = peaks[0].x / signal.observe - peaks[0].width;
147
146
  signal.stopX = peaks[nbPeaks - 1].x / signal.observe + peaks[nbPeaks - 1].width;
148
147
 
@@ -168,11 +167,11 @@ function updateSignal(signal, Jc) {
168
167
  * @private
169
168
  */
170
169
  function abstractPattern(signal, Jc) {
171
- var tol = 0.05;
172
- var i;
173
- var pattern = '';
174
- var cont = 1;
175
- var newNmrJs = [];
170
+ let tol = 0.05;
171
+ let i;
172
+ let pattern = '';
173
+ let cont = 1;
174
+ let newNmrJs = [];
176
175
  if (Jc && Jc.length > 0) {
177
176
  Jc.sort(function (a, b) {
178
177
  return b - a;
@@ -213,9 +212,9 @@ function abstractPattern(signal, Jc) {
213
212
  * @private
214
213
  */
215
214
  function idealPattern(Jc) {
216
- var hsum = Math.pow(2, Jc.length);
217
- var i, j;
218
- var pattern = [{
215
+ let hsum = Math.pow(2, Jc.length);
216
+ let i, j;
217
+ let pattern = [{
219
218
  x: 0,
220
219
  intensity: hsum
221
220
  }];
@@ -251,10 +250,10 @@ function idealPattern(Jc) {
251
250
  * @private
252
251
  */
253
252
  function getNextCombination(ranges, value) {
254
- var half = Math.ceil(ranges.values.length * 0.5);
255
- var lng = ranges.values.length;
256
- var sum = 0;
257
- var i, ok;
253
+ let half = Math.ceil(ranges.values.length * 0.5);
254
+ let lng = ranges.values.length;
255
+ let sum = 0;
256
+ let i, ok;
258
257
  while (sum !== value) {
259
258
  // Update the indexes to point at the next possible combination
260
259
  ok = false;
@@ -286,7 +285,7 @@ function getNextCombination(ranges, value) {
286
285
  }
287
286
  // If the sum is equal to the expected value, fill the array to return
288
287
  if (sum === value) {
289
- var heights = new Array(lng);
288
+ let heights = new Array(lng);
290
289
  for (i = 0; i < half; i++) {
291
290
  heights[i] = ranges.values[i][ranges.currentIndex[i]];
292
291
  heights[lng - i - 1] = ranges.values[i][ranges.currentIndex[i]];
@@ -304,18 +303,18 @@ function getNextCombination(ranges, value) {
304
303
  * @private
305
304
  */
306
305
  function getRanges(peaks) {
307
- var ranges = new Array(peaks.length);
308
- var currentIndex = new Array(peaks.length);
309
- var min, max;
306
+ let ranges = new Array(peaks.length);
307
+ let currentIndex = new Array(peaks.length);
308
+ let min, max;
310
309
  ranges[0] = [1];
311
310
  ranges[peaks.length - 1] = [1];
312
311
  currentIndex[0] = -1;
313
312
  currentIndex[peaks.length - 1] = 0;
314
- for (var i = 1; i < peaks.length - 1; i++) {
313
+ for (let i = 1; i < peaks.length - 1; i++) {
315
314
  min = Math.round(peaks[i].intensity * 0.85);
316
315
  max = Math.round(peaks[i].intensity * 1.15);
317
316
  ranges[i] = [];
318
- for (var j = min; j <= max; j++) {
317
+ for (let j = min; j <= max; j++) {
319
318
  ranges[i].push(j);
320
319
  }
321
320
  currentIndex[i] = 0;
@@ -336,12 +335,12 @@ function getRanges(peaks) {
336
335
  * @private
337
336
  */
338
337
  function symmetrizeChoiseBest(signal, maxError, iteration) {
339
- var symRank1 = symmetrize(signal, maxError, iteration);
340
- var tmpPeaks = signal.peaksComp;
341
- var tmpMask = signal.mask;
342
- var cs = signal.delta1;
338
+ let symRank1 = symmetrize(signal, maxError, iteration);
339
+ let tmpPeaks = signal.peaksComp;
340
+ let tmpMask = signal.mask;
341
+ let cs = signal.delta1;
343
342
  signal.delta1 = (signal.peaks[0].x + signal.peaks[signal.peaks.length - 1].x) / 2;
344
- var symRank2 = symmetrize(signal, maxError, iteration);
343
+ let symRank2 = symmetrize(signal, maxError, iteration);
345
344
  if (signal.peaksComp.length > tmpPeaks.length) {
346
345
  return symRank2;
347
346
  } else {
@@ -363,8 +362,8 @@ function symmetrizeChoiseBest(signal, maxError, iteration) {
363
362
  */
364
363
  function symmetrize(signal, maxError, iteration) {
365
364
  // Before to symmetrize we need to keep only the peaks that possibly conforms the multiplete
366
- var max, min, avg, ratio, avgWidth, i;
367
- var peaks = new Array(signal.peaks.length);
365
+ let max, min, avg, ratio, avgWidth, i;
366
+ let peaks = new Array(signal.peaks.length);
368
367
  // Make a deep copy of the peaks and convert PPM ot HZ
369
368
  for (i = 0; i < peaks.length; i++) {
370
369
  peaks[i] = {
@@ -385,15 +384,15 @@ function symmetrize(signal, maxError, iteration) {
385
384
  }
386
385
  }
387
386
  signal.peaksComp = peaks;
388
- var nbPeaks = peaks.length;
389
- var mask = new Array(nbPeaks);
387
+ let nbPeaks = peaks.length;
388
+ let mask = new Array(nbPeaks);
390
389
  signal.mask = mask;
391
- var left = 0;
392
- var right = peaks.length - 1;
393
- var cs = signal.delta1 * signal.observe;
394
- var middle = [(peaks[0].x + peaks[nbPeaks - 1].x) / 2, 1];
390
+ let left = 0;
391
+ let right = peaks.length - 1;
392
+ let cs = signal.delta1 * signal.observe;
393
+ let middle = [(peaks[0].x + peaks[nbPeaks - 1].x) / 2, 1];
395
394
  maxError = error(Math.abs(cs - middle[0]));
396
- var heightSum = 0;
395
+ let heightSum = 0;
397
396
  // We try to symmetrize the extreme peaks. We consider as candidates for symmetricing those which have
398
397
  // ratio smaller than 3
399
398
  for (i = 0; i < nbPeaks; i++) {
@@ -420,8 +419,8 @@ function symmetrize(signal, maxError, iteration) {
420
419
  left--;
421
420
  }
422
421
  } else {
423
- var diffL = Math.abs(peaks[left].x - cs);
424
- var diffR = Math.abs(peaks[right].x - cs);
422
+ let diffL = Math.abs(peaks[left].x - cs);
423
+ let diffR = Math.abs(peaks[right].x - cs);
425
424
  if (Math.abs(diffL - diffR) < maxError) {
426
425
  avg = Math.min(peaks[left].intensity, peaks[right].intensity);
427
426
  avgWidth = Math.min(peaks[left].width, peaks[right].width);
@@ -463,8 +462,8 @@ function symmetrize(signal, maxError, iteration) {
463
462
  }
464
463
  signal.delta1 = cs / signal.observe;
465
464
  // Now, the peak should be symmetric in heights, but we need to know if it is symmetric in x
466
- var symFactor = 0;
467
- var weight = 0;
465
+ let symFactor = 0;
466
+ let weight = 0;
468
467
  if (peaks.length > 1) {
469
468
  for (i = Math.ceil(peaks.length / 2) - 1; i >= 0; i--) {
470
469
  symFactor += (3 + Math.min(Math.abs(peaks[i].x - cs), Math.abs(peaks[peaks.length - 1 - i].x - cs))) / (3 + Math.max(Math.abs(peaks[i].x - cs), Math.abs(peaks[peaks.length - 1 - i].x - cs))) * peaks[i].intensity;
@@ -476,7 +475,7 @@ function symmetrize(signal, maxError, iteration) {
476
475
  symFactor = 1;
477
476
  }
478
477
  }
479
- var newSumHeights = 0;
478
+ let newSumHeights = 0;
480
479
  for (i = 0; i < peaks.length; i++) {
481
480
  newSumHeights += peaks[i].intensity;
482
481
  }
@@ -487,7 +486,7 @@ function symmetrize(signal, maxError, iteration) {
487
486
  } else {
488
487
  // Center the given pattern at cs and symmetrize x
489
488
  if (peaks.length > 1) {
490
- var dxi;
489
+ let dxi;
491
490
  for (i = Math.ceil(peaks.length / 2) - 1; i >= 0; i--) {
492
491
  dxi = (peaks[i].x - peaks[peaks.length - 1 - i].x) / 2.0;
493
492
  peaks[i].x = cs + dxi;
@@ -504,7 +503,7 @@ function symmetrize(signal, maxError, iteration) {
504
503
  * @private
505
504
  */
506
505
  function error(value) {
507
- var maxError = value * 2.5;
506
+ let maxError = value * 2.5;
508
507
  if (maxError < 0.75) {
509
508
  maxError = 0.75;
510
509
  }
@@ -523,15 +522,15 @@ function error(value) {
523
522
  */
524
523
  function normalize(signal, n) {
525
524
  // Perhaps this is slow
526
- var peaks = JSON.parse(JSON.stringify(signal.peaksComp));
527
- var norm = 0;
528
- var norm2 = 0;
525
+ let peaks = JSON.parse(JSON.stringify(signal.peaksComp));
526
+ let norm = 0;
527
+ let norm2 = 0;
529
528
  for (var i = 0; i < peaks.length; i++) {
530
529
  norm += peaks[i].intensity;
531
530
  }
532
531
  norm = Math.pow(2, n) / norm;
533
532
  signal.mask2 = JSON.parse(JSON.stringify(signal.mask));
534
- var index = signal.mask2.length - 1;
533
+ let index = signal.mask2.length - 1;
535
534
  for (i = peaks.length - 1; i >= 0; i--) {
536
535
  peaks[i].intensity *= norm;
537
536
  while (index >= 0 && signal.mask2[index] === false) {
@@ -560,9 +559,9 @@ function normalize(signal, n) {
560
559
  * @return {number}
561
560
  */
562
561
  function chemicalShift(peaks, mask) {
563
- var sum = 0;
564
- var cs = 0;
565
- var i, area;
562
+ let sum = 0;
563
+ let cs = 0;
564
+ let i, area;
566
565
  if (mask) {
567
566
  for (i = 0; i < peaks.length; i++) {
568
567
  if (mask[i] === true) {
@@ -10,7 +10,7 @@ var _mlSavitzkyGolayGeneralized = _interopRequireDefault(require("ml-savitzky-go
10
10
 
11
11
  /* eslint-disable no-plusplus, operator-linebreak */
12
12
 
13
- var options = {
13
+ const options = {
14
14
  sgOptions: {
15
15
  windowSize: 9,
16
16
  polynomial: 3
@@ -24,28 +24,28 @@ var options = {
24
24
  boundaries: false,
25
25
  derivativeThreshold: -1
26
26
  };
27
- var getPeakIntervals = function getPeakIntervals(entity) {
28
- var data = entity.spectra[0].data[0];
29
- var X = data.x;
30
- var dX = X[1] - X[0];
31
- var Y = (0, _mlSavitzkyGolayGeneralized.default)(data.y, data.x, {
27
+ const getPeakIntervals = entity => {
28
+ const data = entity.spectra[0].data[0];
29
+ const X = data.x;
30
+ const dX = X[1] - X[0];
31
+ const Y = (0, _mlSavitzkyGolayGeneralized.default)(data.y, data.x, {
32
32
  windowSize: options.sgOptions.windowSize,
33
33
  polynomial: options.sgOptions.polynomial,
34
34
  derivative: 0
35
35
  });
36
- var dY = (0, _mlSavitzkyGolayGeneralized.default)(data.y, data.x, {
36
+ const dY = (0, _mlSavitzkyGolayGeneralized.default)(data.y, data.x, {
37
37
  windowSize: options.sgOptions.windowSize,
38
38
  polynomial: options.sgOptions.polynomial,
39
39
  derivative: 1
40
40
  });
41
- var ddY = (0, _mlSavitzkyGolayGeneralized.default)(data.y, data.x, {
41
+ const ddY = (0, _mlSavitzkyGolayGeneralized.default)(data.y, data.x, {
42
42
  windowSize: options.sgOptions.windowSize,
43
43
  polynomial: options.sgOptions.polynomial,
44
44
  derivative: 2
45
45
  });
46
- var maxDdy = 0;
47
- var maxY = 0;
48
- for (var i = 0; i < Y.length; i++) {
46
+ let maxDdy = 0;
47
+ let maxY = 0;
48
+ for (let i = 0; i < Y.length; i++) {
49
49
  if (Math.abs(ddY[i]) > maxDdy) {
50
50
  maxDdy = Math.abs(ddY[i]);
51
51
  }
@@ -53,24 +53,24 @@ var getPeakIntervals = function getPeakIntervals(entity) {
53
53
  maxY = Math.abs(Y[i]);
54
54
  }
55
55
  }
56
- var lastMax = null;
57
- var lastMin = null;
58
- var minddY = new Array(Y.length - 2);
59
- var intervalL = new Array(Y.length);
60
- var intervalR = new Array(Y.length);
61
- var broadMask = new Array(Y.length - 2);
62
- var minddYLen = 0;
63
- var intervalLLen = 0;
64
- var intervalRLen = 0;
65
- var broadMaskLen = 0;
66
- for (var _i = 1; _i < Y.length - 1; ++_i) {
56
+ let lastMax = null;
57
+ let lastMin = null;
58
+ const minddY = new Array(Y.length - 2);
59
+ const intervalL = new Array(Y.length);
60
+ const intervalR = new Array(Y.length);
61
+ const broadMask = new Array(Y.length - 2);
62
+ let minddYLen = 0;
63
+ let intervalLLen = 0;
64
+ let intervalRLen = 0;
65
+ let broadMaskLen = 0;
66
+ for (let i = 1; i < Y.length - 1; ++i) {
67
67
  // filter based on derivativeThreshold
68
- if (Math.abs(dY[_i]) > options.derivativeThreshold) {
68
+ if (Math.abs(dY[i]) > options.derivativeThreshold) {
69
69
  // Minimum in first derivative
70
- if (dY[_i] < dY[_i - 1] && dY[_i] <= dY[_i + 1] || dY[_i] <= dY[_i - 1] && dY[_i] < dY[_i + 1]) {
70
+ if (dY[i] < dY[i - 1] && dY[i] <= dY[i + 1] || dY[i] <= dY[i - 1] && dY[i] < dY[i + 1]) {
71
71
  lastMin = {
72
- x: X[_i],
73
- index: _i
72
+ x: X[i],
73
+ index: i
74
74
  };
75
75
  if (dX > 0 && lastMax !== null) {
76
76
  intervalL[intervalLLen++] = lastMax;
@@ -79,10 +79,10 @@ var getPeakIntervals = function getPeakIntervals(entity) {
79
79
  }
80
80
 
81
81
  // Maximum in first derivative
82
- if (dY[_i] >= dY[_i - 1] && dY[_i] > dY[_i + 1] || dY[_i] > dY[_i - 1] && dY[_i] >= dY[_i + 1]) {
82
+ if (dY[i] >= dY[i - 1] && dY[i] > dY[i + 1] || dY[i] > dY[i - 1] && dY[i] >= dY[i + 1]) {
83
83
  lastMax = {
84
- x: X[_i],
85
- index: _i
84
+ x: X[i],
85
+ index: i
86
86
  };
87
87
  if (dX < 0 && lastMin !== null) {
88
88
  intervalL[intervalLLen++] = lastMax;
@@ -91,15 +91,15 @@ var getPeakIntervals = function getPeakIntervals(entity) {
91
91
  }
92
92
  }
93
93
  // Minimum in second derivative
94
- if (ddY[_i] < ddY[_i - 1] && ddY[_i] < ddY[_i + 1]) {
94
+ if (ddY[i] < ddY[i - 1] && ddY[i] < ddY[i + 1]) {
95
95
  // TODO should we change this to have 3 arrays ? Huge overhead creating arrays
96
- minddY[minddYLen++] = _i; // ( [X[i], Y[i], i] );
97
- broadMask[broadMaskLen++] = Math.abs(ddY[_i]) <= options.broadRatio * maxDdy;
96
+ minddY[minddYLen++] = i; // ( [X[i], Y[i], i] );
97
+ broadMask[broadMaskLen++] = Math.abs(ddY[i]) <= options.broadRatio * maxDdy;
98
98
  }
99
99
  }
100
100
  return {
101
- intervalL: intervalL,
102
- intervalR: intervalR
101
+ intervalL,
102
+ intervalR
103
103
  };
104
104
  };
105
105
  exports.getPeakIntervals = getPeakIntervals;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@complat/react-spectra-editor",
3
- "version": "1.0.0-rc2",
3
+ "version": "1.0.0-rc20.patch-1",
4
4
  "description": "An editor to View and Edit Chemical Spectra data (NMR, IR and MS, CV, UIVIS, XRD).",
5
5
  "repository": {
6
6
  "type": "git",
@@ -10,7 +10,7 @@
10
10
  "dependencies": {
11
11
  "@babel/preset-env": "^7.21.5",
12
12
  "@babel/preset-react": "^7.18.6",
13
- "@complat/react-svg-file-zoom-pan": "1.0.15",
13
+ "@complat/react-svg-file-zoom-pan": "1.1.2",
14
14
  "@material-ui/core": "^4.10.0",
15
15
  "@material-ui/icons": "^4.10.0",
16
16
  "@mdi/js": "^4.7.95",
@@ -22,23 +22,22 @@
22
22
  "@types/react": "^18.0.34",
23
23
  "@types/react-dom": "^18.0.11",
24
24
  "babel-plugin-transform-object-rest-spread": "^6.26.0",
25
- "browserslist": "^4.16.3",
25
+ "browserslist": "^4.21.5",
26
26
  "classnames": "^2.2.6",
27
- "d3": "^5.5.0",
28
- "d3-brush": "2.1.0",
27
+ "d3": "^5.16.0",
28
+ "d3-brush": "3.0.0",
29
29
  "d3-selection": "^2.0.0",
30
30
  "d3-tip": "^0.9.1",
31
31
  "jcampconverter": "4.1.0",
32
32
  "ml-savitzky-golay-generalized": "1.1.1",
33
33
  "prop-types": "^15.7.2",
34
34
  "react-dropzone": "^8.0.3",
35
- "react-quill": "^1.3.0",
35
+ "react-quill": "^2.0.0",
36
36
  "react-redux": "^7.2.0",
37
- "react-svg-file-zoom-pan": "^1.0.5",
38
37
  "react-svg-inline": "^2.1.1",
39
38
  "redux": "^4.1.1",
40
39
  "redux-saga": "^1.1.3",
41
- "redux-undo": "^1.0.1",
40
+ "redux-undo": "^1.1.0",
42
41
  "regenerator-transform": "^0.13.3",
43
42
  "reselect": "^4.0.0",
44
43
  "typescript": "^5.0.4"
@@ -62,8 +61,12 @@
62
61
  "@babel/core": "^7.21.8",
63
62
  "@babel/preset-env": "^7.21.5",
64
63
  "@babel/preset-react": "^7.18.6",
65
- "@storybook/react": "6.5.9",
66
- "babel-loader": "8.1.0",
64
+ "@storybook/react": "7.0.7",
65
+ "@types/enzyme": "^3.10.13",
66
+ "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0",
67
+ "babel-loader": "8.2.5",
68
+ "enzyme": "^3.11.0",
69
+ "enzyme-to-json": "^3.6.2",
67
70
  "eslint-config-airbnb": "^19.0.4",
68
71
  "eslint-plugin-import": "^2.25.0",
69
72
  "eslint-plugin-jsx-a11y": "^6.5.1",
@@ -83,10 +86,7 @@
83
86
  "README.md"
84
87
  ],
85
88
  "browserslist": [
86
- ">0.2%",
87
- "not dead",
88
- "not ie <= 11",
89
- "not op_mini all"
89
+ "defaults and supports es6-module"
90
90
  ],
91
91
  "publishConfig": {
92
92
  "access": "public"
@@ -1,139 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _react = _interopRequireDefault(require("react"));
9
- var _reactRedux = require("react-redux");
10
- var _redux = require("redux");
11
- var _classnames = _interopRequireDefault(require("classnames"));
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
- var _styles = require("@material-ui/core/styles");
14
- var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
15
- var _AddLocationOutlined = _interopRequireDefault(require("@material-ui/icons/AddLocationOutlined"));
16
- var _ui = require("../../actions/ui");
17
- var _cfg = _interopRequireDefault(require("../../helpers/cfg"));
18
- var _common = require("./common");
19
- var _list_ui = require("../../constants/list_ui");
20
- var styles = function styles() {
21
- return Object.assign({}, _common.commonStyle);
22
- };
23
- var Peak = function Peak(_ref) {
24
- var classes = _ref.classes,
25
- setUiSweepTypeAct = _ref.setUiSweepTypeAct,
26
- isFocusAddPeakSt = _ref.isFocusAddPeakSt,
27
- disableAddPeakSt = _ref.disableAddPeakSt,
28
- isFocusRmPeakSt = _ref.isFocusRmPeakSt,
29
- disableRmPeakSt = _ref.disableRmPeakSt,
30
- isFocusSetRefSt = _ref.isFocusSetRefSt,
31
- disableSetRefSt = _ref.disableSetRefSt,
32
- isHandleMaxAndMinPeaksSt = _ref.isHandleMaxAndMinPeaksSt,
33
- cyclicVotaSt = _ref.cyclicVotaSt,
34
- curveSt = _ref.curveSt;
35
- var onSweepPeakAdd = function onSweepPeakAdd() {
36
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.PEAK_ADD);
37
- };
38
- var onSweepPeakDELETE = function onSweepPeakDELETE() {
39
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.PEAK_DELETE);
40
- };
41
- var onSweepAnchorShift = function onSweepAnchorShift() {
42
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.ANCHOR_SHIFT);
43
- };
44
- if (isHandleMaxAndMinPeaksSt) {
45
- var curveIdx = curveSt.curveIdx;
46
- var spectraList = cyclicVotaSt.spectraList;
47
- var spectra = spectraList[curveIdx];
48
- if (spectra) {
49
- var isWorkMaxPeak = spectra.isWorkMaxPeak;
50
- if (isWorkMaxPeak) {
51
- onSweepPeakAdd = function onSweepPeakAdd() {
52
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_ADD_MAX_PEAK, curveIdx);
53
- };
54
- onSweepPeakDELETE = function onSweepPeakDELETE() {
55
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_RM_MAX_PEAK, curveIdx);
56
- };
57
- } else {
58
- onSweepPeakAdd = function onSweepPeakAdd() {
59
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_ADD_MIN_PEAK, curveIdx);
60
- };
61
- onSweepPeakDELETE = function onSweepPeakDELETE() {
62
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_RM_MIN_PEAK, curveIdx);
63
- };
64
- }
65
- onSweepAnchorShift = function onSweepAnchorShift() {
66
- return setUiSweepTypeAct(_list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_SET_REF, curveIdx);
67
- };
68
- }
69
- }
70
- return /*#__PURE__*/_react.default.createElement("span", {
71
- className: classes.group
72
- }, /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
73
- title: /*#__PURE__*/_react.default.createElement("span", {
74
- className: "txt-sv-tp"
75
- }, "Add Peak")
76
- }, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_common.MuButton, {
77
- className: (0, _classnames.default)((0, _common.focusStyle)(isFocusAddPeakSt, classes), 'btn-sv-bar-addpeak'),
78
- disabled: disableAddPeakSt,
79
- onClick: onSweepPeakAdd
80
- }, /*#__PURE__*/_react.default.createElement("span", {
81
- className: (0, _classnames.default)(classes.txt, 'txt-sv-bar-addpeak')
82
- }, "P+")))), /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
83
- title: /*#__PURE__*/_react.default.createElement("span", {
84
- className: "txt-sv-tp"
85
- }, "Remove Peak")
86
- }, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_common.MuButton, {
87
- className: (0, _classnames.default)((0, _common.focusStyle)(isFocusRmPeakSt, classes), 'btn-sv-bar-rmpeak'),
88
- disabled: disableRmPeakSt,
89
- onClick: onSweepPeakDELETE
90
- }, /*#__PURE__*/_react.default.createElement("span", {
91
- className: (0, _classnames.default)(classes.txt, 'txt-sv-bar-rmpeak')
92
- }, "P-")))), /*#__PURE__*/_react.default.createElement(_Tooltip.default, {
93
- title: /*#__PURE__*/_react.default.createElement("span", {
94
- className: "txt-sv-tp"
95
- }, "Set Reference")
96
- }, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_common.MuButton, {
97
- className: (0, _classnames.default)((0, _common.focusStyle)(isFocusSetRefSt, classes), 'btn-sv-bar-setref'),
98
- disabled: disableSetRefSt,
99
- onClick: onSweepAnchorShift
100
- }, /*#__PURE__*/_react.default.createElement(_AddLocationOutlined.default, {
101
- className: classes.icon
102
- })))));
103
- };
104
- var mapStateToProps = function mapStateToProps(state, _) {
105
- return (
106
- // eslint-disable-line
107
- {
108
- isFocusAddPeakSt: state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.PEAK_ADD || state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_ADD_MAX_PEAK || state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_ADD_MIN_PEAK,
109
- disableAddPeakSt: _cfg.default.btnCmdAddPeak(state.layout),
110
- isFocusRmPeakSt: state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.PEAK_DELETE || state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_RM_MAX_PEAK || state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.CYCLIC_VOLTA_RM_MIN_PEAK,
111
- disableRmPeakSt: _cfg.default.btnCmdRmPeak(state.layout),
112
- isFocusSetRefSt: state.ui.sweepType === _list_ui.LIST_UI_SWEEP_TYPE.ANCHOR_SHIFT,
113
- disableSetRefSt: _cfg.default.btnCmdSetRef(state.layout),
114
- isHandleMaxAndMinPeaksSt: !_cfg.default.hidePanelCyclicVolta(state.layout),
115
- cyclicVotaSt: state.cyclicvolta,
116
- curveSt: state.curve
117
- }
118
- );
119
- };
120
- var mapDispatchToProps = function mapDispatchToProps(dispatch) {
121
- return (0, _redux.bindActionCreators)({
122
- setUiSweepTypeAct: _ui.setUiSweepType
123
- }, dispatch);
124
- };
125
- Peak.propTypes = {
126
- classes: _propTypes.default.object.isRequired,
127
- isFocusAddPeakSt: _propTypes.default.bool.isRequired,
128
- disableAddPeakSt: _propTypes.default.bool.isRequired,
129
- isFocusRmPeakSt: _propTypes.default.bool.isRequired,
130
- disableRmPeakSt: _propTypes.default.bool.isRequired,
131
- isFocusSetRefSt: _propTypes.default.bool.isRequired,
132
- disableSetRefSt: _propTypes.default.bool.isRequired,
133
- setUiSweepTypeAct: _propTypes.default.func.isRequired,
134
- isHandleMaxAndMinPeaksSt: _propTypes.default.bool.isRequired,
135
- cyclicVotaSt: _propTypes.default.object.isRequired,
136
- curveSt: _propTypes.default.object.isRequired
137
- };
138
- var _default = (0, _redux.compose)((0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps), (0, _styles.withStyles)(styles))(Peak);
139
- exports.default = _default;