Skip to content

Commit

Permalink
bluesky test and fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Relm-Arrowny committed Mar 28, 2024
1 parent 6995ef7 commit 44f1d46
Show file tree
Hide file tree
Showing 8 changed files with 476 additions and 133 deletions.
4 changes: 2 additions & 2 deletions src/i10_bluesky/devices/pimteAD.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import Sequence

from bluesky.plans import count
from bluesky.protocols import Hints
from ophyd_async.core import DirectoryProvider, SignalR, StandardDetector
from ophyd_async.epics.areadetector.drivers import ADBaseShapeProvider
Expand All @@ -23,7 +23,7 @@ def __init__(
):
self.drv = Pimte1Driver(prefix + "CAM:")
self.hdf = NDFileHDF(prefix + "HDF5:")
self.stats = NDPluginStats(prefix + "STAT:")
#self.stats = NDPluginStats(prefix + "STAT:") #taken from i22 but this does nothing atm

super().__init__(
PimteController(self.drv),
Expand Down
34 changes: 17 additions & 17 deletions src/i10_bluesky/epics/drivers/pimte1_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,26 @@
from ophyd_async.epics.signal import epics_signal_rw


class TriggerMode(str, Enum):
internal = "Free Run"
ext_trigger = "Ext Trigger"
bulb_mode = "Bulb Mode"


class SpeedMode(str, Enum):
adc_50Khz = "0: 50 KHz - 20000 ns"
adc_100Khz = "1: 100 kHz - 10000 ns"
adc_200Khz = "2: 200 kHz - 5000 ns"
adc_500Khz = "3: 500 kHz - 2000 ns"
adc_1Mhz = "4: 1 MHz - 1000 ns"
adc_2Mhz = "5: 2 MHz - 500 ns"


class Pimte1Driver(ADBase):
def __init__(self, prefix: str) -> None:
self.trigger_mode = ad_rw(TriggerMode, prefix + "TriggerMode")
self.trigger_mode = ad_rw(Pimte1Driver.TriggerMode, prefix + "TriggerMode")
self.initialize = ad_rw(int, prefix + "Initialize")
self.setTemperture = epics_signal_rw(float, prefix + "SetTemperature")
self.readBackTemperture = ad_r(float, prefix + "MeasuredTemperature")
self.speed = ad_rw(SpeedMode, prefix + "SpeedSelection")
self.set_temperture = epics_signal_rw(float, prefix + "SetTemperature")
self.read_backtemperture = ad_r(float, prefix + "MeasuredTemperature")
self.speed = ad_rw(Pimte1Driver.SpeedMode, prefix + "SpeedSelection")
super().__init__(prefix)

class SpeedMode(str, Enum):
adc_50Khz = "0: 50 KHz - 20000 ns"
adc_100Khz = "1: 100 kHz - 10000 ns"
adc_200Khz = "2: 200 kHz - 5000 ns"
adc_500Khz = "3: 500 kHz - 2000 ns"
adc_1Mhz = "4: 1 MHz - 1000 ns"
adc_2Mhz = "5: 2 MHz - 500 ns"

class TriggerMode(str, Enum):
internal = "Free Run"
ext_trigger = "Ext Trigger"
bulb_mode = "Bulb Mode"
28 changes: 16 additions & 12 deletions src/i10_bluesky/epics/pimte_controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
)
from ophyd_async.epics.areadetector.utils import ImageMode, stop_busy_record

from i10_bluesky.epics.drivers.pimte1_driver import Pimte1Driver, SpeedMode, TriggerMode
from i10_bluesky.epics.drivers.pimte1_driver import Pimte1Driver

TRIGGER_MODE = {
DetectorTrigger.internal: TriggerMode.internal,
DetectorTrigger.constant_gate: TriggerMode.ext_trigger,
DetectorTrigger.variable_gate: TriggerMode.ext_trigger,
DetectorTrigger.internal: Pimte1Driver.TriggerMode.internal,
DetectorTrigger.constant_gate: Pimte1Driver.TriggerMode.ext_trigger,
DetectorTrigger.variable_gate: Pimte1Driver.TriggerMode.ext_trigger,
}


Expand All @@ -26,35 +26,39 @@ def __init__(
) -> None:
self.driver = driver
self.good_states = good_states
def get_deadtime(self, exposure: float) -> float:
return 0.01

def _process_setting(self) -> None:
self.driver.initialize.set(1)

async def setTemperature(self, temperature: float) -> None:
await self.driver.setTemperture.set(temperature)
async def set_temperature(self, temperature: float) -> None:
await self.driver.set_temperture.set(temperature)
self._process_setting()

async def setSpeed(self, speed: SpeedMode) -> None:
await self.driver.setTemperture.set(speed)
async def set_speed(self, speed: Pimte1Driver.SpeedMode) -> None:
await self.driver.speed.set(speed)
self._process_setting()

async def arm(
self,
num: int = 1,
trigger: Pimte1Driver.TriggerMode = Pimte1Driver.TriggerMode.internal,
exposure: Optional[float] = None,
trigger: DetectorTrigger = DetectorTrigger.internal,
) -> AsyncStatus:

if exposure is None:
exposure = await asyncio.create_task(self.driver.acquire_time.get_value())
exposure = await asyncio.gather(self.driver.acquire_time.get_value())

await asyncio.gather(self.driver.trigger_mode.set(TRIGGER_MODE[trigger]))
#await asyncio.gather(self.driver.trigger_mode.set(trigger))
self._process_setting()
await asyncio.gather(
self.driver.trigger_mode.set(TRIGGER_MODE[trigger]),
self.driver.acquire_time.set(exposure),
self.driver.num_images.set(999_999 if num == 0 else num),
self.driver.image_mode.set(ImageMode.multiple),
)

return await start_acquiring_driver_and_ensure_status(
self.driver, good_states=self.good_states
)
Expand Down
Loading

0 comments on commit 44f1d46

Please sign in to comment.