[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTFDDW0SWS8PV4XEWRWCP3":3,"skill-same:01M6DTFDDW0SWS8PV4XEWRWCP3":108},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":53,"install":54,"resources":67},"01M6DTFDDW0SWS8PV4XEWRWCP3","scatac-preprocessing",null,"Load when preprocessing a single-cell ATAC peak × cell AnnData via Signac-style TF-IDF + LSI + Leiden, producing a clustered UMAP-ready object. Skip when input is fragments; BAM (peak calling not implemented here); scRNA preprocessing (use sc-preprocessing).","TianGzlab\u002FOmicsClaw","TianGzlab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F150978281?v=4","01M6DT9WNJJ470ADHPSMFAA02Y","01M6DT9WSN09C5K65GB6RK18R9",161,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"scatac preprocessing","preprocessing","style","leiden","lsi","tfidf","scatac","singlecell","bam","single-cell","scrna","accessibility","input","atac","umap","cell","calling","ready","use","anndata","2026-11-10 10:12:30",false,"---\nname: scatac-preprocessing\ndescription: Load when preprocessing a single-cell ATAC peak × cell AnnData via Signac-style TF-IDF +\n  LSI + Leiden, producing a clustered UMAP-ready object. Skip when input is fragments; BAM (peak calling\n  not implemented here); scRNA preprocessing (use sc-preprocessing).\ntrigger: scATAC preprocessing, single-cell ATAC preprocessing, ATAC TF-IDF LSI, chromatin accessibility clustering, scATAC UMAP Leiden\ntags:\n- singlecell\n- scatac\n- atac\n- preprocessing\n- tfidf\n- lsi\n- clustering\n- leiden\n---\n\n# scatac-preprocessing\n\n## Use from a step\n\n```python\nfrom skills._sdk.notebook import load_skill, read_input, write_output\n\natac = load_skill(\"scatac-preprocessing\")\nadata = read_input(\"data\u002Fpeaks.h5\", reader=atac.read_10x_peaks)\nadata = atac.preprocess(adata, random_state=0)\nwrite_output(adata, \"intermediate\u002Faccessibility.h5ad\")\nwrite_output(atac.cluster_summary(adata), \"tables\u002Fclusters.csv\")\n```\n\nFor H5AD use `read_input` without a reader. The API returns a copy and does\nnot write files. `examples\u002Fexample_step.py` recovers three planted groups\nfrom `load_demo(\"atac_synthetic\")`; that tests computation, not biological validity.\n\n## When to use\n\nThe user has a cell × peak scATAC AnnData (raw-count-like accessibility\nmatrix in `.X`) and wants the standard \"filter → TF-IDF → LSI → graph →\nUMAP → Leiden\" pipeline in one shot. Currently a single backend:\n`tfidf_lsi` (Signac-style). The skill stops at clustered UMAP — no\nfragment QC, no peak calling, no motif \u002F gene-activity scoring, no\nmulti-sample integration. For scRNA preprocessing use `sc-preprocessing`.\n\n## Inputs & Outputs\n\n**Inputs**\n\n- Input kinds: `file`, `directory`\n- Modalities: scatac\n- File types: `.h5ad`, `.h5`, `.loom`, `.csv`, `.tsv`\n\n**Outputs**\n\n- `tables\u002Fcluster_summary.csv`\n- `tables\u002Flsi_variance_ratio.csv`\n- `tables\u002Fpeak_summary.csv`\n- `tables\u002Fpreprocess_summary.csv`\n- `tables\u002Fqc_metrics_per_cell.csv`\n- `tables\u002Fumap_points.csv`\n- `figures\u002Fumap_leiden.png`\n- `figures\u002Flsi_variance.png`\n- `figures\u002Fqc_violin.png`\n- `figures\u002Ftop_accessible_peaks.png`\n- `processed.h5ad`\n- `report.md`\n- `result.json`\n- `figures\u002Fmanifest.json`, `figure_data\u002Fmanifest.json`, plot-data CSV files\n- `reproducibility\u002Fcommands.sh`, `reproducibility\u002Frequirements.txt`\n- Processed AnnData (`saves_h5ad`) — adds `obs`: `leiden`; `obsm`: `X_lsi`, `X_umap`; `layers`: `counts`\n- AnnData processing state after success: `preprocessed`\n\n## Flow\n\n1. Read cell × peak counts. The 10x reader uses `gex_only=False` and keeps Peaks in multiome inputs; other CLI formats use `smart_load`.\n2. Validate `.X` is present, non-empty, non-negative.\n3. Compute per-cell `n_peaks_by_counts` \u002F `total_counts`; filter cells by `--min-peaks` and peaks by `--min-cells`.\n4. Retain the globally most accessible peaks up to `--n-top-peaks`.\n5. Run Signac-style TF-IDF (`--tfidf-scale-factor`); truncated-SVD LSI to `--n-lsi` components.\n6. Build neighbour graph (`--n-neighbors`), UMAP, Leiden (`--leiden-resolution`).\n7. Save `processed.h5ad`, tables, figures, `report.md`, `result.json`.\n\n## Gotchas\n\n- **Filtering can wipe everything.** `_api.py:preprocess` raises if `min_peaks` removes every cell or `min_cells` removes every peak. Inspect `n_peaks_by_counts` before tightening thresholds; the CLI defaults to `--min-peaks 200`.\n- **LSI needs enough cells and peaks.** `_api.py:preprocess` raises when fewer than two LSI components can be computed after filtering.\n- **Input must be non-negative count-like in `.X`.** `_api.py:preprocess` rejects missing, empty or negative matrices. Non-integer values only warn: TF-IDF values are usually non-negative and may pass this check, but preprocessing them again is not valid.\n- **`processed.h5ad` keeps only retained peaks.** `_api.py:preprocess` selects the top `n_top_peaks` by total accessibility. Keep the input if you need the full peak space later.\n- **`--input` mandatory unless `--demo`.** `scatac_preprocessing.py` raises `ValueError(\"--input required when not using --demo\")`.\n- **Single backend only.** `scatac_preprocessing.py` raises `ValueError(f\"Unknown preprocessing method '{method}'\")` for anything other than `tfidf_lsi`. The `--method` flag exists for forward compatibility; today it's effectively a no-op.\n- `_api.py:qc_metrics_table` reports QC metrics calculated before selecting top peaks. Those totals can exceed the sums in the returned, peak-filtered `.X` or counts layer.\n- `_api.py:read_10x_peaks` reads counts, not fragments or BAM. It raises when a multiome input contains no Peaks features; it never falls back to gene expression.\n\n## Key CLI\n\n```bash\n# Demo (built-in synthetic scATAC)\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py --demo --output \u002Ftmp\u002Fscatac_demo\n\n# Standard run on a 10x scATAC h5\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py \\\n  --input atac_peaks.h5 --output results\u002F\n\n# Tune QC + feature budget\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py \\\n  --input atac_peaks.h5ad --output results\u002F \\\n  --min-peaks 300 --min-cells 10 --n-top-peaks 20000\n\n# Tune latent space + clustering\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py \\\n  --input atac_peaks.h5ad --output results\u002F \\\n  --n-lsi 40 --n-neighbors 20 --leiden-resolution 1.0\n```\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `preprocess(adata, *, min_peaks=200, min_cells=5, n_top_peaks=10000, tfidf_scale_factor=10000.0, n_lsi=30, n_neighbors=15, leiden_resolution=0.8, random_state=0)`\n\nReturn a filtered copy of .X accessibility counts with TF-IDF, LSI and Leiden.\n\nCells need min_peaks detected peaks; peaks need min_cells cells. Keep at\nmost n_top_peaks, ranked by total counts. Counts remain in layers['counts']\nand .raw on retained peaks; .X becomes log1p TF-IDF. LSI uses scaled SVD\ncomponents, excluding the first component from the neighbor graph. UMAP\nand Leiden use that graph. All stochastic operations use random_state.\nNo file is written and the input is not modified.\n\n### `read_10x_peaks(path)`\n\nRead 10x H5 or MTX peak counts; pass it as reader= to read_input.\n\nUse gex_only=False, then keep Peaks when feature_types is present. No\ngene-expression filtering is applied to a peak-only matrix lacking it.\n\n### `qc_metrics_table(adata)`\n\nReturn cell identifiers and the QC metrics computed before top-peak selection.\n\n### `peak_summary(adata, *, n_top=50)`\n\nReturn retained peaks ranked by total counts and number of cells.\n\n### `lsi_variance_table(adata)`\n\nReturn variance ratios and their cumulative sum for every fitted LSI component.\n\n### `cluster_summary(adata, *, cluster_key='leiden')`\n\nReturn cell counts and percentages for labels in obs[cluster_key].\n\n### `umap_figure(adata, *, cluster_key='leiden')`\n\nReturn a cluster-colored Figure from obsm['X_umap']; do not write a file.\n\n### `run_info(adata, *, keep: bool=True)`\n\nReturn TF-IDF\u002FLSI parameters; keep=False removes the run record.\n\n\u003C!-- api:end -->\n\n## See also\n\n- `references\u002Fparameters.md` — every CLI flag, per-method tunables\n- `references\u002Fmethodology.md` — TF-IDF + LSI math; Signac alignment\n- `references\u002Foutput_contract.md` — `obsm`\u002F`var` schema + table layouts\n- Adjacent skills: `sc-preprocessing` (parallel — scRNA, NOT scATAC), `sc-clustering` (downstream — re-cluster on `obsm[\"X_lsi\"]` if you want a different resolution without re-running TF-IDF)\n\n## Dependencies\n\nPython packages this skill's script needs. They are not installed for you — check before a long run.\n\n`anndata`, `igraph`, `matplotlib`, `numpy`, `pandas`, `scanpy`, `scikit-learn`, `scipy`, `seaborn`\n","# scatac-preprocessing\n\n## Use from a step\n\n```python\nfrom skills._sdk.notebook import load_skill, read_input, write_output\n\natac = load_skill(\"scatac-preprocessing\")\nadata = read_input(\"data\u002Fpeaks.h5\", reader=atac.read_10x_peaks)\nadata = atac.preprocess(adata, random_state=0)\nwrite_output(adata, \"intermediate\u002Faccessibility.h5ad\")\nwrite_output(atac.cluster_summary(adata), \"tables\u002Fclusters.csv\")\n```\n\nFor H5AD use `read_input` without a reader. The API returns a copy and does\nnot write files. `examples\u002Fexample_step.py` recovers three planted groups\nfrom `load_demo(\"atac_synthetic\")`; that tests computation, not biological validity.\n\n## When to use\n\nThe user has a cell × peak scATAC AnnData (raw-count-like accessibility\nmatrix in `.X`) and wants the standard \"filter → TF-IDF → LSI → graph →\nUMAP → Leiden\" pipeline in one shot. Currently a single backend:\n`tfidf_lsi` (Signac-style). The skill stops at clustered UMAP — no\nfragment QC, no peak calling, no motif \u002F gene-activity scoring, no\nmulti-sample integration. For scRNA preprocessing use `sc-preprocessing`.\n\n## Inputs & Outputs\n\n**Inputs**\n\n- Input kinds: `file`, `directory`\n- Modalities: scatac\n- File types: `.h5ad`, `.h5`, `.loom`, `.csv`, `.tsv`\n\n**Outputs**\n\n- `tables\u002Fcluster_summary.csv`\n- `tables\u002Flsi_variance_ratio.csv`\n- `tables\u002Fpeak_summary.csv`\n- `tables\u002Fpreprocess_summary.csv`\n- `tables\u002Fqc_metrics_per_cell.csv`\n- `tables\u002Fumap_points.csv`\n- `figures\u002Fumap_leiden.png`\n- `figures\u002Flsi_variance.png`\n- `figures\u002Fqc_violin.png`\n- `figures\u002Ftop_accessible_peaks.png`\n- `processed.h5ad`\n- `report.md`\n- `result.json`\n- `figures\u002Fmanifest.json`, `figure_data\u002Fmanifest.json`, plot-data CSV files\n- `reproducibility\u002Fcommands.sh`, `reproducibility\u002Frequirements.txt`\n- Processed AnnData (`saves_h5ad`) — adds `obs`: `leiden`; `obsm`: `X_lsi`, `X_umap`; `layers`: `counts`\n- AnnData processing state after success: `preprocessed`\n\n## Flow\n\n1. Read cell × peak counts. The 10x reader uses `gex_only=False` and keeps Peaks in multiome inputs; other CLI formats use `smart_load`.\n2. Validate `.X` is present, non-empty, non-negative.\n3. Compute per-cell `n_peaks_by_counts` \u002F `total_counts`; filter cells by `--min-peaks` and peaks by `--min-cells`.\n4. Retain the globally most accessible peaks up to `--n-top-peaks`.\n5. Run Signac-style TF-IDF (`--tfidf-scale-factor`); truncated-SVD LSI to `--n-lsi` components.\n6. Build neighbour graph (`--n-neighbors`), UMAP, Leiden (`--leiden-resolution`).\n7. Save `processed.h5ad`, tables, figures, `report.md`, `result.json`.\n\n## Gotchas\n\n- **Filtering can wipe everything.** `_api.py:preprocess` raises if `min_peaks` removes every cell or `min_cells` removes every peak. Inspect `n_peaks_by_counts` before tightening thresholds; the CLI defaults to `--min-peaks 200`.\n- **LSI needs enough cells and peaks.** `_api.py:preprocess` raises when fewer than two LSI components can be computed after filtering.\n- **Input must be non-negative count-like in `.X`.** `_api.py:preprocess` rejects missing, empty or negative matrices. Non-integer values only warn: TF-IDF values are usually non-negative and may pass this check, but preprocessing them again is not valid.\n- **`processed.h5ad` keeps only retained peaks.** `_api.py:preprocess` selects the top `n_top_peaks` by total accessibility. Keep the input if you need the full peak space later.\n- **`--input` mandatory unless `--demo`.** `scatac_preprocessing.py` raises `ValueError(\"--input required when not using --demo\")`.\n- **Single backend only.** `scatac_preprocessing.py` raises `ValueError(f\"Unknown preprocessing method '{method}'\")` for anything other than `tfidf_lsi`. The `--method` flag exists for forward compatibility; today it's effectively a no-op.\n- `_api.py:qc_metrics_table` reports QC metrics calculated before selecting top peaks. Those totals can exceed the sums in the returned, peak-filtered `.X` or counts layer.\n- `_api.py:read_10x_peaks` reads counts, not fragments or BAM. It raises when a multiome input contains no Peaks features; it never falls back to gene expression.\n\n## Key CLI\n\n```bash\n# Demo (built-in synthetic scATAC)\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py --demo --output \u002Ftmp\u002Fscatac_demo\n\n# Standard run on a 10x scATAC h5\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py \\\n  --input atac_peaks.h5 --output results\u002F\n\n# Tune QC + feature budget\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py \\\n  --input atac_peaks.h5ad --output results\u002F \\\n  --min-peaks 300 --min-cells 10 --n-top-peaks 20000\n\n# Tune latent space + clustering\npython skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py \\\n  --input atac_peaks.h5ad --output results\u002F \\\n  --n-lsi 40 --n-neighbors 20 --leiden-resolution 1.0\n```\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `preprocess(adata, *, min_peaks=200, min_cells=5, n_top_peaks=10000, tfidf_scale_factor=10000.0, n_lsi=30, n_neighbors=15, leiden_resolution=0.8, random_state=0)`\n\nReturn a filtered copy of .X accessibility counts with TF-IDF, LSI and Leiden.\n\nCells need min_peaks detected peaks; peaks need min_cells cells. Keep at\nmost n_top_peaks, ranked by total counts. Counts remain in layers['counts']\nand .raw on retained peaks; .X becomes log1p TF-IDF. LSI uses scaled SVD\ncomponents, excluding the first component from the neighbor graph. UMAP\nand Leiden use that graph. All stochastic operations use random_state.\nNo file is written and the input is not modified.\n\n### `read_10x_peaks(path)`\n\nRead 10x H5 or MTX peak counts; pass it as reader= to read_input.\n\nUse gex_only=False, then keep Peaks when feature_types is present. No\ngene-expression filtering is applied to a peak-only matrix lacking it.\n\n### `qc_metrics_table(adata)`\n\nReturn cell identifiers and the QC metrics computed before top-peak selection.\n\n### `peak_summary(adata, *, n_top=50)`\n\nReturn retained peaks ranked by total counts and number of cells.\n\n### `lsi_variance_table(adata)`\n\nReturn variance ratios and their cumulative sum for every fitted LSI component.\n\n### `cluster_summary(adata, *, cluster_key='leiden')`\n\nReturn cell counts and percentages for labels in obs[cluster_key].\n\n### `umap_figure(adata, *, cluster_key='leiden')`\n\nReturn a cluster-colored Figure from obsm['X_umap']; do not write a file.\n\n### `run_info(adata, *, keep: bool=True)`\n\nReturn TF-IDF\u002FLSI parameters; keep=False removes the run record.\n\n\u003C!-- api:end -->\n\n## See also\n\n- `references\u002Fparameters.md` — every CLI flag, per-method tunables\n- `references\u002Fmethodology.md` — TF-IDF + LSI math; Signac alignment\n- `references\u002Foutput_contract.md` — `obsm`\u002F`var` schema + table layouts\n- Adjacent skills: `sc-preprocessing` (parallel — scRNA, NOT scATAC), `sc-clustering` (downstream — re-cluster on `obsm[\"X_lsi\"]` if you want a different resolution without re-running TF-IDF)\n\n## Dependencies\n\nPython packages this skill's script needs. They are not installed for you — check before a long run.\n\n`anndata`, `igraph`, `matplotlib`, `numpy`, `pandas`, `scanpy`, `scikit-learn`, `scipy`, `seaborn`\n",{"name":5,"tags":43,"trigger":45,"description":7},[25,24,31,19,23,22,44,21],"clustering","scATAC preprocessing, single-cell ATAC preprocessing, ATAC TF-IDF LSI, chromatin accessibility clustering, scATAC UMAP Leiden","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing",27,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw","https:\u002F\u002FTianGzlab.github.io\u002FOmicsClaw\u002F","https:\u002F\u002Fgithub.com\u002FTianGzlab","2026-10-08 01:36:11",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill scatac-preprocessing",{"tool":60,"command":61},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill scatac-preprocessing",{"tool":63,"command":64},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill scatac-preprocessing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002FSKILL.md",true,[68,74,78,84,88,92,96,100,104],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"_api.py","SCRIPT","脚本",8636,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002F_api.py",{"path":75,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":76,"sourceHtmlUrl":77},"examples\u002Fexample_step.py",805,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fexamples\u002Fexample_step.py",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fmethodology.md","REFERENCE","参考文档",7702,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Freferences\u002Fmethodology.md",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Foutput_contract.md",1042,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Freferences\u002Foutput_contract.md",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fparameters.md",1113,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Freferences\u002Fparameters.md",{"path":93,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":94,"sourceHtmlUrl":95},"scatac_preprocessing.py",27271,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Fscatac_preprocessing.py",{"path":97,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":98,"sourceHtmlUrl":99},"tests\u002F__init__.py",38,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Ftests\u002F__init__.py",{"path":101,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":102,"sourceHtmlUrl":103},"tests\u002Ftest_atac_api.py",3103,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Ftests\u002Ftest_atac_api.py",{"path":105,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":106,"sourceHtmlUrl":107},"tests\u002Ftest_scatac_preprocessing.py",3858,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fsinglecell\u002Fscatac\u002Fscatac-preprocessing\u002Ftests\u002Ftest_scatac_preprocessing.py",[109,127,139,156,181,202],{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":120,"publishedAt":38},"01M6DTP4X225Q92RMY8XXHPCTT","demo-skill","A fixture skill for the skill environment tests. Use it for nothing else.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fskillenv\u002Ffixtures\u002Fskills\u002Fdemo\u002Fdemo-skill\u002FSKILL.md",[115],{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[121,122,123,124,125,36,126],"demo skill","demo","tests","fixture","fixture skill","environment",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":38},"01M6DTP28JTWQK3HHXDNQV8BBV","fake-domains","Test fixture for the golden deployment in tests\u002Fentry. Load never; it has no script.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fentry\u002Ffake_skills\u002Fspatial\u002Ffake-domains\u002FSKILL.md",[],[134,135,136,123,124,137,138],"domains","fake domains","deployment","never","test",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":146,"publishedAt":38},"01M6DTNZ4AMWKTME1T18K5C643","replace-me-skill","Load when copying this directory to bootstrap a new OmicsClaw skill. Skip when an existing skill already covers the request.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002FSKILL.md",[145],{"categoryNo":116,"categoryName":117,"taxonomyType":118,"taxonomyTypeDesc":119},[147,148,149,150,151,152,153,154,155],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":38},"01M6DTNV63MTD0Q6YRC52F0B1Y","spatial-velocity","Load when estimating RNA velocity on a spatial AnnData with `layers[\"spliced\"]` + `layers[\"unspliced\"]` via scVelo (stochastic \u002F deterministic \u002F dynamical) or veloVI (deep generative). Skip when input lacks the spliced\u002Funspliced layers (must be quantified upstream by velocyto \u002F kb-python \u002F STARsolo); non-spatial scRNA velocity (use sc-velocity).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-velocity\u002FSKILL.md",[],[163,164,165,166,30,167,168,169,170,171,172,173,174,175,176,177,178,36,179,180],"velocity","spatial velocity","Spatial","scvelo","starsolo","time","deep","RNA","kb-python","via","velocyto","rna-velocity","velovi","dynamics","upstream","kb","python","deterministic",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":38},"01M6DTNPMR227NAT8QFY620YDW","spatial-trajectory","Load when inferring pseudotime \u002F lineage trajectories on a preprocessed spatial AnnData via DPT (default — diffusion pseudotime), CellRank (terminal-state + fate-probability), or Palantir (waypoint branch probabilities). Skip when the data has spliced\u002Funspliced layers and you want velocity-driven dynamics (use spatial-velocity); non-spatial scRNA pseudotime (use sc-pseudotime).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-trajectory\u002FSKILL.md",[],[165,188,189,190,191,192,193,194,172,195,196,197,198,33,163,199,36,200,37,201],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","default","branch","data",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":208,"publishedAt":38},"01M6DTNJEYFT33P84DGHDNXW95","spatial-statistics","Load when running spatial autocorrelation \u002F hotspot \u002F co-occurrence \u002F neighbourhood-enrichment \u002F Ripley K stats on a clustered spatial AnnData via squidpy. Skip when ranking spatially variable genes (use spatial-genes); tissue domain detection (use spatial-domains).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-statistics\u002FSKILL.md",[],[209,210,165,172,211,212,213,214,215,216,134,217,218,219,220,36,37,221,222,223],"spatial statistics","statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","local","domain","detection","enrichment","stats"]