Microscopy Image Browser  1.233
All Classes Files Functions Variables Pages
IceImarisConnector Class Reference
Inheritance diagram for IceImarisConnector:
Collaboration diagram for IceImarisConnector:

Public Member Functions

 IceImarisConnector (imarisApplication, indexingStart)
 Constructor. More...
 
function  delete ()
 Destructor. More...
 
function
castObject = 
autocast (obj)
 IceImarisConnector: autocast (public method) More...
 
function
newSpots = 
createAndSetSpots (coords, timeIndices, radii, name, color, container)
 Imaris Connector: createAndSetSpots (public method) More...
 
function
success = 
closeImaris (varargin)
 IceImarisConnector: closeImaris (public method) More...
 
function  display ()
 IceImarisConnector: display (public method) More...
 
function
children = 
getAllSurpassChildren (recursive, filter)
 IceImarisConnector: getAllSurpassChildren (public method) More...
 
function stack = getDataSubVolume (x0, y0, z0, channel, timepoint, dX, dY, dZ, iDataSet)
 IceImarisConnector: getDataSubVolume (public method) More...
 
function stack = getDataSubVolumeRM (x0, y0, z0, channel, timepoint, dX, dY, dZ, iDataSet)
 Imaris Connector: getDataSubVolumeRM (public method) More...
 
function stack = getDataVolume (channel, timepoint, iDataset)
 IceImarisConnector: getDataVolume (public method) More...
 
function stack = getDataVolumeRM (channel, timepoint, iDataset)
 Imaris Connector: getDataVolumeRM (public method) More...
 
function [ minX ,
maxX ,
minY ,
maxY ,
minZ ,
maxZ ] = 
getExtends ()
 IceImarisConnector: getExtends (public method) More...
 
function
version
getImarisVersionAsInteger ()
 IceImarisConnector: getImarisVersionAsInteger (public method) More...
 
function type = getMatlabDatatype ()
 IceImarisConnector: getMatlabDatatype (public method) More...
 
function [ sizeX ,
sizeY ,
sizeZ ,
sizeC ,
sizeT ] = 
getSizes ()
 IceImarisConnector: getSizes (public method) More...
 
function [
voxelSizesX ,
voxelSizesY ,
voxelSizesZ ] = 
getVoxelSizes ()
 IceImarisConnector: getVoxelSizes (public method) More...
 
function [ R ,
isI ] = 
getSurpassCameraRotationMatrix ()
 IceImarisConnector: getSurpassCameraRotationMatrix (public method) More...
 
function n = indexingStart ()
 IceImarisConnector: indexingStart (public method) More...
 
function  info ()
 IceImarisConnector: info (public method) More...
 
function alive = isAlive ()
 IceImarisConnector: isAlive (public method) More...
 
function
varargout = 
mapPositionsUnitsToVoxels (varargin)
 IceImarisConnector: mapPositionsUnitsToVoxels (public method) More...
 
function
varargout = 
mapPositionsVoxelsToUnits (varargin)
 IceImarisConnector: mapPositionsVoxelsToUnits (public method) More...
 
function  setDataVolume (stack, channel, timepoint)
 IceImarisConnector: setDataVolume (public method) More...
 
function  mib_setDataSubVolume (stack, x0, y0, z0, channel, timepoint, dx, dy, dz)
 IceImarisConnector: mib_setDataSubVolume (public method) More...
 
function  mib_setDataSubVolumeRM (stack, x0, y0, z0, channel, timepoint, dx, dy, dz)
 Imaris Connector: mib_setDataSubVolumeRM (public method) More...
 
function
success = 
startImaris (userControl)
 IceImarisConnector: startImaris (public method) More...
 

Static Public Member Functions

static function b = isSupportedPlatform ()
 IceImarisConnector: version (public static method) More...
 
static function
rgbaVector = 
mapRgbaScalarToVector (rgbaScalar)
 IceImarisConnector: mapRgbaScalarToVector (static public method) More...
 
static function
rgbaScalar = 
mapRgbaVectorToScalar (rgbaVector)
 IceImarisConnector: mapRgbaVectorToScalar (static public method) More...
 
