Library Design

This page describes the design goals of the library.

Overview

sorunlib was designed with final script structure in mind. We are trying to achieve something similar to the ACT script structure, except written in Python. This should produce a human readable script that can easily be manually manipulated when needed. During normal observations these scripts will be automatically generated and run.

Library Structure

The library splits the functions of different subsystems into different modules. Here’s an example layout from early development:

sorunlib
├── acu.py
├── commands.py
├── __init__.py
├── seq.py
├── smurf.py
└── util.py

Functions that deal with only a single subsystem should be in their own module, i.e. acu.py only deals with sending commands to the ACU. Functions that coordinate multiple subsystems should go in seq.py (for ‘sequence’).

Example Script

An example script in sorunlib looks like:

from sorunlib import *

initialize()
smurf.set_targets(['smurf1'])

wait_until("2022-02-16 18:00:00")
acu.move_to(39.39, 64.27)
smurf.iv_curve()
wait_until("2022-02-16 18:05:00")
smurf.bias_step()
seq.scan("field")
smurf.bias_step()

For comparison a similar ACT schedule looks like:

enable_mces
disable_mce2
disable_mce3

{soft_wait,{until,{2022,03,10},{20,00,00},utc}}
{move_to,39.39,64.27}
{mce,autotune,long}
{mce,iv_curve}
{soft_wait,{until,{2022,03,10},{20,06,05},utc}}
{mce,bias_step}
{scan,wide_01h_n,{until,{2022,03,10},{21,07,21},utc},32.90}
{mce,bias_step}