nmr-processing 9.7.8 → 9.7.9-pre.1690349439

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 (534) hide show
  1. package/lib/apodization/compose.js +1 -1
  2. package/lib/apodization/compose.js.map +1 -1
  3. package/lib/assignment/get13CAssignments.d.ts +1 -1
  4. package/lib/assignment/get13CAssignments.js +3 -3
  5. package/lib/assignment/get13CAssignments.js.map +1 -1
  6. package/lib/assignment/get1HAssignments.d.ts +2 -4
  7. package/lib/assignment/get1HAssignments.js +3 -3
  8. package/lib/assignment/get1HAssignments.js.map +1 -1
  9. package/lib/assignment/getAssignments.d.ts +3 -5
  10. package/lib/assignment/getAssignments.js +5 -5
  11. package/lib/assignment/getAssignments.js.map +1 -1
  12. package/lib/assignment/nmrAssigment.d.ts +2 -2
  13. package/lib/assignment/utils/addSolution.d.ts +13 -0
  14. package/lib/assignment/utils/addSolution.js +29 -0
  15. package/lib/assignment/utils/addSolution.js.map +1 -0
  16. package/lib/assignment/utils/{getAssignment → generalAssignment}/buildAssignments.d.ts +13 -27
  17. package/lib/assignment/utils/{getAssignment → generalAssignment}/buildAssignments.js +15 -15
  18. package/lib/assignment/utils/generalAssignment/buildAssignments.js.map +1 -0
  19. package/lib/assignment/utils/{getAssignment → generalAssignment}/checkIDs.js +6 -6
  20. package/lib/assignment/utils/generalAssignment/checkIDs.js.map +1 -0
  21. package/lib/assignment/utils/{getAssignment → generalAssignment}/createMapPossibleAssignment.d.ts +3 -7
  22. package/lib/assignment/utils/{getAssignment → generalAssignment}/createMapPossibleAssignment.js +7 -7
  23. package/lib/assignment/utils/generalAssignment/createMapPossibleAssignment.js.map +1 -0
  24. package/lib/assignment/utils/{getAssignment → generalAssignment}/exploreTree.d.ts +1 -1
  25. package/lib/assignment/utils/{getAssignment → generalAssignment}/exploreTree.js +6 -7
  26. package/lib/assignment/utils/generalAssignment/exploreTree.js.map +1 -0
  27. package/lib/assignment/utils/{getAssignment → generalAssignment}/formatData.js +5 -5
  28. package/lib/assignment/utils/generalAssignment/formatData.js.map +1 -0
  29. package/lib/assignment/utils/generalAssignment/getIntegrationOfAttachedProtons.js.map +1 -0
  30. package/lib/assignment/utils/{getAssignment → generalAssignment}/getTargetsAndCorrelations.d.ts +2 -4
  31. package/lib/assignment/utils/{getAssignment → generalAssignment}/getTargetsAndCorrelations.js +1 -1
  32. package/lib/assignment/utils/generalAssignment/getTargetsAndCorrelations.js.map +1 -0
  33. package/lib/assignment/utils/{getAssignment → generalAssignment}/getWorkFlow.d.ts +1 -1
  34. package/lib/assignment/utils/generalAssignment/getWorkFlow.js.map +1 -0
  35. package/lib/assignment/utils/{getAssignment → generalAssignment}/groupCarbonTargetByIntegrationZone.js +8 -8
  36. package/lib/assignment/utils/generalAssignment/groupCarbonTargetByIntegrationZone.js.map +1 -0
  37. package/lib/assignment/utils/generalAssignment/isSpectraData1D.js.map +1 -0
  38. package/lib/assignment/utils/{getAssignment → generalAssignment}/partialScore.d.ts +1 -3
  39. package/lib/assignment/utils/{getAssignment → generalAssignment}/partialScore.js +20 -20
  40. package/lib/assignment/utils/generalAssignment/partialScore.js.map +1 -0
  41. package/lib/assignment/utils/generalAssignment/searchIndices.js.map +1 -0
  42. package/lib/assignment/utils/{buildAssignments.d.ts → oneDimensionalAssignment/buildAssignments.d.ts} +2 -4
  43. package/lib/assignment/utils/{buildAssignments.js → oneDimensionalAssignment/buildAssignments.js} +4 -4
  44. package/lib/assignment/utils/oneDimensionalAssignment/buildAssignments.js.map +1 -0
  45. package/lib/assignment/utils/{createMapPossibleAssignments.d.ts → oneDimensionalAssignment/createMapPossibleAssignments.d.ts} +3 -5
  46. package/lib/assignment/utils/{createMapPossibleAssignments.js → oneDimensionalAssignment/createMapPossibleAssignments.js} +4 -4
  47. package/lib/assignment/utils/oneDimensionalAssignment/createMapPossibleAssignments.js.map +1 -0
  48. package/lib/assignment/utils/{exploreTreeRec.d.ts → oneDimensionalAssignment/exploreTreeRec.d.ts} +1 -1
  49. package/lib/assignment/utils/{exploreTreeRec.js → oneDimensionalAssignment/exploreTreeRec.js} +7 -8
  50. package/lib/assignment/utils/oneDimensionalAssignment/exploreTreeRec.js.map +1 -0
  51. package/lib/assignment/utils/{partialScore.d.ts → oneDimensionalAssignment/partialScore.d.ts} +1 -1
  52. package/lib/assignment/utils/{partialScore.js → oneDimensionalAssignment/partialScore.js} +9 -9
  53. package/lib/assignment/utils/oneDimensionalAssignment/partialScore.js.map +1 -0
  54. package/lib/constants/SignalsKinds.d.ts +2 -2
  55. package/lib/constants/SignalsKinds.js.map +1 -1
  56. package/lib/constants/couplingValues.d.ts +1 -3
  57. package/lib/constants/couplingValues.js.map +1 -1
  58. package/lib/constants/impurities.d.ts +1509 -6
  59. package/lib/constants/impurities.js +2 -1
  60. package/lib/constants/impurities.js.map +1 -1
  61. package/lib/databases/getDatabase.js +1 -1
  62. package/lib/databases/getDatabase.js.map +1 -1
  63. package/lib/datum/Filters.js +4 -0
  64. package/lib/datum/Filters.js.map +1 -1
  65. package/lib/datum/FiltersManager.d.ts +1 -1
  66. package/lib/datum/FiltersManager.js +2 -2
  67. package/lib/datum/FiltersManager.js.map +1 -1
  68. package/lib/datum/MatrixOptions.d.ts +2 -2
  69. package/lib/datum/data1d/Entry1D.d.ts +1 -1
  70. package/lib/datum/data1d/filter1d/baselineCorrection.js +4 -4
  71. package/lib/datum/data1d/filter1d/baselineCorrection.js.map +1 -1
  72. package/lib/datum/data1d/filter1d/digitalFilter.js +2 -2
  73. package/lib/datum/data1d/filter1d/digitalFilter.js.map +1 -1
  74. package/lib/datum/data1d/filter1d/fft.js +7 -7
  75. package/lib/datum/data1d/filter1d/fft.js.map +1 -1
  76. package/lib/datum/data1d/filter1d/phaseCorrection.js +3 -3
  77. package/lib/datum/data1d/filter1d/phaseCorrection.js.map +1 -1
  78. package/lib/datum/data1d/filter1d/signalProcessing.js +1 -1
  79. package/lib/datum/data1d/filter1d/signalProcessing.js.map +1 -1
  80. package/lib/datum/data1d/filter1d/utils/padDataToNextPowerOfTwo.js +2 -2
  81. package/lib/datum/data1d/filter1d/utils/padDataToNextPowerOfTwo.js.map +1 -1
  82. package/lib/datum/data1d/filter1d/zeroFilling.js +8 -8
  83. package/lib/datum/data1d/filter1d/zeroFilling.js.map +1 -1
  84. package/lib/datum/data1d/utils/mapPeaks.js +1 -1
  85. package/lib/datum/data1d/utils/mapPeaks.js.map +1 -1
  86. package/lib/datum/data2d/Entry2D.d.ts +1 -1
  87. package/lib/datum/data2d/filter2d/fftDimension1.d.ts +15 -0
  88. package/lib/datum/data2d/filter2d/fftDimension1.js +49 -0
  89. package/lib/datum/data2d/filter2d/fftDimension1.js.map +1 -0
  90. package/lib/datum/data2d/filter2d/fftDimension2.d.ts +15 -0
  91. package/lib/datum/data2d/filter2d/fftDimension2.js +60 -0
  92. package/lib/datum/data2d/filter2d/fftDimension2.js.map +1 -0
  93. package/lib/datum/data2d/utils/getShift.js +1 -1
  94. package/lib/datum/data2d/utils/getShift.js.map +1 -1
  95. package/lib/multiplicity/splitPatterns.js +1 -1
  96. package/lib/multiplicity/splitPatterns.js.map +1 -1
  97. package/lib/peaks/peaksFilterImpurities.js +7 -6
  98. package/lib/peaks/peaksFilterImpurities.js.map +1 -1
  99. package/lib/peaks/peaksToRanges.js +17 -17
  100. package/lib/peaks/peaksToRanges.js.map +1 -1
  101. package/lib/peaks/solventSuppression.js +11 -11
  102. package/lib/peaks/solventSuppression.js.map +1 -1
  103. package/lib/peaks/util/addMissingIDs.js.map +1 -1
  104. package/lib/peaks/util/determineRealTop.js +32 -32
  105. package/lib/peaks/util/determineRealTop.js.map +1 -1
  106. package/lib/peaks/util/getKernel.js +4 -4
  107. package/lib/peaks/util/getKernel.js.map +1 -1
  108. package/lib/peaks/util/peakOptimizer.js +17 -17
  109. package/lib/peaks/util/peakOptimizer.js.map +1 -1
  110. package/lib/peaks/util/setIDs.js.map +1 -1
  111. package/lib/prediction/dataStructure.d.ts +1 -3
  112. package/lib/prediction/predictAll.js +2 -1
  113. package/lib/prediction/predictAll.js.map +1 -1
  114. package/lib/prediction/predictCOSY.js +1 -1
  115. package/lib/prediction/predictCOSY.js.map +1 -1
  116. package/lib/prediction/predictCarbon.js +6 -6
  117. package/lib/prediction/predictCarbon.js.map +1 -1
  118. package/lib/prediction/predictHMBC.js +1 -1
  119. package/lib/prediction/predictHMBC.js.map +1 -1
  120. package/lib/prediction/predictHSQC.js +1 -1
  121. package/lib/prediction/predictHSQC.js.map +1 -1
  122. package/lib/prediction/predictProton.js +9 -9
  123. package/lib/prediction/predictProton.js.map +1 -1
  124. package/lib/prediction/utils/getFilteredIDiaIDs.js +3 -3
  125. package/lib/prediction/utils/getFilteredIDiaIDs.js.map +1 -1
  126. package/lib/prediction/utils/getNuclei.d.ts +1 -3
  127. package/lib/prediction/utils/getNuclei.js.map +1 -1
  128. package/lib/prediction/utils/predict2D.d.ts +1 -3
  129. package/lib/prediction/utils/predict2D.js +17 -17
  130. package/lib/prediction/utils/predict2D.js.map +1 -1
  131. package/lib/prediction/utils/queryByHOSE.js +1 -1
  132. package/lib/prediction/utils/queryByHOSE.js.map +1 -1
  133. package/lib/ranges/markSolventSignal.js +8 -8
  134. package/lib/ranges/markSolventSignal.js.map +1 -1
  135. package/lib/ranges/rangesToACS.js +6 -6
  136. package/lib/ranges/rangesToACS.js.map +1 -1
  137. package/lib/ranges/rangesToXY.js +6 -6
  138. package/lib/ranges/rangesToXY.js.map +1 -1
  139. package/lib/signal/signalJoinCouplings.js +9 -9
  140. package/lib/signal/signalJoinCouplings.js.map +1 -1
  141. package/lib/signal/signalMultiplicityPattern.js +2 -2
  142. package/lib/signal/signalMultiplicityPattern.js.map +1 -1
  143. package/lib/signals/addDummySignals.js +4 -4
  144. package/lib/signals/addDummySignals.js.map +1 -1
  145. package/lib/signals/hackSignalsToXY.js +1 -1
  146. package/lib/signals/hackSignalsToXY.js.map +1 -1
  147. package/lib/signals/optimization/getInternalSignals.js +6 -6
  148. package/lib/signals/optimization/getInternalSignals.js.map +1 -1
  149. package/lib/signals/optimization/getSumOfShapes.js +1 -1
  150. package/lib/signals/optimization/getSumOfShapes.js.map +1 -1
  151. package/lib/signals/optimizeSignals.js +3 -3
  152. package/lib/signals/optimizeSignals.js.map +1 -1
  153. package/lib/signals/signals2DToZ.js +3 -2
  154. package/lib/signals/signals2DToZ.js.map +1 -1
  155. package/lib/signals/signalsJoin.js +5 -5
  156. package/lib/signals/signalsJoin.js.map +1 -1
  157. package/lib/signals/signalsToFID.js +1 -1
  158. package/lib/signals/signalsToFID.js.map +1 -1
  159. package/lib/signals/signalsToRanges.js +3 -3
  160. package/lib/signals/signalsToRanges.js.map +1 -1
  161. package/lib/signals/signalsToXY.js +3 -3
  162. package/lib/signals/signalsToXY.js.map +1 -1
  163. package/lib/signals/simulation/signalsToSpinSystem.js +2 -2
  164. package/lib/signals/simulation/signalsToSpinSystem.js.map +1 -1
  165. package/lib/signals/simulation/simulate1D.js +2 -2
  166. package/lib/signals/simulation/simulate1D.js.map +1 -1
  167. package/lib/signals/simulation/simulateXYPeaks.js +15 -17
  168. package/lib/signals/simulation/simulateXYPeaks.js.map +1 -1
  169. package/lib/signals/simulation/splitSpinSystem.js +26 -23
  170. package/lib/signals/simulation/splitSpinSystem.js.map +1 -1
  171. package/lib/signals/utils/jAnalyzer.js +38 -38
  172. package/lib/signals/utils/jAnalyzer.js.map +1 -1
  173. package/lib/types/Integrals.d.ts +1 -1
  174. package/lib/types/Peaks/Peaks.d.ts +1 -1
  175. package/lib/types/Ranges/Ranges.d.ts +1 -1
  176. package/lib/types/Zones/Zone.d.ts +1 -1
  177. package/lib/types/Zones/Zones.d.ts +1 -1
  178. package/lib/utilities/getFrequency.js +1 -1
  179. package/lib/utilities/getFrequency.js.map +1 -1
  180. package/lib/utilities/resurrectRange.js +1 -1
  181. package/lib/utilities/resurrectRange.js.map +1 -1
  182. package/lib/xy/xyAutoPeaksPicking.js +3 -3
  183. package/lib/xy/xyAutoPeaksPicking.js.map +1 -1
  184. package/lib/xyz/quadrature.js +6 -6
  185. package/lib/xyz/quadrature.js.map +1 -1
  186. package/lib/xyz/util/fft2d/digitalFilter.js +3 -3
  187. package/lib/xyz/util/fft2d/digitalFilter.js.map +1 -1
  188. package/lib/xyz/util/fft2d/fftDirectDimension.d.ts +1 -1
  189. package/lib/xyz/util/fft2d/fftDirectDimension.js +4 -3
  190. package/lib/xyz/util/fft2d/fftDirectDimension.js.map +1 -1
  191. package/lib/xyz/util/fft2d/fftIndirectDimension.js +5 -4
  192. package/lib/xyz/util/fft2d/fftIndirectDimension.js.map +1 -1
  193. package/lib/xyz/util/fft2d/removeDCOffset.js +1 -1
  194. package/lib/xyz/util/fft2d/removeDCOffset.js.map +1 -1
  195. package/lib/xyz/util/fft2d/zeroFilling.js +4 -6
  196. package/lib/xyz/util/fft2d/zeroFilling.js.map +1 -1
  197. package/lib/xyz/util/formatZone.js +3 -3
  198. package/lib/xyz/util/formatZone.js.map +1 -1
  199. package/lib/xyz/util/getMinMaxXY.d.ts +6 -0
  200. package/lib/xyz/util/getMinMaxXY.js +23 -0
  201. package/lib/xyz/util/getMinMaxXY.js.map +1 -0
  202. package/lib/xyz/util/padData.js +7 -7
  203. package/lib/xyz/util/padData.js.map +1 -1
  204. package/lib/xyz/xyzAutoSignalsPicking.js +19 -18
  205. package/lib/xyz/xyzAutoSignalsPicking.js.map +1 -1
  206. package/lib/xyz/xyzBidimensionalFFT.js +2 -19
  207. package/lib/xyz/xyzBidimensionalFFT.js.map +1 -1
  208. package/lib/xyz/xyzJResAnalyzer.js +21 -21
  209. package/lib/xyz/xyzJResAnalyzer.js.map +1 -1
  210. package/lib-esm/apodization/compose.js +1 -1
  211. package/lib-esm/apodization/compose.js.map +1 -1
  212. package/lib-esm/assignment/get13CAssignments.js +3 -3
  213. package/lib-esm/assignment/get13CAssignments.js.map +1 -1
  214. package/lib-esm/assignment/get1HAssignments.js +3 -3
  215. package/lib-esm/assignment/get1HAssignments.js.map +1 -1
  216. package/lib-esm/assignment/getAssignments.js +5 -5
  217. package/lib-esm/assignment/getAssignments.js.map +1 -1
  218. package/lib-esm/assignment/utils/addSolution.js +25 -0
  219. package/lib-esm/assignment/utils/addSolution.js.map +1 -0
  220. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/buildAssignments.js +15 -15
  221. package/lib-esm/assignment/utils/generalAssignment/buildAssignments.js.map +1 -0
  222. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/checkIDs.js +6 -6
  223. package/lib-esm/assignment/utils/generalAssignment/checkIDs.js.map +1 -0
  224. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/createMapPossibleAssignment.js +7 -7
  225. package/lib-esm/assignment/utils/generalAssignment/createMapPossibleAssignment.js.map +1 -0
  226. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/exploreTree.js +6 -7
  227. package/lib-esm/assignment/utils/generalAssignment/exploreTree.js.map +1 -0
  228. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/formatData.js +5 -5
  229. package/lib-esm/assignment/utils/generalAssignment/formatData.js.map +1 -0
  230. package/lib-esm/assignment/utils/generalAssignment/getIntegrationOfAttachedProtons.js.map +1 -0
  231. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/getTargetsAndCorrelations.js +1 -1
  232. package/lib-esm/assignment/utils/generalAssignment/getTargetsAndCorrelations.js.map +1 -0
  233. package/lib-esm/assignment/utils/generalAssignment/getWorkFlow.js.map +1 -0
  234. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/groupCarbonTargetByIntegrationZone.js +8 -8
  235. package/lib-esm/assignment/utils/generalAssignment/groupCarbonTargetByIntegrationZone.js.map +1 -0
  236. package/lib-esm/assignment/utils/generalAssignment/isSpectraData1D.js.map +1 -0
  237. package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/partialScore.js +20 -20
  238. package/lib-esm/assignment/utils/generalAssignment/partialScore.js.map +1 -0
  239. package/lib-esm/assignment/utils/generalAssignment/searchIndices.js.map +1 -0
  240. package/lib-esm/assignment/utils/{buildAssignments.js → oneDimensionalAssignment/buildAssignments.js} +4 -4
  241. package/lib-esm/assignment/utils/oneDimensionalAssignment/buildAssignments.js.map +1 -0
  242. package/lib-esm/assignment/utils/{createMapPossibleAssignments.js → oneDimensionalAssignment/createMapPossibleAssignments.js} +4 -4
  243. package/lib-esm/assignment/utils/oneDimensionalAssignment/createMapPossibleAssignments.js.map +1 -0
  244. package/lib-esm/assignment/utils/{exploreTreeRec.js → oneDimensionalAssignment/exploreTreeRec.js} +7 -8
  245. package/lib-esm/assignment/utils/oneDimensionalAssignment/exploreTreeRec.js.map +1 -0
  246. package/lib-esm/assignment/utils/{partialScore.js → oneDimensionalAssignment/partialScore.js} +9 -9
  247. package/lib-esm/assignment/utils/oneDimensionalAssignment/partialScore.js.map +1 -0
  248. package/lib-esm/constants/SignalsKinds.js.map +1 -1
  249. package/lib-esm/constants/couplingValues.js.map +1 -1
  250. package/lib-esm/constants/impurities.js +2 -1
  251. package/lib-esm/constants/impurities.js.map +1 -1
  252. package/lib-esm/databases/getDatabase.js +1 -1
  253. package/lib-esm/databases/getDatabase.js.map +1 -1
  254. package/lib-esm/datum/Filters.js +4 -0
  255. package/lib-esm/datum/Filters.js.map +1 -1
  256. package/lib-esm/datum/FiltersManager.js +2 -2
  257. package/lib-esm/datum/FiltersManager.js.map +1 -1
  258. package/lib-esm/datum/data1d/filter1d/baselineCorrection.js +4 -4
  259. package/lib-esm/datum/data1d/filter1d/baselineCorrection.js.map +1 -1
  260. package/lib-esm/datum/data1d/filter1d/digitalFilter.js +2 -2
  261. package/lib-esm/datum/data1d/filter1d/digitalFilter.js.map +1 -1
  262. package/lib-esm/datum/data1d/filter1d/fft.js +7 -7
  263. package/lib-esm/datum/data1d/filter1d/fft.js.map +1 -1
  264. package/lib-esm/datum/data1d/filter1d/phaseCorrection.js +3 -3
  265. package/lib-esm/datum/data1d/filter1d/phaseCorrection.js.map +1 -1
  266. package/lib-esm/datum/data1d/filter1d/signalProcessing.js +1 -1
  267. package/lib-esm/datum/data1d/filter1d/signalProcessing.js.map +1 -1
  268. package/lib-esm/datum/data1d/filter1d/utils/padDataToNextPowerOfTwo.js +2 -2
  269. package/lib-esm/datum/data1d/filter1d/utils/padDataToNextPowerOfTwo.js.map +1 -1
  270. package/lib-esm/datum/data1d/filter1d/zeroFilling.js +8 -8
  271. package/lib-esm/datum/data1d/filter1d/zeroFilling.js.map +1 -1
  272. package/lib-esm/datum/data1d/utils/mapPeaks.js +1 -1
  273. package/lib-esm/datum/data1d/utils/mapPeaks.js.map +1 -1
  274. package/lib-esm/datum/data2d/filter2d/fftDimension1.js +43 -0
  275. package/lib-esm/datum/data2d/filter2d/fftDimension1.js.map +1 -0
  276. package/lib-esm/datum/data2d/filter2d/fftDimension2.js +54 -0
  277. package/lib-esm/datum/data2d/filter2d/fftDimension2.js.map +1 -0
  278. package/lib-esm/datum/data2d/utils/getShift.js +1 -1
  279. package/lib-esm/datum/data2d/utils/getShift.js.map +1 -1
  280. package/lib-esm/multiplicity/splitPatterns.js +1 -1
  281. package/lib-esm/multiplicity/splitPatterns.js.map +1 -1
  282. package/lib-esm/peaks/peaksFilterImpurities.js +7 -6
  283. package/lib-esm/peaks/peaksFilterImpurities.js.map +1 -1
  284. package/lib-esm/peaks/peaksToRanges.js +17 -17
  285. package/lib-esm/peaks/peaksToRanges.js.map +1 -1
  286. package/lib-esm/peaks/solventSuppression.js +11 -11
  287. package/lib-esm/peaks/solventSuppression.js.map +1 -1
  288. package/lib-esm/peaks/util/addMissingIDs.js.map +1 -1
  289. package/lib-esm/peaks/util/determineRealTop.js +32 -32
  290. package/lib-esm/peaks/util/determineRealTop.js.map +1 -1
  291. package/lib-esm/peaks/util/getKernel.js +4 -4
  292. package/lib-esm/peaks/util/getKernel.js.map +1 -1
  293. package/lib-esm/peaks/util/peakOptimizer.js +17 -17
  294. package/lib-esm/peaks/util/peakOptimizer.js.map +1 -1
  295. package/lib-esm/peaks/util/setIDs.js.map +1 -1
  296. package/lib-esm/prediction/predictAll.js +2 -1
  297. package/lib-esm/prediction/predictAll.js.map +1 -1
  298. package/lib-esm/prediction/predictCOSY.js +1 -1
  299. package/lib-esm/prediction/predictCOSY.js.map +1 -1
  300. package/lib-esm/prediction/predictCarbon.js +6 -6
  301. package/lib-esm/prediction/predictCarbon.js.map +1 -1
  302. package/lib-esm/prediction/predictHMBC.js +1 -1
  303. package/lib-esm/prediction/predictHMBC.js.map +1 -1
  304. package/lib-esm/prediction/predictHSQC.js +1 -1
  305. package/lib-esm/prediction/predictHSQC.js.map +1 -1
  306. package/lib-esm/prediction/predictProton.js +9 -9
  307. package/lib-esm/prediction/predictProton.js.map +1 -1
  308. package/lib-esm/prediction/utils/getFilteredIDiaIDs.js +3 -3
  309. package/lib-esm/prediction/utils/getFilteredIDiaIDs.js.map +1 -1
  310. package/lib-esm/prediction/utils/getNuclei.js.map +1 -1
  311. package/lib-esm/prediction/utils/predict2D.js +17 -17
  312. package/lib-esm/prediction/utils/predict2D.js.map +1 -1
  313. package/lib-esm/prediction/utils/queryByHOSE.js +1 -1
  314. package/lib-esm/prediction/utils/queryByHOSE.js.map +1 -1
  315. package/lib-esm/ranges/markSolventSignal.js +8 -8
  316. package/lib-esm/ranges/markSolventSignal.js.map +1 -1
  317. package/lib-esm/ranges/rangesToACS.js +6 -6
  318. package/lib-esm/ranges/rangesToACS.js.map +1 -1
  319. package/lib-esm/ranges/rangesToXY.js +6 -6
  320. package/lib-esm/ranges/rangesToXY.js.map +1 -1
  321. package/lib-esm/signal/signalJoinCouplings.js +9 -9
  322. package/lib-esm/signal/signalJoinCouplings.js.map +1 -1
  323. package/lib-esm/signal/signalMultiplicityPattern.js +2 -2
  324. package/lib-esm/signal/signalMultiplicityPattern.js.map +1 -1
  325. package/lib-esm/signals/addDummySignals.js +4 -4
  326. package/lib-esm/signals/addDummySignals.js.map +1 -1
  327. package/lib-esm/signals/hackSignalsToXY.js +1 -1
  328. package/lib-esm/signals/hackSignalsToXY.js.map +1 -1
  329. package/lib-esm/signals/optimization/getInternalSignals.js +6 -6
  330. package/lib-esm/signals/optimization/getInternalSignals.js.map +1 -1
  331. package/lib-esm/signals/optimization/getSumOfShapes.js +1 -1
  332. package/lib-esm/signals/optimization/getSumOfShapes.js.map +1 -1
  333. package/lib-esm/signals/optimizeSignals.js +3 -3
  334. package/lib-esm/signals/optimizeSignals.js.map +1 -1
  335. package/lib-esm/signals/signals2DToZ.js +3 -2
  336. package/lib-esm/signals/signals2DToZ.js.map +1 -1
  337. package/lib-esm/signals/signalsJoin.js +5 -5
  338. package/lib-esm/signals/signalsJoin.js.map +1 -1
  339. package/lib-esm/signals/signalsToFID.js +1 -1
  340. package/lib-esm/signals/signalsToFID.js.map +1 -1
  341. package/lib-esm/signals/signalsToRanges.js +3 -3
  342. package/lib-esm/signals/signalsToRanges.js.map +1 -1
  343. package/lib-esm/signals/signalsToXY.js +3 -3
  344. package/lib-esm/signals/signalsToXY.js.map +1 -1
  345. package/lib-esm/signals/simulation/signalsToSpinSystem.js +2 -2
  346. package/lib-esm/signals/simulation/signalsToSpinSystem.js.map +1 -1
  347. package/lib-esm/signals/simulation/simulate1D.js +2 -2
  348. package/lib-esm/signals/simulation/simulate1D.js.map +1 -1
  349. package/lib-esm/signals/simulation/simulateXYPeaks.js +15 -17
  350. package/lib-esm/signals/simulation/simulateXYPeaks.js.map +1 -1
  351. package/lib-esm/signals/simulation/splitSpinSystem.js +26 -23
  352. package/lib-esm/signals/simulation/splitSpinSystem.js.map +1 -1
  353. package/lib-esm/signals/utils/jAnalyzer.js +38 -38
  354. package/lib-esm/signals/utils/jAnalyzer.js.map +1 -1
  355. package/lib-esm/utilities/getFrequency.js +1 -1
  356. package/lib-esm/utilities/getFrequency.js.map +1 -1
  357. package/lib-esm/utilities/resurrectRange.js +1 -1
  358. package/lib-esm/utilities/resurrectRange.js.map +1 -1
  359. package/lib-esm/xy/xyAutoPeaksPicking.js +3 -3
  360. package/lib-esm/xy/xyAutoPeaksPicking.js.map +1 -1
  361. package/lib-esm/xyz/quadrature.js +6 -6
  362. package/lib-esm/xyz/quadrature.js.map +1 -1
  363. package/lib-esm/xyz/util/fft2d/digitalFilter.js +3 -3
  364. package/lib-esm/xyz/util/fft2d/digitalFilter.js.map +1 -1
  365. package/lib-esm/xyz/util/fft2d/fftDirectDimension.js +4 -3
  366. package/lib-esm/xyz/util/fft2d/fftDirectDimension.js.map +1 -1
  367. package/lib-esm/xyz/util/fft2d/fftIndirectDimension.js +5 -4
  368. package/lib-esm/xyz/util/fft2d/fftIndirectDimension.js.map +1 -1
  369. package/lib-esm/xyz/util/fft2d/removeDCOffset.js +1 -1
  370. package/lib-esm/xyz/util/fft2d/removeDCOffset.js.map +1 -1
  371. package/lib-esm/xyz/util/fft2d/zeroFilling.js +4 -6
  372. package/lib-esm/xyz/util/fft2d/zeroFilling.js.map +1 -1
  373. package/lib-esm/xyz/util/formatZone.js +3 -3
  374. package/lib-esm/xyz/util/formatZone.js.map +1 -1
  375. package/lib-esm/xyz/util/getMinMaxXY.js +19 -0
  376. package/lib-esm/xyz/util/getMinMaxXY.js.map +1 -0
  377. package/lib-esm/xyz/util/padData.js +7 -7
  378. package/lib-esm/xyz/util/padData.js.map +1 -1
  379. package/lib-esm/xyz/xyzAutoSignalsPicking.js +19 -18
  380. package/lib-esm/xyz/xyzAutoSignalsPicking.js.map +1 -1
  381. package/lib-esm/xyz/xyzBidimensionalFFT.js +1 -18
  382. package/lib-esm/xyz/xyzBidimensionalFFT.js.map +1 -1
  383. package/lib-esm/xyz/xyzJResAnalyzer.js +21 -21
  384. package/lib-esm/xyz/xyzJResAnalyzer.js.map +1 -1
  385. package/package.json +4 -4
  386. package/src/apodization/compose.ts +1 -1
  387. package/src/assignment/get13CAssignments.ts +6 -3
  388. package/src/assignment/get1HAssignments.ts +7 -6
  389. package/src/assignment/getAssignments.ts +7 -7
  390. package/src/assignment/nmrAssigment.ts +2 -2
  391. package/src/assignment/utils/addSolution.ts +45 -0
  392. package/src/assignment/utils/{getAssignment → generalAssignment}/buildAssignments.ts +29 -36
  393. package/src/assignment/utils/{getAssignment → generalAssignment}/checkIDs.ts +6 -6
  394. package/src/assignment/utils/{getAssignment → generalAssignment}/createMapPossibleAssignment.ts +10 -14
  395. package/src/assignment/utils/{getAssignment → generalAssignment}/exploreTree.ts +7 -8
  396. package/src/assignment/utils/{getAssignment → generalAssignment}/formatData.ts +5 -5
  397. package/src/assignment/utils/{getAssignment → generalAssignment}/getTargetsAndCorrelations.ts +3 -5
  398. package/src/assignment/utils/{getAssignment → generalAssignment}/getWorkFlow.ts +2 -5
  399. package/src/assignment/utils/{getAssignment → generalAssignment}/groupCarbonTargetByIntegrationZone.ts +8 -8
  400. package/src/assignment/utils/{getAssignment → generalAssignment}/partialScore.ts +25 -29
  401. package/src/assignment/utils/{buildAssignments.ts → oneDimensionalAssignment/buildAssignments.ts} +6 -8
  402. package/src/assignment/utils/{createMapPossibleAssignments.ts → oneDimensionalAssignment/createMapPossibleAssignments.ts} +9 -9
  403. package/src/assignment/utils/{exploreTreeRec.ts → oneDimensionalAssignment/exploreTreeRec.ts} +8 -9
  404. package/src/assignment/utils/{partialScore.ts → oneDimensionalAssignment/partialScore.ts} +10 -12
  405. package/src/constants/SignalsKinds.ts +1 -1
  406. package/src/constants/couplingValues.ts +1 -1
  407. package/src/constants/impurities.ts +14 -15
  408. package/src/databases/getDatabase.ts +1 -1
  409. package/src/datum/Filters.ts +4 -0
  410. package/src/datum/FiltersManager.ts +3 -3
  411. package/src/datum/MatrixOptions.ts +1 -1
  412. package/src/datum/data1d/Entry1D.ts +1 -1
  413. package/src/datum/data1d/filter1d/baselineCorrection.ts +4 -4
  414. package/src/datum/data1d/filter1d/digitalFilter.ts +2 -2
  415. package/src/datum/data1d/filter1d/fft.ts +7 -7
  416. package/src/datum/data1d/filter1d/phaseCorrection.ts +3 -3
  417. package/src/datum/data1d/filter1d/signalProcessing.ts +1 -1
  418. package/src/datum/data1d/filter1d/utils/padDataToNextPowerOfTwo.ts +2 -2
  419. package/src/datum/data1d/filter1d/zeroFilling.ts +10 -9
  420. package/src/datum/data1d/utils/mapPeaks.ts +1 -1
  421. package/src/datum/data2d/Entry2D.ts +1 -1
  422. package/src/datum/data2d/filter2d/fftDimension1.ts +61 -0
  423. package/src/datum/data2d/filter2d/fftDimension2.ts +72 -0
  424. package/src/datum/data2d/utils/getShift.ts +1 -1
  425. package/src/ml-tree-set.d.ts +1 -1
  426. package/src/multiplicity/splitPatterns.ts +1 -1
  427. package/src/peaks/peaksFilterImpurities.ts +7 -6
  428. package/src/peaks/peaksToRanges.ts +19 -18
  429. package/src/peaks/solventSuppression.ts +11 -11
  430. package/src/peaks/util/addMissingIDs.ts +1 -1
  431. package/src/peaks/util/determineRealTop.ts +32 -32
  432. package/src/peaks/util/getKernel.ts +4 -4
  433. package/src/peaks/util/peakOptimizer.ts +17 -17
  434. package/src/peaks/util/setIDs.ts +6 -4
  435. package/src/prediction/dataStructure.ts +1 -3
  436. package/src/prediction/predictAll.ts +3 -2
  437. package/src/prediction/predictCOSY.ts +1 -1
  438. package/src/prediction/predictCarbon.ts +6 -6
  439. package/src/prediction/predictHMBC.ts +1 -1
  440. package/src/prediction/predictHSQC.ts +1 -1
  441. package/src/prediction/predictProton.ts +9 -9
  442. package/src/prediction/utils/getFilteredIDiaIDs.ts +3 -3
  443. package/src/prediction/utils/getNuclei.ts +2 -2
  444. package/src/prediction/utils/predict2D.ts +21 -25
  445. package/src/prediction/utils/queryByHOSE.ts +1 -1
  446. package/src/ranges/markSolventSignal.ts +8 -8
  447. package/src/ranges/rangesToACS.ts +6 -6
  448. package/src/ranges/rangesToXY.ts +6 -6
  449. package/src/signal/signalJoinCouplings.ts +9 -9
  450. package/src/signal/signalMultiplicityPattern.ts +2 -2
  451. package/src/signals/addDummySignals.ts +4 -4
  452. package/src/signals/hackSignalsToXY.ts +1 -1
  453. package/src/signals/optimization/getInternalSignals.ts +6 -6
  454. package/src/signals/optimization/getSumOfShapes.ts +1 -1
  455. package/src/signals/optimizeSignals.ts +3 -3
  456. package/src/signals/signals2DToZ.ts +4 -8
  457. package/src/signals/signalsJoin.ts +5 -5
  458. package/src/signals/signalsToFID.ts +1 -1
  459. package/src/signals/signalsToRanges.ts +3 -3
  460. package/src/signals/signalsToXY.ts +3 -3
  461. package/src/signals/simulation/signalsToSpinSystem.ts +3 -5
  462. package/src/signals/simulation/simulate1D.ts +2 -2
  463. package/src/signals/simulation/simulateXYPeaks.ts +16 -17
  464. package/src/signals/simulation/splitSpinSystem.ts +28 -25
  465. package/src/signals/utils/jAnalyzer.ts +38 -38
  466. package/src/types/Integrals.ts +1 -1
  467. package/src/types/Peaks/Peaks.ts +1 -1
  468. package/src/types/Ranges/Ranges.ts +1 -1
  469. package/src/types/Zones/Zone.ts +1 -1
  470. package/src/types/Zones/Zones.ts +1 -1
  471. package/src/utilities/getFrequency.ts +1 -1
  472. package/src/utilities/resurrectRange.ts +1 -1
  473. package/src/xy/xyAutoPeaksPicking.ts +3 -3
  474. package/src/xyz/quadrature.ts +6 -6
  475. package/src/xyz/util/fft2d/digitalFilter.ts +3 -3
  476. package/src/xyz/util/fft2d/fftDirectDimension.ts +4 -7
  477. package/src/xyz/util/fft2d/fftIndirectDimension.ts +6 -8
  478. package/src/xyz/util/fft2d/removeDCOffset.ts +1 -1
  479. package/src/xyz/util/fft2d/zeroFilling.ts +5 -6
  480. package/src/xyz/util/formatZone.ts +3 -3
  481. package/src/xyz/util/getMinMaxXY.ts +19 -0
  482. package/src/xyz/util/padData.ts +7 -7
  483. package/src/xyz/xyzAutoSignalsPicking.ts +20 -19
  484. package/src/xyz/xyzBidimensionalFFT.ts +1 -20
  485. package/src/xyz/xyzJResAnalyzer.ts +21 -21
  486. package/lib/assignment/utils/buildAssignments.js.map +0 -1
  487. package/lib/assignment/utils/createMapPossibleAssignments.js.map +0 -1
  488. package/lib/assignment/utils/exploreTreeRec.js.map +0 -1
  489. package/lib/assignment/utils/getAssignment/buildAssignments.js.map +0 -1
  490. package/lib/assignment/utils/getAssignment/checkIDs.js.map +0 -1
  491. package/lib/assignment/utils/getAssignment/createMapPossibleAssignment.js.map +0 -1
  492. package/lib/assignment/utils/getAssignment/exploreTree.js.map +0 -1
  493. package/lib/assignment/utils/getAssignment/formatData.js.map +0 -1
  494. package/lib/assignment/utils/getAssignment/getIntegrationOfAttachedProtons.js.map +0 -1
  495. package/lib/assignment/utils/getAssignment/getTargetsAndCorrelations.js.map +0 -1
  496. package/lib/assignment/utils/getAssignment/getWorkFlow.js.map +0 -1
  497. package/lib/assignment/utils/getAssignment/groupCarbonTargetByIntegrationZone.js.map +0 -1
  498. package/lib/assignment/utils/getAssignment/isSpectraData1D.js.map +0 -1
  499. package/lib/assignment/utils/getAssignment/partialScore.js.map +0 -1
  500. package/lib/assignment/utils/getAssignment/searchIndices.js.map +0 -1
  501. package/lib/assignment/utils/partialScore.js.map +0 -1
  502. package/lib-esm/assignment/utils/buildAssignments.js.map +0 -1
  503. package/lib-esm/assignment/utils/createMapPossibleAssignments.js.map +0 -1
  504. package/lib-esm/assignment/utils/exploreTreeRec.js.map +0 -1
  505. package/lib-esm/assignment/utils/getAssignment/buildAssignments.js.map +0 -1
  506. package/lib-esm/assignment/utils/getAssignment/checkIDs.js.map +0 -1
  507. package/lib-esm/assignment/utils/getAssignment/createMapPossibleAssignment.js.map +0 -1
  508. package/lib-esm/assignment/utils/getAssignment/exploreTree.js.map +0 -1
  509. package/lib-esm/assignment/utils/getAssignment/formatData.js.map +0 -1
  510. package/lib-esm/assignment/utils/getAssignment/getIntegrationOfAttachedProtons.js.map +0 -1
  511. package/lib-esm/assignment/utils/getAssignment/getTargetsAndCorrelations.js.map +0 -1
  512. package/lib-esm/assignment/utils/getAssignment/getWorkFlow.js.map +0 -1
  513. package/lib-esm/assignment/utils/getAssignment/groupCarbonTargetByIntegrationZone.js.map +0 -1
  514. package/lib-esm/assignment/utils/getAssignment/isSpectraData1D.js.map +0 -1
  515. package/lib-esm/assignment/utils/getAssignment/partialScore.js.map +0 -1
  516. package/lib-esm/assignment/utils/getAssignment/searchIndices.js.map +0 -1
  517. package/lib-esm/assignment/utils/partialScore.js.map +0 -1
  518. /package/lib/assignment/utils/{getAssignment → generalAssignment}/checkIDs.d.ts +0 -0
  519. /package/lib/assignment/utils/{getAssignment → generalAssignment}/formatData.d.ts +0 -0
  520. /package/lib/assignment/utils/{getAssignment → generalAssignment}/getIntegrationOfAttachedProtons.d.ts +0 -0
  521. /package/lib/assignment/utils/{getAssignment → generalAssignment}/getIntegrationOfAttachedProtons.js +0 -0
  522. /package/lib/assignment/utils/{getAssignment → generalAssignment}/getWorkFlow.js +0 -0
  523. /package/lib/assignment/utils/{getAssignment → generalAssignment}/groupCarbonTargetByIntegrationZone.d.ts +0 -0
  524. /package/lib/assignment/utils/{getAssignment → generalAssignment}/isSpectraData1D.d.ts +0 -0
  525. /package/lib/assignment/utils/{getAssignment → generalAssignment}/isSpectraData1D.js +0 -0
  526. /package/lib/assignment/utils/{getAssignment → generalAssignment}/searchIndices.d.ts +0 -0
  527. /package/lib/assignment/utils/{getAssignment → generalAssignment}/searchIndices.js +0 -0
  528. /package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/getIntegrationOfAttachedProtons.js +0 -0
  529. /package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/getWorkFlow.js +0 -0
  530. /package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/isSpectraData1D.js +0 -0
  531. /package/lib-esm/assignment/utils/{getAssignment → generalAssignment}/searchIndices.js +0 -0
  532. /package/src/assignment/utils/{getAssignment → generalAssignment}/getIntegrationOfAttachedProtons.ts +0 -0
  533. /package/src/assignment/utils/{getAssignment → generalAssignment}/isSpectraData1D.ts +0 -0
  534. /package/src/assignment/utils/{getAssignment → generalAssignment}/searchIndices.ts +0 -0