static function v = version ()
 IceImarisConnector: version (public static method) More...
 

Public Attributes

 mImarisApplication = "[]"
 

Constructor & Destructor Documentation

IceImarisConnector.IceImarisConnector (   imarisApplication,
  indexingStart 
)

Constructor.

References indexingStart().

Referenced by ib_getImarisDataset(), ib_renderModelImaris(), and ib_setImarisDataset().

Here is the call graph for this function:

Here is the caller graph for this function:

Member Function Documentation

function derivedType = IceImarisConnector.autocast (   IDataItem)

IceImarisConnector: autocast (public method)

DESCRIPTION

This method casts IDataItems to their derived types

SYNOPSIS

derivedType = conn.autocast(IDataItem)

INPUT

IDataItem: an Imaris.IDataItem object

OUTPUT

derivedType : one of the Imaris.IDataItem subclasses
  • Imaris.IClippingPlane
  • Imaris.IDataContainer
  • Imaris.IFilaments
  • Imaris.IFrame
  • Imaris.IDataSet
  • Imaris.IICells
  • Imaris.ILightSource
  • Imaris.IMeasurementPoints
  • Imaris.ISpots
  • Imaris.ISurfaces
  • Imaris.IVolume
  • Imaris.ISurpassCamera
  • Imaris.IImageProcessing
  • Imaris.IFactory

References mImarisApplication.

Referenced by getAllSurpassChildren().

Here is the caller graph for this function:

function success = IceImarisConnector.closeImaris (   quiet)

IceImarisConnector: closeImaris (public method)

DESCRIPTION

This method close the Imaris instance associated to the IceImarisConnector object and resets the mImarisApplication property.

SYNOPSIS

(1) success = conn.closeImaris() (2) success = conn.closeImaris(quiet)

INPUT

quiet : (Optional) If 1, Imaris won't pop-up a save dialog and close silently. Default: 0

OUTPUT

success : 1 if closing Imaris was successful, 0 otherwise

References isAlive(), and mImarisApplication.

Referenced by delete(), and startImaris().

Here is the call graph for this function:

Here is the caller graph for this function:

function newSpots = IceImarisConnector.createAndSetSpots (   coords,
  timeIndices,
  radii,
  name,
  color,
  container 
)

Imaris Connector: createAndSetSpots (public method)

DESCRIPTION

This method creates Spots and adds them to the Surpass Scene.

SYNOPSIS

(1) newSpots = createAndSetSpots(coords, timeIndices, radii, ... name, color) (2) newSpots = createAndSetSpots(coords, timeIndices, radii, ... name, color, container)

INPUT

coords : (nx3) [x y z]n coordinate matrix in dataset units timeIndices : (nx1) vector of spots time indices radii : (nx1) vector of spots radii name : name of the Spots object color : (1x4), (0..1) vector of [R G B A] values container : (optional) if not set, the Spots object is added at the root of the Surpass Scene. Please note that it is the user's responsibility to attach the container to the surpass scene!

OUTPUT

newSpots : the generated Spots object.

Required fields of container:

References isAlive(), mapRgbaVectorToScalar(), and mImarisApplication.

Here is the call graph for this function:

function IceImarisConnector.delete ( )

Destructor.

References closeImaris().

Here is the call graph for this function:

function IceImarisConnector.display ( )

IceImarisConnector: display (public method)

DESCRIPTION

This method overloads standard display functionality.

SYNOPSIS

conn.display()

INPUT

None

OUTPUT

None

References mImarisApplication.

Referenced by ib_getImarisDataset().

Here is the caller graph for this function:

function children = IceImarisConnector.getAllSurpassChildren (   recursive,
  filter 
)

IceImarisConnector: getAllSurpassChildren (public method)

DESCRIPTION

This method returns all children of the surpass scene recursively. Folders (i.e. IDataContainer objects) may be scanned (recursively) but are not returned. Optionally, the returned objects may be filtered by type.

SYNOPSIS

children = conn.getAllSurpassChildren(recursive, filter)

