Skip to content

Commit 916f99c

Browse files
committed
Add beam current to wall display
1 parent f908d2d commit 916f99c

File tree

6 files changed

+55
-8
lines changed

6 files changed

+55
-8
lines changed

app/components/InstrumentsDisplay.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ import {
88
} from "@/app/types";
99
import useWebSocket from "react-use-websocket";
1010
import { instListPV, instListSubscription, socketURL } from "@/app/commonVars";
11+
import { IfcPVWSRequest, PVWSRequestType } from "@/app/types";
1112
import { instListFromBytes } from "@/app/components/dehex_and_decompress";
1213
import {
1314
updateInstrumentRunstate,
1415
updateInstrumentRunstatePV,
16+
updateTargetStationBeamCurrent,
1517
} from "@/app/wall/utils";
1618
import TargetStation from "@/app/components/TargetStation";
1719
import ScienceGroup from "@/app/components/ScienceGroup";
@@ -52,6 +54,7 @@ export default function InstrumentsDisplay({
5254
const [data, setData] = useState<Array<targetStation>>([
5355
{
5456
targetStation: "Target Station 1",
57+
beamCurrentPv: "AC:TS1:BEAM:CURR",
5558
instruments: [
5659
{ name: "ALF" },
5760
{ name: "ARGUS" },
@@ -86,6 +89,7 @@ export default function InstrumentsDisplay({
8689
},
8790
{
8891
targetStation: "Target Station 2",
92+
beamCurrentPv: "AC:TS2:BEAM:CURR",
8993
instruments: [
9094
{ name: "CHIPIR" },
9195
{ name: "IMAT" },
@@ -146,10 +150,21 @@ export default function InstrumentsDisplay({
146150
shouldReconnect: (closeEvent) => true,
147151
});
148152

153+
let targetStationCurrentPvs = []
154+
for (const ts of data) {
155+
if (ts.beamCurrentPv != undefined) {
156+
targetStationCurrentPvs.push(ts.beamCurrentPv)
157+
}
158+
}
159+
149160
useEffect(() => {
150161
// On page load, subscribe to the instrument list as it's required to get each instrument's PV prefix.
151162
sendJsonMessage(instListSubscription);
152-
}, [sendJsonMessage]);
163+
sendJsonMessage({
164+
type: PVWSRequestType.subscribe,
165+
pvs: targetStationCurrentPvs,
166+
})
167+
}, [sendJsonMessage, targetStationCurrentPvs]);
153168

154169
useEffect(() => {
155170
// This is a PV update, it could be either the instlist or an instrument's runstate that has changed
@@ -161,25 +176,30 @@ export default function InstrumentsDisplay({
161176
const updatedPVName: string = updatedPV.pv;
162177
const updatedPVbytes: string | null | undefined = updatedPV.b64byt;
163178
let updatedPVvalue: string | null | undefined = updatedPV.text;
179+
let updatedPVnum: number = updatedPV.value;
164180

165181
if (updatedPVName == instListPV && updatedPVbytes != null) {
166182
const instListDict = instListFromBytes(updatedPVbytes);
167183
for (const instrument of instListDict) {
168184
setData((prev) => {
169185
return updateInstrumentRunstatePV(
170-
prev,
171-
instrument,
172-
runstatePV,
173-
sendJsonMessage,
186+
prev,
187+
instrument,
188+
runstatePV,
189+
sendJsonMessage,
174190
);
175191
});
176192
}
193+
} else if (targetStationCurrentPvs.includes(updatedPVName)) {
194+
setData((prev) => {
195+
return updateTargetStationBeamCurrent(prev, updatedPVName, updatedPVnum);
196+
});
177197
} else if (updatedPVvalue) {
178198
setData((prev) => {
179199
return updateInstrumentRunstate(prev, updatedPVName, updatedPVvalue);
180200
});
181201
}
182-
}, [lastJsonMessage, sendJsonMessage]);
202+
}, [lastJsonMessage, sendJsonMessage, targetStationCurrentPvs]);
183203

184204
return (
185205
<div>
@@ -198,6 +218,7 @@ export default function InstrumentsDisplay({
198218
key={targetStation.targetStation}
199219
name={targetStation.targetStation}
200220
instruments={targetStation.instruments}
221+
beamCurrent={targetStation.beamCurrent}
201222
/>
202223
);
203224
})}

app/components/JenkinsJobs.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ export default function JenkinsJobs() {
4141
const jobs: Array<IfcWallDisplayJob> = resData["jobs"].filter(
4242
(job) => job["color"] != "disabled",
4343
);
44-
console.log(jobs);
4544
setData(jobs);
4645
}
4746
fetchPosts();

app/components/TargetStation.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ it("renders targetstation unchanged", () => {
55
const { container } = render(
66
<TargetStation
77
name={"TS5"}
8+
beamCurrent={1234.5678}
89
instruments={[
910
{ name: "Instrument", runstate: "RESUMING" },
1011
{

app/components/TargetStation.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@ import { IfcInstrumentStatus } from "@/app/types";
55
export default function TargetStation({
66
name,
77
instruments,
8+
beamCurrent,
89
}: {
910
name: string;
1011
instruments: Array<IfcInstrumentStatus>;
12+
beamCurrent: number;
1113
}) {
1214
return (
1315
<div className="flex flex-col justify-center items-start w-full">
1416
<h1 className="w-full text-left text-gray-600 dark:text-gray-200 font-semibold text-md mt-2 py-2 ">
15-
{name}
17+
{name} {beamCurrent !== undefined ? ("- " + beamCurrent.toFixed(2) + " μA") : ""}
1618
</h1>
1719
<div className="flex flex-wrap gap-1">
1820
{instruments.map((instrument) => (

app/components/__snapshots__/TargetStation.test.tsx.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ exports[`renders targetstation unchanged 1`] = `
99
class="w-full text-left text-gray-600 dark:text-gray-200 font-semibold text-md mt-2 py-2 "
1010
>
1111
TS5
12+
13+
- 1234.57 μA
1214
</h1>
1315
<div
1416
class="flex flex-wrap gap-1"

app/wall/utils.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,28 @@ export function updateInstrumentRunstate(
2626
return newData;
2727
}
2828

29+
/**
30+
* Copy the original array, update the given target stations' beam current value, then return the copied array.
31+
* @param prev the previous array of target stations, containing instruments.
32+
* @param updatedPVName the runstate PV address
33+
* @param updatedPVvalue the runstate
34+
*/
35+
export function updateTargetStationBeamCurrent(
36+
prev: Array<targetStation>,
37+
updatedPVName: string,
38+
updatedPVvalue: string,
39+
) {
40+
const newData: Array<targetStation> = [...prev];
41+
42+
let foundTs = newData.find(
43+
(ts) => ts.beamCurrentPv === updatedPVName,
44+
);
45+
if (foundTs) {
46+
foundTs.beamCurrent = updatedPVvalue;
47+
}
48+
return newData;
49+
}
50+
2951
/**
3052
* Copy an original array then update an instrument's runstate PV, then subscribe to it. return the copied array.
3153
* @param prev the original array of target stations containing instrument runstate information

0 commit comments

Comments
 (0)