diff --git a/src/component/1d/BrushTracker1D.tsx b/src/component/1d/BrushTracker1D.tsx index 9cd7d95ab..bb46b761c 100644 --- a/src/component/1d/BrushTracker1D.tsx +++ b/src/component/1d/BrushTracker1D.tsx @@ -451,6 +451,14 @@ export function BrushTracker1D({ children }: Required) { } break; } + case 'multipleSpectraAnalysis': { + dispatchPreferences({ + type: 'CUT_SPECTRA_ANALYSIS', + payload: { x: xPPM, nucleus: activeTab }, + }); + + break; + } case 'phaseCorrection': dispatch({ type: 'SET_ONE_DIMENSION_PIVOT_POINT', diff --git a/src/component/reducer/preferences/actions/analyzeSpectra.ts b/src/component/reducer/preferences/actions/analyzeSpectra.ts index 0dd1636c4..916960bc2 100644 --- a/src/component/reducer/preferences/actions/analyzeSpectra.ts +++ b/src/component/reducer/preferences/actions/analyzeSpectra.ts @@ -6,6 +6,7 @@ import { getMultipleSpectraAnalysisDefaultValues } from '../panelsPreferencesDef import type { AnalyzeSpectraAction, ChangeAnalysisColumnValueKeyAction, + CutSpectraAnalysisAction, DeleteAnalysisColumn, PreferencesState, SetSpectraAnalysisPanelPreferencesAction, @@ -34,6 +35,21 @@ export function analyzeSpectra( columnKey, }); } +export function cutSpectraAnalysis( + draft: Draft, + action: CutSpectraAnalysisAction, +) { + const currentWorkspacePreferences = getActiveWorkspace(draft); + const panels = currentWorkspacePreferences.panels; + const { x, nucleus } = action.payload; + + if (!panels.multipleSpectraAnalysis) { + panels.multipleSpectraAnalysis = + getMultipleSpectraAnalysisDefaultValues(nucleus); + } + + MultipleAnalysis.cutAnalysis(panels.multipleSpectraAnalysis, nucleus, x); +} export function changeAnalysisColumnValueKey( draft: Draft, diff --git a/src/component/reducer/preferences/preferencesReducer.ts b/src/component/reducer/preferences/preferencesReducer.ts index 53895d919..58911ab47 100644 --- a/src/component/reducer/preferences/preferencesReducer.ts +++ b/src/component/reducer/preferences/preferencesReducer.ts @@ -27,6 +27,7 @@ import { addWorkspace } from './actions/addWorkspace.js'; import { analyzeSpectra, changeAnalysisColumnValueKey, + cutSpectraAnalysis, deleteAnalysisColumn, setSpectraAnalysisPanelsPreferences, } from './actions/analyzeSpectra.js'; @@ -111,6 +112,12 @@ export type AnalyzeSpectraAction = ActionType< 'ANALYZE_SPECTRA', { start: number; end: number; nucleus: string; columnKey?: string } >; + +export type CutSpectraAnalysisAction = ActionType< + 'CUT_SPECTRA_ANALYSIS', + { x: number; nucleus: string } +>; + export type ChangeAnalysisColumnValueKeyAction = ActionType< 'CHANGE_ANALYSIS_COLUMN_VALUE_KEY', { columnKey: string; valueKey: string; nucleus: string } @@ -198,7 +205,8 @@ export type PreferencesActions = | ChangePeaksLabelPositionAction | TogglePanelAction | ChangeExportACSSettingsAction - | ChangeDefaultMoleculeSettingsAction; + | ChangeDefaultMoleculeSettingsAction + | CutSpectraAnalysisAction; export type WorkspaceWithSource = Workspace & { source: WorkSpaceSource }; type WorkspacesWithSource = Record; @@ -294,6 +302,8 @@ function innerPreferencesReducer( return deleteAnalysisColumn(draft, action); case 'SET_SPECTRA_ANALYSIS_PREFERENCES': return setSpectraAnalysisPanelsPreferences(draft, action); + case 'CUT_SPECTRA_ANALYSIS': + return cutSpectraAnalysis(draft, action); case 'SET_MATRIX_GENERATION_OPTIONS': return setMatrixGenerationOptions(draft, action); case 'ADD_MATRIX_GENERATION_EXCLUSION_ZONE': diff --git a/src/data/data1d/multipleSpectraAnalysis.ts b/src/data/data1d/multipleSpectraAnalysis.ts index 6ea8910be..f6d05301e 100644 --- a/src/data/data1d/multipleSpectraAnalysis.ts +++ b/src/data/data1d/multipleSpectraAnalysis.ts @@ -33,6 +33,26 @@ export interface SpectraAnalysisData { values: Array>; } +export function cutAnalysis( + spectraAnalysis: PanelsPreferences['multipleSpectraAnalysis'], + nucleus: string, + x: number, +) { + const cutColumns: Record = {}; + + const analysisOptions = spectraAnalysis[nucleus].analysisOptions; + for (const [columnKey, column] of Object.entries(analysisOptions.columns)) { + const { to, from } = column; + if (x > from && x < to) { + cutColumns[columnKey] = { ...column, from: x, to }; + const newKey = generateChar(analysisOptions.columnIndex).toUpperCase(); + cutColumns[newKey] = { ...column, from, to: x }; + analysisOptions.columnIndex++; + } + } + analysisOptions.columns = { ...analysisOptions.columns, ...cutColumns }; +} + function addColumnKey( spectraAnalysis: PanelsPreferences['multipleSpectraAnalysis'], nucleus: string,