INPUT

recursive: {0 | 1} If 1, folders will be scanned recursively; if 0, only objects at root level will be inspected.

filter : (optional) Filters the children by type. Only the surpass children of the specified type are

returned; filter is one of
                       <tt>Cells</tt>
                       <tt>ClippingPlane</tt>
                       <tt>Dataset</tt>
                       <tt>Filaments</tt>
                       <tt>Frame</tt>
                       <tt>LightSource</tt>
                       <tt>MeasurementPoints</tt>
                       <tt>Spots</tt>
                       <tt>Surfaces</tt>
                       <tt>SurpassCamera</tt>
                       <tt>Volume</tt>

OUTPUT

children : cell array of objects

References autocast(), and mImarisApplication.

Here is the call graph for this function:

function stack = IceImarisConnector.getDataSubVolume (   x0,
  y0,
  z0,
  channel,
  timepoint,
  dX,
  dY,
  dZ,
  iDataSet 
)

IceImarisConnector: getDataSubVolume (public method)

DESCRIPTION

This method returns a data subvolume from Imaris.

SYNOPSIS

(1) stack = conn.getDataSubVolume(x0, y0, z0, channel, timepoint, ... dX, dY, dZ) (2) stack = conn.getDataSubVolume(x0, y0, z0, channel, timepoint, ... dX, dY, dZ, iDataSet)

INPUT

x0, y0, z0: coordinates (0/1-based depending on indexing start) of the top-left vertex of the subvolume to be returned. channel : channel number (0/1-based depending on indexing start) timepoint : timepoint number (0/1-based depending on indexing start) dX, dY, dZ: extension of the subvolume to be returned dataset : (optional) get the data volume from the passed IDataset object instead of current one; if omitted, current dataset (i.e. this.mImarisApplication.GetDataSet()) will be used. This is useful for instance when masking channels.

Coordinates and extension are in voxels and not in units!

The following holds
if conn.indexingStart == 0
   subA = conn.getDataSubVolume(x0, y0, z0, 0, 0, dX, dY, dZ);
   A = conn.getDataVolume(0, 0);
   A(x0 + 1 : x0 + dX, y0 + 1 : y0 + dY, z0 + 1 : z0 + dZ) === subA 
if conn.indexingStart == 1
   subA = conn.getDataSubVolume(x0, y0, z0, 1, 1, dX, dY, dZ);
   A = conn.getDataVolume(1, 1);
   A(x0 : x0 + dX - 1, y0 : y0 + dY - 1, z0 : z0 + dZ - 1) === subA 

OUTPUT

stack : data subvolume (3D matrix)

REMARK

This function gets the volume as a 1D array and reshapes it in place. It also performs a type cast to take care of the signed/unsigned int mismatch when transferring data over Ice. The speed-up compared to calling the ImarisXT GetDataVolumeBytes() or GetDataVolumeWords() methods is of the order of 20x.

Required fields of iDataSet:

References isAlive(), and mImarisApplication.

Referenced by getDataSubVolumeRM().

Here is the call graph for this function:

Here is the caller graph for this function:

function stack = IceImarisConnector.getDataSubVolumeRM (   x0,
  y0,
  z0,
  channel,
  timepoint,
  dX,
  dY,
  dZ,
  iDataSet 
)

Imaris Connector: getDataSubVolumeRM (public method)

DESCRIPTION

This method returns the data subvolume from Imaris in row-major order. Practically, this means that each plane of a 3D stack is transposed and will display in a plot in MATLAB with the same geometry and orientation as in Imaris.

SYNOPSIS

(1) stack = conn.getDataSubVolumeRM(x0, y0, z0, channel, timepoint, ... dX, dY, dZ) (2) stack = conn.getDataSubVolumeRM(x0, y0, z0, channel, timepoint, ... dX, dY, dZ, iDataSet)

Please notice that the coordinates (x0, y0, z0) and the extension (dX, dY, dZ) point to the same subvolume in the Imaris dataset. What changes is the order by which it is returned to MATLAB.

INPUT

