├── LICENSE ├── README.md └── existing_packages.md /LICENSE: -------------------------------------------------------------------------------- 1 | This work is licensed under the Creative Commons Attribution 4.0 International License. 2 | To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/ or send a letter to 3 | Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Reducing duplicated effort when controlling microscope hardware with python 2 | 3 | There are a growing number of groups using python to control microscope hardware. To date, people have largely been 4 | operating in their own silos, leading to a large amount of duplicated effort. We would like to minimize this going forwards, 5 | and to provide a way of co-ordinating efforts. 6 | 7 | This repository exists to facilitate an open discussion about a) what exactly we are trying to achieve and 8 | b) how best to achieve it. Discussion is based in the repository issues, and is open to all. **If you use python to drive 9 | your microscope or if you want to do so in the future, we want you involved.** Please comment on the issues 10 | (or create a new one) if you have anything to add. 11 | 12 | Longer term aspirations range from, on the most basic level, a catalogue of current microscopy related hardware code so 13 | that you can rapidly find out if someone has already have a python wrapper for your hardware, through to providing a unified 14 | api for common hardware types and large repository of drivers. 15 | -------------------------------------------------------------------------------- /existing_packages.md: -------------------------------------------------------------------------------- 1 | # Existing python packages for microscope hardware control 2 | 3 | **NOTE: This list is a work in progress - if you would like your software added, please submit a PR** 4 | 5 | Entries should follow the following template: 6 | 7 | ## package name 8 | 9 | **Website:** The url of the package website (if different from the source repository) 10 | **Source:** The URL (e.g. on github) of the project source 11 | **License:** The (hopefully open source) license used 12 | **Scope/Description:** What the package tries to accomplish 13 | 14 | **Hardware Supported:** 15 | * camera 1 16 | * stage 1 17 | * etc 18 | 19 | I'll start with python-microscopy to get the ball rolling 20 | 21 | ## python-microscopy 22 | 23 | **Website:** http://www.python-microscopy.org 24 | **Source:** https://github.com/python-microscopy/python-microscopy 25 | **License:** GPLv3 (although some components may be able to be licensed more permisibly on request) 26 | **Scope/Description:** python-microscopy is a large package including a farily mature microscope control GUI as well as a lot of functionality for analysis and postprocessing of microscopy data, especially for single molecule localization experiments. The hardware drivers are found within the source tree in the PYME\Acquire\Hardware subdirectory. 27 | 28 | **Hardware Supported:** 29 | * Andor IXon 30 | * Andor Zyla (probably also Neo, but not well tested) 31 | * Hamamatsu Orca Flash 32 | * Thorlabs DCC1240 (maybe also DCC3240) 33 | * IDS uEye industrial cameras (definitely UI306x, UI327x, UI324x, probably others) 34 | * Ocean Optics spectrometers (probably suffering from bitrot) 35 | * PI piezos (using e255, e662, e709 and e816 controller interface boards, covers most PI piezos, likely easily modifyable to new controllers) 36 | * PI piezo linear motor stages using the C867 controller (M686 stage and similar) 37 | * PI stepper motor stages using the Mercury command set 38 | * Marzhauser Tango translation stages 39 | * Thorlabs MG17?? piezos (this was a 3-axis stage, somewhat dated now) 40 | * Coherent OBIS lasers 41 | * MPB Lasers 42 | * Cobolt lasers 43 | * Matchbox lasers 44 | * Omicron Phoxx lasers 45 | * AA Optoelectronics AOTF 46 | * Simple voltage controlled AOTF (via Arduino) 47 | * Prior Lumen (arclamp) 48 | * Oriel Cornerstone (arclamp and monochrometer) 49 | * Thorlabs FW102B filter wheels 50 | * Thorlabs PM100USB power meter 51 | * TI LightCrafter DMD 52 | * Custom Arduino based "IO slave" (analog, & digital IO) 53 | * Nikon TE2000 stand 54 | * Nikon Ti stand 55 | * 3D Connexion "Space Navigator" 3D mouse 56 | 57 | ## storm-control 58 | 59 | **Website:** https://github.com/ZhuangLab/storm-control 60 | **Source:** https://github.com/ZhuangLab/storm-control 61 | **License:** MIT 62 | **Scope/Description:** storm-control was originally designed for acquiring single molecule localization microscopy data in a manual or semi-automated fashion. At a later point the ability to collect MERFISH data was added. The hardware drivers can all be found in the storm_control\sc_hardware directory. 63 | **Hardware Supported:** Please see [this](https://github.com/ZhuangLab/storm-control/tree/master/storm_control/sc_hardware) web-page. 64 | 65 | ## ScopeFoundry 66 | 67 | **Website:** http://www.scopefoundry.org/ 68 | **Source:** https://github.com/ScopeFoundry/ 69 | **License:** BSD 70 | **Scope/Description:** ... 71 | **Hardware Supported:** ... 72 | 73 | 74 | ## bluesky / Ophyd 75 | 76 | Part of the bluesky project designed at particle accelerators. Ophyd provides a hardware abstraction that is typically on top of distributed controls for accelerators, but can be used more generally. 77 | 78 | **Website:** https://blueskyproject.io/ophyd/ 79 | **Source:** https://github.com/bluesky/ophyd 80 | **License:** BSD 81 | 82 | ## Instrumental 83 | **Website:** https://instrumental-lib.readthedocs.io/en/stable/index.html 84 | **Source:** https://github.com/mabuchilab/Instrumental 85 | **License:** GPL-3 86 | **Scope/Description:** Python-based library for controlling lab hardware like cameras, DAQs, oscilloscopes, spectrometers, and more. It has high-level drivers for instruments from NI, Tektronix, Thorlabs, PCO, Photometrics, Burleigh, and others. 87 | 88 | **Hardware Supported:** 89 | 90 | **Cameras** 91 | * PCO cameras via PCO SDK 92 | * PCO Pixelfly camera 93 | * Princeton Instr. camera via PICAM SDK 94 | * Photometrics cameras 95 | * TSI cameras 96 | * Thorlabs DCx cameras 97 | 98 | **Lasers** 99 | * Toptica FemtoFiber 100 | 101 | **Motion** 102 | * Attocube stages 103 | * Thorlabs APT controller 104 | * Thorlabs Flipper Filters 105 | * Thorlabs Kinesis devices 106 | * Thorlabs TDC001 T-Cube DC Servo Motor Controllers 107 | * Newmark rotation stages 108 | **DAQ** 109 | * NI-DAQmx 110 | 111 | see other devices in [drivers](https://github.com/mabuchilab/Instrumental/tree/master/instrumental/drivers) 112 | 113 | ## Qudi 114 | **Website:** https://ulm-iqo.github.io/qudi-generated-docs/html-docs/ 115 | **Source:** https://github.com/Ulm-IQO/qudi 116 | **License:** GPL 117 | **Scope/Description:** Qudi is a suite of tools for operating multi-instrument and multi-computer laboratory experiments. Originally built around a confocal fluorescence microscope experiments, it has grown to be a generally applicaple framework for controlling experiments. 118 | 119 | **Hardware Supported:** 120 | 121 | **Cameras** 122 | * Andor iXon 897 ultra camera 123 | * Thorlabs DCx camera 124 | * Thorlabs compact USB cameras (uc480) 125 | 126 | **Lasers** 127 | * Coherent OBIS 128 | * LaserQuantum 129 | * Spectra Physics Millennia 130 | 131 | **Motion** 132 | * Thorlabs APT controller 133 | * Newport CONEX-AGP controller for Agilis stages 134 | * PI stages (incl. Micos) 135 | * Zaber rotation stage 136 | 137 | **DAQ** 138 | * NI-DAQmx pulse generators and counters (via PyDAQmx) 139 | * FPGA counters and pulse generators 140 | 141 | see other devices in [hardware](https://github.com/Ulm-IQO/qudi/tree/master/hardware) 142 | 143 | ## Lantz 144 | **Website:** https://lantz.readthedocs.io/en/0.3/ 145 | **Source:** https://github.com/LabPy/lantz/tree/0.3 146 | **License:** [BSD](https://github.com/LabPy/lantz/blob/master/LICENSE) 147 | **Scope/Description:** Lantz is an automation and instrumentation toolkit. On-the-fly GUI for testing purposes. 148 | 149 | **Hardware Supported:** 150 | 151 | **Cameras** 152 | * Andor, sCMOS and EM-CCD 153 | * PCO Sensicam 154 | 155 | **Lasers** 156 | * Cobolt 06-01 Series 157 | * Coherent Innova 300 Series 158 | * VFL MPB Communications 159 | * RGB Lasersystems MiniLas Evo laser 160 | 161 | **Motion** 162 | * Prior NanoScanZ 163 | * Sutter filter wheel 164 | 165 | **DAQ** 166 | * NI-DAQmx 167 | 168 | **Microscope bodies** 169 | * Olympus IX and BX 170 | 171 | other devices listed in [drivers](https://github.com/LabPy/lantz/tree/master/lantz/drivers) 172 | 173 | 174 | ## ACQ4 175 | 176 | **Website:** http://acq4.org 177 | 178 | **Source:** https://github.com/acq4/acq4 179 | 180 | **License:** MIT 181 | 182 | **Scope/Description:** Data acquisition platform focused on optical microscopy (cameras, stages, filters, laser scanning), electrophysiology (mostly patch-clamp), and laser photostimulation. Architecture includes device abstraction layer, acquisition engine, and coordinate system modeling. 183 | 184 | 185 | ## yaq 186 | 187 | **Website:** https://yaq.fyi/   188 | 189 | **Source:**  [Gitlab project](https://gitlab.com/yaq) [core python implementation](https://gitlab.com/yaq/yaqd-core-python) 190 | 191 | **License:** LGPLv3 (for the core) [some more info](https://yaq.fyi/licensing/) 192 | 193 | **Scope/Description:** 194 | yaq provides a daemon based architecture for interacting with hardware (and services). 195 | yaq uses a [Apache Avro](https://avro.apache.org) based [RPC](https://yeps.yaq.fyi/107) between daemons and clients running in separate processes. 196 | yaq uses a composition based approach to define common [traits](https://yaq.fyi/traits) to enforce API consistency 197 | 198 | **Hardware Supported:**  https://yaq.fyi/hardware/ (and actively growing) 199 | 200 | 201 | # pyacq 202 | 203 | **Source:** https://github.com/pyacq/pyacq 204 | 205 | **License:** BSD 206 | 207 | **Scope/Description:** Distributed hardware control, online analysis, and user interfaces. Hardware support mainly around neuroscience applications: electrode arrays, DAQ, camera, etc. Uses multiple processes with remote object proxying and a flexible data streaming architecture to allow scalable configuration (for example: record data from electrode array, stream to compute cluster for online analysis, and stream results to UI for visualization). 208 | --------------------------------------------------------------------------------