@@ -0,0 +1,45 @@
1
+ import {
2
+ Predictions1Dassignments,
3
+ StoreAssignments,
4
+ } from './oneDimensionalAssignment/buildAssignments';
5
+
6
+ export interface SolutionAssignment {
7
+ assignment: string[];
8
+ score: number;
9
+ }
10
+
11
+ interface AddSolutionProps {
12
+ score: number;
13
+ maxSolutions: number;
14
+ partial: Array<string | null>;
15
+ predictions: Predictions1Dassignments;
16
+ }
17
+
18
+ export function addSolution(store: StoreAssignments, props: AddSolutionProps) {
19
+ const { score, maxSolutions, partial, predictions } = props;
20
+ store.nSolutions++;
21
+ const solution: SolutionAssignment = {
22
+ assignment: JSON.parse(JSON.stringify(partial)),
23
+ score: score / doubleAssignmentPenalty(partial, predictions),
24
+ };
25
+
26
+ if (store.nSolutions >= maxSolutions) {
27
+ if (solution.score > store.solutions.last().score) {
28
+ store.solutions.pollLast();
29
+ store.solutions.add(solution);
30
+ }
31
+ } else {
32
+ store.solutions.add(solution);
33
+ store.nSolutions++;
34
+ }
35
+ }
36
+
37
+ function doubleAssignmentPenalty(
38
+ partial: Array<string | null>,
39
+ predictions: Predictions1Dassignments,
40
+ ) {
41
+ const nbSources = Object.keys(predictions).length;
42
+ const assignments = new Set(partial);
43
+ const nbDoubleAssignment = nbSources - assignments.size;
44
+ return nbDoubleAssignment > 0 ? 2 * nbDoubleAssignment : 1;
45
+ }
@@ -12,7 +12,7 @@ import { predictCarbon } from '../../../prediction/predictCarbon';
12
12
  import { predictProton } from '../../../prediction/predictProton';
