11import json
2+ import logging
23from pathlib import Path
34from typing import Union
45
56import networkx as nx
67
78from ultrack .config import MainConfig
8- from ultrack .core .export import (
9- to_networkx ,
10- to_trackmate ,
11- to_tracks_layer ,
12- tracks_to_zarr ,
13- )
9+ from ultrack .core .export .geff import to_geff
10+ from ultrack .core .export .networkx import to_networkx
11+ from ultrack .core .export .trackmate import to_trackmate
12+ from ultrack .core .export .tracks_layer import to_tracks_layer
13+ from ultrack .core .export .zarr import tracks_to_zarr
14+
15+ LOG = logging .getLogger (__name__ )
1416
1517
1618def export_tracks_by_extension (
@@ -19,11 +21,12 @@ def export_tracks_by_extension(
1921 """
2022 Export tracks to a file given the file extension.
2123
22- Supported file extensions are .xml, .csv, .zarr, .dot, and .json.
24+ Supported file extensions are .xml, .csv, .zarr, .parquet, . dot, .json, and .geff
2325 - `.xml` exports to a TrackMate compatible XML file.
2426 - `.csv` exports to a CSV file.
2527 - `.parquet` exports to a Parquet file.
2628 - `.zarr` exports the tracks to dense segments in a `zarr` array format.
29+ - `.geff` exports the tracks to a `zarr` format using the geff standard.
2730 - `.dot` exports to a Graphviz DOT file.
2831 - `.json` exports to a networkx JSON file.
2932
@@ -46,13 +49,16 @@ def export_tracks_by_extension(
4649 Export tracks to a `zarr` array.
4750 to_networkx :
4851 Export tracks to a networkx graph.
52+ to_geff :
53+ Export tracks to a geff file.
4954 """
50- if Path (filename ).exists () and not overwrite :
55+ filename = Path (filename )
56+ if filename .exists () and not overwrite :
5157 raise FileExistsError (
5258 f"File { filename } already exists. Set `overwrite=True` to overwrite the file"
5359 )
5460
55- file_ext = Path ( filename ) .suffix
61+ file_ext = filename .suffix
5662 if file_ext .lower () == ".xml" :
5763 to_trackmate (config , filename , overwrite = True )
5864 elif file_ext .lower () == ".csv" :
@@ -61,6 +67,8 @@ def export_tracks_by_extension(
6167 elif file_ext .lower () == ".zarr" :
6268 df , _ = to_tracks_layer (config )
6369 tracks_to_zarr (config , df , filename , overwrite = True )
70+ elif file_ext .lower () == ".geff" :
71+ to_geff (config , filename , overwrite = overwrite )
6472 elif file_ext .lower () == ".parquet" :
6573 df , _ = to_tracks_layer (config )
6674 df .to_parquet (filename )
@@ -75,5 +83,5 @@ def export_tracks_by_extension(
7583 else :
7684 raise ValueError (
7785 f"Unknown file extension: { file_ext } . "
78- "Supported extensions are .xml, .csv, .zarr, .parquet, .dot, and .json."
86+ "Supported extensions are .xml, .csv, .zarr, .geff, . parquet, .dot, and .json."
7987 )
0 commit comments