Skip to content

Commit

Permalink
Pin dodal and update devices
Browse files Browse the repository at this point in the history
  • Loading branch information
noemifrisina committed Jan 23, 2025
1 parent 4e23093 commit a759de1
Show file tree
Hide file tree
Showing 13 changed files with 144 additions and 131 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ dependencies = [
"ophyd == 1.9.0",
"ophyd-async >= 0.8a5",
"bluesky >= 1.13",
"dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@main",
"dls-dodal @ git+https://github.com/DiamondLightSource/dodal.git@fc08b89",
]


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ def event(self, doc: dict): # type: ignore
assert self.parameters is not None
data: dict | None = doc.get("data")
assert data is not None
self.parameters.x_start_um = data.get("vgonio_x")
self.parameters.y_start_um = data.get("vgonio_yh")
self.parameters.z_start_um = data.get("vgonio_z")
self.parameters.x_start_um = data.get("vgonio-x")
self.parameters.y_start_um = data.get("vgonio-yh")
self.parameters.z_start_um = data.get("vgonio-z")
pos = (
self.parameters.x_start_um,
self.parameters.y_start_um,
Expand All @@ -65,13 +65,13 @@ def event(self, doc: dict): # type: ignore
assert self.parameters is not None
data = doc.get("data")
assert data is not None
self.transmission = data.get("beam_params_transmission")
self.flux = data.get("beam_params_intensity")
self.flux_xbpm2 = data.get("beam_params_flux_xbpm2")
self.flux_xbpm3 = data.get("beam_params_flux_xbpm3")
self.wavelength = data.get("beam_params_wavelength")
self.energy_kev = data.get("beam_params_energy")
self.detector_distance = data.get("beam_params_det_distance")
self.transmission = data.get("beam_params-transmission")
self.flux = data.get("beam_params-intensity")
self.flux_xbpm2 = data.get("beam_params-flux_xbpm2")
self.flux_xbpm3 = data.get("beam_params-flux_xbpm3")
self.wavelength = data.get("beam_params-wavelength")
self.energy_kev = data.get("beam_params-energy")
self.detector_distance = data.get("beam_params-det_distance")
LOGGER.info(
f"Nexus handler received beam parameters, transmission: {self.transmission}, flux: {self.flux}, wavelength: {self.wavelength}, det distance: {self.detector_distance}." # noqa
)
Expand Down
8 changes: 5 additions & 3 deletions src/mx_bluesky/beamlines/i24/jungfrau_commissioning/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from inspect import getmembers, isgeneratorfunction, signature

import IPython
from dodal.beamlines import i24
from dodal.utils import collect_factories
from traitlets.config import Config

Expand All @@ -14,7 +15,8 @@
utility_plans,
zebra_plans,
)
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import i24

# from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import i24
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import (
text_colors as col,
)
Expand Down Expand Up @@ -75,7 +77,7 @@ def pretty_print_module_functions(mod, indent=0):
]:
print(
" " * indent
+ f"{col.CYAN}{name}({col.GREEN}{str(signature(function)).replace(sq,'')[1:-1]}{col.CYAN}){col.ENDC}" # noqa
+ f"{col.CYAN}{name}({col.GREEN}{str(signature(function)).replace(sq, '')[1:-1]}{col.CYAN}){col.ENDC}" # noqa
)


Expand All @@ -100,7 +102,7 @@ def hlp(arg: Callable | None = None):
else:
sq = "'"
print(
f"{col.CYAN}{arg.__name__}({col.GREEN}{str(signature(arg)).replace(sq,'')[1:-1]}{col.CYAN}){col.ENDC}" # noqa
f"{col.CYAN}{arg.__name__}({col.GREEN}{str(signature(arg)).replace(sq, '')[1:-1]}{col.CYAN}){col.ENDC}" # noqa
)
print(inspect.getdoc(arg))

Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,23 @@
import os
from enum import Enum
from pathlib import Path

from bluesky.plan_stubs import abs_set, rd, sleep
from dodal.beamlines import i24
from dodal.devices.i24.jungfrau import GainMode, JungFrau1M

from mx_bluesky.beamlines.i24.jungfrau_commissioning.plans.jungfrau_plans import (
check_and_clear_errors,
do_manual_acquisition,
set_software_trigger,
setup_detector,
wait_for_writing,
setup_detector
)
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import run_number
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.jf_commissioning_devices import (
JungfrauM1,
)
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.log import LOGGER
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import i24


