Components Overview ======================= Here you'll find documentation for each of the individual components and an overview on their usage. Map Components --------------- These components control how a slide and associated annotations are viewed. Slide Map ^^^^^^^^^ This component is used for visualization of high resolution images and their associated annotations. .. raw:: html .. autoclass:: fusion_tools.components.maps::SlideMap :members: MultiFrame Slide Map ^^^^^^^^^^^^^^^^^^^^ This component is used for a subset of images containing multiple "frames" (using large-image convention) or channels. Different from the default SlideMap component, the MultiFrameSlideMap component allows users to view different channels separately from the same LayersControl component in the upper right-hand side of the map. .. raw:: html .. autoclass:: fusion_tools.components.maps::MultiFrameSlideMap :members: Overlay Options ^^^^^^^^^^^^^^^ This component is used for controlling the color that is applied to annotation overlays as well as controlling which structures are filtered for visualization purposes. .. raw:: html .. autoclass:: fusion_tools.components.tools::OverlayOptions :members: Channel Mixer ^^^^^^^^^^^^^ This component is used to control artificial color that is applied to grayscale image channels. .. raw:: html .. autoclass:: fusion_tools.components.maps::ChannelMixer :members: Slide Image Overlay ^^^^^^^^^^^^^^^^^^^ This component allows for overlaying images on another image and moving it around. .. raw:: html .. autoclass:: fusion_tools.components.maps::SlideImageOverlay :members: Plotting Components ------------------- PropertyViewer ^^^^^^^^^^^^^^ This plotting component allows for visualization of different structure properties within the current viewport of the current slide. .. raw:: html .. autoclass:: fusion_tools.components.tools::PropertyViewer :members: PropertyPlotter ^^^^^^^^^^^^^^^ This plotting component allows for visualization of all structure properties in the current slide. .. raw:: html .. autoclass:: fusion_tools.components.tools::PropertyPlotter :members: GlobalPropertyPlotter ^^^^^^^^^^^^^^^^^^^^^ This plotting component allows for visualization of structure properties from multiple different slides in the "current" portion of the visualization session. Human Reference Atlas Components -------------------------------- This component allows for selection of different organs and viewing their Anatomical Structures, Cell Types, and Biomarkers (ASCT+B) tables as well as the FTU Explorer embedded component. .. raw:: html .. autoclass:: fusion_tools.components.tools::HRAViewer :members: Annotation Components --------------------- FeatureAnnotation ^^^^^^^^^^^^^^^^^ This component lets users annotate individual structures including either text/numeric labels or hand-drawn annotations. .. raw:: html .. autoclass:: fusion_tools.components.segmentation::FeatureAnnotation :members: BulkLabels ^^^^^^^^^^ This component lets users apply the same label to multiple structures in a slide based on a combination of spatial and property queries. .. raw:: html .. autoclass:: fusion_tools.components.segmentation::BulkLabels :members: SlideAnnotation ^^^^^^^^^^^^^^^ This component lets users label individual slides based on qualitative criteria as well as provide GeoJSON-formatted annotations of regions of slides that contribute to that label. Download Components ------------------- DataExtractor ^^^^^^^^^^^^^ This component enables extracting different types of data from the current slide as well as session-related information useful for revisiting prior analyses. .. raw:: html .. autoclass:: fusion_tools.components.tools::DataExtractor :members: Designing Custom Components --------------------------- Custom components can be integrated into *fusion-tools* layouts by defining *DashBlueprint* objects inside a class which inherits from *Tool* which can be imported from *fusion_tools.components.base*. CustomFunction ^^^^^^^^^^^^^^ This component enables simplified deployment of some Python function which incorporates data from a `SlideMap`. For example, if you had a function that took as input an image and a mask of a structure on a slide, you would first specify a `FUSIONFunction` like so: .. code-block:: python from fusion_tools.components import FUSIONFunction def mask_image(image,mask): # Function masks out regions of the image outside of the mask masked_image = np.multiply(image,np.repeats(mask[...,None],axis=-1,repeats=3)).astype(np.uint8) return masked_image example_function = FUSIONFunction( title = 'Example Function', description = 'This is an example of a function deployed through FUSION.', urls = [], function = lambda image, mask: mask_image(image,mask), function_type = 'structure', input_spec = [ { 'name': 'image', 'description': 'Image of structure in SlideMap', 'type': 'image' }, { 'name': 'mask', 'description': 'Mask of structure in SlideMap', 'type': 'mask' } ], output_spec = [ { 'name': 'Masked Image', 'type': 'image', 'description': 'This is what the masked image looks like!' } ] ) Available function types are structure, layer, and ROI. For each function type, "input_spec" items can have types: - Automatically populated: - image, mask, annotation - Interactive: - string, boolean, options, numeric, region Now add this function to a layout like so: .. code-block:: python from fusion_tools.visualization import Visualization from fusion_tools.components import SlideMap, CustomFunction vis = Visualization( components = [ [ SlideMap(), CustomFunction( title = 'Example Functions', description = 'Trying out a custom function', custom_function = [ example_function ] ) ] ] ) vis.start() Anything added in the "input_spec" as an image, mask, or annotation is automatically populated with the image, mask, or annotation associated with a given structure. Other input spec types create interactive components to pass a specific type of input to the function. Outputs of the function are then rendered in a separate component and "type" values can include image, numeric, string, or function. "Function"-type outputs should be lambda functions that take two inputs, output (the all of the outputs from the function) and output_index which is only used if generating interactive components. If outputs are generated which you want to be interactive, add the callbacks to the "output_callbacks" argument of `FUSIONFunction` like so: .. code-block:: python output_callbacks = [ { 'inputs': [], 'outputs': [], 'states': [], 'function': lambda inputs,states: some_function(inputs,states) } ] Where "inputs" is a list of `Input()` objects, "outputs" is a list of `Output()` objects, and "states" is a list of `State()` objects as in a typical *Dash* callback.