x0, y0, z0: coordinates (0/1-based depending on indexing start) of the top-left vertex of the subvolume to be returned channel : channel number (0/1-based depending on indexing start) timepoint : timepoint number (0/1-based depending on indexing start) dX, dY, dZ: extension of the subvolume to be returned dataset : (optional) get the data volume from the passed IDataset object instead of current one; if omitted, current dataset (i.e. this.mImarisApplication.GetDataSet()) will be used. This is useful for instance when masking channels.

Coordinates and extension are in voxels and not in units!

The following holds
if conn.indexingStart == 0
   subA = conn.getDataSubVolumeRM(x0, y0, z0, 0, 0, dX, dY, dZ);
   A = conn.getDataVolumeRM(0, 0);
   A(y0 + 1 : y0 + dY, x0 + 1 : x0 + dX, z0 + 1 : z0 + dZ) === subA 

   Please notice the x - y dimension swap.
if conn.indexingStart == 1
   subA = conn.getDataSubVolumeRM(x0, y0, z0, 1, 1, dX, dY, dZ);
   A = conn.getDataVolumeRM(1, 1);
   A(y0 : y0 + dY - 1, x0 : x0 + dX - 1, z0 : z0 + dZ - 1) === subA 

   Please notice the x - y dimension swap.

OUTPUT

stack : data subvolume (3D matrix)

References getDataSubVolume(), and isAlive().

Here is the call graph for this function:

function stack = IceImarisConnector.getDataVolume (   channel,
  timepoint,
  iDataSet 
)

IceImarisConnector: getDataVolume (public method)

DESCRIPTION

This method returns the data volume from Imaris.

SYNOPSIS

(1) stack = conn.getDataVolume(channel, timepoint) (2) stack = conn.getDataVolume(channel, timepoint, iDataSet)

INPUT

channel : channel number (0/1-based depending on indexing start) timepoint: timepoint number (0/1-based depending on indexing start) iDataSet : (optional) get the data volume from the passed IDataset object instead of current one; if omitted, current dataset (i.e. this.mImarisApplication.GetDataSet()) will be used. This is useful for instance when masking channels.

OUTPUT

stack : data volume (3D matrix)

REMARK

This function gets the volume as a 1D array and reshapes it in place. It also performs a type cast to take care of the signed/unsigned int mismatch when transferring data over Ice. The speed-up compared to calling the ImarisXT GetDataVolumeBytes() or GetDataVolumeWords() methods is of the order of 20x.

Required fields of iDataSet:

References isAlive(), and mImarisApplication.

Referenced by getDataVolumeRM().

Here is the call graph for this function:

Here is the caller graph for this function:

function stack = IceImarisConnector.getDataVolumeRM (   channel,
  timepoint,
  iDataset 
)

Imaris Connector: getDataVolumeRM (public method)

DESCRIPTION

This method returns the data volume from Imaris in row-major order. Practically, this means that each plane of a 3D stack is transposed and will display in a plot in MATLAB with the same geometry and orientation as in Imaris.

SYNOPSIS

(1) stack = conn.getDataVolumeRM(channel, timepoint) (2) stack = conn.getDataVolumeRM(channel, timepoint, iDataset)

INPUT

channel : channel number (0/1-based depending on indexing start) timepoint: timepoint number (0/1-based depending on indexing start) iDataset : (optional) get the data volume from the passed IDataset object instead of current one; if omitted, current dataset (i.e. this.mImarisApplication.GetDataSet()) will be used. This is useful for instance when masking channels.

OUTPUT

stack : data volume (3D matrix)

References getDataVolume(), and isAlive().

Here is the call graph for this function:

function varargout = IceImarisConnector.getExtends ( )

IceImarisConnector: getExtends (public method)

DESCRIPTION

This method returns the dataset extends.

SYNOPSIS

(1) extends = conn.getExtends() (2) [minX, maxX, minY, maxY, minZ, maxZ] = conn.getExtends()

INPUT

None

OUTPUT

(1) extends : vector of extends, [minX maxX minY maxY minZ maxZ]

