Icy

We add support to Icy software by providing I/O and a runner class that enables running protocol with Icy headless.

Utilities for inputs/outputs with icy

byotrack.icy.io.save_detections(detections_sequence: Collection[Detections], path: str | PathLike) None

Save a sequence of detections as valid rois for icy

Format example:

<root>
    <roi>
        <classname>plugins.kernel.roi.roi2d.ROI2DArea</classname>
        <id>30</id>
        <name>spot #0</name>
        <selected>false</selected>
        <readOnly>false</readOnly>
        <properties>None</properties>
        <color>-16711936</color>
        <stroke>2</stroke>
        <opacity>0.3</opacity>
        <showName>false</showName>
        <z>0</z>
        <t>0</t>
        <c>-1</c>
        <boundsX>238</boundsX>
        <boundsY>486</boundsY>
        <boundsW>1</boundsW>
        <boundsH>2</boundsH>
        <boolMaskData>78:5e:63:64:4:0:0:5:0:3</boolMaskData>
    </roi>
    ...
</root>

Only needed tags are filled in the current implementation

Parameters:
byotrack.icy.io.load_tracks(path: str | PathLike) Collection[Track]

Load tracks in Icy format

Format example:

<root>
    <trackfile version="1"/>
        <trackgroup description="mhtTracks-Run1">
            <track id="-1743400864">
                <detection classname="plugins.nchenouard.particletracking.DetectionSpotTrack" color="-6553856"
                    t="0" type="1" x="338.14285714285717" y="207.71428571428572" z="0"/>
                <detection classname="plugins.nchenouard.particletracking.DetectionSpotTrack" color="-6553856"
                    t="1" type="1" x="338.5" y="207.5" z="0"/>
                ...
            </track>
            ...
        </trackgroup>
    </trackfile>
</root>

For each point in each track the frame (time) and position (x, y, z) are given. An additional type precise if the detection is real or extrapolated. (Unused in ByoTrack)

Parameters:

path (str | os.PathLike) – Input path

Returns:

Parsed tracks

Return type:

Collection[Track]

byotrack.icy.io.save_tracks(tracks: Collection[Track], path: str | PathLike) None

Save tracks in Icy format

Warning

Icy do not support partial tracks (track with undefined positions). Before calling this function you should first interpolate any missing position (See ForwardBackwardInterpolater)

Format example:

<root>
    <trackfile version="1"/>
    <trackgroup description="mhtTracks-Run1">
        <track id="-1743400864">
            <detection classname="plugins.nchenouard.particletracking.DetectionSpotTrack" color="-6553856"
                t="0" type="1" x="338.14285714285717" y="207.71428571428572" z="0"/>
            <detection classname="plugins.nchenouard.particletracking.DetectionSpotTrack" color="-6553856"
                t="1" type="1" x="338.5" y="207.5" z="0"/>
            ...
        </track>
        ...
    </trackgroup>
</root>

For each point in each track the frame (t) and position (x, y, z) are given. An additional type precise if the detection is real or extrapolated. (Unused in ByoTrack).

Only needed tags are filled in the current implementation. (t, x, y, z)

Parameters:

path (str | os.PathLike) – Input path

Returns:

Parsed tracks

Return type:

Collection[Track]

class byotrack.icy.run.IcyRunner(icy_path: str | PathLike | None = None)

Bases: object

Runs icy in headless with specified protocol and arguments

icy_path

Path to the icy jar (Icy is called with java -jar <icy_jar>) If not given, icy is searched in the PATH

Type:

str | os.PathLike

run(protocol: str | PathLike, **kwargs) int

Runs icy with the given protocol and additional kwargs

Parameters:
  • protocol (str | os.PathLike) – Path to an Icy protocol file

  • **kwargs – Additional arguments given as key=value to the cmd line

Returns:

Return code (Always 0 with Icy… but still let’s keep it)

Return type:

int