Giter VIP home page Giter VIP logo

fibsem's Introduction

OpenFIBSEM

A universal API for FIBSEM Control, Development and Automation

Overview

OpenFIBSEM is a Python package for controlling and automating FIB/SEM microscopes. It is designed to be a universal API for FIBSEM control, development and automation. OpenFIBSEM is designed to abstract away the details of the microscope and provide a simple, intuitive interface for controlling the microscope, as well as reuseable modules for common workflows and operations. OpenFIBSEM is designed to be extensible and can be easily adapted to support new microscopes.

We currently support the TESCAN Automation SDK and ThermoFisher AutoScript. Support for other FIBSEM systems is planned.

Install

Install OpenFIBSEM

There are several ways to install OpenFIBSEM depending on your application and needs.

PyPI (For Users)

pip install fibsem 

Github (For Development)

Clone this repository, and checkout main:

git clone https://github.com/DeMarcoLab/fibsem.git

Install dependencies and package

cd fibsem
conda create -n fibsem python=3.9 pip
conda activate fibsem
pip install -e .

Napari Plugin

The OpenFIBSEM tools and user interface are also available as a napari plugin:

pip install napari-openfibsem

Or use napari plugin manager

Additional Installation Information

For detailed instructions on installation, and installing the commercial microscope APIs, see Installation Guide.

Getting Started

To get started, see the example/example.py:

Recommended: You can start an offline demo microscope by speciying manufacturer: "Demo" in the configuration yaml file (fibsem/config/microscope-configuration.yaml). This will start a demo microscope that you can use to test the API without connecting to a real microscope. To connect to a real microscope, set the ip_address and manufacturer of your microscope in the configuration file or alternatively, you can pass these arguments to utils.setup_session() directly.

This example shows you how to connect to the microscope, take an image with both beams, and then plot.

from fibsem import utils, acquire
import matplotlib.pyplot as plt

def main():

    # connect to microscope
    microscope, settings = utils.setup_session(ip_address="localhost", manufacturer="Demo")

    # take image with both beams
    eb_image, ib_image = acquire.take_reference_images(microscope, settings.image)

    # show images
    fig, ax = plt.subplots(1, 2, figsize=(7, 5))
    ax[0].imshow(eb_image.data, cmap="gray")
    ax[1].imshow(ib_image.data, cmap="gray")
    plt.show()


if __name__ == "__main__":
    main()

This example is available as a script in example/example.py. For more detailed examples, see the Examples sections below.

Examples

Core Functionality

For examples of core functionality please see:

  • example/example_imaging.py: image acqusition
  • example/example_movement.py: stage movement
  • example/example_milling.py: drawing patterns and beam milling
  • example/autolamella.py: recreation of AutoLamella V1 (automated cryo-lamella preparation) in ~150 lines of code

Additional example scripts and notebooks are available.

Projects using OpenFIBSEM

We are currently working on a number of projects using OpenFIBSEM. If you are using OpenFIBSEM in your research, please let us know!

Contributing

Contributions are welcome! Please open a pull request or issue.

Docs

OpenFIBSEM is a large package with many features. For more detailed documentation, please see the Documentation Website.

Citation

If you find this work useful, please cite:

@article{CLEEVE2023107967,
title = {OpenFIBSEM: A universal API for FIBSEM control},
journal = {Journal of Structural Biology},
volume = {215},
number = {3},
pages = {107967},
year = {2023},
issn = {1047-8477},
doi = {https://doi.org/10.1016/j.jsb.2023.107967},
url = {https://www.sciencedirect.com/science/article/pii/S1047847723000308},
author = {Patrick Cleeve and David Dierickx and Lucile Naegele and Rohit Kannachel and Lachlan Burne and Genevieve Buckley and Sergey Gorelick and James C. Whisstock and Alex {de Marco}},
keywords = {Focused Ion Beam microscopy, Automation, Python, API, Microscopy, Controller},
abstract = {This paper introduces OpenFIBSEM, a universal API to control Focused Ion Beam Scanning Electron Microscopes (FIBSEM). OpenFIBSEM aims to improve the programmability and automation of electron microscopy workflows in structural biology research. The API is designed to be cross-platform, composable, and extendable: allowing users to use any portion of OpenFIBSEM to develop or integrate with other software tools. The package provides core functionality such as imaging, movement, milling, and manipulator control, as well as system calibration, alignment, and image analysis modules. Further, a library of reusable user interface components integrated with napari is provided, ensuring easy and efficient application development. OpenFIBSEM currently supports ThermoFisher and TESCAN hardware, with support for other manufacturers planned. To demonstrate the improved automation capabilities enabled by OpenFIBSEM, several example applications that are compatible with multiple hardware manufacturers are discussed. We argue that OpenFIBSEM provides the foundation for a cross-platform operating system and development ecosystem for FIBSEM systems. The API and applications are open-source and available on GitHub (https://github.com/DeMarcoLab/fibsem).}
}

enjoy :)

fibsem's People

Contributors

bigchillrk avatar daviddierickx avatar genevievebuckley avatar gorliks avatar lachieburne avatar lbur0010 avatar lucilenaegele avatar patrickcleeve2 avatar rohit-kannachel avatar sklumpe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

fibsem's Issues

auto_discharge_beam

the naming does not tell anything to a regular user.
it should be called charge_neutralise or simil.

it should allow to run with the EB as well as with the IB.

current version has the image_settings parameters hard-coded, this needs to be changed as different charge state or materials will behave differently

Autolamella example issue

Even after the fixes in #29 I still could not run the autolamella example successfully. It errors out in autoscript with:
There is no patterning application with name: 'autolamella'. This name is set as default in this line.

I did pip install the wheel for autolamella in the same env as fibsem, is there some extra step to let autoscript recognize it? (feel free to move this issue to the issue tracker of autolamella if you think it is better suited there)

[BUG] Stage / Shuttle parameters are incorrectly applied

Need to update the stage/shuttle pre-tilt parameters as they are currently not applied as expected.

Desired

stage:
    rotation_flat_to_electron: 49 # degrees                  # (the rotation angle of the stage, when flat to the electron beam)
    rotation_flat_to_ion: 229 # degrees                        # (the rotation angle of the stage, when flat to the ion beam)
    tilt_flat_to_electron: 0 # degrees (pre-tilt)               # (the tilt angle of the electron beam)
    tilt_flat_to_ion: 52 # degrees                                   # (the tilt angle of the ion beam)
    pre_tilt: 35                                                               # (the shuttle pre-tilt)

[FEAT] Install / Run Script

Write install / run scripts for windows and linux

Turn these into desktop shortcuts for non-tech users

.sh / .bat scripts

  • turn them into desktop shortcuts?

[DOC] Figures

Create the following figures:

  • fibsem architecture
  • Add dog, to autofocus plot
  • salami development in style of autolamella diagram
  • block diagram for transition from autolamella to waffle method
  • ui component diagram: split into sections
  • gamma / post-processing comparison

[REFACTOR] Stage Paramaters

Refactor the stage movement code and settings to:

  • Separate shuttle pre-tilt
  • Document what the flat_to_beam tilt angles mean
  • update the movement code to use shuttle pre-tilt not just electron_tilt_

[FEAT] Validation Upgrade

Planned validation upgrades

  • Refactor existing validation ui -> return list of strings rather than reading the log
  • Add dynamic focus and tilt correction to settings to check

Fibsem Labelling

Placeholder for labelling bugs / features

  • Change how the data loading / saving works. Don't copy the raw data to another folder, and remove zarr. Just load from a list of filenames. Issue is that when you reopen the dataset, all the labels are out of order, so need a way to match them -> filenames. copying raw data also doubles dataset size.
  • [ ]

[BUG] Corrected Movement

The current corrected movement implementation only seems stable for 50/230 deg rotation and 27 pre-tilt. Investigate whether it works for other conditions, and longer term replace with a proper camera matrix / inverse kinematics solution

[BUG] Error raised when FIB not available

manufacturer: "Thermo"

Currently if trying to use openfibsem on a system without a FIB the program will crash due to not having the beam available / having the licence.

Need to make a way for the user to specify which beams they have available on the system, or ideally detector automatically?

  • probably another flag in system.yaml

[FEAT] New Features

  • Donut pattern napari
  • bitmap pattern in ui
  • safe movements
  • drift corrected milling in ui (fiducial, area)
  • live imaging
  • ion beam cross current alignement
  • measurement tool
  • manipulator calibration
  • [ ]

Image labelling

Labels are saved as 8-bit files (whether tiff or png) filled with black colour, and the labelled regions are effectively lost

Not possible to draw straight lines or circles in Labels-layer in napari

It is possible to draw lines, circles etc in Shapes-layers in napari, but the labels are not saved correctly

[FEAT] Manufacturer / Model / Serial No. Info

Add method to get the relevant manufactuer, model, serial id for the system automatically.

  • Maybe assist with defining the model.yaml automatically

  • model

  • serial number

  • software version

[FEAT] Check if pattern inside image

Convert the functionality made for autolamella into a generic function that takes the size of the pattern and checks if it is outside the image, for adding to the milling widget

MicroscopeState properties

Add missing features / fields to microscope state

  • stigmation
  • shift

Image
DetectorSettings

  • Mode
  • Type
  • ...

[UI] Feature Detection Widget

Add a feature detection widget

  • Show segmentation mask (as overlay)
  • Show detected feature points
  • Allow user to click to move feature point
  • Save image if user updates position
  • Show model parameters used.

[DOCS] Feature GIFs

Create gifs showing features

  • auto charge neutralisation
  • auto needle calibration
  • auto gamma
  • eucentric correction
  • corrected movements
  • ui elements
  • microscope settings validation

[FEAT] CLAHE Filter

Look into automatic CLAHE filter instead of auto-gamma.

AutoGamma is quick and dirty, and has worked well for cryo but might need something better in future. Looks like it would be an easy swap / addition.

It might also be an opportunity to organise the image processing parts of the code and move them into their own module / file if more get added.

[BUG] Demo Microscope image metadata is not valid for saving

TypeError                                 Traceback (most recent call last)
File ~\Documents\repos\fibsem\fibsem\ui\FibsemImageSettingsWidget.py:89, in FibsemImageSettingsWidget.take_image(self=<fibsem.ui.FibsemImageSettingsWidget.FibsemImageSettingsWidget object>)
     86 def take_image(self):
     87     self.image_settings: ImageSettings = self.get_settings_from_ui()
---> 89     arr =  acquire.new_image(self.microscope, self.image_settings)
        self.image_settings = ImageSettings(resolution=[1536, 1024], dwell_time=1e-06, hfw=0.00015, autocontrast=True, beam_type=<BeamType.ELECTRON: 1>, save=True, label='default_image', gamma_enabled=False, save_path=WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM'), reduced_area=None)
        self = <fibsem.ui.FibsemImageSettingsWidget.FibsemImageSettingsWidget object at 0x000001ABC902B040>
        self.microscope = <fibsem.microscope.DemoMicroscope object at 0x000001ABB7943100>
        acquire = <module 'fibsem.acquire' from 'C:\\Users\\pcle0002\\Documents\\repos\\fibsem\\fibsem\\acquire.py'>
     90     name = f"{self.image_settings.beam_type.name}"
     92     if self.image_settings.beam_type == BeamType.ELECTRON:

File ~\Documents\repos\fibsem\fibsem\acquire.py:261, in new_image(microscope=<fibsem.microscope.DemoMicroscope object>, settings=ImageSettings(resolution=[1536, 1024], dwell_tim.../demo_2023-03-23-08-06-43PM'), reduced_area=None))
    259 if settings.save:
    260     filename = os.path.join(settings.save_path, label)
--> 261     image.save(save_path=filename)
        image = <fibsem.structures.FibsemImage object at 0x000001ABCAED5D90>
        filename = 'C:\\Users\\pcle0002\\Documents\\repos\\demo_2023-03-23-08-06-43PM\\default_image_eb'
    263 return image

File ~\Documents\repos\fibsem\fibsem\structures.py:1312, in FibsemImage.save(self=<fibsem.structures.FibsemImage object>, save_path=WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM/default_image_eb.tif'))
   1310 else:
   1311     metadata_dict = None
-> 1312 tff.imwrite(
        tff = <module 'tifffile' from 'C:\\Users\\pcle0002\\Miniconda3\\envs\\autoliftout\\lib\\site-packages\\tifffile\\__init__.py'>
        save_path = WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM/default_image_eb.tif')
        self.data = <class 'numpy.ndarray'> (1024, 1536) uint8
        self = <fibsem.structures.FibsemImage object at 0x000001ABCAED5D90>
        metadata_dict = {'beam_type': 'ELECTRON', 'resolution': [1536, 1024], 'dwell_time': 1e-06, 'hfw': 0.00015, 'autocontrast': True, 'gamma_enabled': False, 'save': True, 'save_path': WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM'), 'label': 'default_image', 'reduced_area': None, 'version': 'v1', 'pixel_size': {'x': 9.765624999999999e-08, 'y': 9.765624999999999e-08}, 'microscope_state': {'timestamp': 1679562379.722322, 'absolute_position': {'x': 0.0, 'y': 0.0, 'z': 0.0, 'r': 0.0, 't': 0.0, 'coordinate_system': None}, 'eb_settings': {'beam_type': 'ELECTRON', 'working_distance': None, 'beam_current': None, 'hfw': None, 'resolution': None, 'dwell_time': None, 'stigmation': None, 'shift': None}, 'ib_settings': {'beam_type': 'ION', 'working_distance': None, 'beam_current': None, 'hfw': None, 'resolution': None, 'dwell_time': None, 'stigmation': None, 'shift': None}}, 'detector_settings': {'type': 'Unknown', 'mode': 'Unknown', 'brightness': 0.0, 'contrast': 0.0}}       
   1313     save_path,
   1314     self.data,
   1315     metadata=metadata_dict,
   1316 )

File ~\Miniconda3\envs\autoliftout\lib\site-packages\tifffile\tifffile.py:891, in imwrite(file=WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM/default_image_eb.tif'), data=<class 'numpy.ndarray'> (1024, 1536) uint8, shape=None, dtype=None, **kwargs={'metadata': {'autocontrast': True, 'beam_type': 'ELECTRON', 'detector_settings': {'brightness': 0.0, 'contrast': 0.0, 'mode': 'Unknown', 'type': 'Unknown'}, 'dwell_time': 1e-06, 'gamma_enabled': False, 'hfw': 0.00015, 'label': 'default_image', 'microscope_state': {'absolute_position': {'coordinate_system': None, 'r': 0.0, 't': 0.0, 'x': 0.0, 'y': 0.0, 'z': 0.0}, 'eb_settings': {'beam_current': None, 'beam_type': 'ELECTRON', 'dwell_time': None, 'hfw': None, 'resolution': None, 'shift': None, 'stigmation': None, 'working_distance': None}, 'ib_settings': {'beam_current': None, 'beam_type': 'ION', 'dwell_time': None, 'hfw': None, 'resolution': None, 'shift': None, 'stigmation': None, 'working_distance': None}, 'timestamp': 1679562379.722322}, 'pixel_size': {'x': 9.765624999999999e-08, 'y': 9.765624999999999e-08}, 'reduced_area': None, ...}})
    888     tifargs['byteorder'] = byteorder
    890 with TiffWriter(file, **tifargs) as tif:
--> 891     result = tif.write(data, shape, dtype, **kwargs)
        kwargs = {'metadata': {'beam_type': 'ELECTRON', 'resolution': [1536, 1024], 'dwell_time': 1e-06, 'hfw': 0.00015, 'autocontrast': True, 'gamma_enabled': False, 'save': True, 'save_path': WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM'), 'label': 'default_image', 'reduced_area': None, 'version': 'v1', 'pixel_size': {'x': 9.765624999999999e-08, 'y': 9.765624999999999e-08}, 'microscope_state': {'timestamp': 1679562379.722322, 'absolute_position': {'x': 0.0, 'y': 0.0, 'z': 0.0, 'r': 0.0, 't': 0.0, 'coordinate_system': None}, 'eb_settings': {'beam_type': 'ELECTRON', 'working_distance': None, 'beam_current': None, 'hfw': None, 'resolution': None, 'dwell_time': None, 'stigmation': None, 'shift': None}, 'ib_settings': {'beam_type': 'ION', 'working_distance': None, 'beam_current': None, 'hfw': None, 'resolution': None, 'dwell_time': None, 'stigmation': None, 'shift': None}}, 'detector_settings': {'type': 'Unknown', 'mode': 'Unknown', 'brightness': 0.0, 'contrast': 0.0}}}        data = <class 'numpy.ndarray'> (1024, 1536) uint8
        dtype = None
        tif = <tifffile.tifffile.TiffWriter object at 0x000001ABB7943160>
        shape = None
    892 return result

File ~\Miniconda3\envs\autoliftout\lib\site-packages\tifffile\tifffile.py:2124, in TiffWriter.write(self=<tifffile.tifffile.TiffWriter object>, data=<class 'numpy.ndarray'> (1, 1, 1, 1024, 1536, 1) uint8, shape=(1024, 1536), dtype=None, photometric=<PHOTOMETRIC.MINISBLACK: 1>, planarconfig=None, extrasamples=0, volumetric=False, tile=(), contiguous=False, truncate=False, align=None, rowsperstrip=None, bitspersample=8, compression=False, predictor=False, subsampling=None, jpegtables=None, colormap=None, description=None, datetime=None, resolution=None, subfiletype=0, software=None, subifds=None, metadata={'autocontrast': True, 'beam_type': 'ELECTRON', 'detector_settings': {'brightness': 0.0, 'contrast': 0.0, 'mode': 'Unknown', 'type': 'Unknown'}, 'dwell_time': 1e-06, 'gamma_enabled': False, 'hfw': 
0.00015, 'label': 'default_image', 'microscope_state': {'absolute_position': {'coordinate_system': None, 'r': 0.0, 't': 0.0, 'x': 0.0, 'y': 0.0, 'z': 0.0}, 'eb_settings': {'beam_current': None, 'beam_type': 'ELECTRON', 'dwell_time': None, 'hfw': None, 'resolution': None, 'shift': None, 'stigmation': None, 'working_distance': None}, 'ib_settings': {'beam_current': None, 'beam_type': 'ION', 'dwell_time': None, 'hfw': None, 'resolution': None, 'shift': None, 'stigmation': None, 'working_distance': None}, 'timestamp': 1679562379.722322}, 'pixel_size': {'x': 9.765624999999999e-08, 'y': 9.765624999999999e-08}, 'reduced_area': None, ...}, extratags=(), returnoffset=False, ijmetadata=None, compress=None)
   2122     if self._truncate:
   2123         self._metadata.update(truncated=True)
-> 2124     description = json_description(inputshape, **self._metadata)
        inputshape = (1024, 1536)
        self._metadata = {'beam_type': 'ELECTRON', 'resolution': [1536, 1024], 'dwell_time': 1e-06, 'hfw': 0.00015, 'autocontrast': True, 'gamma_enabled': False, 'save': True, 'save_path': WindowsPath('C:/Users/pcle0002/Documents/repos/demo_2023-03-23-08-06-43PM'), 'label': 'default_image', 'reduced_area': None, 'version': 'v1', 'pixel_size': {'x': 9.765624999999999e-08, 'y': 9.765624999999999e-08}, 'microscope_state': {'timestamp': 1679562379.722322, 'absolute_position': {'x': 0.0, 'y': 0.0, 'z': 0.0, 'r': 0.0, 't': 0.0, 'coordinate_system': None}, 'eb_settings': {'beam_type': 'ELECTRON', 'working_distance': None, 'beam_current': None, 'hfw': None, 'resolution': None, 'dwell_time': None, 'stigmation': None, 'shift': None}, 'ib_settings': {'beam_type': 'ION', 'working_distance': None, 'beam_current': None, 'hfw': None, 'resolution': None, 'dwell_time': None, 'stigmation': None, 'shift': None}}, 'detector_settings': {'type': 'Unknown', 'mode': 'Unknown', 'brightness': 0.0, 'contrast': 0.0}}      
        description = None
        self = <tifffile.tifffile.TiffWriter object at 0x000001ABB7943160>
   2125     description += '\x00' * 16  # add buffer for in-place update
   2126 # elif metadata is None and self._truncate:
   2127 #     raise ValueError('cannot truncate without writing metadata')
   2128 else:

File ~\Miniconda3\envs\autoliftout\lib\site-packages\tifffile\tifffile.py:14554, in json_description(shape=(1024, 1536), **metadata={'autocontrast': True, 'beam_type': 'ELECTRON', 'detector_settings': {'brightness': 0.0, 'contrast': 0.0, 'mode': 'Unknown', 'type': 'Unknown'}, 'dwell_time': 1e-06, 'gamma_enabled': False, 'hfw': 0.00015, 'label': 'default_image', 'microscope_state': {'absolute_position': {'coordinate_system': None, 'r': 0.0, 't': 0.0, 'x': 0.0, 'y': 0.0, 'z': 0.0}, 'eb_settings': {'beam_current': None, 'be

[BUG] Milling Widget Bugs / Improvements

  • Dont load a milling stage on init
  • remove test_function , test button
  • make live update work
  • fix workflow so you dont have to press -> save -> update pattern
  • remove time.sleep from run milling

Before Drawing patterns

  • check if image has been taken
  • check if milling stage has been added
  • check if pattern is inside image #91

autofocus parameters are hardcoded

current version ignores the image_setting variable for the autofocus procedure. it only uses to restore the imaging conditions after the procedure
In order for this to be an improvement to the internal autoscript function, it needs to allow flexibility.

[BUG] Milling Stage is overriden when switched

If a pattern is created in milling stage 1, and another pattern is created in milling stage 2, when switched back to milling stage 1, the pattern in milling stage 1 is overridden by the pattern created in milling stage 2.

Setup Session Bug

[BUG] Fix the logging issue where logs are not recorded correctly if you try to log something before initialising the log, and allow the logging path to be changed once initialised

[BUG] CUDA out of memory, eval()

The trained model uses excessive memory, and has a bug when trying to set eval() mode. Investigate why there is so much excess gpu memory allocation, and why eval is not performing as expected.

  File "C:\Users\Admin\.conda\envs\liftout\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "C:\Users\Admin\.conda\envs\liftout\lib\site-packages\segmentation_models_pytorch\base\model.py", line 16, in forward
    decoder_output = self.decoder(*features)
  File "C:\Users\Admin\.conda\envs\liftout\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "C:\Users\Admin\.conda\envs\liftout\lib\site-packages\segmentation_models_pytorch\unet\decoder.py", line 119, in forward
    x = decoder_block(x, skip)
  File "C:\Users\Admin\.conda\envs\liftout\lib\site-packages\torch\nn\modules\module.py", line 1130, in _call_impl
    return forward_call(*input, **kwargs)
  File "C:\Users\Admin\.conda\envs\liftout\lib\site-packages\segmentation_models_pytorch\unet\decoder.py", line 38, in forward
    x = torch.cat([x, skip], dim=1)
RuntimeError: CUDA out of memory. Tried to allocate 36.00 MiB (GPU 0; 2.00 GiB total capacity; 232.90 MiB already allocated; 0 bytes free; 258.00 MiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to 
avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

[PROPOSAL] Specification for defining which subsystems, components and functionality is implemented in the microscope hardware

Each microscope model should define which subsystems (e.g. ion beam, manipualtor) is installed and available, and what functionality is available (e.g. manipulator rotation, plasma gas). Once defined this info can be used to determine how to execute functions, and prevent the API from trying to access undefined resources.

system.yaml:

system:
    ip_address: "localhost"
    manufacturer: "Thermo"
    model: "Helios"

Helios.yaml:

ion: 
    enabled: True
    plasma: True
electron: 
    enabled: True
manipulator: 
    enabled: True
....

[BUG] Reduced Area not unset correctly

Manufacturer: Thermo Fisher

When imaging with Image_settings.reduced_area = None, this does not set the imaging to full area imaging. This means that if reduced area has been selected in the UI, this setting will not be applied correctly.

Should explicitly set the condition as the system will use whatever is chosen in the UI if not explicitly set.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.