(2) minX : minimum dataset extend in X direction maxX : maximum dataset extend in X direction minY : minimum dataset extend in Y direction maxY : maximum dataset extend in Y direction minZ : minimum dataset extend in Z direction maxZ : maximum dataset extend in Z direction

References isAlive(), and mImarisApplication.

Here is the call graph for this function:

function version = IceImarisConnector.getImarisVersionAsInteger ( )

IceImarisConnector: getImarisVersionAsInteger (public method)

DESCRIPTION

This static method returns the version number of Imaris as integer:

v = 100000 * Major + 10000 * Minor + 100 * Patch

SYNOPSIS

version = IceImarisConnector.getVersionAsInteger()

INPUT

None

OUTPUT

version : Imaris version as integer

References isAlive(), mImarisApplication, and version().

Here is the call graph for this function:

function type = IceImarisConnector.getMatlabDatatype ( )

IceImarisConnector: getMatlabDatatype (public method)

DESCRIPTION

This method returns the datatype of the dataset as a MATLAB type (e.g. one of uint8, uint16, single).

SYNOPSIS

type = conn.getMatlabDatatype()

INPUT

None

OUTPUT

type : datatype of the dataset as a MATLAB type: one of one of uint8, uint16, single, or ' if the type is unknown in Imaris.

References isAlive(), and mImarisApplication.

Here is the call graph for this function:

function varargout = IceImarisConnector.getSizes ( )

IceImarisConnector: getSizes (public method)

DESCRIPTION

This method returns the dataset sizes.

SYNOPSIS

(1) sizes = conn.getSizes() (2) [sizeX, sizeY, sizeZ, sizeC, sizeT] = conn.getSizes()

INPUT

None

OUTPUT

(1) sizes : vector of sizes, [sizeX sizeY sizeZ sizeC sizeT]

(2) sizeX : dataset size X sizeY : dataset size Y sizeZ : number of planes sizeC : number of channels sizeT : number of time points

References isAlive(), and mImarisApplication.

Referenced by mib_setDataSubVolume(), and setDataVolume().

Here is the call graph for this function:

Here is the caller graph for this function:

function [ R , isI ] = IceImarisConnector.getSurpassCameraRotationMatrix ( )

IceImarisConnector: getSurpassCameraRotationMatrix (public method)

DESCRIPTION

This method calculates the rotation matrix that corresponds to current view in the Surpass Scene (from the Camera Quaternion) for the axes with "Origin Bottom Left".

TO DO

Verify the correctness for the other axes orientations.

SYNOPSIS

[R, isI] = conn.getSurpassCameraRotationMatrix()

INPUT

None

OUTPUT

R : (4 x 4) rotation matrix isI : true if the rotation matrix is the Identity matrix, i.e. the camera is perpendicular to the dataset

References mImarisApplication.

function varargout = IceImarisConnector.getVoxelSizes ( )

IceImarisConnector: getVoxelSizes (public method)

DESCRIPTION

This method returns the X, Y, and Z voxel sizes of the dataset.

SYNOPSIS

(1) voxelSizes = conn.getVoxelSizes() (2) [voxelSizeX voxelSizeY voxelSizeZ] = conn.getVoxelSizes()

INPUT

None

OUTPUT

(1) voxelSizes : vector of voxel sizes, [voxelSizeX voxelSizeY voxelSizeZ]

(2) voxelSizeX : voxel size in X direction voxelSizeY : voxel size in Y direction voxelSizeZ : voxel size in Z direction

References isAlive(), and mImarisApplication.

Referenced by mapPositionsUnitsToVoxels(), and mapPositionsVoxelsToUnits().

Here is the call graph for this function:

Here is the caller graph for this function:

function n = IceImarisConnector.indexingStart ( )

IceImarisConnector: indexingStart (public method)

DESCRIPTION

This method returns the base for indexing.

SYNOPSIS

n = conn.indexingStart()

INPUT

None

OUTPUT

n : either 0 or 1, depending on whether IceImarisConnector's indexing was initialized as 0- or 1- based.

Referenced by IceImarisConnector().

Here is the caller graph for this function:

