Skip to content

Commit cfaa9dc

Browse files
committed
Start using context and filling in params
1 parent e7bf064 commit cfaa9dc

File tree

5 files changed

+192
-1
lines changed

5 files changed

+192
-1
lines changed
Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,109 @@
1-
export function CollectionSetJf() {}
1+
import {
2+
Box,
3+
Grid2 as Grid,
4+
Stack,
5+
TextField,
6+
Typography,
7+
useTheme,
8+
} from "@mui/material";
9+
import { ParameterInput } from "components/ParameterInputs";
10+
import { JungfrauRotationContext } from "context/jungfrau/JungfrauRotationContext";
11+
import { useContext, useState } from "react";
12+
13+
function fullStorageDirectory(visit: string, subDir: string): string {
14+
const date = new Date();
15+
const year = date.getFullYear();
16+
return `/dls/i24/data/${year}/${visit}/jungfrau/${subDir}`;
17+
}
18+
19+
export function CollectionSetupJf() {
20+
const theme = useTheme();
21+
const context = useContext(JungfrauRotationContext);
22+
const [visit, setVisit] = useState<string>("cm40647-5");
23+
const storageDirectory = fullStorageDirectory(visit, context.directory);
24+
return (
25+
<Box sx={{ flexGrow: 1 }}>
26+
<Stack direction={"column"} alignItems={"center"} spacing={2}>
27+
<Typography
28+
variant="h2"
29+
sx={{
30+
color: theme.palette.primary.contrastText,
31+
fontSize: 24,
32+
fontWeight: "fontWeightBold",
33+
}}
34+
>
35+
Parameters
36+
</Typography>
37+
<Grid container spacing={2} marginTop={3} justifyContent={"center"}>
38+
<ParameterInput
39+
value={visit}
40+
onSet={setVisit}
41+
label="Visit"
42+
tooltip="Current visit directory"
43+
/>
44+
<ParameterInput
45+
value={context.directory}
46+
onSet={context.setDirectory}
47+
label="Sub-directory"
48+
tooltip="Location inside visit directory to save data"
49+
/>
50+
<ParameterInput
51+
value={context.fileName}
52+
onSet={context.setFileName}
53+
label="File Name"
54+
tooltip="Name to use to save the data"
55+
/>
56+
</Grid>
57+
<TextField
58+
size="small"
59+
label="Storage Directory"
60+
value={storageDirectory}
61+
style={{ width: 570 }}
62+
slotProps={{
63+
input: { readOnly: true },
64+
}}
65+
/>
66+
<Grid container spacing={2} marginTop={3} justifyContent={"center"}>
67+
<ParameterInput
68+
value={context.expTime}
69+
onSet={context.setExpTime}
70+
label="Exposure Time (s)"
71+
tooltip="Exposure time for each window, in seconds"
72+
/>
73+
<ParameterInput
74+
value={context.detDist}
75+
onSet={context.setDetDist}
76+
label="Detector Distance (mm)"
77+
tooltip="Sample detector distance, in millimeters"
78+
/>
79+
<ParameterInput
80+
value={context.shutterOpenT}
81+
onSet={context.setShutterOpenT}
82+
label="Shutter opening time (s)"
83+
tooltip="Fast shutter opening time, in seconds"
84+
/>
85+
</Grid>
86+
<Grid container spacing={2} marginTop={3} justifyContent={"center"}>
87+
<ParameterInput
88+
value={context.omegaStart}
89+
onSet={context.setOmegaStart}
90+
label="Omega start (deg)"
91+
tooltip="Rotation start value, in deg"
92+
/>
93+
<ParameterInput
94+
value={context.omegaIncrement}
95+
onSet={context.setOmegaIncrement}
96+
label="Omega increment (deg)"
97+
tooltip="Rotation increment step, in deg"
98+
/>
99+
<ParameterInput
100+
value={context.scanWidth}
101+
onSet={context.setScanWidth}
102+
label="Scan Width (deg)"
103+
tooltip="Total scan width, in deg"
104+
/>
105+
</Grid>
106+
</Stack>
107+
</Box>
108+
);
109+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Note not adding visit to it as I want to get that into an overall context
2+
3+
import { createContext } from "react";
4+
5+
// changeble only by staff. For now just a text field
6+
export type JungfrauRotationContextType = {
7+
directory: string;
8+
fileName: string;
9+
expTime: number;
10+
detDist: number;
11+
shutterOpenT: number;
12+
transFract: number[];
13+
omegaStart: number;
14+
omegaIncrement: number;
15+
scanWidth: number;
16+
setDirectory: React.Dispatch<React.SetStateAction<string>>;
17+
setFileName: React.Dispatch<React.SetStateAction<string>>;
18+
setExpTime: React.Dispatch<React.SetStateAction<number>>;
19+
setDetDist: React.Dispatch<React.SetStateAction<number>>;
20+
setShutterOpenT: React.Dispatch<React.SetStateAction<number>>;
21+
setTransFract: React.Dispatch<React.SetStateAction<number[]>>;
22+
setOmegaStart: React.Dispatch<React.SetStateAction<number>>;
23+
setOmegaIncrement: React.Dispatch<React.SetStateAction<number>>;
24+
setScanWidth: React.Dispatch<React.SetStateAction<number>>;
25+
};
26+
27+
export const JungfrauRotationContext =
28+
createContext<JungfrauRotationContextType>(
29+
null as unknown as JungfrauRotationContextType
30+
);
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { ReactNode, useState } from "react";
2+
import { JungfrauRotationContext } from "./JungfrauRotationContext";
3+
4+
export const JungfrauRotationProvider = ({
5+
children,
6+
}: {
7+
children: ReactNode;
8+
}) => {
9+
const [directory, setDirectory] = useState<string>("test");
10+
const [fileName, setFileName] = useState<string>("thau");
11+
const [expTime, setExpTime] = useState<number>(0.001);
12+
const [detDist, setDetDist] = useState<number>(200);
13+
const [shutterOpenT, setShutterOpenT] = useState<number>(0.25);
14+
const [transFract, setTransFract] = useState<number[]>([0.5]);
15+
const [omegaStart, setOmegaStart] = useState<number>(0);
16+
const [omegaIncrement, setOmegaIncrement] = useState<number>(0.1);
17+
const [scanWidth, setScanWidth] = useState<number>(360);
18+
19+
return (
20+
<JungfrauRotationContext.Provider
21+
value={{
22+
directory,
23+
fileName,
24+
expTime,
25+
detDist,
26+
shutterOpenT,
27+
transFract,
28+
omegaStart,
29+
omegaIncrement,
30+
scanWidth,
31+
setDirectory,
32+
setFileName,
33+
setExpTime,
34+
setDetDist,
35+
setShutterOpenT,
36+
setTransFract,
37+
setOmegaStart,
38+
setOmegaIncrement,
39+
setScanWidth,
40+
}}
41+
>
42+
{children}
43+
</JungfrauRotationContext.Provider>
44+
);
45+
};

src/screens/CollectionPanel.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { Box, Typography } from "@mui/material";
22
import { CollectionSetupFt } from "components/FixedTarget/CollectionSetupFt";
33
import { CollectionSetupEx } from "components/Extruder/CollectionSetupEx";
44
import ErrorOutlineIcon from "@mui/icons-material/ErrorOutline";
5+
import { CollectionSetupJf } from "components/JungFrau/CollectionSetupJf";
6+
import { JungfrauRotationProvider } from "context/jungfrau/JungfrauRotationProvider";
57
type ExptType = {
68
expt: "extruder" | "fixed-target" | "jf";
79
};
@@ -24,6 +26,11 @@ export function ParamsPanel(expt: ExptType) {
2426
case "extruder":
2527
return <CollectionSetupEx />;
2628
case "jf":
29+
return (
30+
<JungfrauRotationProvider>
31+
<CollectionSetupJf />
32+
</JungfrauRotationProvider>
33+
);
2734
default:
2835
return <FallbackScreen />;
2936
}

vite.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export default defineConfig({
1616
assets: path.resolve(__dirname, "./src/assets"),
1717
blueapi: path.resolve(__dirname, "./src/blueapi"),
1818
components: path.resolve(__dirname, "./src/components"),
19+
context: path.resolve(__dirname, "./src/context"),
1920
pv: path.resolve(__dirname, "./src/pv"),
2021
routes: path.resolve(__dirname, "./src/routes"),
2122
screens: path.resolve(__dirname, "./src/screens"),

0 commit comments

Comments
 (0)