diff --git a/package.json b/package.json index 64b374f..c62276a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "i24-daq-ui", "private": true, - "version": "0.0.7", + "version": "0.0.9", "type": "module", "scripts": { "dev": "vite", diff --git a/src/blueapi/BlueapiComponents.tsx b/src/blueapi/BlueapiComponents.tsx index 37e28c4..c11fae6 100644 --- a/src/blueapi/BlueapiComponents.tsx +++ b/src/blueapi/BlueapiComponents.tsx @@ -20,6 +20,7 @@ type RunPlanButtonProps = { btnLabel: string | ReactNode; planName: string; planParams?: object; + currentVisit?: string; title?: string; btnVariant?: VariantChoice; btnSize?: ButtonSize; @@ -36,7 +37,12 @@ export function RunPlanButton(props: RunPlanButtonProps) { const [msg, setMsg] = React.useState("Running plan..."); const [severity, setSeverity] = React.useState("info"); - const fullVisit = readVisitFromPv(); + let fullVisit: string; + if (props.currentVisit === undefined) { + fullVisit = readVisitFromPv(); + } else { + fullVisit = props.currentVisit; + } let instrumentSession: string; const params = props.planParams ? props.planParams : {}; @@ -52,6 +58,7 @@ export function RunPlanButton(props: RunPlanButtonProps) { setOpenSnackbar(true); try { instrumentSession = parseInstrumentSession(fullVisit); + console.log(`Current instrument session: ${instrumentSession}`); submitAndRunPlanImmediately({ planName: props.planName, planParams: params, diff --git a/src/blueapi/blueapi.ts b/src/blueapi/blueapi.ts index aa0caad..78b44eb 100644 --- a/src/blueapi/blueapi.ts +++ b/src/blueapi/blueapi.ts @@ -79,6 +79,7 @@ function submitTask(request: BlueApiRequestBody): Promise { return blueApiCall("/tasks", "POST", { name: request.planName, params: request.planParams, + instrument_session: request.instrumentSession, }).then((res) => { if (!res.ok) { throw new Error( diff --git a/src/components/JungFrau/CollectDarksPanel.tsx b/src/components/JungFrau/CollectDarksPanel.tsx index 21b39ba..8031161 100644 --- a/src/components/JungFrau/CollectDarksPanel.tsx +++ b/src/components/JungFrau/CollectDarksPanel.tsx @@ -11,10 +11,12 @@ import { Typography, useTheme, } from "@mui/material"; -import React from "react"; +import React, { useContext } from "react"; import { ParameterInput } from "../ParameterInputs"; import { GainModes } from "./constants"; import { RunPlanButton } from "#/blueapi/BlueapiComponents.tsx"; +import { VisitContext } from "#/context/VisitContext.ts"; +import { getCurrentVisit } from "./jfUtils"; export function CollectDarksPanel() { const theme = useTheme(); @@ -25,6 +27,9 @@ export function CollectDarksPanel() { const [totTriggers, setTotTriggers] = React.useState(1000); const [gainMode, setGainMode] = React.useState(GainModes[0]); + const { visit } = useContext(VisitContext); + const currentVisit = getCurrentVisit(visit); + return ( @@ -87,6 +92,7 @@ export function CollectDarksPanel() { pedestal_loops: pedestalLoops, filename: filename, }} + currentVisit={currentVisit} title="Collect pedestal darks" btnSize="large" /> @@ -139,6 +145,7 @@ export function CollectDarksPanel() { total_triggers: totTriggers, filename: filename, }} + currentVisit={currentVisit} title="Collect non pedestal darks" btnSize="large" /> diff --git a/src/components/JungFrau/CollectionSetupJf.tsx b/src/components/JungFrau/CollectionSetupJf.tsx index 3323fa5..3799e40 100644 --- a/src/components/JungFrau/CollectionSetupJf.tsx +++ b/src/components/JungFrau/CollectionSetupJf.tsx @@ -12,14 +12,9 @@ import { import React from "react"; import { useContext } from "react"; import { ParameterInput } from "../ParameterInputs"; +import { fullStorageDirectory, getCurrentVisit } from "./jfUtils"; -function fullStorageDirectory(visit: string): string { - const date = new Date(); - const year = date.getFullYear(); - return `/dls/i24/data/${year}/${visit}/jungfrau/`; -} - -function RunButtons(): JSX.Element { +function RunButtons({ currentVisit }: { currentVisit: string }): JSX.Element { const { expTime, detDist, @@ -45,6 +40,7 @@ function RunButtons(): JSX.Element { transmissions: transFract, sample_id: sampleId, }} + currentVisit={currentVisit} title="Run the jungfrau rotation scan plan" btnSize="large" /> @@ -58,7 +54,8 @@ export function CollectionSetupJf() { const theme = useTheme(); const context = useContext(JungfrauRotationContext); const { visit } = useContext(VisitContext); - const storageDirectory = fullStorageDirectory(visit); + const currentVisit = getCurrentVisit(visit); + const storageDirectory = fullStorageDirectory(currentVisit); return ( @@ -129,7 +126,7 @@ export function CollectionSetupJf() { tooltip="Request transmission value(s) for collection, expressed as a fraction. If running a single rotation, just input one value, if running multiples please pass a list." /> - + ); diff --git a/src/components/JungFrau/jfUtils.ts b/src/components/JungFrau/jfUtils.ts new file mode 100644 index 0000000..47038a1 --- /dev/null +++ b/src/components/JungFrau/jfUtils.ts @@ -0,0 +1,9 @@ +export function fullStorageDirectory(currentVisit: string): string { + return `${currentVisit}jungfrau/`; +} + +export function getCurrentVisit(instrumentSession: string): string { + const date = new Date(); + const year = date.getFullYear(); + return `/dls/i24/data/${year}/${instrumentSession}/`; +} diff --git a/src/components/SelectionControl.tsx b/src/components/SelectionControl.tsx index 1f818fc..ec0ac74 100644 --- a/src/components/SelectionControl.tsx +++ b/src/components/SelectionControl.tsx @@ -3,6 +3,7 @@ import { FormControl, InputLabel, MenuItem, Select } from "@mui/material"; import { forceString, useParsedPvConnection } from "#/pv/util.ts"; import { submitAndRunPlanImmediately } from "#/blueapi/blueapi.ts"; import type { PvDescription } from "#/pv/types.ts"; +import { parseInstrumentSession, readVisitFromPv } from "#/blueapi/visit.ts"; type SelectionProps = PvDescription & { id: string; @@ -24,12 +25,17 @@ export function SelectionWithPlanRunner(props: SelectionProps) { console.log(`${props.id} current value: ${currentValue}`); const [_, updateVal] = React.useState(currentValue.toString()); + // FIXME, temporary - will be fixed by using context everywhere + const fullVisit = readVisitFromPv(); + let instrumentSession: string; + const handleChange = (newValue: typeof currentValue) => { updateVal(newValue); + instrumentSession = parseInstrumentSession(fullVisit); submitAndRunPlanImmediately({ planName: props.plan_name, planParams: { position: newValue }, - instrumentSession: "", // FIXME, temporary + instrumentSession: instrumentSession, }); }; diff --git a/src/routes/JungfrauRotation.tsx b/src/routes/JungfrauRotation.tsx index e18bc53..d45e485 100644 --- a/src/routes/JungfrauRotation.tsx +++ b/src/routes/JungfrauRotation.tsx @@ -6,6 +6,7 @@ import { ErrorBoundary } from "react-error-boundary"; import { RoPvBox } from "#/pv/PvComponent.tsx"; import { FallbackScreen } from "#/screens/FallbackScreen.tsx"; +import { VisitProvider } from "#/context/VisitProvider.tsx"; export function JfRotation() { const theme = useTheme(); @@ -30,7 +31,9 @@ export function JfRotation() { - + + +