function IceImarisConnector.info ( )

IceImarisConnector: info (public method)

DESCRIPTION

This methods displays the full paths to the Imaris and ImarisServer executables and the ImarisLib jar archive.

SYNOPSIS

conn.info()

INPUT

None

OUTPUT

None

REMARK

A summary of the object properties is output to console.

References version().

Here is the call graph for this function:

function alive = IceImarisConnector.isAlive ( )

IceImarisConnector: isAlive (public method)

DESCRIPTION

This method checks whether the (stored) connection to Imaris is still alive.

SYNOPSIS

alive = conn.isAlive()

INPUT

None

OUTPUT

alive : 1 if the connection is still alive, 0 otherwise

References mImarisApplication.

Referenced by closeImaris(), createAndSetSpots(), getDataSubVolume(), getDataSubVolumeRM(), getDataVolume(), getDataVolumeRM(), getExtends(), getImarisVersionAsInteger(), getMatlabDatatype(), getSizes(), getVoxelSizes(), mapPositionsUnitsToVoxels(), mapPositionsVoxelsToUnits(), mib_setDataSubVolume(), mib_setDataSubVolumeRM(), setDataVolume(), and startImaris().

Here is the caller graph for this function:

function b = IceImarisConnector.isSupportedPlatform ( )
static

IceImarisConnector: version (public static method)

DESCRIPTION

This method checks whether IceImarisConnector is running on a supported platform.

SYNOPSIS

b = IceImarisConnector.isSupportedPlatform()

INPUT

None

OUTPUT

b : 1 if IceImarisConnector is running on a supported platform, 0 otherwise

function varargout = IceImarisConnector.mapPositionsUnitsToVoxels (   varargin)

IceImarisConnector: mapPositionsUnitsToVoxels (public method)

DESCRIPTION

This method maps voxel coordinates in dataset units to voxel indices.

SYNOPSIS

(1) pos = conn.mapPositionsUnitsToVoxels(uPos)

(2) pos = ... conn.mapPositionsUnitsToVoxels(uPosX, uPosY, uPosZ)

(3) [posX, posY, posZ] = ... conn.mapPositionsUnitsToVoxels(uPos)

(4) [posX, posY, posZ] = ... conn.mapPositionsUnitsToVoxels(uPosX, uPosY, uPosZ)

INPUT

(1) and (3)

uPos : (N x 3) matrix containing the X, Y, Z coordinates in dataset units

(2) and (4)

uPosX : (M x 1) vector containing the X coordinates in dataset units uPosY : (N x 1) vector containing the Y coordinates in dataset units uPosZ : (O x 1) vector containing the Z coordinates in dataset units

M, N, a O will most likely be the same (and must be the same for synopsis 2).

OUTPUT

(1) and (2)

pos : (N x 3) matrix containing the X, Y, Z voxel indices

(3) and (4)

posX : (M x 1) vector containing the X voxel indices posY : (N x 1) vector containing the Y voxel indices posZ : (O x 1) vector containing the Z voxel indices

M, N, a O will most likely be the same.

References getVoxelSizes(), isAlive(), and mImarisApplication.

Here is the call graph for this function:

function varargout = IceImarisConnector.mapPositionsVoxelsToUnits (   varargin)

IceImarisConnector: mapPositionsVoxelsToUnits (public method)

DESCRIPTION

This method maps voxel indices in dataset units to unit coordinates.

SYNOPSIS

(1) pos = conn.mapPositionsVoxelsToUnits(vPos)

(2) pos = ... conn.mapPositionsVoxelsToUnits(vPosX, vPosY, vPosZ)

(3) [posX, posY, posZ] = ... conn.mapPositionsVoxelsToUnits(vPos)

(4) [posX, posY, posZ] = ... conn.mapPositionsVoxelsToUnits(vPosX, vPosY, vPosZ)

INPUT

(1) and (3)

vPos : (N x 3) matrix containing the X, Y, Z unit coordinates mapped onto a voxel grid

(2) and (4)

