Skip to main content

Tools for the accelerator control system of the HIT facility.

Project description



Contains a wrapper for the BeamOptikDLL.dll control library of the HIT accelerator facility for use with madgui.


The BeamOptikDLL.dll library needs to be accessible (PATH or CWD).


The setup is to be performed as follows

python install



Date: 25.01.2020

  • revisit auto load model feature implementation


Date: 19.08.2019

  • add auto load model feature


Date: 13.05.2019

  • make parameter lookup case-insensitive again (was accidentally made case-sensitive when changing order of parameters)


Date: 09.05.2019

  • add knobs for remaining MEFI params

  • add method to read all/multiple parameters at once (required by madgui 19.5.1)

  • fix outdated code in menuitem for editting model init conditions


Date: 30.04.2019

  • suppress irritating error message about ‘gantry_angle’ when uploading params

  • warn if the model gantry_angle differs from the active MEFI

  • don’t modify the user’s model when initializing stub backend


Date: 13.04.2019

  • simplifications in travis configuration and setup.cfg


Date: 21.03.2019

  • let the stub work with its own independent model (for simulating a backend)

  • add dialog to edit our model

  • requires madgui 19.3.2

  • fix py2 compatibility issue in (again…)

  • require importlib_resources

  • update package name

  • cleanup in setup script


Date: 19.01.2019

  • rename package to hit_acs

  • fix another error in SetNewValueCallback due to using missing .value attribute on string parameter

  • fix SetNewValueCallback string parameter type: ANSI string

  • use ctypes argtypes declarations for DLL functions

  • improve startup performance by cleaning up csv parser logic

  • keep units as strings (requires newer madgui)

  • avoid unused parameter grouping by element

  • fix potential startup exception if MEFI is given in settings but VAcc is not

  • simplify read_monitor implementation

  • set the beamoptikdll as permanent variable into the user namespace as simplification (i.e. not removing the variable after disconnecting)

  • improve some internal variable names

  • change beamoptikdll variable name in user namespace (beamoptikdll)

  • the load_library classmethod has been removed, in favor of letting the the normal BeamOptikDLL constructor now load the DLL directly

  • special case GetLastFloatValueSD for the MIT variant

  • remove two lonely warnings

  • return the IID integer value (not the ctypes.c_int instance) from GetInterfaceInstance

  • don’t log GetFloatValueSD calls for now (temporary, to avoid too much noise in debug log)


Date: 11.12.2018

  • fix exception in OnlineBackend.__init__ due to missing parenthesis

  • keep a reference to the ctypes callback for SetNewValueCallback, to prevent garbage collection

  • fix incorrect parameter type (pointer to pointer) for SetNewValueCallback

  • allow removing the callback by passing None


Date: 18.10.2018

Now in calver (calendaric versioning) YY.MM.patch since this better fits the nature of madgui development and is I believe more useful for end-users.

  • fix TypeError during MEFI initialization

  • jitter SD values on retrieval, periodically (like shots)

  • use gaussian jitter for monitor readouts

  • take care of settings menu [madgui >= 2018.10.18]

  • aberrate magnet strengths only explicitly

  • add menu options for internal settings

  • add menuitems for loading readouts/strengths

  • load/save more stub settings

  • aberrate only ax/kL values, gaussian distribution

  • disturb beam widths using gamma distribution

  • adapt to updated madgui module qualnames in madgui 2018.10.18

  • adapt to changes in new madgui Plugin API (-> Backend)

  • getting passed Session object instead of mainwindow now

  • safeguard against invalid paths - fixes ValueError on exit

  • fix the test backend when no window is present

  • add automatic sanity checks (missing imports, syntax errors, etc)

  • add automatic style checks and fix several style issues

  • automatically upload releases to PyPI

  • add debug trace log for the real online dll


Date: 24.07.2018

  • retrieve variant from config (autodetection was a failure)

  • load config settings from new settings argument (madgui 1.14.0)

  • reselect previous vacc/mefi on startup

  • suppress exception when reading/writing missing parameters

  • update import path for read_str_file from madgui


Date: 15.07.2018

  • in test stub: use gantry angle from param list

  • fix outdated

  • for ExecuteChanges set options parameter default as CalcDif

  • adapt beamoptikdll module for Marburg variant

  • simplify the test stub module (directly mocks BeamOptikDLL class now, instead of the ctypes backend)


Date: 25.06.2018

  • revert “Automatically read beam and strengths on connect”, it was broken because usually there will be no MEFI combination selected at this point

  • cleanup some unnecessary imports

  • fix NameError in csv_unicode_reader on py2

  • fix importlib_resources import and use within util as well

  • remove obsolete config file and YAML dependency with it

  • make the frame argument optional (useful for testing)

  • adapt to backward incompatible changes in madgui 1.0.2: frame.model is now a Boxed object!

  • pass offsets as parameters to HitOnlineControl and fake DLL (dependency injection!)

  • remove more knowledge from HitOnlineControl

  • can now remove control member from fake DLL

  • remove .instances (~IID) logic in fake DLL

  • add methods to load parameters and SD values from disk

  • update fake SD values on “Execute” rather than on every call


Date: 01.06.2018

  • add beam parameters for test stub

  • automatically read beam and strengths on connect


Date: 31.05.2018

  • fully simplify knobs to being only var names, all conversions are now done by using appropriate expressions in the model!!


Date: 16.04.2018

  • adapt to changes in madgui 1.9.0 API

  • simplify get_knob logic significantly

  • remove support for inserted kickers into SBENDs (now modelled as K0 != ANGLE/L)

  • fix an error in stub with 32bit

  • flip monitor X position to convert from HIT to MAD-X coordinate system (HIT uses a left-handed system in HEBT!)

  • discard -9999 records from monitors

  • remove setuptools entrypoint for madgui, must now be loaded manually using the onload handler

  • expose dll variable to user shell

  • read and add offsets to MWPC measurements


Date: 25.03.2018

  • update madgui plugin to new unit handling in madgui

  • compatible with madgui 1.8.0, hit_models 0.8.0


Date: 02.03.2018

  • fix knob access for skew quadrupoles

  • compatible with madgui 1.7.1, hit_models 0.7.0


Date: 26.01.2018

  • update to madqt 0.0.6: unification of workspace/segment -> model


Date: 24.01.2018

  • 64bit support

  • add win32 and qt standalone modes

  • port to madqt

  • initialize strengths/monitors from current model instead of using the example values in the parameter list (which would often lead to crashes)

  • renamed package

  • finally implement SetNewValueCallback (untested)

  • massive simplification of the madqt interface (knobs API)

  • can query beam parameters

  • ship DVM parameter list with the package itself

  • always load DVM parameters from CSV (no more YAML)

  • can guess correct parameter names more reliably, based on several clues

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hit_acs-20.1.0.tar.gz (55.3 kB view hashes)

Uploaded source

Built Distribution

hit_acs-20.1.0-py2.py3-none-any.whl (58.1 kB view hashes)

Uploaded py2 py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page