Object-oriented, high-level interface for Andor cameras (SDK2), written in Cython.
.. Note::
- This is not a stand-alone driver. Andor's proprietary drivers must be installed.
The setup script expects to find ``libandor.so`` in ``/usr/local/lib/``
(the driver's default installation directory).
- Andor provides a low-level, `ctypes` wrapper on their SDK, called ``atcmd``.
If available, it will be imported as `Andor._sdk`.
- This documentation should be read along Andor's Software Development Kit manual.
- **To build the extension**::
$ python2.7 setup_extension.py build_ext --inplace
.. Warning::
This module is not thread-safe. If `AcqMode.wait` is blocking a
background thread, and another function call is made from the main thread,
the main thread will block too.
-------
Usage
-----
The camera is controlled via the top-level class `Andor`:
>>> from andor2 import Andor
>>> cam = Andor()
The `Andor` instance is just a container for other objects
that control various aspect of the camera:
* `Info` : camera information and available features
* `Temperature` : cooler control
* `Shutter` : shutter control
* `EM`: electron-multiplying gain control
* `Detector`: CCD control, including:
- `VSS`: vertical shift speed
- `HSS`: horizontal shift speed
- `ADC`: analog-to-digital converter
- `OutputAmp`: the output amplifier
- `PreAmp`: pre-amplifier control
* `ReadMode`: select the CCD read-out mode (full frame, vertical binning, tracks, etc.)
* `Acquire <AcqMode>`: control the acquisition mode (single shot, video, accumulate, kinetic)
Examples
--------
>>> from andor2 import Andor
>>> cam = Andor()
>>> cam.Temperature.setpoint = -74 # start cooling
>>> cam.Temperature.cooler = True
>>> cam.Detector.OutputAmp(1) # use conventional CCD amplifier instead of electron multiplying
>>> cam.PreAmp(2) # set pre-amplifier gain to 4.9
>>> cam.exposure = 10 # set exposure time to 10 ms
>>> cam.ReadMode.SingleTrack(590,5) # set readout mode: single track, 5 pixels wide, centered at 590 pixels
>>> cam.Acquire.Video() # set acquisition mode to video (continuous)
>>> data = cam.Acquire.Newest(10) # collect latest 10 images as numpy array
>>> cam.Acquire.stop()
>>> cam.Acquire.Kinetic(10, 0.1, 5, 0.01) # set up kinetic sequence of 10 images every 100ms
# with each image being an accumulation of 5 images
# taken 10ms apart
>>> cam.Acquire.start() # start acquiring
>>> cam.Acquire.wait() # block until acquisition terminates
>>> data = cam.Acquire.GetAcquiredData() # collect all data