DiamondLightSource / DiamondLightSource/mx-bluesky

Hyperion: Perform collections at omega % 360

Open
#1,499 1 comment 0 reactions 0 assignees View on GitHub
enhancement hyperion
Dominant language
Python
Stars
4
Forks
5
Avg merge
1d 30m
Merged PRs (30d)
2

Description

To reduce load on the smargon (and improve collection speed) it would be good to be able to collect at any point where `omega % 360 == 0`, which should be possible given that this is the same physical position as `omega = 0` and the smargon is on a slip ring and so can rotate infinitely. Currently we do not do this and instead we move back to omega = 0 just before robot unload.

Crucially we do not want the end user to know that we have done this e.g. data in nexus/ispyb should still appear like the rotation went from 0 -> 360

The first step in doing this would be to change the interlocks on the robot to allow us to load/unload at omega % 360. @ndg63276 and @JamesOHeaDLS are looking into this.

There are then a few ways to do the full thing:
1. We can have some kind of roll over logic in the controls layer - @JamesOHeaDLS, I suspect this isn't that easy?
2. Hyperion could change the motor offset (e.g. `BL03I-MO-SGON-01:OMEGA.OFF`) to +360 after the data collection
3. Hyperion could do all the conversion internally (either at the `dodal` or `mx-bluesky` layer)

We will likely go with 2. but we should make sure to think about the consequences first. For example:
* I am not sure if the motion program will obey this and so the XRC might rewind back to 0 proper
* We may need to re-sync the zebra and smargon after doing this (e.g. `BL03I-EA-ZEBRA-01:M4:SETPOS.PROC`)

## Acceptance Criteria
- Hyperion can perform a collection at omega % 360 == 0
- All data exposed to the user remains unchanged

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.