DAQ: bug fixes to __raster
This commit is contained in:
1 parent
72fa8e11ef
commit
49e2788580
1 file changed
+51
-48
+51
-48
@@ -902,39 +902,37 @@ class AareDAQ:
|
||||
|
||||
def __raster(self, request: RasterGridRequest) -> CompletedRasterGridElem:
|
||||
self.__devs.aerotech_omega = request.omega_deg
|
||||
previous_smargon_pos = self.__devs.smargon_pos
|
||||
self.__setup_datacollection(request=request)
|
||||
|
||||
status = self.status
|
||||
logger.info(f"raster status {status}")
|
||||
logger.info(f'raster grid request: {request}')
|
||||
total_time = request.exp_time_s*request.n_x*request.n_y+request.n_y*0.3
|
||||
result = None
|
||||
if not self.__cfg.simulated_detector:
|
||||
try:
|
||||
logger.info('initialise detector')
|
||||
self.__jfjoch.measure_raster(request, status)
|
||||
logger.info('detector initialised')
|
||||
except JFJochCommunicationError as e:
|
||||
logger.warning(f"Failed to communicate with jfjoch: {e}")
|
||||
|
||||
else:
|
||||
logger.info("Simulated detector mode enabled; returning fake zero raster result.")
|
||||
total_time = request.exp_time_s*request.n_x*request.n_y+request.n_y*0.3
|
||||
|
||||
try:
|
||||
if self.sample is not None and self.sample.db_id is not None:
|
||||
self.__aare.create_gridscan_run(self.sample, request, status)
|
||||
self.__devs.aerotech.grid_scan(grid_elem_size_y_um=request.grid_size_mm.y*1000,
|
||||
grid_elem_size_x_um=request.grid_size_mm.x*1000,
|
||||
grid_elem_count_x=request.n_x,
|
||||
grid_elem_count_y=request.n_y,
|
||||
time_sec=request.exp_time_s,
|
||||
run_async=True)
|
||||
|
||||
self.__devs.aerotech.wait_till_done(timeout=int(round(total_time*2,0)))
|
||||
if not self.__cfg.simulated_detector:
|
||||
logger.info("initialise detector")
|
||||
self.__jfjoch.measure_raster(request, status)
|
||||
logger.info("detector initialised")
|
||||
else:
|
||||
logger.info("Simulated detector mode enabled; using fake raster result.")
|
||||
|
||||
self.__devs.aerotech.grid_scan(
|
||||
grid_elem_size_y_um=request.grid_size_mm.y * 1000,
|
||||
grid_elem_size_x_um=request.grid_size_mm.x * 1000,
|
||||
grid_elem_count_x=request.n_x,
|
||||
grid_elem_count_y=request.n_y,
|
||||
time_sec=request.exp_time_s,
|
||||
run_async=True,
|
||||
)
|
||||
|
||||
self.__devs.aerotech.wait_till_done(timeout=int(round(total_time * 2, 0)))
|
||||
#go back to aerotech x,y,z home not U home (0 degrees).
|
||||
if type(self.__cfg.abr_meas_pos) is Coordinate:
|
||||
if isinstance(self.__cfg.abr_meas_pos, Coordinate):
|
||||
coord = self.__cfg.abr_meas_pos
|
||||
else:
|
||||
coord = self.__cfg.abr_meas_pos.at_mm
|
||||
@@ -960,36 +958,41 @@ class AareDAQ:
|
||||
self.__devs.smargon_pos = grid_centre_smargon
|
||||
self.__devs.smargon_wait(timeout=180)
|
||||
|
||||
try:
|
||||
result = self.__jfjoch.wait_till_done(60)
|
||||
except JFJochCommunicationError as e:
|
||||
logger.warning(f"Failed to communicate with jfjoch: {e}")
|
||||
if self.__cfg.simulated_detector:
|
||||
scan_result = self._build_fake_scan_result(
|
||||
file_prefix=request.file_prefix,
|
||||
image_count=request.n_x * request.n_y,
|
||||
)
|
||||
else:
|
||||
scan_result = self.__jfjoch.wait_till_done(60)
|
||||
if scan_result is None:
|
||||
logger.warning("JFJoch returned no ScanResult; using fake result for raster scan.")
|
||||
scan_result = self._build_fake_scan_result(
|
||||
file_prefix=request.file_prefix,
|
||||
image_count=request.n_x * request.n_y,
|
||||
)
|
||||
|
||||
sample_id = self.sample.db_id if self.sample and self.sample.db_id is not None else None
|
||||
if sample_id:
|
||||
self.__set_state(BeamlineStateEnum.SampleAlignment)
|
||||
return self._build_fake_raster_result(request)
|
||||
self.save_screenshot_db(sample_id, f"{sample_id}_post_raster_{request.omega_deg}deg")
|
||||
self.__aare.ingest_gridscan(
|
||||
sample=self.sample,
|
||||
raster_result=scan_result,
|
||||
raster_request=request,
|
||||
geom=self.sample_geometry,
|
||||
com=None,
|
||||
beam_mark_pxl=self.__cfg.get_beam_mark(self.zoom),
|
||||
)
|
||||
|
||||
try:
|
||||
sample_id = self.sample.db_id if self.sample is not None and self.sample.db_id is not None else None
|
||||
if sample_id:
|
||||
self.__set_state(BeamlineStateEnum.SampleAlignment)
|
||||
self.save_screenshot_db(sample_id, f"{sample_id}_post_raster_{request.omega_deg}deg")
|
||||
self.__aare.ingest_gridscan(sample = self.sample, raster_result = result.result,
|
||||
raster_request = request, geom = self.sample_geometry,
|
||||
com = None, beam_mark_pxl=self.__cfg.get_beam_mark(self.zoom))
|
||||
except Exception as e:
|
||||
logger.error(f"Exception ingesting grid scan: {e}")
|
||||
return CompletedRasterGridElem(
|
||||
request=copy.deepcopy(request),
|
||||
result=scan_result,
|
||||
centre_of_mass=None,
|
||||
)
|
||||
|
||||
|
||||
if result is None:
|
||||
logger.warning("JFJoch returned no ScanResult; using fake result for raster scan.")
|
||||
|
||||
return CompletedRasterGridElem(request=copy.deepcopy(request), result=result, centre_of_mass=None)
|
||||
|
||||
|
||||
|
||||
except JFJochCommunicationError:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.error(f"Failed during raster: {e}")
|
||||
except Exception:
|
||||
logger.exception("Failed during raster")
|
||||
raise
|
||||
|
||||
def measure_raster(self, r: RasterGridRequest, auto: bool) -> CompletedRasterGrid:
|
||||
@@ -1050,7 +1053,7 @@ class AareDAQ:
|
||||
|
||||
#Is this for helical scans...? do we do smargon scans?
|
||||
if request.start is not None and request.end is not None:
|
||||
smargon_time_step = request.time_sec / float(request.steps)
|
||||
smargon_time_step = request.exp_time_s / float(request.steps)
|
||||
pos_step = (request.end.sh_mm - request.start.sh_mm) * (1.0 / float(request.steps))
|
||||
|
||||
for i in range(request.steps):
|
||||
|
||||
Reference in new issue
Block a user