From e97dddbef6a4a17decfa5713ef0caf6182300c2f Mon Sep 17 00:00:00 2001 From: bue Date: Thu, 20 Aug 2026 18:12:54 -0400 Subject: [PATCH 01/11] @ pcdl : update workflows. --- .github/workflows/apple.yml | 4 ++-- .github/workflows/linux.yml | 4 ++-- .github/workflows/windows.yml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index b76c849..0d3fd4d 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: #python-version: ["3.14"] - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13", "3.14"] env: MPLBACKEND: Agg # https://github.com/orgs/community/discussions/26434 @@ -34,7 +34,7 @@ jobs: run: | brew install ffmpeg imagemagick python -m pip install --upgrade pip - python -m pip install flake8 pytest anndata bioio bioio-ome-tiff matplotlib networkx neuroglancer numpy pandas requests scikit-image scipy vtk "ome-zarr<0.14.0" + python -m pip install flake8 pytest anndata bioio bioio-ome-tiff geopandas matplotlib networkx neuroglancer numpy pandas requests scikit-image scipy shapely spatialdata vtk python -m pip install /Users/runner/work/physicelldataloader/physicelldataloader -v #if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: lint with flake8 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b860afb..5511c16 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: #python-version: ["3.14"] - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13","3.14"] env: MPLBACKEND: Agg # https://github.com/orgs/community/discussions/26434 @@ -35,7 +35,7 @@ jobs: sudo apt update sudo apt install ffmpeg imagemagick python -m pip install --upgrade pip - python -m pip install flake8 pytest anndata bioio bioio-ome-tiff matplotlib networkx neuroglancer numpy pandas requests scikit-image scipy vtk "ome-zarr<0.14.0" + python -m pip install flake8 pytest anndata bioio bioio-ome-tiff geopandas matplotlib networkx neuroglancer numpy pandas requests scikit-image scipy shapely spatialdata vtk python -m pip install /home/runner/work/physicelldataloader/physicelldataloader -v #if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: lint with flake8 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 9345835..8cdff3f 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -18,7 +18,7 @@ jobs: fail-fast: false matrix: #python-version: ["3.14"] - python-version: ["3.11", "3.12", "3.13"] + python-version: ["3.11", "3.12", "3.13", "3.14"] env: MPLBACKEND: Agg # https://github.com/orgs/community/discussions/26434 @@ -34,7 +34,7 @@ jobs: run: | choco install ffmpeg imagemagick python -m pip install --upgrade pip - python -m pip install flake8 pytest anndata bioio bioio-ome-tiff matplotlib networkx neuroglancer numpy pandas requests scikit-image scipy vtk "ome-zarr<0.14.0" + python -m pip install flake8 pytest anndata bioio bioio-ome-tiff geopandas matplotlib networkx neuroglancer numpy pandas requests scikit-image scipy shapely spatialdata vtk python -m pip install D:\a\physicelldataloader\physicelldataloader -v #echo 'set PYTHONPATH=D:\a\physicelldataloader\physicelldataloader' >> $GITHUB_ENV #if [ -f requirements.txt ]; then pip install -r requirements.txt; fi From ea4a6dd526f24266637b08c741e62ad0ebe69dbd Mon Sep 17 00:00:00 2001 From: bue Date: Thu, 20 Aug 2026 19:04:20 -0400 Subject: [PATCH 02/11] @ timestep : detect pandas3 str dtype. --- pcdl/timestep.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pcdl/timestep.py b/pcdl/timestep.py index b014d01..1e01018 100644 --- a/pcdl/timestep.py +++ b/pcdl/timestep.py @@ -481,7 +481,7 @@ def _anndextract(df_cell, scale='maxabs', graph_attached={}, graph_neighbor={}, des_type['int'].add(se_cell.name) elif str(se_cell.dtype).startswith('bool'): des_type['bool'].add(se_cell.name) - elif str(se_cell.dtype).startswith('object'): + elif str(se_cell.dtype).startswith('object') or str(se_cell.dtype).startswith('str'): des_type['str'].add(se_cell.name) else: sys.exit(f'Error @ TimeStep._anndextract : column {se_cell.name} detected with unknown dtype {str(se_cell.dtype)}.') @@ -2815,7 +2815,7 @@ def get_muspan(self, z_slice=None, values=1, drop=set(), keep=set()): des_type['int'].add(se_zcell.name) elif str(se_zcell.dtype).startswith('bool'): des_type['bool'].add(se_zcell.name) - elif str(se_zcell.dtype).startswith('object'): + elif str(se_zcell.dtype).startswith('object') in str(se_zcell.dtype).startswith('str'): des_type['str'].add(se_zcell.name) else: sys.exit(f'Error @ TimeStep.get_muspa : column {se_zcell.name} detected with unknown dtype {str(se_zcell.dtype)}.') From 91dfda2668f8fd4a6d2035c7b0cb85a38b5f72b3 Mon Sep 17 00:00:00 2001 From: bue Date: Thu, 20 Aug 2026 22:28:08 -0400 Subject: [PATCH 03/11] @ pcdl : compatibility pandas v3.0.0. --- README.md | 3 ++ pcdl/timestep.py | 2 +- pyproject.toml | 1 - test/test_timeseries_2d.py | 20 +++++------ test/test_timeseries_3d.py | 20 +++++------ test/test_timestep_2d.py | 68 +++++++++++++++++++------------------- test/test_timestep_3d.py | 50 ++++++++++++++-------------- 7 files changed, 83 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 96f5afd..1c12521 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,9 @@ Developers, please make pull requests to the https://github.com/elmbeech/physice ## Release Notes: ++ version 4.1.7 (2026-08-21): elmbeech/physicelldataloader + + compatible with pandas v3.0.0. + + version 4.1.6 (2026-08-20): elmbeech/physicelldataloader + pcdl installs now by default lightweight with only the core dependencies; users are prompted to install optional libraries if necessary. special thanks to Heber Rocha! diff --git a/pcdl/timestep.py b/pcdl/timestep.py index 1e01018..eb93808 100644 --- a/pcdl/timestep.py +++ b/pcdl/timestep.py @@ -1731,7 +1731,7 @@ def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slic df_cell.loc[:,'s'] = ((6 * df_cell.total_volume) / np.pi)**(2/3) * s # diamter of a sphere times s # handle z_axis categorical cases - if (str(df_cell.loc[:,focus].dtype) in {'bool', 'object'}): + if (str(df_cell.loc[:,focus].dtype) in {'bool', 'str', 'object'}): vmin = None vmax = None if (z_axis is None): diff --git a/pyproject.toml b/pyproject.toml index e7625d2..3e25f5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -95,7 +95,6 @@ full = [ "scikit-image>=0.24.0", "shapely>=2.0.1", # spatialdata 0.7.3 compatible "spatialdata>=0.7.3", - #"ome-zarr<0.14.0", # bue 20260405: bugfix for spatialdata 0.7.2 ] diff --git a/test/test_timeseries_2d.py b/test/test_timeseries_2d.py index c32a90f..9d8a487 100644 --- a/test/test_timeseries_2d.py +++ b/test/test_timeseries_2d.py @@ -200,7 +200,7 @@ def test_mcdsts_get_conc_df(self, mcdsts=mcdsts): ldf_conc = mcdsts.get_conc_df(values=2, drop=set(), keep=set(), collapse=False) assert(str(type(mcdsts)) == "") and \ (str(type(ldf_conc)) == "") and \ - (str(type(ldf_conc[0])) == "") and \ + (str(type(ldf_conc[0])) == "") and \ (ldf_conc[0].shape == (121, 9)) and \ (ldf_conc[-1].shape == (121, 11)) and \ (len(ldf_conc) == 25) @@ -208,7 +208,7 @@ def test_mcdsts_get_conc_df(self, mcdsts=mcdsts): def test_mcdsts_get_conc_df_collapse(self, mcdsts=mcdsts): df_conc = mcdsts.get_conc_df(values=2, drop=set(), keep=set(), collapse=True) assert(str(type(mcdsts)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (3025, 11)) def test_mcdsts_get_conc_attribute(self, mcdsts=mcdsts): @@ -317,7 +317,7 @@ def test_mcdsts_get_cell_df(self, mcdsts=mcdsts): ldf_cell = mcdsts.get_cell_df(values=2, drop=set(), keep=set(), collapse=False) assert(str(type(mcdsts)) == "") and \ (str(type(ldf_cell)) == "") and \ - (str(type(ldf_cell[0])) == "") and \ + (str(type(ldf_cell[0])) == "") and \ (ldf_cell[0].shape[0] > 9) and \ (ldf_cell[0].shape[1] == 36) and \ (ldf_cell[-1].shape[0] > 9) and \ @@ -327,7 +327,7 @@ def test_mcdsts_get_cell_df(self, mcdsts=mcdsts): def test_mcdsts_get_cell_df_collapse(self, mcdsts=mcdsts): df_cell = mcdsts.get_cell_df(values=2, drop=set(), keep=set(), collapse=True) assert(str(type(mcdsts)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 67) @@ -676,7 +676,7 @@ def test_mcdsts_plot_timeseries_cat_none_catkeep_cell_df(self, mcdsts=mcdsts): figbgcolor = None # test if ) assert(str(type(mcdsts)) == "") and \ - (str(type(df)) == "") + (str(type(df)) == "") plt.close() def test_mcdsts_plot_timeseries_none_num_yunit_cell_fig(self, mcdsts=mcdsts): @@ -872,7 +872,7 @@ def test_mcdsts_plot_timeseries_cat_num_catkeep_conc_df(self, mcdsts=mcdsts): figbgcolor = None # test if ) assert(str(type(mcdsts)) == "") and \ - (str(type(df)) == "") + (str(type(df)) == "") plt.close() def test_mcdsts_plot_timeseries_none_none_yunit_conc_fig(self, mcdsts=mcdsts): @@ -928,7 +928,7 @@ def test_mcdsts_get_anndata(self): (len(mcdsts.l_mcds) == 25) and \ (l_annmcds == mcdsts.l_annmcds) and \ (mcdsts.l_annmcds is None) and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ @@ -947,7 +947,7 @@ def test_mcdsts_get_anndata_value(self): (len(mcdsts.l_mcds) == 25) and \ (l_annmcds == mcdsts.l_annmcds) and \ (mcdsts.l_annmcds is None) and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 50) and \ (ann.obs.shape[0] > 9) and \ @@ -967,7 +967,7 @@ def test_mcdsts_get_anndata_collapsefalse(self): (l_annmcds == mcdsts.l_annmcds) and \ (str(type(mcdsts.l_annmcds)) == "") and \ (len(mcdsts.l_annmcds) == 25) and \ - (all([str(type(ann)) == "" for ann in mcdsts.l_annmcds])) and \ + (all([str(type(ann)) == "" for ann in mcdsts.l_annmcds])) and \ (mcdsts.l_annmcds[24].X.shape[0] > 9) and \ (mcdsts.l_annmcds[24].X.shape[1] == 105) and \ (mcdsts.l_annmcds[24].obs.shape[0] > 9) and \ @@ -986,7 +986,7 @@ def test_mcdsts_get_anndata_keepmcdsfalse(self): (len(mcdsts.l_mcds) == 0) and \ (l_annmcds == mcdsts.l_annmcds) and \ (mcdsts.l_annmcds is None) and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ diff --git a/test/test_timeseries_3d.py b/test/test_timeseries_3d.py index 2fb9b13..d1ffa60 100644 --- a/test/test_timeseries_3d.py +++ b/test/test_timeseries_3d.py @@ -127,7 +127,7 @@ def test_mcdsts_get_conc_df(self, mcdsts=mcdsts): ldf_conc = mcdsts.get_conc_df(values=2, drop=set(), keep=set(), collapse=False) assert(str(type(mcdsts)) == "") and \ (str(type(ldf_conc)) == "") and \ - (str(type(ldf_conc[0])) == "") and \ + (str(type(ldf_conc[0])) == "") and \ (ldf_conc[0].shape == (1331, 9)) and \ (ldf_conc[-1].shape == (1331, 11)) and \ (len(ldf_conc) == 25) @@ -135,7 +135,7 @@ def test_mcdsts_get_conc_df(self, mcdsts=mcdsts): def test_mcdsts_get_conc_df_collapse(self, mcdsts=mcdsts): df_conc = mcdsts.get_conc_df(values=2, drop=set(), keep=set(), collapse=True) assert(str(type(mcdsts)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (33275, 11)) def test_mcdsts_get_conc_attribute(self, mcdsts=mcdsts): @@ -244,7 +244,7 @@ def test_mcdsts_get_cell_df(self, mcdsts=mcdsts): ldf_cell = mcdsts.get_cell_df(values=2, drop=set(), keep=set(), collapse=False) assert(str(type(mcdsts)) == "") and \ (str(type(ldf_cell)) == "") and \ - (str(type(ldf_cell[0])) == "") and \ + (str(type(ldf_cell[0])) == "") and \ (ldf_cell[0].shape[0] > 9) and \ (ldf_cell[0].shape[1] == 40) and \ (ldf_cell[-1].shape[0] > 9) and \ @@ -254,7 +254,7 @@ def test_mcdsts_get_cell_df(self, mcdsts=mcdsts): def test_mcdsts_get_cell_df_collapse(self, mcdsts=mcdsts): df_cell = mcdsts.get_cell_df(values=2, drop=set(), keep=set(), collapse=True) assert(str(type(mcdsts)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 73) @@ -540,7 +540,7 @@ def test_mcdsts_plot_timeseries_cat_none_catkeep_cell_df(self, mcdsts=mcdsts): figbgcolor = None # test if ) assert(str(type(mcdsts)) == "") and \ - (str(type(df)) == "") + (str(type(df)) == "") plt.close() def test_mcdsts_plot_timeseries_none_num_yunit_cell_fig(self, mcdsts=mcdsts): @@ -736,7 +736,7 @@ def test_mcdsts_plot_timeseries_cat_num_catkeep_conc_df(self, mcdsts=mcdsts): figbgcolor = None # test if ) assert(str(type(mcdsts)) == "") and \ - (str(type(df)) == "") + (str(type(df)) == "") plt.close() def test_mcdsts_plot_timeseries_none_none_yunit_conc_fig(self, mcdsts=mcdsts): @@ -791,7 +791,7 @@ def test_mcdsts_get_anndata(self): (len(mcdsts.l_mcds) == 25) and \ (l_annmcds == mcdsts.l_annmcds) and \ (mcdsts.l_annmcds is None) and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ @@ -810,7 +810,7 @@ def test_mcdsts_get_anndata_value(self): (len(mcdsts.l_mcds) == 25) and \ (l_annmcds == mcdsts.l_annmcds) and \ (mcdsts.l_annmcds is None) and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 56) and \ (ann.obs.shape[0] > 9) and \ @@ -830,7 +830,7 @@ def test_mcdsts_get_anndata_collapsefalse(self): (l_annmcds == mcdsts.l_annmcds) and \ (str(type(mcdsts.l_annmcds)) == "") and \ (len(mcdsts.l_annmcds) == 25) and \ - (all([str(type(ann)) == "" for ann in mcdsts.l_annmcds])) and \ + (all([str(type(ann)) == "" for ann in mcdsts.l_annmcds])) and \ (mcdsts.l_annmcds[24].X.shape[0] > 9) and \ (mcdsts.l_annmcds[24].X.shape[1] == 105) and \ (mcdsts.l_annmcds[24].obs.shape[0] > 9) and \ @@ -849,7 +849,7 @@ def test_mcdsts_get_anndata_keepmcdsfalse(self): (len(mcdsts.l_mcds) == 0) and \ (l_annmcds == mcdsts.l_annmcds) and \ (mcdsts.l_annmcds is None) and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ diff --git a/test/test_timestep_2d.py b/test/test_timestep_2d.py index a6507e7..07df914 100644 --- a/test/test_timestep_2d.py +++ b/test/test_timestep_2d.py @@ -57,7 +57,7 @@ class TestTimeStepInit(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -74,7 +74,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -86,7 +86,7 @@ class TestTimeStepInitMicroenvFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 116) @@ -103,7 +103,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 116) @@ -115,7 +115,7 @@ class TestTimeStepInitGraphFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -132,7 +132,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -144,7 +144,7 @@ class TestTimeStepInitPhysibossFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -161,7 +161,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -173,7 +173,7 @@ class TestTimeStepInitSettingxmlFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -190,7 +190,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -202,7 +202,7 @@ class TestTimeStepInitSettingxmlNone(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -219,7 +219,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -491,43 +491,43 @@ def test_mcds_get_substrate_dict(self, mcds=mcds): def test_mcds_get_substrate_df(self, mcds=mcds): df_substrate = mcds.get_substrate_df() assert(str(type(mcds)) == "") and \ - (str(type(df_substrate)) == "") and \ + (str(type(df_substrate)) == "") and \ (df_substrate.shape == (2, 2)) def test_mcds_get_conc_df(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 11)) def test_mcds_get_conc_df_zslice_center(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=0, halt=False, values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 11)) def test_mcds_get_conc_df_zslice_outofcenter(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=-6, halt=False, values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 11)) def test_mcds_get_conc_df_values(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=2, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 11)) def test_mcds_get_conc_df_drop(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=1, drop={'oxygen'}, keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 10)) def test_mcds_get_conc_df_keep(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=1, drop=set(), keep={'oxygen'}) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 10)) def test_mcds_plot_contour(self, mcds=mcds): @@ -617,28 +617,28 @@ def test_mcds_get_celltype_dict(self, mcds=mcds): def test_mcds_get_cell_df(self, mcds=mcds): df_cell = mcds.get_cell_df(values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) def test_mcds_get_cell_df_values(self, mcds=mcds): df_cell = mcds.get_cell_df(values=2, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 66) def test_mcds_get_cell_df_drop(self, mcds=mcds): df_cell = mcds.get_cell_df(values=1, drop={'oxygen'}, keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 121) def test_mcds_get_cell_df_keep(self, mcds=mcds): df_cell = mcds.get_cell_df(values=1, drop=set(), keep={'oxygen'}) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 13) @@ -1057,26 +1057,26 @@ class TestTimeStepScaler(object): def test_scaler_none(self, df_x=df_x): df_scaled = pcdl.timestep.scaler(df_x=df_x, scale=None) - assert(str(type(df_scaled)) == "") and \ + assert(str(type(df_scaled)) == "") and \ (all(df_scaled == df_x)) def test_scaler_minabs(self, df_x=df_x): df_scaled = pcdl.timestep.scaler(df_x=df_x, scale='maxabs') - assert(str(type(df_scaled)) == "") and \ + assert(str(type(df_scaled)) == "") and \ (df_scaled.values.sum().round(3) == 2.0) and \ (df_scaled.values.min().round(3) == -1.0) and \ (df_scaled.values.max().round(3) == 1.0) def test_scaler_minmax(self, df_x=df_x): df_scaled = pcdl.timestep.scaler(df_x=df_x, scale='minmax') - assert(str(type(df_scaled)) == "") and \ + assert(str(type(df_scaled)) == "") and \ (df_scaled.values.sum().round(3) == 4.333) and \ (df_scaled.values.min().round(3) == 0.0) and \ (df_scaled.values.max().round(3) == 1.0) def test_scaler_std(self, df_x=df_x): df_scaled = pcdl.timestep.scaler(df_x=df_x, scale='std') - assert(str(type(df_scaled)) == "") and \ + assert(str(type(df_scaled)) == "") and \ (df_scaled.values.sum().round(3) == 0.0) and \ (df_scaled.values.min().round(3) == -1.0) and \ (df_scaled.values.max().round(3) == 1.091) @@ -1091,7 +1091,7 @@ def test_mcds_get_anndata(self): mcds = pcdl.TimeStep(s_pathfile_2d, verbose=False) ann = mcds.get_anndata(values=1, drop=set(), keep=set(), scale='maxabs') assert(str(type(mcds)) == "") and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ @@ -1167,10 +1167,10 @@ def test_mcds_get_spatialdata_default(self): (str(type(sdata['cell_shape'])) == "") and \ (sdata['cell_shape'].shape[0] > 9) and \ (sdata['cell_shape'].shape[1] == 2) and \ - (str(type(sdata['cell_table'])) == "") and \ + (str(type(sdata['cell_table'])) == "") and \ (sdata['cell_table'].shape[0] > 9) and \ (sdata['cell_table'].shape[1] > 9) and \ - (str(type(sdata['subs_table'])) == "") and \ + (str(type(sdata['subs_table'])) == "") and \ (sdata['subs_table'].shape[0] > 9) and \ (sdata['subs_table'].shape[1] == 2) and \ (sdata['subs_table'].obs.shape[0] > 9) and \ @@ -1190,10 +1190,10 @@ def test_mcds_get_spatialdata_points(self): (str(type(sdata['cell_point'])) == "") and \ (sdata['cell_point'].compute().shape[0] > 9) and \ (sdata['cell_point'].compute().shape[1] == 2) and \ - (str(type(sdata['cell_table'])) == "") and \ + (str(type(sdata['cell_table'])) == "") and \ (sdata['cell_table'].shape[0] > 9) and \ (sdata['cell_table'].shape[1] > 9) and \ - (str(type(sdata['subs_table'])) == "") and \ + (str(type(sdata['subs_table'])) == "") and \ (sdata['subs_table'].shape[0] > 9) and \ (sdata['subs_table'].shape[1] == 2) and \ (sdata['subs_table'].obs.shape[0] > 9) and \ @@ -1205,10 +1205,10 @@ def test_mcds_get_spatialdata_none(self): sdata = mcds.get_spatialdata(images=set(), labels=set(), points=set(), shapes=set(), values=1, drop=set(), keep=set(), scale='maxabs') assert(str(type(mcds)) == "") and \ (str(type(sdata)) == "") and \ - (str(type(sdata['cell_table'])) == "") and \ + (str(type(sdata['cell_table'])) == "") and \ (sdata['cell_table'].shape[0] > 9) and \ (sdata['cell_table'].shape[1] > 9) and \ - (str(type(sdata['subs_table'])) == "") and \ + (str(type(sdata['subs_table'])) == "") and \ (sdata['subs_table'].shape[0] > 9) and \ (sdata['subs_table'].shape[1] ==2) and \ (sdata['subs_table'].obs.shape[0] > 9) and \ diff --git a/test/test_timestep_3d.py b/test/test_timestep_3d.py index cebf1fc..fd19727 100644 --- a/test/test_timestep_3d.py +++ b/test/test_timestep_3d.py @@ -69,7 +69,7 @@ class TestTimeStepInit(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -86,7 +86,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -98,7 +98,7 @@ class TestTimeStepInitMicroenvFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 116) @@ -115,7 +115,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 116) @@ -127,7 +127,7 @@ class TestTimeStepInitGraphFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -144,7 +144,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -156,7 +156,7 @@ class TestTimeStepInitPhysibossFalse(object): df_cell = mcds.get_cell_df() def test_mcds_init_microenv(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -173,7 +173,7 @@ def test_mcds_init_graph(self, mcds=mcds): def test_mcds_init_settingxml(self, mcds=mcds, df_cell=df_cell): assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (set(df_cell.columns).issuperset({'default_fusion_rates'})) and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) @@ -237,7 +237,7 @@ class TestTimeStep3dMicroenvWorkhorse(object): def test_mcds_get_conc_df(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (1331, 11)) #(df_conc.shape[0] > 9) and \ #(df_conc.shape[1] == 122) @@ -245,31 +245,31 @@ def test_mcds_get_conc_df(self, mcds=mcds): def test_mcds_get_conc_df_zslice_center(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=0, halt=False, values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 11)) def test_mcds_get_conc_df_zslice_outofcenter(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=-6, halt=False, values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (121, 11)) def test_mcds_get_conc_df_values(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=2, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (1331, 11)) def test_mcds_get_conc_df_drop(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=1, drop={'oxygen'}, keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (1331, 10)) def test_mcds_get_conc_df_keep(self, mcds=mcds): df_conc = mcds.get_conc_df(z_slice=None, halt=False, values=1, drop=set(), keep={'oxygen'}) assert(str(type(mcds)) == "") and \ - (str(type(df_conc)) == "") and \ + (str(type(df_conc)) == "") and \ (df_conc.shape == (1331, 10)) def test_mcds_plot_contour(self, mcds=mcds): @@ -338,28 +338,28 @@ class TestTimeStep3dCellWorkhorse(object): def test_mcds_get_cell_df(self, mcds=mcds): df_cell = mcds.get_cell_df(values=1, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 122) def test_mcds_get_cell_df_values(self, mcds=mcds): df_cell = mcds.get_cell_df(values=2, drop=set(), keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 72) def test_mcds_get_cell_df_drop(self, mcds=mcds): df_cell = mcds.get_cell_df(values=1, drop={'oxygen'}, keep=set()) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 121) def test_mcds_get_cell_df_keep(self, mcds=mcds): df_cell = mcds.get_cell_df(values=1, drop=set(), keep={'oxygen'}) assert(str(type(mcds)) == "") and \ - (str(type(df_cell)) == "") and \ + (str(type(df_cell)) == "") and \ (df_cell.shape[0] > 9) and \ (df_cell.shape[1] == 13) @@ -664,7 +664,7 @@ def test_mcds_get_anndata(self): mcds = pcdl.TimeStep(s_pathfile_3d, verbose=False) ann = mcds.get_anndata(values=1, drop=set(), keep=set(), scale='maxabs') assert(str(type(mcds)) == "") and \ - (str(type(ann)) == "") and \ + (str(type(ann)) == "") and \ (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ @@ -740,10 +740,10 @@ def test_mcds_get_spatialdata_default(self): (str(type(sdata['cell_shape'])) == "") and \ (sdata['cell_shape'].shape[0] > 9) and \ (sdata['cell_shape'].shape[1] == 2) and \ - (str(type(sdata['cell_table'])) == "") and \ + (str(type(sdata['cell_table'])) == "") and \ (sdata['cell_table'].shape[0] > 9) and \ (sdata['cell_table'].shape[1] > 9) and \ - (str(type(sdata['subs_table'])) == "") and \ + (str(type(sdata['subs_table'])) == "") and \ (sdata['subs_table'].shape[0] > 9) and \ (sdata['subs_table'].shape[1] == 2) and \ (sdata['subs_table'].obs.shape[0] > 9) and \ @@ -763,10 +763,10 @@ def test_mcds_get_spatialdata_points(self): (str(type(sdata['cell_point'])) == "") and \ (sdata['cell_point'].compute().shape[0] > 9) and \ (sdata['cell_point'].compute().shape[1] == 3) and \ - (str(type(sdata['cell_table'])) == "") and \ + (str(type(sdata['cell_table'])) == "") and \ (sdata['cell_table'].shape[0] > 9) and \ (sdata['cell_table'].shape[1] > 9) and \ - (str(type(sdata['subs_table'])) == "") and \ + (str(type(sdata['subs_table'])) == "") and \ (sdata['subs_table'].shape[0] > 9) and \ (sdata['subs_table'].shape[1] == 2) and \ (sdata['subs_table'].obs.shape[0] > 9) and \ @@ -778,10 +778,10 @@ def test_mcds_get_spatialdata_none(self): sdata = mcds.get_spatialdata(images=set(), labels=set(), points=set(), shapes=set(), values=1, drop=set(), keep=set(), scale='maxabs') assert(str(type(mcds)) == "") and \ (str(type(sdata)) == "") and \ - (str(type(sdata['cell_table'])) == "") and \ + (str(type(sdata['cell_table'])) == "") and \ (sdata['cell_table'].shape[0] > 9) and \ (sdata['cell_table'].shape[1] > 9) and \ - (str(type(sdata['subs_table'])) == "") and \ + (str(type(sdata['subs_table'])) == "") and \ (sdata['subs_table'].shape[0] > 9) and \ (sdata['subs_table'].shape[1] ==2) and \ (sdata['subs_table'].obs.shape[0] > 9) and \ From 14ca8168bb823de8d0c6239d58d564a7b675ffaf Mon Sep 17 00:00:00 2001 From: bue Date: Thu, 20 Aug 2026 23:35:26 -0400 Subject: [PATCH 04/11] @ physicell data loader : next release v4.1.7. --- .github/workflows/apple.yml | 4 +- .github/workflows/linux.yml | 4 +- .github/workflows/windows.yml | 4 +- man/docstring/mcds.__init__.md | 76 +++--- man/docstring/mcds.custom_data_astype.md | 20 +- man/docstring/mcds.get_anndata.md | 54 ++-- man/docstring/mcds.get_attached_graph_dict.md | 8 +- man/docstring/mcds.get_cell_attribute_list.md | 10 +- man/docstring/mcds.get_cell_df.md | 52 ++-- man/docstring/mcds.get_celltype_dict.md | 10 +- man/docstring/mcds.get_celltype_list.md | 10 +- man/docstring/mcds.get_conc_df.md | 70 ++--- man/docstring/mcds.get_mesh.md | 24 +- man/docstring/mcds.get_mesh_2D.md | 12 +- man/docstring/mcds.get_mesh_coordinate.md | 10 +- man/docstring/mcds.get_mesh_mnp.md | 30 +-- man/docstring/mcds.get_mesh_mnp_axis.md | 10 +- man/docstring/mcds.get_mesh_mnp_range.md | 10 +- man/docstring/mcds.get_mesh_spacing.md | 10 +- man/docstring/mcds.get_multicellds_version.md | 10 +- man/docstring/mcds.get_muspan.md | 56 ++-- man/docstring/mcds.get_neighbor_graph_dict.md | 8 +- man/docstring/mcds.get_pcdl_version.md | 12 +- man/docstring/mcds.get_physicell_version.md | 10 +- man/docstring/mcds.get_runtime.md | 10 +- man/docstring/mcds.get_spatialdata.md | 90 +++---- man/docstring/mcds.get_spring_graph_dict.md | 8 +- man/docstring/mcds.get_substrate_df.md | 12 +- man/docstring/mcds.get_substrate_dict.md | 12 +- man/docstring/mcds.get_substrate_list.md | 10 +- man/docstring/mcds.get_time.md | 10 +- man/docstring/mcds.get_timestamp.md | 10 +- man/docstring/mcds.get_unit_dict.md | 12 +- man/docstring/mcds.get_voxel_ijk.md | 30 +-- man/docstring/mcds.get_voxel_ijk_axis.md | 10 +- man/docstring/mcds.get_voxel_ijk_range.md | 10 +- man/docstring/mcds.get_voxel_spacing.md | 10 +- man/docstring/mcds.get_voxel_volume.md | 12 +- man/docstring/mcds.get_xyz_range.md | 10 +- man/docstring/mcds.is_in_mesh.md | 32 +-- man/docstring/mcds.make_cell_vtk.md | 22 +- man/docstring/mcds.make_conc_vtk.md | 18 +- man/docstring/mcds.make_graph_gml.md | 52 ++-- man/docstring/mcds.make_ome_tiff.md | 68 ++--- man/docstring/mcds.plot_contour.md | 154 +++++------ man/docstring/mcds.plot_scatter.md | 198 +++++++------- man/docstring/mcds.set_verbose_false.md | 6 +- man/docstring/mcds.set_verbose_true.md | 6 +- man/docstring/mcdsts.__init__.md | 82 +++--- man/docstring/mcdsts.custom_data_astype.md | 20 +- man/docstring/mcdsts.get_anndata.md | 70 ++--- man/docstring/mcdsts.get_annmcds_list.md | 12 +- man/docstring/mcdsts.get_cell_attribute.md | 72 ++--- man/docstring/mcdsts.get_cell_df.md | 66 ++--- man/docstring/mcdsts.get_conc_attribute.md | 70 ++--- man/docstring/mcdsts.get_conc_df.md | 60 ++--- man/docstring/mcdsts.get_mcds_list.md | 12 +- man/docstring/mcdsts.get_muspan.md | 56 ++-- man/docstring/mcdsts.get_spatialdata.md | 82 +++--- man/docstring/mcdsts.get_xmlfile_list.md | 16 +- man/docstring/mcdsts.make_cell_vtk.md | 24 +- man/docstring/mcdsts.make_conc_vtk.md | 22 +- man/docstring/mcdsts.make_graph_gml.md | 56 ++-- man/docstring/mcdsts.make_ome_tiff.md | 76 +++--- man/docstring/mcdsts.plot_contour.md | 132 ++++----- man/docstring/mcdsts.plot_scatter.md | 194 +++++++------- man/docstring/mcdsts.plot_timeseries.md | 250 +++++++++--------- man/docstring/mcdsts.read_mcds.md | 14 +- man/docstring/mcdsts.set_verbose_false.md | 6 +- man/docstring/mcdsts.set_verbose_true.md | 6 +- man/docstring/pcdl.graphfile_parser.md | 14 +- man/docstring/pcdl.install_data.md | 6 +- man/docstring/pcdl.make_gif.md | 28 +- man/docstring/pcdl.render_neuroglancer.md | 30 +-- man/docstring/pcdl.scaler.md | 94 +++---- man/docstring/pcdl.uninstall_data.md | 8 +- man/docstring/pcdl_get_anndata.md | 2 +- man/docstring/pcdl_get_cell_attribute.md | 2 +- man/docstring/pcdl_get_cell_attribute_list.md | 2 +- man/docstring/pcdl_get_cell_df.md | 2 +- man/docstring/pcdl_get_celltype_list.md | 2 +- man/docstring/pcdl_get_conc_attribute.md | 2 +- man/docstring/pcdl_get_conc_df.md | 2 +- man/docstring/pcdl_get_spatialdata.md | 2 +- man/docstring/pcdl_get_substrate_list.md | 2 +- man/docstring/pcdl_get_unit_dict.md | 2 +- man/docstring/pcdl_get_version.md | 2 +- man/docstring/pcdl_make_cell_vtk.md | 2 +- man/docstring/pcdl_make_conc_vtk.md | 2 +- man/docstring/pcdl_make_graph_gml.md | 2 +- man/docstring/pcdl_make_ome_tiff.md | 2 +- man/docstring/pcdl_plot_contour.md | 2 +- man/docstring/pcdl_plot_scatter.md | 2 +- man/docstring/pcdl_plot_timeseries.md | 2 +- pcdl/VERSION.py | 2 +- 95 files changed, 1476 insertions(+), 1476 deletions(-) diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml index 0d3fd4d..125aa37 100644 --- a/.github/workflows/apple.yml +++ b/.github/workflows/apple.yml @@ -17,8 +17,8 @@ jobs: strategy: fail-fast: false matrix: - #python-version: ["3.14"] - python-version: ["3.11", "3.12", "3.13", "3.14"] + #python-version: ["3.15"] + python-version: ["3.12", "3.13", "3.14"] env: MPLBACKEND: Agg # https://github.com/orgs/community/discussions/26434 diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5511c16..5bc0a9c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -17,8 +17,8 @@ jobs: strategy: fail-fast: false matrix: - #python-version: ["3.14"] - python-version: ["3.11", "3.12", "3.13","3.14"] + #python-version: ["3.15"] + python-version: ["3.12", "3.13","3.14"] env: MPLBACKEND: Agg # https://github.com/orgs/community/discussions/26434 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 8cdff3f..ecb7338 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -17,8 +17,8 @@ jobs: strategy: fail-fast: false matrix: - #python-version: ["3.14"] - python-version: ["3.11", "3.12", "3.13", "3.14"] + #python-version: ["3.15"] + python-version: ["3.12", "3.13", "3.14"] env: MPLBACKEND: Agg # https://github.com/orgs/community/discussions/26434 diff --git a/man/docstring/mcds.__init__.md b/man/docstring/mcds.__init__.md index 944d9ff..36ba331 100644 --- a/man/docstring/mcds.__init__.md +++ b/man/docstring/mcds.__init__.md @@ -3,59 +3,59 @@ ## input: ``` - xmlfile: string - name of the xml file with or without path. - in the with path case, output_path has to be set to the default! + xmlfile: string + name of the xml file with or without path. + in the with path case, output_path has to be set to the default! - output_path: string; default '.' - relative or absolute path to the directory where - the PhysiCell output files are stored. + output_path: string; default '.' + relative or absolute path to the directory where + the PhysiCell output files are stored. - custom_data_type: dictionary; default is {} - variable to specify custom_data variable types other than - floats (namely: int, bool, str) like this: {var: dtype, ...}. - downstream float and int will be handled as numeric, - bool as Boolean, and str as categorical data. + custom_data_type: dictionary; default is {} + variable to specify custom_data variable types other than + floats (namely: int, bool, str) like this: {var: dtype, ...}. + downstream float and int will be handled as numeric, + bool as Boolean, and str as categorical data. - microenv: boole; default True - should the microenvironment data be loaded? - setting microenv to False will use less memory and speed up processing. + microenv: boole; default True + should the microenvironment data be loaded? + setting microenv to False will use less memory and speed up processing. - graph: boole; default True - should the graphs, like cell_neighbor_graph.txt, be loaded? - setting graph to False will use less memory and speed up processing. + graph: boole; default True + should the graphs, like cell_neighbor_graph.txt, be loaded? + setting graph to False will use less memory and speed up processing. - physiboss: boole; default True - should physiboss state data be loaded, if found? - setting physiboss to False will use less memory and speed up processing. + physiboss: boole; default True + should physiboss state data be loaded, if found? + setting physiboss to False will use less memory and speed up processing. - settingxml: string; default False - the settings.xml that is loaded, from which the cell type ID - label mapping, is extracted, if this information is not found - in the output xml file. - set to None or False if the xml file is missing! + settingxml: string; default False + the settings.xml that is loaded, from which the cell type ID + label mapping, is extracted, if this information is not found + in the output xml file. + set to None or False if the xml file is missing! - verbose: boole; default True - setting verbose to False for less text output, while processing. + verbose: boole; default True + setting verbose to False for less text output, while processing. ``` ## output: ``` - mcds: TimeStep class instance - all fetched content is stored at mcds.data. + mcds: TimeStep class instance + all fetched content is stored at mcds.data. ``` ## description: ``` - TimeStep.__init__ will generate a class instance with a - dictionary of dictionaries data structure that contains all - output from a single PhysiCell model time step. furthermore, - this class, and as such it's instances, offers functions - to access the stored data. - the code assumes that all related output files are stored in - the same directory. data is loaded by reading the xml file - for a particular time step and the therein referenced files. - + TimeStep.__init__ will generate a class instance with a + dictionary of dictionaries data structure that contains all + output from a single PhysiCell model time step. furthermore, + this class, and as such it's instances, offers functions + to access the stored data. + the code assumes that all related output files are stored in + the same directory. data is loaded by reading the xml file + for a particular time step and the therein referenced files. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.custom_data_astype.md b/man/docstring/mcds.custom_data_astype.md index 1ba1399..cf3bb8d 100644 --- a/man/docstring/mcds.custom_data_astype.md +++ b/man/docstring/mcds.custom_data_astype.md @@ -3,24 +3,24 @@ ## input: ``` - custom_data_type: dictionary; default is {} - variable to specify custom_data variable types other than - floats (namely: int, bool, str) like this: {var: dtype, ...}. - downstream float and int will be handled as numeric, - bool as Boolean, and str as categorical data. + custom_data_type: dictionary; default is {} + variable to specify custom_data variable types other than + floats (namely: int, bool, str) like this: {var: dtype, ...}. + downstream float and int will be handled as numeric, + bool as Boolean, and str as categorical data. ``` ## output: ``` - self.data['cell']['df_cell']: - the dtype of columns as specified in the custom_data_type dictionary. + self.data['cell']['df_cell']: + the dtype of columns as specified in the custom_data_type dictionary. ``` ## description: ``` - function to set the dtype of custom_data variables, - even after the data is loaded. - + function to set the dtype of custom_data variables, + even after the data is loaded. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_anndata.md b/man/docstring/mcds.get_anndata.md index 02b03b3..502b5e9 100644 --- a/man/docstring/mcds.get_anndata.md +++ b/man/docstring/mcds.get_anndata.md @@ -3,41 +3,41 @@ ## input: ``` - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates - and time will always be kept. - - scale: string; default 'maxabs' - specify how the data should be scaled. - possible values are None, maxabs, minmax, std. - for more input, check out: help(pcdl.scaler) + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates + and time will always be kept. + + scale: string; default 'maxabs' + specify how the data should be scaled. + possible values are None, maxabs, minmax, std. + for more input, check out: help(pcdl.scaler) ``` ## output: ``` - annmcds: anndata object - for this one time step. + annmcds: anndata object + for this one time step. ``` ## description: ``` - function to transform a mcds time step into an anndata object - for downstream analysis. - + function to transform a mcds time step into an anndata object + for downstream analysis. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_attached_graph_dict.md b/man/docstring/mcds.get_attached_graph_dict.md index 6c44cd1..4320940 100644 --- a/man/docstring/mcds.get_attached_graph_dict.md +++ b/man/docstring/mcds.get_attached_graph_dict.md @@ -8,13 +8,13 @@ ## output: ``` - dei_graph: dictionary of sets of integers - maps each cell ID to the attached connected cell IDs. + dei_graph: dictionary of sets of integers + maps each cell ID to the attached connected cell IDs. ``` ## description: ``` - function returns the attached cell graph as a dictionary object. - + function returns the attached cell graph as a dictionary object. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_cell_attribute_list.md b/man/docstring/mcds.get_cell_attribute_list.md index cf4cdc1..4af1ebd 100644 --- a/man/docstring/mcds.get_cell_attribute_list.md +++ b/man/docstring/mcds.get_cell_attribute_list.md @@ -8,14 +8,14 @@ ## output: ``` - ls_cellattr: list of strings - alphabetically ordered list of all tracked cell attributes. + ls_cellattr: list of strings + alphabetically ordered list of all tracked cell attributes. ``` ## description: ``` - function returns a list with all cell attribute labels, - alphabetically ordered. - + function returns a list with all cell attribute labels, + alphabetically ordered. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_cell_df.md b/man/docstring/mcds.get_cell_df.md index 4f218bf..7ff6686 100644 --- a/man/docstring/mcds.get_cell_df.md +++ b/man/docstring/mcds.get_cell_df.md @@ -3,40 +3,40 @@ ## input: ``` - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates, - time and runtime (wall time) will always be kept. + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates, + time and runtime (wall time) will always be kept. ``` ## output: ``` - df_cell: pandas dataframe - dataframe lists, one cell per row, all tracked variables - values related to this cell. the variables are cell_position, - mesh_center, and voxel coordinates, all cell_variables, - all substrate rates and concentrations, and additional - the surrounding cell density. + df_cell: pandas dataframe + dataframe lists, one cell per row, all tracked variables + values related to this cell. the variables are cell_position, + mesh_center, and voxel coordinates, all cell_variables, + all substrate rates and concentrations, and additional + the surrounding cell density. ``` ## description: ``` - function returns a dataframe with a cell centric view - of the simulation. - + function returns a dataframe with a cell centric view + of the simulation. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_celltype_dict.md b/man/docstring/mcds.get_celltype_dict.md index cf05f6e..4488027 100644 --- a/man/docstring/mcds.get_celltype_dict.md +++ b/man/docstring/mcds.get_celltype_dict.md @@ -8,14 +8,14 @@ ## output: ``` - ds_celltype: dictionary of stings - dictionary that maps cell_type IDs to labels. + ds_celltype: dictionary of stings + dictionary that maps cell_type IDs to labels. ``` ## description: ``` - function returns a dictionary that maps ID and name from all - cell_definitions, specified in the PhysiCell_settings.xml file. - + function returns a dictionary that maps ID and name from all + cell_definitions, specified in the PhysiCell_settings.xml file. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_celltype_list.md b/man/docstring/mcds.get_celltype_list.md index 39e2ca8..8065bc8 100644 --- a/man/docstring/mcds.get_celltype_list.md +++ b/man/docstring/mcds.get_celltype_list.md @@ -8,14 +8,14 @@ ## output: ``` - ls_celltype: list of strings - by ID ordered list of all tracked celltype labels. + ls_celltype: list of strings + by ID ordered list of all tracked celltype labels. ``` ## description: ``` - function returns a list with all celltype labels, - ordered by cell_type ID. - + function returns a list with all celltype labels, + ordered by cell_type ID. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_conc_df.md b/man/docstring/mcds.get_conc_df.md index 2f64e25..11f6959 100644 --- a/man/docstring/mcds.get_conc_df.md +++ b/man/docstring/mcds.get_conc_df.md @@ -3,49 +3,49 @@ ## input: ``` - z_slice: floating point number; default is None - z-axis position to slice a 2D xy-plain out of the - 3D substrate concentration mesh. if None the - whole 3D mesh will be returned. - - halt: boolean; default is False - should program execution break or just spit out a warning, - if z_slice position is not an exact mesh center coordinate? - if False, z_slice will be adjusted to the nearest - mesh center value, the smaller one, if the coordinate - lies on a saddle point. - - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates - and time will always be kept. + z_slice: floating point number; default is None + z-axis position to slice a 2D xy-plain out of the + 3D substrate concentration mesh. if None the + whole 3D mesh will be returned. + + halt: boolean; default is False + should program execution break or just spit out a warning, + if z_slice position is not an exact mesh center coordinate? + if False, z_slice will be adjusted to the nearest + mesh center value, the smaller one, if the coordinate + lies on a saddle point. + + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates + and time will always be kept. ``` ## output: ``` - df_conc : pandas dataframe - dataframe stores all substrate concentrations in each voxel. + df_conc : pandas dataframe + dataframe stores all substrate concentrations in each voxel. ``` ## description: ``` - function returns a dataframe with concentration values - for all chemical species in all voxels. additionally, this - dataframe lists voxel and mesh center coordinates. - + function returns a dataframe with concentration values + for all chemical species in all voxels. additionally, this + dataframe lists voxel and mesh center coordinates. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh.md b/man/docstring/mcds.get_mesh.md index 3f3e702..10e4416 100644 --- a/man/docstring/mcds.get_mesh.md +++ b/man/docstring/mcds.get_mesh.md @@ -3,26 +3,26 @@ ## input: ``` - flat : bool; default False - if flat is True, only the m-axis mesh center - and n-axis mesh center meshgrids will be returned. - else the m, n, and p mesh center meshgrids will be returned. + flat : bool; default False + if flat is True, only the m-axis mesh center + and n-axis mesh center meshgrids will be returned. + else the m, n, and p mesh center meshgrids will be returned. ``` ## output: ``` - aar_meshgrid : 4-way (3D) or 3-way (2D) numpy arrays tensor of floating point numbers - meshgrid shaped object, with the mesh center - coordinate values from the m, n, p-axis or m, n-axis. + aar_meshgrid : 4-way (3D) or 3-way (2D) numpy arrays tensor of floating point numbers + meshgrid shaped object, with the mesh center + coordinate values from the m, n, p-axis or m, n-axis. ``` ## description: ``` - function returns a numpy array of meshgrids each of which stores - the mesh center coordinate values from one particular axis. - the function can either return meshgrids for the full - m, n, p 3D cube, or only the 2D planes along the p-axis. - + function returns a numpy array of meshgrids each of which stores + the mesh center coordinate values from one particular axis. + the function can either return meshgrids for the full + m, n, p 3D cube, or only the 2D planes along the p-axis. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh_2D.md b/man/docstring/mcds.get_mesh_2D.md index 4a8e3c0..76d57ed 100644 --- a/man/docstring/mcds.get_mesh_2D.md +++ b/man/docstring/mcds.get_mesh_2D.md @@ -8,15 +8,15 @@ ## output: ``` - aar_meshgrid : 3-way numpy arrays tensor of floating point numbers - meshgrid shaped objects, with the mesh center - coordinate values from the m and n-axis. + aar_meshgrid : 3-way numpy arrays tensor of floating point numbers + meshgrid shaped objects, with the mesh center + coordinate values from the m and n-axis. ``` ## description: ``` - function is identical to the self.get_mesh(self, flat=True) - function call. - + function is identical to the self.get_mesh(self, flat=True) + function call. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh_coordinate.md b/man/docstring/mcds.get_mesh_coordinate.md index 7cef386..502eb7c 100644 --- a/man/docstring/mcds.get_mesh_coordinate.md +++ b/man/docstring/mcds.get_mesh_coordinate.md @@ -8,14 +8,14 @@ ## output: ``` - aar_meshaxis : numpy array of 3 one dimensional numpy floating point number arrays - n, m, and p-axis mesh center coordinate vectors. + aar_meshaxis : numpy array of 3 one dimensional numpy floating point number arrays + n, m, and p-axis mesh center coordinate vectors. ``` ## description: ``` - function returns three vectors with mesh center coordinate values, - one for each axis. - + function returns three vectors with mesh center coordinate values, + one for each axis. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh_mnp.md b/man/docstring/mcds.get_mesh_mnp.md index 580a9e1..64fd5b7 100644 --- a/man/docstring/mcds.get_mesh_mnp.md +++ b/man/docstring/mcds.get_mesh_mnp.md @@ -3,32 +3,32 @@ ## input: ``` - x: floating point number - position x-coordinate. + x: floating point number + position x-coordinate. - y: floating point number - position y-coordinate. + y: floating point number + position y-coordinate. - z: floating point number - position z-coordinate. + z: floating point number + position z-coordinate. - is_in_mesh: boolean; default is True - should function check, if the given coordinate is in the mesh, - and only calculate ijk values if is so? + is_in_mesh: boolean; default is True + should function check, if the given coordinate is in the mesh, + and only calculate ijk values if is so? ``` ## output: ``` - lr_mnp : list of 3 floats - m, n, p indices for the mesh center, - for the mesh cell containing the x, y, z position. + lr_mnp : list of 3 floats + m, n, p indices for the mesh center, + for the mesh cell containing the x, y, z position. ``` ## description: ``` - function returns the meshgrid indices m, n, p - for the given position x, y, z. - + function returns the meshgrid indices m, n, p + for the given position x, y, z. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh_mnp_axis.md b/man/docstring/mcds.get_mesh_mnp_axis.md index 3612169..25445e4 100644 --- a/man/docstring/mcds.get_mesh_mnp_axis.md +++ b/man/docstring/mcds.get_mesh_mnp_axis.md @@ -8,14 +8,14 @@ ## output: ``` - lar_mnp : list of 3 numpy arrays of floating point numbers - m-axis, n-axis, and p-axis mesh center axis coordinates. + lar_mnp : list of 3 numpy arrays of floating point numbers + m-axis, n-axis, and p-axis mesh center axis coordinates. ``` ## description: ``` - function returns a list of mesh center vectors, - one for the m-axis, n-axis, and p-axis. - + function returns a list of mesh center vectors, + one for the m-axis, n-axis, and p-axis. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh_mnp_range.md b/man/docstring/mcds.get_mesh_mnp_range.md index 19755d0..edd45bc 100644 --- a/man/docstring/mcds.get_mesh_mnp_range.md +++ b/man/docstring/mcds.get_mesh_mnp_range.md @@ -8,14 +8,14 @@ ## output: ``` - ltr_mnp : list of tuple of 2 floating point numbers - m-axis, n-axis, and p-axis mesh center range. + ltr_mnp : list of tuple of 2 floating point numbers + m-axis, n-axis, and p-axis mesh center range. ``` ## description: ``` - function returns in a list of tuples the lowest and highest - m-axis, n-axis, and p-axis mesh center value. - + function returns in a list of tuples the lowest and highest + m-axis, n-axis, and p-axis mesh center value. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_mesh_spacing.md b/man/docstring/mcds.get_mesh_spacing.md index 54cfb3c..f35828b 100644 --- a/man/docstring/mcds.get_mesh_spacing.md +++ b/man/docstring/mcds.get_mesh_spacing.md @@ -8,14 +8,14 @@ ## output: ``` - lr_mnp_spacing: list of 3 floating point numbers - mesh spacing in m, n, and p direction. + lr_mnp_spacing: list of 3 floating point numbers + mesh spacing in m, n, and p direction. ``` ## description: ``` - function returns the distance in between mesh centers, - in the spacial unit defined in the PhysiCell_settings.xml file. - + function returns the distance in between mesh centers, + in the spacial unit defined in the PhysiCell_settings.xml file. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_multicellds_version.md b/man/docstring/mcds.get_multicellds_version.md index f03bcc0..f17173f 100644 --- a/man/docstring/mcds.get_multicellds_version.md +++ b/man/docstring/mcds.get_multicellds_version.md @@ -8,14 +8,14 @@ ## output: ``` - s_version : sting - MultiCellDS xml version that stored the data. + s_version : sting + MultiCellDS xml version that stored the data. ``` ## description: ``` - function returns as a string the MultiCellDS xml version - that was used to store this data. - + function returns as a string the MultiCellDS xml version + that was used to store this data. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_muspan.md b/man/docstring/mcds.get_muspan.md index 4470097..39cb28a 100644 --- a/man/docstring/mcds.get_muspan.md +++ b/man/docstring/mcds.get_muspan.md @@ -3,42 +3,42 @@ ## input: ``` - z_slice: floating point number; default is None - z-axis position to slice a 2D xy-plain out of the - 3D mesh. if None the whole 3D mesh will be returned. - - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates - and time will always be kept. + z_slice: floating point number; default is None + z-axis position to slice a 2D xy-plain out of the + 3D mesh. if None the whole 3D mesh will be returned. + + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates + and time will always be kept. ``` ## output: ``` - do_domain: dictionary of muspa domains, one for each z-layer. + do_domain: dictionary of muspa domains, one for each z-layer. ``` ## description: ``` - function returns a dictionary of muspa domains, containg a - cell and subs collection with disrcete and continuous labels - and all the graph as networks. - + https://www.muspan.co.uk - + https://docs.muspan.co.uk/latest/Documentation.html - + function returns a dictionary of muspa domains, containg a + cell and subs collection with disrcete and continuous labels + and all the graph as networks. + + https://www.muspan.co.uk + + https://docs.muspan.co.uk/latest/Documentation.html + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_neighbor_graph_dict.md b/man/docstring/mcds.get_neighbor_graph_dict.md index 6fb68c4..76e1bf8 100644 --- a/man/docstring/mcds.get_neighbor_graph_dict.md +++ b/man/docstring/mcds.get_neighbor_graph_dict.md @@ -8,13 +8,13 @@ ## output: ``` - dei_graph: dictionary of sets of integers - maps each cell ID to the connected neighbor cell IDs. + dei_graph: dictionary of sets of integers + maps each cell ID to the connected neighbor cell IDs. ``` ## description: ``` - function returns the cell neighbor graph as a dictionary object. - + function returns the cell neighbor graph as a dictionary object. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_pcdl_version.md b/man/docstring/mcds.get_pcdl_version.md index d0e9977..274901e 100644 --- a/man/docstring/mcds.get_pcdl_version.md +++ b/man/docstring/mcds.get_pcdl_version.md @@ -8,15 +8,15 @@ ## output: ``` - s_version : sting - physicell data loader version that was used - to loaded the data. + s_version : sting + physicell data loader version that was used + to loaded the data. ``` ## description: ``` - function returns as a string the physicell data loader version - that was used to load the mcds time step. - + function returns as a string the physicell data loader version + that was used to load the mcds time step. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_physicell_version.md b/man/docstring/mcds.get_physicell_version.md index c8f4f8d..3850a01 100644 --- a/man/docstring/mcds.get_physicell_version.md +++ b/man/docstring/mcds.get_physicell_version.md @@ -8,14 +8,14 @@ ## output: ``` - s_version : sting - PhysiCell version that generated the data. + s_version : sting + PhysiCell version that generated the data. ``` ## description: ``` - function returns as a string the PhysiCell version - that was used to generate this data. - + function returns as a string the PhysiCell version + that was used to generate this data. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_runtime.md b/man/docstring/mcds.get_runtime.md index d5b2738..a2b655d 100644 --- a/man/docstring/mcds.get_runtime.md +++ b/man/docstring/mcds.get_runtime.md @@ -8,14 +8,14 @@ ## output: ``` - r_time : floating point number - wall time in [sec]. + r_time : floating point number + wall time in [sec]. ``` ## description: ``` - function returns as a real number, the wall time in seconds - the simulation took to run up to this time step. - + function returns as a real number, the wall time in seconds + the simulation took to run up to this time step. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_spatialdata.md b/man/docstring/mcds.get_spatialdata.md index bb817e1..6da58cf 100644 --- a/man/docstring/mcds.get_spatialdata.md +++ b/man/docstring/mcds.get_spatialdata.md @@ -3,59 +3,59 @@ ## input: ``` - images: set of string; default {'subs'} - specify if from the subs or cell dataset - a multichannel image should be generate. - so far, only the subs image element is implemented. - - labels: set of strings; default is an empty set - specify if from the subs or cell dataset - a label element should be generated. - so far, neither subs nor cell label elements are implemented. - - points: set of string; default {'subs'} - specify if from the subs or cell dataset - a points element should be generated. - both, subs and cell point elements, are implemented. - - shapes: set of string; default {'cell'} - specify if from the subs or cell dataset - a shape element should be generated. - so far, only the cell shape element is implemented. - - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - don't worry: essential columns like ID, coordinates - and time will always be kept. - - scale: string; default 'maxabs' - specify how the data should be scaled. - possible values are None, maxabs, minmax, std. - for more input, check out: help(pcdl.scaler) + images: set of string; default {'subs'} + specify if from the subs or cell dataset + a multichannel image should be generate. + so far, only the subs image element is implemented. + + labels: set of strings; default is an empty set + specify if from the subs or cell dataset + a label element should be generated. + so far, neither subs nor cell label elements are implemented. + + points: set of string; default {'subs'} + specify if from the subs or cell dataset + a points element should be generated. + both, subs and cell point elements, are implemented. + + shapes: set of string; default {'cell'} + specify if from the subs or cell dataset + a shape element should be generated. + so far, only the cell shape element is implemented. + + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + don't worry: essential columns like ID, coordinates + and time will always be kept. + + scale: string; default 'maxabs' + specify how the data should be scaled. + possible values are None, maxabs, minmax, std. + for more input, check out: help(pcdl.scaler) ``` ## output: ``` - self.l_sdmcds: list of spatialdata objects. + self.l_sdmcds: list of spatialdata objects. ``` ## description: ``` - function to transform a mcds time step into - a spatialdata object for downstream analysis. - + function to transform a mcds time step into + a spatialdata object for downstream analysis. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_spring_graph_dict.md b/man/docstring/mcds.get_spring_graph_dict.md index 1227ae6..c83ffaa 100644 --- a/man/docstring/mcds.get_spring_graph_dict.md +++ b/man/docstring/mcds.get_spring_graph_dict.md @@ -8,13 +8,13 @@ ## output: ``` - dei_graph: dictionary of sets of integers - maps each cell ID to the attached connected cell IDs. + dei_graph: dictionary of sets of integers + maps each cell ID to the attached connected cell IDs. ``` ## description: ``` - function returns the attached spring cell graph as a dictionary object. - + function returns the attached spring cell graph as a dictionary object. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_substrate_df.md b/man/docstring/mcds.get_substrate_df.md index a2f66cc..99ada78 100644 --- a/man/docstring/mcds.get_substrate_df.md +++ b/man/docstring/mcds.get_substrate_df.md @@ -8,15 +8,15 @@ ## output: ``` - df_substrae: pandas dataframe - one substrate per row and decay_rate and difusion_coefficient - factors as columns. + df_substrae: pandas dataframe + one substrate per row and decay_rate and difusion_coefficient + factors as columns. ``` ## description: ``` - function returns a dataframe with each substrate's - decay_rate and difusion_coefficient. - + function returns a dataframe with each substrate's + decay_rate and difusion_coefficient. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_substrate_dict.md b/man/docstring/mcds.get_substrate_dict.md index 261c3ff..22a316d 100644 --- a/man/docstring/mcds.get_substrate_dict.md +++ b/man/docstring/mcds.get_substrate_dict.md @@ -8,15 +8,15 @@ ## output: ``` - ds_substrate: dictionary of stings - dictionary that maps substrate IDs to labels. + ds_substrate: dictionary of stings + dictionary that maps substrate IDs to labels. ``` ## description: ``` - function returns a dictionary that maps ID and name from all - microenvironment_setup variables, - specified in the PhysiCell_settings.xml file. - + function returns a dictionary that maps ID and name from all + microenvironment_setup variables, + specified in the PhysiCell_settings.xml file. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_substrate_list.md b/man/docstring/mcds.get_substrate_list.md index 9939757..d5f0b19 100644 --- a/man/docstring/mcds.get_substrate_list.md +++ b/man/docstring/mcds.get_substrate_list.md @@ -8,14 +8,14 @@ ## output: ``` - ls_substrate: list of stings - by ID ordered list of all tracked substrates. + ls_substrate: list of stings + by ID ordered list of all tracked substrates. ``` ## description: ``` - function returns all chemical species names, modeled - in the microenvironment, ordered by chemical species ID. - + function returns all chemical species names, modeled + in the microenvironment, ordered by chemical species ID. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_time.md b/man/docstring/mcds.get_time.md index 4aad8c4..6c08eac 100644 --- a/man/docstring/mcds.get_time.md +++ b/man/docstring/mcds.get_time.md @@ -8,14 +8,14 @@ ## output: ``` - r_time : floating point number - simulation time in [min]. + r_time : floating point number + simulation time in [min]. ``` ## description: ``` - function returns as a real number - the simulation time in minutes. - + function returns as a real number + the simulation time in minutes. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_timestamp.md b/man/docstring/mcds.get_timestamp.md index 849ced9..4b162da 100644 --- a/man/docstring/mcds.get_timestamp.md +++ b/man/docstring/mcds.get_timestamp.md @@ -8,14 +8,14 @@ ## output: ``` - s_timestap : sting - timestamp from when this data was generated. + s_timestap : sting + timestamp from when this data was generated. ``` ## description: ``` - function returns as a string the timestamp from when - this data was generated. - + function returns as a string the timestamp from when + this data was generated. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_unit_dict.md b/man/docstring/mcds.get_unit_dict.md index 046505b..4d8574d 100644 --- a/man/docstring/mcds.get_unit_dict.md +++ b/man/docstring/mcds.get_unit_dict.md @@ -8,15 +8,15 @@ ## output: ``` - ds_unit: dictionary - dictionary, which tracks units from cell and microenvironment - variables. + ds_unit: dictionary + dictionary, which tracks units from cell and microenvironment + variables. ``` ## description: ``` - function returns a dictionary that stores all tracked variables - and their units. - + function returns a dictionary that stores all tracked variables + and their units. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_voxel_ijk.md b/man/docstring/mcds.get_voxel_ijk.md index c0365ac..3cb4e21 100644 --- a/man/docstring/mcds.get_voxel_ijk.md +++ b/man/docstring/mcds.get_voxel_ijk.md @@ -3,32 +3,32 @@ ## input: ``` - x: floating point number - position x-coordinate. + x: floating point number + position x-coordinate. - y: floating point number - position y-coordinate. + y: floating point number + position y-coordinate. - z: floating point number - position z-coordinate. + z: floating point number + position z-coordinate. - is_in_mesh: boolean; default is True - should function check, if the given coordinate is in the mesh, - and only calculate ijk values if is so? + is_in_mesh: boolean; default is True + should function check, if the given coordinate is in the mesh, + and only calculate ijk values if is so? ``` ## output: ``` - li_ijk : list of 3 integers - i, j, k indices for the voxel - containing the x, y, z position. + li_ijk : list of 3 integers + i, j, k indices for the voxel + containing the x, y, z position. ``` ## description: ``` - function returns the meshgrid indices i, j, k - for the given position x, y, z. - + function returns the meshgrid indices i, j, k + for the given position x, y, z. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_voxel_ijk_axis.md b/man/docstring/mcds.get_voxel_ijk_axis.md index f9a5588..0946b0a 100644 --- a/man/docstring/mcds.get_voxel_ijk_axis.md +++ b/man/docstring/mcds.get_voxel_ijk_axis.md @@ -8,14 +8,14 @@ ## output: ``` - lai_ijk : list of 3 numpy arrays of integer numbers - i-axis, j-axis, and k-axis voxel coordinates axis. + lai_ijk : list of 3 numpy arrays of integer numbers + i-axis, j-axis, and k-axis voxel coordinates axis. ``` ## description: ``` - function returns a list of voxel coordinate vectors, - one for the i-axis, j-axis, and k-axis. - + function returns a list of voxel coordinate vectors, + one for the i-axis, j-axis, and k-axis. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_voxel_ijk_range.md b/man/docstring/mcds.get_voxel_ijk_range.md index db5c311..4bfa46a 100644 --- a/man/docstring/mcds.get_voxel_ijk_range.md +++ b/man/docstring/mcds.get_voxel_ijk_range.md @@ -8,14 +8,14 @@ ## output: ``` - lti_i : list of tuple of 2 integer numbers - i-axis, j-aixs, and k-axis voxel range. + lti_i : list of tuple of 2 integer numbers + i-axis, j-aixs, and k-axis voxel range. ``` ## description: ``` - function returns in a list of tuples the lowest and highest - i-axis, j-axis, and k-axis voxel value. - + function returns in a list of tuples the lowest and highest + i-axis, j-axis, and k-axis voxel value. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_voxel_spacing.md b/man/docstring/mcds.get_voxel_spacing.md index b90195c..662703f 100644 --- a/man/docstring/mcds.get_voxel_spacing.md +++ b/man/docstring/mcds.get_voxel_spacing.md @@ -8,14 +8,14 @@ ## output: ``` - lr_ijk_spacing: list of 3 floating point numbers - voxel spacing in i, j, and k directions. + lr_ijk_spacing: list of 3 floating point numbers + voxel spacing in i, j, and k directions. ``` ## description: ``` - function returns the voxel width, height, depth measurement, - in the spacial unit defined in the PhysiCell_settings.xml file. - + function returns the voxel width, height, depth measurement, + in the spacial unit defined in the PhysiCell_settings.xml file. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_voxel_volume.md b/man/docstring/mcds.get_voxel_volume.md index a08aa3b..2ce2b6a 100644 --- a/man/docstring/mcds.get_voxel_volume.md +++ b/man/docstring/mcds.get_voxel_volume.md @@ -8,15 +8,15 @@ ## output: ``` - r_volume: floating point number - voxel volume value related to the spacial unit - defined in the PhysiCell_settings.xml file. + r_volume: floating point number + voxel volume value related to the spacial unit + defined in the PhysiCell_settings.xml file. ``` ## description: ``` - function returns the volume value for a single voxel, related - to the spacial unit defined in the PhysiCell_settings.xml file. - + function returns the volume value for a single voxel, related + to the spacial unit defined in the PhysiCell_settings.xml file. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.get_xyz_range.md b/man/docstring/mcds.get_xyz_range.md index 063c254..79825ae 100644 --- a/man/docstring/mcds.get_xyz_range.md +++ b/man/docstring/mcds.get_xyz_range.md @@ -8,14 +8,14 @@ ## output: ``` - ltr_xyz : list of tuple of 2 floating point numbers - x-axis, y-axis, and z-axis position range. + ltr_xyz : list of tuple of 2 floating point numbers + x-axis, y-axis, and z-axis position range. ``` ## description: ``` - function returns in a list of tuples the lowest and highest - x-axis, y-axis, and z-axis position value. - + function returns in a list of tuples the lowest and highest + x-axis, y-axis, and z-axis position value. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.is_in_mesh.md b/man/docstring/mcds.is_in_mesh.md index a0ed0c2..ab7fc06 100644 --- a/man/docstring/mcds.is_in_mesh.md +++ b/man/docstring/mcds.is_in_mesh.md @@ -3,33 +3,33 @@ ## input: ``` - x: floating point number - position x-coordinate. + x: floating point number + position x-coordinate. - y: floating point number - position y-coordinate. + y: floating point number + position y-coordinate. - z: floating point number - position z-coordinate. + z: floating point number + position z-coordinate. - halt: boolean; default is False - should program execution break or just spit out a warning, - if position is not in mesh? + halt: boolean; default is False + should program execution break or just spit out a warning, + if position is not in mesh? ``` ## output: ``` - b_isinmesh: boolean - declares if the given coordinate is inside the mesh. + b_isinmesh: boolean + declares if the given coordinate is inside the mesh. ``` ## description: ``` - function evaluates if the given position coordinate - is inside the boundaries. if the coordinate is outside the - mesh, a warning will be printed. if additionally - halt is set to True, program execution will halt. - + function evaluates if the given position coordinate + is inside the boundaries. if the coordinate is outside the + mesh, a warning will be printed. if additionally + halt is set to True, program execution will halt. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.make_cell_vtk.md b/man/docstring/mcds.make_cell_vtk.md index 25e08ef..1940864 100644 --- a/man/docstring/mcds.make_cell_vtk.md +++ b/man/docstring/mcds.make_cell_vtk.md @@ -3,27 +3,27 @@ ## input: ``` - attribute: list of strings; default is ['cell_type'] - column name within cell dataframe. + attribute: list of strings; default is ['cell_type'] + column name within cell dataframe. - ext: string; default '_cell.vtp'. - file extension. + ext: string; default '_cell.vtp'. + file extension. ``` ## output: ``` - s_vtkpathfile: vtk 3D glyph polynomial data file that contains cells. + s_vtkpathfile: vtk 3D glyph polynomial data file that contains cells. ``` ## description: ``` - function that generates vtk 3D glyph polynomial data file for cells. - cells can have specified attributes like cell_type, - pressure, dead, etc. - you can post-process this file in other software like paraview. + function that generates vtk 3D glyph polynomial data file for cells. + cells can have specified attributes like cell_type, + pressure, dead, etc. + you can post-process this file in other software like paraview. + + https://www.paraview.org/ - https://www.paraview.org/ - ``` \ No newline at end of file diff --git a/man/docstring/mcds.make_conc_vtk.md b/man/docstring/mcds.make_conc_vtk.md index 5b01303..3e170d3 100644 --- a/man/docstring/mcds.make_conc_vtk.md +++ b/man/docstring/mcds.make_conc_vtk.md @@ -3,24 +3,24 @@ ## input: ``` - ext: string; default '_conc.vtr'. - file extension. + ext: string; default '_conc.vtr'. + file extension. ``` ## output: ``` - s_vtkpathfile: vtk rectilinear grid file that contains - 3D distributions of all substrates over the microenvironment. + s_vtkpathfile: vtk rectilinear grid file that contains + 3D distributions of all substrates over the microenvironment. ``` ## description: ``` - function generates a vtk rectilinear grid file that contains - distribution of all substrates over microenvironment. - you can post-process this file in other software like paraview. + function generates a vtk rectilinear grid file that contains + distribution of all substrates over microenvironment. + you can post-process this file in other software like paraview. + + https://www.paraview.org/ - https://www.paraview.org/ - ``` \ No newline at end of file diff --git a/man/docstring/mcds.make_graph_gml.md b/man/docstring/mcds.make_graph_gml.md index d3dd4f1..eb53573 100644 --- a/man/docstring/mcds.make_graph_gml.md +++ b/man/docstring/mcds.make_graph_gml.md @@ -3,42 +3,42 @@ ## input: ``` - graph_type: string - to specify which physicell output data should be processed. - neighbor, touch: processes mcds.get_neighbor_graph_dict dictionary. - attached: processes mcds.get_attached_graph_dict dictionary. - spring: processes mcds.get_spring_graph_dict dictionary. + graph_type: string + to specify which physicell output data should be processed. + neighbor, touch: processes mcds.get_neighbor_graph_dict dictionary. + attached: processes mcds.get_attached_graph_dict dictionary. + spring: processes mcds.get_spring_graph_dict dictionary. - edge_attribute: boolean; default True - specifies if the spatial Euclidean distance is used for - edge attribute, to generate a weighted graph. + edge_attribute: boolean; default True + specifies if the spatial Euclidean distance is used for + edge attribute, to generate a weighted graph. - node_attribute: list of strings; default is empty list - list of mcds.get_cell_df dataframe columns, used for - node attributes. + node_attribute: list of strings; default is empty list + list of mcds.get_cell_df dataframe columns, used for + node attributes. ``` ## output: ``` - gml file, generated under the returned path. + gml file, generated under the returned path. ``` ## description: ``` - function to generate graph files in the gml graph modelling language - standard format. - - gml was the outcome of an initiative that started at - the international symposium on graph drawing 1995 in Passau - and ended at Graph Drawing 1996 in Berkeley. the networkx python - and igraph C and python libraries for graph analysis are - gml compatible and can as such read and write this file format. - - https://en.wikipedia.org/wiki/Graph_Modelling_Language - https://github.com/elmbeech/physicelldataloader/blob/master/man/publication/himsolt1996gml_a_portable_graph_file_format.pdf - https://networkx.org/ - https://igraph.org/ - + function to generate graph files in the gml graph modelling language + standard format. + + gml was the outcome of an initiative that started at + the international symposium on graph drawing 1995 in Passau + and ended at Graph Drawing 1996 in Berkeley. the networkx python + and igraph C and python libraries for graph analysis are + gml compatible and can as such read and write this file format. + + https://en.wikipedia.org/wiki/Graph_Modelling_Language + https://github.com/elmbeech/physicelldataloader/blob/master/man/publication/himsolt1996gml_a_portable_graph_file_format.pdf + https://networkx.org/ + https://igraph.org/ + ``` \ No newline at end of file diff --git a/man/docstring/mcds.make_ome_tiff.md b/man/docstring/mcds.make_ome_tiff.md index 9d78c3a..6b0974c 100644 --- a/man/docstring/mcds.make_ome_tiff.md +++ b/man/docstring/mcds.make_ome_tiff.md @@ -3,48 +3,48 @@ ## input: ``` - cell_attribute: strings; default is 'ID', which will result in a - cell segmentation mask. - column name within the cell dataframe. - the column data type has to be numeric (bool, int, float) - and cannot be string. - the result will be stored as 32 bit float. - - conc_cutoff: dictionary string to real; default is an empty dictionary. - if a contour from a substrate not should be cut by greater - than zero (shifted to integer 1), another cutoff value can be - specified here. - - focus: set of strings; default is a None - set of substrate and cell_type names to specify what will be - translated into ome tiff format. - if None, all substrates and cell types will be processed. - - file: boolean; default True - if True, an ome tiff file is the output. - if False, a numpy array with shape czyx is the output. + cell_attribute: strings; default is 'ID', which will result in a + cell segmentation mask. + column name within the cell dataframe. + the column data type has to be numeric (bool, int, float) + and cannot be string. + the result will be stored as 32 bit float. + + conc_cutoff: dictionary string to real; default is an empty dictionary. + if a contour from a substrate not should be cut by greater + than zero (shifted to integer 1), another cutoff value can be + specified here. + + focus: set of strings; default is a None + set of substrate and cell_type names to specify what will be + translated into ome tiff format. + if None, all substrates and cell types will be processed. + + file: boolean; default True + if True, an ome tiff file is the output. + if False, a numpy array with shape czyx is the output. ``` ## output: ``` - a_tczyx_img: numpy array or ome tiff file. + a_tczyx_img: numpy array or ome tiff file. ``` ## description: ``` - function to transform chosen mcds output into an 1[um] spaced - czyx (channel, z-axis, y-axis, x-axis) ome tiff file or numpy array, - one substrate or cell_type per channel. - an ome tiff file is more or less: - a numpy array, containing the image information - and a xml, containing the microscopy metadata information, - like the channel labels. - the ome tiff file format can for example be read by the napari - or fiji (imagej) software. - - https://napari.org/stable/ - https://fiji.sc/ - + function to transform chosen mcds output into an 1[um] spaced + czyx (channel, z-axis, y-axis, x-axis) ome tiff file or numpy array, + one substrate or cell_type per channel. + an ome tiff file is more or less: + a numpy array, containing the image information + and a xml, containing the microscopy metadata information, + like the channel labels. + the ome tiff file format can for example be read by the napari + or fiji (imagej) software. + + https://napari.org/stable/ + https://fiji.sc/ + ``` \ No newline at end of file diff --git a/man/docstring/mcds.plot_contour.md b/man/docstring/mcds.plot_contour.md index 8b2dd3a..5e9ad77 100644 --- a/man/docstring/mcds.plot_contour.md +++ b/man/docstring/mcds.plot_contour.md @@ -3,91 +3,91 @@ ## input: ``` - focus: string - column name within conc dataframe, for example substrate name. - - z_slice: floating point number; default is 0.0 - z-axis position to slice a 2D xy-plain out of the - 3D substrate concentration mesh. if z_slice position - is not an exact mesh center coordinate, then z_slice - will be adjusted to the nearest mesh center value, - the smaller one, if the coordinate lies on a saddle point. - - vmin: floating point number; default is None - color scale min value. - None will take the min value found in the data. - - vmax: floating point number; default is None - color scale max value. - None will take the max value found in the data. - - alpha: floating point number; default is 1 - alpha channel transparency value - between 1 (not transparent at all) and 0 (totally transparent). - - fill: boolean; default is True - True generates a matplotlib contourf plot. - False generates a matplotlib contour plot. - - cmap: string; default is viridis - matplotlib color map color label. - https://matplotlib.org/stable/tutorials/colors/colormaps.html - - title: string; default None - possible plot title string. - - grid: boolean; default True - should be plotted on a grid or on a blank page? - True will plot on a grid. - - xlim: tuple of two floating point numbers; default is None - to specify min and max x axis value. - None will extract agreeable values from the data. - - ylim: tuple of two floating point numbers; default is None - to specify min and max y axis value. - None will extract agreeable values from the data. - - xyequal: boolean; default True - to specify equal axis spacing for x and y axis. - - ax: matplotlib axis object; default setting is None - the ax object, which will be used as a canvas for plotting. - None will generate a figure and ax object from scratch. - - figsizepx: list of two integers; default is None - size of the figure in pixels, (x, y). - the given x and y will be rounded to the nearest even number, - to be able to generate movies from the images. - None tries to take the values from the initial.svg file. - fall back setting is [640, 480]. - - ext: string; default is None - output image format. possible formats are jpeg, png, and tiff. - None will return the matplotlib fig object. - - figbgcolor: string; default is None which is transparent (png) - or white (jpeg, tiff). - figure background color. - - **kwargs: possible additional keyword arguments input, - handled by the matplotlib contour and contourf function. - + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html - + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contourf.html + focus: string + column name within conc dataframe, for example substrate name. + + z_slice: floating point number; default is 0.0 + z-axis position to slice a 2D xy-plain out of the + 3D substrate concentration mesh. if z_slice position + is not an exact mesh center coordinate, then z_slice + will be adjusted to the nearest mesh center value, + the smaller one, if the coordinate lies on a saddle point. + + vmin: floating point number; default is None + color scale min value. + None will take the min value found in the data. + + vmax: floating point number; default is None + color scale max value. + None will take the max value found in the data. + + alpha: floating point number; default is 1 + alpha channel transparency value + between 1 (not transparent at all) and 0 (totally transparent). + + fill: boolean; default is True + True generates a matplotlib contourf plot. + False generates a matplotlib contour plot. + + cmap: string; default is viridis + matplotlib color map color label. + https://matplotlib.org/stable/tutorials/colors/colormaps.html + + title: string; default None + possible plot title string. + + grid: boolean; default True + should be plotted on a grid or on a blank page? + True will plot on a grid. + + xlim: tuple of two floating point numbers; default is None + to specify min and max x axis value. + None will extract agreeable values from the data. + + ylim: tuple of two floating point numbers; default is None + to specify min and max y axis value. + None will extract agreeable values from the data. + + xyequal: boolean; default True + to specify equal axis spacing for x and y axis. + + ax: matplotlib axis object; default setting is None + the ax object, which will be used as a canvas for plotting. + None will generate a figure and ax object from scratch. + + figsizepx: list of two integers; default is None + size of the figure in pixels, (x, y). + the given x and y will be rounded to the nearest even number, + to be able to generate movies from the images. + None tries to take the values from the initial.svg file. + fall back setting is [640, 480]. + + ext: string; default is None + output image format. possible formats are jpeg, png, and tiff. + None will return the matplotlib fig object. + + figbgcolor: string; default is None which is transparent (png) + or white (jpeg, tiff). + figure background color. + + **kwargs: possible additional keyword arguments input, + handled by the matplotlib contour and contourf function. + + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html + + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contourf.html ``` ## output: ``` - fig: matplotlib figure, depending on ext, either as object or as file. - the figure containing the contour plot and color bar. + fig: matplotlib figure, depending on ext, either as object or as file. + the figure containing the contour plot and color bar. ``` ## description: ``` - function returns a matplotlib contour (or contourf) plot, - inclusive color bar, for the focus specified, either - as matplotlib fig object or as jpeg, png, or tiff file. - + function returns a matplotlib contour (or contourf) plot, + inclusive color bar, for the focus specified, either + as matplotlib fig object or as jpeg, png, or tiff file. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.plot_scatter.md b/man/docstring/mcds.plot_scatter.md index 04daa67..623ce24 100644 --- a/man/docstring/mcds.plot_scatter.md +++ b/man/docstring/mcds.plot_scatter.md @@ -3,113 +3,113 @@ ## input: ``` - focus: string; default is 'cell_type' - column name within cell dataframe. - - cat_drop: set of strings; default is an empty set - if focus is a categorical attribute, - set of category labels to be dropped for the dataframe. - Attention: when the cat_keep parameter is given, then - the cat_drop parameter has to be an empty set! - - cat_keep: set of strings; default is an empty set - if focus is a categorical attribute, - set of category labels to be kept in the dataframe. - - z_slice: floating point number; default is 0.0 - z-axis position to slice a 2D xy-plain out of the - 3D substrate concentration mesh. if z_slice position - is not an exact mesh center coordinate, then z_slice - will be adjusted to the nearest mesh center value, - the smaller one, if the coordinate lies on a saddle point. - - z_axis: for a categorical focus: set of labels; - for a numeric focus: tuple of two floats; default is None - depending on the focus column variable dtype, default extracts - labels or min and max values from data. - - alpha: floating point number; default is 1.0 - alpha channel transparency value - between 1 (not transparent at all) and 0 (totally transparent). - - cmap: string or dictionary of strings or list of list of floats; default viridis. - matplotlib colormap string. e.g viridis - dictionary that maps labels to color or #hex strings. e.g. {'default': 'maroon'} - dictionary that maps labels to list of rgb floats. e.g. {'default': [0.5,0.0,0.0]} - https://matplotlib.org/stable/tutorials/colors/colormaps.html - - title: string; default None - possible plot title string. - - grid: boolean default True. - plot axis grid lines. - - legend_loc: string; default is 'lower left'. - the location of the categorical legend, if applicable. - possible strings are: best, - upper right, upper center, upper left, center left, - lower left, lower center, lower right, center right, - center, None, and False. - - xlim: tuple of two floats; default is None - x axis min and max value. - default takes min and max from mesh x axis range. - - ylim: tuple of two floats; default is None - y axis min and max value. - default takes min and max from mesh y axis range. - - xyequal: boolean; default True - to specify equal axis spacing for x and y axis. - - s: floating point number; default is 1.0 - scatter plot dot size scale factor. - adjust if necessary. - - ax: matplotlib axis object; default setting is None - the ax object, which will be used as a canvas for plotting. - None will generate a figure and ax object from scratch. - - figsizepx: list of two integers; default is None - size of the figure in pixels, (x, y). - the given x and y will be rounded to the nearest even number, - to be able to generate movies from the images. - None tries to take the values from the initial.svg file. - fall back setting is [640, 480]. - - ext: string; default is None - output image format. possible formats are jpeg, png, and tiff. - None will return the matplotlib fig object. - - figbgcolor: string; default is None which is transparent (png) - or white (jpeg, tiff). - figure background color. - - **kwargs: possible additional keyword arguments input, - handled by the pandas dataframe plot function. - + https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html + focus: string; default is 'cell_type' + column name within cell dataframe. + + cat_drop: set of strings; default is an empty set + if focus is a categorical attribute, + set of category labels to be dropped for the dataframe. + Attention: when the cat_keep parameter is given, then + the cat_drop parameter has to be an empty set! + + cat_keep: set of strings; default is an empty set + if focus is a categorical attribute, + set of category labels to be kept in the dataframe. + + z_slice: floating point number; default is 0.0 + z-axis position to slice a 2D xy-plain out of the + 3D substrate concentration mesh. if z_slice position + is not an exact mesh center coordinate, then z_slice + will be adjusted to the nearest mesh center value, + the smaller one, if the coordinate lies on a saddle point. + + z_axis: for a categorical focus: set of labels; + for a numeric focus: tuple of two floats; default is None + depending on the focus column variable dtype, default extracts + labels or min and max values from data. + + alpha: floating point number; default is 1.0 + alpha channel transparency value + between 1 (not transparent at all) and 0 (totally transparent). + + cmap: string or dictionary of strings or list of list of floats; default viridis. + matplotlib colormap string. e.g viridis + dictionary that maps labels to color or #hex strings. e.g. {'default': 'maroon'} + dictionary that maps labels to list of rgb floats. e.g. {'default': [0.5,0.0,0.0]} + https://matplotlib.org/stable/tutorials/colors/colormaps.html + + title: string; default None + possible plot title string. + + grid: boolean default True. + plot axis grid lines. + + legend_loc: string; default is 'lower left'. + the location of the categorical legend, if applicable. + possible strings are: best, + upper right, upper center, upper left, center left, + lower left, lower center, lower right, center right, + center, None, and False. + + xlim: tuple of two floats; default is None + x axis min and max value. + default takes min and max from mesh x axis range. + + ylim: tuple of two floats; default is None + y axis min and max value. + default takes min and max from mesh y axis range. + + xyequal: boolean; default True + to specify equal axis spacing for x and y axis. + + s: floating point number; default is 1.0 + scatter plot dot size scale factor. + adjust if necessary. + + ax: matplotlib axis object; default setting is None + the ax object, which will be used as a canvas for plotting. + None will generate a figure and ax object from scratch. + + figsizepx: list of two integers; default is None + size of the figure in pixels, (x, y). + the given x and y will be rounded to the nearest even number, + to be able to generate movies from the images. + None tries to take the values from the initial.svg file. + fall back setting is [640, 480]. + + ext: string; default is None + output image format. possible formats are jpeg, png, and tiff. + None will return the matplotlib fig object. + + figbgcolor: string; default is None which is transparent (png) + or white (jpeg, tiff). + figure background color. + + **kwargs: possible additional keyword arguments input, + handled by the pandas dataframe plot function. + + https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html ``` ## output: ``` - fig: matplotlib figure, depending on ext, either as object or as file. - the figure contains the scatter plot and color bar (numerical data) - or color legend (categorical data). + fig: matplotlib figure, depending on ext, either as object or as file. + the figure contains the scatter plot and color bar (numerical data) + or color legend (categorical data). ``` ## description: ``` - function returns a (pandas) matplotlib scatter plot, - inclusive color bar or color legend, for the focus specified, - either as matplotlib fig object or as jpeg, png, or tiff file. - - jpeg is by definition a lossy compressed image format. - png is by definition a lossless compressed image format. - tiff can by definition be a lossy or lossless compressed format. - https://en.wikipedia.org/wiki/JPEG - https://en.wikipedia.org/wiki/Portable_Network_Graphics - https://en.wikipedia.org/wiki/TIFF - + function returns a (pandas) matplotlib scatter plot, + inclusive color bar or color legend, for the focus specified, + either as matplotlib fig object or as jpeg, png, or tiff file. + + jpeg is by definition a lossy compressed image format. + png is by definition a lossless compressed image format. + tiff can by definition be a lossy or lossless compressed format. + https://en.wikipedia.org/wiki/JPEG + https://en.wikipedia.org/wiki/Portable_Network_Graphics + https://en.wikipedia.org/wiki/TIFF + ``` \ No newline at end of file diff --git a/man/docstring/mcds.set_verbose_false.md b/man/docstring/mcds.set_verbose_false.md index c4f6dd1..414712c 100644 --- a/man/docstring/mcds.set_verbose_false.md +++ b/man/docstring/mcds.set_verbose_false.md @@ -8,12 +8,12 @@ ## output: ``` - set verbose false. + set verbose false. ``` ## description: ``` - function to set verbosity. - + function to set verbosity. + ``` \ No newline at end of file diff --git a/man/docstring/mcds.set_verbose_true.md b/man/docstring/mcds.set_verbose_true.md index d7a029f..a17920b 100644 --- a/man/docstring/mcds.set_verbose_true.md +++ b/man/docstring/mcds.set_verbose_true.md @@ -8,12 +8,12 @@ ## output: ``` - set verbose true. + set verbose true. ``` ## description: ``` - function to set verbosity. - + function to set verbosity. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.__init__.md b/man/docstring/mcdsts.__init__.md index 7e1308d..c8f7059 100644 --- a/man/docstring/mcdsts.__init__.md +++ b/man/docstring/mcdsts.__init__.md @@ -3,55 +3,55 @@ ## input: ``` - output_path: string or list of mcds objects, default '.' - relative or absolute path to the directory where - the PhysiCell output files are stored or - a list of mcds timestep objects. - - custom_data_type: dictionary; default is {} - variable to specify custom_data variable types - other than float (int, bool, str) like this: {var: dtype, ...}. - downstream float and int will be handled as numeric, - bool as Boolean, and str as categorical data. - - load: boole; default True - should the whole time series data, all time steps, straight at - object initialization be read and stored to mcdsts.l_mcds? - - microenv: boole; default True - should the microenvironment data be loaded? - setting microenv to False will use less memory and speed up processing. - - graph: boole; default True - should the graphs, like cell_neighbor_graph.txt, be loaded? - setting graph to False will use less memory and speed up processing. - - physiboss: boole; default True - should physiboss state data be loaded, if found? - setting physiboss to False will use less memory and speed up processing. - - settingxml: string; default False - the settings.xml that is loaded, from which the cell type ID - label mapping, is extracted, if this information is not found - in the output xml file. - set to None or False if the xml file is missing! - - verbose: boole; default True - setting verbose to False for less text output, while processing. + output_path: string or list of mcds objects, default '.' + relative or absolute path to the directory where + the PhysiCell output files are stored or + a list of mcds timestep objects. + + custom_data_type: dictionary; default is {} + variable to specify custom_data variable types + other than float (int, bool, str) like this: {var: dtype, ...}. + downstream float and int will be handled as numeric, + bool as Boolean, and str as categorical data. + + load: boole; default True + should the whole time series data, all time steps, straight at + object initialization be read and stored to mcdsts.l_mcds? + + microenv: boole; default True + should the microenvironment data be loaded? + setting microenv to False will use less memory and speed up processing. + + graph: boole; default True + should the graphs, like cell_neighbor_graph.txt, be loaded? + setting graph to False will use less memory and speed up processing. + + physiboss: boole; default True + should physiboss state data be loaded, if found? + setting physiboss to False will use less memory and speed up processing. + + settingxml: string; default False + the settings.xml that is loaded, from which the cell type ID + label mapping, is extracted, if this information is not found + in the output xml file. + set to None or False if the xml file is missing! + + verbose: boole; default True + setting verbose to False for less text output, while processing. ``` ## output: ``` - mcdsts: TimeSeries class instance - this instance offers functions to process all stored time steps - from a simulation. + mcdsts: TimeSeries class instance + this instance offers functions to process all stored time steps + from a simulation. ``` ## description: ``` - TimeSeries.__init__ generates a class instance the instance offers - functions to process all time steps in the output_path directory. - + TimeSeries.__init__ generates a class instance the instance offers + functions to process all time steps in the output_path directory. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.custom_data_astype.md b/man/docstring/mcdsts.custom_data_astype.md index 9189810..8694b03 100644 --- a/man/docstring/mcdsts.custom_data_astype.md +++ b/man/docstring/mcdsts.custom_data_astype.md @@ -3,24 +3,24 @@ ## input: ``` - custom_data_type: dictionary; default is {} - variable to specify custom_data variable types other than - floats (namely: int, bool, str) like this: {var: dtype, ...}. - downstream float and int will be handled as numeric, - bool as Boolean, and str as categorical data. + custom_data_type: dictionary; default is {} + variable to specify custom_data variable types other than + floats (namely: int, bool, str) like this: {var: dtype, ...}. + downstream float and int will be handled as numeric, + bool as Boolean, and str as categorical data. ``` ## output: ``` - self.data['cell']['df_cell']: - the dtype of columns as specified in the custom_data_type dictionary. + self.data['cell']['df_cell']: + the dtype of columns as specified in the custom_data_type dictionary. ``` ## description: ``` - function to set the dtype of custom_data variables, - even after the data is loaded. - + function to set the dtype of custom_data variables, + even after the data is loaded. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_anndata.md b/man/docstring/mcdsts.get_anndata.md index a0e1c13..650c18b 100644 --- a/man/docstring/mcdsts.get_anndata.md +++ b/man/docstring/mcdsts.get_anndata.md @@ -3,49 +3,49 @@ ## input: ``` - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - don't worry: essential columns like ID, coordinates - and time will always be kept. - - scale: string; default 'maxabs' - specify how the data should be scaled. - possible values are None, maxabs, minmax, std. - for more input, check out: help(pcdl.scaler) - - collapse: boole; default True - should all mcds time steps from the time series be collapsed - into one single anndata object, or a list of anndata objects - for each time step? - - keep_mcds: boole; default True - should the loaded original mcds be kept in memory - after transformation? + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + don't worry: essential columns like ID, coordinates + and time will always be kept. + + scale: string; default 'maxabs' + specify how the data should be scaled. + possible values are None, maxabs, minmax, std. + for more input, check out: help(pcdl.scaler) + + collapse: boole; default True + should all mcds time steps from the time series be collapsed + into one single anndata object, or a list of anndata objects + for each time step? + + keep_mcds: boole; default True + should the loaded original mcds be kept in memory + after transformation? ``` ## output: ``` - annmcds or self.l_annmcds: anndata object or list of anndata objects. - what is returned depends on the collapse setting. + annmcds or self.l_annmcds: anndata object or list of anndata objects. + what is returned depends on the collapse setting. ``` ## description: ``` - function to transform mcds time steps into one or many - anndata objects for downstream analysis. - + function to transform mcds time steps into one or many + anndata objects for downstream analysis. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_annmcds_list.md b/man/docstring/mcdsts.get_annmcds_list.md index 2b52295..27f8253 100644 --- a/man/docstring/mcdsts.get_annmcds_list.md +++ b/man/docstring/mcdsts.get_annmcds_list.md @@ -3,20 +3,20 @@ ## input: ``` - self: TimeSeries class instance. + self: TimeSeries class instance. ``` ## output: ``` - self.l_annmcds: list of chronologically ordered anndata mcds objects. - watch out, this is a pointer to the - self.l_annmcds list of anndata mcds objects, not a copy of self.l_annmcds! + self.l_annmcds: list of chronologically ordered anndata mcds objects. + watch out, this is a pointer to the + self.l_annmcds list of anndata mcds objects, not a copy of self.l_annmcds! ``` ## description: ``` - function returns a binding to the self.l_annmcds list of anndata mcds objects. - + function returns a binding to the self.l_annmcds list of anndata mcds objects. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_cell_attribute.md b/man/docstring/mcdsts.get_cell_attribute.md index fb7ce0d..1a87f39 100644 --- a/man/docstring/mcdsts.get_cell_attribute.md +++ b/man/docstring/mcdsts.get_cell_attribute.md @@ -3,50 +3,50 @@ ## input: ``` - self: TimeSeries class instance. - - values: integer; default is 1 - minimal number of values a variable has to have - in any of the mcds time steps to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates - and time will always be kept. - - allvalues: boolean; default is False - for numeric data, should only the min and max values or - all values be returned? + self: TimeSeries class instance. + + values: integer; default is 1 + minimal number of values a variable has to have + in any of the mcds time steps to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates + and time will always be kept. + + allvalues: boolean; default is False + for numeric data, should only the min and max values or + all values be returned? ``` ## output: ``` - dl_variable: dictionary of list - dictionary with an entry of all non-coordinate column names - that at least in one of the time steps or in between - time steps, reach the given minimal value count. - key is the column name, mapped is a list of all values - (bool, str, and, if allvalues is True, int and float) or - a list with minimum and maximum values (int, float). + dl_variable: dictionary of list + dictionary with an entry of all non-coordinate column names + that at least in one of the time steps or in between + time steps, reach the given minimal value count. + key is the column name, mapped is a list of all values + (bool, str, and, if allvalues is True, int and float) or + a list with minimum and maximum values (int, float). ``` ## description: ``` - function to detect informative variables in a time series. - this function detects even variables which have less than the - minimal state count in each time step, but different values - from time step to time step. - + function to detect informative variables in a time series. + this function detects even variables which have less than the + minimal state count in each time step, but different values + from time step to time step. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_cell_df.md b/man/docstring/mcdsts.get_cell_df.md index b9313ec..2652f35 100644 --- a/man/docstring/mcdsts.get_cell_df.md +++ b/man/docstring/mcdsts.get_cell_df.md @@ -3,47 +3,47 @@ ## input: ``` - self: TimeSeries class instance. - - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates, - time and runtime (wall time) will always be kept. - - collapse: boole; default True - should all mcds time steps from the time series be collapsed - into one pandas dataframe object, or a list of dataframe objects - for each time step? + self: TimeSeries class instance. + + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates, + time and runtime (wall time) will always be kept. + + collapse: boole; default True + should all mcds time steps from the time series be collapsed + into one pandas dataframe object, or a list of dataframe objects + for each time step? ``` ## output: ``` - df_cell or ldf_cell: pandas dataframe or list of dataframe - dataframe stores one cell per row, all tracked variables - values related to this cell. the variables are cell_position, - mesh_center, and voxel coordinates, all cell_variables, - all substrate rates and concentrations, and additional - the surrounding cell density. + df_cell or ldf_cell: pandas dataframe or list of dataframe + dataframe stores one cell per row, all tracked variables + values related to this cell. the variables are cell_position, + mesh_center, and voxel coordinates, all cell_variables, + all substrate rates and concentrations, and additional + the surrounding cell density. ``` ## description: ``` - function returns for the whole time series one or many dataframes - with a cell centric view of the simulation. - + function returns for the whole time series one or many dataframes + with a cell centric view of the simulation. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_conc_attribute.md b/man/docstring/mcdsts.get_conc_attribute.md index fabb81e..0e90247 100644 --- a/man/docstring/mcdsts.get_conc_attribute.md +++ b/man/docstring/mcdsts.get_conc_attribute.md @@ -3,49 +3,49 @@ ## input: ``` - self: TimeSeries class instance. - - values: integer; default is 1 - minimal number of values a variable has to have - in any of the mcds time steps to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates - and time will always be kept. - - allvalues: boolean; default is False - should only the min and max values or all values be returned? + self: TimeSeries class instance. + + values: integer; default is 1 + minimal number of values a variable has to have + in any of the mcds time steps to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates + and time will always be kept. + + allvalues: boolean; default is False + should only the min and max values or all values be returned? ``` ## output: ``` - dl_variable: dictionary of list - dictionary with an entry of all non-coordinate column names - that at least in one of the time steps or in between time - steps, reach the given minimal state count. - key is the column name, mapped is a list of all values - (bool, str, and, if allvalues is True, int and float) - or a list with minimum and maximum values (int, float). + dl_variable: dictionary of list + dictionary with an entry of all non-coordinate column names + that at least in one of the time steps or in between time + steps, reach the given minimal state count. + key is the column name, mapped is a list of all values + (bool, str, and, if allvalues is True, int and float) + or a list with minimum and maximum values (int, float). ``` ## description: ``` - function to detect informative substrate concentration variables - in a time series. this function detects even variables which have - less than the minimal state count in each time step, but - different values from time step to time step. - + function to detect informative substrate concentration variables + in a time series. this function detects even variables which have + less than the minimal state count in each time step, but + different values from time step to time step. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_conc_df.md b/man/docstring/mcdsts.get_conc_df.md index fcc0013..5070107 100644 --- a/man/docstring/mcdsts.get_conc_df.md +++ b/man/docstring/mcdsts.get_conc_df.md @@ -3,44 +3,44 @@ ## input: ``` - self: TimeSeries class instance. - - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates, - time and runtime (wall time) will always be kept. - - collapse: boole; default True - should all mcds time steps from the time series be collapsed - into one pandas dataframe object, or a list of dataframe objects - for each time step? + self: TimeSeries class instance. + + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates, + time and runtime (wall time) will always be kept. + + collapse: boole; default True + should all mcds time steps from the time series be collapsed + into one pandas dataframe object, or a list of dataframe objects + for each time step? ``` ## output: ``` - df_conc or ldf_conc: pandas dataframe or list of dataframe - dataframe stores all substrate concentrations in each voxel. + df_conc or ldf_conc: pandas dataframe or list of dataframe + dataframe stores all substrate concentrations in each voxel. ``` ## description: ``` - function returns for the whole time series in one or many dataframes - with concentration values for all chemical species in all voxels. - additionally, this dataframe lists voxel and mesh center coordinates. - + function returns for the whole time series in one or many dataframes + with concentration values for all chemical species in all voxels. + additionally, this dataframe lists voxel and mesh center coordinates. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_mcds_list.md b/man/docstring/mcdsts.get_mcds_list.md index 10db3d9..fc446ea 100644 --- a/man/docstring/mcdsts.get_mcds_list.md +++ b/man/docstring/mcdsts.get_mcds_list.md @@ -3,20 +3,20 @@ ## input: ``` - self: TimeSeries class instance. + self: TimeSeries class instance. ``` ## output: ``` - self.l_mcds: list of chronologically ordered mcds objects. - watch out, this is a pointer to the - self.l_mcds list of mcds objects, not a copy of self.l_mcds! + self.l_mcds: list of chronologically ordered mcds objects. + watch out, this is a pointer to the + self.l_mcds list of mcds objects, not a copy of self.l_mcds! ``` ## description: ``` - function returns a pointer to the self.l_mcds list of mcds objects. - + function returns a pointer to the self.l_mcds list of mcds objects. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_muspan.md b/man/docstring/mcdsts.get_muspan.md index 4f0d5a7..3c1910a 100644 --- a/man/docstring/mcdsts.get_muspan.md +++ b/man/docstring/mcdsts.get_muspan.md @@ -3,42 +3,42 @@ ## input: ``` - z_slice: floating point number; default is None - z-axis position to slice a 2D xy-plain out of the - 3D mesh. if None the whole 3D mesh will be returned. - - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. - - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! - - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - set values=1 to be sure that all variables are kept. - don't worry: essential columns like ID, coordinates - and time will always be kept. + z_slice: floating point number; default is None + z-axis position to slice a 2D xy-plain out of the + 3D mesh. if None the whole 3D mesh will be returned. + + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. + + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! + + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + set values=1 to be sure that all variables are kept. + don't worry: essential columns like ID, coordinates + and time will always be kept. ``` ## output: ``` - do_domain: dictionary of muspa domains, one for each time step z-layer. + do_domain: dictionary of muspa domains, one for each time step z-layer. ``` ## description: ``` - function returns a dictionary of muspa domains, containg a - cell and subs collection with disrcete and continuous labels - and all the graph as networks. - + https://www.muspan.co.uk - + https://docs.muspan.co.uk/latest/Documentation.html - + function returns a dictionary of muspa domains, containg a + cell and subs collection with disrcete and continuous labels + and all the graph as networks. + + https://www.muspan.co.uk + + https://docs.muspan.co.uk/latest/Documentation.html + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_spatialdata.md b/man/docstring/mcdsts.get_spatialdata.md index bfc6cf1..fa2928a 100644 --- a/man/docstring/mcdsts.get_spatialdata.md +++ b/man/docstring/mcdsts.get_spatialdata.md @@ -3,63 +3,63 @@ ## input: ``` - images: set of string; default {'subs'} - specify if from the subs or cell dataset - a multichannel image should be generate. - so far, only the subs image element is implemented. + images: set of string; default {'subs'} + specify if from the subs or cell dataset + a multichannel image should be generate. + so far, only the subs image element is implemented. - labels: set of strings; default is an empty set - specify if from the subs or cell dataset - a label element should be generated. - so far, neither subs nor cell label elements are implemented. + labels: set of strings; default is an empty set + specify if from the subs or cell dataset + a label element should be generated. + so far, neither subs nor cell label elements are implemented. - points: set of string; default {'subs'} - specify if from the subs or cell dataset - a points element should be generated. - both, subs and cell point elements, are implemented. + points: set of string; default {'subs'} + specify if from the subs or cell dataset + a points element should be generated. + both, subs and cell point elements, are implemented. - shapes: set of string; default {'cell'} - specify if from the subs or cell dataset - a shape element should be generated. - so far, only the cell shape element is implemented. + shapes: set of string; default {'cell'} + specify if from the subs or cell dataset + a shape element should be generated. + so far, only the cell shape element is implemented. - values: integer; default is 1 - minimal number of values a variable has to have to be outputted. - variables that have only 1 state carry no information. - None is a state too. + values: integer; default is 1 + minimal number of values a variable has to have to be outputted. + variables that have only 1 state carry no information. + None is a state too. - drop: set of strings; default is an empty set - set of column labels to be dropped for the dataframe. - don't worry: essential columns like ID, coordinates - and time will never be dropped. - Attention: when the keep parameter is given, then - the drop parameter has to be an empty set! + drop: set of strings; default is an empty set + set of column labels to be dropped for the dataframe. + don't worry: essential columns like ID, coordinates + and time will never be dropped. + Attention: when the keep parameter is given, then + the drop parameter has to be an empty set! - keep: set of strings; default is an empty set - set of column labels to be kept in the dataframe. - don't worry: essential columns like ID, coordinates - and time will always be kept. + keep: set of strings; default is an empty set + set of column labels to be kept in the dataframe. + don't worry: essential columns like ID, coordinates + and time will always be kept. - scale: string; default 'maxabs' - specify how the data should be scaled. - possible values are None, maxabs, minmax, std. - for more input, check out: help(pcdl.scaler) + scale: string; default 'maxabs' + specify how the data should be scaled. + possible values are None, maxabs, minmax, std. + for more input, check out: help(pcdl.scaler) - keep_mcds: boole; default True - should the loaded original mcds be kept in memory - after transformation? + keep_mcds: boole; default True + should the loaded original mcds be kept in memory + after transformation? ``` ## output: ``` - self.l_sdmcds: list of spatialdata objects. + self.l_sdmcds: list of spatialdata objects. ``` ## description: ``` - function to transform mcds time steps into - spatialdata objects for downstream analysis. - + function to transform mcds time steps into + spatialdata objects for downstream analysis. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.get_xmlfile_list.md b/man/docstring/mcdsts.get_xmlfile_list.md index 50ea8c8..28cc6e1 100644 --- a/man/docstring/mcdsts.get_xmlfile_list.md +++ b/man/docstring/mcdsts.get_xmlfile_list.md @@ -3,22 +3,22 @@ ## input: ``` - self: TimeSeries class instance. + self: TimeSeries class instance. ``` ## output: ``` - xmlfile_list: list of strings - alphanumerical sorted list of output*.xml strings. + xmlfile_list: list of strings + alphanumerical sorted list of output*.xml strings. ``` ## description: ``` - function returns an alphanumerical (and as such chronological) - ordered list of physicell xml path and output file names. the - list can be manipulated and used as input for the - mcdsts.read_mcds function. - + function returns an alphanumerical (and as such chronological) + ordered list of physicell xml path and output file names. the + list can be manipulated and used as input for the + mcdsts.read_mcds function. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.make_cell_vtk.md b/man/docstring/mcdsts.make_cell_vtk.md index 6142a99..4d55cc4 100644 --- a/man/docstring/mcdsts.make_cell_vtk.md +++ b/man/docstring/mcdsts.make_cell_vtk.md @@ -3,28 +3,28 @@ ## input: ``` - attribute: list of strings; default is ['cell_type'] - column name within cell dataframe. + attribute: list of strings; default is ['cell_type'] + column name within cell dataframe. - ext: string; default '_cell.vtp'. - file extension. + ext: string; default '_cell.vtp'. + file extension. ``` ## output: ``` - ls_vtkpathfile: one 3D glyph vtk file per mcds time step - that contains cells. + ls_vtkpathfile: one 3D glyph vtk file per mcds time step + that contains cells. ``` ## description: ``` - function that generates 3D glyph vtk files for cells. - one file per mcds time step. cells can have specified attributes - like cell_type, pressure, dead, etc. - you can post-process this file in other software like paraview. + function that generates 3D glyph vtk files for cells. + one file per mcds time step. cells can have specified attributes + like cell_type, pressure, dead, etc. + you can post-process this file in other software like paraview. + + https://www.paraview.org/ - https://www.paraview.org/ - ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.make_conc_vtk.md b/man/docstring/mcdsts.make_conc_vtk.md index 9251931..2903fee 100644 --- a/man/docstring/mcdsts.make_conc_vtk.md +++ b/man/docstring/mcdsts.make_conc_vtk.md @@ -3,26 +3,26 @@ ## input: ``` - ext: string; default '_conc.vtr'. - file extension. + ext: string; default '_conc.vtr'. + file extension. ``` ## output: ``` - ls_vtkpathfile: one vtk file per mcds time step that contains - 3D distributions of all substrates over the microenvironment - with corresponding time stamp. + ls_vtkpathfile: one vtk file per mcds time step that contains + 3D distributions of all substrates over the microenvironment + with corresponding time stamp. ``` ## description: ``` - function generates rectilinear grid vtk files, one file - per mcds time step that contains distribution of substrates - over microenvironment. - you can post-process this file in other software like paraview. + function generates rectilinear grid vtk files, one file + per mcds time step that contains distribution of substrates + over microenvironment. + you can post-process this file in other software like paraview. + + https://www.paraview.org/ - https://www.paraview.org/ - ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.make_graph_gml.md b/man/docstring/mcdsts.make_graph_gml.md index c4e4bb3..d7a2b12 100644 --- a/man/docstring/mcdsts.make_graph_gml.md +++ b/man/docstring/mcdsts.make_graph_gml.md @@ -3,45 +3,45 @@ ## input: ``` - self: TimeSeries class instance. + self: TimeSeries class instance. - graph_type: string - to specify which physicell output data should be processed. - attached, touch: processes mcds.get_attached_graph_dict dictionary. - neighbor: processes mcds.get_neighbor_graph_dict dictionary. - spring: processes mcds.get_spring_graph_dict dictionary. + graph_type: string + to specify which physicell output data should be processed. + attached, touch: processes mcds.get_attached_graph_dict dictionary. + neighbor: processes mcds.get_neighbor_graph_dict dictionary. + spring: processes mcds.get_spring_graph_dict dictionary. - edge_attribute: boolean; default True - specifies if the spatial Euclidean distance is used for - edge attribute, to generate a weighted graph. + edge_attribute: boolean; default True + specifies if the spatial Euclidean distance is used for + edge attribute, to generate a weighted graph. - node_attribute: list of strings; default is empty list - list of mcds.get_cell_df dataframe columns, used for - node attributes. + node_attribute: list of strings; default is empty list + list of mcds.get_cell_df dataframe columns, used for + node attributes. ``` ## output: ``` - gml file for each time step. - path and filenames are printed to the standard output. + gml file for each time step. + path and filenames are printed to the standard output. ``` ## description: ``` - function to generate graph files in the gml graph modelling language - standard format. - - gml was the outcome of an initiative that started at - the international symposium on graph drawing 1995 in Passau - and ended at Graph Drawing 1996 in Berkeley. the networkx python - and igraph C and python libraries for graph analysis are - gml compatible and can as such read and write this file format. - - https://en.wikipedia.org/wiki/Graph_Modelling_Language - https://github.com/elmbeech/physicelldataloader/blob/master/man/publication/himsolt1996gml_a_portable_graph_file_format.pdf - https://networkx.org/ - https://igraph.org/ - + function to generate graph files in the gml graph modelling language + standard format. + + gml was the outcome of an initiative that started at + the international symposium on graph drawing 1995 in Passau + and ended at Graph Drawing 1996 in Berkeley. the networkx python + and igraph C and python libraries for graph analysis are + gml compatible and can as such read and write this file format. + + https://en.wikipedia.org/wiki/Graph_Modelling_Language + https://github.com/elmbeech/physicelldataloader/blob/master/man/publication/himsolt1996gml_a_portable_graph_file_format.pdf + https://networkx.org/ + https://igraph.org/ + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.make_ome_tiff.md b/man/docstring/mcdsts.make_ome_tiff.md index f9b9ca9..b072b13 100644 --- a/man/docstring/mcdsts.make_ome_tiff.md +++ b/man/docstring/mcdsts.make_ome_tiff.md @@ -3,53 +3,53 @@ ## input: ``` - cell_attribute: strings; default is 'ID', which will result in a - cell segmentation mask. - column name within the cell dataframe. - the column data type has to be numeric (bool, int, float) - and cannot be string. - the result will be stored as 32 bit float. - - conc_cutoff: dictionary string to real; default is an empty dictionary. - if a contour from a substrate not should be cut by greater - than zero (shifted to integer 1), another cutoff value can be specified here. - - focus: set of strings; default is a None - set of substrate and cell_type names to specify what will be - translated into ome tiff format. - if None, all substrates and cell types will be processed. - - file: boolean; default True - if True, an ome tiff file is the output. - if False, a numpy array with shape tczyx is the output. - - collapse: boole; default True - should all mcds time steps from the time series be collapsed - into one ome tiff file (numpy array), - or an ome tiff file (numpy array) for each time step? + cell_attribute: strings; default is 'ID', which will result in a + cell segmentation mask. + column name within the cell dataframe. + the column data type has to be numeric (bool, int, float) + and cannot be string. + the result will be stored as 32 bit float. + + conc_cutoff: dictionary string to real; default is an empty dictionary. + if a contour from a substrate not should be cut by greater + than zero (shifted to integer 1), another cutoff value can be specified here. + + focus: set of strings; default is a None + set of substrate and cell_type names to specify what will be + translated into ome tiff format. + if None, all substrates and cell types will be processed. + + file: boolean; default True + if True, an ome tiff file is the output. + if False, a numpy array with shape tczyx is the output. + + collapse: boole; default True + should all mcds time steps from the time series be collapsed + into one ome tiff file (numpy array), + or an ome tiff file (numpy array) for each time step? ``` ## output: ``` - a_tczyx_img: numpy array or ome tiff file. + a_tczyx_img: numpy array or ome tiff file. ``` ## description: ``` - function to transform chosen mcdsts output into an 1[um] spaced - tczyx (time, channel, z-axis, y-axis, x-axis) ome tiff file or numpy array, - one substrate or cell_type per channel. - a ome tiff file is more or less: - a numpy array, containing the image information - and a xml, containing the microscopy metadata information, - like the channel labels. - the ome tiff file format can for example be read by the napari - or fiji (imagej) software. - - https://napari.org/stable/ - https://fiji.sc/ - + function to transform chosen mcdsts output into an 1[um] spaced + tczyx (time, channel, z-axis, y-axis, x-axis) ome tiff file or numpy array, + one substrate or cell_type per channel. + a ome tiff file is more or less: + a numpy array, containing the image information + and a xml, containing the microscopy metadata information, + like the channel labels. + the ome tiff file format can for example be read by the napari + or fiji (imagej) software. + + https://napari.org/stable/ + https://fiji.sc/ + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.plot_contour.md b/man/docstring/mcdsts.plot_contour.md index aaeb7d0..69be00c 100644 --- a/man/docstring/mcdsts.plot_contour.md +++ b/man/docstring/mcdsts.plot_contour.md @@ -3,96 +3,96 @@ ## input: ``` - self: TimeSeries class instance + self: TimeSeries class instance - focus: string - column name within conc dataframe, for example. + focus: string + column name within conc dataframe, for example. - z_slice: floating point number; default is 0.0 - z-axis position to slice a 2D xy-plain out of the - 3D substrate concentration mesh. if z_slice position - is not an exact mesh center coordinate, then z_slice - will be adjusted to the nearest mesh center value, - the smaller one, if the coordinate lies on a saddle point. + z_slice: floating point number; default is 0.0 + z-axis position to slice a 2D xy-plain out of the + 3D substrate concentration mesh. if z_slice position + is not an exact mesh center coordinate, then z_slice + will be adjusted to the nearest mesh center value, + the smaller one, if the coordinate lies on a saddle point. - vmin: floating point number; default is None - color scale min value. - None will take the min value from the whole time series - found in the data. + vmin: floating point number; default is None + color scale min value. + None will take the min value from the whole time series + found in the data. - vmax: floating point number; default is None - color scale max value. - None will take the min value from the whole time series - found in the data. + vmax: floating point number; default is None + color scale max value. + None will take the min value from the whole time series + found in the data. - alpha: floating point number; default is 1 - alpha channel transparency value - between 1 (not transparent at all) and 0 (totally transparent). + alpha: floating point number; default is 1 + alpha channel transparency value + between 1 (not transparent at all) and 0 (totally transparent). - fill: boolean; default True - True generates a matplotlib contourf plot. - False generates a matplotlib contour plot. + fill: boolean; default True + True generates a matplotlib contourf plot. + False generates a matplotlib contour plot. - title: string; default is '' - title prefix. + title: string; default is '' + title prefix. - cmap: string; default viridis. - matplotlib colormap. - https://matplotlib.org/stable/tutorials/colors/colormaps.html + cmap: string; default viridis. + matplotlib colormap. + https://matplotlib.org/stable/tutorials/colors/colormaps.html - grid: boolean; default True. - plot axis grid lines. + grid: boolean; default True. + plot axis grid lines. - xlim: tuple of two floats; default is None - x axis min and max value. - default takes min and max from mesh x axis range. + xlim: tuple of two floats; default is None + x axis min and max value. + default takes min and max from mesh x axis range. - ylim: tuple of two floats; default is None - y axis min and max value. - default takes min and max from mesh y axis range. + ylim: tuple of two floats; default is None + y axis min and max value. + default takes min and max from mesh y axis range. - xyequal: boolean; default True - to specify equal axis spacing for x and y axis. + xyequal: boolean; default True + to specify equal axis spacing for x and y axis. - figsizepx: list of two integers; default is None - size of the figure in pixels, (x, y). - the given x and y will be rounded to the nearest even number, - to be able to generate movies from the images. - None tries to take the values from the initial.svg file. - fall back setting is [640, 480]. + figsizepx: list of two integers; default is None + size of the figure in pixels, (x, y). + the given x and y will be rounded to the nearest even number, + to be able to generate movies from the images. + None tries to take the values from the initial.svg file. + fall back setting is [640, 480]. - ext: string; default is jpeg - output image format. possible formats are jpeg, png, and tiff. - None will return the matplotlib fig object. + ext: string; default is jpeg + output image format. possible formats are jpeg, png, and tiff. + None will return the matplotlib fig object. - figbgcolor: string; default is None which is transparent (png) - or white (jpeg, tiff). - figure background color. + figbgcolor: string; default is None which is transparent (png) + or white (jpeg, tiff). + figure background color. - **kwargs: possible additional keyword arguments input, - handled by the matplotlib contour and contourf function. - + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html - + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contourf.html + **kwargs: possible additional keyword arguments input, + handled by the matplotlib contour and contourf function. + + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contour.html + + https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.contourf.html ``` ## output: ``` - fig: matplotlib figures, depending on ext, either as files or as - objects. the figures contains the contour plot and color bar. + fig: matplotlib figures, depending on ext, either as files or as + objects. the figures contains the contour plot and color bar. ``` ## description: ``` - this function generates a matplotlib contour (or contourf) plot - time series. - - jpeg is by definition a lossy compressed image format. - png is by definition a lossless compressed image format. - tiff can by definition be a lossy or lossless compressed format. - https://en.wikipedia.org/wiki/JPEG - https://en.wikipedia.org/wiki/Portable_Network_Graphics - https://en.wikipedia.org/wiki/TIFF - + this function generates a matplotlib contour (or contourf) plot + time series. + + jpeg is by definition a lossy compressed image format. + png is by definition a lossless compressed image format. + tiff can by definition be a lossy or lossless compressed format. + https://en.wikipedia.org/wiki/JPEG + https://en.wikipedia.org/wiki/Portable_Network_Graphics + https://en.wikipedia.org/wiki/TIFF + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.plot_scatter.md b/man/docstring/mcdsts.plot_scatter.md index 43731cd..f5ede7a 100644 --- a/man/docstring/mcdsts.plot_scatter.md +++ b/man/docstring/mcdsts.plot_scatter.md @@ -3,111 +3,111 @@ ## input: ``` - self: TimeSeries class instance - - focus: string; default is 'cell_type' - column name within cell dataframe. - - cat_drop: set of strings; default is an empty set - if focus is a categorical attribute, - set of category labels to be dropped for the dataframe. - Attention: when the cat_keep parameter is given, then - the cat_drop parameter has to be an empty set! - - cat_keep: set of strings; default is an empty set - if focus is a categorical attribute, - set of category labels to be kept in the dataframe. - - z_slice: floating point number; default is 0.0 - z-axis position to slice a 2D xy-plain out of the 3D mesh. - if z_slice position is not an exact mesh center coordinate, - then z_slice will be adjusted to the nearest mesh center value, - the smaller one, if the coordinate lies on a saddle point. - - z_axis: for a categorical focus: set of labels; - for a numeric focus: tuple of two floats; default is None - depending on the focus column variable dtype, default extracts - labels or min and max values from data. - - alpha: floating point number; default is 1 - alpha channel transparency value - between 1 (not transparent at all) and 0 (totally transparent). - - cmap: dictionary of strings or string; default viridis. - dictionary that maps labels to colors strings. - matplotlib colormap string. - https://matplotlib.org/stable/tutorials/colors/colormaps.html - - title: string; default is '' - title prefix. - - grid: boolean; default is True. - plot axis grid lines. - - legend_loc: string; default is 'lower left'. - the location of the categorical legend, if applicable. - possible strings are: best, - upper right, upper center, upper left, center left, - lower left, lower center, lower right, center right, - center. - - xlim: tuple of two floats; default is None - x axis min and max value. - default takes min and max from mesh x axis range. - - ylim: tuple of two floats; default is None - y axis min and max value. - default takes min and max from mesh y axis range. - - xyequal: boolean; default True - to specify equal axis spacing for x and y axis. - - s: floating point number; default is 1.0 - scatter plot dot size scale factor. - with figsizepx extracted from initial.svg, scale factor 1.0 - should be ok. adjust if necessary. - - figsizepx: list of two integers; default is None - size of the figure in pixels, (x, y). - the given x and y will be rounded to the nearest even number, - to be able to generate movies from the images. - None tries to take the values from the initial.svg file. - fall back setting is [640, 480]. - - ext: string; default is jpeg - output image format. possible formats are jpeg, png, and tiff. - None will return the matplotlib fig object. - - figbgcolor: string; default is None which is transparent (png) - or white (jpeg, tiff). - figure background color. - - **kwargs: possible additional keyword arguments input, - handled by the pandas dataframe plot function. - + https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame + self: TimeSeries class instance + + focus: string; default is 'cell_type' + column name within cell dataframe. + + cat_drop: set of strings; default is an empty set + if focus is a categorical attribute, + set of category labels to be dropped for the dataframe. + Attention: when the cat_keep parameter is given, then + the cat_drop parameter has to be an empty set! + + cat_keep: set of strings; default is an empty set + if focus is a categorical attribute, + set of category labels to be kept in the dataframe. + + z_slice: floating point number; default is 0.0 + z-axis position to slice a 2D xy-plain out of the 3D mesh. + if z_slice position is not an exact mesh center coordinate, + then z_slice will be adjusted to the nearest mesh center value, + the smaller one, if the coordinate lies on a saddle point. + + z_axis: for a categorical focus: set of labels; + for a numeric focus: tuple of two floats; default is None + depending on the focus column variable dtype, default extracts + labels or min and max values from data. + + alpha: floating point number; default is 1 + alpha channel transparency value + between 1 (not transparent at all) and 0 (totally transparent). + + cmap: dictionary of strings or string; default viridis. + dictionary that maps labels to colors strings. + matplotlib colormap string. + https://matplotlib.org/stable/tutorials/colors/colormaps.html + + title: string; default is '' + title prefix. + + grid: boolean; default is True. + plot axis grid lines. + + legend_loc: string; default is 'lower left'. + the location of the categorical legend, if applicable. + possible strings are: best, + upper right, upper center, upper left, center left, + lower left, lower center, lower right, center right, + center. + + xlim: tuple of two floats; default is None + x axis min and max value. + default takes min and max from mesh x axis range. + + ylim: tuple of two floats; default is None + y axis min and max value. + default takes min and max from mesh y axis range. + + xyequal: boolean; default True + to specify equal axis spacing for x and y axis. + + s: floating point number; default is 1.0 + scatter plot dot size scale factor. + with figsizepx extracted from initial.svg, scale factor 1.0 + should be ok. adjust if necessary. + + figsizepx: list of two integers; default is None + size of the figure in pixels, (x, y). + the given x and y will be rounded to the nearest even number, + to be able to generate movies from the images. + None tries to take the values from the initial.svg file. + fall back setting is [640, 480]. + + ext: string; default is jpeg + output image format. possible formats are jpeg, png, and tiff. + None will return the matplotlib fig object. + + figbgcolor: string; default is None which is transparent (png) + or white (jpeg, tiff). + figure background color. + + **kwargs: possible additional keyword arguments input, + handled by the pandas dataframe plot function. + + https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame ``` ## output: ``` - fig: matplotlib figures, depending on ext, either as files or - as objects. the figures contains the scatter plot and - color bar (numerical data) or color legend (categorical data). + fig: matplotlib figures, depending on ext, either as files or + as objects. the figures contains the scatter plot and + color bar (numerical data) or color legend (categorical data). ``` ## description: ``` - function returns a (pandas) matplotlib scatter plotts, - inclusive color bar or color legend, for the whole time series, - for the focus specified, either as matplotlib fig object - or as jpeg, png, or tiff file. - - jpeg is by definition a lossy compressed image format. - png is by definition a lossless compressed image format. - tiff can by definition be a lossy or lossless compressed format. - https://en.wikipedia.org/wiki/JPEG - https://en.wikipedia.org/wiki/Portable_Network_Graphics - https://en.wikipedia.org/wiki/TIFF - + function returns a (pandas) matplotlib scatter plotts, + inclusive color bar or color legend, for the whole time series, + for the focus specified, either as matplotlib fig object + or as jpeg, png, or tiff file. + + jpeg is by definition a lossy compressed image format. + png is by definition a lossless compressed image format. + tiff can by definition be a lossy or lossless compressed format. + https://en.wikipedia.org/wiki/JPEG + https://en.wikipedia.org/wiki/Portable_Network_Graphics + https://en.wikipedia.org/wiki/TIFF + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.plot_timeseries.md b/man/docstring/mcdsts.plot_timeseries.md index d226baa..77949de 100644 --- a/man/docstring/mcdsts.plot_timeseries.md +++ b/man/docstring/mcdsts.plot_timeseries.md @@ -3,139 +3,139 @@ ## input: ``` - self: TimeSeries class instance - - focus_cat: string; default is None - categorical or boolean data column within dataframe specified under frame. - default is None, which is total, which is all agents or voxels, no categories. - - focus_num: string; default is None - numerical data column within dataframe specified under frame. - default is None, which is count, agent or voxel count. - - aggregate_num: function; default np.nanmean - aggregation function for focus_num data. - - frame: string; default is cell_df - to specifies the data dataframe. - cell: dataframe will be retrieved through the mcds.get_cell_df function. - conc: dataframe will be retrieved through the mcds.get_conc_df function. - - cat_drop: set of strings; default is an empty set - if focus is a categorical attribute, - set of category labels to be dropped for the dataframe. - Attention: when the cat_keep parameter is given, then - the cat_drop parameter has to be an empty set! - - cat_keep: set of strings; default is an empty set - if focus is a categorical attribute, - set of category labels to be kept in the dataframe. - - z_slice: floating point number; default is None - z-axis position to slice a 2D xy-plain out of the 3D mesh. - if z_slice position numeric but not an exact mesh center coordinate, - then z_slice will be adjusted to the nearest mesh center value, - the smaller one, if the coordinate lies on a saddle point. - if set to None, the whole domain is taken. - - logy: bool; default False - if True, then y axis is natural log scaled. - - ylim: tuple of two floats; default is None - y axis min and max value. - default is None, which automatically detects min and max value. - - secondary_y: bool or list of strings; default False - whether to plot on the secondary y-axis. - if a list, which columns to plot on the secondary y-axis. - - subplots: bool or sequence of iterable, default False - whether to group columns into subplots. - a sequence of iterable of column labels - will create a subplot for each group of columns. - - sharex: bool, default False - in case subplots is True, share x-axis by - setting some x-axis labels to invisible. - - sharey: bool, default False - in case subplots is True, share y-axis range and possibly - setting some y-axis labels to invisible. - - linestyle: string or list of strings, default '-' - matplotlib line style {'-', '--', '-.', ':', ''}, - over all or per column. - - linewidth: float or list of float, default None - line width in points. - - cmap: string; default None - matplotlib colormap string. - https://matplotlib.org/stable/tutorials/colors/colormaps.html - achtung: if cmap is given, color will be disregarded. - - color: string or list of string or dictionary; default None - color string referred to by name, RGB or RGBA code. - achtung: if cmap is given, color will be disregarded. - - grid: boolean; default True - plot axis grid lines. - - legend: bool or 'reverse'; default True - if True or reverse, place legend on axis subplots. - - yunit: string; default None - string to specify y-axis unit. - None will not print a unit on the y-axis. - - title: string or list; default None - title to use for the plot or subplots. - None will print no title. - - ax: matplotlib axis object; default setting is None - the ax object, which will be used as a canvas for plotting. - None will generate a figure and ax object from scratch. - - figsizepx: list of two integers, default is [640, 480] - size of the figure in pixels, (x, y). - the given x and y will be rounded to the nearest even number, - to be able to generate movies from the images. - - ext: string; default is None - output format. - possible image formats are jpeg, jpg, png, tif, and tiff. - for retrieving a datafarme file use csv. - any other string or a number returns a pandas dataframe object. - None returnes a matplotlib figure object. - - figbgcolor: string; default is None which is transparent (png) - or white (jpeg, tiff). - figure background color. - only relevant if ext specifies an image file. - - **kwargs: possible additional keyword arguments input, - handled by the pandas series plot function. - + https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.plot.html + self: TimeSeries class instance + + focus_cat: string; default is None + categorical or boolean data column within dataframe specified under frame. + default is None, which is total, which is all agents or voxels, no categories. + + focus_num: string; default is None + numerical data column within dataframe specified under frame. + default is None, which is count, agent or voxel count. + + aggregate_num: function; default np.nanmean + aggregation function for focus_num data. + + frame: string; default is cell_df + to specifies the data dataframe. + cell: dataframe will be retrieved through the mcds.get_cell_df function. + conc: dataframe will be retrieved through the mcds.get_conc_df function. + + cat_drop: set of strings; default is an empty set + if focus is a categorical attribute, + set of category labels to be dropped for the dataframe. + Attention: when the cat_keep parameter is given, then + the cat_drop parameter has to be an empty set! + + cat_keep: set of strings; default is an empty set + if focus is a categorical attribute, + set of category labels to be kept in the dataframe. + + z_slice: floating point number; default is None + z-axis position to slice a 2D xy-plain out of the 3D mesh. + if z_slice position numeric but not an exact mesh center coordinate, + then z_slice will be adjusted to the nearest mesh center value, + the smaller one, if the coordinate lies on a saddle point. + if set to None, the whole domain is taken. + + logy: bool; default False + if True, then y axis is natural log scaled. + + ylim: tuple of two floats; default is None + y axis min and max value. + default is None, which automatically detects min and max value. + + secondary_y: bool or list of strings; default False + whether to plot on the secondary y-axis. + if a list, which columns to plot on the secondary y-axis. + + subplots: bool or sequence of iterable, default False + whether to group columns into subplots. + a sequence of iterable of column labels + will create a subplot for each group of columns. + + sharex: bool, default False + in case subplots is True, share x-axis by + setting some x-axis labels to invisible. + + sharey: bool, default False + in case subplots is True, share y-axis range and possibly + setting some y-axis labels to invisible. + + linestyle: string or list of strings, default '-' + matplotlib line style {'-', '--', '-.', ':', ''}, + over all or per column. + + linewidth: float or list of float, default None + line width in points. + + cmap: string; default None + matplotlib colormap string. + https://matplotlib.org/stable/tutorials/colors/colormaps.html + achtung: if cmap is given, color will be disregarded. + + color: string or list of string or dictionary; default None + color string referred to by name, RGB or RGBA code. + achtung: if cmap is given, color will be disregarded. + + grid: boolean; default True + plot axis grid lines. + + legend: bool or 'reverse'; default True + if True or reverse, place legend on axis subplots. + + yunit: string; default None + string to specify y-axis unit. + None will not print a unit on the y-axis. + + title: string or list; default None + title to use for the plot or subplots. + None will print no title. + + ax: matplotlib axis object; default setting is None + the ax object, which will be used as a canvas for plotting. + None will generate a figure and ax object from scratch. + + figsizepx: list of two integers, default is [640, 480] + size of the figure in pixels, (x, y). + the given x and y will be rounded to the nearest even number, + to be able to generate movies from the images. + + ext: string; default is None + output format. + possible image formats are jpeg, jpg, png, tif, and tiff. + for retrieving a datafarme file use csv. + any other string or a number returns a pandas dataframe object. + None returnes a matplotlib figure object. + + figbgcolor: string; default is None which is transparent (png) + or white (jpeg, tiff). + figure background color. + only relevant if ext specifies an image file. + + **kwargs: possible additional keyword arguments input, + handled by the pandas series plot function. + + https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.plot.html ``` ## output: ``` - if ext is None: a fig matplotlib figure, containing the ax axis object, is returned. - else: an image file is generated under the returned path. + if ext is None: a fig matplotlib figure, containing the ax axis object, is returned. + else: an image file is generated under the returned path. ``` ## description: ``` - this function to generate a timeseries plot and either returns a - matplotlib figure or an image file (jpeg, png, tiff). - - jpeg is by definition a lossy compressed image format. - png is by definition a lossless compressed image format. - tiff can by definition be a lossy or lossless compressed format. - https://en.wikipedia.org/wiki/JPEG - https://en.wikipedia.org/wiki/Portable_Network_Graphics - https://en.wikipedia.org/wiki/TIFF - + this function to generate a timeseries plot and either returns a + matplotlib figure or an image file (jpeg, png, tiff). + + jpeg is by definition a lossy compressed image format. + png is by definition a lossless compressed image format. + tiff can by definition be a lossy or lossless compressed format. + https://en.wikipedia.org/wiki/JPEG + https://en.wikipedia.org/wiki/Portable_Network_Graphics + https://en.wikipedia.org/wiki/TIFF + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.read_mcds.md b/man/docstring/mcdsts.read_mcds.md index 8167f20..23f21e0 100644 --- a/man/docstring/mcdsts.read_mcds.md +++ b/man/docstring/mcdsts.read_mcds.md @@ -3,22 +3,22 @@ ## input: ``` - self: TimeSeries class instance. + self: TimeSeries class instance. - xmlfile_list: list of strings; default None - list of physicell output*.xml strings. + xmlfile_list: list of strings; default None + list of physicell output*.xml strings. ``` ## output: ``` - self.l_mcds: list of mcds objects + self.l_mcds: list of mcds objects ``` ## description: ``` - the function returns a list of mcds objects loaded by - TimeStep calls. - + the function returns a list of mcds objects loaded by + TimeStep calls. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.set_verbose_false.md b/man/docstring/mcdsts.set_verbose_false.md index 76062b4..27931cb 100644 --- a/man/docstring/mcdsts.set_verbose_false.md +++ b/man/docstring/mcdsts.set_verbose_false.md @@ -8,12 +8,12 @@ ## output: ``` - set verbose false. + set verbose false. ``` ## description: ``` - function to set verbosity. - + function to set verbosity. + ``` \ No newline at end of file diff --git a/man/docstring/mcdsts.set_verbose_true.md b/man/docstring/mcdsts.set_verbose_true.md index 22dfece..2c8d4fa 100644 --- a/man/docstring/mcdsts.set_verbose_true.md +++ b/man/docstring/mcdsts.set_verbose_true.md @@ -8,12 +8,12 @@ ## output: ``` - set verbose true. + set verbose true. ``` ## description: ``` - function to set verbosity. - + function to set verbosity. + ``` \ No newline at end of file diff --git a/man/docstring/pcdl.graphfile_parser.md b/man/docstring/pcdl.graphfile_parser.md index 44a5df5..583eece 100644 --- a/man/docstring/pcdl.graphfile_parser.md +++ b/man/docstring/pcdl.graphfile_parser.md @@ -3,21 +3,21 @@ ## input: ``` - s_pathfile: string - path to and file name from graph.txt file. + s_pathfile: string + path to and file name from graph.txt file. ``` ## output: ``` - dei_graph: dictionary of sets of integers. - object maps each cell ID to connected cell IDs. + dei_graph: dictionary of sets of integers. + object maps each cell ID to connected cell IDs. ``` ## description: ``` - code parses PhysiCell's own graphs format and - returns the content in a dictionary object. - + code parses PhysiCell's own graphs format and + returns the content in a dictionary object. + ``` \ No newline at end of file diff --git a/man/docstring/pcdl.install_data.md b/man/docstring/pcdl.install_data.md index 8a8372a..22b4743 100644 --- a/man/docstring/pcdl.install_data.md +++ b/man/docstring/pcdl.install_data.md @@ -8,12 +8,12 @@ ## output: ``` - PhysiCell output folder (2D and 3D time series). + PhysiCell output folder (2D and 3D time series). ``` ## description: ``` - function to install a 2D and 3D PhysiCell output test dataset. - + function to install a 2D and 3D PhysiCell output test dataset. + ``` \ No newline at end of file diff --git a/man/docstring/pcdl.make_gif.md b/man/docstring/pcdl.make_gif.md index 4ffe4a8..c8d26c5 100644 --- a/man/docstring/pcdl.make_gif.md +++ b/man/docstring/pcdl.make_gif.md @@ -3,29 +3,29 @@ ## input: ``` - path: string - relative or absolute path to where the images are - from which the gif will be generated. + path: string + relative or absolute path to where the images are + from which the gif will be generated. - interface: string; default jpeg - this images, from which the gif will be generated - have to exist under the given path. - they can be generated with the plot_scatter or plot_contour - function. + interface: string; default jpeg + this images, from which the gif will be generated + have to exist under the given path. + they can be generated with the plot_scatter or plot_contour + function. ``` ## output: ``` - gif file in the path directory. - additionally, the function will return the gif's path and filename. + gif file in the path directory. + additionally, the function will return the gif's path and filename. ``` ## description: ``` - this function generates a gif image from all interface image files - found in the path directory. - https://en.wikipedia.org/wiki/GIF - + this function generates a gif image from all interface image files + found in the path directory. + https://en.wikipedia.org/wiki/GIF + ``` \ No newline at end of file diff --git a/man/docstring/pcdl.render_neuroglancer.md b/man/docstring/pcdl.render_neuroglancer.md index 5bf8132..ee93d99 100644 --- a/man/docstring/pcdl.render_neuroglancer.md +++ b/man/docstring/pcdl.render_neuroglancer.md @@ -3,31 +3,31 @@ ## input: ``` - tiffpathfile: string. - path to ome tiff file. + tiffpathfile: string. + path to ome tiff file. - timestep: integer, default is 0. - variable to specify the specific time step to render. - useful for time series ome.tiff files. - the default is compatible with single time step ome.tiff files. + timestep: integer, default is 0. + variable to specify the specific time step to render. + useful for time series ome.tiff files. + the default is compatible with single time step ome.tiff files. - intensity_cmap: string; default is 'gray'. - matlab color map label, used to display expression intensity values. - if None, no intensity layers will be generated. - + https://matplotlib.org/stable/users/explain/colors/colormaps.html + intensity_cmap: string; default is 'gray'. + matlab color map label, used to display expression intensity values. + if None, no intensity layers will be generated. + + https://matplotlib.org/stable/users/explain/colors/colormaps.html ``` ## output: ``` - viewer: local url where the loaded, neuroglancer rendered ome tiff file - can be viewed. + viewer: local url where the loaded, neuroglancer rendered ome tiff file + can be viewed. ``` ## description: ``` - function to load a time step from an ome tiff files, generated - with make_ome_tiff, into neuroglancer. - + function to load a time step from an ome tiff files, generated + with make_ome_tiff, into neuroglancer. + ``` \ No newline at end of file diff --git a/man/docstring/pcdl.scaler.md b/man/docstring/pcdl.scaler.md index f99580e..f2d1794 100644 --- a/man/docstring/pcdl.scaler.md +++ b/man/docstring/pcdl.scaler.md @@ -3,61 +3,61 @@ ## input: ``` - df_x: pandas dataframe - one attribute per column, one sample per row. - - scale: string; default 'maxabs' - None: no scaling. set scale to None if you would like to have - raw data or scale, transform, and normalize the data later. - - maxabs: maximum absolute value distance scaler will linearly map - all values into a [-1, 1] interval. if the original data - has no negative values, the result will be the same as with - the minmax scaler (except with attributes with only one value). - if the attribute has only zeros, the value will be set to 0. - - minmax: minimum maximum distance scaler will map all values - linearly into a [0, 1] interval. - if the attribute has only one value, the value will be set to 0. - - std: standard deviation scaler will result in sigmas. - each attribute will be mean centered around 0. - ddof delta degree of freedom is set to 1 because it is assumed - that the values are samples out of the population - and not the entire population. it is incomprehensible to me - that the equivalent sklearn method has ddof set to 0. - if the attribute has only one value, the value will be set to 0. + df_x: pandas dataframe + one attribute per column, one sample per row. + + scale: string; default 'maxabs' + None: no scaling. set scale to None if you would like to have + raw data or scale, transform, and normalize the data later. + + maxabs: maximum absolute value distance scaler will linearly map + all values into a [-1, 1] interval. if the original data + has no negative values, the result will be the same as with + the minmax scaler (except with attributes with only one value). + if the attribute has only zeros, the value will be set to 0. + + minmax: minimum maximum distance scaler will map all values + linearly into a [0, 1] interval. + if the attribute has only one value, the value will be set to 0. + + std: standard deviation scaler will result in sigmas. + each attribute will be mean centered around 0. + ddof delta degree of freedom is set to 1 because it is assumed + that the values are samples out of the population + and not the entire population. it is incomprehensible to me + that the equivalent sklearn method has ddof set to 0. + if the attribute has only one value, the value will be set to 0. ``` ## output: ``` - df_x: pandas dataframe - scaled df_x dataframe. + df_x: pandas dataframe + scaled df_x dataframe. ``` ## description: ``` - inspired by scikit-learn's preprocessing scaling method, this function - offers a re-implementation of the linear re-scaling methods maxabs, - minmax, and scale. - - the robust scaler methods (quantile based) found in scikit-learn are - missing. since we deal with simulated data, we don't expect heavy - outliers, and if they exist, then they are of interest. - the power and quantile based transformation methods and unit circle - based normalizer methods found there are missing too. - if you need to apply any such methods, you can do so to an anndata object - like this: - - from sklearn import preprocessing - adata.obsm["X_scaled"] = preprocessing.scale(adata.X) - - + https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html - + https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing - + https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.maxabs_scale.html - + https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.minmax_scale.html - + https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html - + inspired by scikit-learn's preprocessing scaling method, this function + offers a re-implementation of the linear re-scaling methods maxabs, + minmax, and scale. + + the robust scaler methods (quantile based) found in scikit-learn are + missing. since we deal with simulated data, we don't expect heavy + outliers, and if they exist, then they are of interest. + the power and quantile based transformation methods and unit circle + based normalizer methods found there are missing too. + if you need to apply any such methods, you can do so to an anndata object + like this: + + from sklearn import preprocessing + adata.obsm["X_scaled"] = preprocessing.scale(adata.X) + ++ https://scikit-learn.org/stable/auto_examples/preprocessing/plot_all_scaling.html ++ https://scikit-learn.org/stable/modules/classes.html#module-sklearn.preprocessing ++ https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.maxabs_scale.html ++ https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.minmax_scale.html ++ https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html + ``` \ No newline at end of file diff --git a/man/docstring/pcdl.uninstall_data.md b/man/docstring/pcdl.uninstall_data.md index c4b0307..6b13dab 100644 --- a/man/docstring/pcdl.uninstall_data.md +++ b/man/docstring/pcdl.uninstall_data.md @@ -8,13 +8,13 @@ ## output: ``` - remove PhysiCell test dataset output folders. + remove PhysiCell test dataset output folders. ``` ## description: ``` - function to uninstall the 2D and 3D PhysiCell output test datasets, - and all other files stored within its folders. - + function to uninstall the 2D and 3D PhysiCell output test datasets, + and all other files stored within its folders. + ``` \ No newline at end of file diff --git a/man/docstring/pcdl_get_anndata.md b/man/docstring/pcdl_get_anndata.md index 8a40978..9a62318 100644 --- a/man/docstring/pcdl_get_anndata.md +++ b/man/docstring/pcdl_get_anndata.md @@ -42,7 +42,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --drop [DROP ...] set of column labels to be dropped for the dataframe. diff --git a/man/docstring/pcdl_get_cell_attribute.md b/man/docstring/pcdl_get_cell_attribute.md index 5e8327c..795b071 100644 --- a/man/docstring/pcdl_get_cell_attribute.md +++ b/man/docstring/pcdl_get_cell_attribute.md @@ -44,7 +44,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --drop [DROP ...] set of column labels to be dropped for the dataframe. diff --git a/man/docstring/pcdl_get_cell_attribute_list.md b/man/docstring/pcdl_get_cell_attribute_list.md index 07cacf7..57cda2d 100644 --- a/man/docstring/pcdl_get_cell_attribute_list.md +++ b/man/docstring/pcdl_get_cell_attribute_list.md @@ -25,7 +25,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to True for more text output, while processing. default is False. diff --git a/man/docstring/pcdl_get_cell_df.md b/man/docstring/pcdl_get_cell_df.md index f72a5dd..a7f1b8b 100644 --- a/man/docstring/pcdl_get_cell_df.md +++ b/man/docstring/pcdl_get_cell_df.md @@ -30,7 +30,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --drop [DROP ...] set of column labels to be dropped for the dataframe. diff --git a/man/docstring/pcdl_get_celltype_list.md b/man/docstring/pcdl_get_celltype_list.md index c4b044d..b345ab2 100644 --- a/man/docstring/pcdl_get_celltype_list.md +++ b/man/docstring/pcdl_get_celltype_list.md @@ -17,7 +17,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to True for more text output, while processing. default is False. diff --git a/man/docstring/pcdl_get_conc_attribute.md b/man/docstring/pcdl_get_conc_attribute.md index 686cadc..73dbbdb 100644 --- a/man/docstring/pcdl_get_conc_attribute.md +++ b/man/docstring/pcdl_get_conc_attribute.md @@ -21,7 +21,7 @@ positional arguments: options: -h, --help show this help message and exit - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --drop [DROP ...] set of column labels to be dropped for the dataframe. diff --git a/man/docstring/pcdl_get_conc_df.md b/man/docstring/pcdl_get_conc_df.md index 9fd93b4..a95bbd4 100644 --- a/man/docstring/pcdl_get_conc_df.md +++ b/man/docstring/pcdl_get_conc_df.md @@ -17,7 +17,7 @@ positional arguments: options: -h, --help show this help message and exit - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --drop [DROP ...] set of column labels to be dropped for the dataframe. diff --git a/man/docstring/pcdl_get_spatialdata.md b/man/docstring/pcdl_get_spatialdata.md index 0219e24..5509aa9 100644 --- a/man/docstring/pcdl_get_spatialdata.md +++ b/man/docstring/pcdl_get_spatialdata.md @@ -44,7 +44,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --images [IMAGES ...] diff --git a/man/docstring/pcdl_get_substrate_list.md b/man/docstring/pcdl_get_substrate_list.md index 55cd668..45e43af 100644 --- a/man/docstring/pcdl_get_substrate_list.md +++ b/man/docstring/pcdl_get_substrate_list.md @@ -10,7 +10,7 @@ positional arguments: options: -h, --help show this help message and exit - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to True for more text output, while processing. default is False. diff --git a/man/docstring/pcdl_get_unit_dict.md b/man/docstring/pcdl_get_unit_dict.md index 5491572..dcaefe0 100644 --- a/man/docstring/pcdl_get_unit_dict.md +++ b/man/docstring/pcdl_get_unit_dict.md @@ -20,7 +20,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. diff --git a/man/docstring/pcdl_get_version.md b/man/docstring/pcdl_get_version.md index af37f6d..f313eba 100644 --- a/man/docstring/pcdl_get_version.md +++ b/man/docstring/pcdl_get_version.md @@ -10,7 +10,7 @@ positional arguments: options: -h, --help show this help message and exit - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to True for more text output, while processing. default is False. diff --git a/man/docstring/pcdl_make_cell_vtk.md b/man/docstring/pcdl_make_cell_vtk.md index d835f46..c020fd2 100644 --- a/man/docstring/pcdl_make_cell_vtk.md +++ b/man/docstring/pcdl_make_cell_vtk.md @@ -36,7 +36,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --ext EXT set file extension for the vtk polydata file. for diff --git a/man/docstring/pcdl_make_conc_vtk.md b/man/docstring/pcdl_make_conc_vtk.md index d1d451c..e228d58 100644 --- a/man/docstring/pcdl_make_conc_vtk.md +++ b/man/docstring/pcdl_make_conc_vtk.md @@ -12,7 +12,7 @@ positional arguments: options: -h, --help show this help message and exit - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --ext EXT file extension for the vtk rectilinear grid file. diff --git a/man/docstring/pcdl_make_graph_gml.md b/man/docstring/pcdl_make_graph_gml.md index 0e27227..28bc840 100644 --- a/man/docstring/pcdl_make_graph_gml.md +++ b/man/docstring/pcdl_make_graph_gml.md @@ -44,7 +44,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --edge_attribute EDGE_ATTRIBUTE diff --git a/man/docstring/pcdl_make_ome_tiff.md b/man/docstring/pcdl_make_ome_tiff.md index 91de7dd..d67e6d7 100644 --- a/man/docstring/pcdl_make_ome_tiff.md +++ b/man/docstring/pcdl_make_ome_tiff.md @@ -33,7 +33,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --conc_cutoff [CONC_CUTOFF ...] diff --git a/man/docstring/pcdl_plot_contour.md b/man/docstring/pcdl_plot_contour.md index 8c0cf3a..c1f80ba 100644 --- a/man/docstring/pcdl_plot_contour.md +++ b/man/docstring/pcdl_plot_contour.md @@ -18,7 +18,7 @@ positional arguments: options: -h, --help show this help message and exit - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --z_slice Z_SLICE z-axis position to slice a 2D xy-plain out of the 3D diff --git a/man/docstring/pcdl_plot_scatter.md b/man/docstring/pcdl_plot_scatter.md index 65447fb..264dc2f 100644 --- a/man/docstring/pcdl_plot_scatter.md +++ b/man/docstring/pcdl_plot_scatter.md @@ -41,7 +41,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --cat_drop [CAT_DROP ...] diff --git a/man/docstring/pcdl_plot_timeseries.md b/man/docstring/pcdl_plot_timeseries.md index e617c6e..951fed2 100644 --- a/man/docstring/pcdl_plot_timeseries.md +++ b/man/docstring/pcdl_plot_timeseries.md @@ -51,7 +51,7 @@ options: information is not found in the output xml file. set to None or False if the xml file is missing! default is False. - -v VERBOSE, --verbose VERBOSE + -v, --verbose VERBOSE setting verbose to False for less text output, while processing. default is True. --frame FRAME to specifies the data dataframe. cell: dataframe will diff --git a/pcdl/VERSION.py b/pcdl/VERSION.py index d88f6e6..256a3e1 100644 --- a/pcdl/VERSION.py +++ b/pcdl/VERSION.py @@ -1 +1 @@ -__version__ = '4.1.6' +__version__ = '4.1.7' From 3a9f2234589b7892d18a1e3edb64454534423b46 Mon Sep 17 00:00:00 2001 From: bue Date: Sat, 22 Aug 2026 12:15:23 -0400 Subject: [PATCH 05/11] @ pcdl : add instructions for bioconda and galaxy releases. --- jakku/bioconda_recipes/pcdl/meta.yaml | 91 ++++ jakku/toolsiuc_tools/pcdl/.shed.yml | 17 + jakku/toolsiuc_tools/pcdl/README.txt | 23 + .../toolsiuc_tools/pcdl/pcdl_get_anndata.xml | 128 +++++ .../pcdl/pcdl_get_cell_attribute.xml | 76 +++ .../pcdl/pcdl_get_cell_attribute_list.xml | 62 +++ .../toolsiuc_tools/pcdl/pcdl_get_cell_df.xml | 98 ++++ .../pcdl/pcdl_get_celltype_list.xml | 58 +++ .../pcdl/pcdl_get_conc_attribute.xml | 69 +++ .../toolsiuc_tools/pcdl/pcdl_get_conc_df.xml | 93 ++++ .../pcdl/pcdl_get_substrate_list.xml | 57 +++ .../pcdl/pcdl_get_unit_dict.xml | 62 +++ .../toolsiuc_tools/pcdl/pcdl_get_version.xml | 56 +++ jakku/toolsiuc_tools/pcdl/pcdl_macros.xml | 444 ++++++++++++++++++ .../pcdl/pcdl_make_cell_vtk.xml | 76 +++ .../pcdl/pcdl_make_conc_vtk.xml | 68 +++ jakku/toolsiuc_tools/pcdl/pcdl_make_gif.xml | 57 +++ .../pcdl/pcdl_make_graph_gml.xml | 135 ++++++ jakku/toolsiuc_tools/pcdl/pcdl_make_movie.xml | 63 +++ .../toolsiuc_tools/pcdl/pcdl_plot_contour.xml | 94 ++++ .../toolsiuc_tools/pcdl/pcdl_plot_scatter.xml | 102 ++++ .../pcdl/pcdl_plot_timeseries.xml | 108 +++++ .../pcdl/test-data/PhysiCell_settings.xml | 405 ++++++++++++++++ jakku/toolsiuc_tools/pcdl/test-data/final.svg | 153 ++++++ jakku/toolsiuc_tools/pcdl/test-data/final.xml | 168 +++++++ .../test-data/final_attached_cells_graph.txt | 153 ++++++ .../test-data/final_cell_neighbor_graph.txt | 153 ++++++ .../pcdl/test-data/final_cells.mat | Bin 0 -> 124873 bytes .../test-data/final_microenvironment0.mat | Bin 0 -> 63935 bytes .../final_spring_attached_cells_graph.txt | 153 ++++++ .../toolsiuc_tools/pcdl/test-data/initial.svg | 81 ++++ .../toolsiuc_tools/pcdl/test-data/initial.xml | 168 +++++++ .../initial_attached_cells_graph.txt | 128 +++++ .../test-data/initial_cell_neighbor_graph.txt | 128 +++++ .../pcdl/test-data/initial_cells.mat | Bin 0 -> 104473 bytes .../pcdl/test-data/initial_mesh0.mat | Bin 0 -> 42616 bytes .../test-data/initial_microenvironment0.mat | Bin 0 -> 63935 bytes .../initial_spring_attached_cells_graph.txt | 128 +++++ .../toolsiuc_tools/pcdl/test-data/legend.svg | 25 + .../pcdl/test-data/output00000000.xml | 168 +++++++ .../output00000000_attached_cells_graph.txt | 128 +++++ .../output00000000_cell_neighbor_graph.txt | 128 +++++ .../pcdl/test-data/output00000000_cells.mat | Bin 0 -> 104473 bytes .../output00000000_microenvironment0.mat | Bin 0 -> 63935 bytes .../pcdl/test-data/output00000000_oxygen.jpeg | Bin 0 -> 12325 bytes ...ut00000000_spring_attached_cells_graph.txt | 128 +++++ .../pcdl/test-data/output00000001.xml | 168 +++++++ .../output00000001_attached_cells_graph.txt | 125 +++++ .../output00000001_cell_neighbor_graph.txt | 125 +++++ .../pcdl/test-data/output00000001_cells.mat | Bin 0 -> 102025 bytes .../output00000001_microenvironment0.mat | Bin 0 -> 63935 bytes .../pcdl/test-data/output00000001_oxygen.jpeg | Bin 0 -> 13632 bytes ...ut00000001_spring_attached_cells_graph.txt | 125 +++++ .../timeseries_cell_attribute_minmax.json | 1 + pyproject.toml | 16 + 55 files changed, 4992 insertions(+) create mode 100644 jakku/bioconda_recipes/pcdl/meta.yaml create mode 100644 jakku/toolsiuc_tools/pcdl/.shed.yml create mode 100644 jakku/toolsiuc_tools/pcdl/README.txt create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute_list.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_cell_df.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_celltype_list.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_conc_attribute.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_conc_df.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_substrate_list.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_unit_dict.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_get_version.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_macros.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_make_gif.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_make_graph_gml.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_make_movie.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml create mode 100644 jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/PhysiCell_settings.xml create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final.svg create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final.xml create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final_cell_neighbor_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final_cells.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final_microenvironment0.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/final_spring_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial.svg create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial.xml create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial_cell_neighbor_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial_cells.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial_mesh0.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial_microenvironment0.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/initial_spring_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/legend.svg create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000.xml create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000_cell_neighbor_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000_cells.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000_microenvironment0.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000_oxygen.jpeg create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000000_spring_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001.xml create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001_cell_neighbor_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001_cells.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001_microenvironment0.mat create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001_oxygen.jpeg create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/output00000001_spring_attached_cells_graph.txt create mode 100644 jakku/toolsiuc_tools/pcdl/test-data/timeseries_cell_attribute_minmax.json diff --git a/jakku/bioconda_recipes/pcdl/meta.yaml b/jakku/bioconda_recipes/pcdl/meta.yaml new file mode 100644 index 0000000..f201324 --- /dev/null +++ b/jakku/bioconda_recipes/pcdl/meta.yaml @@ -0,0 +1,91 @@ +{% set name = "pcdl" %} +{% set version = "4.1.7" %} + +package: + name: {{ name }} + version: {{ version }} + +source: + url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/pcdl-{{ version }}.tar.gz + sha256: fa87ddda4720abdd12842eb777b2d4a5b2c7eafaef69e759c739731efb248d6b + +build: + number: 0 + noarch: python + entry_points: + - pcdl_get_version = pcdl.commandline:get_version + - pcdl_get_unit_dict = pcdl.commandline:get_unit_dict + - pcdl_get_substrate_list = pcdl.commandline:get_substrate_list + - pcdl_get_conc_attribute = pcdl.commandline:get_conc_attribute + - pcdl_get_conc_df = pcdl.commandline:get_conc_df + - pcdl_plot_contour = pcdl.commandline:plot_contour + - pcdl_make_conc_vtk = pcdl.commandline:make_conc_vtk + - pcdl_get_celltype_list = pcdl.commandline:get_celltype_list + - pcdl_get_cell_attribute_list = pcdl.commandline:get_cell_attribute_list + - pcdl_get_cell_attribute = pcdl.commandline:get_cell_attribute + - pcdl_get_cell_df = pcdl.commandline:get_cell_df + - pcdl_get_anndata = pcdl.commandline:get_anndata + - pcdl_make_graph_gml = pcdl.commandline:make_graph_gml + - pcdl_plot_scatter = pcdl.commandline:plot_scatter + - pcdl_make_cell_vtk = pcdl.commandline:make_cell_vtk + - pcdl_plot_timeseries = pcdl.commandline:plot_timeseries + - pcdl_make_gif = pcdl.commandline:make_gif + - pcdl_make_movie = pcdl.commandline:make_movie + script: {{ PYTHON }} -m pip install . -vvv --no-deps --no-build-isolation --no-cache-dir + run_exports: + - {{ pin_subpackage(name, max_pin="x") }} + +requirements: + host: + - python >=3.11,<4.0 + - hatchling + - pip + run: + - python >=3.11,<4.0 + - matplotlib-base + - numpy + - pandas >=2.2.2 + - scipy >=1.13.0 + - anndata >=0.10.8 + - requests + - vtk + - imagemagick + - ffmpeg + +test: + imports: + - pcdl + commands: + - pcdl_get_version --help + - pcdl_get_unit_dict --help + - pcdl_get_substrate_list --help + - pcdl_get_conc_attribute --help + - pcdl_get_conc_df --help + - pcdl_plot_contour --help + - pcdl_make_conc_vtk --help + - pcdl_get_celltype_list --help + - pcdl_get_cell_attribute_list --help + - pcdl_get_cell_attribute --help + - pcdl_get_cell_df --help + - pcdl_get_anndata --help + - pcdl_make_graph_gml --help + - pcdl_plot_scatter --help + - pcdl_make_cell_vtk --help + - pcdl_plot_timeseries --help + - pcdl_make_gif --help + - pcdl_make_movie --help + +about: + summary: "physicell data loader (pcdl) provides a platform independent, python3 based, pip installable interface to transform output, generated with the PhysiCell agent based modeling framework, into standard formats." + home: "https://github.com/elmbeech/physicelldataloader" + dev_url: "https://github.com/elmbeech/physicelldataloader" + license: "BSD-3-Clause" + license_family: BSD + license_file: LICENSE + doc_url: "https://github.com/elmbeech/physicelldataloader/blob/v{{ version }}/README.md" + +extra: + recipe-maintainers: + - elmbeech + autobump: + enable: False # see https://github.com/bioconda/bioconda-recipes/pull/57971 diff --git a/jakku/toolsiuc_tools/pcdl/.shed.yml b/jakku/toolsiuc_tools/pcdl/.shed.yml new file mode 100644 index 0000000..bb97e2c --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/.shed.yml @@ -0,0 +1,17 @@ +name: pcdl +owner: iuc +description: pcdl PhysiCell Data Loader. +long_description: Galaxy wrapper for the pcdl PhysiCell Data Loader command line commands for downstream analysis from PhysiCell output. +homepage_url: https://github.com/elmbeech/physicelldataloader +remote_repository_url: https://github.com/galaxyproject/tools-iuc/tree/main/tools/pcdl +type: unrestricted +categories: [Systems Biology, Data Export, Graphics] + +auto_tool_repositories: + name_template: "{{ tool_id }}" + description_template: "Galaxy wrapper for physicell dataloader function: {{ tool_name }}." + +suite: + name: suite_pcdl + description: Galaxy wrapper suite for the pcdl PhysiCell Data Loader command line commands. + long_description: Galaxy wrapper suite for the pcdl PhysiCell Data Loader command line commands. Pcdl is paramount for downstream analysis from PhysiCell output. As such, the pcdl Galaxy tools are useful if you work with the interactive PhysiCell Studio Galaxy tool. diff --git a/jakku/toolsiuc_tools/pcdl/README.txt b/jakku/toolsiuc_tools/pcdl/README.txt new file mode 100644 index 0000000..d1f8a09 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/README.txt @@ -0,0 +1,23 @@ +pcdl +==== + +Galaxy wrapper for the pcdl PhysiCell Data Loader command line commands. +Pcdl is paramount for downstream analysis from PhysiCell output. +As such, the pcdl Galaxy tools are useful if you work with the interactive +PhysiCell Studio Galaxy tool. ++ https://usegalaxy.eu/?tool_id=interactive_tool_pcstudio&version=latest + +You will have to unzip the PhysiCell output folder before you can run +pcdl Galaxy tools on it. ++ https://usegalaxy.eu/?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Fimgteam%2Funzip%2Funzip%2F6.0%2Bgalaxy0&version=latest ++ https://usegalaxy.org/?tool_id=toolshed.g2.bx.psu.edu%2Frepos%2Frheiland%2Fphysicell_studio%2Finteractive_tool_pcstudio%2F0.3&version=latest + +More information about PhysiCell, PhysiCell Studio, and PhysiCell Data Loader +can be found here: ++ https://physicell.org/index.html ++ https://physicell-studio.readthedocs.io/en/latest/index.html ++ https://github.com/elmbeech/physicelldataloader + +Date: 2025-06-06 +License: BSD-3-Clause +Author: Elmar Bucher diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml new file mode 100644 index 0000000..663fb23 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml @@ -0,0 +1,128 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + + + +
+
+ + + + +
+
+ + + + + + + +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + +
+ +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute.xml new file mode 100644 index 0000000..7a799c1 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute.xml @@ -0,0 +1,76 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + +
+
+ + + + +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute_list.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute_list.xml new file mode 100644 index 0000000..85c8722 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_attribute_list.xml @@ -0,0 +1,62 @@ + + + pcdl_macros.xml + + + + + '$cell_attribute_txt' + ]]> + +
+ +
+
+ + + +
+
+ + + + + +
+ + + +
+
+ +
+ + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_df.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_df.xml new file mode 100644 index 0000000..2a6a024 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_cell_df.xml @@ -0,0 +1,98 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + +
+
+ + + +
+
+ + + + + + + +
+ + + + +
+
+ +
+ + + + + + + + +
+ +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_celltype_list.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_celltype_list.xml new file mode 100644 index 0000000..64f322d --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_celltype_list.xml @@ -0,0 +1,58 @@ + + + pcdl_macros.xml + + + + + '$celltype_txt' + ]]> + +
+ +
+
+ +
+
+ + + + + +
+ + + +
+
+ +
+ + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_conc_attribute.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_conc_attribute.xml new file mode 100644 index 0000000..e7c4ac7 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_conc_attribute.xml @@ -0,0 +1,69 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + +
+
+ +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_conc_df.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_conc_df.xml new file mode 100644 index 0000000..9f9d62e --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_conc_df.xml @@ -0,0 +1,93 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + +
+
+ +
+
+ + + + + + + +
+ + + + +
+
+ +
+ + + + + + + + +
+ +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_substrate_list.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_substrate_list.xml new file mode 100644 index 0000000..044c127 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_substrate_list.xml @@ -0,0 +1,57 @@ + + + pcdl_macros.xml + + + + + '$substrate_txt' + ]]> + +
+ +
+
+ +
+
+ + + + + +
+ + + +
+
+ +
+ + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_unit_dict.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_unit_dict.xml new file mode 100644 index 0000000..cec83d0 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_unit_dict.xml @@ -0,0 +1,62 @@ + + + pcdl_macros.xml + + + + + + +
+ +
+
+ + +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_version.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_version.xml new file mode 100644 index 0000000..639db11 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_version.xml @@ -0,0 +1,56 @@ + + + pcdl_macros.xml + + + + + '$version_txt' + ]]> + +
+ +
+
+ +
+
+ + + + + +
+ + + +
+
+ +
+ + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml b/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml new file mode 100644 index 0000000..1ab7f3e --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml @@ -0,0 +1,444 @@ + + + + pcdl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ^[enoENO0-9-. ]*$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ^[enoENO0-9-. ]*$ + + + + + + + + ^[enoENO0-9-. ]*$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @misc{githubphysicelldataloader, + author = {Bucher, Elmar}, + year = {2025}, + title = {physicelldataloader}, + publisher = {GitHub}, + journal = {GitHub repository}, + url = {https://github.com/elmbeech/physicelldataloader}, + } + + diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml new file mode 100644 index 0000000..033666b --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml @@ -0,0 +1,76 @@ + + + pcdl_macros.xml + + + + + + +
+ + + +
+
+ + + +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml new file mode 100644 index 0000000..c771503 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml @@ -0,0 +1,68 @@ + + + pcdl_macros.xml + + + + + + +
+ +
+
+ +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_gif.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_gif.xml new file mode 100644 index 0000000..7c2a7b7 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_gif.xml @@ -0,0 +1,57 @@ + + + pcdl_macros.xml + + + + + + +
+ + +
+
+ + + + + + + +
+ + + + + + + +
+ + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_graph_gml.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_graph_gml.xml new file mode 100644 index 0000000..ff04625 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_graph_gml.xml @@ -0,0 +1,135 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + +
+
+ + + +
+
+ + + + + + + +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + + + +
+ +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_movie.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_movie.xml new file mode 100644 index 0000000..2264eb9 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_movie.xml @@ -0,0 +1,63 @@ + + + pcdl_macros.xml + + + + + + +
+ + + +
+ +
+ + + + + + + +
+ + + + + + + +
+ + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml b/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml new file mode 100644 index 0000000..6b4a46d --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml @@ -0,0 +1,94 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + + +
+ + + + +
+
+ +
+ + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml b/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml new file mode 100644 index 0000000..9afd8cf --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml @@ -0,0 +1,102 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml b/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml new file mode 100644 index 0000000..8372a23 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml @@ -0,0 +1,108 @@ + + + pcdl_macros.xml + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + + + + +
+ + + +
+
+ +
+ + + + + + + +
+
+ + + + +
diff --git a/jakku/toolsiuc_tools/pcdl/test-data/PhysiCell_settings.xml b/jakku/toolsiuc_tools/pcdl/test-data/PhysiCell_settings.xml new file mode 100644 index 0000000..9bba555 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/PhysiCell_settings.xml @@ -0,0 +1,405 @@ + + + + -30 + 300 + -20 + 200 + -10 + 100 + 30 + 20 + 10 + false + + + + 1440.0 + min + micron + 0.01 + 0.1 + 6 + + + + 1 + + + + output + + 60 + true + + + 60 + false + + water + YlOrRd + 0 + 1 + + + + false + + + + + false + true + false + 0 + + + + + + 1e3 + 1 + + 1e3 + 0.0 + + + + + + + + + + + + 1e6 + 0.001 + + 1e3 + 1e3 + + 1e3 + 1e3 + 1e3 + 1e3 + 1e3 + 1e3 + + + + true + true + + ./config/initial.mat + + + ./config/dirichlet.mat + + + + + + + + + + 0.003333 + 0.002083 + 0.004167 + 0.016667 + + + + + 5.31667e-05 + + 516 + + + 0.05 + 0 + 1.66667e-02 + 5.83333e-03 + 0 + 2.0 + + + + 0.0 + + 0 + 86400 + + + 1.11667e-2 + 8.33333e-4 + 5.33333e-5 + 2.16667e-3 + 0 + 2.0 + + + + + 2494 + 0.75 + 540 + 0.05 + 0.0045 + 0.0055 + 0 + 0 + 2.0 + + + 0.4 + 10.0 + 1.25 + + 1.0 + 1 + + + 1.8 + 15.12 + + 0.01 + 0.05 + 0.03 + 12 + + + 1 + 1 + .2 + + true + true + + true + oxygen + 1 + + + false + false + + 0.0 + 0.0 + + + + + + + 0 + 0 + 10 + 0.0 + + + 5 + 15 + 0 + 0 + + + + 0.0 + 0.0 + 0.0 + + 0.001 + 0.0 + + + 0.0025 + 0.0 + + 1.0 + 0.1 + + 0.0 + 0.005 + + + + + 0.0 + 0.0 + + + + 0.0 + 0.0 + + + + 1.0 + + + + + + + + + 1388.888889 + + + + + 5.31667e-05 + + 0.001938 + + + 0.05 + 0 + 1.66667e-02 + 5.83333e-03 + 0 + 2.0 + + + + 0.0 + + 9000000000.0 + 1.15741e-05 + + + 1.11667e-02 + 8.33333e-4 + 5.33333e-05 + 2.16667e-4 + 7e-05 + 2.0 + + + + + 2494 + 0.75 + 540 + 0.05 + 0.0045 + 0.0055 + 0.0 + 0.0 + 2 + + + 0.4 + 10.0 + 1.25 + + 1.0 + 1.0 + + + 1.8 + 15.12 + + 0.01 + 0.0 + 0.0 + 12 + + + 2.5 + 1.0 + .5 + + true + true + + true + water + 1 + + + false + false + + 0.0 + 0.0 + + + + + + + 1000 + 50000 + 0 + 0.0 + + + 0 + 1.0 + 10 + 0.0 + + + + 0.0 + 0.0 + 0.0 + + 0.0 + 0.0005 + + + 0 + 0.006 + + 1.0 + 0.1 + + 0.0 + 0.0 + + + + + 0.0 + 0.0 + + + + 0.0 + 0.0 + + + + 0.0 + + + + + + + + + ./config + cells.csv + + + + + + + ./config + cell_rules.csv + + + + + + + 0 + 64 + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/final.svg b/jakku/toolsiuc_tools/pcdl/test-data/final.svg new file mode 100644 index 0000000..bcfdbf3 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/final.svg @@ -0,0 +1,153 @@ + + + + + + Current time: 1 days, 0 hours, and 0.01 minutes, z = 0.00 μm + + + 153 agents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 200 μm + + + 0 days, 0 hours, 0 minutes, and 10.5490 seconds + + + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/final.xml b/jakku/toolsiuc_tools/pcdl/test-data/final.xml new file mode 100644 index 0000000..1c9cb2a --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/final.xml @@ -0,0 +1,168 @@ + + + + + PhysiCell + 1.14.1 + http://physicell.org + + + 0000-0002-9925-0151 + Paul + Macklin + macklinp@iu.edu + http://MathCancer.org + Indiana University & PhysiCell Project + Intelligent Systems Engineering + + + + A Ghaffarizadeh, R Heiland, SH Friedman, SM Mumenthaler, and P Macklin. PhysiCell: an Open Source Physics-Based Cell Simulator for Multicellular Systems, PLoS Comput. Biol. 14(2): e1005991, 2018. DOI: 10.1371/journal.pcbi.1005991 + 10.1371/journal.pcbi.1005991 + https://dx.doi.org/PMC5841829 + 29474446 + PMC5841829 + + + + + 1440.010000 + 10.548248 + 2025-01-05T08:14:42Z + 2025-01-05T08:14:42Z + + + + + -30.000000 -20.000000 -10.000000 300.000000 200.000000 100.000000 + -15 15 45 75 105 135 165 195 225 255 285 + -10 10 30 50 70 90 110 130 150 170 190 + -5 5 15 25 35 45 55 65 75 85 95 + + initial_mesh0.mat + + + + + + + 1000.000000 + 1.000000 + + + + + + 1000000.000000 + 0.001000 + + + + + final_microenvironment0.mat + + + + + + + + + + default + blood_cells + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + final_cells.mat + + + final_cell_neighbor_graph.txt + + + final_attached_cells_graph.txt + + + final_spring_attached_cells_graph.txt + + + + + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/final_attached_cells_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/final_attached_cells_graph.txt new file mode 100644 index 0000000..daae2c2 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/final_attached_cells_graph.txt @@ -0,0 +1,153 @@ +210: +1: +221: +225: +211: +206: +108: +230: +164: +152: +213: +137: +143: +185: +159: +229: +242: +17: +102: +161: +217: +115: +135: +160: +239: +244: +106: +181: +120: +112: +188: +116: +125: +158: +136: +186: +139: +190: +124: +226: +132: +238: +142: +228: +148: +153: +145: +123: +48: +154: +131: +51: +215: +127: +216: +144: +130: +57: +214: +121: +180: +61: +163: +227: +64: +65: +138: +67: +134: +69: +70: +71: +72: +73: +114: +75: +76: +241: +78: +79: +150: +81: +82: +83: +84: +151: +119: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +149: +146: +147: +156: +157: +165: +166: +167: +168: +169: +170: +171: +172: +173: +174: +175: +177: +182: +183: +184: +187: +218: +245: +194: +195: +197: +243: +199: +200: +201: +202: +212: +204: +205: +207: +208: +209: +219: +224: +231: +232: +233: +234: +235: +236: +237: +240: +246: +247: +248: +249: +250: +251: +252: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/final_cell_neighbor_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/final_cell_neighbor_graph.txt new file mode 100644 index 0000000..fb79f28 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/final_cell_neighbor_graph.txt @@ -0,0 +1,153 @@ +210: +1: +221: +225: 195 +211: +206: 158,217 +108: 17 +230: 180,96,188 +164: 48 +152: +213: +137: 218,51 +143: 102 +185: +159: +229: 250,139 +242: 204 +17: 243,108 +102: 143 +161: 214,94 +217: 206 +115: 195,226 +135: +160: 97 +239: 124 +244: 170 +106: +181: 57 +120: 168,240 +112: +188: 230 +116: +125: 158,182 +158: 206,125 +136: 87 +186: 134 +139: 151,229 +190: +124: 239 +226: 115,90 +132: +238: +142: +228: 72 +148: +153: 95 +145: +123: 169 +48: 164 +154: +131: +51: 137,236,247 +215: +127: 207,157 +216: +144: 173 +130: +57: 181,98 +214: 161,94,202,165 +121: 209 +180: 230 +61: +163: +227: 150 +64: 252,194 +65: +138: 204 +67: +134: 186 +69: 209 +70: +71: +72: 228 +73: 183,96 +114: +75: +76: +241: +78: 249,194 +79: +150: 227 +81: 209 +82: +83: +84: 243 +151: 139 +119: +87: 136 +88: +89: +90: 226 +91: 165 +92: +93: +94: 161,235,214 +95: 153 +96: 230,73 +97: 160 +98: 183,57 +149: +146: +147: 170,171 +156: 197 +157: 248,127 +165: 91,214 +166: 251,209 +167: 184 +168: 120 +169: 123 +170: 147,244 +171: 147 +172: +173: 177,144 +174: +175: +177: 173 +182: 125 +183: 98,73 +184: 167 +187: +218: 137 +245: +194: 78,249,64,224 +195: 115,225 +197: 156 +243: 17,84 +199: +200: +201: +202: 214 +212: +204: 138,242 +205: +207: 127 +208: +209: 166,251,81,69,121 +219: +224: 249,194 +231: +232: +233: +234: +235: 94 +236: 51,247 +237: +240: 120 +246: +247: 236,51 +248: 157 +249: 78,194,224 +250: 229 +251: 166,209 +252: 64 \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/final_cells.mat b/jakku/toolsiuc_tools/pcdl/test-data/final_cells.mat new file mode 100644 index 0000000000000000000000000000000000000000..b22b8de3d0ac9b2f6ceba1ac889a32cd98cbf6a8 GIT binary patch literal 124873 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

T+0UQh7-@5>)0DQhq}iL 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 literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/final_microenvironment0.mat b/jakku/toolsiuc_tools/pcdl/test-data/final_microenvironment0.mat new file mode 100644 index 0000000000000000000000000000000000000000..e20980cb1b6acea567ca58b24188821d2ef617cc GIT binary patch literal 63935 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 + + + + + Current time: 0 days, 0 hours, and 0.00 minutes, z = 0.00 μm + + + 128 agents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 200 μm + + + 0 days, 0 hours, 0 minutes, and 0.0095 seconds + + + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/initial.xml b/jakku/toolsiuc_tools/pcdl/test-data/initial.xml new file mode 100644 index 0000000..54aca77 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/initial.xml @@ -0,0 +1,168 @@ + + + + + PhysiCell + 1.14.1 + http://physicell.org + + + 0000-0002-9925-0151 + Paul + Macklin + macklinp@iu.edu + http://MathCancer.org + Indiana University & PhysiCell Project + Intelligent Systems Engineering + + + + A Ghaffarizadeh, R Heiland, SH Friedman, SM Mumenthaler, and P Macklin. PhysiCell: an Open Source Physics-Based Cell Simulator for Multicellular Systems, PLoS Comput. Biol. 14(2): e1005991, 2018. DOI: 10.1371/journal.pcbi.1005991 + 10.1371/journal.pcbi.1005991 + https://dx.doi.org/PMC5841829 + 29474446 + PMC5841829 + + + + + 0.000000 + 0.008479 + 2025-01-05T08:14:32Z + 2025-01-05T08:14:32Z + + + + + -30.000000 -20.000000 -10.000000 300.000000 200.000000 100.000000 + -15 15 45 75 105 135 165 195 225 255 285 + -10 10 30 50 70 90 110 130 150 170 190 + -5 5 15 25 35 45 55 65 75 85 95 + + initial_mesh0.mat + + + + + + + 1000.000000 + 1.000000 + + + + + + 1000000.000000 + 0.001000 + + + + + initial_microenvironment0.mat + + + + + + + + + + default + blood_cells + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + initial_cells.mat + + + initial_cell_neighbor_graph.txt + + + initial_attached_cells_graph.txt + + + initial_spring_attached_cells_graph.txt + + + + + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/initial_attached_cells_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/initial_attached_cells_graph.txt new file mode 100644 index 0000000..3a92aa5 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/initial_attached_cells_graph.txt @@ -0,0 +1,128 @@ +0: +1: +2: +3: +4: +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +38: +39: +40: +41: +42: +43: +44: +45: +46: +47: +48: +49: +50: +51: +52: +53: +54: +55: +56: +57: +58: +59: +60: +61: +62: +63: +64: +65: +66: +67: +68: +69: +70: +71: +72: +73: +74: +75: +76: +77: +78: +79: +80: +81: +82: +83: +84: +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +99: +100: +101: +102: +103: +104: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: +117: +118: +119: +120: +121: +122: +123: +124: +125: +126: +127: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/initial_cell_neighbor_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/initial_cell_neighbor_graph.txt new file mode 100644 index 0000000..3a92aa5 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/initial_cell_neighbor_graph.txt @@ -0,0 +1,128 @@ +0: +1: +2: +3: +4: +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +38: +39: +40: +41: +42: +43: +44: +45: +46: +47: +48: +49: +50: +51: +52: +53: +54: +55: +56: +57: +58: +59: +60: +61: +62: +63: +64: +65: +66: +67: +68: +69: +70: +71: +72: +73: +74: +75: +76: +77: +78: +79: +80: +81: +82: +83: +84: +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +99: +100: +101: +102: +103: +104: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: +117: +118: +119: +120: +121: +122: +123: +124: +125: +126: +127: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/initial_cells.mat b/jakku/toolsiuc_tools/pcdl/test-data/initial_cells.mat new file mode 100644 index 0000000000000000000000000000000000000000..bbacc7592ecc0337f92d7002c8af50070e493cd7 GIT binary patch literal 104473 zcmeI530Mu^|HrQ+Nm7I&S`?)a6|!_bg%;ZPRr`Wg5-D6NOJt`gD$-&nOGI-+3x!Zx zXy5lzw21z`Ey%a;_Wb7WX`biY=ehUXGjnF{oHO&f@6YF)GoPW+Xf(TTZ~C|QAFmPL z-qyB`jvIS&-##js+RF^$7r^IhhN-cs4nP-uSJ8ZOBBN)$_j%|^zkl%bhc(xyUx6kd{zP~+$`?fRcOZ$(zKW*(RFA84VSCxvl`hGu- zxM_a1T5)Il*7ukHHSIaN0Uy1`@pNE429)?Y)4#u;m;L;m8+vp7_4s++AK&M|uS@=2 zzW;ao)4$%TE2jCinw94F`t-Jw&0n<((YvRnzIMF#%XaSH^MCz||7K19aW^6F3T^q9 zZYGfJu_DkX#s<8P)SWeT)Q6tEkibjioym@30ktUku;&78B9~yvX+0oO`=+m+|K?c# zDARwuKgwfXdfNi?(tCaMw!{B7FEnV(771-)S`88WC#~Dubs!|SwV`3L4)mN25_ox| zBsy;Ym?T1-&a5)2tsI3kb+@%#tiZfredz`Mm(QWCFRak*6s0&)#0HG!Pt1A8ZVc@K zOFj2F_Ssz|@ba{vb6R>!Ex~u(y2G~Y4Pol!xq#l8{U3D_>&q{f)%Pscmp_`~ciCf{ zz?!)x|Cyg5%x;e|yv$|~qR)3HeF>NjJtu?&Ui`Mngl|#WM}%_4GQP&WLK~1y)YpUt z%nR0+o=fc4kD;wE+z{ZS`c!%21_<5tc5dDLIk5Pcz!bkc4bpfS?Np(9L@*N_wd1_m z%2JB#;!4y`Ua7?P80O_yRC@A5n-?C?yqnal8?Ft??2oMsQf#5?$m54gzW`~xL}oCz zw!4-Q{uK@eVdlq?ABV|_=#VPR3+9D_yzl|D;Vu<1pY_n8c8b|rb0)|fO|##^BTgDG z3I5w7^rdr9Vno!DljIx+hj#ZV|9>cs)kQV{)9+#*XGRX>-+9l{p+%<$w3HA90 zwUkNYW&IPID*4h3q?a&v{gt(~M3+fev4r`1tS^`s3i2WZH=YRAyx_Ekly0H@DWXbX z73mT9z;-&Lr!pk?`}|xiw?7LtpjbuOGsW(&k?#138jeEAm>0|o1$hyMweH8AcJFb8 z)xO(TP2Qvh&@qZ{+9Pcsix=BmpY`ka*P)<-(PAZ%VJOqPV3zeetS@+ce^6X#L)+h< z0mn-i>M^Viz~{!E*lb`2&*Rqf?KWIY8ZU0qU4}a>D+qA~VY`i+i->5tT3t;-A@*Oe zz6=V?(B?%H=&Y*gb8gs!)3Hw?Y+uE}cg8wLSw&USc#)nE$F*&0HWAvCmA>+D4I#=d zyj)!J9p(k|LP1_;fyDmf*X*vWgTwh*rkSk9aJPJfzs@`I^yQH36*k__#c1JXr38ADq>?;o`f|gba|_G$QWSf; zB|paK9Xd<9Il6p)IpziPLP1{UfK=|`_AyVap>k*5dBZLfuv5tUlG(DHG+t_H6*<>d zR-?EN4-Y3lDnYDE&Nj~FO~JfiUMR?mBi{V+}EEiG-I?eICJ_Q2HpU7SFfD{bPgTGQ|7G=7HPAnF;&u|P4DJ50`LNZ~GTztF0!qxw zn-58^0GkTG^QM|=r0L7VN3GJzjdkeo)~9(cdf)oRc(y%EXr50D+E{fwa)PT^uRo%}>s-x;lH+)=Yvm^|nHBUM+Iq z3{F*T!uA-p#|Hlg7~1+G4S8#iTy7sWpW(lM-EfOHMj#8LK3^2mgPz)uFdt^&xe6w} zshNaY`iHb=l#I%R#;qC?Xf|D8QQ$az{{+Pn=V((pe9+(s_lX%w8hJxz1=}x z|Crd;+}dCh7h>_T*6pB4pjru!9LGnE*dD{YP>`1ekP_U%cO%mb!k3B>C24Ool+9Rsu5_TEsH*tB7w(VEA-rtU|ujU6y#+glt%Ne6N=D*Af;7~%)6!G zLhQD9(aY+j@p9O=D7NUn@&4pR5ZFjx8l~|8 ztxik!TN1wt9wx4T?-6Q18ZTMK!W_@Dd{D03T}8#nMk4x{{%QWaN7#SC`Z6dmL)(9m z1$Q4-i&rzuAeg%|c6i%7#xrDpD*rKg`eG{17x-B;mxzd8zGJceOJesd-&sDUb(j~- z3k7*u49_N6=)MfG0)M&U1}(=`Fjm<;g>itqczvr5`cBKxh$i0F5ivWDR}ma%g@WEY zmtp?}^Fl#hmVjY^Qpz3;2e6)|FDhSb4IXC??7P-UUi`6HmlS)#>1 zFfV7x>HTq32W_%J7UJ>BK^moJ5gxDnqZxkJc;!-%xEju~|F8q>zSq%~b6y|jJ|Oay zvdNnd^WeCkc-D)z$fb^{C2~O}(K>OIOlNip))%ZVgZ>2!ZU1E%2=fR_91%1F0Rfkd zs^^VCWQWQIZEy1K7u&bIO;4p;L;Gm-@Q;;@r2zEAMWYL^~NLkJ*?T$}c4ZdkYsdMZN#FVRwOm!C!1D4}Vp^()PjXkCu`81)zR z*dD{YP>>e@@#U6*(o$~Vve#3=KF0#C(Q6&&rK~26m*I|G*P>?JK_@n*FHt&qow%Q| zUZMMCBi0wp3-x%R1MJUBXH_jSgNoHg?`4^+VPeE$L&Gle`jfd1oci)*WHGUgiD}E! z!WyDUBYd>#fq2Xd=7oB^(B$FDJR7OR8c9eLH%blVvjWFe*|}OWtu@@P+~sJ^V~H{mxiS>DEmKmED-ZL6 z^<~h%fFV7;PhSpIZ7~&!;WogzsAFxyL_x;Fw=XwmJzoSpl_6pLW!I-xRuREcqW<6t z^L0EG$Y!JL#{$kgY>#1HsK*O!1;|d0T!V~kVQlcGh~Z@p5F2h&$i9HQ{^T)B+Eqe% zYS1vYVx#Hw5(1(dhRF*DV|~HAP>&b-3NTo_b>tcE<*@$n*YLS{wop{8w$HU(mo$AD z8B`t7bfJV`TbQ+n#Y`K`=zi-ve^?FH7t9Owc%iL?HmSh$&RAE-Ixn=!>%I-}o!|Gw ze;RrBi#=x^JC@^B4RL5^@Nj?29KZLgxAgBGe;_juq(*{7RT`Y$e0%j@UugsM$Kz%+o+0o4mjlD~6B+F_Xxov1oK*Y3*Z%wx~gp6w&VLw`hG<`{MWf9ja&nFmXA`M)FD$#>2Cj>7n z#?KeS`Z6dkL)#vsDZzFZ5ntY`&TvjiWM9361B4uvTrx#mku+Ym+X&S+Iy9ooUCS~U zs&|NJ`Hq0Flq9S#SYHMOW@zh+613m9n)^I?8L(&CXIF|@LZ^Y=e5WGv?6Js9qom1S z7|3P!i(KEk-{M-D2AWQc(#8GBm>25tLQ@8-@{vwj4z}RMcZC1ld{dCQxoqO&yX5gA zHj=*V@vUfLi}1P<=0%QZ>Yi5t4xey5SZt3Cip$Wp$LPwixrXDg*_m;SIczFb+q2ie z1WxPDwpanu?6Jhq_7ppd2(-60XeaN!YUHZl&}JxCiuDES%b>svX?u*O0ujSPK6p=< z#OP+a^C@7p0?br{#@w~@N#mtl_WqS~{@Fy>h1~W0r~Qz0QpXgDL>!+V>&u|H3~_x? zfl)zYUPpPkK#|@$E4EvvV4Cx}*m0Q_X}la}G+t;KQHf4PoXHz6cZy(obb3>{Oa=D$ zvAzrn%+S`CRj_%#-&Y?+OHjMsJfU0O7}W1xmXf+f-t&k# z&OU`46dmTiW_Sp`9~s+YgW@u@?J?SFNLGBqP*QXTZIdVtPd5j+H9qK}>dd92*<+iR zN~sWOmBiwBe+k#m#pwOf#8ao{;^*;UUMR>5eKlNK-@u|AD$P*r%*o*mHo^@ z+0g-970m=sPa`kh#q)ba{pHqr!f;JYNDxyd(QbNJX>G_8%nRm)dc4q8;a2ymWWO9Y zs1n&Q(UZvnLR6+Xyos1Znmra8Vy@*0FNmFU8G>9)4Ajc~bkvs z2qvDB_iDZ0A&!E?QN@=tvA$qlsK*Ok9XzEr>FS(W4dRO@>$_)}!|{33QS~tL;`MpD zzn88|Eg+`v;CS+>u7F6^6qdQ{P>FfLyiku9ng+ahaDI{AggGE98|!=E)n{~rSnHUq zrwnB2i)X5k)2J=iQPd%5dqk^63K9=bv9T9pUNA4ziE0CD_4h__o{&=k1&|67~zO*+-E28)2_nz%r{$qaF8kN(rm&HpF--ujBju$M@fP@u`WnlgYSF zEWWwO@jzlD5$zPPVg1efef9jeN8kVZKgwfXezXPV< zsm{gc=aX%KSJ>0L(`pDS;nBli9xFmZ;kROHOfxVq zefHSk=d!=O`%|nhz3tTB9^cd7t1k>q*i{ga+dax2Dt*k3tSHok%SXR*jw}83{+Isa z`|rG%m!RnijAHB+zu$Sb~DY zq0Wl)cCbX`z3_L$~d>52lE67=E5gGX#$Rm9=c&J(lOy~h3v)|a1wr-nTS z+OU!!JRe+ihW5EnUccEX2l*Ygv9+t`0a?5VtiD*PAODt^BfLrTq*66n)aVk*+x5T4 zPsaN4^W}#1<+tbyT^ovSgfvVNF@?lz@$rt!tYMZrPs5`eJ<@ow=Ac(Bmdhie*w5_H zj>tvMJGb)-EW-WCczpk7-f7g(7lt;Nxa@zt$?{vAi!1qYc2mYP^31jgeqAk18ZYWg zFSI=F$Vc03>t4nQmlI*88FjOgO0d6=?XdyCP+~p|O$Riln@;kzdxaEF=VzGNDT0EO zU&;x#)ui#V4|zBW#?%tcBRcMm3NAp5taX$){`!B!8f6;-( zuLzoBv^3*E9?z+jUkpJ)e^Y>d_OJ0R`^VS0dpV;0`}xUMV;!rGIpq;<8tbOea*NT2 zjG6mZu~lMy!TRzu@D%Z1bfD=~;EJJ3e)OEW8a&BB0ghuvlcq1L9a4rTFN-^Mdizf8S?OP z_{>?y>{gP-OM^qY|Clcg#1|pQh*^>^P?+NmTd}lTm>0|o^?0G{0)NRFsTKiQw>ij=-)ktS?w!eg>Wz{yyjdZ0fualk5no&Rf>!8KficZlz~O>Q$hpG9=8m zY}TMn2zXnMBGlq-u4Xz#t;OcI{|g6*-NuQxni`CG;-8G0~6GdRv? zvm(sd7dHEXn?3NYV*RN7mOTH3kzG_U$F~%{K5;d1*6S)Fy7YqX$aEY}3G2(xyi;Vp zB~2er%y>|eAgKc{67Cnws1{=grHip0jamUcwIRVC8}m|;9;Z}KO!5h49iNtqz;m^+ zaP?8_zhM7m05H@Tf6<4m*{p}Mj@iSb=z|B3uCW63ag*&aeJ}i2uGuCvzAza^Tnbq{%U%<_d_iV%CmX&!|Al+fIsKcM7t9Owc%d1vng`w=^r7eckl^nZiM)s1UmFR5qk^wv&G!;CU)y0aN(ZsNV0{_z z7eEPrpKbt8i3O3j8f4)rvK+DFnid4zIavK%LYp*RWZS!SqV}br+I8n1RzFTb^h%a4 zqtXV<3+9D-yf6$vzWrMBQ!ZChS`GaK0%q>7c0_EcH0!cS+R(N{933>wIeOy`D+%Uz(rR zaq!HjK&4Y!&iZx75gg4cvzC=qU|ujU)Z>M22u`=AZ2QV?23udnTQ@J)f~!rsV+{<+ z^IsxZ8+=9-)(|nFqnKHFuOPc^N|6mp#h4e&3-x$m7{Y=Ebzbw;8jv(6ZC5nE47}K- z^*m`LdH#!c?MP*oyE4RvBiog8E;kZga!;68<~ZIBVS=?$zdldA|9buJ@nM#>Tc35BR8BlPIydu$MLuzSOuWAf(nKMj@F z4Hvym)NlPve>SU{SVT)cIw1z@3+9D_yfBPl%WQq;WwK77U$WgZqG2p!8p=(C@#MvW zJ+CTqIN7g^$eVMfN|UdY;BiSGxjeG~`!CoY8vqO?>@k`#_+`iod5gJ0;QO=)>5Ik? zJ~i<2n_c9^Q?l>2I(1M zC}9{s8cLdNq93J^=kH5?a=G9>rjFP#DrC;6VM#>QI(~-zhxeEl%nS8+p&LVdZPLd5 zGnX=+ZZ0j%Ez*IG=R!L7E*d~jWk?vW{Ce6dhb^|0I6aGARWLS(I4Z5lxGYwI?J>*? z^>|?z!)aZ1^N!sXFnij*W~Lqb;GfCHd(T>xG+y56ZYuq%ScTFa%~jmQ{ulqE2C)i&O^Y7K$oZj6tQozCc~3<>%oDJmh(&8R~8r>}}F z2?`~`4wW#R70NI#m>25t0w$3B`bngVi5rv*yLo8*I7;X4U57O=>g%B~`f z7w=3$gw^fa^Tb{pO_82ZgV?@^F{(@P{4vZ61$kkZz$W%%kroxsU}0V{<=zWB@G*Yz z{)CJ&X}nafyF2j|%NeA)%ivf{oIeUWbBti>YQ**!w#NnlLyhqlQxIu7l+swY5coH@ z+~emGWE`9q!k1A=-u*8j!$)(niC3VV4qqZg<0}x|&7@>TA%XkHFfY{O1xz964ZD@< zXJcUUpBcFJTilC;y~#Oymnx8^FNY?`%D;^%Croy7U%aVTiX^6ML`Ih9VO}sV)Z>M2 z3Y#jKmeQE?VPE?#xgDuiaG-f|*z6lhr1A2YtwB6ny_%SBed?>m^bDkyI(gLB>|)Fd z=7oB^Fic_1I>R)V$^49+MvD#$rKyAU#K#HGMv^yP$+hBc+5yi-)N)y4x?@BV5mXrc zEQ|j-<^}UYJzi*LK#SeHyD427K8coa`cGGZ*8wBMnRk;H54Q5=t|yzvB@>A!W#uMZ zttGnDt~6?h7N7x*^^ckU`)_^}#PRumv;}@%(r&ae z8H{neu4iQH3QSzxb7mxJ0{5+TD0>Nc&r2$=oRa+P^JSz{u3y)@s|0z>qX0dXA;BIS<(>19oxcG2UpQB^{ah_# zy*p3i?2Hu53+9D-yucc`+R@&w@x>4-WyDXYM3y1;thd1h3j|5yW!ozBV7^BkQ7hUK zGpgV$(Ug-fY%hu9_2Kz218|{;|FQ;RE2m3cSCxkD95YXEW<&68N!%12P2PN%5G&99 zX)0%lO^?%kgY+&S`is>IR6jNn16%8#a=3r&?^_7RQ~E9Olo)Fudxb^D6DJ!G7UUJ( z_;DeyXqNb$)+TTKWkbr1+s}P3po7J!$g-&sSq*<_-@H0By^`4~`^MZMy z9xq@HHLtsPxK618)2Jg3(gM>Md2BjU#&yV&#>EH;uB?m&Fbsn?_&+DFKY7EbC5WHMMN(CIT3n`esL7-8 zkhkq~%nRm)db}{q!B47FE!)l(I?C%VE|-^L9N}wTq#iwsG<^{(eWzCO@By-!b9q~< ZWgR+f`E_d7B^)0H_m2(0WytrB{U4_Y9j^cY literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/initial_mesh0.mat b/jakku/toolsiuc_tools/pcdl/test-data/initial_mesh0.mat new file mode 100644 index 0000000000000000000000000000000000000000..c50e164262fc47fa86316cb18244e43532803e7b GIT binary patch literal 42616 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 D`}FbyqeseguFyLP}9*adDafhELJ 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 + + + + + + default + + + + + blood_cells + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000000.xml b/jakku/toolsiuc_tools/pcdl/test-data/output00000000.xml new file mode 100644 index 0000000..48a0631 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000000.xml @@ -0,0 +1,168 @@ + + + + + PhysiCell + 1.14.1 + http://physicell.org + + + 0000-0002-9925-0151 + Paul + Macklin + macklinp@iu.edu + http://MathCancer.org + Indiana University & PhysiCell Project + Intelligent Systems Engineering + + + + A Ghaffarizadeh, R Heiland, SH Friedman, SM Mumenthaler, and P Macklin. PhysiCell: an Open Source Physics-Based Cell Simulator for Multicellular Systems, PLoS Comput. Biol. 14(2): e1005991, 2018. DOI: 10.1371/journal.pcbi.1005991 + 10.1371/journal.pcbi.1005991 + https://dx.doi.org/PMC5841829 + 29474446 + PMC5841829 + + + + + 0.000000 + 0.000030 + 2025-01-05T08:14:32Z + 2025-01-05T08:14:32Z + + + + + -30.000000 -20.000000 -10.000000 300.000000 200.000000 100.000000 + -15 15 45 75 105 135 165 195 225 255 285 + -10 10 30 50 70 90 110 130 150 170 190 + -5 5 15 25 35 45 55 65 75 85 95 + + initial_mesh0.mat + + + + + + + 1000.000000 + 1.000000 + + + + + + 1000000.000000 + 0.001000 + + + + + output00000000_microenvironment0.mat + + + + + + + + + + default + blood_cells + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + output00000000_cells.mat + + + output00000000_cell_neighbor_graph.txt + + + output00000000_attached_cells_graph.txt + + + output00000000_spring_attached_cells_graph.txt + + + + + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000000_attached_cells_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_attached_cells_graph.txt new file mode 100644 index 0000000..3a92aa5 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_attached_cells_graph.txt @@ -0,0 +1,128 @@ +0: +1: +2: +3: +4: +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +38: +39: +40: +41: +42: +43: +44: +45: +46: +47: +48: +49: +50: +51: +52: +53: +54: +55: +56: +57: +58: +59: +60: +61: +62: +63: +64: +65: +66: +67: +68: +69: +70: +71: +72: +73: +74: +75: +76: +77: +78: +79: +80: +81: +82: +83: +84: +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +99: +100: +101: +102: +103: +104: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: +117: +118: +119: +120: +121: +122: +123: +124: +125: +126: +127: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000000_cell_neighbor_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_cell_neighbor_graph.txt new file mode 100644 index 0000000..3a92aa5 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_cell_neighbor_graph.txt @@ -0,0 +1,128 @@ +0: +1: +2: +3: +4: +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +38: +39: +40: +41: +42: +43: +44: +45: +46: +47: +48: +49: +50: +51: +52: +53: +54: +55: +56: +57: +58: +59: +60: +61: +62: +63: +64: +65: +66: +67: +68: +69: +70: +71: +72: +73: +74: +75: +76: +77: +78: +79: +80: +81: +82: +83: +84: +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +99: +100: +101: +102: +103: +104: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: +117: +118: +119: +120: +121: +122: +123: +124: +125: +126: +127: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000000_cells.mat b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_cells.mat new file mode 100644 index 0000000000000000000000000000000000000000..bbacc7592ecc0337f92d7002c8af50070e493cd7 GIT binary patch literal 104473 zcmeI530Mu^|HrQ+Nm7I&S`?)a6|!_bg%;ZPRr`Wg5-D6NOJt`gD$-&nOGI-+3x!Zx zXy5lzw21z`Ey%a;_Wb7WX`biY=ehUXGjnF{oHO&f@6YF)GoPW+Xf(TTZ~C|QAFmPL z-qyB`jvIS&-##js+RF^$7r^IhhN-cs4nP-uSJ8ZOBBN)$_j%|^zkl%bhc(xyUx6kd{zP~+$`?fRcOZ$(zKW*(RFA84VSCxvl`hGu- zxM_a1T5)Il*7ukHHSIaN0Uy1`@pNE429)?Y)4#u;m;L;m8+vp7_4s++AK&M|uS@=2 zzW;ao)4$%TE2jCinw94F`t-Jw&0n<((YvRnzIMF#%XaSH^MCz||7K19aW^6F3T^q9 zZYGfJu_DkX#s<8P)SWeT)Q6tEkibjioym@30ktUku;&78B9~yvX+0oO`=+m+|K?c# zDARwuKgwfXdfNi?(tCaMw!{B7FEnV(771-)S`88WC#~Dubs!|SwV`3L4)mN25_ox| zBsy;Ym?T1-&a5)2tsI3kb+@%#tiZfredz`Mm(QWCFRak*6s0&)#0HG!Pt1A8ZVc@K zOFj2F_Ssz|@ba{vb6R>!Ex~u(y2G~Y4Pol!xq#l8{U3D_>&q{f)%Pscmp_`~ciCf{ zz?!)x|Cyg5%x;e|yv$|~qR)3HeF>NjJtu?&Ui`Mngl|#WM}%_4GQP&WLK~1y)YpUt z%nR0+o=fc4kD;wE+z{ZS`c!%21_<5tc5dDLIk5Pcz!bkc4bpfS?Np(9L@*N_wd1_m z%2JB#;!4y`Ua7?P80O_yRC@A5n-?C?yqnal8?Ft??2oMsQf#5?$m54gzW`~xL}oCz zw!4-Q{uK@eVdlq?ABV|_=#VPR3+9D_yzl|D;Vu<1pY_n8c8b|rb0)|fO|##^BTgDG z3I5w7^rdr9Vno!DljIx+hj#ZV|9>cs)kQV{)9+#*XGRX>-+9l{p+%<$w3HA90 zwUkNYW&IPID*4h3q?a&v{gt(~M3+fev4r`1tS^`s3i2WZH=YRAyx_Ekly0H@DWXbX z73mT9z;-&Lr!pk?`}|xiw?7LtpjbuOGsW(&k?#138jeEAm>0|o1$hyMweH8AcJFb8 z)xO(TP2Qvh&@qZ{+9Pcsix=BmpY`ka*P)<-(PAZ%VJOqPV3zeetS@+ce^6X#L)+h< z0mn-i>M^Viz~{!E*lb`2&*Rqf?KWIY8ZU0qU4}a>D+qA~VY`i+i->5tT3t;-A@*Oe zz6=V?(B?%H=&Y*gb8gs!)3Hw?Y+uE}cg8wLSw&USc#)nE$F*&0HWAvCmA>+D4I#=d zyj)!J9p(k|LP1_;fyDmf*X*vWgTwh*rkSk9aJPJfzs@`I^yQH36*k__#c1JXr38ADq>?;o`f|gba|_G$QWSf; zB|paK9Xd<9Il6p)IpziPLP1{UfK=|`_AyVap>k*5dBZLfuv5tUlG(DHG+t_H6*<>d zR-?EN4-Y3lDnYDE&Nj~FO~JfiUMR?mBi{V+}EEiG-I?eICJ_Q2HpU7SFfD{bPgTGQ|7G=7HPAnF;&u|P4DJ50`LNZ~GTztF0!qxw zn-58^0GkTG^QM|=r0L7VN3GJzjdkeo)~9(cdf)oRc(y%EXr50D+E{fwa)PT^uRo%}>s-x;lH+)=Yvm^|nHBUM+Iq z3{F*T!uA-p#|Hlg7~1+G4S8#iTy7sWpW(lM-EfOHMj#8LK3^2mgPz)uFdt^&xe6w} zshNaY`iHb=l#I%R#;qC?Xf|D8QQ$az{{+Pn=V((pe9+(s_lX%w8hJxz1=}x z|Crd;+}dCh7h>_T*6pB4pjru!9LGnE*dD{YP>`1ekP_U%cO%mb!k3B>C24Ool+9Rsu5_TEsH*tB7w(VEA-rtU|ujU6y#+glt%Ne6N=D*Af;7~%)6!G zLhQD9(aY+j@p9O=D7NUn@&4pR5ZFjx8l~|8 ztxik!TN1wt9wx4T?-6Q18ZTMK!W_@Dd{D03T}8#nMk4x{{%QWaN7#SC`Z6dmL)(9m z1$Q4-i&rzuAeg%|c6i%7#xrDpD*rKg`eG{17x-B;mxzd8zGJceOJesd-&sDUb(j~- z3k7*u49_N6=)MfG0)M&U1}(=`Fjm<;g>itqczvr5`cBKxh$i0F5ivWDR}ma%g@WEY zmtp?}^Fl#hmVjY^Qpz3;2e6)|FDhSb4IXC??7P-UUi`6HmlS)#>1 zFfV7x>HTq32W_%J7UJ>BK^moJ5gxDnqZxkJc;!-%xEju~|F8q>zSq%~b6y|jJ|Oay zvdNnd^WeCkc-D)z$fb^{C2~O}(K>OIOlNip))%ZVgZ>2!ZU1E%2=fR_91%1F0Rfkd zs^^VCWQWQIZEy1K7u&bIO;4p;L;Gm-@Q;;@r2zEAMWYL^~NLkJ*?T$}c4ZdkYsdMZN#FVRwOm!C!1D4}Vp^()PjXkCu`81)zR z*dD{YP>>e@@#U6*(o$~Vve#3=KF0#C(Q6&&rK~26m*I|G*P>?JK_@n*FHt&qow%Q| zUZMMCBi0wp3-x%R1MJUBXH_jSgNoHg?`4^+VPeE$L&Gle`jfd1oci)*WHGUgiD}E! z!WyDUBYd>#fq2Xd=7oB^(B$FDJR7OR8c9eLH%blVvjWFe*|}OWtu@@P+~sJ^V~H{mxiS>DEmKmED-ZL6 z^<~h%fFV7;PhSpIZ7~&!;WogzsAFxyL_x;Fw=XwmJzoSpl_6pLW!I-xRuREcqW<6t z^L0EG$Y!JL#{$kgY>#1HsK*O!1;|d0T!V~kVQlcGh~Z@p5F2h&$i9HQ{^T)B+Eqe% zYS1vYVx#Hw5(1(dhRF*DV|~HAP>&b-3NTo_b>tcE<*@$n*YLS{wop{8w$HU(mo$AD z8B`t7bfJV`TbQ+n#Y`K`=zi-ve^?FH7t9Owc%iL?HmSh$&RAE-Ixn=!>%I-}o!|Gw ze;RrBi#=x^JC@^B4RL5^@Nj?29KZLgxAgBGe;_juq(*{7RT`Y$e0%j@UugsM$Kz%+o+0o4mjlD~6B+F_Xxov1oK*Y3*Z%wx~gp6w&VLw`hG<`{MWf9ja&nFmXA`M)FD$#>2Cj>7n z#?KeS`Z6dkL)#vsDZzFZ5ntY`&TvjiWM9361B4uvTrx#mku+Ym+X&S+Iy9ooUCS~U zs&|NJ`Hq0Flq9S#SYHMOW@zh+613m9n)^I?8L(&CXIF|@LZ^Y=e5WGv?6Js9qom1S z7|3P!i(KEk-{M-D2AWQc(#8GBm>25tLQ@8-@{vwj4z}RMcZC1ld{dCQxoqO&yX5gA zHj=*V@vUfLi}1P<=0%QZ>Yi5t4xey5SZt3Cip$Wp$LPwixrXDg*_m;SIczFb+q2ie z1WxPDwpanu?6Jhq_7ppd2(-60XeaN!YUHZl&}JxCiuDES%b>svX?u*O0ujSPK6p=< z#OP+a^C@7p0?br{#@w~@N#mtl_WqS~{@Fy>h1~W0r~Qz0QpXgDL>!+V>&u|H3~_x? zfl)zYUPpPkK#|@$E4EvvV4Cx}*m0Q_X}la}G+t;KQHf4PoXHz6cZy(obb3>{Oa=D$ zvAzrn%+S`CRj_%#-&Y?+OHjMsJfU0O7}W1xmXf+f-t&k# z&OU`46dmTiW_Sp`9~s+YgW@u@?J?SFNLGBqP*QXTZIdVtPd5j+H9qK}>dd92*<+iR zN~sWOmBiwBe+k#m#pwOf#8ao{;^*;UUMR>5eKlNK-@u|AD$P*r%*o*mHo^@ z+0g-970m=sPa`kh#q)ba{pHqr!f;JYNDxyd(QbNJX>G_8%nRm)dc4q8;a2ymWWO9Y zs1n&Q(UZvnLR6+Xyos1Znmra8Vy@*0FNmFU8G>9)4Ajc~bkvs z2qvDB_iDZ0A&!E?QN@=tvA$qlsK*Ok9XzEr>FS(W4dRO@>$_)}!|{33QS~tL;`MpD zzn88|Eg+`v;CS+>u7F6^6qdQ{P>FfLyiku9ng+ahaDI{AggGE98|!=E)n{~rSnHUq zrwnB2i)X5k)2J=iQPd%5dqk^63K9=bv9T9pUNA4ziE0CD_4h__o{&=k1&|67~zO*+-E28)2_nz%r{$qaF8kN(rm&HpF--ujBju$M@fP@u`WnlgYSF zEWWwO@jzlD5$zPPVg1efef9jeN8kVZKgwfXezXPV< zsm{gc=aX%KSJ>0L(`pDS;nBli9xFmZ;kROHOfxVq zefHSk=d!=O`%|nhz3tTB9^cd7t1k>q*i{ga+dax2Dt*k3tSHok%SXR*jw}83{+Isa z`|rG%m!RnijAHB+zu$Sb~DY zq0Wl)cCbX`z3_L$~d>52lE67=E5gGX#$Rm9=c&J(lOy~h3v)|a1wr-nTS z+OU!!JRe+ihW5EnUccEX2l*Ygv9+t`0a?5VtiD*PAODt^BfLrTq*66n)aVk*+x5T4 zPsaN4^W}#1<+tbyT^ovSgfvVNF@?lz@$rt!tYMZrPs5`eJ<@ow=Ac(Bmdhie*w5_H zj>tvMJGb)-EW-WCczpk7-f7g(7lt;Nxa@zt$?{vAi!1qYc2mYP^31jgeqAk18ZYWg zFSI=F$Vc03>t4nQmlI*88FjOgO0d6=?XdyCP+~p|O$Riln@;kzdxaEF=VzGNDT0EO zU&;x#)ui#V4|zBW#?%tcBRcMm3NAp5taX$){`!B!8f6;-( zuLzoBv^3*E9?z+jUkpJ)e^Y>d_OJ0R`^VS0dpV;0`}xUMV;!rGIpq;<8tbOea*NT2 zjG6mZu~lMy!TRzu@D%Z1bfD=~;EJJ3e)OEW8a&BB0ghuvlcq1L9a4rTFN-^Mdizf8S?OP z_{>?y>{gP-OM^qY|Clcg#1|pQh*^>^P?+NmTd}lTm>0|o^?0G{0)NRFsTKiQw>ij=-)ktS?w!eg>Wz{yyjdZ0fualk5no&Rf>!8KficZlz~O>Q$hpG9=8m zY}TMn2zXnMBGlq-u4Xz#t;OcI{|g6*-NuQxni`CG;-8G0~6GdRv? zvm(sd7dHEXn?3NYV*RN7mOTH3kzG_U$F~%{K5;d1*6S)Fy7YqX$aEY}3G2(xyi;Vp zB~2er%y>|eAgKc{67Cnws1{=grHip0jamUcwIRVC8}m|;9;Z}KO!5h49iNtqz;m^+ zaP?8_zhM7m05H@Tf6<4m*{p}Mj@iSb=z|B3uCW63ag*&aeJ}i2uGuCvzAza^Tnbq{%U%<_d_iV%CmX&!|Al+fIsKcM7t9Owc%d1vng`w=^r7eckl^nZiM)s1UmFR5qk^wv&G!;CU)y0aN(ZsNV0{_z z7eEPrpKbt8i3O3j8f4)rvK+DFnid4zIavK%LYp*RWZS!SqV}br+I8n1RzFTb^h%a4 zqtXV<3+9D-yf6$vzWrMBQ!ZChS`GaK0%q>7c0_EcH0!cS+R(N{933>wIeOy`D+%Uz(rR zaq!HjK&4Y!&iZx75gg4cvzC=qU|ujU)Z>M22u`=AZ2QV?23udnTQ@J)f~!rsV+{<+ z^IsxZ8+=9-)(|nFqnKHFuOPc^N|6mp#h4e&3-x$m7{Y=Ebzbw;8jv(6ZC5nE47}K- z^*m`LdH#!c?MP*oyE4RvBiog8E;kZga!;68<~ZIBVS=?$zdldA|9buJ@nM#>Tc35BR8BlPIydu$MLuzSOuWAf(nKMj@F z4Hvym)NlPve>SU{SVT)cIw1z@3+9D_yfBPl%WQq;WwK77U$WgZqG2p!8p=(C@#MvW zJ+CTqIN7g^$eVMfN|UdY;BiSGxjeG~`!CoY8vqO?>@k`#_+`iod5gJ0;QO=)>5Ik? zJ~i<2n_c9^Q?l>2I(1M zC}9{s8cLdNq93J^=kH5?a=G9>rjFP#DrC;6VM#>QI(~-zhxeEl%nS8+p&LVdZPLd5 zGnX=+ZZ0j%Ez*IG=R!L7E*d~jWk?vW{Ce6dhb^|0I6aGARWLS(I4Z5lxGYwI?J>*? z^>|?z!)aZ1^N!sXFnij*W~Lqb;GfCHd(T>xG+y56ZYuq%ScTFa%~jmQ{ulqE2C)i&O^Y7K$oZj6tQozCc~3<>%oDJmh(&8R~8r>}}F z2?`~`4wW#R70NI#m>25t0w$3B`bngVi5rv*yLo8*I7;X4U57O=>g%B~`f z7w=3$gw^fa^Tb{pO_82ZgV?@^F{(@P{4vZ61$kkZz$W%%kroxsU}0V{<=zWB@G*Yz z{)CJ&X}nafyF2j|%NeA)%ivf{oIeUWbBti>YQ**!w#NnlLyhqlQxIu7l+swY5coH@ z+~emGWE`9q!k1A=-u*8j!$)(niC3VV4qqZg<0}x|&7@>TA%XkHFfY{O1xz964ZD@< zXJcUUpBcFJTilC;y~#Oymnx8^FNY?`%D;^%Croy7U%aVTiX^6ML`Ih9VO}sV)Z>M2 z3Y#jKmeQE?VPE?#xgDuiaG-f|*z6lhr1A2YtwB6ny_%SBed?>m^bDkyI(gLB>|)Fd z=7oB^Fic_1I>R)V$^49+MvD#$rKyAU#K#HGMv^yP$+hBc+5yi-)N)y4x?@BV5mXrc zEQ|j-<^}UYJzi*LK#SeHyD427K8coa`cGGZ*8wBMnRk;H54Q5=t|yzvB@>A!W#uMZ zttGnDt~6?h7N7x*^^ckU`)_^}#PRumv;}@%(r&ae z8H{neu4iQH3QSzxb7mxJ0{5+TD0>Nc&r2$=oRa+P^JSz{u3y)@s|0z>qX0dXA;BIS<(>19oxcG2UpQB^{ah_# zy*p3i?2Hu53+9D-yucc`+R@&w@x>4-WyDXYM3y1;thd1h3j|5yW!ozBV7^BkQ7hUK zGpgV$(Ug-fY%hu9_2Kz218|{;|FQ;RE2m3cSCxkD95YXEW<&68N!%12P2PN%5G&99 zX)0%lO^?%kgY+&S`is>IR6jNn16%8#a=3r&?^_7RQ~E9Olo)Fudxb^D6DJ!G7UUJ( z_;DeyXqNb$)+TTKWkbr1+s}P3po7J!$g-&sSq*<_-@H0By^`4~`^MZMy z9xq@HHLtsPxK618)2Jg3(gM>Md2BjU#&yV&#>EH;uB?m&Fbsn?_&+DFKY7EbC5WHMMN(CIT3n`esL7-8 zkhkq~%nRm)db}{q!B47FE!)l(I?C%VE|-^L9N}wTq#iwsG<^{(eWzCO@By-!b9q~< ZWgR+f`E_d7B^)0H_m2(0WytrB{U4_Y9j^cY literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000000_microenvironment0.mat b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_microenvironment0.mat new file mode 100644 index 0000000000000000000000000000000000000000..fbf00a2eec2bfdd4e91a5bc2681b58abc9b9ca0e GIT binary patch literal 63935 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 K4_eHass96${8xJb literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000000_spring_attached_cells_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_spring_attached_cells_graph.txt new file mode 100644 index 0000000..3a92aa5 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000000_spring_attached_cells_graph.txt @@ -0,0 +1,128 @@ +0: +1: +2: +3: +4: +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +15: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +38: +39: +40: +41: +42: +43: +44: +45: +46: +47: +48: +49: +50: +51: +52: +53: +54: +55: +56: +57: +58: +59: +60: +61: +62: +63: +64: +65: +66: +67: +68: +69: +70: +71: +72: +73: +74: +75: +76: +77: +78: +79: +80: +81: +82: +83: +84: +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +99: +100: +101: +102: +103: +104: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: +117: +118: +119: +120: +121: +122: +123: +124: +125: +126: +127: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001.xml b/jakku/toolsiuc_tools/pcdl/test-data/output00000001.xml new file mode 100644 index 0000000..dc7270c --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000001.xml @@ -0,0 +1,168 @@ + + + + + PhysiCell + 1.14.1 + http://physicell.org + + + 0000-0002-9925-0151 + Paul + Macklin + macklinp@iu.edu + http://MathCancer.org + Indiana University & PhysiCell Project + Intelligent Systems Engineering + + + + A Ghaffarizadeh, R Heiland, SH Friedman, SM Mumenthaler, and P Macklin. PhysiCell: an Open Source Physics-Based Cell Simulator for Multicellular Systems, PLoS Comput. Biol. 14(2): e1005991, 2018. DOI: 10.1371/journal.pcbi.1005991 + 10.1371/journal.pcbi.1005991 + https://dx.doi.org/PMC5841829 + 29474446 + PMC5841829 + + + + + 60.000000 + 0.510965 + 2025-01-05T08:14:32Z + 2025-01-05T08:14:32Z + + + + + -30.000000 -20.000000 -10.000000 300.000000 200.000000 100.000000 + -15 15 45 75 105 135 165 195 225 255 285 + -10 10 30 50 70 90 110 130 150 170 190 + -5 5 15 25 35 45 55 65 75 85 95 + + initial_mesh0.mat + + + + + + + 1000.000000 + 1.000000 + + + + + + 1000000.000000 + 0.001000 + + + + + output00000001_microenvironment0.mat + + + + + + + + + + default + blood_cells + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + output00000001_cells.mat + + + output00000001_cell_neighbor_graph.txt + + + output00000001_attached_cells_graph.txt + + + output00000001_spring_attached_cells_graph.txt + + + + + + diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001_attached_cells_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_attached_cells_graph.txt new file mode 100644 index 0000000..4115d5d --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_attached_cells_graph.txt @@ -0,0 +1,125 @@ +0: +1: +2: +3: +4: +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +126: +16: +17: +18: +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: +29: +30: +31: +32: +33: +34: +35: +36: +37: +124: +39: +40: +41: +42: +43: +44: +45: +46: +47: +48: +49: +50: +51: +52: +127: +54: +55: +130: +57: +58: +59: +60: +61: +62: +63: +64: +65: +66: +67: +68: +69: +70: +71: +72: +73: +74: +75: +76: +77: +78: +79: +80: +81: +82: +83: +84: +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: +96: +97: +98: +99: +100: +101: +102: +103: +125: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: +117: +118: +119: +120: +121: +122: +123: +131: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001_cell_neighbor_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_cell_neighbor_graph.txt new file mode 100644 index 0000000..8323137 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_cell_neighbor_graph.txt @@ -0,0 +1,125 @@ +0: +1: 68 +2: +3: +4: 59 +5: +6: +7: 69,58 +8: +9: +10: +11: +12: +13: +14: +126: 22 +16: 109 +17: +18: 98 +19: 76,94 +20: 106 +21: +22: 126 +23: +24: 94 +25: +26: +27: +28: 48 +29: +30: +31: 35 +32: 95 +33: +34: 47 +35: 31 +36: 77 +37: 65,123 +124: +39: 75 +40: 74,86 +41: 87 +42: +43: +44: 84 +45: +46: 54 +47: 34 +48: 28 +49: +50: 60,116 +51: +52: +127: 75 +54: 46 +55: +130: +57: 97 +58: 7 +59: 66,4 +60: 64,50 +61: +62: +63: +64: 60 +65: 37 +66: 59 +67: +68: 1 +69: 7 +70: +71: +72: +73: +74: 40 +75: 127,39 +76: 19,81 +77: 36 +78: +79: 116 +80: 73 +81: 76 +82: +83: +84: 44 +85: +86: 40 +87: 41 +88: +89: +90: +91: +92: +93: +94: 19,24 +95: 32 +96: +97: 57 +98: 18 +99: +100: +101: +102: +103: +125: 121 +105: +106: 20 +107: +108: +109: 16 +110: +111: +112: +113: +114: +115: +116: 50,79 +117: +118: 122 +119: +120: +121: 125 +122: 118 +123: 37 +131: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001_cells.mat b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_cells.mat new file mode 100644 index 0000000000000000000000000000000000000000..0ba0409a92ba857868d5eec5fc6278a7e042220c GIT binary patch literal 102025 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 GV*dx-$8&iA literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001_microenvironment0.mat b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_microenvironment0.mat new file mode 100644 index 0000000000000000000000000000000000000000..8a76cf8502fda4aa60cf69f241e4ecae1c52af96 GIT binary patch literal 63935 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 F{|Cj~%isV2 literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001_oxygen.jpeg b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_oxygen.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9befd6cc3f6e2e2100e8c04877e020fcbee8583d GIT binary patch literal 13632 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 KAB6}t^FII~M8i`6 literal 0 HcmV?d00001 diff --git a/jakku/toolsiuc_tools/pcdl/test-data/output00000001_spring_attached_cells_graph.txt b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_spring_attached_cells_graph.txt new file mode 100644 index 0000000..7277b48 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/output00000001_spring_attached_cells_graph.txt @@ -0,0 +1,125 @@ +0: +1: +2: +3: +4: 59 +5: +6: +7: +8: +9: +10: +11: +12: +13: +14: +126: +16: +17: +18: 98 +19: +20: +21: +22: +23: +24: +25: +26: +27: +28: 48 +29: +30: +31: 35 +32: 95 +33: +34: +35: 31 +36: 77 +37: 123,65 +124: +39: 75 +40: +41: +42: +43: +44: 84 +45: +46: 54 +47: +48: 28 +49: 117 +50: 116,60 +51: +52: +127: +54: 46 +55: +130: +57: +58: +59: 66,4 +60: 64,50 +61: +62: +63: +64: 60 +65: 37 +66: 59 +67: +68: +69: +70: +71: +72: +73: +74: +75: 39 +76: +77: 36 +78: +79: +80: +81: +82: +83: +84: 44 +85: +86: +87: +88: +89: +90: +91: +92: +93: +94: +95: 32 +96: +97: +98: 18 +99: +100: +101: +102: +103: +125: +105: +106: +107: +108: +109: +110: +111: +112: +113: +114: +115: +116: 50 +117: 49 +118: +119: +120: +121: +122: +123: 37 +131: \ No newline at end of file diff --git a/jakku/toolsiuc_tools/pcdl/test-data/timeseries_cell_attribute_minmax.json b/jakku/toolsiuc_tools/pcdl/test-data/timeseries_cell_attribute_minmax.json new file mode 100644 index 0000000..55e23d2 --- /dev/null +++ b/jakku/toolsiuc_tools/pcdl/test-data/timeseries_cell_attribute_minmax.json @@ -0,0 +1 @@ +{"apoptotic_phagocytosis_rate": [0.0, 0.0], "asymmetric_division_probabilities_000": [0.0, 0.0], "asymmetric_division_probabilities_001": [0.0, 0.0], "attachment_elastic_constant": [0.01, 0.01], "attachment_rate": [0.0, 0.05], "attack_damage_rate": [1.0, 1.0], "attack_duration": [0.1, 0.1], "attack_target": [-1.0, -1.0], "attack_total_damage_delivered": [0.0, 0.20000000000003126], "blood_cells_attack_rates": [0.0, 0.0025], "blood_cells_cell_adhesion_affinities": [1.0, 1.0], "blood_cells_fusion_rates": [0.0, 0.0], "blood_cells_immunogenicities": [1.0, 1.0], "blood_cells_live_phagocytosis_rates": [0.0, 0.001], "blood_cells_transformation_rates": [0.0, 0.0], "calcification_rate": [0.0, 0.0], "calcified_fraction": [0.0, 0.0], "cell_BM_adhesion_strength": [4.0, 4.0], "cell_BM_repulsion_strength": [100.0, 100.0], "cell_cell_adhesion_strength": [0.4, 0.4], "cell_cell_repulsion_strength": [10.0, 10.0], "cell_count_voxel": [1, 2], "cell_density_micron3": [0.00016666666666666666, 0.0003333333333333333], "cell_type": ["blood_cells", "default"], "chemotaxis_direction": [1.0, 1.0], "chemotaxis_index": ["oxygen", "water"], "contact_with_basement_membrane": [false], "current_cycle_phase_exit_rate": [0.0007199999999424, 0.003333], "current_death_model": ["0"], "current_phase": ["G0G1_phase", "S_phase", "apoptotic", "live"], "cycle_model": ["apoptosis_death_model", "flow_cytometry_separated_cycle_model", "live_cells_cycle_model"], "cytoplasmic_biomass_change_rate": [0.0045, 0.0166667], "cytoplasmic_volume": [983.5947499999987, 5862.0], "damage": [0.0, 0.20000000000003126], "damage_rate": [0.0, 0.0], "damage_repair_rate": [0.0, 0.0], "dead": [false, true], "death_rates_0": [5.31667e-05, 5.31667e-05], "death_rates_1": [0.0, 0.0], "default_attack_rates": [0.0, 0.006], "default_cell_adhesion_affinities": [1.0, 1.0], "default_fusion_rates": [0.0, 0.005], "default_immunogenicities": [1.0, 1.0], "default_live_phagocytosis_rates": [0.0, 0.0005], "default_transformation_rates": [0.0, 0.0], "detachment_rate": [0.0, 0.03], "elapsed_time_in_phase": [0.0, 59.999999999997826], "fluid_change_rate": [0.05, 0.05], "fluid_fraction": [0.6373991145328126, 0.7569238623013873], "is_motile": [false, true], "maximum_number_of_attachments": [12, 12], "migration_bias": [0.2, 0.5], "migration_bias_direction_vectorlength": [0.0, 1.0], "migration_bias_direction_x": [-1.0, 1.0], "migration_bias_direction_y": [-1.0, 1.0], "migration_bias_direction_z": [-1.0, 1.0], "migration_speed": [1.0, 2.5], "motility_vector_vectorlength": [0.0, 2.5000000000000004], "motility_vector_x": [-2.486793550458016, 2.455852993003917], "motility_vector_y": [-2.4966742471817582, 2.2730577339090874], "motility_vector_z": [-2.1068935111770823, 1.8946060981594308], "necrotic_phagocytosis_rate": [0.0, 0.0], "nuclear_biomass_change_rate": [0.0055, 0.00583333], "nuclear_radius": [4.020509832078209, 7.285770189015841], "nuclear_volume": [272.22749999999957, 1620.0], "number_of_nuclei": [1, 3], "orientation_vectorlength": [0.9999999999999999, 1.0], "orientation_x": [-0.9998198763652759, 0.9881209318256264], "orientation_y": [-0.9923765290928437, 0.9980932470125923], "orientation_z": [-0.9988291520969345, 0.9995130292635848], "other_dead_phagocytosis_rate": [0.0, 0.0], "oxygen": [680.3846029534271, 49664.8227525245], "oxygen_chemotactic_sensitivities": [0.0, 0.0], "oxygen_decay_rate": [1.0, 1.0], "oxygen_diffusion_coefficient": [1000.0, 1000.0], "oxygen_fraction_released_at_death": [0.0, 0.0], "oxygen_fraction_transferred_when_ingested": [1.0, 1.0], "oxygen_internalized_total_substrates": [-114595021520.99211, 29061231019.999565], "oxygen_net_export_rates": [0.0, 0.0], "oxygen_saturation_densities": [0.0, 50000.0], "oxygen_secretion_rates": [0.0, 1000.0], "oxygen_uptake_rates": [0.0, 10.0], "persistence_time": [1.0, 1.0], "polarity": [0.0, 0.0], "position_vectorlength": [15.702462882974425, 320.2332747956235], "pressure": [0.0, 3.477442475942624], "radius": [6.692882306092925, 12.133228172907586], "relative_maximum_adhesion_distance": [1.25, 1.25], "sample": [0.0, 1.0], "surface_area": [562.906469544556, 1849.9610886837118], "target_fluid_fraction": [0.0, 0.75], "target_solid_cytoplasmic": [0.0, 1465.5], "target_solid_nuclear": [0.0, 405.0], "total_attack_time": [0.0, 0.20000000000003126], "total_volume": [1255.8222499999983, 7482.0], "velocity_vectorlength": [0.0, 0.0], "velocity_x": [0.0, 0.0], "velocity_y": [0.0, 0.0], "velocity_z": [0.0, 0.0], "water": [937.8055019681188, 1000.0], "water_chemotactic_sensitivities": [0.0, 0.0], "water_decay_rate": [0.001, 0.001], "water_diffusion_coefficient": [1000000.0, 1000000.0], "water_fraction_released_at_death": [0.0, 0.0], "water_fraction_transferred_when_ingested": [1.0, 1.0], "water_internalized_total_substrates": [0.0, 2109883578.3197234], "water_net_export_rates": [0.0, 0.0], "water_saturation_densities": [1.0, 15.0], "water_secretion_rates": [0.0, 5.0], "water_uptake_rates": [0.0, 10.0]} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 3e25f5f..28dcf59 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,22 @@ # 10. twine upload dist/* --verbose # 11. git push origin # 12. git push --tag +# +# releasing a next version on bioconda +# 13. vim bioconda-recipes/recipes/pcdl/meta.yaml # update version and content +# 14. git bioconda-recipes pull request +# 15. cp -r ../bioconda-recipes/recipes/pcdl jakku/bioconda_recipes/ +# 16. git add jakku/bioconda_recipes/pcdl/meta.yaml +# 17. git commit -m'@ jakku : bioconda next release.' +# 18. git push origin +# +# releasing a next version on galaxy +# 19. vim tools-iuc/tools/pcdl/pcdl_macros.xml # update version +# 20. git tools-iuc pull request +# 21. cp -r ../tools-iuc/tools/pcdl jakku/toolsiuc_tools/ +# 22. git add jakku/toolsiuc_tools/pcdl/pcdl_macros.xml +# 23. git commit -m'@ jakku : galaxy next release.' +# 24. git push origin ##### From 04be417d8abd166f789c04efc83d746bdd02553e Mon Sep 17 00:00:00 2001 From: bue Date: Sat, 22 Aug 2026 12:28:03 -0400 Subject: [PATCH 06/11] @ jakku : backup tools_iuc.yaml from galaxy europe. --- jakku/usegalaxyeutools/tools_iuc.yaml | 8130 +++++++++++++++++++++++++ 1 file changed, 8130 insertions(+) create mode 100644 jakku/usegalaxyeutools/tools_iuc.yaml diff --git a/jakku/usegalaxyeutools/tools_iuc.yaml b/jakku/usegalaxyeutools/tools_iuc.yaml new file mode 100644 index 0000000..9249c47 --- /dev/null +++ b/jakku/usegalaxyeutools/tools_iuc.yaml @@ -0,0 +1,8130 @@ +--- +install_repository_dependencies: false +install_resolver_dependencies: false +install_tool_dependencies: false + +tools: +# ANNOTATION + - name: abricate + owner: iuc + tool_panel_section_label: Annotation + + - name: abritamr + owner: iuc + tool_panel_section_label: Annotation + + - name: amrfinderplus + owner: iuc + tool_panel_section_label: Annotation + + - name: angsd + owner: iuc + tool_panel_section_label: Annotation + + - name: annotatemyids + owner: iuc + tool_panel_section_label: Annotation + + - name: argnorm + owner: iuc + tool_panel_section_label: Annotation + + - name: autobigs + owner: iuc + tool_panel_section_label: Annotation + + - name: bakta + owner: iuc + tool_panel_section_label: Annotation + + - name: bam_readcount + owner: iuc + tool_panel_section_label: Annotation + + - name: bicodon_counts_from_fasta + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_remove_tail + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_remove_spurious_events + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_merge_pcr_duplicates + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_extract_crosslinked_nucleotides + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_extract_barcodes + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_extract_alignment_ends + owner: iuc + tool_panel_section_label: Annotation + + - name: bctools_convert_to_binary_barcode + owner: iuc + tool_panel_section_label: Annotation + + - name: biotradis + owner: iuc + tool_panel_section_label: Annotation + + - name: busco + owner: iuc + tool_panel_section_label: Annotation + + - name: clipkit + owner: iuc + tool_panel_section_label: Annotation + + - name: codon_freq_from_bicodons + owner: iuc + tool_panel_section_label: Annotation + + - name: colibread_takeabreak + owner: iuc + tool_panel_section_label: Annotation + + - name: colibread_mapsembler2 + owner: iuc + tool_panel_section_label: Annotation + + - name: colibread_kissplice + owner: iuc + tool_panel_section_label: Annotation + + - name: colibread_discosnp_rad + owner: iuc + tool_panel_section_label: Annotation + + - name: colibread_discosnp_pp + owner: iuc + tool_panel_section_label: Annotation + + - name: colibread_commet + owner: iuc + tool_panel_section_label: Annotation + + - name: dashing2_wsketch + owner: iuc + tool_panel_section_label: Annotation + + - name: dashing2_sketch + owner: iuc + tool_panel_section_label: Annotation + + - name: dashing2_dist + owner: iuc + tool_panel_section_label: Annotation + + - name: data_manager_fetch_busco_options + owner: iuc + + - name: data_manager_bwa_mem2_index_builder + owner: iuc + + #- name: data_manager_bwa_mem_index_builder + # owner: iuc + + - name: chewbbaca_allelecall + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_allelecallevaluator + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_createschema + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_downloadschema + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_extractcgmlst + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_joinprofiles + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_nsstats + owner: iuc + tool_panel_section_label: Annotation + + - name: chewbbaca_prepexternalschema + owner: iuc + tool_panel_section_label: Annotation + + - name: compleasm + owner: iuc + tool_panel_section_label: Annotation + + - name: coreprofiler_allele_calling + owner: iuc + tool_panel_section_label: Annotation + + - name: data_manager_build_coreprofiler + owner: iuc + + - name: drhip + owner: iuc + tool_panel_section_label: Annotation + + - name: detect_circular_sequences + owner: iuc + tool_panel_section_label: Annotation + + - name: endorspy + owner: iuc + tool_panel_section_label: Annotation + + - name: evidencemodeler + owner: iuc + tool_panel_section_label: Annotation + + - name: dgidb_annotator + owner: devteam + tool_panel_section_label: Annotation + + - name: deeparg_predict + owner: iuc + tool_panel_section_label: Annotation + + - name: deeparg_short_reads + owner: iuc + tool_panel_section_label: Annotation + + - name: data_manager_funannotate_options + owner: iuc + + - name: data_manager_deeparg + owner: iuc + + - name: data_manager_fetch_plasmidfinder + owner: iuc + + - name: exonerate + owner: iuc + tool_panel_section_label: Annotation + + - name: fargene + owner: iuc + tool_panel_section_label: Annotation + + - name: fastani + owner: iuc + tool_panel_section_label: Annotation + + - name: fastoma + owner: iuc + tool_panel_section_label: Annotation + + - name: fgsea + owner: iuc + tool_panel_section_label: Annotation + + - name: filt3r + owner: iuc + tool_panel_section_label: Annotation + + - name: find_nested_alt_orfs + owner: iuc + tool_panel_section_label: Annotation + + - name: flavotyper + owner: iuc + tool_panel_section_label: Annotation + + - name: funannotate_annotate + owner: iuc + tool_panel_section_label: Annotation + + - name: funannotate_clean + owner: iuc + tool_panel_section_label: Annotation + + - name: funannotate_compare + owner: iuc + tool_panel_section_label: Annotation + + - name: funannotate_predict + owner: iuc + tool_panel_section_label: Annotation + + - name: funannotate_sort + owner: iuc + tool_panel_section_label: Annotation + + - name: getitd + owner: iuc + tool_panel_section_label: Annotation + + - name: glimmer_acgt_content + owner: bgruening + tool_panel_section_label: Annotation + + - name: glimmer_build_icm + owner: bgruening + tool_panel_section_label: Annotation + + - name: glimmer_gbk_to_orf + owner: bgruening + tool_panel_section_label: Annotation + + - name: glimmer_extract + owner: bgruening + tool_panel_section_label: Annotation + + - name: glimmer_knowledge_based + owner: bgruening + tool_panel_section_label: Annotation + + - name: glimmer_long_orfs + owner: bgruening + tool_panel_section_label: Annotation + + - name: glimmer_not_knowledge_based + owner: bgruening + tool_panel_section_label: Annotation + + - name: goenrichment + owner: iuc + tool_panel_section_label: Annotation + + - name: hicap + owner: iuc + tool_panel_section_label: Annotation + + - name: hicstuff_pipeline + owner: iuc + tool_panel_section_label: Annotation + + - name: mist_dists + owner: iuc + tool_panel_section_label: Annotation + + - name: mist_call + owner: iuc + tool_panel_section_label: Annotation + + - name: mmseqs2_easy_taxonomy + owner: iuc + tool_panel_section_label: Annotation + + - name: mmseqs2_easy_search + owner: iuc + tool_panel_section_label: Annotation + + - name: mmseqs2_easy_rbh + owner: iuc + tool_panel_section_label: Annotation + + - name: mmseqs2_easy_linsearch + owner: iuc + tool_panel_section_label: Annotation + + - name: mmseqs2_easy_cluster + owner: iuc + tool_panel_section_label: Annotation + + - name: oatk + owner: iuc + tool_panel_section_label: Annotation + + - name: psauron + owner: iuc + tool_panel_section_label: Annotation + + - name: neighbors + owner: iuc + tool_panel_section_label: Annotation + + - name: rmlst_cli + owner: iuc + tool_panel_section_label: Annotation + + - name: sexdeterrmine + owner: iuc + tool_panel_section_label: Annotation + + - name: preseq_lc_extrap + owner: iuc + tool_panel_section_label: "FASTQ Quality Control" + + - name: preseq_c_curve + owner: iuc + tool_panel_section_label: "FASTQ Quality Control" + + - name: mtnucratio + owner: iuc + tool_panel_section_label: "FASTQ Quality Control" + + - name: sourmash_tax_summarize + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_tax_prepare + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_tax_metagenome + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_tax_grep + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_tax_genome + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_tax_annotate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_sketch + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_signature + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_search + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_prefetch + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_plot + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_multigather + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_index + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: sourmash_compare + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: taffy_view + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: taffy_stats + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: taffy_sort + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: taffy_norm + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: taffy_coverage + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: taffy_annotate + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: taffy_add_gap_bases + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: tb_profiler_profile + owner: iuc + tool_panel_section_label: Annotation + + - name: telogator + owner: iuc + tool_panel_section_label: Annotation + + - name: telescope_assign + owner: iuc + tool_panel_section_label: Annotation + + - name: snap + owner: iuc + tool_panel_section_label: Annotation + + - name: shorah_amplicon + owner: iuc + tool_panel_section_label: Annotation + + - name: scikit_bio_diversity_beta_diversity + owner: iuc + tool_panel_section_label: Annotation + + - name: remove_terminal_stop_codons + owner: iuc + tool_panel_section_label: Annotation + + - name: plasclass + owner: iuc + tool_panel_section_label: Annotation + + - name: mykrobe_predict + owner: iuc + tool_panel_section_label: Annotation + + - name: meningotype + owner: iuc + tool_panel_section_label: Annotation + + - name: longdust + owner: iuc + tool_panel_section_label: Annotation + + - name: liftoff + owner: iuc + tool_panel_section_label: Annotation + + - name: tiberius + owner: iuc + tool_panel_section_label: Annotation + + - name: tsebra + owner: iuc + tool_panel_section_label: Annotation + + - name: multigsea + owner: iuc + tool_panel_section_label: Annotation + + - name: goseq + owner: iuc + tool_panel_section_label: Annotation + + - name: goslimmer + owner: iuc + tool_panel_section_label: Annotation + + - name: gprofiler_convert + owner: iuc + tool_panel_section_label: Annotation + + - name: gprofiler_gost + owner: iuc + tool_panel_section_label: Annotation + + - name: gprofiler_orth + owner: iuc + tool_panel_section_label: Annotation + + - name: gprofiler_random + owner: iuc + tool_panel_section_label: Annotation + + - name: gprofiler_snpense + owner: iuc + tool_panel_section_label: Annotation + + - name: groot + owner: iuc + tool_panel_section_label: Annotation + + - name: data_manager_groot_database_downloader + owner: iuc + + - name: gubbins + owner: iuc + tool_panel_section_label: Annotation + + - name: hamronize_summarize + owner: iuc + tool_panel_section_label: Annotation + + - name: hamronize_tool + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer3 + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_alimask + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmalign + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmbuild + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmconvert + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmemit + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmfetch + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmscan + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_hmmsearch + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_jackhmmer + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_nhmmer + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_nhmmscan + owner: iuc + tool_panel_section_label: Annotation + + - name: hmmer_phmmer + owner: iuc + tool_panel_section_label: Annotation + + - name: homer_annotatepeaks + owner: iuc + tool_panel_section_label: Annotation + + - name: homer_findmotifs + owner: iuc + tool_panel_section_label: Annotation + + - name: homer_findmotifsgenome + owner: iuc + tool_panel_section_label: Annotation + + - name: homer_gtf_to_annotations + owner: iuc + tool_panel_section_label: Annotation + + - name: homer_scanmotifgenomewide + owner: iuc + tool_panel_section_label: Annotation + + - name: icescreen + owner: iuc + tool_panel_section_label: Annotation + + - name: integron_finder + owner: iuc + tool_panel_section_label: Annotation + + - name: interproscan + owner: bgruening + tool_panel_section_label: Annotation + + - name: isescan + owner: iuc + tool_panel_section_label: Annotation + + - name: jcvi_gff_stats + owner: iuc + tool_panel_section_label: Annotation + + - name: kobas + owner: iuc + tool_panel_section_label: Annotation + + - name: kofamscan + owner: iuc + tool_panel_section_label: Annotation + + - name: krocus + owner: iuc + tool_panel_section_label: Annotation + + - name: legsta + owner: iuc + tool_panel_section_label: Annotation + + - name: lorikeet_spoligotype + owner: iuc + tool_panel_section_label: Annotation + + - name: microsatbed + owner: iuc + tool_panel_section_label: Annotation + + - name: mirmachine + owner: iuc + tool_panel_section_label: Annotation + + - name: miniprot + owner: iuc + tool_panel_section_label: Annotation + + - name: miniprot_index + owner: iuc + tool_panel_section_label: Annotation + + - name: mitos + owner: iuc + tool_panel_section_label: Annotation + + - name: mitos2 + owner: iuc + tool_panel_section_label: Annotation + + - name: mlst + owner: iuc + tool_panel_section_label: Annotation + + - name: mmseqs2_taxonomy_assignment + owner: iuc + tool_panel_section_label: Annotation + + - name: omark + owner: iuc + tool_panel_section_label: Annotation + + - name: data_manager_dada2 + owner: iuc + + - name: data_manager_omamer + owner: iuc + + - name: data_manager_humann2_database_downloader + owner: iuc + + - name: data_manager_ncbi_fcs_gx_database_downloader + owner: iuc + + - name: data_manager_picard_index_builder + owner: devteam + + - name: data_manager_sam_fasta_index_builder + owner: devteam + + - name: optitype + owner: iuc + tool_panel_section_label: Annotation + + - name: orthofinder_onlygroups + owner: iuc + tool_panel_section_label: Annotation + + - name: pirate + owner: iuc + tool_panel_section_label: Annotation + + - name: panaroo + owner: galaxy-australia + tool_panel_section_label: Annotation + + - name: panta + owner: iuc + tool_panel_section_label: Annotation + + - name: plasmidfinder + owner: iuc + tool_panel_section_label: Annotation + + - name: prodigal + owner: iuc + tool_panel_section_label: Annotation + + - name: pharokka + owner: iuc + tool_panel_section_label: Annotation + + - name: prokka + owner: crs4 + tool_panel_section_label: Annotation + + - name: red + owner: iuc + tool_panel_section_label: Annotation + + - name: repeat_masker + owner: bgruening + tool_panel_section_label: Annotation + + - name: repeatmodeler + owner: csbl + tool_panel_section_label: Annotation + + - name: roary + owner: iuc + tool_panel_section_label: Annotation + + - name: seq2hla + owner: iuc + tool_panel_section_label: Annotation + + - name: socru + owner: iuc + tool_panel_section_label: Annotation + + - name: spaln + owner: iuc + tool_panel_section_label: Annotation + + - name: spotyping + owner: iuc + tool_panel_section_label: Annotation + + - name: staramr + owner: iuc + tool_panel_section_label: Annotation + + - name: data_manager_build_staramr + owner: iuc + + - name: tb_variant_filter + owner: iuc + tool_panel_section_label: Annotation + + - name: tbprofiler + owner: iuc + tool_panel_section_label: Annotation + + - name: tbvcfreport + owner: iuc + tool_panel_section_label: Annotation + + - name: tb_profiler_collate + owner: iuc + tool_panel_section_label: Annotation + + - name: te_finder + owner: iuc + tool_panel_section_label: Annotation + + - name: tetyper + owner: iuc + tool_panel_section_label: Annotation + + - name: transtermhp + owner: iuc + tool_panel_section_label: Annotation + + - name: ucsc_maffilter + owner: iuc + tool_panel_section_label: Annotation + + - name: vg_paths + owner: iuc + tool_panel_section_label: Annotation + + - name: vg_giraffe + owner: iuc + tool_panel_section_label: Annotation + + - name: vsnp_statistics + owner: iuc + tool_panel_section_label: Annotation + + - name: vsnp_get_snps + owner: iuc + tool_panel_section_label: Annotation + + - name: vsnp_determine_ref_from_data + owner: iuc + tool_panel_section_label: Annotation + + - name: vsnp_build_tables + owner: iuc + tool_panel_section_label: Annotation + + - name: vsnp_add_zero_coverage + owner: iuc + tool_panel_section_label: Annotation + + - name: windowmasker + owner: iuc + tool_panel_section_label: Annotation + + - name: staramr + owner: iuc + tool_panel_section_label: Annotation + + - name: ppanggolin_all + owner: iuc + tool_panel_section_label: Annotation + + - name: ppanggolin_msa + owner: iuc + tool_panel_section_label: Annotation + + - name: ppanggolin_projection + owner: iuc + tool_panel_section_label: Annotation + + - name: ppanggolin_rarefaction + owner: iuc + tool_panel_section_label: Annotation + + - name: ucsc_blat + owner: yating-l + tool_panel_section_label: Annotation + +# ASSEMBLY + - name: abyss + owner: iuc + tool_panel_section_label: Assembly + + - name: assembly_stats + owner: iuc + tool_panel_section_label: Assembly + + - name: bellerophon + owner: iuc + tool_panel_section_label: Assembly + + - name: bionano_scaffold + owner: bgruening + tool_panel_section_label: Assembly + + - name: biscot + owner: iuc + tool_panel_section_label: Assembly + + - name: colibread_lordec + owner: iuc + tool_panel_section_label: Assembly + + - name: craq + owner: iuc + tool_panel_section_label: Assembly + + - name: disco + owner: iuc + tool_panel_section_label: Assembly + + - name: fastk_fastk + owner: iuc + tool_panel_section_label: Assembly + + - name: fastk_logex + owner: iuc + tool_panel_section_label: Assembly + + - name: fastk_histex + owner: iuc + tool_panel_section_label: Assembly + + - name: genomescope + owner: iuc + tool_panel_section_label: Assembly + + - name: getorganelle + owner: iuc + tool_panel_section_label: Assembly + + - name: hapcut2 + owner: galaxy-australia + tool_panel_section_label: Assembly + + - name: hapog + owner: iuc + tool_panel_section_label: Assembly + + - name: hifiasm + owner: bgruening + tool_panel_section_label: Assembly + + - name: hifiasm_meta + owner: galaxy-australia + tool_panel_section_label: Assembly + + - name: hypo + owner: iuc + tool_panel_section_label: Assembly + + - name: idba_hybrid + owner: iuc + tool_panel_section_label: Assembly + + - name: idba_tran + owner: iuc + tool_panel_section_label: Assembly + + - name: idba_ud + owner: iuc + tool_panel_section_label: Assembly + + - name: links + owner: iuc + tool_panel_section_label: Assembly + + - name: megahit + owner: iuc + tool_panel_section_label: Assembly + + - name: merqury + owner: iuc + tool_panel_section_label: Assembly + + - name: merquryfk_asmplot + owner: iuc + tool_panel_section_label: Assembly + + - name: merquryfk_cnplot + owner: iuc + tool_panel_section_label: Assembly + + - name: merquryfk_hapmaker + owner: iuc + tool_panel_section_label: Assembly + + - name: merquryfk_happlot + owner: iuc + tool_panel_section_label: Assembly + + - name: merquryfk_merquryfk + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_count_kmers + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_filter_kmers + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_histogram_kmers + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_groups_kmers + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_trio_mode + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_print + owner: iuc + tool_panel_section_label: Assembly + + - name: meryl_arithmetic_kmers + owner: iuc + tool_panel_section_label: Assembly + + - name: metaspades + owner: nml + tool_panel_section_label: Assembly + + - name: minia + owner: iuc + tool_panel_section_label: Assembly + + - name: miniasm + owner: iuc + tool_panel_section_label: Assembly + + - name: mitobim + owner: iuc + tool_panel_section_label: Assembly + + - name: necat + owner: iuc + tool_panel_section_label: Assembly + + - name: novoplasty + owner: iuc + tool_panel_section_label: Assembly + + - name: pairtools_dedup + owner: iuc + tool_panel_section_label: Assembly + + - name: pairtools_parse + owner: iuc + tool_panel_section_label: Assembly + + - name: pairtools_split + owner: iuc + tool_panel_section_label: Assembly + + - name: pairtools_sort + owner: iuc + tool_panel_section_label: Assembly + + - name: pairtools_stats + owner: iuc + tool_panel_section_label: Assembly + + - name: pilon + owner: iuc + tool_panel_section_label: Assembly + + - name: pretext_graph + owner: iuc + tool_panel_section_label: Assembly + + - name: pretext_map + owner: iuc + tool_panel_section_label: Assembly + + - name: purge_dups + owner: iuc + tool_panel_section_label: Assembly + + - name: quast + owner: iuc + tool_panel_section_label: Assembly + + - name: quickmerge + owner: iuc + tool_panel_section_label: Assembly + + - name: ragtag + owner: iuc + tool_panel_section_label: Assembly + + - name: raven + owner: iuc + tool_panel_section_label: Assembly + + - name: rnaquast + owner: iuc + tool_panel_section_label: Assembly + + - name: rnaspades + owner: iuc + tool_panel_section_label: Assembly + + - name: salsa + owner: iuc + tool_panel_section_label: Assembly + + - name: shasta + owner: iuc + tool_panel_section_label: Assembly + + - name: shovill + owner: iuc + tool_panel_section_label: Assembly + + - name: smudgeplot + owner: galaxy-australia + tool_panel_section_label: Assembly + + - name: spades + owner: nml + tool_panel_section_label: Assembly + + - name: spades_biosyntheticspades + owner: iuc + tool_panel_section_label: Assembly + + - name: spades_coronaspades + owner: iuc + tool_panel_section_label: Assembly + + - name: spades_metaplasmidspades + owner: iuc + tool_panel_section_label: Assembly + + - name: spades_metaviralspades + owner: iuc + tool_panel_section_label: Assembly + + - name: spades_plasmidspades + owner: iuc + tool_panel_section_label: Assembly + + - name: spades_rnaviralspades + owner: iuc + tool_panel_section_label: Assembly + + - name: syri + owner: iuc + tool_panel_section_label: Assembly + + - name: teloscope + owner: iuc + tool_panel_section_label: Assembly + + - name: trycycler_cluster + owner: iuc + tool_panel_section_label: Assembly + + - name: trycycler_consensus + owner: iuc + tool_panel_section_label: Assembly + + - name: trycycler_partition + owner: iuc + tool_panel_section_label: Assembly + + - name: trycycler_reconcile_msa + owner: iuc + tool_panel_section_label: Assembly + + - name: trycycler_subsample + owner: iuc + tool_panel_section_label: Assembly + + - name: unicycler + owner: iuc + tool_panel_section_label: Assembly + + - name: verkko + owner: iuc + tool_panel_section_label: Assembly + + - name: vgp_split_agp + owner: iuc + tool_panel_section_label: Assembly + + - name: vgp_sak_generation + owner: iuc + tool_panel_section_label: Assembly + + - name: vgp_chromosome_assignment + owner: iuc + tool_panel_section_label: Assembly + + - name: yahs + owner: iuc + tool_panel_section_label: Assembly + + - name: halfdeep + owner: iuc + tool_panel_section_label: Assembly + +# ASTRONOMY + - name: gwtc_analysis + owner: iuc + tool_panel_section_label: Astronomy + +# BED + + - name: bedtools + owner: iuc + tool_panel_section_label: BED + + - name: bedops_sortbed + owner: iuc + tool_panel_section_label: BED + +# CHEMICALTOOLBOX + - name: enzywizard_aaprops + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_batch + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_clean + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_conservation + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_disorder + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_dock + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_embedding + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_energy + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_flexibility + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_hydrocluster + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_integrate + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_interaction + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_mut_batch + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_mut_clean + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_mut_integrate + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_pocket + owner: iuc + tool_panel_section_label: ChemicalToolBox + + - name: enzywizard_substrate + owner: iuc + tool_panel_section_label: ChemicalToolBox + +# COLLECTION OPERATIONS + + - name: collection_element_identifiers + owner: iuc + tool_panel_section_label: Collection Operations + + - name: pick_value + owner: iuc + tool_panel_section_label: Collection Operations + +# COMPUTATIONAL CHEMISTRY + + - name: diffdock + owner: iuc + tool_panel_section_label: ChemicalToolBox + +# CONVERT FORMATS + + - name: bbgbigwig + owner: iuc + tool_panel_section_label: Convert Formats + + - name: bam_to_scidx + owner: iuc + tool_panel_section_label: Convert Formats + + - name: bam2fastx + owner: iuc + tool_panel_section_label: Convert Formats + + - name: bax2bam + owner: iuc + tool_panel_section_label: Convert Formats + + - name: bioext_bam2msa + owner: iuc + tool_panel_section_label: Convert Formats + + - name: biom_convert + owner: iuc + tool_panel_section_label: Convert Formats + + - name: biom_add_metadata + owner: iuc + tool_panel_section_label: Convert Formats + + - name: biom_normalize_table + owner: iuc + tool_panel_section_label: Convert Formats + + - name: biom_subset_table + owner: iuc + tool_panel_section_label: Convert Formats + + - name: biom_summarize_table + owner: iuc + tool_panel_section_label: Convert Formats + + - name: biom_from_uc + owner: iuc + tool_panel_section_label: Convert Formats + + - name: compress_file + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_bam + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_bed + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_bw + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_gff + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_region + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_vcf + owner: iuc + tool_panel_section_label: Convert Formats + + - name: crossmap_wig + owner: iuc + tool_panel_section_label: Convert Formats + + - name: genebed_maf_to_fasta + owner: iuc + tool_panel_section_label: Convert Formats + + - name: geopandas_table2geojson + owner: iuc + tool_panel_section_label: "Convert Formats" + + - name: gfa_to_fa + owner: iuc + tool_panel_section_label: Convert Formats + + - name: gffread + owner: devteam + tool_panel_section_label: Convert Formats + + - name: gtftobed12 + owner: iuc + tool_panel_section_label: Convert Formats + + - name: intermine_galaxy_exchange + owner: iuc + tool_panel_section_label: Convert Formats + + - name: interval2maf + owner: iuc + tool_panel_section_label: Convert Formats + + - name: resize_coordinate_window + owner: iuc + tool_panel_section_label: Convert Formats + + - name: samtools_bam_to_cram + owner: iuc + tool_panel_section_label: Convert Formats + + - name: tooldistillator + owner: iuc + tool_panel_section_label: Convert Formats + + - name: tooldistillator_summarize + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_axtchain + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_axttomaf + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_maftoaxt + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_twobittofa + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_wigtobigwig + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_nettoaxt + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_netfilter + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_chainnet + owner: iuc + tool_panel_section_label: Convert Formats + + - name: ucsc_chainantirepeat + owner: iuc + tool_panel_section_label: Convert Formats + +# "DNA Metabarcoding" + + - name: obi_complement + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_pcr + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_refidx + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_tag + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_taxonomy + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_pairing + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_multiplex + owner: iuc + tool_panel_section_label: "DNA Metabarcoding" + + - name: obi_illumina_pairend + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_ngsfilter + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_annotate + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_grep + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_uniq + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_clean + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_convert + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_sort + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_tab + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + + - name: obi_stat + owner: iuc + tool_panel_section_label: 'DNA Metabarcoding' + +# EMBOSS + + - name: emboss_5 + owner: devteam + tool_panel_section_label: EMBOSS + +# EMBOSS 6 tool suite + + - name: emboss_needleall + owner: iuc + tool_panel_section_label: EMBOSS + + - name: emboss_needle + owner: iuc + tool_panel_section_label: EMBOSS + + +# EPIGENETICS + + - name: bwameth + owner: iuc + tool_panel_section_label: Mapping + + - name: meme_dreme + owner: iuc + tool_panel_section_label: Epigenetics + + - name: genetrack + owner: iuc + tool_panel_section_label: Epigenetics + + - name: cwpair2 + owner: iuc + tool_panel_section_label: Epigenetics + + - name: moabs + owner: iuc + tool_panel_section_label: Epigenetics + + - name: repmatch_gff3 + owner: iuc + tool_panel_section_label: Epigenetics + + - name: multigps + owner: iuc + tool_panel_section_label: Epigenetics + + - name: seacr + owner: iuc + tool_panel_section_label: Epigenetics + + - name: vcf_filter + owner: devteam + tool_panel_section_label: Epigenetics + + +# EVOLUTION + + - name: codeml + owner: iuc + tool_panel_section_label: Evolution + + - name: iqtree + owner: iuc + tool_panel_section_label: Evolution + + - name: quicktree + owner: iuc + tool_panel_section_label: Evolution + + - name: map_damage + owner: iuc + tool_panel_section_label: Evolution + + - name: mutate_snp_codon + owner: devteam + tool_panel_section_label: Evolution + + - name: rapidnj + owner: iuc + tool_panel_section_label: Evolution + + - name: structure + owner: iuc + tool_panel_section_label: Evolution + + - name: tn93 + owner: iuc + tool_panel_section_label: Evolution + + - name: tn93_cluster + owner: iuc + tool_panel_section_label: Evolution + + - name: tn93_filter + owner: iuc + tool_panel_section_label: Evolution + + - name: tn93_readreduce + owner: iuc + tool_panel_section_label: Evolution + + - name: revoluzer_crex + owner: iuc + tool_panel_section_label: Evolution + + - name: revoluzer_distmat + owner: iuc + tool_panel_section_label: Evolution + + + +# EXPRESSION TOOLS + + - name: calculate_numeric_param + owner: iuc + tool_panel_section_label: Expression Tools + + - name: compose_text_param + owner: iuc + tool_panel_section_label: Expression Tools + + - name: map_param_value + owner: iuc + tool_panel_section_label: Expression Tools + + +# EXTRACT FEATURES + + - name: b2btools_single_sequence + owner: iuc + tool_panel_section_label: Extract Features + + - name: fraggenescan + owner: iuc + tool_panel_section_label: Extract Features + + - name: length_and_gc_content + owner: iuc + tool_panel_section_label: Extract Features + + - name: orfipy + owner: iuc + tool_panel_section_label: Extract Features + + - name: parse_mito_blast + owner: iuc + tool_panel_section_label: Extract Features + + +# FASTA/FASTQ + + - name: adapter_removal + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: art + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: ampligone + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: barcode_splitter + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: bbtools_bbmerge + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: bbtools_tadpole + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: berokka + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: cutadapt + owner: lparsons + tool_panel_section_label: FASTA/FASTQ + + - name: cialign + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_clipping_histogram + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_compute_length + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_concatenate_by_species + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_filter_by_length + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_formatter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_merge_files_and_filter_unique_sequences + owner: galaxyp + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_nucleotide_changer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_stats + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_to_tabular + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastp + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fastplong + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_combiner + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_filter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_groomer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_groupmerge + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_manipulation + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_masker_by_quality + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_paired_end_deinterlacer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_paired_end_interlacer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_paired_end_interlacer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_paired_end_joiner + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_paired_end_splitter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_quality_boxplot + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_quality_converter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_quality_filter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_stats + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_to_fasta + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_to_tabular + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_trimmer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastq_trimmer_by_quality + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_yield_plot + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_winner + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_times + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_tabular + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_stats + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_squiggle + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_qualpos + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_qualdist + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_occupancy + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_nucdist + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_hist + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_extract + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: poretools_events + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: qfilt + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqprep + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: falco + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fastqc + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastqe + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fastqtofasta + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_artifacts_filter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_barcode_splitter + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_clipper + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_collapser + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_nucleotides_distribution + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_quality_statistics + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_renamer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_reverse_complement + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: fastx_trimmer + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: filtlong + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: flash + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: ncbi_fcs_gx + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: pear + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: rcorrector + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: rrmscorer + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqcomplexity + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_fx2tab + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_grep + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_head + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_locate + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_translate + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_stats + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_sort + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqkit_split2 + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: seqtk + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: short_reads_figure_score + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: short_reads_trim_seq + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: sickle + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: tabular_to_fasta + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: tabular_to_fastq + owner: devteam + tool_panel_section_label: FASTA/FASTQ + + - name: trimmomatic + owner: pjbriggs + tool_panel_section_label: FASTA/FASTQ + + - name: trimns + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: ucsc_fasplit + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: umi_tools_count + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: umi_tools_dedup + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: umi_tools_extract + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: umi_tools_group + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: umi_tools_whitelist + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: fasta_regex_finder + owner: mbernt + tool_panel_section_label: FASTA/FASTQ + + - name: rasusa + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: bbtools_bbnorm + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: faffy_chunk + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: faffy_extract + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: faffy_merge + owner: iuc + tool_panel_section_label: FASTA/FASTQ + +# FILTER AND SORT + + - name: gffcompare + owner: iuc + tool_panel_section_label: Filter and Sort + + - name: xpath + owner: iuc + tool_panel_section_label: Filter and Sort + + - name: bigwig_outlier_bed + owner: iuc + tool_panel_section_label: Filter and Sort + +# GEMINI + + - name: gemini_actionable_mutations + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_amend + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_annotate + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_burden + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_db_info + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_fusions + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_gene_wise + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_inheritance + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_interactions + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_load + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_lof_sieve + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_pathways + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_qc + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_query + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_roh + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_set_somatic + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_stats + owner: iuc + tool_panel_section_label: Gemini + + - name: gemini_windower + owner: iuc + tool_panel_section_label: Gemini + + +# GENOME DIVERSITY + + - name: fasttree + owner: iuc + tool_panel_section_label: Genome Diversity + + +# GENOME EDITING + + - name: amplican + owner: iuc + tool_panel_section_label: Genome editing + + - name: crispr_studio + owner: iuc + tool_panel_section_label: Genome editing + + - name: mageck_test + owner: iuc + tool_panel_section_label: Genome editing + + - name: mageck_pathway + owner: iuc + tool_panel_section_label: Genome editing + + - name: mageck_mle + owner: iuc + tool_panel_section_label: Genome editing + + - name: mageck_gsea + owner: iuc + tool_panel_section_label: Genome editing + + - name: mageck_count + owner: iuc + tool_panel_section_label: Genome editing + + - name: sonneityping + owner: iuc + tool_panel_section_label: Genome editing + + +# GET DATA + + - name: ebi_metagenomics_run_downloader + owner: iuc + tool_panel_section_label: Get Data + + - name: ebi_search_rest_results + owner: iuc + tool_panel_section_label: Get Data + + - name: ega_download_client + owner: iuc + tool_panel_section_label: Get Data + + - name: fastq_dl + owner: iuc + tool_panel_section_label: Get Data + + - name: gdcwebapp + owner: iuc + tool_panel_section_label: Get Data + + - name: iedb_api + owner: iuc + tool_panel_section_label: Get Data + + - name: ncbi_acc_download + owner: iuc + tool_panel_section_label: Get Data + + - name: ncbi_datasets + owner: iuc + tool_panel_section_label: Get Data + + - name: pysradb_search + owner: iuc + tool_panel_section_label: Get Data + + - name: openalex_explorer + owner: iuc + tool_panel_section_label: Get Data + + - name: sra_tools + owner: iuc + tool_panel_section_label: Get Data + + - name: query_impc + owner: iuc + tool_panel_section_label: Get Data + + - name: enasearch_search_data + owner: iuc + tool_panel_section_label: Get Data + + - name: enasearch_retrieve_taxons + owner: iuc + tool_panel_section_label: Get Data + + - name: enasearch_retrieve_run_report + owner: iuc + tool_panel_section_label: Get Data + + - name: enasearch_retrieve_data + owner: iuc + tool_panel_section_label: Get Data + + - name: enasearch_retrieve_analysis_report + owner: iuc + tool_panel_section_label: Get Data + +# GRAPH/DISPLAY DATA + + - name: calculate_contrast_threshold + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: geneiobio + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: bandage + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: charts + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: circos + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: fasta_nucleotide_color_plot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_boxplot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_barplot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_heatmap + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_heatmap2 + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_histogram + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_pca + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_point + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggplot2_violin + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: gmaj + owner: devteam + tool_panel_section_label: Graph/Display Data + + - name: gwastools_manhattan_plot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: heatmap + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: histogram + owner: devteam + tool_panel_section_label: Graph/Display Data + + - name: intervene + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: jbrowse + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: jvarkit_wgscoverageplotter + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: maplot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: newick_utils + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: pathview + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: pe_histogram + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: pretext_snapshot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: pygenometracks + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: qq_manhattan + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: scatterplot + owner: devteam + tool_panel_section_label: Graph/Display Data + + - name: simpleweather + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: seaborn_pairgrid + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: seaborn + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: tsne + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ucsc_custom_track + owner: devteam + tool_panel_section_label: Graph/Display Data + + - name: upsetplot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: volcanoplot + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: xy_plot + owner: devteam + tool_panel_section_label: Graph/Display Data + + - name: graphlan + owner: iuc + tool_panel_section_label: Graph/Display Data + + - name: ggupset + owner: iuc + tool_panel_section_label: Graph/Display Data + +# HICEXPLORER + + - name: hicexplorer_chicaggregatestatistic + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicdifferentialtest + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicexportdata + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicplotviewpoint + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicqualitycontrol + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicsignificantinteractions + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicviewpoint + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_chicviewpointbackgroundmodel + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicadjustmatrix + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicaggregatecontacts + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicaverageregions + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicbuildmatrix + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicbuildmatrixmicroc + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hiccomparematrices + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hiccompartmentspolarization + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicconvertformat + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hiccorrectmatrix + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hiccorrelate + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicdetectloops + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicdifferentialtad + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicfindrestrictionsites + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicfindtads + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hichyperoptdetectloops + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicinfo + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicinterintratad + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicmergedomains + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicmergeloops + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicmergematrixbins + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicnormalize + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicpca + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicplotaverageregions + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicplotdistvscounts + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicplotmatrix + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicplotsvl + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicplotviewpoint + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicquickqc + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicsummatrices + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hictadclassifier + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hictraintadclassifier + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hictransform + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: hicexplorer_hicvalidatelocations + owner: bgruening + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicadjustmatrix + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schiccluster + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicclustercompartments + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicclusterminhash + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicclustersvl + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicconsensusmatrices + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schiccorrectmatrices + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schiccreatebulkmatrix + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicdemultiplex + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicinfo + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicmergematrixbins + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicmergetoscool + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicnormalize + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicplotclusterprofiles + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicplotconsensusmatrices + owner: iuc + tool_panel_section_label: HiCExplorer + + - name: schicexplorer_schicqualitycontrol + owner: iuc + tool_panel_section_label: HiCExplorer + + +# IMAGING + + - name: biapy + owner: iuc + tool_panel_section_label: Imaging + + - name: idr_download_by_ids + owner: iuc + tool_panel_section_label: Imaging + + - name: jdeskew + owner: iuc + tool_panel_section_label: Imaging + + - name: page_dewarp + owner: iuc + tool_panel_section_label: Imaging + + - name: spyboat + owner: iuc + tool_panel_section_label: Imaging + + - name: pdfimages + owner: iuc + tool_panel_section_label: Imaging + + +# JOIN, SUBTRACT AND GROUP + + - name: collection_column_join + owner: iuc + tool_panel_section_label: Join, Subtract and Group + + - name: subtract + owner: devteam + tool_panel_section_label: Operate on Genomic Intervals + + +# MACHINE LEARNING + + - name: chopin2 + owner: iuc + tool_panel_section_label: Machine Learning + + - name: deepmicro + owner: iuc + tool_panel_section_label: Machine Learning + + - name: mcl + owner: iuc + tool_panel_section_label: Machine Learning + + - name: virhunter + owner: iuc + tool_panel_section_label: Machine Learning + + - name: decontaminator + owner: iuc + tool_panel_section_label: Machine Learning + + +# MAPPING + + - name: bbtools_bbmap + owner: iuc + tool_panel_section_label: Mapping + + - name: bioext_bealign + owner: iuc + tool_panel_section_label: Mapping + + - name: bowtie2 + owner: devteam + tool_panel_section_label: Mapping + + - name: bowtie_color_wrappers + owner: devteam + tool_panel_section_label: Mapping + + - name: bowtie_wrappers + owner: devteam + tool_panel_section_label: Mapping + + - name: bwa + owner: devteam + tool_panel_section_label: Mapping + + - name: bwa_mem2 + owner: iuc + tool_panel_section_label: Mapping + + - name: chromap + owner: iuc + tool_panel_section_label: Mapping + + - name: fastga + owner: iuc + tool_panel_section_label: Mapping + + - name: fgbio_findswitchbackreads + owner: iuc + tool_panel_section_label: Mapping + + - name: hisat2 + owner: iuc + tool_panel_section_label: Mapping + + - name: kma + owner: iuc + tool_panel_section_label: Mapping + + - name: lastz + owner: devteam + tool_panel_section_label: Mapping + + - name: lastz_paired_reads + owner: devteam + tool_panel_section_label: Mapping + + - name: lexicmap + owner: iuc + tool_panel_section_label: Mapping + + - name: megablast_wrapper + owner: devteam + tool_panel_section_label: Mapping + + - name: megablast_xml_parser + owner: devteam + tool_panel_section_label: Mapping + + - name: minimap2 + owner: iuc + tool_panel_section_label: Mapping + + - name: pbmm2 + owner: iuc + tool_panel_section_label: Mapping + + - name: rgrnastar + owner: iuc + tool_panel_section_label: Mapping + + - name: rna_starsolo + owner: iuc + tool_panel_section_label: Mapping + + - name: samtools_cram_to_bam + owner: iuc + tool_panel_section_label: Mapping + + - name: star_fusion + owner: iuc + tool_panel_section_label: Mapping + + - name: tophat2 + owner: devteam + tool_panel_section_label: Mapping + + - name: wfmash + owner: iuc + tool_panel_section_label: Mapping + + - name: winnowmap + owner: iuc + tool_panel_section_label: Mapping + + +# METAGENOMIC ANALYSIS + + - name: cami_amber + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cami_amber_add + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cami_amber_convert + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_mergesequencetables + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: deacon_index_union + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: deacon_index_intersect + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: deacon_index_dump + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: deacon_index_diff + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: deacon_index_build + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: deacon_filter + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: halla + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: graphlan_annotate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: gamma_s + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: gamma + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: fastspar_reduce + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: fastspar_pvalues + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: eukrep + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kaiju_addtaxonnames + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kaiju_kaiju2table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kaiju_kaiju2krona + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kaiju_mergeoutputs + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kaiju_kaiju + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kegg_pathways_completeness + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: data_manager_kaiju + owner: iuc + + - name: mothur_taxonomy_to_krona + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mothur_rename_seqs + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mothur_merge_count + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mothur_chimera_vsearch + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mothur_biom_info + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metamdbg_gfa + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metamdbg_asm + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: name2taxid + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: samestr + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: taxonomy_filter_refseq + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: picrust_predict_metagenomes + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: picrust_normalize_by_copy_number + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: picrust_metagenome_contributions + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: picrust_format_tree_and_trait_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: picrust_compare_biom + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: picrust_categorize + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: profile2cami + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: gtdb_to_taxdump + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: biobox_add_taxid + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: krakentools_kreport2krona + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: krakentools_kreport2mpa + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: krakentools_beta_diversity + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: krakentools_alpha_diversity + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: krakentools_combine_kreports + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: krakentools_extract_kraken_reads + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_alpha_diversity + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_boxplot + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_core + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_export_otu + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_export_fasta + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_frequency + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_heatmap + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_load + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_merge_ampvis2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_mergereplicates + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_octave + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_ordinate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_otu_network + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_rankabundance + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_rarecurve + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_setmetadata + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_subset_samples + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_subset_taxa + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_timeseries + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ampvis2_venn + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: ancombc + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: bigscape + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: binning_refiner + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metawrapmg_binning + owner: galaxy-australia + tool_panel_section_label: Metagenomic Analysis + + - name: bio_hansel + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: bmtagger + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: bracken + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cat_add_names + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cat_bins + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cat_contigs + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cat_prepare + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: cat_summarise + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_analyze + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_lineage_set + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_lineage_wf + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_plot + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_qa + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_taxon_set + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_taxonomy_wf + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_tetra + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_tree + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm_tree_qa + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: checkm2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: comebin + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: comebin_bam + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: concoct + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: concoct_coverage_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: concoct_cut_up_fasta + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: concoct_extract_fasta_bins + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: concoct_merge_cut_up_clustering + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: coverm_contig + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: coverm_genome + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: customize_metaphlan_database + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_assigntaxonomyaddspecies + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_dada + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_filterandtrim + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_learnerrors + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_makesequencetable + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_mergepairs + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_plotcomplexity + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_plotqualityprofile + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_removebimeradenovo + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_seqcounts + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_primercheck + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dada2_mergesequencetables + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: das_tool + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: data_manager_build_bracken_database + owner: iuc + + - name: amrfinderplus_data_manager_build + owner: iuc + + - name: data_manager_bakta + owner: iuc + + - name: decontam + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: drep_compare + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: drep_dereplicate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dram_strainer + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dram_distill + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dram_annotate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dram_merge_annotations + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: dram_neighborhoods + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: extract_metaphlan_database + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: fasta_to_contig2bin + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: find_diag_hits + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: fur + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: gi2taxonomy + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: gtdbtk_classify_wf + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_associate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_barplot + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_genefamilies_genus_level + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_join_tables + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_reduce_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_regroup_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_rename_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_renorm_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_rna_dna_norm + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_split_stratified_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_split_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_strain_profiler + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann2_unpack_pathways + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: combine_metaphlan2_humann2 + owner: bebatut + tool_panel_section_label: Metagenomic Analysis + + - name: humann_associate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_barplot + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_join_tables + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_reduce_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_regroup_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_rename_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_renorm_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_rna_dna_norm + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_split_stratified_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_split_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_strain_profiler + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: humann_unpack_pathways + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: instrain_compare + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: instrain_profile + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: jellyfish + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_abundance_distribution + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_abundance_distribution_single + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_count_median + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_extract_partitions + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_filter_abundance + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_filter_below_abundance_cutoff + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_normalize_by_median + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: khmer_partition + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kleborate + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kneaddata + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kraken + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: kraken2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kraken2tax + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: kraken_biom + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kraken_filter + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: kraken_report + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: kraken_taxonomy_report + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kraken_translate + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: last + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: lca_wrapper + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: maaslin2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: maaslin3 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mmuphin + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: malt_run + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mash + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mash_sketch + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mash_paste + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mash_dist + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mapseq + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: maxbin2 + owner: mbernt + tool_panel_section_label: Metagenomic Analysis + + - name: megan_blast2lca + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: megan_blast2rma + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: megan_daa2info + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: megan_daa2rma + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: megan_daa_meganizer + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: megan_read_extractor + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: megan_sam2rma + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metabuli + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: merge_metaphlan_tables + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metabat2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metabat2_jgi_summarize_bam_contig_depths + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metaeuk_easy_predict + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metaphlan + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mg_toolkit_bulk_download + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mg_toolkit_original_metadata + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: micro_decon + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: nonpareil + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_add_rank_names + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_from_biom + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_from_dada2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_plot_bar + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_plot_ordination + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_plot_richness + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: phyloseq_tax_glom + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: pimento_are_there_primers + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: pimento_auto + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: pimento_choose_primer_cutoff + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: pimento_find_cutoffs + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: pimento_gen_bcv + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: pimento_std + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_pipelines_toolkit_classify_var_regions + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_pipelines_toolkit_make_asv_count_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_pipelines_toolkit_mapseq_to_asv_table + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_pipelines_toolkit_permute_primers + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_pipelines_toolkit_primer_val_classification + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_pipelines_toolkit_rev_comp_se_primers + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: plasflow + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: poisson2test + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: polypolish + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: recentrifuge + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: scoary + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: semibin + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: semibin_bin + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: semibin_concatenate_fasta + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: semibin_generate_cannot_links + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: semibin_generate_sequence_features + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: semibin_train + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: seqsero2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: srst2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: t2ps + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: t2t_report + owner: devteam + tool_panel_section_label: Metagenomic Analysis + + - name: taxonomy_krona_chart + owner: crs4 + tool_panel_section_label: Metagenomic Analysis + + - name: valet + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vapor + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vcontact2 + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vcontact2_gene2genome + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vegan_diversity + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vegan_fisher_alpha + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vegan_rarefaction + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: virannot_blast2tsv + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: virannot_otu + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: virannot_rps2tsv + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: vsearch + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: qiime_extract_viz + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: taxpasta + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: fairy_cov + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: fairy_sketch + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: binette + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kmer2stats + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metasbt_index + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: metasbt_profile + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mgnify_genome_search + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: kmindex + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mags_visualization_comp_conta + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mags_visualization_drep_cluster_annot + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mags_visualization_drep_cluster_func + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mags_visualization_pathway_module_heatmap + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mags_visualization_sample_heatmap + owner: iuc + tool_panel_section_label: Metagenomic Analysis + + - name: mags_visualization_taxa_sankey + owner: iuc + tool_panel_section_label: Metagenomic Analysis + +# MOTHUR + + - name: mothur_align_check + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_align_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_amova + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_anosim + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_bin_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_bellerophon + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_ccode + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_check + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_perseus + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_pintail + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_slayer + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chimera_uchime + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_chop_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_classify_otu + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_classify_rf + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_classify_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_classify_tree + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_clearcut + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_cluster + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_cluster_classic + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_cluster_fragments + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_cluster_split + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_collect_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_collect_single + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_consensus_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_cooccurrence + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_corr_axes + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_count_groups + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_count_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_create_database + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_degap_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_deunique_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_deunique_tree + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_dist_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_dist_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_fastq_info + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_filter_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_filter_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_communitytype + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_coremicrobiome + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_dists + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_group + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_groups + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_label + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_lineage + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_mimarkspackage + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_otulabels + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_otulist + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_oturep + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_otus + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_rabund + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_relabund + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_sabund + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_get_sharedseqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_hcluster + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_heatmap_bin + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_heatmap_sim + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_homova + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_indicator + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_lefse + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_libshuff + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_list_otulabels + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_list_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_biom + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_contigs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_design + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_fastq + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_group + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_lefse + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_lookup + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_make_sra + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_mantel + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_merge_files + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_merge_groups + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_merge_sfffiles + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_merge_taxsummary + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_metastats + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_mimarks_attributes + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_nmds + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_normalize_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_otu_association + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_otu_hierarchy + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_pairwise_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_parse_list + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_parsimony + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_pca + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_pcoa + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_pcr_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_phylo_diversity + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_phylotype + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_pre_cluster + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_primer_design + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_rarefaction_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_rarefaction_single + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_dists + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_groups + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_lineage + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_otulabels + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_otus + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_rare + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_remove_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_reverse_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_screen_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_sens_spec + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_seq_error + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_sffinfo + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_shhh_flows + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_shhh_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_sort_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_split_abund + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_split_groups + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_sub_sample + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_summary_qual + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_summary_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_summary_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_summary_single + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_summary_tax + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_tree_shared + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_trim_flows + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_trim_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_unifrac_unweighted + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_unifrac_weighted + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_unique_seqs + owner: iuc + tool_panel_section_label: Mothur + + - name: mothur_venn + owner: iuc + tool_panel_section_label: Mothur + + +# MOTIF TOOLS + + - name: meme_chip + owner: iuc + tool_panel_section_label: Motif Tools + + - name: meme_fimo + owner: iuc + tool_panel_section_label: Motif Tools + + - name: meme_meme + owner: iuc + tool_panel_section_label: Motif Tools + + - name: meme_psp_gen + owner: iuc + tool_panel_section_label: Motif Tools + + - name: weblogo3 + owner: devteam + tool_panel_section_label: Motif Tools + + - name: meme_streme + owner: iuc + tool_panel_section_label: Motif Tools + + +# MULTIPLE ALIGNMENTS + + - name: amas_concat + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: amas_remove + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: amas_replicate + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: amas_split + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: amas_summary + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: cd_hit + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: chromeister + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: clustalw + owner: devteam + tool_panel_section_label: Multiple Alignments + + - name: gecko + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2fasta + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2maf + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2paf + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2vg + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_haladdtobranch + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halalignedextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halalignmentdepth + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halbranchmutations + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halcoverage + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halindels + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halliftover + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hallodextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halmaskextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halpctid + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halremovegenome + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halremovesubtree + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halrenamegenomes + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halrenamesequences + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halreplacegenome + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halsnps + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halstats + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halsummarizemutations + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halsynteny + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halupdatebranchlengths + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halvalidate + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halwiggleliftover + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_maf2hal + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: kc_align + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: maf_stats + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mashmap + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mmseqs2_easy_linclust_clustering + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: msaboot + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mummer_delta_filter + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mummer_dnadiff + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mummer_mummer + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mummer_mummerplot + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mummer_nucmer + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: mummer_show_coords + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: pipelign + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: trimal + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: sina + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2fasta + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2maf + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2paf + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hal2vg + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_haladdtobranch + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halalignedextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halalignmentdepth + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halbranchmutations + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halcoverage + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halindels + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halliftover + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_hallodextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halmaskextract + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halpctid + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halremovegenome + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halremovesubtree + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halrenamegenomes + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halrenamesequences + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halreplacegenome + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halsnps + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halstats + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halsummarizemutations + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halsynteny + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halupdatebranchlengths + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halvalidate + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_halwiggleliftover + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: hal_maf2hal + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_add_mismatches + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_chain + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_dechunk + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_dedupe + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_filter + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_invert + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_shatter + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_tile + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_to_bed + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_trim + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_upconvert + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: paffy_view + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_chainprenet + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_chainsort + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_chainswap + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_mafaddirows + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_mafcoverage + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_maffetch + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_maffrag + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_maffrags + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_mafgene + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_netchainsubset + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: ucsc_netsyntenic + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: cawlign + owner: iuc + tool_panel_section_label: Multiple Alignments + + - name: pal2nal + owner: iuc + tool_panel_section_label: Multiple Alignments + + +# Natural Language Processing + + - name: tesseract + owner: iuc + tool_panel_section_label: Imaging + + +# NCBI BLAST + + - name: bbtools_bbduk + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: diamond + owner: bgruening + tool_panel_section_label: NCBI Blast + + - name: magicblast + owner: iuc + tool_panel_section_label: NCBI Blast + + - name: ncbi_blast_plus + owner: devteam + tool_panel_section_label: NCBI Blast + + +# NANOPORE + + - name: clair3 + owner: iuc + tool_panel_section_label: Nanopore + + - name: flair_collapse + owner: iuc + tool_panel_section_label: Nanopore + + - name: flair_correct + owner: iuc + tool_panel_section_label: Nanopore + + - name: m6anet + owner: iuc + tool_panel_section_label: Nanopore + + - name: medaka_consensus + owner: iuc + tool_panel_section_label: Nanopore + + - name: medaka_consensus_pipeline + owner: iuc + tool_panel_section_label: Nanopore + + - name: medaka_variant + owner: iuc + tool_panel_section_label: Nanopore + + - name: medaka_variant_pipeline + owner: iuc + tool_panel_section_label: Nanopore + + - name: nanocompore_db + owner: iuc + tool_panel_section_label: Nanopore + + - name: nanocompore_sampcomp + owner: iuc + tool_panel_section_label: Nanopore + + - name: nanocomp + owner: iuc + tool_panel_section_label: Nanopore + + - name: chopper + owner: iuc + tool_panel_section_label: Nanopore + + - name: nanoplot + owner: iuc + tool_panel_section_label: Nanopore + + - name: nanopolishcomp_eventaligncollapse + owner: iuc + tool_panel_section_label: Nanopore + + - name: nanopolishcomp_freqmethcalculate + owner: iuc + tool_panel_section_label: Nanopore + + - name: ngmlr + owner: iuc + tool_panel_section_label: Nanopore + + - name: ont_fast5_api_compress_fast5 + owner: iuc + tool_panel_section_label: Nanopore + + - name: ont_fast5_api_fast5_subset + owner: iuc + tool_panel_section_label: Nanopore + + - name: ont_fast5_api_multi_to_single_fast5 + owner: iuc + tool_panel_section_label: Nanopore + + - name: ont_fast5_api_single_to_multi_fast5 + owner: iuc + tool_panel_section_label: Nanopore + + - name: porechop + owner: iuc + tool_panel_section_label: Nanopore + + - name: pycoqc + owner: iuc + tool_panel_section_label: Nanopore + + +# ONTOLOGY + - name: onto_tk_get_ancestor_terms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_child_terms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_descendent_terms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_parent_terms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_parent_terms_by_relationship_type + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_relationship_id_vs_relationship_def + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_relationship_id_vs_relationship_name + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_relationship_id_vs_relationship_namespace + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_relationship_types + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_root_terms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_subontology_from + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_term_synonyms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_terms + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_get_terms_by_relationship_type + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_obo2owl + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_obo2rdf + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_term_id_vs_term_def + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_term_id_vs_term_def + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + + - name: onto_tk_term_id_vs_term_name + owner: iuc + tool_panel_section_label: OBO Ontology manipulation + +# OPERATE ON GENOMIC INTERVALS + + - name: basecoverage + owner: devteam + tool_panel_section_label: Operate on Genomic Intervals + + - name: cluster + owner: devteam + tool_panel_section_label: Operate on Genomic Intervals + + - name: complement + owner: devteam + tool_panel_section_label: Operate on Genomic Intervals + + - name: concat + owner: devteam + tool_panel_section_label: Operate on Genomic Intervals + +# OTHER TOOLS + - name: packaged_annotation_loader + owner: iuc + tool_panel_section_label: Other Tools + + - name: optdoe + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_esummary + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_esearch + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_epost + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_elink + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_einfo + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_efetch + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_eutils_ecitmatch + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_entrez_direct_esearch + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_entrez_direct_einfo + owner: iuc + tool_panel_section_label: Other Tools + + - name: ncbi_entrez_direct_efetch + owner: iuc + tool_panel_section_label: Other Tools + + - name: lcrgenie + owner: iuc + tool_panel_section_label: Other Tools + + - name: duplex_family_size_distribution + owner: iuc + tool_panel_section_label: Other Tools + + - name: dnabot + owner: iuc + tool_panel_section_label: Other Tools + + - name: data_source_iris_tcga + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_anndata + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_cell_attribute + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_cell_attribute_list + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_cell_df + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_celltype_list + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_conc_attribute + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_conc_df + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_substrate_list + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_unit_dict + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_get_version + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_make_cell_vtk + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_make_conc_vtk + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_make_gif + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_make_graph_gml + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_make_movie + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_plot_contour + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_plot_scatter + owner: iuc + tool_panel_section_label: Other Tools + + - name: pcdl_plot_timeseries + owner: iuc + tool_panel_section_label: Other Tools + + + - name: straindesign_simulate_deletion + owner: iuc + tool_panel_section_label: Other Tools + + - name: straindesign_reduce_model + owner: iuc + tool_panel_section_label: Other Tools + + - name: straindesign_analyzing_model + owner: iuc + tool_panel_section_label: Other Tools + + - name: selenzy_wrapper + owner: iuc + tool_panel_section_label: Other Tools + + - name: sbml2sbol + owner: iuc + tool_panel_section_label: Other Tools + + - name: rrparser + owner: iuc + tool_panel_section_label: Other Tools + + - name: rpfba + owner: iuc + tool_panel_section_label: Other Tools + + - name: rpbasicdesign + owner: iuc + tool_panel_section_label: Other Tools + + - name: rp2paths + owner: iuc + tool_panel_section_label: Other Tools + + - name: rp2biosensor + owner: iuc + tool_panel_section_label: Other Tools + +# PEAK CALLING + + - name: ccat + owner: devteam + tool_panel_section_label: Peak Calling + + - name: genrich + owner: iuc + tool_panel_section_label: Peak Calling + + - name: macs + owner: devteam + tool_panel_section_label: Peak Calling + + - name: macs2 + owner: iuc + tool_panel_section_label: Peak Calling + + - name: peakzilla + owner: iuc + tool_panel_section_label: Peak Calling + + - name: sicer + owner: devteam + tool_panel_section_label: Peak Calling + + - name: zerone + owner: iuc + tool_panel_section_label: Peak Calling + + - name: diffbind + owner: bgruening + tool_panel_section_label: Peak Calling + + +# PHENOTYPE ASSOCIATION + + - name: ctd_batch + owner: devteam + tool_panel_section_label: Phenotype Association + + - name: divide_pg_snp + owner: devteam + tool_panel_section_label: Phenotype Association + + - name: hgv_fundo + owner: devteam + tool_panel_section_label: Phenotype Association + + - name: hgv_hilbertvis + owner: devteam + tool_panel_section_label: Phenotype Association + + - name: snpfreq + owner: devteam + tool_panel_section_label: Phenotype Association + + - name: vcf2pgsnp + owner: devteam + tool_panel_section_label: Phenotype Association + + - name: gemma + owner: iuc + tool_panel_section_label: Phenotype Association + +# PHYLOGENETICS + + - name: astral + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: beast2_treeannotator + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: beast2_logcombiner + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: beast2_beast + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: fastreer_dist2tree + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: fastreer_fasta2dist + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: fastreer_vcf2dist + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: fastreer_vcf2tree + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: foldtree + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hybpiper + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_absrel + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_annotate + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_b_still + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_bgm + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_busted + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_cfel + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_cln + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_conv + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_fade + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_fel + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_fubar + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_gard + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_infer_stasis_clusters + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_meme + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_prime + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_relax + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_slac + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_sm19 + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_strike_ambigs + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: hyphy_summary + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: nextalign + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: nextclade + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: pangolin + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: phyml + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_add_descriptions + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_hsp + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_metagenome_pipeline + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_pathway_pipeline + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_pipeline + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_place_seqs + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: picrust2_shuffle_predictions + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: raxml + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: raxmlng + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: read2tree + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: sarscov2formatter + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: sarscov2summary + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: snp_dists + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: snp_sites + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: usher + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: usher_matutils + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: pacu_map + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: pacu_snp + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: squirrel_phylo + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: squirrel_qc + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: ete_treeviewer + owner: iuc + tool_panel_section_label: Phylogenetics + + - name: usher_ripples + owner: iuc + tool_panel_section_label: Phylogenetics + +# PICARD + + - name: picard + owner: devteam + tool_panel_section_label: Picard + + +# PROTEOMICS + + - name: 3dbeacons_api + owner: iuc + tool_panel_section_label: Proteomics + + - name: colabfold_msa + owner: iuc + tool_panel_section_label: Proteomics + + - name: colabfold_alphafold + owner: iuc + tool_panel_section_label: Proteomics + + - name: constava + owner: iuc + tool_panel_section_label: Proteomics + + - name: prot_scriber + owner: iuc + tool_panel_section_label: Proteomics + + - name: proteinortho + owner: iuc + tool_panel_section_label: Proteomics + + - name: proteinortho_clustering + owner: iuc + tool_panel_section_label: Proteomics + + - name: proteinortho_grab_proteins + owner: iuc + tool_panel_section_label: Proteomics + + - name: proteinortho_summary + owner: iuc + tool_panel_section_label: Proteomics + + - name: scop3p + owner: iuc + tool_panel_section_label: Proteomics + + - name: swissmodel_modelling_api + owner: iuc + tool_panel_section_label: Proteomics + + - name: syndiva + owner: iuc + tool_panel_section_label: Proteomics + +# QUALITY CONTROL + + - name: multiqc + owner: iuc + tool_panel_section_label: Quality Control + + - name: sequali + owner: iuc + tool_panel_section_label: Quality Control + + - name: fileidentification + owner: iuc + tool_panel_section_label: Quality Control + + - name: qualifilter + owner: iuc + tool_panel_section_label: Quality Control + +# RAD-SEQ + + - name: bayescan + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_assembleperead + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_cstacks + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_denovomap + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_genotypes + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_populations + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_procrad + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_pstacks + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_refmap + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_rxstacks + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_sstacks + owner: iuc + tool_panel_section_label: RAD-seq + + - name: stacks_ustacks + owner: iuc + tool_panel_section_label: RAD-seq + + +# RNA ANALYSIS + + - name: arriba + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: arriba_draw_fusions + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: arriba_get_filters + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: barrnap + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: brew3r_r + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: cemitool + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: cherri_eval + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: cherri_train + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: chira_collapse + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: chira_extract + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: chira_map + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: chira_merge + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: chira_quantify + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: circexplorer2 + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: crosscontamination_barcode_filter + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: cuffcompare + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cuffdiff + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cufflinks + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cuffmerge + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cuffnorm + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cuffquant + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cummerbund + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: cummerbund_to_tabular + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: deg_annotate + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: describe_samples + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: deseq2 + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: dexseq + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: eastr + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: edger + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: egsea + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: express + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: featurecounts + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: feelnc + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: filter_transcripts_via_tracking + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: genomic_super_signature + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: heinz + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: htseq_count + owner: lparsons + tool_panel_section_label: RNA Analysis + + - name: idr + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: isoformswitchanalyzer + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: kallisto_pseudo + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: kallisto_quant + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: limma_voom + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: masigpro + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: migmap + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: mirnature + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: psiclass + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: qualimap_counts + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: qualimap_rnaseq + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: recount3 + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: ribowaltz_plot + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: ribowaltz_process + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: rnaquast + owner: iuc + tool_panel_section_label: Assembly + + - name: rseqc + owner: nilesh + tool_panel_section_label: RNA Analysis + + - name: ruvseq + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: sailfish + owner: bgruening + tool_panel_section_label: RNA Analysis + + - name: salmon + owner: bgruening + tool_panel_section_label: RNA Analysis + + - name: salmonquantmerge + owner: bgruening + tool_panel_section_label: RNA Analysis + + - name: scpipe + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_preprocessing + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_integrate + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_reduce_dimension + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_create + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_plot + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_data + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: seurat_clustering + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: sleuth + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: slamdunk + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: sleuth + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: stringtie + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: tetoolkit_tetranscripts + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: tophat_fusion_post + owner: devteam + tool_panel_section_label: RNA Analysis + + - name: tsenat + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: transdecoder + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_abundance_estimates_to_matrix + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_align_and_estimate_abundance + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_analyze_diff_expr + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_contig_exn50_statistic + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_define_clusters_by_cutting_tree + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_filter_low_expr_transcripts + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_gene_to_trans_map + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_run_de_analysis + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_samples_qccheck + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_super_transcripts + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinity_stats + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: trinotate + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: tximport + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: sfold + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: aldex2 + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: prestor_abseq3 + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_partition + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_parselog + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_parseheaders + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_pairseq + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_maskprimers + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_filterseq + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_collapseseq + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_buildconsensus + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_assemblepairs + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: presto_alignsets + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: pureclip + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: ngsderive_strandedness + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: wgcna_softpower + owner: iuc + tool_panel_section_label: RNA Analysis + + - name: wgcna_network + owner: iuc + tool_panel_section_label: RNA Analysis + +# REGIONAL VARIATION + + - name: categorize_elements_satisfying_criteria + owner: devteam + tool_panel_section_label: Regional Variation + + - name: compute_motif_frequencies_for_all_motifs + owner: devteam + tool_panel_section_label: Regional Variation + + - name: compute_motifs_frequency + owner: devteam + tool_panel_section_label: Regional Variation + + - name: delete_overlapping_indels + owner: devteam + tool_panel_section_label: Regional Variation + + - name: draw_stacked_barplots + owner: devteam + tool_panel_section_label: Graph/Display Data + + - name: featurecounter + owner: devteam + tool_panel_section_label: Regional Variation + + - name: indels_3way + owner: devteam + tool_panel_section_label: Regional Variation + + +# SAM/BAM + + - name: samtools_faidx + owner: iuc + tool_panel_section_label: 'SAM/BAM' + + - name: bamutil_clip_overlap + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: bamtools + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: bamtools_filter + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: bamtools_split + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: bamtools_split_mapped + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: bamtools_split_paired + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: bamtools_split_ref + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: bamtools_split_tag + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: bamutil_diff + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: ngsutils_bam_filter + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: pileup_interval + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: pileup_parser + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: qualimap_bamqc + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: qualimap_multi_bamqc + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: sam2interval + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: sam_merge + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: sam_pileup + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtool_filter2 + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_ampliconclip + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_bedcov + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_calmd + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_coverage + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_consensus + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_collate + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_depth + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_fastx + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_fixmate + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_flagstat + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_idxstats + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_markdup + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_merge + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samtools_mpileup + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_phase + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_reheader + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_rmdup + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_slice_bam + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_sort + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_split + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_stats + owner: devteam + tool_panel_section_label: SAM/BAM + + - name: samtools_view + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: tag_pileup_frequency + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: mosdepth + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: tasmanian_mismatch + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: coverage_report + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: cramino + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: nugen_nudup + owner: iuc + tool_panel_section_label: SAM/BAM + + - name: samblaster + owner: iuc + tool_panel_section_label: SAM/BAM + +# SANGER SEQUENCING + + - name: tracy_align + owner: iuc + tool_panel_section_label: Sanger Sequencing + + - name: tracy_assemble + owner: iuc + tool_panel_section_label: Sanger Sequencing + + - name: tracy_basecall + owner: iuc + tool_panel_section_label: Sanger Sequencing + + - name: tracy_decompose + owner: iuc + tool_panel_section_label: Sanger Sequencing + +# SEND DATA + + - name: ena_upload + owner: iuc + tool_panel_section_label: Send Data + + - name: ena_webin_cli + owner: iuc + tool_panel_section_label: Send Data + +# SPATIAL OMICS + + - name: spatialdata_io + owner: iuc + tool_panel_section_label: Spatial Omics + + - name: spatialdata_operation + owner: iuc + tool_panel_section_label: Spatial Omics + + - name: spatialdata_plot + owner: iuc + tool_panel_section_label: Spatial Omics + + - name: squidpy_graph + owner: iuc + tool_panel_section_label: Spatial Omics + + - name: squidpy_plot + owner: iuc + tool_panel_section_label: Spatial Omics + +# SINGLE-CELL + + - name: cosg + owner: iuc + tool_panel_section_label: Single-cell + + - name: sceasy_convert + owner: iuc + tool_panel_section_label: Single-cell + + - name: snapatac2_network + owner: iuc + tool_panel_section_label: Single-cell + + - name: snapatac2_metrics + owner: iuc + tool_panel_section_label: Single-cell + + - name: sopa_segmentation + owner: iuc + tool_panel_section_label: Single-cell + + - name: sopa_resolve + owner: iuc + tool_panel_section_label: Single-cell + + - name: sopa_report + owner: iuc + tool_panel_section_label: Single-cell + + - name: sopa_patchify + owner: iuc + tool_panel_section_label: Single-cell + + - name: sopa_aggregate + owner: iuc + tool_panel_section_label: Single-cell + + - name: velocyto_cli + owner: iuc + tool_panel_section_label: Single-cell + + - name: cite_seq_count + owner: iuc + tool_panel_section_label: Single-cell + + - name: alevin + owner: bgruening + tool_panel_section_label: Single-cell + + - name: anndata_export + owner: iuc + tool_panel_section_label: Single-cell + + - name: anndata_import + owner: iuc + tool_panel_section_label: Single-cell + + - name: anndata_inspect + owner: iuc + tool_panel_section_label: Single-cell + + - name: anndata_manipulate + owner: iuc + tool_panel_section_label: Single-cell + + - name: dropletutils + owner: iuc + tool_panel_section_label: Single-cell + + - name: drug2cell + owner: iuc + tool_panel_section_label: Single-cell + + - name: modify_loom + owner: iuc + tool_panel_section_label: Single-cell + + - name: raceid_clustering + owner: iuc + tool_panel_section_label: Single-cell + + - name: raceid_filtnormconf + owner: iuc + tool_panel_section_label: Single-cell + + - name: raceid_inspectclusters + owner: iuc + tool_panel_section_label: Single-cell + + - name: raceid_inspecttrajectory + owner: iuc + tool_panel_section_label: Single-cell + + - name: raceid_trajectory + owner: iuc + tool_panel_section_label: Single-cell + + - name: scanpy_cluster_reduce_dimension + owner: iuc + tool_panel_section_label: Single-cell + + - name: scanpy_filter + owner: iuc + tool_panel_section_label: Single-cell + + - name: scanpy_inspect + owner: iuc + tool_panel_section_label: Single-cell + + - name: scanpy_normalize + owner: iuc + tool_panel_section_label: Single-cell + + - name: scanpy_plot + owner: iuc + tool_panel_section_label: Single-cell + + - name: scanpy_remove_confounders + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_create_qcmetric_ready_sce + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_filter + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_normalize + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_plot_dist_scatter + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_plot_exprs_freq + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_plot_pca + owner: iuc + tool_panel_section_label: Single-cell + + - name: scater_plot_tsne + owner: iuc + tool_panel_section_label: Single-cell + + - name: sinto_barcode + owner: iuc + tool_panel_section_label: Single-cell + + - name: sinto_fragments + owner: iuc + tool_panel_section_label: Single-cell + + - name: spapros_selection + owner: iuc + tool_panel_section_label: Single-cell + + - name: spapros_evaluation + owner: iuc + tool_panel_section_label: Single-cell + + - name: episcanpy_build_matrix + owner: iuc + tool_panel_section_label: Single-cell + + - name: episcanpy_preprocess + owner: iuc + tool_panel_section_label: Single-cell + + - name: episcanpy_cluster_embed + owner: iuc + tool_panel_section_label: Single-cell + + - name: baredsc_1d + owner: iuc + tool_panel_section_label: Single-cell + + - name: baredsc_2d + owner: iuc + tool_panel_section_label: Single-cell + + - name: baredsc_combine_1d + owner: iuc + tool_panel_section_label: Single-cell + + - name: baredsc_combine_2d + owner: iuc + tool_panel_section_label: Single-cell + + - name: snapatac2_preprocessing + owner: iuc + tool_panel_section_label: Single-cell + + - name: snapatac2_clustering + owner: iuc + tool_panel_section_label: Single-cell + + - name: snapatac2_plotting + owner: iuc + tool_panel_section_label: Single-cell + + - name: snapatac2_peaks_and_motif + owner: iuc + tool_panel_section_label: Single-cell + + - name: infercnv + owner: iuc + tool_panel_section_label: Single-cell + + - name: spacexr_cside + owner: iuc + tool_panel_section_label: Single-cell + + - name: spacexr_rctd + owner: iuc + tool_panel_section_label: Single-cell + + - name: mudata_import_export + owner: iuc + tool_panel_section_label: Single-cell + + - name: preprocess_muon + owner: iuc + tool_panel_section_label: Single-cell + + - name: cluster_analyze_embed_muon + owner: iuc + tool_panel_section_label: Single-cell + + - name: plot_muon + owner: iuc + tool_panel_section_label: Single-cell + + - name: anndata2ri + owner: iuc + tool_panel_section_label: Single-cell + + - name: bellavista_prepare + owner: iuc + tool_panel_section_label: Single-cell + + - name: celltypist + owner: iuc + tool_panel_section_label: Single-cell + + - name: liana_methods + owner: iuc + tool_panel_section_label: Single-cell + + - name: liana_misty + owner: iuc + tool_panel_section_label: Single-cell + + - name: liana_multi + owner: iuc + tool_panel_section_label: Single-cell + + - name: liana_plot + owner: iuc + tool_panel_section_label: Single-cell + + - name: liana_resource + owner: iuc + tool_panel_section_label: Single-cell + + - name: liana_utils + owner: iuc + tool_panel_section_label: Single-cell + +# STATISTICS + + - name: best_regression_subsets + owner: devteam + tool_panel_section_label: Statistics + + - name: canonical_correlation_analysis + owner: devteam + tool_panel_section_label: Statistics + + - name: clustering_from_distmat + owner: iuc + tool_panel_section_label: Statistics + + - name: correlation + owner: devteam + tool_panel_section_label: Statistics + + - name: count_gff_features + owner: devteam + tool_panel_section_label: Statistics + + - name: dwt_var_perfeature + owner: devteam + tool_panel_section_label: Statistics + + - name: fastspar + owner: iuc + tool_panel_section_label: Statistics + + - name: general_matrix_tool + owner: iuc + tool_panel_section_label: Statistics + + - name: generate_pc_lda_matrix + owner: devteam + tool_panel_section_label: Statistics + + - name: graphembed + owner: iuc + tool_panel_section_label: Statistics + + ## IWtomic - Interval-Wise Testing for Omics Data + + - name: ipfp_normalisation + owner: iuc + tool_panel_section_label: Statistics + + - name: iwtomics_loadandplot + owner: iuc + tool_panel_section_label: Statistics + + - name: iwtomics_plotwithscale + owner: iuc + tool_panel_section_label: Statistics + + - name: iwtomics_testandplot + owner: iuc + tool_panel_section_label: Statistics + + - name: kernel_canonical_correlation_analysis + owner: devteam + tool_panel_section_label: Statistics + + - name: kernel_principal_component_analysis + owner: devteam + tool_panel_section_label: Statistics + + - name: lda_analysis + owner: devteam + tool_panel_section_label: Statistics + + - name: mine + owner: devteam + tool_panel_section_label: Statistics + + - name: plot_from_lda + owner: devteam + tool_panel_section_label: Statistics + + - name: principal_component_analysis + owner: devteam + tool_panel_section_label: Statistics + + - name: rgcca + owner: iuc + tool_panel_section_label: Statistics + + - name: t_test_two_samples + owner: devteam + tool_panel_section_label: Statistics + + +# TEXT MANIPULATION + + - name: add_value + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: column_maker + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: add_input_name_as_column + owner: mvdbeek + tool_panel_section_label: Text Manipulation + + - name: column_order_header_sort + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: column_remove_by_header + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: dos2unix + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: coverage + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: dna_filtering + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: filter_tabular + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: flanking_features + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: get_flanks + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: gff3_rebase + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: intersect + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: join + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: join_files_by_id + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: jq + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: merge + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: merge_cols + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: metagenomeseq_normalization + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: nlp_cooccurrence_analysis + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: nlp_geocode_entities + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: prinseq + owner: iuc + tool_panel_section_label: FASTA/FASTQ + + - name: query_tabular + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: regex_switch + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: reshape2_cast + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: reshape2_melt + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: sqlite_to_tabular + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: subtract + owner: devteam + tool_panel_section_label: Operate on Genomic Intervals + + - name: subtract_query + owner: devteam + tool_panel_section_label: Text Manipulation + + - name: table_compute + owner: iuc + tool_panel_section_label: Text Manipulation + + - name: tables_arithmetic_operations + owner: devteam + tool_panel_section_label: Text Manipulation + + + - name: vader_sentiment + owner: iuc + tool_panel_section_label: Text Manipulation + +# VARIANT CALLING + + - name: allegro + owner: iuc + tool_panel_section_label: Variant Calling + + - name: alphagenome_variant_scorer + owner: iuc + tool_panel_section_label: Variant Calling + + - name: alphagenome_variant_effect + owner: iuc + tool_panel_section_label: Variant Calling + + - name: alphagenome_sequence_predictor + owner: iuc + tool_panel_section_label: Variant Calling + + - name: alphagenome_ism_scanner + owner: iuc + tool_panel_section_label: Variant Calling + + - name: alphagenome_interval_predictor + owner: iuc + tool_panel_section_label: Variant Calling + + - name: artic_guppyplex + owner: iuc + tool_panel_section_label: Variant Calling + + - name: artic_minion + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bamleftalign + owner: devteam + tool_panel_section_label: Variant Calling + + - name: basil + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bbtools_callvariants + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_annotate + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_call + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_cnv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_concat + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_consensus + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_convert_from_vcf + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_convert_to_vcf + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_csq + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_filter + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_gtcheck + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_isec + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_merge + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_mpileup + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_norm + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_color_chrs + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_fixploidy + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_fill_tags + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_fill_an_ac + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_counts + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_frameshifts + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_missing2ref + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_impute_info + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_setgt + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_split_vep + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_query + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_query_list_samples + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_reheader + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_roh + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_stats + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_view + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_mendelian + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_dosage + owner: iuc + tool_panel_section_label: Variant Calling + + - name: bcftools_plugin_tag2tag + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_csv2xlsx + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_pxf2bff + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_vcf2bff + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_analyses + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_biosamples + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_bracket + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_cnv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_cohorts + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_datasets + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_gene + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_import + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_individuals + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_range + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_runs + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beacon2_sequence + owner: iuc + tool_panel_section_label: Variant Calling + + - name: beagle + owner: iuc + tool_panel_section_label: Variant Calling + + - name: breseq + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnv_phenopacket + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnv_vcf2json + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_access + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_antitarget + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_autobin + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_batch + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_breaks + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_call + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_coverage + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_diagram + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_bed + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_cdt + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_jtv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_nexus_basic + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_nexus_ogt + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_seg + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_theta + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_export_vcf + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_fix + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_genemetrics + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_heatmap + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_reference + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_scatter + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_segment + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_segmetrics + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_sex + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cnvkit_target + owner: iuc + tool_panel_section_label: Variant Calling + + - name: control_freec + owner: iuc + tool_panel_section_label: Variant Calling + + - name: cutesv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: countess + owner: iuc + tool_panel_section_label: Variant Calling + + - name: deepvariant + owner: iuc + tool_panel_section_label: Variant Calling + + - name: delly_call + owner: iuc + tool_panel_section_label: Variant Calling + + - name: delly_classify + owner: iuc + tool_panel_section_label: Variant Calling + + - name: delly_cnv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: delly_filter + owner: iuc + tool_panel_section_label: Variant Calling + + - name: delly_lr + owner: iuc + tool_panel_section_label: Variant Calling + + - name: delly_merge + owner: iuc + tool_panel_section_label: Variant Calling + + - name: ensembl_vep + owner: iuc + tool_panel_section_label: Variant Calling + + - name: fermikit_variants + owner: iuc + tool_panel_section_label: Variant Calling + + - name: fermi2 + owner: iuc + tool_panel_section_label: Variant Calling + + - name: freebayes + owner: devteam + tool_panel_section_label: Variant Calling + + - name: gatk4_mutect2 + owner: iuc + tool_panel_section_label: Variant Calling + + - name: gatk4_split_n_cigar_reads + owner: iuc + tool_panel_section_label: Variant Calling + + - name: gatk4_base_recalibrator + owner: iuc + tool_panel_section_label: Variant Calling + + - name: gatk4_applybqsr + owner: iuc + tool_panel_section_label: Variant Calling + + - name: gatk4_haplotype_caller + owner: iuc + tool_panel_section_label: Variant Calling + + - name: genehunter_modscore + owner: iuc + tool_panel_section_label: Variant Calling + + - name: get_hrun + owner: iuc + tool_panel_section_label: Variant Calling + + - name: gvcftools_extract_variants + owner: iuc + tool_panel_section_label: Variant Calling + + - name: happy + owner: iuc + tool_panel_section_label: Variant Calling + + - name: irissv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: jasminesv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: king + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lofreq_alnqual + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lofreq_call + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lofreq_filter + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lofreq_indelqual + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lofreq_viterbi + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lumpy_prep + owner: iuc + tool_panel_section_label: Variant Calling + + - name: lumpy_sv + owner: iuc + tool_panel_section_label: Variant Calling + + - name: merlin + owner: iuc + tool_panel_section_label: Variant Calling + + - name: mixcr_analyze + owner: iuc + tool_panel_section_label: Variant Calling + + - name: ococo + owner: iuc + tool_panel_section_label: Variant Calling + + - name: odgi_build + owner: iuc + tool_panel_section_label: Variant Calling + + - name: odgi_viz + owner: iuc + tool_panel_section_label: Variant Calling + + - name: pbgcpp + owner: iuc + tool_panel_section_label: Variant Calling + + - name: plink + owner: iuc + tool_panel_section_label: Variant Calling + + - name: sansa_annotate + owner: iuc + tool_panel_section_label: Variant Calling + + - name: seqwish + owner: iuc + tool_panel_section_label: Variant Calling + + - name: smgu_frameshift_deletions_checks + owner: iuc + tool_panel_section_label: Variant Calling + + - name: sniffles + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snippy + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snpeff + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snpeff_sars_cov_2 + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snpsift + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snpsift_dbnsfp + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snpsift_dbnsfp_generic + owner: iuc + tool_panel_section_label: Variant Calling + + - name: snpsift_genesets + owner: iuc + tool_panel_section_label: Variant Calling + + - name: ssiamb + owner: iuc + tool_panel_section_label: Variant Calling + + - name: strelka_germline + owner: iuc + tool_panel_section_label: Variant Calling + + - name: strelka_somatic + owner: iuc + tool_panel_section_label: Variant Calling + + - name: swiftlink + owner: iuc + tool_panel_section_label: Variant Calling + + - name: structureharvester + owner: iuc + tool_panel_section_label: Variant Calling + + - name: transvar + owner: iuc + tool_panel_section_label: Variant Calling + + - name: ucsc_fatovcf + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vardict_java + owner: iuc + tool_panel_section_label: Variant Calling + + - name: variant_analyzer + owner: iuc + tool_panel_section_label: Variant Calling + + - name: varscan_copynumber + owner: iuc + tool_panel_section_label: Variant Calling + + - name: varscan_mpileup + owner: iuc + tool_panel_section_label: Variant Calling + + - name: varscan_somatic + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vcf2maf + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vcf2tsv + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfaddinfo + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfallelicprimitives + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfanno + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vcfannotate + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfannotategenotypes + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfbedintersect + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfbreakcreatemulti + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfcheck + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfcombine + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfcommonsamples + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfdistance + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfdistance + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vcffilter + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcffixup + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfflatten + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfgeno2haplo + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfgenotypes + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfhethom + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfleftalign + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfprimers + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfrandomsample + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfselectsamples + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfsort + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcftools_annotate + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcftools_compare + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcftools_isec + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcftools_merge + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcftools_slice + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcftools_subset + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vcfvcfintersect + owner: devteam + tool_panel_section_label: Variant Calling + + - name: vg_convert + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vg_deconstruct + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vg_view + owner: iuc + tool_panel_section_label: Variant Calling + + - name: vt_variant_tools + owner: iuc + tool_panel_section_label: Variant Calling + + - name: hgvsparser + owner: iuc + tool_panel_section_label: Variant Calling + + +# VIROLOGY + + - name: cooc_mutbamscan + owner: iuc + tool_panel_section_label: Virology + + - name: cooc_pubmut + owner: iuc + tool_panel_section_label: Virology + + - name: cooc_tabmut + owner: iuc + tool_panel_section_label: Virology + + - name: freyja_aggregate_plot + owner: iuc + tool_panel_section_label: Virology + + - name: freyja_boot + owner: iuc + tool_panel_section_label: Virology + + - name: freyja_demix + owner: iuc + tool_panel_section_label: Virology + + - name: freyja_variants + owner: iuc + tool_panel_section_label: Virology + + - name: lineagespot + owner: iuc + tool_panel_section_label: Virology + + - name: ivar_consensus + owner: iuc + tool_panel_section_label: Virology + + - name: ivar_filtervariants + owner: iuc + tool_panel_section_label: Virology + + - name: ivar_getmasked + owner: iuc + tool_panel_section_label: Virology + + - name: ivar_removereads + owner: iuc + tool_panel_section_label: Virology + + - name: ivar_trim + owner: iuc + tool_panel_section_label: Virology + + - name: ivar_variants + owner: iuc + tool_panel_section_label: Virology + + - name: read_it_and_keep + owner: iuc + tool_panel_section_label: Virology + + - name: snipit + owner: iuc + tool_panel_section_label: Virology + + - name: snpfreqplot + owner: iuc + tool_panel_section_label: Virology + + - name: varvamp + owner: iuc + tool_panel_section_label: Virology + + - name: virheat + owner: iuc + tool_panel_section_label: Virology + + - name: irma + owner: iuc + tool_panel_section_label: Virology + + - name: hivclustering + owner: iuc + tool_panel_section_label: Virology + + - name: viralverify + owner: iuc + tool_panel_section_label: Virology + + - name: virulign + owner: iuc + tool_panel_section_label: Virology + +# DATA MANAGERS + + - name: data_manager_build_kma_index + owner: iuc + + - name: data_manager_bowtie_index_builder + owner: iuc + + - name: data_manager_bowtie2_index_builder + owner: devteam + + - name: checkm2_build_database + owner: iuc + + - name: bmtagger_index_builder_data_manager + owner: iuc + + - name: data_manager_build_kraken2_database + owner: iuc + + - name: data_manager_cat + owner: iuc + + - name: data_manager_bwameth_index_builder + owner: iuc + + - name: data_manager_bwa_mem_index_builder + owner: devteam + + - name: data_manager_build_kraken_database + owner: devteam + + - name: data_manager_celltypist_models + owner: iuc + + - name: data_manager_clair3_models + owner: iuc + + - name: data_manager_diamond_database_builder + owner: iuc + + - name: data_manager_fetch_refseq + owner: iuc + + - name: data_manager_fetch_ncbi_taxonomy + owner: devteam + + - name: data_manager_fetch_index_maf + owner: iuc + + - name: data_manager_fetch_genome_dbkeys_all_fasta + owner: devteam + + - name: data_manager_fetch_gene_annotation + owner: scottx611x + + - name: data_manager_fetch_busco + owner: iuc + + - name: data_manager_dram_database_downloader + owner: iuc + + - name: data_manager_diamond_database_builder + owner: bgruening + + - name: data_manager_funannotate + owner: iuc + + - name: data_manager_gemini_database_downloader + owner: iuc + + - name: data_manager_gatk_picard_index_builder + owner: devteam + + - name: data_manager_genomic_super_signature_ravmodels + owner: iuc + + - name: data_manager_homer_preparse + owner: iuc + + - name: data_manager_hisat2_index_builder + owner: iuc + + - name: data_manager_humann_database_downloader + owner: iuc + + - name: data_manager_interproscan + owner: iuc + + - name: data_manager_kallisto_index_builder + owner: iuc + + - name: data_manager_liana_resources + owner: iuc + + - name: data_manager_malt_index_builder + owner: iuc + + - name: data_manager_mash_sketch_builder + owner: iuc + + - name: data_manager_manual + owner: iuc + + - name: data_manager_metaphlan_database_downloader + owner: iuc + + - name: data_manager_ncbi_taxonomy_sqlite + owner: iuc + + - name: data_manager_mothur_toolsuite + owner: iuc + + - name: data_manager_mitos + owner: iuc + + - name: data_manager_nextclade + owner: iuc + + - name: data_manager_pangolearn + owner: iuc + + - name: data_manager_packaged_annotation_data + owner: iuc + + - name: data_manager_pangolin_data + owner: iuc + + - name: data_manager_plant_tribes_scaffolds_downloader + owner: iuc + + - name: data_manager_primer_scheme_bedfiles + owner: iuc + + - name: data_manager_samestr + owner: iuc + + - name: data_manager_selection_background + owner: iuc + + - name: data_manager_salmon_index_builder + owner: iuc + + - name: data_manager_rsync_g2 + owner: devteam + + - name: data_manager_semibin + owner: iuc + + - name: data_manager_transvar_annotations + owner: iuc + + - name: data_manager_twobit_builder + owner: devteam + + - name: data_manager_star_index_builder + owner: iuc + + - name: data_manager_snpsift_dbnsfp + owner: iuc + + - name: data_manager_snpeff + owner: iuc + + - name: data_manager_vep_cache_downloader + owner: iuc + + - name: data_manager_pharokka + owner: iuc + + - name: data_manager_mapseq + owner: iuc + + - name: data_manager_gtdbtk_database_installer + owner: iuc + + - name: data_manager_build_staramr + owner: iuc + + - name: data_manager_mmseqs2_database + owner: iuc + + + - name: data_manager_vsnp_genbank + owner: iuc + + - name: data_manager_vsnp_excel + owner: iuc + + - name: data_manager_vsnp_dnaprints + owner: iuc + + - name: deacon_build_database + owner: iuc + +# DEEPTOOLS + + - name: deeptools_alignmentsieve + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_bam_compare + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_bam_coverage + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_bam_pe_fragmentsize + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_bigwig_compare + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_compute_gc_bias + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_compute_matrix + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_compute_matrix_operations + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_correct_gc_bias + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_estimatereadfiltering + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_multi_bam_summary + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_multi_bigwig_summary + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_correlation + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_coverage + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_enrichment + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_fingerprint + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_heatmap + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_pca + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_plot_profile + owner: bgruening + tool_panel_section_label: deepTools + + - name: deeptools_bigwig_average + owner: bgruening + tool_panel_section_label: deepTools + + +# EXTRACT_GENOMIC_DNA + + - name: extract_genomic_dna + owner: iuc + tool_panel_section_id: fetch_sequences___alignments + + +# METABOLOMICS + - name: gem_phenotype_phase_plane + owner: iuc + tool_panel_section_label: Metabolomics + + - name: gem_knockout + owner: iuc + tool_panel_section_label: Metabolomics + + - name: gem_flux_variability_analysis + owner: iuc + tool_panel_section_label: Metabolomics + + - name: mzmine_batch + owner: iuc + tool_panel_section_label: Metabolomics + +# METABOLOMICS DIMET + + - name: dimet_abundance_plot + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_differential_analysis + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_differential_multigroup_analysis + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_enrichment_plot + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_isotopologues_plot + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_metabologram + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_pca_analysis + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_pca_plot + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_timecourse_analysis + owner: iuc + tool_panel_section_label: Metabolomics + + - name: dimet_bivariate_analysis + owner: iuc + tool_panel_section_label: Metabolomics + +# METABOLOMICS TRACEGROOMER + + - name: tracegroomer + owner: iuc + tool_panel_section_label: Metabolomics + + - name: gem_extract_exchange + owner: iuc + tool_panel_section_label: Metabolomics + + - name: gem_flux_distribution + owner: iuc + tool_panel_section_label: Metabolomics + + - name: gem_escher_visualization + owner: iuc + tool_panel_section_label: Metabolomics + + - name: gem_check_memote + owner: iuc + tool_panel_section_label: Metabolomics From 7facabeecb43ef8e3a049366fc0db51b24899984 Mon Sep 17 00:00:00 2001 From: bue Date: Wed, 26 Aug 2026 11:19:00 -0400 Subject: [PATCH 07/11] @ mcdsts.get_anndata : bugfix. --- pcdl/timeseries.py | 10 ++++++---- pcdl/timestep.py | 21 +++++++++++++++------ pyproject.toml | 11 +++++++++-- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/pcdl/timeseries.py b/pcdl/timeseries.py index 439856d..a3958db 100644 --- a/pcdl/timeseries.py +++ b/pcdl/timeseries.py @@ -1223,7 +1223,7 @@ def make_ome_tiff(self, cell_attribute='ID', conc_cutoff={}, focus=None, file=Tr ## TIME SERIES RELATED FUNCTIONS ## - def plot_timeseries(self, focus_cat=None, focus_num=None, aggregate_num=np.nanmean, frame='cell', cat_drop=set(), cat_keep=(), z_slice=None, logy=False, ylim=None, secondary_y=None, subplots=False, sharex=False, sharey=False, linestyle='-', linewidth=None, cmap=None, color=None, grid=True, legend=True, yunit=None, title=None, ax=None, figsizepx=[640, 480], ext=None, figbgcolor=None, **kwargs): + def plot_timeseries(self, focus_cat=None, focus_num=None, aggregate_num=np.nanmean, frame='cell', cat_drop=set(), cat_keep=set(), z_slice=None, logy=False, ylim=None, secondary_y=None, subplots=False, sharex=False, sharey=False, linestyle='-', linewidth=None, cmap=None, color=None, grid=True, legend=True, yunit=None, title=None, ax=None, figsizepx=[640, 480], ext=None, figbgcolor=None, **kwargs): """ input: self: TimeSeries class instance @@ -1681,12 +1681,14 @@ def get_anndata(self, values=1, drop=set(), keep=set(), scale='maxabs', collapse ls_column.extend(sorted(self.get_cell_attribute(values=values, drop=drop, keep=keep, allvalues=False).keys())) # package collapse - if collapse and self.verbose: + if collapse: + # warning - print('Warning @ mcdsts.get_anndata : only df_cell data, but not graph data, can be collapsed.') - df_cell = self.get_cell_df(values=values, drop=drop, keep=keep, collapse=True) + if self.verbose: + print('Warning @ mcdsts.get_anndata : only df_cell data, but not graph data, can be collapsed.') # extract + df_cell = self.get_cell_df(values=values, drop=drop, keep=keep, collapse=True) df_count, df_obs, d_obsm, d_obsp, d_uns = _anndextract( df_cell=df_cell, scale = scale, diff --git a/pcdl/timestep.py b/pcdl/timestep.py index eb93808..c42b4c4 100644 --- a/pcdl/timestep.py +++ b/pcdl/timestep.py @@ -391,13 +391,21 @@ def _anndextract(df_cell, scale='maxabs', graph_attached={}, graph_neighbor={}, # make a copy of the input df_cell = df_cell.copy() - # transform index to string + # extract spatial coordinates + # bue: to be done before index as str manipulation df_coor = df_cell.loc[:,['position_x','position_y','position_z']] + + # mainipulate index + if df_cell.index.name == 'ID': + df_cell.reset_index(inplace=True) + df_cell.index = df_cell.ID + df_cell.index.name = 'index' df_cell.index = df_cell.index.astype(str) + # build obs anndata object (annotation of observations) - df_obs = df_cell.loc[:,['mesh_center_p','time']] - df_obs.columns = ['z_layer', 'time'] + df_obs = df_cell.loc[:,['mesh_center_p','time','ID']] + df_obs.columns = ['z_layer','time','ID'] # buil obsm anndata object spatial (multi-dimensional annotation of observations) if (len(set(df_cell.position_z)) == 1): @@ -414,7 +422,7 @@ def _anndextract(df_cell, scale='maxabs', graph_attached={}, graph_neighbor={}, # https://github.com/VeraPancaldiLab/tysserand/blob/main/tysserand/tysserand.py#L1546 #### # extract cell_id to index mapping (i always loved perl) - di_ididx = df_cell.reset_index().loc[:,'ID'].reset_index().astype(int).set_index('ID').squeeze().to_dict() + di_ididx = df_cell.reset_index().loc[:,'ID'].reset_index().set_index('ID').squeeze().to_dict() # transform cell id graph dict to index matrix and pack for anndata d_obsp = {} # pairwise annotation of obeservation d_uns = {} # unstructured data @@ -462,7 +470,8 @@ def _anndextract(df_cell, scale='maxabs', graph_attached={}, graph_neighbor={}, } }) - # extract discrete cell data + # extract non discrete cell data + # bue 2060826: maybe obs? (voxel ijk, mesh_center mn, runtime, xmlfile) es_drop = set(df_cell.columns).intersection({ 'ID', 'voxel_i', 'voxel_j', 'voxel_k', @@ -470,7 +479,7 @@ def _anndextract(df_cell, scale='maxabs', graph_attached={}, graph_neighbor={}, 'position_x', 'position_y','position_z', 'time', 'runtime', 'xmlfile', }) - df_cell.drop(es_drop, axis=1, inplace=True) # maybe obs? + df_cell.drop(es_drop, axis=1, inplace=True) # dectect variable types des_type = {'float': set(), 'int': set(), 'bool': set(), 'str': set()} diff --git a/pyproject.toml b/pyproject.toml index 28dcf59..cdc63ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,7 +24,7 @@ # 11. git push origin # 12. git push --tag # -# releasing a next version on bioconda +# releasing a next version on bioconda: # 13. vim bioconda-recipes/recipes/pcdl/meta.yaml # update version and content # 14. git bioconda-recipes pull request # 15. cp -r ../bioconda-recipes/recipes/pcdl jakku/bioconda_recipes/ @@ -32,7 +32,14 @@ # 17. git commit -m'@ jakku : bioconda next release.' # 18. git push origin # -# releasing a next version on galaxy +# releasing a next version on galaxy: +# https://planemo.readthedocs.io/en/latest/index.html +# https://docs.galaxyproject.org/en/latest/dev/schema.html +# cd tools-iuc/tools/pcdl/ +# planemo lint +# planemo test +# planemo serve +# # 19. vim tools-iuc/tools/pcdl/pcdl_macros.xml # update version # 20. git tools-iuc pull request # 21. cp -r ../tools-iuc/tools/pcdl jakku/toolsiuc_tools/ From 1bb1641296ce215168d783d8bd7c488b8fe8af02 Mon Sep 17 00:00:00 2001 From: bue Date: Wed, 26 Aug 2026 14:21:48 -0400 Subject: [PATCH 08/11] pcdl v4 : v3 directory parameter added to plot_contour and plot_scatter function and anndata collapse true code bugfix. --- pcdl/commandline.py | 16 ++++++++++++++++ pcdl/timeseries.py | 16 ++++++++++++++-- pcdl/timestep.py | 26 +++++++++++++++++++++----- test/test_commandline_2d.py | 6 ++++-- test/test_timeseries_2d.py | 17 +++++++++++++---- test/test_timeseries_3d.py | 16 ++++++++++++---- test/test_timestep_2d.py | 24 ++++++++++++------------ test/test_timestep_3d.py | 13 ++++++++++++- 8 files changed, 104 insertions(+), 30 deletions(-) diff --git a/pcdl/commandline.py b/pcdl/commandline.py index 75bf4ab..7123a46 100644 --- a/pcdl/commandline.py +++ b/pcdl/commandline.py @@ -594,6 +594,12 @@ def plot_contour(): default = ['none'], help = 'size of the figure in pixels (integer), x y. the given x and y will be rounded to the nearest even number, to be able to generate movies from the images. None tries to take the values from the initial.svg file. fall back setting is 640 480. default is None.', ) + # plot_contour directory + parser.add_argument( + '--directory', + default = 'none', + help = 'if none, a meaningful output directory name will be generated, based on focus and z_slice parameters, else the resulting plots will be moved to the explicit name directory.', + ) # plot_contour ext parser.add_argument( '--ext', @@ -674,6 +680,7 @@ def plot_contour(): xyequal = False if args.xyequal.lower().startswith('f') else True, ax = None, figsizepx = None if (args.figsizepx[0].lower() == 'none') else [int(n) for n in args.figsizepx], + directory = None if (args.directory.lower() == 'none') else args.directory, ext = args.ext, figbgcolor = None if (args.figbgcolor.lower() == 'none') else args.figbgcolor, ) @@ -723,6 +730,7 @@ def plot_contour(): ylim = None if (args.ylim[0].lower() == 'none') else args.ylim, xyequal = False if args.xyequal.lower().startswith('f') else True, figsizepx = None if (args.figsizepx[0].lower() == 'none') else [int(n) for n in args.figsizepx], + directory = None if (args.directory.lower() == 'none') else args.directory, ext = args.ext, figbgcolor = None if (args.figbgcolor.lower() == 'none') else args.figbgcolor, ) @@ -1740,6 +1748,12 @@ def plot_scatter(): default = ['none'], help = 'size of the figure in pixels (integer), x y. the given x and y will be rounded to the nearest even number, to be able to generate movies from the images. None tries to take the values from the initial.svg file. fall back setting is 640 480. default is None.', ) + # plot_scatter directory + parser.add_argument( + '--directory', + default = 'none', + help = 'if none, a meaningful output directory name will be generated, based on focus and z_slice parameters, else the resulting plots will be moved to the explicit name directory.', + ) # plot_scatter ext parser.add_argument( '--ext', @@ -1813,6 +1827,7 @@ def plot_scatter(): s = args.s, ax = None, figsizepx = None if (args.figsizepx[0].lower() == 'none') else [int(i) for i in args.figsizepx], + directory = None if (args.directory.lower() == 'none') else args.directory, ext = args.ext, figbgcolor = None if (args.figbgcolor.lower() == 'none') else args.figbgcolor, ) @@ -1847,6 +1862,7 @@ def plot_scatter(): xyequal = False if args.xyequal.lower().startswith('f') else True, s = args.s, figsizepx = None if (args.figsizepx[0].lower() == 'none') else [int(i) for i in args.figsizepx], + directory = None if (args.directory.lower() == 'none') else args.directory, ext = args.ext, figbgcolor = None if (args.figbgcolor.lower() == 'none') else args.figbgcolor, ) diff --git a/pcdl/timeseries.py b/pcdl/timeseries.py index a3958db..a6a3f01 100644 --- a/pcdl/timeseries.py +++ b/pcdl/timeseries.py @@ -574,7 +574,7 @@ def get_conc_attribute(self, values=1, drop=set(), keep=set(), allvalues=False): return dlr_variable_range - def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=True, cmap='viridis', title='', grid=True, xlim=None, ylim=None, xyequal=True, figsizepx=None, ext='jpeg', figbgcolor=None, **kwargs): + def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=True, cmap='viridis', title='', grid=True, xlim=None, ylim=None, xyequal=True, figsizepx=None, directory=None, ext='jpeg', figbgcolor=None, **kwargs): """ input: self: TimeSeries class instance @@ -635,6 +635,11 @@ def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=T None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. + ext: string; default is jpeg output image format. possible formats are jpeg, png, and tiff. None will return the matplotlib fig object. @@ -715,6 +720,7 @@ def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=T xyequal = xyequal, ax = None, figsizepx = figsizepx, + directory = directory, ext = ext, figbgcolor = figbgcolor, **kwargs, @@ -912,7 +918,7 @@ def get_cell_attribute(self, values=1, drop=set(), keep=set(), allvalues=False): return dl_variable_range - def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slice=0.0, z_axis=None, alpha=1, cmap='viridis', title='', grid=True, legend_loc='lower left', xlim=None, ylim=None, xyequal=True, s=1.0, figsizepx=None, ext='jpeg', figbgcolor=None, **kwargs): + def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slice=0.0, z_axis=None, alpha=1, cmap='viridis', title='', grid=True, legend_loc='lower left', xlim=None, ylim=None, xyequal=True, s=1.0, figsizepx=None, directory=None, ext='jpeg', figbgcolor=None, **kwargs): """ input: self: TimeSeries class instance @@ -986,6 +992,11 @@ def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slic None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. + ext: string; default is jpeg output image format. possible formats are jpeg, png, and tiff. None will return the matplotlib fig object. @@ -1037,6 +1048,7 @@ def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slic s = s, ax = None, figsizepx = figsizepx, + directory = directory, ext = ext, figbgcolor = figbgcolor, **kwargs, diff --git a/pcdl/timestep.py b/pcdl/timestep.py index c42b4c4..b318c18 100644 --- a/pcdl/timestep.py +++ b/pcdl/timestep.py @@ -1189,7 +1189,7 @@ def get_conc_df(self, z_slice=None, halt=False, values=1, drop=set(), keep=set() return df_conc - def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=True, cmap='viridis', title=None, grid=True, xlim=None, ylim=None, xyequal=True, ax=None, figsizepx=None, ext=None, figbgcolor=None, **kwargs): + def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=True, cmap='viridis', title=None, grid=True, xlim=None, ylim=None, xyequal=True, ax=None, figsizepx=None, directory=None, ext=None, figbgcolor=None, **kwargs): """ input: focus: string @@ -1251,6 +1251,11 @@ def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=T None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. + ext: string; default is None output image format. possible formats are jpeg, png, and tiff. None will return the matplotlib fig object. @@ -1376,7 +1381,10 @@ def plot_contour(self, focus, z_slice=0.0, vmin=None, vmax=None, alpha=1, fill=T else: # handle output path and filename - s_path = self.path + f"/conc_{focus.replace(' ','_')}_z{round(z_slice,9)}/" + if (directory is None): + s_path = self.path + f"/conc_{focus.replace(' ','_')}_z{round(z_slice,9)}/" + else: + s_path = f'{directory}/' os.makedirs(s_path, exist_ok=True) s_file = self.xmlfile.replace('.xml', f"_{focus.replace(' ','_')}.{ext}") s_pathfile = f'{s_path}{s_file}' @@ -1594,7 +1602,7 @@ def get_cell_attribute_list(self): return self.data['cell']['ls_cellattr'].copy() - def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slice=0.0, z_axis=None, alpha=1, cmap='viridis', title=None, grid=True, legend_loc='lower left', xlim=None, ylim=None, xyequal=True, s=1.0, ax=None, figsizepx=None, ext=None, figbgcolor=None, **kwargs): + def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slice=0.0, z_axis=None, alpha=1, cmap='viridis', title=None, grid=True, legend_loc='lower left', xlim=None, ylim=None, xyequal=True, s=1.0, ax=None, figsizepx=None, directory=None, ext=None, figbgcolor=None, **kwargs): """ input: focus: string; default is 'cell_type' @@ -1669,7 +1677,12 @@ def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slic the given x and y will be rounded to the nearest even number, to be able to generate movies from the images. None tries to take the values from the initial.svg file. - fall back setting is [640, 480]. + fall back setting is [640, 480].\ + + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. ext: string; default is None output image format. possible formats are jpeg, png, and tiff. @@ -1865,7 +1878,10 @@ def plot_scatter(self, focus='cell_type', cat_drop=set(), cat_keep=set(), z_slic else: # handle output path and filename - s_path = self.path + f"/cell_{focus.replace(' ','_')}_z{round(z_slice,9)}/" + if (directory is None): + s_path = self.path + f"/cell_{focus.replace(' ','_')}_z{round(z_slice,9)}/" + else: + s_path = f'{directory}/' os.makedirs(s_path, exist_ok=True) s_file = self.xmlfile.replace('.xml', f"_{focus.replace(' ','_')}.{ext}") s_pathfile = f'{s_path}{s_file}' diff --git a/test/test_commandline_2d.py b/test/test_commandline_2d.py index cff4c3b..784d69e 100644 --- a/test/test_commandline_2d.py +++ b/test/test_commandline_2d.py @@ -353,6 +353,7 @@ def test_pcdl_plot_contour_set(self): '--ylim', '-30', '300', '--xyequal', 'false', '--figsizepx', '842', '531', + '--directory', f'{s_path_2d}/jakku', '--ext', 'tiff', '--figbgcolor', 'yellow', ], check=False, capture_output=True) @@ -360,7 +361,7 @@ def test_pcdl_plot_contour_set(self): print(f'o_result.returncode: {o_result.returncode}\n') print(f'o_result.stdout: {o_result.stdout}\n') print(f'o_result.stderr: {o_result.stderr}\n') - shutil.rmtree(f'{s_path_2d}/conc_oxygen_z0.0/') + shutil.rmtree(f'{s_path_2d}/jakku/') assert o_result.returncode == 0 @@ -1295,6 +1296,7 @@ def test_pcdl_plot_scatter_set(self): '--xyequal', 'false', '--s', '74', '--figsizepx', '842', '531', + '--directory', f'{s_path_2d}/jakku', '--ext', 'tiff', '--figbgcolor', 'yellow', ], check=False, capture_output=True) @@ -1302,7 +1304,7 @@ def test_pcdl_plot_scatter_set(self): print(f'o_result.returncode: {o_result.returncode}\n') print(f'o_result.stdout: {o_result.stdout}\n') print(f'o_result.stderr: {o_result.stderr}\n') - shutil.rmtree(f'{s_path_2d}/cell_oxygen_z0.0/') + shutil.rmtree(f'{s_path_2d}/jakku/') assert o_result.returncode == 0 diff --git a/test/test_timeseries_2d.py b/test/test_timeseries_2d.py index 9d8a487..9340a28 100644 --- a/test/test_timeseries_2d.py +++ b/test/test_timeseries_2d.py @@ -254,6 +254,8 @@ def test_mcdsts_plot_contour_if(self, mcdsts=mcdsts): ylim = None, # test if #xyequal = True, # pyMCD figsizepx = None, # test if + directory = None, # test if + #directory = f'{s_path_2d}/jakku', # test else ext = 'jpeg', # test file case figbgcolor = None, # test if ) @@ -267,6 +269,7 @@ def test_mcdsts_plot_contour_if(self, mcdsts=mcdsts): (len(ls_pathfile) == 25) for s_pathfile in ls_pathfile: os.remove(s_pathfile) + #shutil.rmtree(f'{s_path_2d}/jakku') @pytest.mark.filterwarnings("ignore:More than 20 figures have been opened.") def test_mcdsts_plot_contour_else(self, mcdsts=mcdsts): @@ -284,6 +287,7 @@ def test_mcdsts_plot_contour_else(self, mcdsts=mcdsts): ylim = [-21, 201], # jump over if #xyequal = True, # TimeStep figsizepx = [641, 481], # test non even pixel + directory = None, # not a file ext = None, # test fig case figbgcolor = 'yellow', # not a file ) @@ -391,6 +395,8 @@ def test_mcdsts_plot_scatter_num(self, mcdsts=mcdsts): #xyequal = True, # TimeStep s = 0.9, # test calculation figsizepx = None, # case extract from initial.svg + directory = None, # test if + #directory = f'{s_path_2d}/jakku', # test else ext = 'jpeg', # generate file case figbgcolor = None, # test if ) @@ -404,6 +410,8 @@ def test_mcdsts_plot_scatter_num(self, mcdsts=mcdsts): (len(ls_pathfile) == 25) for s_pathfile in ls_pathfile: os.remove(s_pathfile) + #shutil.rmtree(f'{s_path_2d}/jakku') + def test_mcdsts_plot_scatter_cat(self, mcdsts=mcdsts): l_fig = mcdsts.plot_scatter( @@ -422,6 +430,7 @@ def test_mcdsts_plot_scatter_cat(self, mcdsts=mcdsts): #xyequal = True, # TimeStep #s = 1.0, # test calculation figsizepx = [641, 481], # test case non even pixel number + directory = None, # not a file ext = None, # test fig case figbgcolor = None, # not a file ) @@ -932,7 +941,7 @@ def test_mcdsts_get_anndata(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 7) and \ + (ann.obs.shape[1] == 8) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 2) and \ (len(ann.obsp) == 0) and \ @@ -951,7 +960,7 @@ def test_mcdsts_get_anndata_value(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 50) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 6) and \ + (ann.obs.shape[1] == 7) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 2) and \ (len(ann.obsp) == 0) and \ @@ -971,7 +980,7 @@ def test_mcdsts_get_anndata_collapsefalse(self): (mcdsts.l_annmcds[24].X.shape[0] > 9) and \ (mcdsts.l_annmcds[24].X.shape[1] == 105) and \ (mcdsts.l_annmcds[24].obs.shape[0] > 9) and \ - (mcdsts.l_annmcds[24].obs.shape[1] == 7) and \ + (mcdsts.l_annmcds[24].obs.shape[1] == 8) and \ (mcdsts.l_annmcds[24].obsm['spatial'].shape[0] > 9) and \ (mcdsts.l_annmcds[24].obsm['spatial'].shape[1] == 2) and \ (len(mcdsts.l_annmcds[24].obsp) == 4) and \ @@ -990,7 +999,7 @@ def test_mcdsts_get_anndata_keepmcdsfalse(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 7) and \ + (ann.obs.shape[1] == 8) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 2) and \ (len(ann.obsp) == 0) and \ diff --git a/test/test_timeseries_3d.py b/test/test_timeseries_3d.py index d1ffa60..7e0fe0c 100644 --- a/test/test_timeseries_3d.py +++ b/test/test_timeseries_3d.py @@ -181,6 +181,8 @@ def test_mcdsts_plot_contour_if(self, mcdsts=mcdsts): ylim = None, # test if #xyequal = True, # TimeStep figsizepx = None, # test if + directory = None, # test if + #directory = '{s_path_3d}/jakku', # test else ext = 'jpeg', figbgcolor = None, # test if ) @@ -194,6 +196,7 @@ def test_mcdsts_plot_contour_if(self, mcdsts=mcdsts): (len(ls_pathfile) == 25) for s_pathfile in ls_pathfile: os.remove(s_pathfile) + #shutil.rmtree(f'{s_path_3d}/jakku') def test_mcdsts_plot_contour_else(self, mcdsts=mcdsts): l_fig = mcdsts.plot_contour( @@ -210,6 +213,7 @@ def test_mcdsts_plot_contour_else(self, mcdsts=mcdsts): ylim = [-21, 201], # jump over if #xyequal = True, # TimeStep figsizepx = [641, 481], # test non even pixel + directory = None, # jump over if ext = None, figbgcolor = 'yellow', # jump over if ) @@ -318,6 +322,8 @@ def test_mcdsts_plot_scatter_num(self, mcdsts=mcdsts): #xyequal = True, # TimeStep s = 0.1, # test calculation figsizepx = None, # case extract from initial.svg + directory = None, # test if + #directory = '{s_path_3d}/jakku', # test else ext = 'jpeg', figbgcolor = None, # test if ) @@ -331,6 +337,7 @@ def test_mcdsts_plot_scatter_num(self, mcdsts=mcdsts): (len(ls_pathfile) == 25) for s_pathfile in ls_pathfile: os.remove(s_pathfile) + #shutil.rmtree('{s_path_3d}/jakku') def test_mcdsts_plot_scatter_cat(self, mcdsts=mcdsts): l_fig = mcdsts.plot_scatter( @@ -349,6 +356,7 @@ def test_mcdsts_plot_scatter_cat(self, mcdsts=mcdsts): #xyequal = True, # TimeStep #s = 1.0, # test calculation figsizepx = [641, 481], # test case non even pixel number + directory = None, # jump over if ext = None, figbgcolor = 'cyan', # jump over if ) @@ -795,7 +803,7 @@ def test_mcdsts_get_anndata(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 7) and \ + (ann.obs.shape[1] == 8) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 3) and \ (len(ann.obsp) == 0) and \ @@ -814,7 +822,7 @@ def test_mcdsts_get_anndata_value(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 56) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 6) and \ + (ann.obs.shape[1] == 7) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 3) and \ (len(ann.obsp) == 0) and \ @@ -834,7 +842,7 @@ def test_mcdsts_get_anndata_collapsefalse(self): (mcdsts.l_annmcds[24].X.shape[0] > 9) and \ (mcdsts.l_annmcds[24].X.shape[1] == 105) and \ (mcdsts.l_annmcds[24].obs.shape[0] > 9) and \ - (mcdsts.l_annmcds[24].obs.shape[1] == 7) and \ + (mcdsts.l_annmcds[24].obs.shape[1] == 8) and \ (mcdsts.l_annmcds[24].obsm['spatial'].shape[0] > 9) and \ (mcdsts.l_annmcds[24].obsm['spatial'].shape[1] == 3) and \ (len(mcdsts.l_annmcds[24].obsp) == 4) and \ @@ -853,7 +861,7 @@ def test_mcdsts_get_anndata_keepmcdsfalse(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 7) and \ + (ann.obs.shape[1] == 8) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 3) and \ (len(ann.obsp) == 0) and \ diff --git a/test/test_timestep_2d.py b/test/test_timestep_2d.py index 07df914..6fa64e5 100644 --- a/test/test_timestep_2d.py +++ b/test/test_timestep_2d.py @@ -33,17 +33,6 @@ s_pathfile_2d = f'{s_path_2d}/{s_file_2d}' -## download test dataset ## -if not os.path.exists(s_path_2d): - pcdl.install_data() - - -# const -s_path_2d = str(pathlib.Path(pcdl.__file__).parent.resolve()/'output_2d') -s_file_2d = 'output00000024.xml' -s_pathfile_2d = f'{s_path_2d}/{s_file_2d}' - - # test data if not os.path.exists(s_path_2d): pcdl.install_data() @@ -546,6 +535,7 @@ def test_mcds_plot_contour(self, mcds=mcds): xyequal = True, # test if ax = None, # ok figsizepx = None, # test if + directory = None, # test if ext = None, # test fig case figbgcolor = None, # not at file ) @@ -570,6 +560,8 @@ def test_mcds_plot_contourf(self, mcds=mcds): xyequal = True, # test if ax = ax, # use axis from existing matplotlib figure figsizepx = [641, 481], # test non even pixel + directory = None, # test if + #directory = f'{s_path_2d}/jakku', # test else ext = 'tiff', # test file case figbgcolor = 'yellow', # jump over if ) @@ -578,6 +570,7 @@ def test_mcds_plot_contourf(self, mcds=mcds): (os.path.exists(s_pathfile)) and \ (os.path.getsize(s_pathfile) > 2**10) os.remove(s_pathfile) + #os.remove(f'{s_path_2d}/jakku') def test_mcds_make_conc_vtk(self, mcds=mcds): s_pathfile = mcds.make_conc_vtk(ext='.vtr') # test set ext parameter. @@ -661,6 +654,7 @@ def test_mcds_plot_scatter_cat_if(self, mcds=mcds): s = 1.1, # test calculation ax = None, # generate matplotlib figure figsizepx = None, # test if case ax none + directory = None, # test if ext = None, # test fig case figbgcolor = None, # not a file ) @@ -686,6 +680,8 @@ def test_mcds_plot_scatter_cat_else1(self, mcds=mcds): #s = 1.0, # test calculation ax = None, # use axis from existing matplotlib figure figsizepx = [701, 501], # jump over if case ax none + directory = None, # test else + #directory = f'{s_path_2d}/jakku', # test else ext = 'tiff', # test file case figbgcolor = 'cyan', # jump over if ) @@ -694,6 +690,7 @@ def test_mcds_plot_scatter_cat_else1(self, mcds=mcds): (os.path.exists(s_pathfile)) and \ (os.path.getsize(s_pathfile) > 2**10) os.remove(s_pathfile) + #os.remove(f'{s_path_2d}/jakku') def test_mcds_plot_scatter_cat_else2(self, mcds=mcds): fig, ax = plt.subplots() @@ -714,6 +711,7 @@ def test_mcds_plot_scatter_cat_else2(self, mcds=mcds): #s = 1.0, # test calculation ax = ax, # use axis from existing matplotlib figure #figsizepx = None, # test case ax ax + #directory = None, # test if #ext = None, # test fig case #figbgcolor = None, # not a file ) @@ -740,6 +738,7 @@ def test_mcds_plot_scatter_num_if(self, mcds=mcds): #s = 1.0, # matplotlib #ax = None, # generate matplotlib figure #figsizepx = None, # test if + #directory = None, # test if #ext = None, # test fig case #figbgcolor = None, # not a file ) @@ -765,6 +764,7 @@ def test_mcds_plot_scatter_num_else(self, mcds=mcds): #s = None, # matplotlib #ax = None, # generate matplotlib figure #figsizepx = None, # test if + #directory = None, # test if #ext = None, # test fig case #figbgcolor = None, # not a file ) @@ -1095,7 +1095,7 @@ def test_mcds_get_anndata(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 7) and \ + (ann.obs.shape[1] == 8) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 2) and \ (len(ann.obsp) == 4) and \ diff --git a/test/test_timestep_3d.py b/test/test_timestep_3d.py index fd19727..c9288fe 100644 --- a/test/test_timestep_3d.py +++ b/test/test_timestep_3d.py @@ -289,6 +289,7 @@ def test_mcds_plot_contour(self, mcds=mcds): xyequal = True, # test if ax = ax, # use axis from existing matplotlib figure figsizepx = [641, 481], # test if + directory = None, # not at file ext = None, # test fig case figbgcolor = None, # not at file ) @@ -312,6 +313,8 @@ def test_mcds_plot_contourf(self, mcds=mcds): xyequal = True, # test if ax = None, # generate fig ax case figsizepx = None, # test if + directory = None, # test if + #directory = f'{s_path_3d}/jakku', # test else ext = 'tiff', # test file case figbgcolor = 'orange', # jump over if ) @@ -320,6 +323,7 @@ def test_mcds_plot_contourf(self, mcds=mcds): (os.path.exists(s_pathfile)) and \ (os.path.getsize(s_pathfile) > 2**10) os.remove(s_pathfile) + #os.remove(f'{s_path_3d}/jakku') def test_mcds_make_conc_vtk(self, mcds=mcds): s_pathfile = mcds.make_conc_vtk() # test default ext parameter @@ -383,6 +387,7 @@ def test_mcds_plot_scatter_cat_if(self, mcds=mcds): #s = None, # matplotlib ax = ax, # use axis from existing matplotlib figure figsizepx = [701, 501], # jump over if case ax none + directory = None, # not a file ext = None, # test fig case figbgcolor = None, # not a file ) @@ -408,6 +413,8 @@ def test_mcds_plot_scatter_cat_else1(self, mcds=mcds): #s = None, # matplotlib ax = None, # generate matplotlib figure figsizepx = None, # test if case ax none + directory = None, # test if + #directory = f'{s_path_3d}/jakku', # test else ext = 'tiff', # test file case figbgcolor = 'lime', # jump over if ) @@ -416,6 +423,7 @@ def test_mcds_plot_scatter_cat_else1(self, mcds=mcds): (os.path.exists(s_pathfile)) and \ (os.path.getsize(s_pathfile) > 2**10) os.remove(s_pathfile) + #os.remove(f'{s_path_3d}/jakku') def test_mcds_plot_scatter_cat_else2(self, mcds=mcds): fig, ax = plt.subplots() @@ -436,6 +444,7 @@ def test_mcds_plot_scatter_cat_else2(self, mcds=mcds): #s = None, # matplotlib ax = ax, # use axis from existing matplotlib figure #figsizepx = None, # test case ax ax + directory = None, # not a file ext = None, # test fig case figbgcolor = None, # not a file ) @@ -462,6 +471,7 @@ def test_mcds_plot_scatter_num_if(self, mcds=mcds): #s = None, # matplotlib #ax = None, # generate matplotlib figure #figsizepx = None, # test if case + directory = None, # not a file ext = None, # test fig case figbgcolor = None, # not a file ) @@ -487,6 +497,7 @@ def test_mcds_plot_scatter_num_else(self, mcds=mcds): #s = None, # matplotlib #ax = None, # generate matplotlib figure #figsizepx = None, # if case + directory = None, # not a file ext = None, # test fig case figbgcolor = None, # not a file ) @@ -668,7 +679,7 @@ def test_mcds_get_anndata(self): (ann.X.shape[0] > 9) and \ (ann.X.shape[1] == 105) and \ (ann.obs.shape[0] > 9) and \ - (ann.obs.shape[1] == 7) and \ + (ann.obs.shape[1] == 8) and \ (ann.obsm['spatial'].shape[0] > 9) and \ (ann.obsm['spatial'].shape[1] == 3) and \ (len(ann.obsp) == 4) and \ From a09becb04bac2e5545e6e8b4f105380e177b3cd8 Mon Sep 17 00:00:00 2001 From: bue Date: Wed, 26 Aug 2026 14:26:45 -0400 Subject: [PATCH 09/11] @ jakku : update galaxy xml code to be pcdl v4 branch compatible. --- .gitignore | 3 ++ .../toolsiuc_tools/pcdl/pcdl_get_anndata.xml | 6 ++-- jakku/toolsiuc_tools/pcdl/pcdl_macros.xml | 30 +++++++++++++++++-- .../pcdl/pcdl_make_cell_vtk.xml | 4 ++- .../pcdl/pcdl_make_conc_vtk.xml | 4 ++- .../toolsiuc_tools/pcdl/pcdl_plot_contour.xml | 6 ++-- .../toolsiuc_tools/pcdl/pcdl_plot_scatter.xml | 4 +++ .../pcdl/pcdl_plot_timeseries.xml | 4 +++ man/TUTORIAL_galaxy.md | 0 9 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 man/TUTORIAL_galaxy.md diff --git a/.gitignore b/.gitignore index fdd6bd1..72adab5 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,6 @@ pcdl.egg-info/ # jupyter **/.ipynb_checkpoints/ + +# galaxy +tool_test_output* diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml b/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml index 663fb23..57da49d 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_get_anndata.xml @@ -63,7 +63,7 @@ - + @@ -88,7 +88,7 @@ - + @@ -100,7 +100,7 @@ - + diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml b/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml index 1ab7f3e..ac6b555 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_macros.xml @@ -23,6 +23,12 @@ + + + + + + @@ -228,11 +234,19 @@ --> - - - ^[enoENO0-9-. ]*$ + + + ^[a-zA-Z0-9_\-.]*\.vtp$ + + + ^[a-zA-Z0-9_\-.]*\.vtr$ + + + + + @@ -370,6 +384,16 @@ + + + ^[enoENO0-9-.]*$ + + + + + ^[enoENO0-9-.]*$ + + ^[enoENO0-9-. ]*$ diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml index 033666b..e65e7c5 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_cell_vtk.xml @@ -19,6 +19,7 @@ --physiboss $physiboss --settingxml 'none' --verbose $verbose + --ext '$extvtp' ]]>

@@ -30,11 +31,12 @@ +
- + diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml b/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml index c771503..6f26e8f 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_make_conc_vtk.xml @@ -15,6 +15,7 @@ pcdl_make_conc_vtk 'output_pc' --verbose $verbose + --ext '$extvtr' ]]>
@@ -22,11 +23,12 @@
+
- + diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml b/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml index 6b4a46d..0b6018b 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_plot_contour.xml @@ -16,7 +16,8 @@ pcdl_plot_contour 'output_pc' '$focus_subs' --verbose $verbose --z_slice $z_slice - --extrema '$extrema' + --vmin '$vmin' + --vmax '$vmax' --alpha $alpha --fill $fill --cmap '$cmap' @@ -35,7 +36,8 @@ - + + diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml b/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml index 9afd8cf..a83d5d3 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_plot_scatter.xml @@ -19,6 +19,8 @@ --physiboss $physiboss --settingxml 'none' --verbose $verbose + --cat_drop $cat_drop + --cat_keep $cat_keep --z_slice $z_slice --z_axis '$z_axis' --alpha $alpha @@ -40,6 +42,8 @@ + + diff --git a/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml b/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml index 8372a23..d06c142 100644 --- a/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml +++ b/jakku/toolsiuc_tools/pcdl/pcdl_plot_timeseries.xml @@ -20,6 +20,8 @@ --settingxml 'none' --verbose $verbose --frame $frame + --cat_drop $cat_drop + --cat_keep $cat_keep --z_slice '$z_slice' --logy $logy --ylim '$ylim' @@ -47,6 +49,8 @@ + + diff --git a/man/TUTORIAL_galaxy.md b/man/TUTORIAL_galaxy.md new file mode 100644 index 0000000..e69de29 From 8b487c7163d640d282a968603a57cd7f25903e5b Mon Sep 17 00:00:00 2001 From: bue Date: Wed, 26 Aug 2026 14:39:48 -0400 Subject: [PATCH 10/11] @ physicell data loader : next release v4.1.8. --- README.md | 3 +++ man/docstring/mcds.plot_contour.md | 5 +++++ man/docstring/mcds.plot_scatter.md | 4 ++++ man/docstring/mcdsts.plot_contour.md | 5 +++++ man/docstring/mcdsts.plot_scatter.md | 5 +++++ man/docstring/pcdl_plot_contour.md | 8 +++++++- man/docstring/pcdl_plot_scatter.md | 8 +++++++- pcdl/VERSION.py | 2 +- 8 files changed, 37 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1c12521..117e170 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,9 @@ Developers, please make pull requests to the https://github.com/elmbeech/physice ## Release Notes: ++ version 4.1.8 (2026-08-26): elmbeech/physicelldataloader + + branch v4 compatible with bioconda and galaxy. + + version 4.1.7 (2026-08-21): elmbeech/physicelldataloader + compatible with pandas v3.0.0. diff --git a/man/docstring/mcds.plot_contour.md b/man/docstring/mcds.plot_contour.md index 5e9ad77..b03867c 100644 --- a/man/docstring/mcds.plot_contour.md +++ b/man/docstring/mcds.plot_contour.md @@ -62,6 +62,11 @@ None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. + ext: string; default is None output image format. possible formats are jpeg, png, and tiff. None will return the matplotlib fig object. diff --git a/man/docstring/mcds.plot_scatter.md b/man/docstring/mcds.plot_scatter.md index 623ce24..1804789 100644 --- a/man/docstring/mcds.plot_scatter.md +++ b/man/docstring/mcds.plot_scatter.md @@ -76,6 +76,10 @@ to be able to generate movies from the images. None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. ext: string; default is None output image format. possible formats are jpeg, png, and tiff. diff --git a/man/docstring/mcdsts.plot_contour.md b/man/docstring/mcdsts.plot_contour.md index 69be00c..3cb39ad 100644 --- a/man/docstring/mcdsts.plot_contour.md +++ b/man/docstring/mcdsts.plot_contour.md @@ -61,6 +61,11 @@ None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. + ext: string; default is jpeg output image format. possible formats are jpeg, png, and tiff. None will return the matplotlib fig object. diff --git a/man/docstring/mcdsts.plot_scatter.md b/man/docstring/mcdsts.plot_scatter.md index f5ede7a..fcc932b 100644 --- a/man/docstring/mcdsts.plot_scatter.md +++ b/man/docstring/mcdsts.plot_scatter.md @@ -74,6 +74,11 @@ None tries to take the values from the initial.svg file. fall back setting is [640, 480]. + directory: string; default None + if None, a meaningful output directory name will be generated, + based on focus and z_slice parameters, else the resulting plots + will be moved to the explicit name directory. + ext: string; default is jpeg output image format. possible formats are jpeg, png, and tiff. None will return the matplotlib fig object. diff --git a/man/docstring/pcdl_plot_contour.md b/man/docstring/pcdl_plot_contour.md index c1f80ba..15e2e1d 100644 --- a/man/docstring/pcdl_plot_contour.md +++ b/man/docstring/pcdl_plot_contour.md @@ -4,7 +4,8 @@ usage: pcdl_plot_contour [-h] [-v VERBOSE] [--z_slice Z_SLICE] [--vmin VMIN] [--cmap CMAP] [--title TITLE] [--grid GRID] [--xlim XLIM [XLIM ...]] [--ylim YLIM [YLIM ...]] [--xyequal XYEQUAL] - [--figsizepx FIGSIZEPX [FIGSIZEPX ...]] [--ext EXT] + [--figsizepx FIGSIZEPX [FIGSIZEPX ...]] + [--directory DIRECTORY] [--ext EXT] [--figbgcolor FIGBGCOLOR] [path] [focus] @@ -52,6 +53,11 @@ options: be able to generate movies from the images. None tries to take the values from the initial.svg file. fall back setting is 640 480. default is None. + --directory DIRECTORY + if none, a meaningful output directory name will be + generated, based on focus and z_slice parameters, else + the resulting plots will be moved to the explicit name + directory. --ext EXT output image format. possible formats are jpeg, png, and tiff. default is jpeg. --figbgcolor FIGBGCOLOR diff --git a/man/docstring/pcdl_plot_scatter.md b/man/docstring/pcdl_plot_scatter.md index 264dc2f..73ebd8a 100644 --- a/man/docstring/pcdl_plot_scatter.md +++ b/man/docstring/pcdl_plot_scatter.md @@ -8,7 +8,8 @@ usage: pcdl_plot_scatter [-h] [--custom_data_type [CUSTOM_DATA_TYPE ...]] [--cmap CMAP] [--title TITLE] [--grid GRID] [--legend_loc LEGEND_LOC] [--xlim XLIM [XLIM ...]] [--ylim YLIM [YLIM ...]] [--xyequal XYEQUAL] [--s S] - [--figsizepx FIGSIZEPX [FIGSIZEPX ...]] [--ext EXT] + [--figsizepx FIGSIZEPX [FIGSIZEPX ...]] + [--directory DIRECTORY] [--ext EXT] [--figbgcolor FIGBGCOLOR] [path] [focus] @@ -95,6 +96,11 @@ options: be able to generate movies from the images. None tries to take the values from the initial.svg file. fall back setting is 640 480. default is None. + --directory DIRECTORY + if none, a meaningful output directory name will be + generated, based on focus and z_slice parameters, else + the resulting plots will be moved to the explicit name + directory. --ext EXT output image format. possible formats are jpeg, png, and tiff. default is jpeg. --figbgcolor FIGBGCOLOR diff --git a/pcdl/VERSION.py b/pcdl/VERSION.py index 256a3e1..f589b73 100644 --- a/pcdl/VERSION.py +++ b/pcdl/VERSION.py @@ -1 +1 @@ -__version__ = '4.1.7' +__version__ = '4.1.8' From b90d8606b7874fa737f9f3f72d0db369c2531bf1 Mon Sep 17 00:00:00 2001 From: bue Date: Wed, 26 Aug 2026 15:08:11 -0400 Subject: [PATCH 11/11] @ jakku : update bioconda recipe to release v4.1.8. --- .../pcdl/meta.yaml | 4 ++-- pyproject.toml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename jakku/{bioconda_recipes => biocondarecipes_recipes}/pcdl/meta.yaml (96%) diff --git a/jakku/bioconda_recipes/pcdl/meta.yaml b/jakku/biocondarecipes_recipes/pcdl/meta.yaml similarity index 96% rename from jakku/bioconda_recipes/pcdl/meta.yaml rename to jakku/biocondarecipes_recipes/pcdl/meta.yaml index f201324..29e4887 100644 --- a/jakku/bioconda_recipes/pcdl/meta.yaml +++ b/jakku/biocondarecipes_recipes/pcdl/meta.yaml @@ -1,5 +1,5 @@ {% set name = "pcdl" %} -{% set version = "4.1.7" %} +{% set version = "4.1.8" %} package: name: {{ name }} @@ -7,7 +7,7 @@ package: source: url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/pcdl-{{ version }}.tar.gz - sha256: fa87ddda4720abdd12842eb777b2d4a5b2c7eafaef69e759c739731efb248d6b + sha256: e1bc3f1c6a645037eb5dead5aa013e9d62cd51a069daf85090976f52ddf4d829 build: number: 0 diff --git a/pyproject.toml b/pyproject.toml index cdc63ad..dd74a72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,8 +27,8 @@ # releasing a next version on bioconda: # 13. vim bioconda-recipes/recipes/pcdl/meta.yaml # update version and content # 14. git bioconda-recipes pull request -# 15. cp -r ../bioconda-recipes/recipes/pcdl jakku/bioconda_recipes/ -# 16. git add jakku/bioconda_recipes/pcdl/meta.yaml +# 15. cp -r ../bioconda-recipes/recipes/pcdl jakku/biocondarecipes_recipes/ +# 16. git add jakku/biocondarecipes_recipes/pcdl/meta.yaml # 17. git commit -m'@ jakku : bioconda next release.' # 18. git push origin #