Advanced Customisation

Further customisation can be achieved by overriding additional functions and adding new ones. This page provides some guidance to help with this process.

Changing GUI Appearance

The stylesheet in res/style.css can be used to change the appearance of the GUI. Elements of appearance are also set in set_colour_scheme() which can be overridden to change these elements.

Image Acquisition and Camera Control

The ImageAcquisitionThread class runs as a thread to handle acquisition of frames from the camera. This thread is started by the start_acquire() function of the GUI when when ‘Live Imaging’ is clicked. A reference to this thread is stored in self.imageThread, and a direct reference to the camera interface class is stored in self.cam or can be obtained from self.imageThread.get_camera(). This is the means by which camera settings can be altered by the GUI class. See the update_camera_ranges_and_values() function for examples of getting camera properties, and exposure_slider_changed(), gain_slider_changed() and frame_rate_slider_changed() for examples of setting camera properties.

Each camera has its own class which subclasses the GenericCameraInterface class. See the Implementing Cameras page for more details on how to create additional cameras.

The ImageAcquisitionThread thread opens the camera, using the open_camera() function of the selected camera, and then continuously grabs images and places them into a queue. This queue is created in the GUI class (self.inputQueue) and passed to the ImageAcquisitionThread. The queue is then also shared with the ImageProcessorThread so that this has direct access to the queue of images.

Image Handling

The function handle_image() is called regularly by a timer. This function pulls the latest raw and processed images off their respective queues. It does not update the live image display which is handled by a separate function running off a different timer, update_image_display().

If direct recording is currently active, this function also calls the record() function to record the current frame, if recording to a buffer is currently active, this function checks if the buffer has been filled with the required number of images, and if so calls stop_buffering().

No image processing should be done here to avoid slowing the user interface thread.

Image Saving

The utility functions save_image() and save_image_ac() in the GUI are used to snap or save images and can be used for other purposes. Both save 16 bit images, save_image_ac() rescales the image to use the full range before saving.

Background Images

As the need to acquire a background or reference image is common, CAS GUI includes helper functions load_background(), and save_background(). These load and save, respectively, the image stored in self.background to the filename stored in self.defaultBackgroundFile, which by default is “background.tif”. Alternatively, load_background_from() and save_background_to() will use the filename passed as an argument.

Info Bar

The bottom information bar is periodically updated by the update_info_bar() function, override this to include custom information.

Recording

If recording raw images, a second queue (called the auxillary queue) is used. The ImageAcquisitionThread places a copy of raw images in this thread as well as the main thread. The function handle_image() periodically checks to see when this queue has been filled to the required number of frames, and record_buffer_full() is then called to handle saving the images in the buffer to disk.