vPosX : (M x 1) vector containing the X coordinates mapped onto a voxel grid vPosY : (N x 1) vector containing the Y coordinates mapped onto a voxel grid vPosZ : (O x 1) vector containing the Z coordinates mapped onto a voxel grid

M, N, a O will most likely be the same (and must be the same for synopsis 2).

OUTPUT

(1) and (2)

pos : (N x 3) matrix containing the X, Y, Z coordinates in dataset units

(3) and (4)

posX : (M x 1) vector containing the X coordinates in dataset units posY : (N x 1) vector containing the Y coordinates in dataset units posZ : (O x 1) vector containing the Z coordinates in dataset units

M, N, a O will most likely be the same.

References getVoxelSizes(), isAlive(), and mImarisApplication.

Here is the call graph for this function:

function rgbaVector = IceImarisConnector.mapRgbaScalarToVector (   rgbaScalar)
static

IceImarisConnector: mapRgbaScalarToVector (static public method)

DESCRIPTION

This method maps an uint32 RGBA scalar to an 1-by-4, (0..1) vector

SYNOPSIS

rgbaScalar = mapRgbaVectorToScalar(rgbaScalar)

INPUT

rgbaScalar: int32 scalar number coding for RGBA (for Imaris use)

OUTPUT

rgbaVector: 1-by-4 array with [R G B A] indicating (R)ed, (G)reen, (B)lue, and (A)lpha (=transparency; 0 is opaque)

IMPORTANT REMARK

The scalar returned by ImarisXT is signed int32 (since ImarisLib() is written in Java). This means that if the transparency is not zero (i.e. the value for A in the RGBA scalar is not zero), the returned value WILL BE NEGATIVE (i.e. Imaris pushes an uint32 through ImarisXT and thus Java and this reaches MATLAB as a signed int32)!

