diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py
index 82b4a96..9d4cd64 100644
--- a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py
+++ b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py
@@ -9,12 +9,13 @@ import numpy as np
from bec_lib import bec_logger
from bec_lib.alarm_handler import AlarmBase
from bec_lib.pdf_writer import PDFWriter
+from bec_lib.scan_repeat import scan_repeat
from typeguard import typechecked
from csaxs_bec.bec_ipython_client.plugins.cSAXS import cSAXSBeamlineChecks
from csaxs_bec.bec_ipython_client.plugins.flomni.flomni_optics_mixin import FlomniOpticsMixin
-from csaxs_bec.bec_ipython_client.plugins.flomni.x_ray_eye_align import XrayEyeAlign
from csaxs_bec.bec_ipython_client.plugins.flomni.gui_tools import flomniGuiTools
+from csaxs_bec.bec_ipython_client.plugins.flomni.x_ray_eye_align import XrayEyeAlign
from csaxs_bec.bec_ipython_client.plugins.omny.omny_general_tools import (
OMNYTools,
PtychoReconstructor,
@@ -786,9 +787,7 @@ class FlomniSampleTransferMixin:
dev.ftransy.controller.socket_put_confirmed("confirm=1")
else:
print("Stopping.")
- raise FlomniError(
- "User abort sample transfer."
- )
+ raise FlomniError("User abort sample transfer.")
def ftransfer_gripper_is_open(self) -> bool:
status = bool(float(dev.ftransy.controller.socket_put_and_receive("MG @OUT[9]").strip()))
@@ -811,7 +810,7 @@ class FlomniSampleTransferMixin:
def ftransfer_gripper_move(self, position: int):
self.check_position_is_valid(position)
- #this is not used for sample stage position!
+ # this is not used for sample stage position!
self._ftransfer_shiftx = -0.15
self._ftransfer_shiftz = -0.5
@@ -1314,12 +1313,13 @@ class Flomni(
from csaxs_bec.bec_ipython_client.plugins.flomni.flomni_webpage_generator import (
FlomniWebpageGenerator,
)
+
self._webpage_gen = FlomniWebpageGenerator(
bec_client=client,
output_dir="~/data/raw/webpage/",
- #upload_url="http://s1090968537.online.de/upload.php", # optional
+ # upload_url="http://s1090968537.online.de/upload.php", # optional
upload_url="https://v1p0zyg2w9n2k9c1.myfritz.net/upload.php",
- local_port=8080
+ local_port=8080,
)
self._webpage_gen.start()
@@ -1645,7 +1645,7 @@ class Flomni(
end_scan_number = bec.queue.next_scan_number
for scan_nr in range(start_scan_number, end_scan_number):
- #self._write_tomo_scan_number(scan_nr, angle, 0)
+ # self._write_tomo_scan_number(scan_nr, angle, 0)
alignment_scan_numbers.append(scan_nr)
umv(dev.fsamroy, 0)
@@ -1655,7 +1655,7 @@ class Flomni(
# summary of alignment scan numbers
scan_list_str = ", ".join(str(s) for s in alignment_scan_numbers)
- #print(f"\nAlignment scan numbers ({len(alignment_scan_numbers)} total): {scan_list_str}")
+ # print(f"\nAlignment scan numbers ({len(alignment_scan_numbers)} total): {scan_list_str}")
# BEC scilog entry (no logo)
scilog_content = (
@@ -1665,7 +1665,9 @@ class Flomni(
f"Alignment scan numbers: {scan_list_str}\n"
)
print(scilog_content)
- bec.messaging.scilog.new().add_text(scilog_content.replace("\n", "
")).add_tags("alignmentscan").send()
+ bec.messaging.scilog.new().add_text(scilog_content.replace("\n", "
")).add_tags(
+ "alignmentscan"
+ ).send()
def write_alignment_scan_numbers(self, first_scan):
import os
@@ -1691,8 +1693,6 @@ class Flomni(
f.write(" ".join(map(str, x_vals)) + "\n")
f.write(" ".join(map(str, zeros)) + "\n")
-
-
def sub_tomo_scan(self, subtomo_number, start_angle=None):
"""
Performs a sub tomogram scan.
@@ -1795,41 +1795,27 @@ class Flomni(
# finally do the scan at this angle
self._tomo_scan_at_angle(angle, subtomo_number)
+ @scan_repeat(max_repeats=10, default=True)
def _tomo_scan_at_angle(self, angle, subtomo_number):
- successful = False
- error_caught = False
+
if 0 <= angle < 180.05:
self.progress["heartbeat"] = datetime.datetime.now().isoformat()
print(f"Starting flOMNI scan for angle {angle} in subtomo {subtomo_number}")
self._print_progress()
- while not successful:
- # self.bl_chk._bl_chk_start()
- if not self.special_angles:
- self._current_special_angles = []
- if self._current_special_angles:
- next_special_angle = self._current_special_angles[0]
- if np.isclose(angle, next_special_angle, atol=0.5):
- self._current_special_angles.pop(0)
- num_repeats = self.special_angle_repeats
- else:
- num_repeats = 1
- try:
- start_scan_number = bec.queue.next_scan_number
- for i in range(num_repeats):
- self._at_each_angle(angle)
- error_caught = False
- except AlarmBase as exc:
- if exc.alarm_type == "TimeoutError":
- bec.queue.request_queue_reset()
- time.sleep(2)
- error_caught = True
- else:
- raise exc
- # if self.bl_chk._bl_chk_stop() and not error_caught:
- successful = True
- # else:
- # self.bl_chk._bl_chk_wait_until_recovered()
+ if not self.special_angles:
+ self._current_special_angles = []
+ if self._current_special_angles:
+ next_special_angle = self._current_special_angles[0]
+ if np.isclose(angle, next_special_angle, atol=0.5):
+ self._current_special_angles.pop(0)
+ num_repeats = self.special_angle_repeats
+ else:
+ num_repeats = 1
+ start_scan_number = bec.queue.next_scan_number
+ for i in range(num_repeats):
+ self._at_each_angle(angle)
+
end_scan_number = bec.queue.next_scan_number
for scan_nr in range(start_scan_number, end_scan_number):
self._write_tomo_scan_number(scan_nr, angle, subtomo_number)
@@ -1859,7 +1845,7 @@ class Flomni(
or (self.tomo_type == 3 and projection_number == None)
):
- #pylint: disable=undefined-variable
+ # pylint: disable=undefined-variable
if bec.active_account != "":
self.tomo_id = self.add_sample_database(
self.sample_name,
@@ -2164,7 +2150,6 @@ class Flomni(
self.tomo_reconstruct()
-
def tomo_parameters(self):
"""print and update the tomo parameters"""
print("Current settings:")
@@ -2317,7 +2302,7 @@ class Flomni(
f"{'First scan number:':<{padding}}{self.client.queue.next_scan_number:>{padding}}\n",
f"{'Last scan number approx.:':<{padding}}{self.client.queue.next_scan_number + int(180 / self.tomo_angle_stepsize * 8) + 10:>{padding}}\n",
f"{'Current photon energy:':<{padding}}To be implemented\n",
- #f"{'Current photon energy:':<{padding}}{dev.mokev.read()['mokev']['value']:>{padding}.4f}\n",
+ # f"{'Current photon energy:':<{padding}}{dev.mokev.read()['mokev']['value']:>{padding}.4f}\n",
f"{'Exposure time:':<{padding}}{self.tomo_countingtime:>{padding}.2f}\n",
f"{'Fermat spiral step size:':<{padding}}{self.tomo_shellstep:>{padding}.2f}\n",
f"{'FOV:':<{padding}}{fovxy:>{padding}}\n",
@@ -2326,7 +2311,9 @@ class Flomni(
f"{'Angular step within sub-tomogram:':<{padding}}{self.tomo_angle_stepsize:>{padding}.2f}\n",
]
content = "".join(content)
- user_target = os.path.expanduser(f"~/data/raw/documentation/tomo_scan_ID_{self.tomo_id}.pdf")
+ user_target = os.path.expanduser(
+ f"~/data/raw/documentation/tomo_scan_ID_{self.tomo_id}.pdf"
+ )
with PDFWriter(user_target) as file:
file.write(header)
file.write(content)
@@ -2342,7 +2329,6 @@ class Flomni(
# self.client.tomo_progress.send_tomo_progress_message("~/data/raw/documentation/tomo_scan_ID_{self.tomo_id}.pdf").send()
import csaxs_bec
-
# Ensure this is a Path object, not a string
csaxs_bec_basepath = Path(csaxs_bec.__file__)
@@ -2350,14 +2336,12 @@ class Flomni(
# Build the absolute path correctly
logo_file = (
- csaxs_bec_basepath.parent
- / "bec_ipython_client"
- / "plugins"
- / "flomni"
- / logo_file_rel
+ csaxs_bec_basepath.parent / "bec_ipython_client" / "plugins" / "flomni" / logo_file_rel
).resolve()
print(logo_file)
- bec.messaging.scilog.new().add_attachment(logo_file, width=200).add_text(content.replace("\n", "
")).add_tags("tomoscan").send()
+ bec.messaging.scilog.new().add_attachment(logo_file, width=200).add_text(
+ content.replace("\n", "
")
+ ).add_tags("tomoscan").send()
if __name__ == "__main__":
diff --git a/csaxs_bec/device_configs/simulated_omny/simulated_bl_endstation.yaml b/csaxs_bec/device_configs/simulated_omny/simulated_bl_endstation.yaml
index 2ac5201..5deb8c7 100644
--- a/csaxs_bec/device_configs/simulated_omny/simulated_bl_endstation.yaml
+++ b/csaxs_bec/device_configs/simulated_omny/simulated_bl_endstation.yaml
@@ -18,4 +18,7 @@ fsh:
readoutPriority: monitored
flomni:
- - !include ../ptycho_flomni.yaml
\ No newline at end of file
+ - !include ../ptycho_flomni.yaml
+
+machine:
+ - !include ../machine.yml