Skip to content

Commit 8f49795

Browse files
authored
Merge pull request #145 from NFDI4Chem/auto-processing-1d-proton-carbon
feat: auto processing 1d proton and carbon
2 parents 8dd0eb9 + 1764046 commit 8f49795

6 files changed

Lines changed: 133 additions & 2 deletions

File tree

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@emotion/react": "^11.11.1",
1717
"filelist-utils": "^1.10.2",
1818
"nmr-load-save": "^0.18.0",
19+
"nmr-processing": "^10.0.7",
1920
"nmrium": "^0.43.1-pre.1692874523",
2021
"react-science": "^0.26.2",
2122
"vite-plugin-pwa": "^0.16.4"
@@ -60,4 +61,4 @@
6061
"typescript": "^5.2.2",
6162
"vite": "^4.4.9"
6263
}
63-
}
64+
}

src/NMRiumWrapper.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { NMRium, NMRiumData, NMRiumRef, NMRiumChangeCb } from 'nmrium';
22
import { useEffect, useState, useCallback, CSSProperties, useRef } from 'react';
3+
import { RootLayout } from 'react-science/ui';
34

45
import events from './events';
56
import { useLoadSpectra } from './hooks/useLoadSpectra';
67
import { usePreferences } from './hooks/usePreferences';
78
import { useWhiteList } from './hooks/useWhiteList';
8-
import { RootLayout } from 'react-science/ui';
99
import AboutUsModal from './modal/AboutUsModal';
1010

1111
const styles: Record<'container' | 'loadingContainer', CSSProperties> = {

src/hooks/useLoadSpectra.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { useCallback, useMemo, useState } from 'react';
99

1010
import events from '../events';
11+
import { appendFilters } from '../utilities/appendFilters';
1112
import { getFileNameFromURL } from '../utilities/getFileNameFromURL';
1213
import { isArrayOfString } from '../utilities/isArrayOfString';
1314

@@ -49,12 +50,18 @@ export function useLoadSpectra() {
4950
if ('urls' in options) {
5051
if (isArrayOfString(options.urls)) {
5152
const result = await loadSpectraFromURLs(options.urls);
53+
if (result?.spectra) {
54+
appendFilters(result?.spectra);
55+
}
5256
setData(result as NMRiumData);
5357
} else {
5458
throw new Error('The input must be a valid urls array of string[]');
5559
}
5660
} else if ('files' in options) {
5761
const result = await loadSpectraFromFiles(options.files);
62+
if (result?.spectra) {
63+
appendFilters(result?.spectra);
64+
}
5865
setData(result as NMRiumData);
5966
}
6067
} catch (error: unknown) {

src/modal/AboutUsModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/** @jsxImportSource @emotion/react */
22
import { css } from '@emotion/react';
33
import { Modal, useOnOff } from 'react-science/ui';
4+
45
import versionInfo from '../versionInfo';
56

67
const styles = css`

src/utilities/appendFilters.ts

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import { Spectrum } from 'nmr-load-save';
2+
import { BaseFilter, Filter, Filters, Nucleus } from 'nmr-processing';
3+
4+
const ConfigOnLoadProcessing: Partial<Record<Nucleus, BaseFilter[]>> = {
5+
'1H': [
6+
{
7+
name: Filters.digitalFilter.id,
8+
label: Filters.digitalFilter.name,
9+
value: {},
10+
flag: true,
11+
},
12+
{
13+
name: Filters.apodization.id,
14+
label: Filters.apodization.name,
15+
value: {},
16+
flag: false,
17+
},
18+
{
19+
name: Filters.zeroFilling.id,
20+
label: Filters.zeroFilling.name,
21+
value: {},
22+
flag: true,
23+
},
24+
{
25+
name: Filters.fft.id,
26+
label: Filters.fft.name,
27+
value: {},
28+
flag: true,
29+
},
30+
{
31+
name: Filters.phaseCorrection.id,
32+
label: Filters.phaseCorrection.name,
33+
34+
value: {},
35+
flag: true,
36+
},
37+
],
38+
'13C': [
39+
{
40+
name: Filters.digitalFilter.id,
41+
label: Filters.digitalFilter.name,
42+
43+
value: {},
44+
flag: true,
45+
},
46+
{
47+
name: Filters.apodization.id,
48+
label: Filters.apodization.name,
49+
value: {},
50+
flag: true,
51+
},
52+
{
53+
name: Filters.zeroFilling.id,
54+
label: Filters.zeroFilling.name,
55+
56+
value: {},
57+
flag: true,
58+
},
59+
{
60+
name: Filters.fft.id,
61+
label: Filters.fft.name,
62+
63+
value: {},
64+
flag: true,
65+
},
66+
{
67+
name: Filters.phaseCorrection.id,
68+
label: Filters.phaseCorrection.name,
69+
70+
value: {},
71+
flag: true,
72+
},
73+
],
74+
};
75+
76+
function nucleusToString(nucleus: string | string[]) {
77+
return typeof nucleus === 'string' ? nucleus : nucleus.join(',');
78+
}
79+
80+
interface filterFiltersOptions {
81+
digitalFilter?: number;
82+
}
83+
84+
function mapFilters(
85+
onLoadfilters: BaseFilter[],
86+
options: filterFiltersOptions,
87+
) {
88+
const { digitalFilter } = options;
89+
const filters: BaseFilter[] = [];
90+
91+
for (let filter of onLoadfilters) {
92+
if (
93+
(!digitalFilter && filter.name === Filters.digitalFilter.id) ||
94+
!filter.flag
95+
) {
96+
continue;
97+
}
98+
const isDeleteAllow = !(filter.name === Filters.digitalFilter.id);
99+
filter = { ...filter, isDeleteAllow };
100+
filters.push(filter);
101+
}
102+
return filters;
103+
}
104+
105+
export function appendFilters(spectra: Spectrum[]) {
106+
for (const spectrum of spectra) {
107+
const {
108+
info: { nucleus, isFid, digitalFilter },
109+
filters,
110+
} = spectrum;
111+
const hasFilters = filters.length > 0;
112+
if (isFid && !hasFilters) {
113+
const n = nucleusToString(nucleus);
114+
const onLoadfilters: BaseFilter[] = ConfigOnLoadProcessing?.[n] || [];
115+
if (onLoadfilters.length > 0) {
116+
const autofilters = mapFilters(onLoadfilters, { digitalFilter });
117+
spectrum.filters = autofilters as Filter[];
118+
}
119+
}
120+
}
121+
}

0 commit comments

Comments
 (0)