class GainMode(str, Enum):
dynamic = "dynamic"
forceswitchg1 = "forceswitchg1"
forceswitchg2 = "forceswitchg2"


def set_gain_mode(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
gain_mode: GainMode,
wait=True,
check_for_errors=True,
Expand All @@ -47,7 +38,7 @@ def set_gain_mode(


def do_darks(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
directory: str = "/dls/i24/data/2024/cm37275-4/jungfrau_commissioning/",
check_for_errors=True,
exp_time_s=0.001,
Expand Down Expand Up @@ -112,8 +103,8 @@ def do_darks(
)


def do_pedestal_darks(
jungfrau: JungfrauM1,
def do_pedestal_darks(
jungfrau: JungFrau1M,
directory: str = "/dls/i24/data/2024/cm37275-4/jungfrau_commissioning/",
check_for_errors=True,
exp_time_s=0.001,
Expand All @@ -122,8 +113,8 @@ def do_pedestal_darks(
num_images=1000,
timeout_factor=6,
pedestal_frames=20,
pedestal_loops=200):

pedestal_loops=200,
):
directory_prefix = (
Path(directory)
/ f"{run_number(Path(directory)):05d}_darks_{acq_time_s}s_per_frame_pedestal"
Expand All @@ -134,7 +125,9 @@ def do_pedestal_darks(

yield from set_software_trigger(jungfrau)

yield from setup_detector(jungfrau, exp_time_s, acq_time_s, pedestal_frames*pedestal_loops*2)
yield from setup_detector(
jungfrau, exp_time_s, acq_time_s, pedestal_frames * pedestal_loops * 2
)

yield from set_gain_mode(
jungfrau, GainMode.dynamic, check_for_errors=check_for_errors
Expand All @@ -156,7 +149,7 @@ def do_pedestal_darks(


def take_darks():
""""Take darks in pedestal and old style, at 1kHz and 2kHz"""
""" "Take darks in pedestal and old style, at 1kHz and 2kHz"""
jf = i24.jungfrau()
for time in [0.001, 0.0005]:
LOGGER.info(f"Taking data at exposure time = {time}")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from datetime import datetime
from enum import Enum
from pathlib import Path

from bluesky.plan_stubs import abs_set, rd, sleep
from dodal.devices.i24.i24_vgonio import VGonio
from dodal.devices.zebra import Zebra
from dodal.devices.i24.jungfrau import GainMode, JungFrau1M
from dodal.devices.i24.vgonio import VerticalGoniometer
from dodal.devices.zebra.zebra import Zebra

from mx_bluesky.beamlines.i24.jungfrau_commissioning.plans.jungfrau_plans import (
setup_detector,
Expand All @@ -13,52 +13,48 @@
setup_zebra_for_darks,
)
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import run_number
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.jf_commissioning_devices import (
JungfrauM1,
)
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.log import LOGGER
from mx_bluesky.beamlines.i24.serial.setup_beamline.setup_zebra_plans import arm_zebra


class GainMode(str, Enum):
dynamic = "dynamic"
forceswitchg1 = "forceswitchg1"
forceswitchg2 = "forceswitchg2"


def date_time_string():
return datetime.now().strftime("%Y-%m-%d-%H-%M-%s")


def set_gain_mode(
jungfrau: JungfrauM1, gain_mode: GainMode, wait=True, check_for_errors=True
jungfrau: JungFrau1M, gain_mode: GainMode, wait=True, check_for_errors=True
):
LOGGER.info(f"Setting gain mode {gain_mode.value}")
yield from abs_set(jungfrau.gain_mode, gain_mode.value, wait=wait)
if check_for_errors:
err: str = yield from rd(jungfrau.error_rbv) # type: ignore
LOGGER.warn(f"JF reporting error: {err}")
LOGGER.warning(f"JF reporting error: {err}")


def do_dark_acquisition(
jungfrau: JungfrauM1, zebra: Zebra, gonio: VGonio, exp_time_s, acq_time_s, n_frames
jungfrau: JungFrau1M,
zebra: Zebra,
gonio: VerticalGoniometer,
exp_time_s,
acq_time_s,
n_frames,
):
LOGGER.info("Setting up detector")
yield from setup_detector(jungfrau, exp_time_s, acq_time_s, n_frames, wait=True)
yield from abs_set(VGonio.omega, 0, wait=True)
yield from abs_set(gonio.omega, 0, wait=True)
LOGGER.info("Setting up and arming zebra")
yield from setup_zebra_for_darks(zebra, wait=True)
yield from abs_set(arm_zebra(zebra), wait=True)
yield from abs_set(arm_zebra(zebra), wait=True) # type: ignore
LOGGER.info("Triggering collection")
yield from abs_set(VGonio.omega, 1, wait=True)
yield from abs_set(gonio.omega, 1, wait=True)
yield from abs_set(jungfrau.acquire_start, 1)
yield from sleep(exp_time_s * n_frames)


def do_darks(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
zebra: Zebra,
gonio: VGonio,
gonio: VerticalGoniometer,
directory: str = "/tmp/",
check_for_errors=True,
):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
from __future__ import annotations

import os
from pathlib import Path

import bluesky.plan_stubs as bps
from dodal.devices.i24.jungfrau import JungFrau1M, TriggerMode

from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import date_time_string
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.jf_commissioning_devices import (
JungfrauM1,
TriggerMode,
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import (
date_time_string,
run_number,
)
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils import run_number
import os
from mx_bluesky.beamlines.i24.jungfrau_commissioning.utils.log import LOGGER

DIRECTORY = "/dls/i24/data/2024/cm37275-4/jungfrau_commissioning/"
Expand All @@ -20,16 +19,16 @@ def subdirectory_with_timestamp(name):
return (Path(DIRECTORY) / f"{date_time_string()}_{name}").as_posix()


def set_hardware_trigger(jungfrau: JungfrauM1):
def set_hardware_trigger(jungfrau: JungFrau1M):
LOGGER.info("setting hardware triggered mode")
yield from bps.abs_set(jungfrau.trigger_mode, TriggerMode.HARDWARE.value)


def set_software_trigger(jungfrau: JungfrauM1):
def set_software_trigger(jungfrau: JungFrau1M):
yield from bps.abs_set(jungfrau.trigger_mode, TriggerMode.SOFTWARE.value)


def wait_for_writing(jungfrau: JungfrauM1, timeout_s: float):
def wait_for_writing(jungfrau: JungFrau1M, timeout_s: float):
yield from bps.sleep(0.2)
LOGGER.info("waiting for acquire_RBV and writing_RBV:")
LOGGER.info("waiting for signals to go high...")
Expand Down Expand Up @@ -58,7 +57,7 @@ def wait_for_writing(jungfrau: JungfrauM1, timeout_s: float):


def do_manual_acquisition(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
exp_time_s: float,
acq_time_s: float,
n_frames: int,
Expand All @@ -81,7 +80,7 @@ def do_manual_acquisition(


def do_manual_acq_with_new_filename(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
name: str,
exp_time_s: float,
acq_time_s: float,
Expand All @@ -101,7 +100,7 @@ def do_manual_acq_with_new_filename(


def do_burst_mode(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
name: str,
exp_time_s: float,
acq_time_s: float,
Expand All @@ -118,7 +117,9 @@ def do_burst_mode(
f"Using directory {directory_prefix.as_posix()}, setting directory and filename on detector..."
)
yield from bps.abs_set(jungfrau.file_name, name, wait=True)
yield from bps.abs_set(jungfrau.file_directory, directory_prefix.as_posix(), wait=True)
yield from bps.abs_set(
jungfrau.file_directory, directory_prefix.as_posix(), wait=True
)
yield from bps.abs_set(jungfrau.burst_mode, 1)
yield from bps.sleep(0.2)
yield from do_manual_acquisition(
Expand All @@ -128,7 +129,7 @@ def do_burst_mode(


def setup_detector(
jungfrau: JungfrauM1,
jungfrau: JungFrau1M,
exposure_time_s: float,
acquire_time_s: float,
n_images: float,
Expand Down Expand Up @@ -157,7 +158,7 @@ def setup_detector(
yield from bps.wait(group)


def check_and_clear_errors(jungfrau: JungfrauM1):
def check_and_clear_errors(jungfrau: JungFrau1M):
LOGGER.info("Checking and clearing errors...")
err: str = yield from bps.rd(jungfrau.error_rbv) # type: ignore
if err != "":
Expand Down
Loading

0 comments on commit a759de1

Please sign in to comment.