[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTECC4PDGMT20G8P2XS4Q3":3,"skill-same:01M6DTECC4PDGMT20G8P2XS4Q3":104},{"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":22,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6DTECC4PDGMT20G8P2XS4Q3","proteomics-data-import",null,"Load when ingesting a MaxQuant `proteinGroups.txt`, FragPipe `combined_protein.tsv`, DIA-NN report, or generic CSV \u002F TSV protein-quantification table — normalises columns to a standard schema, emits `tables\u002Fproteins.csv`. Skip when raw spectra are the input (run the search engine first); the file is already OmicsClaw schema.","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\u002Fproteomics\u002Fproteomics-data-import\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"proteomics data import","data","proteomics","conversion","spectronaut","diann","fragpipe","maxquant","import","dia","proteins","run","standard schema","schema","engine","convert","first","csv","file","search","2026-11-10 10:12:30",false,"---\nname: proteomics-data-import\ndescription: Load when ingesting a MaxQuant `proteinGroups.txt`, FragPipe `combined_protein.tsv`, DIA-NN\n  report, or generic CSV \u002F TSV protein-quantification table — normalises columns to a standard schema,\n  emits `tables\u002Fproteins.csv`. Skip when raw spectra are the input (run the search engine first); the\n  file is already OmicsClaw schema.\ntrigger: data import, convert proteomics, format conversion\ntags:\n- proteomics\n- import\n- maxquant\n- fragpipe\n- diann\n- spectronaut\n---\n\n# proteomics-data-import\n\n## When to use\n\nmaxquant is the default; fragpipe, diann and generic normalize their own column names. read_table detects CSV\u002FTSV separation.\nUse existing search-engine tables; this skill does not search raw spectra.\n\n## Use from a step\n\n```python\nfrom skills._sdk.notebook import load_skill, write_output\nlibrary = load_skill('proteomics-data-import')\ndata = library.demo_data(random_state=42)\nresult = library.standardize(data)\nwrite_output(result, 'tables\u002Fproteins.csv')\n```\n\nFor real data, use `read_input` and pass any `read_table` helper as `reader=`.\nThe executable `examples\u002Fexample_step.py` also checks the result and writes a Figure.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `read_table(path: str | Path) -> pd.DataFrame`\n\nRead a CSV or TSV; pass this function as reader= to read_input.\n\n:param path: Search-engine output file; the first line selects comma or tab separation.\n:returns: Unmodified input columns as a DataFrame.\n:raises OSError: The file cannot be read.\n\n### `standardize(data: pd.DataFrame, *, format: str='maxquant') -> pd.DataFrame`\n\nReturn a standardized copy of a search-engine protein table.\n\n:param data: Original protein table with engine-specific column names.\n:param format: CLI default maxquant; fragpipe, diann and generic use their own mappings.\n:returns: Protein table; MaxQuant reverse, contaminant and site-only flags are filtered.\n:raises ValueError: The format is unsupported.\n\n### `run_info(table: pd.DataFrame, *, keep: bool=True) -> dict`\n\nRead import diagnostics.\n\n:param table: Standardized protein table.\n:param keep: True preserves attrs; False removes diagnostics.\n:returns: A separate diagnostic dictionary.\n:raises TypeError: The input is not a DataFrame.\n\n### `intensity_figure(table: pd.DataFrame)`\n\nPlot numeric column medians for checking an imported table.\n\n:param table: Standardized protein table; numeric metadata is included.\n:returns: A matplotlib Figure without writing files.\n:raises TypeError: The input is not a DataFrame.\n\n### `demo_data(*, random_state: int=42) -> pd.DataFrame`\n\nGenerate a synthetic MaxQuant table in memory.\n\n:param random_state: CLI seed 42; change for another simulation.\n:returns: Two hundred protein rows, including five flagged rows.\n:raises ValueError: The seed is invalid.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nmaxquant is the default; fragpipe, diann and generic normalize their own column names. read_table detects CSV\u002FTSV separation.\nFunctions return new DataFrames. `run_info(result)` reads diagnostic attrs;\nuse `keep=False` before serialization when those attrs are not needed.\n\n## Gotchas\n\n- standardize filters MaxQuant Reverse, Potential contaminant and Only identified by site flags. Generic import does not infer those flags.\n- `demo_data` uses seed 42, matching the CLI; every demo is synthetic.\n- `run_info` lives in DataFrame attrs and is not preserved by CSV serialization.\n\n## Inputs and outputs\n\nThe CLI reads CSV tables and writes:\n\n- tables\u002Fproteins.csv\n- report.md\n- result.json\n- `demo_proteinGroups.txt` is written only with `--demo`.\n\nFunctions return data and Figures without writing files. Steps own their outputs.\nDemo mode also writes its synthetic input when the original CLI used a file.\n\n## CLI\n\n```bash\npython skills\u002Fproteomics\u002Fproteomics-data-import\u002Fproteomics_data_import.py --demo --output \u002Ftmp\u002Fproteomics_data_import\n```\n\nFor real input replace `--demo` with `--input \u003Ctable>`.\n\n\n## See also\n\n- `references\u002Fmethodology.md`\n- `references\u002Fparameters.md`\n- `references\u002Foutput_contract.md`\n- `proteomics-data-import` for protein-table normalization; `proteomics-de` for comparisons.\n\n## Dependencies\n\n`numpy`, `pandas`, `matplotlib`\n","# proteomics-data-import\n\n## When to use\n\nmaxquant is the default; fragpipe, diann and generic normalize their own column names. read_table detects CSV\u002FTSV separation.\nUse existing search-engine tables; this skill does not search raw spectra.\n\n## Use from a step\n\n```python\nfrom skills._sdk.notebook import load_skill, write_output\nlibrary = load_skill('proteomics-data-import')\ndata = library.demo_data(random_state=42)\nresult = library.standardize(data)\nwrite_output(result, 'tables\u002Fproteins.csv')\n```\n\nFor real data, use `read_input` and pass any `read_table` helper as `reader=`.\nThe executable `examples\u002Fexample_step.py` also checks the result and writes a Figure.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `read_table(path: str | Path) -> pd.DataFrame`\n\nRead a CSV or TSV; pass this function as reader= to read_input.\n\n:param path: Search-engine output file; the first line selects comma or tab separation.\n:returns: Unmodified input columns as a DataFrame.\n:raises OSError: The file cannot be read.\n\n### `standardize(data: pd.DataFrame, *, format: str='maxquant') -> pd.DataFrame`\n\nReturn a standardized copy of a search-engine protein table.\n\n:param data: Original protein table with engine-specific column names.\n:param format: CLI default maxquant; fragpipe, diann and generic use their own mappings.\n:returns: Protein table; MaxQuant reverse, contaminant and site-only flags are filtered.\n:raises ValueError: The format is unsupported.\n\n### `run_info(table: pd.DataFrame, *, keep: bool=True) -> dict`\n\nRead import diagnostics.\n\n:param table: Standardized protein table.\n:param keep: True preserves attrs; False removes diagnostics.\n:returns: A separate diagnostic dictionary.\n:raises TypeError: The input is not a DataFrame.\n\n### `intensity_figure(table: pd.DataFrame)`\n\nPlot numeric column medians for checking an imported table.\n\n:param table: Standardized protein table; numeric metadata is included.\n:returns: A matplotlib Figure without writing files.\n:raises TypeError: The input is not a DataFrame.\n\n### `demo_data(*, random_state: int=42) -> pd.DataFrame`\n\nGenerate a synthetic MaxQuant table in memory.\n\n:param random_state: CLI seed 42; change for another simulation.\n:returns: Two hundred protein rows, including five flagged rows.\n:raises ValueError: The seed is invalid.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nmaxquant is the default; fragpipe, diann and generic normalize their own column names. read_table detects CSV\u002FTSV separation.\nFunctions return new DataFrames. `run_info(result)` reads diagnostic attrs;\nuse `keep=False` before serialization when those attrs are not needed.\n\n## Gotchas\n\n- standardize filters MaxQuant Reverse, Potential contaminant and Only identified by site flags. Generic import does not infer those flags.\n- `demo_data` uses seed 42, matching the CLI; every demo is synthetic.\n- `run_info` lives in DataFrame attrs and is not preserved by CSV serialization.\n\n## Inputs and outputs\n\nThe CLI reads CSV tables and writes:\n\n- tables\u002Fproteins.csv\n- report.md\n- result.json\n- `demo_proteinGroups.txt` is written only with `--demo`.\n\nFunctions return data and Figures without writing files. Steps own their outputs.\nDemo mode also writes its synthetic input when the original CLI used a file.\n\n## CLI\n\n```bash\npython skills\u002Fproteomics\u002Fproteomics-data-import\u002Fproteomics_data_import.py --demo --output \u002Ftmp\u002Fproteomics_data_import\n```\n\nFor real input replace `--demo` with `--input \u003Ctable>`.\n\n\n## See also\n\n- `references\u002Fmethodology.md`\n- `references\u002Fparameters.md`\n- `references\u002Foutput_contract.md`\n- `proteomics-data-import` for protein-table normalization; `proteomics-de` for comparisons.\n\n## Dependencies\n\n`numpy`, `pandas`, `matplotlib`\n",{"name":5,"tags":48,"trigger":49,"description":7},[25,31,30,29,28,27],"data import, convert proteomics, format conversion","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fproteomics\u002Fproteomics-data-import",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":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill proteomics-data-import",{"tool":64,"command":65},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill proteomics-data-import",{"tool":67,"command":68},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill proteomics-data-import","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002FSKILL.md",true,[72,78,82,86,92,96,100],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"_api.py","SCRIPT","脚本",2968,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002F_api.py",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"examples\u002Fexample_step.py",479,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002Fexamples\u002Fexample_step.py",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"proteomics_data_import.py",4585,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002Fproteomics_data_import.py",{"path":87,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fmethodology.md","REFERENCE","参考文档",280,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002Freferences\u002Fmethodology.md",{"path":93,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Foutput_contract.md",267,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002Freferences\u002Foutput_contract.md",{"path":97,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":98,"sourceHtmlUrl":99},"references\u002Fparameters.md",300,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002Freferences\u002Fparameters.md",{"path":101,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":102,"sourceHtmlUrl":103},"tests\u002Ftest_api.py",1160,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fproteomics\u002Fproteomics-data-import\u002Ftests\u002Ftest_api.py",[105,124,136,153,179,201],{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":116,"publishedAt":43},"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",[111],{"categoryNo":112,"categoryName":113,"taxonomyType":114,"taxonomyTypeDesc":115},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[117,118,119,120,121,122,123],"demo skill","demo","tests","fixture","fixture skill","use","environment",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":43},"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",[],[131,132,133,119,120,134,135],"domains","fake domains","deployment","never","test",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":143,"publishedAt":43},"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",[142],{"categoryNo":112,"categoryName":113,"taxonomyType":114,"taxonomyTypeDesc":115},[144,145,146,147,148,149,150,151,152],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":43},"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",[],[160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,122,177,178],"velocity","spatial velocity","Spatial","scvelo","input","starsolo","time","deep","RNA","kb-python","via","velocyto","rna-velocity","velovi","dynamics","upstream","kb","python","deterministic",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":43},"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",[],[162,186,187,188,189,190,191,192,170,193,194,195,196,197,160,198,122,199,200,24],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","cell","default","branch","anndata",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":207,"publishedAt":43},"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",[],[208,209,162,170,210,211,212,213,214,215,131,216,217,218,219,122,200,220,221,222],"spatial statistics","statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","local","domain","detection","enrichment","stats"]