From f05e43bed297bed70a21e9617d7dc9e2ebbe7478 Mon Sep 17 00:00:00 2001 From: tizayi Date: Wed, 6 Sep 2023 16:31:13 +0100 Subject: [PATCH] scaling working i think --- src/data-entry/beamstop.tsx | 15 ++++++++-- src/plot/centrePlot.tsx | 50 ++++++++++++++++++++++++++-------- src/plot/legendBar.tsx | 12 ++++---- src/plot/plotStore.ts | 2 +- src/plot/plotUtils.ts | 9 ++++++ src/presets/presetConfigs.json | 18 ++++++------ 6 files changed, 76 insertions(+), 30 deletions(-) create mode 100644 src/plot/plotUtils.ts diff --git a/src/data-entry/beamstop.tsx b/src/data-entry/beamstop.tsx index 9cb3241..b21e3eb 100644 --- a/src/data-entry/beamstop.tsx +++ b/src/data-entry/beamstop.tsx @@ -10,6 +10,7 @@ import { } from "@mui/material"; import { DistanceUnits } from "../utils/units"; import { useBeamstopStore } from "./beamstopStore"; +import { useDetectorStore } from "./detectorStore"; export default function BeamStopDataEntry(): JSX.Element { const centre = useBeamstopStore((state) => state.centre); @@ -43,6 +44,16 @@ export default function BeamStopDataEntry(): JSX.Element { ); }; + + const detector = useDetectorStore((state) => state.current) + const centreDetector = () => { + updateCentre({ x: detector.resolution.width / 2, y: detector.resolution.height / 2 }) + } + + const centreTopEdge = () => { + updateCentre({ x: detector.resolution.width / 2, y: 0 }) + } + return ( Beamstop @@ -80,7 +91,7 @@ export default function BeamStopDataEntry(): JSX.Element { {" "} px - @@ -96,7 +107,7 @@ export default function BeamStopDataEntry(): JSX.Element { {" "} px - diff --git a/src/plot/centrePlot.tsx b/src/plot/centrePlot.tsx index 9cfb442..a889889 100644 --- a/src/plot/centrePlot.tsx +++ b/src/plot/centrePlot.tsx @@ -12,12 +12,39 @@ import { Vector3 } from "three"; import { useBeamstopStore } from "../data-entry/beamstopStore"; import { useDetectorStore } from "../data-entry/detectorStore"; import { useCameraTubeStore } from "../data-entry/cameraTubeStore"; +import { getDomains } from "./plotUtils"; +import { PlotAxes, usePlotStore } from "./plotStore"; +import { Beamstop, CircularDevice, Detector } from "../utils/types"; export default function CentrePlot(): JSX.Element { - const beamstop = useBeamstopStore(); - const detector = useDetectorStore(); - const cameraTube = useCameraTubeStore(); + const plotConfig = usePlotStore(); + const detector = useDetectorStore((state): Detector => { + if (plotConfig.plotAxes === PlotAxes.milimeter) { + return { resolution: { height: state.current.resolution.height * state.current.pixelSize, width: state.current.resolution.width * state.current.pixelSize }, pixelSize: state.current.pixelSize } + } + return state.current + }); + const beamstop = useBeamstopStore((state): Beamstop => { + if (plotConfig.plotAxes === PlotAxes.milimeter) { + return { centre: { x: (state.centre.x ?? 0) * detector.pixelSize, y: (state.centre.y ?? 0) * detector.pixelSize }, diameter: state.diameter, clearance: (state.clearance ?? 0) * detector.pixelSize } + } + return { + centre: state.centre, diameter: (state.diameter / detector.pixelSize), clearance: state.clearance + } + }); + + const cameraTube = useCameraTubeStore((state): CircularDevice => { + if (plotConfig.plotAxes === PlotAxes.milimeter) { + return { centre: { x: (state.centre.x ?? 0) * detector.pixelSize, y: (state.centre.y ?? 0) * detector.pixelSize }, diameter: state.diameter } + } + return { centre: state.centre, diameter: (state.diameter / detector.pixelSize) } + }); + + + //const cameraTube = useCameraTubeStore(); + const domains = getDomains(detector, { centre: cameraTube.centre, diameter: cameraTube.diameter }) + return ( @@ -25,27 +52,26 @@ export default function CentrePlot(): JSX.Element {
{(beamstopCentre: Vector3, beamstopPerimeter: Vector3, clearance: Vector3, cameraTubeCentre: Vector3, cameraTubePerimeter: Vector3, detectorLower: Vector3, detectorUpper: Vector3) => ( - - + + diff --git a/src/plot/legendBar.tsx b/src/plot/legendBar.tsx index 7ba2831..eef5db2 100644 --- a/src/plot/legendBar.tsx +++ b/src/plot/legendBar.tsx @@ -26,12 +26,12 @@ export default function LegendBar(): JSX.Element { Legend Add something to do with colors here - } label="Detector" /> - } label="Beamstop" /> - } label="Camera tube" /> - } label="Q range" /> - } label="Mask" /> - } label="Calibrant" /> + } label="Detector" /> + } label="Beamstop" /> + } label="Camera tube" /> + } label="Q range" /> + } label="Mask" /> + } label="Calibrant" /> Current calibrant: {5} diff --git a/src/plot/plotStore.ts b/src/plot/plotStore.ts index f399413..f1c6aa3 100644 --- a/src/plot/plotStore.ts +++ b/src/plot/plotStore.ts @@ -25,7 +25,7 @@ export interface PlotConfig { } export const usePlotStore = create((set) => ({ - detector: { inPlot: true, colour: "red" }, + detector: { inPlot: false, colour: "red" }, beamstop: { inPlot: true, colour: "blue" }, cameraTube: { inPlot: true, colour: "green" }, clearnace: { inPlot: true, colour: "pink" }, diff --git a/src/plot/plotUtils.ts b/src/plot/plotUtils.ts new file mode 100644 index 0000000..4e28abb --- /dev/null +++ b/src/plot/plotUtils.ts @@ -0,0 +1,9 @@ +import { CircularDevice, Detector } from "../utils/types"; +import NumericRange from "../calculations/numericRange"; + +const offset = 10; + +export const getDomains = (detector: Detector, cameraTube: CircularDevice): { xAxis: NumericRange, yAxis: NumericRange } => { + const maxLength = Math.max(detector.resolution.height, detector.resolution.width, cameraTube.diameter) + return { xAxis: new NumericRange(-offset, Math.round(maxLength + offset)), yAxis: new NumericRange(-offset, Math.round(maxLength + offset)) } +} \ No newline at end of file diff --git a/src/presets/presetConfigs.json b/src/presets/presetConfigs.json index 81f5733..83301f1 100644 --- a/src/presets/presetConfigs.json +++ b/src/presets/presetConfigs.json @@ -23,28 +23,28 @@ "minCameraLength": 10, "maxCameraLength": 100 }, - "second": { + "I22 SAXS Isotropic": { "detector": "Pilatus P3-2M", "beamstop": { "centre": { - "x": 2, - "y": 2 + "x": 738, + "y": 100 }, "diameter": 4, - "clearance": 1 + "clearance": 10 }, "cameraTube": { "centre": { - "x": 2, - "y": 2 + "x": 738, + "y": 840 }, - "diameter": 2 + "diameter": 310 }, - "angle": 1, + "angle": 1.57, "cameraLength": 1, "minWavelength": 1, "maxWavelength": 1, - "minCameraLength": 10, + "minCameraLength": 1.9, "maxCameraLength": 100 } } \ No newline at end of file