13
13
  import { MakeMandatory } from '../../../utilities/MakeMandatory';
14
14
  import { SpectraDataWithIds } from '../../nmrAssigment';
15
- import { StoreAssignments } from '../buildAssignments';
15
+ import { StoreAssignments } from '../oneDimensionalAssignment/buildAssignments';
16
16
 
17
17
  import {
18
18
  createMapPossibleAssignment,
@@ -30,18 +30,14 @@ const comparator = (a: AssignmentSolution, b: AssignmentSolution) => {
30
30
  const predictor = { H: predictProton, C: predictCarbon };
31
31
 
32
32
  export type AtomTypes = 'H' | 'C';
33
- export type CurrentAtoms = Array<AtomTypes>;
34
- export interface Partial {
35
- [key: string]: Array<string | null>;
36
- }
33
+ export type CurrentAtoms = AtomTypes[];
34
+ export type Partial = Record<string, Array<string | null>>;
37
35
 
38
- export interface DiaIDPeerPossibleAssignment {
39
- [key: string]: string[];
40
- }
36
+ export type DiaIDPeerPossibleAssignment = Record<string, string[]>;
41
37
 
42
38
  export interface RestrictionByCS {
43
39
  chemicalShiftRestriction: boolean;
44
- tolerance: { [key: string]: number };
40
+ tolerance: Record<string, number>;
45
41
  useChemicalShiftScore: boolean;
46
42
  }
47
43
 
@@ -51,10 +47,10 @@ export interface BuildAssignmentInput {
51
47
  restrictionByCS: RestrictionByCS;
52
48
  timeout: number;
53
49
  minScore: number;
54
- nbAllowedUnAssigned?: { [key: string]: number };
50
+ nbAllowedUnAssigned?: Record<string, number>;
55
51
  maxSolutions: number;
56
52
  correlations: Values;
57
- assignmentOrder: Array<Array<AtomTypes>>;
53
+ assignmentOrder: AtomTypes[][];
58
54
  predictions: {
59
55
  H?: NMRSignal1D[];
60
56
  C?: NMRSignal1D[];
@@ -80,7 +76,7 @@ function checkNMRSignal1D(
80
76
  'atoms',
81
77
  ];
82
78
  for (const signal of signals) {
83
- for (let key of keys) {
79
+ for (const key of keys) {
84
80
  if (!signal[key]) throw new Error(`property ${key} does not exist`);
85
81
  }
86
82
  }
@@ -93,21 +89,18 @@ export interface Prediction extends NMRSignal1DFromPrediction {
93
89
  pathLength: number[];
94
90
  }
95
91
 
96
- export interface Predictions {
97
- [key: string]: Prediction;
98
- }
92
+ export type Predictions = Record<string, Prediction>;
99
93
 
100
- export interface PredictionsByAtomType {
101
- [key: string]: Predictions;
102
- }
94
+ export type PredictionsByAtomType = Record<string, Predictions>;
103
95
 
104
- export interface InfoByAtomType {
105
- [key: string]: {
96
+ export type InfoByAtomType = Record<
97
+ string,
98
+ {
106
99
  nSources: number;
107
100
  currentIndex: number;
108
101
  nbAllowedUnAssigned: number;
109
- };
110
- }
102
+ }
103
+ >;
111
104
 
112
105
  export const getAllHydrogens = {
113
106
  C: (m: Molecule, i: number) => m.getAllHydrogens(i),
@@ -130,7 +123,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
130
123
  targets,
131
124
  } = props;
132
125
 
133
- let lowerBoundScore = minScore;
126
+ const lowerBoundScore = minScore;
134
127
 
135
128
  let store: StoreAssignments = {
136
129
  solutions: new TreeSet(comparator),
@@ -141,7 +134,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
141
134
  pathLength: true,
142
135
  });
143
136
 
144
- let infoByAtomType: InfoByAtomType = {};
137
+ const infoByAtomType: InfoByAtomType = {};
145
138
  const predictions: PredictionsByAtomType = {};
146
139
  let possibleAssignmentMap: MapPossibleAssignments = {};
147
140
  let diaIDPeerPossibleAssignment: DiaIDPeerPossibleAssignment = {};
@@ -150,7 +143,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
150
143
  for (const atomType of atomTypesToPredict) {
151
144
  const options = predictionOptions[atomType];
152
145
  const predictedSignals = inputPrediction[atomType];
153
- let { joinedSignals } = predictedSignals
146
+ const { joinedSignals } = predictedSignals
154
147
  ? { joinedSignals: predictedSignals }
155
148
  : await predictor[atomType](molecule, options);
156
149
 
@@ -159,7 +152,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
159
152
  if (!predictions[atomType]) predictions[atomType] = {};
160
153
 
161
154
  let totalHydrogens = 0;
162
- for (let prediction of joinedSignals) {
155
+ for (const prediction of joinedSignals) {
163
156
  const diaID = prediction.diaIDs[0];
164
157
  const index = prediction.atoms[0];
165
158
  const allHydrogens = getAllHydrogens[atomType](molecule, index);
@@ -172,7 +165,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
172
165
  pathLength: pathLengthMatrix[index] as number[],
173
166
  };
174
167
  }
175
- for (let diaID in predictions[atomType]) {
168
+ for (const diaID in predictions[atomType]) {
176
169
  predictions[atomType][diaID].allHydrogens *= 100 / totalHydrogens;
177
170
  }
178
171
  infoByAtomType[atomType] = {
@@ -195,7 +188,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
195
188
  );
196
189
  }
197
190
 
198
- let sourceOfPartials = getSourceOfPartials(
191
+ const sourceOfPartials = getSourceOfPartials(
199
192
  store,
200
193
  infoByAtomType,
201
194
  atomTypesToPredict,
@@ -208,7 +201,7 @@ export async function buildAssignments(props: BuildAssignmentInput) {
208
201
 
209
202
  const timeStart = Date.now();
210
203
 
211
- for (let partial of sourceOfPartials) {
204
+ for (const partial of sourceOfPartials) {
212
205
  exploreTree(
213
206
  {
214
207
  currentAtomTypes: atomTypesToPredict,
@@ -252,7 +245,7 @@ function annotateSpectraData(input: AnnotateSpectraDataInput) {
252
245
  for (const atomType of atomTypes) {
253
246
  const targetByAtomType = targets[atomType];
254
247
  for (const targetId in targetByAtomType) {
255
- let target = targetByAtomType[targetId];
248
+ const target = targetByAtomType[targetId];
256
249
  for (const link of target.link) {
257
250
  const signalId = link.signal.id;
258
251
  if (mapSignalId[signalId]) continue;
@@ -262,7 +255,7 @@ function annotateSpectraData(input: AnnotateSpectraDataInput) {
262
255
  }
263
256
 
264
257
  const result = [];
265
- for (let solution of solutions.elements) {
258
+ for (const solution of solutions.elements) {
266
259
  const spectraResult = JSON.parse(
267
260
  JSON.stringify(spectra),
268
261
  ) as SpectraDataWithIds[];
@@ -279,15 +272,15 @@ function annotateSpectraData(input: AnnotateSpectraDataInput) {
279
272
  const target = targetByAtomType[targetID];
280
273
  const diaId = diaIDPeerPossibleAssignment[atomType][index];
281
274
 
282
- for (let link of target.link) {
275
+ for (const link of target.link) {
283
276
  const { spectrumIndex, elementIndex, signalIndex } =
284
277
  mapSignalId[link.signal.id];
285
278
  const spectrum = spectraResult[spectrumIndex];
286
279
 
287
280
  if (isSpectraData1D(spectrum)) {
288
- let { ranges } = spectrum;
289
- let range = ranges[elementIndex];
290
- let signal = range.signals[signalIndex];
281
+ const { ranges } = spectrum;
282
+ const range = ranges[elementIndex];
283
+ const signal = range.signals[signalIndex];
291
284
  if (!signal.diaIDs) signal.diaIDs = [];
292
285
  if (signal.diaIDs.includes(diaId)) continue;
293
286
  signal.diaIDs.push(diaId);
@@ -316,7 +309,7 @@ function getSourceOfPartials(
316
309
  ) {
317
310
  return store.nSolutions > 0
318
311
  ? store.solutions.elements.map((e) => {
319
- let currentAssignment = e.assignment;
312
+ const currentAssignment = e.assignment;
320
313
  for (const atom of currentAtoms) {
321
314
  currentAssignment[atom] = fillPartial(infoByAtomType[atom].nSources);
322
315
  }
@@ -11,8 +11,8 @@ import type {
11
11
  import { isSpectraData1D } from './isSpectraData1D';
12
12
 
13
13
  export function checkIDs(input: SpectraData[] = []): SpectraDataWithIds[] {
14
- let inputClone = JSON.parse(JSON.stringify(input)) as SpectraData[];
15
- let spectra: SpectraDataWithIds[] = [];
14
+ const inputClone = JSON.parse(JSON.stringify(input)) as SpectraData[];
15
+ const spectra: SpectraDataWithIds[] = [];
16
16
  for (const spectraData of inputClone) {
17
17
  if (!('info' in spectraData)) {
18
18
  throw new Error(
@@ -22,10 +22,10 @@ export function checkIDs(input: SpectraData[] = []): SpectraDataWithIds[] {
22
22
 
23
23
  const { info, id } = spectraData;
24
24
  if (isSpectraData1D(spectraData)) {
25
- let ranges = addIDs(spectraData.ranges) as NMRRangeWithIds[];
25
+ const ranges = addIDs(spectraData.ranges) as NMRRangeWithIds[];
26
26
  spectra.push({ id, info, ranges });
27
27
  } else {
28
- let data = addIDs(spectraData.zones) as NMRZoneWithIds[];
28
+ const data = addIDs(spectraData.zones) as NMRZoneWithIds[];
29
29
  spectra.push({ id, info, zones: data });
30
30
  }
31
31
  }
@@ -37,7 +37,7 @@ export function hasIDs(
37
37
  ): asserts data is NMRRangeWithIds[] | NMRZoneWithIds[] {
38
38
  for (const element of data) {
39
39
  if (!element.id) throw new Error('A range/zone has not an ID');
40
- for (let signal of element.signals || []) {
40
+ for (const signal of element.signals || []) {
41
41
  if (!signal.id) throw new Error('A signal has not an ID');
42
42
  }
43
43
  }
@@ -46,7 +46,7 @@ export function hasIDs(
46
46
  export function addIDs<T extends NMRRange[] | NMRZone[]>(data: T) {
47
47
  for (const element of data) {
48
48
  if (!element.id) element.id = generateID();
49
- for (let signal of element.signals || []) {
49
+ for (const signal of element.signals || []) {
50
50
  if (!signal.id) signal.id = generateID();
51
51
  }
52
52
  }
@@ -1,6 +1,6 @@
1
1
  import { getCorrelationDelta } from 'nmr-correlation';
2
2
 
3
- import { PossibleAssignmentMap } from '../createMapPossibleAssignments';
3
+ import { PossibleAssignmentMap } from '../oneDimensionalAssignment/createMapPossibleAssignments';
4
4
 
5
5
  import {
6
6
  AtomTypes,
@@ -9,12 +9,8 @@ import {
9
9
  } from './buildAssignments';
10
10
  import { TargetsByAtomType } from './getTargetsAndCorrelations';
11
11
 
12
- export interface PossibleAssignments {
13
- [key: string]: string[];
14
- }
15
- export interface MapPossibleAssignments {
16
- [key: string]: PossibleAssignmentMap;
17
- }
12
+ export type PossibleAssignments = Record<string, string[]>;
13
+ export type MapPossibleAssignments = Record<string, PossibleAssignmentMap>;
18
14
  export interface CreateMapPossibleAssignmentOptions {
19
15
  restrictionByCS: RestrictionByCS;
20
16
  predictions: PredictionsByAtomType;
@@ -31,17 +27,17 @@ export function createMapPossibleAssignment(
31
27
  const atomTypes = Object.keys(predictions) as AtomTypes[];
32
28
 
33
29
  for (const atomType of atomTypes) {
34
- let errorAbs = toleranceCS[atomType];
35
- let predictionByAtomType = predictions[atomType];
36
- let targetByAtomType = targets[atomType];
30
+ const errorAbs = toleranceCS[atomType];
31
+ const predictionByAtomType = predictions[atomType];
32
+ const targetByAtomType = targets[atomType];
37
33
  if (!expandMap[atomType]) expandMap[atomType] = {};
38
34
  for (const diaID in predictionByAtomType) {
39
- let prediction = predictionByAtomType[diaID];
35
+ const prediction = predictionByAtomType[diaID];
40
36
  expandMap[atomType][diaID] = [];
41
37
 
42
38
  if (targetByAtomType) {
43
39
  for (const targetID in targetByAtomType) {
44
- let target = targetByAtomType[targetID];
40
+ const target = targetByAtomType[targetID];
45
41
  const { nbAtoms, protonsCount: protonsCountFromPrediction } =
46
42
  prediction;
47
43
  const { integration, protonsCount } = target;
@@ -63,11 +59,11 @@ export function createMapPossibleAssignment(
63
59
  // Chemical shift is not a restriction
64
60
  expandMap[atomType][diaID].push(targetID);
65
61
  } else {
66
- let targetDelta = getCorrelationDelta(target);
62
+ const targetDelta = getCorrelationDelta(target);
67
63
  if (targetDelta === undefined) {
68
64
  throw new Error(`Correlation has not delta`);
69
65
  }
70
- let distAfterLimit = Math.abs(
66
+ const distAfterLimit = Math.abs(
71
67
  prediction.delta - targetDelta - errorAbs,
72
68
  );
73
69
 
@@ -1,4 +1,4 @@
1
- import { StoreAssignments } from '../buildAssignments';
1
+ import { StoreAssignments } from '../oneDimensionalAssignment/buildAssignments';
2
2
 
3
3
  import {
4
4
  RestrictionByCS,
@@ -73,10 +73,10 @@ export function exploreTree(
73
73
  const diaID = diaIDPeerPossibleAssignment[atomType][currentIndex];
74
74
  const possibleAssignments = possibleAssignmentMap[atomType][diaID];
75
75
 
76
- for (let targetID of possibleAssignments) {
76
+ for (const targetID of possibleAssignments) {
77
77
  partial[atomType][currentIndex] = targetID;
78
78
 
79
- let score = partialScore(partial, {
79
+ const score = partialScore(partial, {
80
80
  diaIDPeerPossibleAssignment,
81
81
  infoByAtomTypes,
82
82
  restrictionByCS,
@@ -126,11 +126,10 @@ export interface AssignmentSolution {
126
126
  }
127
127
 
128
128
  function addSolution(store: StoreAssignments, props: AddSolutionOptions) {
129
- let { score, maxSolutions, partial, predictions } = props;
130
- score /= doubleAssignmentPenalty(partial, predictions);
131
- let solution: AssignmentSolution = {
129
+ const { score, maxSolutions, partial, predictions } = props;
130
+ const solution: AssignmentSolution = {
132
131
  assignment: JSON.parse(JSON.stringify(partial)),
133
- score,
132
+ score: score / doubleAssignmentPenalty(partial, predictions),
134
133
  };
135
134
 
136
135
  if (store.nSolutions >= maxSolutions) {
@@ -163,7 +162,7 @@ function doubleAssignmentPenalty(
163
162
  let nbDoubleAssignment = 0;
164
163
  for (const atomType in predictions) {
165
164
  const nbSources = Object.keys(predictions[atomType]).length;
166
- let assignments = new Set(partial[atomType]);
165
+ const assignments = new Set(partial[atomType]);
167
166
  nbDoubleAssignment += nbSources - assignments.size;
168
167
  }
169
168
  return nbDoubleAssignment > 0 ? 2 * nbDoubleAssignment : 1;
@@ -22,8 +22,8 @@ export type SpectraDataFormatted =
22
22
  export function formatData(
23
23
  input: SpectraDataWithIds[] = [],
24
24
  ): SpectraDataFormatted[] {
25
- let inputClone = JSON.parse(JSON.stringify(input)) as SpectraDataWithIds[];
26
- let spectra: SpectraDataFormatted[] = [];
25
+ const inputClone = JSON.parse(JSON.stringify(input)) as SpectraDataWithIds[];
26
+ const spectra: SpectraDataFormatted[] = [];
27
27
  for (const spectraData of inputClone) {
28
28
  const { id, info } = spectraData;
29
29
  if (isSpectraData1D(spectraData)) {
@@ -43,12 +43,12 @@ export function formatData(
43
43
  function rescaleIntegration(spectrum: SpectraData1DWithIds): NMRRangeWithIds[] {
44
44
  if (spectrum.info.nucleus !== '1H') return spectrum.ranges;
45
45
 
46
- let totalIntegration = spectrum.ranges.reduce(
46
+ const totalIntegration = spectrum.ranges.reduce(
47
47
  (total, range) => (range.integration ? total + range.integration : total),
48
48
  0,
49
49
  );
50
50
 
51
- for (let range of spectrum.ranges) {
51
+ for (const range of spectrum.ranges) {
52
52
  if (range.integration) {
53
53
  range.integration *= 100 / totalIntegration;
54
54
  if (range.signals) {
@@ -57,7 +57,7 @@ function rescaleIntegration(spectrum: SpectraData1DWithIds): NMRRangeWithIds[] {
57
57
  signal.integration ? total + signal.integration : total,
58
58
  0,
59
59
  );
60
- for (let signal of range.signals) {
60
+ for (const signal of range.signals) {
61
61
  if (signal.integration) {
62
62
  signal.integration *= range.integration / totalSignalIntegration;
63
63
  } else {
@@ -12,11 +12,9 @@ export interface CorrelationWithIntegration
12
12
  'link' | 'atomType' | 'label' | 'attachment' | 'protonsCount'
13
13
  > {
14
14
  integration: number;
15
- indirectLinks: Array<Link>;
16
- }
17
- export interface Targets {
18
- [key: string]: CorrelationWithIntegration;
15
+ indirectLinks: Link[];
19
16
  }
17
+ export type Targets = Record<string, CorrelationWithIntegration>;
20
18
  export interface TargetsByAtomType {
21
19
  H: Targets;
22
20
  C: Targets;
@@ -40,7 +38,7 @@ export function getTargetsAndCorrelations(
40
38
  tolerance,
41
39
  });
42
40
 
43
- let targets: any = {};
41
+ const targets: any = {};
44
42
  for (const correlation of correlations) {
45
43
  if (correlation.pseudo) continue;
46
44
  const { id: targetID, atomType } = correlation;
@@ -8,10 +8,7 @@ import { AtomTypes } from './buildAssignments';
8
8
  * @param {*} justAssign
9
9
  */
10
10
 
11
- function getWorkFlow(
12
- correlations: Values,
13
- justAssign: Array<AtomTypes[]> = [],
14
- ) {
11
+ function getWorkFlow(correlations: Values, justAssign: AtomTypes[][] = []) {
15
12
  const experimentTypes = extractExperimentType(correlations);
16
13
 
17
14
  const { hasHSQC, types } = experimentTypes;
@@ -20,7 +17,7 @@ function getWorkFlow(
20
17
  return { assignmentOrder: justAssign, experimentTypes };
21
18
  }
22
19
 
23
- const assignmentOrder: Array<AtomTypes[]> = [];
20
+ const assignmentOrder: AtomTypes[][] = [];
24
21
 
25
22
  if (hasHSQC) {
26
23
  assignmentOrder.push(['C'], ['H']);
@@ -8,27 +8,27 @@ function groupCarbonTargetByIntegrationZone(
8
8
  targets: Targets,
9
9
  correlations: CorrelationWithIntegration[],
10
10
  ) {
11
- let targetID = activeDomainOnTarget[0];
12
- let { H: attachments = [] } = targets[targetID].attachment;
11
+ const targetID = activeDomainOnTarget[0];
12
+ const { H: attachments = [] } = targets[targetID].attachment;
13
13
 
14
- let targetByIntegral = [
14
+ const targetByIntegral = [
15
15
  { targetIDs: [targetID], attachments: new Set<number>(attachments) },
16
16
  ];
17
17
 
18
18
  for (let i = 1; i < activeDomainOnTarget.length; i++) {
19
- let targetID = activeDomainOnTarget[i];
20
- let target = targets[targetID];
21
- let { H: attachments = [] } = target.attachment;
19
+ const targetID = activeDomainOnTarget[i];
20
+ const target = targets[targetID];
21
+ const { H: attachments = [] } = target.attachment;
22
22
 
23
23
  let alone = true;
24
- for (let group of targetByIntegral) {
24
+ for (const group of targetByIntegral) {
25
25
  const pertain = attachments.some((attachment: any) =>
26
26
  group.attachments.has(attachment),
27
27
  );
28
28
  if (pertain) {
29
29
  alone = false;
30
30
  group.targetIDs.push(targetID);
31
- for (let attachment of attachments) {
31
+ for (const attachment of attachments) {
32
32
  group.attachments.add(attachment);
33
33
  }
34
34
  break;
@@ -14,7 +14,7 @@ import {
14
14
  import groupCarbonTargetByIntegrationZone from './groupCarbonTargetByIntegrationZone';
15
15
 
16
16
  export interface PartialScoreOptions {
17
- diaIDPeerPossibleAssignment: { [key: string]: string[] };
17
+ diaIDPeerPossibleAssignment: Record<string, string[]>;
18
18
  restrictionByCS: RestrictionByCS;
19
19
  infoByAtomTypes: InfoByAtomType;
20
20
  correlations: CorrelationWithIntegration[];
@@ -22,13 +22,9 @@ export interface PartialScoreOptions {
22
22
  targets: TargetsByAtomType;
23
23
  }
24
24
 
25
- interface ObjectStringArray {
26
- [key: string]: string[];
27
- }
25
+ type ObjectStringArray = Record<string, string[]>;
28
26
 
29
- interface ObjectObjectStringArray {
30
- [key: string]: ObjectStringArray;
31
- }
27
+ type ObjectObjectStringArray = Record<string, ObjectStringArray>;
32
28
 
33
29
  export function partialScore(partial: Partial, props: PartialScoreOptions) {
34
30
  const {
@@ -43,8 +39,8 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
43
39
  const { tolerance: toleranceCS, useChemicalShiftScore } = restrictionByCS;
44
40
  let totalStarts = 0;
45
41
  let totalPartial = 0;
46
- let partialInverse: ObjectObjectStringArray = {};
47
- let activeDomainOnPrediction: { [key: string]: number[] } = {};
42
+ const partialInverse: ObjectObjectStringArray = {};
43
+ const activeDomainOnPrediction: Record<string, number[]> = {};
48
44
  const atomTypes = Object.keys(partial) as AtomTypes[];
49
45
  for (const atomType of atomTypes) {
50
46
  let countStars = 0;
@@ -89,11 +85,11 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
89
85
 
90
86
  const getPredictionByDiaID = getPrediction.bind({}, predictions);
91
87
  // check the integration
92
- const targetByIntegral: {
88
+ const targetByIntegral: Array<{
93
89
  atomType: string;
94
90
  targetIDs: string[];
95
91
  integration: number;
96
- }[] = [];
92
+ }> = [];
97
93
 
98
94
  for (const atomType in partial) {
99
95
  if (atomType === 'C' && activeDomainOnTarget[atomType].length > 0) {
@@ -105,7 +101,7 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
105
101
  ),
106
102
  );
107
103
  } else {
108
- for (let targetID of activeDomainOnTarget[atomType]) {
104
+ for (const targetID of activeDomainOnTarget[atomType]) {
109
105
  targetByIntegral.push({
110
106
  atomType,
111
107
  targetIDs: [targetID],
@@ -120,8 +116,8 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
120
116
  if (integration === undefined || isNaN(integration)) continue;
121
117
 
122
118
  let total = 0;
123
- for (let targetID of group.targetIDs) {
124
- let targetToSource = partialInverse[atomType][targetID];
119
+ for (const targetID of group.targetIDs) {
120
+ const targetToSource = partialInverse[atomType][targetID];
125
121
  for (const diaID of targetToSource) {
126
122
  const { prediction, atomType: atomOfPrediction } =
127
123
  getPredictionByDiaID(diaID);
@@ -146,10 +142,10 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
146
142
  const targetID = partialPeerAtomType[index];
147
143
  if (targetID && targetID !== '*') {
148
144
  count++;
149
- let diaID = diaIDPeerPossibleAssignment[atomType][index];
150
- let source = predictions[atomType][diaID];
151
- let target = targetsPeerAtomType[targetID];
152
- let error = toleranceCS[atomType];
145
+ const diaID = diaIDPeerPossibleAssignment[atomType][index];
146
+ const source = predictions[atomType][diaID];
147
+ const target = targetsPeerAtomType[targetID];
148
+ const error = toleranceCS[atomType];
153
149
  // if (source.error) {
154
150
  // error = Math.max(source.error, toleranceCS);
155
151
  // }
@@ -183,7 +179,7 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
183
179
  let scoreOn2D = 0;
184
180
 
185
181
  if (howManyActived(activeDomainOnTarget) > 1) {
186
- let andConstrains: { [key: string]: number } = {};
182
+ const andConstrains: Record<string, number> = {};
187
183
  let activeDomain: Array<{ index: number; atomType: AtomTypes }> = [];
188
184
 
189
185
  for (const atomType of Object.keys(
@@ -204,20 +200,20 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
204
200
  predictions[atomTypeJ][
205
201
  diaIDPeerPossibleAssignment[atomTypeJ][indexJ]
206
202
  ];
207
- let pathLength = predictionI.pathLength[predictionJ.diaIDIndex];
208
- let isPossible = pathLength < 5;
203
+ const pathLength = predictionI.pathLength[predictionJ.diaIDIndex];
204
+ const isPossible = pathLength < 5;
209
205
 
210
- let partialI = partial[atomTypeI][indexI];
211
- let partialJ = partial[atomTypeJ][indexJ];
206
+ const partialI = partial[atomTypeI][indexI];
207
+ const partialJ = partial[atomTypeJ][indexJ];
212
208
 
213
209
  if (!partialI || !partialJ) continue;
214
210
 
215
- let keyOnTargertMap =
211
+ const keyOnTargertMap =
216
212
  partialI > partialJ
217
213
  ? `${partialJ} ${partialI}`
218
214
  : `${partialI} ${partialJ}`;
219
215
 
220
- let areLinked = checkLinking(
216
+ const areLinked = checkLinking(
221
217
  {
222
218
  from: {
223
219
  targetID: partialI,
@@ -231,7 +227,7 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
231
227
  targets,
232
228
  );
233
229
 
234
- let partialScore2D = isPossible
230
+ const partialScore2D = isPossible
235
231
  ? areLinked
236
232
  ? 1
237
233
  : 0
@@ -246,7 +242,7 @@ export function partialScore(partial: Partial, props: PartialScoreOptions) {
246
242
  }
247
243
 
248
244
  let sumAnd = 0;
249
- for (let key in andConstrains) {
245
+ for (const key in andConstrains) {
250
246
  sumAnd += andConstrains[key];
251
247
  }
252
248
 
@@ -277,8 +273,8 @@ function checkLinking(
277
273
  ) {
278
274
  const { from, to } = partials;
279
275
  if (from.targetID === to.targetID) return true;
280
- let correlationI = correlations[from.atomType][from.targetID];
281
- let correlationJ = correlations[to.atomType][to.targetID];
276
+ const correlationI = correlations[from.atomType][from.targetID];
277
+ const correlationJ = correlations[to.atomType][to.targetID];
282
278
  for (const linkJ of correlationJ.link) {
283
279
  for (const link of correlationI.link) {
284
280
  if (link.signal.id === linkJ.signal.id) return true;