Concert integrates third-party software in the ext package. Because the dependencies of these modules are not listed as Concert dependencies, you have to make sure, that the appropriate libraries and modules are installed.

UFO Processing

class concert.ext.ufo.FlatCorrect(dark, flat, absorptivity=True, fix_nan_and_inf=True, copy_inputs=False)

Flat-field correction.

class concert.ext.ufo.GeneralBackproject(args, resources=None, gpu_index=0, do_normalization=False, region=None, copy_inputs=False)

One backprojector worker.


GeneralBackprojectArgs instance with arguments for reconstruction


Ufo.Resources instance


use GPU with this index


do flat correction of not


User defined region which can override the one stored in args


if True copy images before they are inserted into UFO

exception concert.ext.ufo.GeneralBackprojectArgsError
exception concert.ext.ufo.GeneralBackprojectError
class concert.ext.ufo.GeneralBackprojectManager(self, args, average_normalization=True, regions=None, copy_inputs=False)

Manage 3D recnstruction by back projection. The manager stores darks, flats and projections and spreads them to back projection workers in as many batches as needed in order not to overflow GPU memory.


GeneralBackprojectArgs instance with arguments for reconstruction


if False, use only one dark and flat image from their streams, otherwise average all of them


User defined regions (batches) for reconstruction, if None, batches are determined automatically


if True copy images before they are inserted into UFO

await backproject(producer)

Backproject projections from producer.

find_parameters(parameters, projections=None, metrics=('sag',), regions=None, iterations=1, fwhm=0, minimize=(True,), z=None, method='powell', method_options=None, guesses=None, bounds=None, store=True)

Find reconstruction parameters. parameters (see GeneralBackprojectArgs.z_parameters) are the names of the parameters which should be found, projections are the input data and if not specified, the ones from last reconstruction are used. z specifies the height in which the parameter is looked for. If store is True, the found parameter values are stored in the reconstruction arguments. Optimization is done either brute-force if regions are not specified or one of the scipy minimization methods is used, see below.

If regions are specified, they are reconstructed for the corresponding parameters and a metric from metrics list is applied. Thus, first parameter in parameters is reconstructed within the first region in regions and the first metric (see GeneralBackprojectArgs.slice_metrics) in metrics is applied and so on. If metrics is of length 1 then it is applied to all parameters. minimize is a tuple specifying whether each parameter in the list should be minimized (True) or maximized (False). After every parameter is processed, the parameter optimization result is stored and the next parameter is optimized in such a way, that the result of the optimization of the previous parameter already takes place. iterations specifies how many times are all the parameters reconstructed. fwhm specifies the full width half maximum of the gaussian window used to filter out the low frequencies in the metric, which is useful when the region for a metric is large. If the fwhm is specified, the region must be at least 4 * fwhm large. If fwhm is 0 no filtering is done.

If regions is not specified, scipy.minimize() is used to find the parameter, where the optimization method is given by the method parameter, method_options are passed as options to the minimize function and guesses are initial guesses in the order of the parameters list. If bounds are given, they represent the domains where to look for parameters, they are (min, max) tuples, also in the order of the parameters list. See documentation of scipy.minimize() for the list of minimization methods which support bounds specification. In this approach only the first in metrics is taken into account because the optimization happens on all parameters simultaneously, the same holds for minimize.

property num_processed_projections

Number of projections sent to backprojectors.

property num_received_projections

Number of received projections.


Reset state, clearing all pre-processing steps but keep projections and slices intact.

await update_darks(producer)

Get new darks from producer. Immediately start the reconstruction so that averaging starts.

await update_flats(producer)

Get new flats from producer. Immediately start the reconstruction so that averaging starts.

exception concert.ext.ufo.GeneralBackprojectManagerError
class concert.ext.ufo.InjectProcess(graph, get_output=False, output_dims=2, scheduler=None, copy_inputs=False)

Process to inject NumPy data into a UFO processing graph.

InjectProcess can also be used as a context manager, in which case it will call start() on entering the manager and wait() on exiting it.

graph must either be a Ufo.TaskGraph or a Ufo.TaskNode object. If it is a graph the input tasks will be connected to the roots, otherwise a new graph will be created. scheduler is one of the ufo schedulers, e.g. Ufo.Scheduler or Ufo.FixedScheduler.

await insert(array, node=None, index=0)

Insert array into the node’s index input.


array must be a NumPy compatible array.

await result(leave_index=None)

Get result from leave_index if not None, all leaves if None. Returns a list of results in case leave_index is None or one result for the specified leave_index.

start(arch=None, gpu=None)

Run the processing in a new thread.

Use push() to insert data into the processing chaing and wait() to wait until processing has finished.


Stop input tasks.


Wait until processing has finished.

exception concert.ext.ufo.InjectProcessError

Errors related with InjectProcess.

class concert.ext.ufo.PluginManager

Plugin manager that initializes new tasks.

get_task(name, **kwargs)

Create a new task from plugin name and initialize with kwargs.


Opening images in external programs.

class concert.ext.viewers.ImageViewerBase(self, limits: str = 'stream', downsampling: int = 1, title: str = '', show_refresh_rate: bool = False, force: bool = False)

Backend-free base class for displaying images.


minimum and maximum gray value (black and white points). Can be a tuple (min, max), ‘auto’ or ‘stream’. When ‘auto’, limits are adjusted for every shown image, when ‘stream’, limits are adjusted on every __call__.


Display every n-th pixel, which can speed up the viewer


Image title


Whether or not to show refresh rate text directly embedded into the displayed image

class concert.ext.viewers.PyQtGraphViewer(self, limits: str = 'stream', downsampling: int = 1, title: str = '', show_refresh_rate: bool = False, force: bool = False)

Dynamic image viewer using PyQtGraph.

class concert.ext.viewers.PyplotImageViewer(self, imshow_kwargs: dict = None, fast: bool = True, limits: str = 'stream', downsampling: int = 1, title: str = '', show_refresh_rate: bool = False, force: bool = False)

Dynamic image viewer using matplotlib.


matplotlib’s imshow keyword arguments


Whether to use the fast version without colorbar


Reset the viewer’s state.

class concert.ext.viewers.PyplotViewer(self, style: str = 'o', plot_kwargs: dict = None, autoscale: bool = True, title: str = '', force: bool = False)

Dynamic plot viewer using matplotlib.


One of matplotlib’s linestyle format strings


Keyword arguments accepted by matplotlib’s plot()


If True, the axes limits will be expanded as needed by the new data, otherwise the user needs to rescale the axes


Plot title


Clear the plotted data.

class concert.ext.viewers.ViewerBase(self, force: bool = False)

A base class for data viewer which sends commands to a backend-specific updater which runs in a separate process.


Pause, no images are dispayed but image commands work.


Resume the viewer.

await show(item, force=False)

Push item to the queue for display in a separate proces. If force is True make sure the item is displayed, otherwise it may be skipped if there is something in the queue waiting to be shown.

exception concert.ext.viewers.ViewerError

Viewer errors.

concert.ext.viewers.imagej(image, path='imagej')

Open image in ImageJ found by path.