The mapRgbaScalarToVector() function will work around this problem by forcing a typecast (and not just a cast!) to int32 passing through a forced cast to int32 (since ImarisXT's .GetColorRGBA() returns a double...).

Please notice that the combined values for R, G, and B will be represented correctly no matter if the RGBA scalar is stored in an int32 or an uint32, therefore the transparency "bug" does not affect the actual colors.

See Also

mapRgbaScalarToVector

function rgbaScalar = IceImarisConnector.mapRgbaVectorToScalar (   rgbaVector)
static

IceImarisConnector: mapRgbaVectorToScalar (static public method)

DESCRIPTION

This method maps an 1-by-4, (0..1) RGBA vector to an uint32 scalar

SYNOPSIS

rgbaScalar = mapRgbaVectorToScalar(rgbaVector)

INPUT

rgbaVector: 1-by-4 array with [R G B A] indicating (R)ed, (G)reen, (B)lue, and (A)lpha (=transparency; 0 is opaque). All values are between 0 and 1.

OUTPUT

rgbaScalar: uint32 scalar number coding for RGBA (for Imaris use)

IMPORTANT REMARK

The way one calculates the RGBA value from an [R G B A] vector (with

the values of R, G, B, and A all between 0 and 1) is simply
 uint32([R G B A] * [1 256 256^2 256^3])

(where * is the matrix product). This gives a number between 0 and intmax(uint32) = 4294967295.

When we pass this number to Imaris through ImarisXT, the Java layer in Ice will mess with this number, since there are no unsigned values in Java and our original uint32 will end up negative if its value is larger than 0.5 * intmax(uint32): the first bit becomes the sign bit.

The bit that changes is in the transparency (A) byte. Which means, if we change the value for the tranparency, we will end up with an incorrect result in Imaris.

To work around this problem, we must typecast (and not just cast!) the calculated uint32 value to int32 before it is ready to be sent to Imaris (i.e. to be passed to the SetColorRGBA() method of the IDataItem object.

See Also

mapRgbaVectorToScalar

Referenced by createAndSetSpots().

Here is the caller graph for this function:

function IceImarisConnector.mib_setDataSubVolume (   stack,
  x0,
  y0,
  z0,
  channel,
  timepoint,
  dx,
  dy,
  dz 
)

IceImarisConnector: mib_setDataSubVolume (public method)

DESCRIPTION

This method sets the data subvolume to Imaris.

SYNOPSIS

conn.mib_setDataSubVolume(stack, x0, y0, z0, channel, timepoint, dx, dy, dz)

INPUT

stack : 3D array of type uint8, uint16 or single x0, y0, z0 : coordinates (0/1-based depending on indexing start) of the top-left vertex of the subvolume to be sent. channel : channel number (0/1-based depending on indexing start) timepoint : timepoint number (0/1-based depending on indexing start) dX, dY, dZ : extension of the subvolume to be sent

OUTPUT

none

REMARK

The dataset should be present in Imaris. Use this command before using this function, iDataSet = conn.createDataset(class(stack), sz(1), sz(2), sz(3), 1, 1);

References getSizes(), isAlive(), and mImarisApplication.

Referenced by mib_setDataSubVolumeRM().

Here is the call graph for this function:

Here is the caller graph for this function:

function IceImarisConnector.mib_setDataSubVolumeRM (   stack,
  x0,
  y0,
  z0,
  channel,
  timepoint,
  dx,
  dy,
  dz 
)

Imaris Connector: mib_setDataSubVolumeRM (public method)

DESCRIPTION

This method sends the data subvolume to Imaris in row-major order. Practically, this means that each plane of a 3D stack from MATLAB is transposed before it is pushed back into Imaris to maintain the same geometry and orientation.

SYNOPSIS

conn.mib_setDataSubVolumeRM(stack, x0, y0, z0, channel, timepoint, dx, dy, dz)

INPUT

stack : 3D array of type uint8, uint16 or single x0, y0, z0 : coordinates (0/1-based depending on indexing start) of the top-left vertex of the subvolume to be sent. channel : channel number (0/1-based depending on indexing start) timepoint : timepoint number (0/1-based depending on indexing start) dX, dY, dZ : extension of the subvolume to be sent

OUTPUT

None

REMARK

The dataset should be present in Imaris. Use this command before using this function, iDataSet = conn.createDataset(class(stack), sz(1), sz(2), sz(3), 1, 1);

References isAlive(), and mib_setDataSubVolume().

Here is the call graph for this function:

function IceImarisConnector.setDataVolume (   stack,
  channel,
  timepoint 
)

IceImarisConnector: setDataVolume (public method)

DESCRIPTION

This method sets the data volume to Imaris.

SYNOPSIS

conn.setDataVolume(stack, channel, timepoint)

INPUT

stack : 3D array of type uint8, uint16 or single channel : channel number (0/1-based depending on indexing start) timepoint: timepoint number (0/1-based depending on indexing start)

OUTPUT

none

REMARK

If a dataset exists, the X, Y, and Z dimensions must match the ones of the stack being copied in. If no dataset exists, one will be created to fit it with default other values.

References getSizes(), isAlive(), and mImarisApplication.

Here is the call graph for this function:

function success = IceImarisConnector.startImaris (   userControl)

IceImarisConnector: startImaris (public method)

DESCRIPTION

This method starts an Imaris instance and stores the ImarisApplication ICE object.

SYNOPSIS

success = conn.startImaris(userControl)

INPUT

userControl : (optional, default = 0) The optional parameter userControl sets the fate of Imaris when the client is closed: if userControl is true (1), Imaris terminates when the IceImarisConnector object (conn) is deleted. If is it set to false (0), Imaris stays open after the IceImarisConnector object (conn) is deleted.

OUTPUT

success : 1 if starting Imaris was successful, 0 otherwise

References closeImaris(), isAlive(), and mImarisApplication.

Here is the call graph for this function:

function v = IceImarisConnector.version ( )
static

IceImarisConnector: version (public static method)

DESCRIPTION

This method returns the IceImarisConnector version number.

SYNOPSIS

v = IceImarisConnector.version()

INPUT

None

OUTPUT

v : IceImarisConnector version

Referenced by getImarisVersionAsInteger(), info(), and bwdistsc1>VersionNewerThan().

Here is the caller graph for this function:

Member Data Documentation


The documentation for this class was generated from the following files: