From a9093447bc71b0c8116fb6248dc0aacb75e25a1d Mon Sep 17 00:00:00 2001 From: Tom Kane Date: Fri, 9 Oct 2026 17:20:55 +0000 Subject: [PATCH 1/7] rearrange and standardise form layouts between experiments, delete visit input, add step/fly to spectroscopy --- .../spectroscopy/SpectroscopyForm.tsx | 130 +++++++++++------- .../spectroscopy/SpectroscopyView.tsx | 2 +- .../components/tomography/TomographyForm.tsx | 92 +++++++------ 3 files changed, 131 insertions(+), 93 deletions(-) diff --git a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx index 3c52a0a8..b248ed16 100644 --- a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx +++ b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx @@ -4,8 +4,6 @@ import AbortButton from "../AbortButton"; import { useState } from "react"; import { NumberInput } from "@diamondlightsource/sci-react-ui"; import { Box } from "@mui/material"; -import { visitToText, VisitInput } from "@diamondlightsource/sci-react-ui"; -import { visitTextToVisit } from "../../utils/common"; export type SpectroscopyFormData = { total_number_of_scan_points: number; @@ -16,7 +14,7 @@ export type SpectroscopyFormData = { }; export function SpectroscopyForm() { - const { instrumentSession, setInstrumentSession } = useInstrumentSession(); + const { instrumentSession } = useInstrumentSession(); const [formData, setFormData] = useState({ total_number_of_scan_points: 25, grid_size: 5.0, @@ -28,88 +26,114 @@ export function SpectroscopyForm() { const maxValue = 14.5; return ( - + + - { - setFormData({ ...formData, ["grid_origin_x"]: parsedValue }); - }} - minValue={minValue} - maxValue={maxValue} - /> - { - setFormData({ ...formData, ["grid_origin_y"]: parsedValue }); + {/* Line one */} + + > + + setFormData(prev => ({ ...prev, grid_origin_x: parsedValue })) + } + minValue={minValue} + maxValue={maxValue} + /> + + setFormData(prev => ({ ...prev, grid_origin_y: parsedValue })) + } + minValue={minValue} + maxValue={maxValue} + /> + + { - setFormData({ ...formData, ["grid_size"]: parsedValue }); - }} + onCommit={parsedValue => + setFormData(prev => ({ ...prev, grid_size: parsedValue })) + } minValue={0.1} maxValue={15} /> + + {/* Line two */} { - setFormData({ - ...formData, - ["total_number_of_scan_points"]: parsedValue, - }); - }} + onCommit={parsedValue => + setFormData(prev => ({ + ...prev, + total_number_of_scan_points: parsedValue, + })) + } minValue={1} /> { - setFormData({ ...formData, ["exposure_time"]: parsedValue }); - }} - minValue={0.1} - /> - + setFormData(prev => ({ ...prev, exposure_time: parsedValue })) } - onSubmit={visit => setInstrumentSession(visitToText(visit))} - submitButton={false} + minValue={0.1} /> - + + {/* Line three */} + + - + + {/* Line four */} + diff --git a/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx b/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx index 137f41fa..58c3590a 100644 --- a/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx +++ b/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx @@ -73,7 +73,7 @@ function SpectroscopyView() { open={drawerOpen} collapsedHeight={DRAWER_COLLAPSED_HEIGHT} onToggle={() => setDrawerOpen(prev => !prev)} - controls={} + controls={[, ]} /> ); diff --git a/apps/visr/src/components/tomography/TomographyForm.tsx b/apps/visr/src/components/tomography/TomographyForm.tsx index 0d83ca91..405edcef 100644 --- a/apps/visr/src/components/tomography/TomographyForm.tsx +++ b/apps/visr/src/components/tomography/TomographyForm.tsx @@ -10,8 +10,6 @@ import { ToggleButton, ToggleButtonGroup, } from "@mui/material"; -import { visitToText, VisitInput } from "@diamondlightsource/sci-react-ui"; -import { visitTextToVisit } from "../../utils/common"; enum LightSource { LED = "led", @@ -22,66 +20,79 @@ enum LightSource { export type TomographyFormData = { number_of_projections: number; light_source: LightSource; + exposure_time: number; }; export function TomographyForm() { - const { instrumentSession, setInstrumentSession } = useInstrumentSession(); + const { instrumentSession } = useInstrumentSession(); const [formData, setFormData] = useState({ number_of_projections: 360, light_source: LightSource.LED, + exposure_time: 0.1, }); const minProjections = 30; const maxProjections = 1440; return ( - + + {/* Line one */} { - setFormData({ - ...formData, - ["number_of_projections"]: parsedValue, - }); - }} + onCommit={parsedValue => + setFormData(prev => ({ + ...prev, + number_of_projections: parsedValue, + })) + } minValue={minProjections} maxValue={maxProjections} /> - + setFormData(prev => ({ ...prev, exposure_time: parsedValue })) } - onSubmit={visit => setInstrumentSession(visitToText(visit))} - submitButton={false} + minValue={0.1} /> - - + + Light Source - value && setFormData({ ...formData, light_source: value }) + value && setFormData(prev => ({ ...prev, light_source: value })) } + sx={{ height: 56 }} > LED Synchrotron @@ -89,14 +100,21 @@ export function TomographyForm() { + + {/* Line two */} - + {/* Line three */} + From c076255f2278169a590a302859b0c3c0ee1935e8 Mon Sep 17 00:00:00 2001 From: Tom Kane Date: Fri, 9 Oct 2026 17:38:14 +0000 Subject: [PATCH 2/7] remove second form used for visualisation --- apps/visr/src/components/spectroscopy/SpectroscopyView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx b/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx index 58c3590a..137f41fa 100644 --- a/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx +++ b/apps/visr/src/components/spectroscopy/SpectroscopyView.tsx @@ -73,7 +73,7 @@ function SpectroscopyView() { open={drawerOpen} collapsedHeight={DRAWER_COLLAPSED_HEIGHT} onToggle={() => setDrawerOpen(prev => !prev)} - controls={[, ]} + controls={} /> ); From 5e938d4e840eeaa7422837c069ab115191949e6e Mon Sep 17 00:00:00 2001 From: Tom Kane Date: Mon, 12 Oct 2026 15:41:26 +0000 Subject: [PATCH 3/7] make step/fly a toggle with run button, change order and refcator --- apps/visr/src/components/scanType.ts | 4 + .../spectroscopy/SpectroscopyForm.tsx | 113 ++++++++---------- .../components/tomography/TomographyForm.tsx | 113 ++++++++++-------- 3 files changed, 118 insertions(+), 112 deletions(-) create mode 100644 apps/visr/src/components/scanType.ts diff --git a/apps/visr/src/components/scanType.ts b/apps/visr/src/components/scanType.ts new file mode 100644 index 00000000..e805bfd7 --- /dev/null +++ b/apps/visr/src/components/scanType.ts @@ -0,0 +1,4 @@ +export enum ScanType { + STEP = "step", + FLY = "fly", +} diff --git a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx index b248ed16..6c8a117a 100644 --- a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx +++ b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx @@ -1,11 +1,13 @@ import { useInstrumentSession } from "../../context/instrumentSession/useInstrumentSession"; import { RunPlanButton } from "@atlas/blueapi-ui"; import AbortButton from "../AbortButton"; +import { ScanType } from "../scanType"; import { useState } from "react"; import { NumberInput } from "@diamondlightsource/sci-react-ui"; -import { Box } from "@mui/material"; +import { Box, ToggleButton, ToggleButtonGroup } from "@mui/material"; export type SpectroscopyFormData = { + scan_type: ScanType; total_number_of_scan_points: number; grid_size: number; grid_origin_x: number; @@ -16,6 +18,7 @@ export type SpectroscopyFormData = { export function SpectroscopyForm() { const { instrumentSession } = useInstrumentSession(); const [formData, setFormData] = useState({ + scan_type: ScanType.STEP, total_number_of_scan_points: 25, grid_size: 5.0, grid_origin_x: 0.0, @@ -25,9 +28,29 @@ export function SpectroscopyForm() { const minValue = -14.5; const maxValue = 14.5; + const setField = ( + key: K, + value: (typeof formData)[K], + ) => setFormData(prev => ({ ...prev, [key]: value })); + + const sectionSx = { pt: 3, borderTop: 1, borderColor: "divider" }; + return ( - - + + {/* Parameters */} - {/* Line one */} - + {/* x and y share one cell */} + - setFormData(prev => ({ ...prev, grid_origin_x: parsedValue })) - } + defaultValue={formData.grid_origin_x} + onCommit={v => setField("grid_origin_x", v)} minValue={minValue} maxValue={maxValue} /> - setFormData(prev => ({ ...prev, grid_origin_y: parsedValue })) - } + defaultValue={formData.grid_origin_y} + onCommit={v => setField("grid_origin_y", v)} minValue={minValue} maxValue={maxValue} /> - - setFormData(prev => ({ ...prev, grid_size: parsedValue })) - } + defaultValue={formData.grid_size} + onCommit={v => setField("grid_size", v)} minValue={0.1} maxValue={15} /> - - {/* Line two */} - setFormData(prev => ({ - ...prev, - total_number_of_scan_points: parsedValue, - })) - } + defaultValue={formData.total_number_of_scan_points} + onCommit={v => setField("total_number_of_scan_points", v)} minValue={1} /> - setFormData(prev => ({ ...prev, exposure_time: parsedValue })) - } + defaultValue={formData.exposure_time} + onCommit={v => setField("exposure_time", v)} minValue={0.1} /> - {/* Line three */} + {/* Scan controls */} + v && setField("scan_type", v)} + > + Step + Fly + - - - - {/* Line four */} - diff --git a/apps/visr/src/components/tomography/TomographyForm.tsx b/apps/visr/src/components/tomography/TomographyForm.tsx index 405edcef..9e798232 100644 --- a/apps/visr/src/components/tomography/TomographyForm.tsx +++ b/apps/visr/src/components/tomography/TomographyForm.tsx @@ -1,6 +1,7 @@ import { useInstrumentSession } from "../../context/instrumentSession/useInstrumentSession"; import { RunPlanButton } from "@atlas/blueapi-ui"; import AbortButton from "../AbortButton"; +import { ScanType } from "../scanType"; import { useState } from "react"; import { NumberInput } from "@diamondlightsource/sci-react-ui"; import { @@ -18,6 +19,7 @@ enum LightSource { } export type TomographyFormData = { + scan_type: ScanType; number_of_projections: number; light_source: LightSource; exposure_time: number; @@ -26,6 +28,7 @@ export type TomographyFormData = { export function TomographyForm() { const { instrumentSession } = useInstrumentSession(); const [formData, setFormData] = useState({ + scan_type: ScanType.STEP, number_of_projections: 360, light_source: LightSource.LED, exposure_time: 0.1, @@ -33,16 +36,36 @@ export function TomographyForm() { const minProjections = 30; const maxProjections = 1440; + const setField = ( + key: K, + value: (typeof formData)[K], + ) => setFormData(prev => ({ ...prev, [key]: value })); + + const sectionSx = { pt: 3, borderTop: 1, borderColor: "divider" }; + return ( - - {/* Line one */} + + {/* Parameters */} - setFormData(prev => ({ - ...prev, - number_of_projections: parsedValue, - })) - } + defaultValue={formData.number_of_projections} + onCommit={v => setField("number_of_projections", v)} minValue={minProjections} maxValue={maxProjections} /> - setFormData(prev => ({ ...prev, exposure_time: parsedValue })) - } + defaultValue={formData.exposure_time} + onCommit={v => setField("exposure_time", v)} minValue={0.1} /> @@ -89,10 +105,7 @@ export function TomographyForm() { fullWidth aria-labelledby="light-source-label" value={formData.light_source} - onChange={(_, value: LightSource | null) => - value && setFormData(prev => ({ ...prev, light_source: value })) - } - sx={{ height: 56 }} + onChange={(_, v) => v && setField("light_source", v)} > LED Synchrotron @@ -101,54 +114,50 @@ export function TomographyForm() { - {/* Line two */} + {/* Scan controls */} + v && setField("scan_type", v)} + > + Step + Fly + + + + + {/* Darks/flats */} + - - - - - - {/* Line three */} - - ); From bb81d1e5336c30470ac3cbb37a139a55b65dd6f7 Mon Sep 17 00:00:00 2001 From: Tom Kane Date: Mon, 12 Oct 2026 16:38:57 +0000 Subject: [PATCH 4/7] add exposure time to darks/flats --- apps/visr/src/components/tomography/TomographyForm.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/visr/src/components/tomography/TomographyForm.tsx b/apps/visr/src/components/tomography/TomographyForm.tsx index 9e798232..72a2c726 100644 --- a/apps/visr/src/components/tomography/TomographyForm.tsx +++ b/apps/visr/src/components/tomography/TomographyForm.tsx @@ -154,7 +154,10 @@ export function TomographyForm() { > From 5c80c6f595c926e341dddb04cea7ab60ae14bae3 Mon Sep 17 00:00:00 2001 From: Tom Kane Date: Tue, 13 Oct 2026 14:25:53 +0000 Subject: [PATCH 5/7] remove customisation on darks flats button --- apps/visr/src/components/tomography/TomographyForm.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/visr/src/components/tomography/TomographyForm.tsx b/apps/visr/src/components/tomography/TomographyForm.tsx index 72a2c726..c4086a35 100644 --- a/apps/visr/src/components/tomography/TomographyForm.tsx +++ b/apps/visr/src/components/tomography/TomographyForm.tsx @@ -146,10 +146,6 @@ export function TomographyForm() { Date: Fri, 16 Oct 2026 11:29:43 +0000 Subject: [PATCH 6/7] update name of plan in buttomn to plain spectroscopy --- apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx index 04d6b7ee..fbb7ce17 100644 --- a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx +++ b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx @@ -122,7 +122,7 @@ export function SpectroscopyForm() { Fly Date: Mon, 19 Oct 2026 09:57:41 +0000 Subject: [PATCH 7/7] change plan names back to demo_ --- apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx | 2 +- apps/visr/src/components/tomography/TomographyForm.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx index fbb7ce17..04d6b7ee 100644 --- a/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx +++ b/apps/visr/src/components/spectroscopy/SpectroscopyForm.tsx @@ -122,7 +122,7 @@ export function SpectroscopyForm() { Fly Fly