Skip to main content

EPICS-IOC for Pharos Laser Controller

This is an unofficial package without ties to, support from, or warranty of the official Pharos manufacturer, Light Conversion.

This is essentially an it-works-for-me version, written at the KMC3-XPP beamline of BESSY-II. It is being updated and supported for as long as the authors are responsible for that beamline. We publish this under the GNU GPL or later.

That said, we try to document as much as possible in the hope that this will be useful. If you find yourself many years into the future :) stumbling over this, and wishing "gee, I wish it was still supported...", feel free to drop us a line. Chances are we're going to answer one question or the other, if you're a fellow scientist. Or that we'll even be available for a more extensive development on commission basis, if you're a commercial entity.

Installation and usage

Obtaining Funzel-IOC

Download the latest version either via pip from PyPI:

pip install funzel-ioc

...or form Gitlab:

git clone git@gitlab.com:codedump2/funzel
pip install funzel/

Configuring the Host

The Funzel-IOC connects to the Pharos control hardware via its serial interface. It uses PyVISA for this.

Chances are that the current setup is as limited as of the writing of this README (November 2023), this means that:

  • the EPICS prefix currently is KMC3:XPP:PHAROS:, and

  • the VISA address at which Funzel-IOC expects to find the laser interface is "ASRL/dev/funzel::INSTR", meaning that you need a symlink from the corresponding /dev/ttyUSB? device to /dev/funzel.

You can automatically set up the correct symlink by virtue of a udev rule, e.g. in /etc/udev/rules.d/99-funzel.rules:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="AL01FC2E", \
SUBSYSTEM=="tty", MODE="0666", SYMLINK+="funzel"

You may want to change the following:

  • ATTRS{serial}==...: set this to the serial of your device. The Pharos device uses a generic built-in USB-to-Serial converter (FT232R), so the vendor and product IDs might not be enough to identify it, if you have several similar pieces of equipment attached. Using the self-reported Pharos serial number will nail this down effectively. (You can track down the serial number with dmesg, lsusb or udevadm info -a /dev/ttyUSB...).

  • MODE="...": the mode of 0666 here allows every user on your system to access the laser device. This is most likely not what you want. Instead, consider restricting this to a specific user and group: "OWNER="...", GROUP="...", MODE="0660".

Running the IOC on the Host

On the host, just type:

funzel-ioc

And it should result in the IOC outputting its control variables, and then a regular (about once per second) status.

Running the IOC in a Docker Container

After you've downloaded the sources into ./funzel, e.g. from GitLab (see above), try this:

podman build -t funzel-ioc -f funzel/Dockerfile -v $PWD/funzel:/funzel_src:z
podman run -ti --rm --device /dev/funzel:/dev/funzel funzel-ioc:latest

IOC Usage and Laser Control

Some notable EPICS process variables:

  • ...(fixme?)

How to turn the laser on / off:

  • ...(fixme?)

How to check if the laser is running:

  • ...(yep; this one's a fixme too...)

Bugs

Feel free to report any. We may be able to help, but keep in mind: It Works For Me (tm) 🤷

Metadata

Release files for funzel-ioc 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for funzel-ioc 0.1.1
File Size Uploaded Provenance Actions
funzel-ioc-0.1.1.tar.gz 28.6 kB Without provenance Details for funzel-ioc-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for funzel-ioc 0.1.1
File Interpreter ABI Platform Actions
funzel_ioc-0.1.1-py3-none-any.whl Python 3 none any Details for funzel_ioc-0.1.1-py3-none-any.whl

Total release size: 55.2 kB

Release files / funzel-ioc-0.1.1.tar.gz

Download URL funzel-ioc-0.1.1.tar.gz
Size 28.6 kB
Tags Source
SHA-256 checksum
How to use checksums
fc7750f70c2096454866c785f428293763b694bd19ef584ad0eaf598db1fda22
BLAKE2b-256 checksum
How to use checksums
b2116d15fe89348b973bde816dfabc0f83c0aa93632ac2d4a2d10b1557ef90d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.5

Release files / funzel_ioc-0.1.1-py3-none-any.whl

Download URL funzel_ioc-0.1.1-py3-none-any.whl
Size 26.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77bfd289f9aab832f2f1beb2a1e39030d6eb092dbde9d871efc0de3ccd488a73
BLAKE2b-256 checksum
How to use checksums
b7e59e0f2503e64399bd56e3b2246ec45993e0a22ca4f74faf8f8f832c509cdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.11.5

Security for funzel-ioc 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page