@brainpilot/skills 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/skills/01_Meta-Skills/academic-research-hub/SKILL.md +108 -0
- package/skills/01_Meta-Skills/academic-research-hub/scripts/requirements.txt +17 -0
- package/skills/01_Meta-Skills/academic-research-hub/scripts/research.py +781 -0
- package/skills/01_Meta-Skills/beautiful-log/SKILL.md +64 -0
- package/skills/01_Meta-Skills/beautiful-log/scripts/beautiful_log.py +274 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/SKILL.md +130 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/config.template.yaml +54 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/top5_digest_template.md +5 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/build_top5_digest.py +300 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/common.py +137 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/merge_results.py +106 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/run_pipeline.py +177 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_arxiv.py +162 -0
- package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_pubmed.py +202 -0
- package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/SKILL.md +173 -0
- package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/scripts/normalize_data.py +874 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/SKILL.md +134 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/confirmation-prompts.md +31 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/output-patterns.md +45 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_markdown_deliverables.py +41 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_research_log.py +84 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_summary_md.py +63 -0
- package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/extract_pdf_bundle.py +140 -0
- package/skills/01_Meta-Skills/experiment-controller/SKILL.md +140 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/SKILL.md +366 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/entity_resolution.py +120 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/extraction_prompt_template.txt +19 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/graph_query.py +106 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/hypothesis_cli_reference.py +42 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/new_data_source_template.py +116 -0
- package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/requirements.txt +15 -0
- package/skills/01_Meta-Skills/method-design/SKILL.md +61 -0
- package/skills/01_Meta-Skills/multi-search-engine/SKILL.md +119 -0
- package/skills/01_Meta-Skills/research-idea/SKILL.md +65 -0
- package/skills/05_EEG_ERP/eeg-skill/SKILL.md +197 -0
- package/skills/05_EEG_ERP/meg-skill/SKILL.md +188 -0
- package/skills/05_EEG_ERP/meg-skill/scripts/time_frequency.py +223 -0
- package/skills/05_EEG_ERP/mne-eeg-tool/SKILL.md +165 -0
- package/skills/05_EEG_ERP/mne-eeg-tool/scripts/eeg_pipeline_reference.py +231 -0
- package/skills/05_EEG_ERP/seed-iv-skill/SKILL.md +184 -0
- package/skills/05_EEG_ERP/seed-iv-skill/scripts/classify_seed_iv.py +154 -0
- package/skills/05_EEG_ERP/seed-iv-skill/scripts/extract_seed_iv_features.py +190 -0
- package/skills/05_EEG_ERP/seed-iv-skill/scripts/validate_seed_iv.py +102 -0
- package/skills/05_EEG_ERP/seed-vig-skill/SKILL.md +182 -0
- package/skills/05_EEG_ERP/seed-vig-skill/scripts/classify_seed_vig.py +165 -0
- package/skills/05_EEG_ERP/seed-vig-skill/scripts/extract_seed_vig_features.py +185 -0
- package/skills/05_EEG_ERP/seed-vig-skill/scripts/validate_seed_vig.py +88 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/SKILL.md +308 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/abcd_qc_summary.py +449 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/extract_abcd_phenotype.py +292 -0
- package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/reorganize_abcd.py +387 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/SKILL.md +302 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/abide_qc_summary.py +317 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/extract_abide_phenotype.py +267 -0
- package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/reorganize_abide.py +387 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/SKILL.md +244 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/adhd200_qc_summary.py +98 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/extract_adhd200_phenotype.py +134 -0
- package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/reorganize_adhd200.py +206 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/SKILL.md +358 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_adni_task_files.py +1305 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_vqa_from_tasks.py +766 -0
- package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/reorganize_adni.py +491 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/SKILL.md +295 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/aibl_qc_summary.py +260 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/extract_aibl_phenotype.py +365 -0
- package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/reorganize_aibl.py +394 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/SKILL.md +292 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/aomic_qc_summary.py +258 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/extract_aomic_phenotype.py +284 -0
- package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/reorganize_aomic.py +322 -0
- package/skills/06_fMRI_Neuroimaging/asl-skill/SKILL.md +168 -0
- package/skills/06_fMRI_Neuroimaging/asl-skill/scripts/compute_cbf.py +224 -0
- package/skills/06_fMRI_Neuroimaging/bids-organizer/SKILL.md +241 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/SKILL.md +186 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/bold5000_qc_summary.py +96 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/extract_bold5000_stimulus.py +125 -0
- package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/reorganize_bold5000.py +102 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/SKILL.md +213 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/camcan_qc_summary.py +131 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/extract_camcan_phenotype.py +145 -0
- package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/validate_camcan.py +141 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/SKILL.md +201 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/cobre_qc_summary.py +95 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/extract_cobre_phenotype.py +104 -0
- package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/reorganize_cobre.py +140 -0
- package/skills/06_fMRI_Neuroimaging/conn-tool/SKILL.md +180 -0
- package/skills/06_fMRI_Neuroimaging/dcm2nii/SKILL.md +189 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/SKILL.md +183 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/dmt_har_med_qc_summary.py +96 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/extract_dmt_har_med_phenotype.py +121 -0
- package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/reorganize_dmt_har_med.py +125 -0
- package/skills/06_fMRI_Neuroimaging/dwi-skill/SKILL.md +359 -0
- package/skills/06_fMRI_Neuroimaging/fmri-skill/SKILL.md +371 -0
- package/skills/06_fMRI_Neuroimaging/fmriprep-tool/SKILL.md +228 -0
- package/skills/06_fMRI_Neuroimaging/freesurfer-tool/SKILL.md +286 -0
- package/skills/06_fMRI_Neuroimaging/freesurfer-tool/scripts/freesurfer_processor.py +145 -0
- package/skills/06_fMRI_Neuroimaging/fsl-tool/SKILL.md +208 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/SKILL.md +271 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/extract_hbn_phenotype.py +107 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/hbn_qc_summary.py +96 -0
- package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/reorganize_hbn.py +150 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/SKILL.md +210 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/extract_hcpa_phenotype.py +146 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/hcpa_qc_summary.py +120 -0
- package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/reorganize_hcpa.py +155 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/SKILL.md +210 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/extract_hcpd_phenotype.py +148 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/hcpd_qc_summary.py +125 -0
- package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/reorganize_hcpd.py +146 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/SKILL.md +215 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/extract_hcpep_phenotype.py +157 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/hcpep_qc_summary.py +143 -0
- package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/reorganize_hcpep.py +146 -0
- package/skills/06_fMRI_Neuroimaging/hcppipeline-tool/SKILL.md +217 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/SKILL.md +214 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/extract_hcpya_phenotype.py +190 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/hcpya_qc_summary.py +152 -0
- package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/reorganize_hcpya.py +203 -0
- package/skills/06_fMRI_Neuroimaging/ixi-skill/SKILL.md +198 -0
- package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/ixi_qc_summary.py +137 -0
- package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/reorganize_ixi.py +190 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/SKILL.md +191 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/extract_mnd_phenotype.py +143 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/mnd_qc_summary.py +120 -0
- package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/validate_mnd.py +107 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/SKILL.md +203 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/analyze_lesions.py +119 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/longitudinal_lesion.py +148 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/mschallenge_qc_summary.py +132 -0
- package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/validate_mschallenge.py +116 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/SKILL.md +184 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/atlas_coordinate_reference.py +61 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/freesurfer_io_reference.py +34 -0
- package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/nifti_inspection_reference.py +35 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/SKILL.md +205 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/extract_nifd_phenotype.py +132 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/nifd_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/validate_nifd.py +111 -0
- package/skills/06_fMRI_Neuroimaging/nii2dcm/SKILL.md +143 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/SKILL.md +266 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/connectome_reference.py +65 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/denoise_timeseries_reference.py +58 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/hierarchical_parcellation_reference.py +53 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/kmeans_parcellation_reference.py +53 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/preprocess_bold_reference.py +76 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_dictlearning_reference.py +56 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_ica_reference.py +59 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/second_level_glm_reference.py +58 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/spacenet_classifier_reference.py +59 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/svm_classifier_reference.py +60 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/task_glm_reference.py +63 -0
- package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/zalff_summary_reference.py +109 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/SKILL.md +210 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/extract_nsd_stimulus.py +171 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/nsd_qc_summary.py +142 -0
- package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/validate_nsd.py +142 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/SKILL.md +205 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/extract_oasis_phenotype.py +126 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/oasis_qc_summary.py +115 -0
- package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/validate_oasis.py +119 -0
- package/skills/06_fMRI_Neuroimaging/pet-skill/SKILL.md +173 -0
- package/skills/06_fMRI_Neuroimaging/pet-skill/scripts/compute_suvr.py +202 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/SKILL.md +206 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/extract_pnc_phenotype.py +136 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/pnc_qc_summary.py +116 -0
- package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/validate_pnc.py +120 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/SKILL.md +209 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/extract_ppmi_phenotype.py +138 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/ppmi_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/validate_ppmi.py +117 -0
- package/skills/06_fMRI_Neuroimaging/qsiprep-tool/SKILL.md +320 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/SKILL.md +215 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/extract_rest_mdd_phenotype.py +132 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/harmonize_sites.py +152 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/rest_mdd_qc_summary.py +124 -0
- package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/validate_rest_mdd.py +103 -0
- package/skills/06_fMRI_Neuroimaging/smri-skill/SKILL.md +302 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/SKILL.md +204 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/extract_tcp_phenotype.py +139 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/tcp_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/validate_tcp.py +99 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/SKILL.md +217 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/extract_ucla_cnp_phenotype.py +145 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/ucla_cnp_qc_summary.py +111 -0
- package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/validate_ucla_cnp.py +113 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/SKILL.md +310 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/build_ukb_survival.py +210 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_cases.py +308 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_phenotype.py +232 -0
- package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/ukb_qc_summary.py +158 -0
- package/skills/06_fMRI_Neuroimaging/wmh-segmentation/SKILL.md +133 -0
- package/skills/07_Computational_Modeling/detrending/SKILL.md +118 -0
- package/skills/07_Computational_Modeling/dictlearning/SKILL.md +122 -0
- package/skills/07_Computational_Modeling/filtering/SKILL.md +121 -0
- package/skills/07_Computational_Modeling/glm/SKILL.md +153 -0
- package/skills/07_Computational_Modeling/hierarchical/SKILL.md +121 -0
- package/skills/07_Computational_Modeling/ica/SKILL.md +122 -0
- package/skills/07_Computational_Modeling/kmeans/SKILL.md +119 -0
- package/skills/07_Computational_Modeling/run_models/SKILL.md +427 -0
- package/skills/07_Computational_Modeling/spacenet/SKILL.md +122 -0
- package/skills/07_Computational_Modeling/svm/SKILL.md +120 -0
- package/skills/08_Computational_Neuroscience/brain_gnn/SKILL.md +183 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/SKILL.md +239 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/scripts/dti_metrics_reference.py +70 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/scripts/load_and_mask_reference.py +76 -0
- package/skills/08_Computational_Neuroscience/dipy-tool/scripts/roi_stats_reference.py +59 -0
- package/skills/08_Computational_Neuroscience/fm_app/SKILL.md +195 -0
- package/skills/08_Computational_Neuroscience/neurostorm/SKILL.md +151 -0
- package/skills/13_Visualization/brain-visualization/SKILL.md +191 -0
- package/skills/13_Visualization/brain-visualization/scripts/connectome_reference.py +108 -0
- package/skills/13_Visualization/brain-visualization/scripts/freesurfer_ply_reference.py +54 -0
- package/skills/13_Visualization/brain-visualization/scripts/zalff_summary_reference.py +116 -0
- package/skills/13_Visualization/ethoclaw-paper-figure-layout/SKILL.md +78 -0
- package/skills/13_Visualization/ethoclaw-paper-figure-layout/assets/naturecomm_figures.tex +74 -0
- package/skills/13_Visualization/ethoclaw-paper-figure-layout/scripts/layout_results_foldered.py +579 -0
- package/skills/14_Writing/overleaf-skill/SKILL.md +184 -0
- package/skills/14_Writing/overleaf-skill/scripts/install.sh +30 -0
- package/skills/14_Writing/paper-writing/SKILL.md +146 -0
- package/skills/14_Writing/paper-writing/scripts/data_statement_templates.py +164 -0
- package/skills/14_Writing/paper-writing/scripts/figure_templates.py +315 -0
- package/skills/14_Writing/paper-writing/scripts/nature_figure_style.py +214 -0
- package/skills/14_Writing/paper-writing/scripts/section_phrasebank.py +246 -0
- package/skills/16_Animal_Behavior/deeplabcut/SKILL.md +154 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/3d-pose.md +89 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/maDLC.md +123 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/modelzoo.md +98 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/standard-pipeline.md +165 -0
- package/skills/16_Animal_Behavior/deeplabcut/references/utilities.md +146 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/SKILL.md +274 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.html +112 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.md +21 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/cluster-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/heatmap-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/integrated-interpretation.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/overview.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/project-summary.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/radar-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/raw-trajectory.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/sample-check.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/single-subject-section.md +3 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/stats-section.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/epm.md +52 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/fst.md +37 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/nor.md +39 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/oft.md +43 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tcst.md +45 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tst.md +36 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/input-types.md +59 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/interpretation-guardrails.md +45 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/metadata-schema.md +57 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/report-sections.md +86 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/section-selection-rules.md +169 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/build_report_manifest.py +27 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/render_report.py +34 -0
- package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/report_utils.py +1121 -0
- package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/SKILL.md +390 -0
- package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/reference_code.py +98 -0
- package/skills/16_Animal_Behavior/ethoclaw-animal-pose-estimation/SKILL.md +336 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/README.md +21 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/SKILL.md +41 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/batch_kinematic_generator.py +663 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/config.json +19 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/generate_kinematic_parameter.py +401 -0
- package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/kinematic_generator.py +265 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/SKILL.md +72 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/references/config.example.toml +56 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params.py +232 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params_from_config.py +236 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/SKILL.md +68 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/references/notes.md +5 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/scripts/plot_h5_radar.py +513 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/SKILL.md +52 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/config.toml +81 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/references/stats-rule.md +18 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_inspect.py +79 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_batch.py +624 -0
- package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_stats.py +438 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/SKILL.md +280 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_trajectory.py +790 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_velocity.py +855 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.csv +101 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.h5 +0 -0
- package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_data_readme.md +126 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pet-skill
|
|
3
|
+
description: "Use this skill whenever the user wants to process PET neuroimaging data including spatial normalization to T1w/MNI space, SUVR computation, reference region quantification, partial volume correction, or tracer-specific workflows (PiB amyloid, FDG metabolism, tau). Triggers include: 'PET', 'PET processing', 'SUVR', 'amyloid PET', 'FDG PET', 'tau PET', 'PiB', 'flortaucipir', 'reference region', 'partial volume correction', or any request involving PET neuroimaging data."
|
|
4
|
+
license: MIT License (NeuroClaw custom skill – freely modifiable within the project)
|
|
5
|
+
layer: subagent
|
|
6
|
+
skill_type: modality
|
|
7
|
+
dependencies:
|
|
8
|
+
- fsl-tool
|
|
9
|
+
- freesurfer-tool
|
|
10
|
+
- nibabel-skill
|
|
11
|
+
- claw-shell
|
|
12
|
+
complementary_skills:
|
|
13
|
+
- smri-skill
|
|
14
|
+
- fmri-skill
|
|
15
|
+
- brain-visualization
|
|
16
|
+
---
|
|
17
|
+
# PET Skill (Modality Layer)
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
`pet-skill` is the NeuroClaw **modality-layer** interface skill responsible for all PET neuroimaging data processing tasks.
|
|
22
|
+
|
|
23
|
+
It strictly follows the NeuroClaw hierarchical design principles:
|
|
24
|
+
- This skill **only describes WHAT needs to be done** and **which tool skill to delegate to**.
|
|
25
|
+
- It contains **no implementation code or concrete commands**.
|
|
26
|
+
- All concrete execution is delegated to existing base/tool skills: `fsl-tool`, `freesurfer-tool`, `nibabel-skill`, and `claw-shell`.
|
|
27
|
+
- Companion scripts in `scripts/` provide reference implementations for SUVR computation and reference region extraction.
|
|
28
|
+
|
|
29
|
+
**Core workflow (never bypassed):**
|
|
30
|
+
1. Identify input PET data and tracer type (PiB, FDG, tau, or other).
|
|
31
|
+
2. Ensure T1w structural data is available (via `smri-skill` if not yet processed).
|
|
32
|
+
3. Generate a **numbered execution plan** clearly stating WHAT needs to be done and which tool skill will handle each step.
|
|
33
|
+
4. Present the full plan, estimated runtime, resource requirements, and risks to the user and wait for explicit confirmation ("YES" / "execute" / "proceed").
|
|
34
|
+
5. On confirmation, delegate every step to the appropriate skill via `claw-shell`.
|
|
35
|
+
6. After execution, save all outputs in a clean directory structure (`pet_output/`).
|
|
36
|
+
|
|
37
|
+
**Research use only.**
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Quick Reference (Common PET Tasks)
|
|
42
|
+
|
|
43
|
+
| Task | What needs to be done | Delegate to which tool skill | Expected output |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| PET-to-T1w coregistration | Register dynamic or static PET frame to T1w using rigid-body alignment | `fsl-tool` (FLIRT) | PET in T1w native space |
|
|
46
|
+
| T1w-to-MNI normalization | Warp T1w (and co-registered PET) to MNI152 template | `fsl-tool` (FNIRT) or `smri-skill` | PET in MNI152 standard space |
|
|
47
|
+
| Reference region extraction | Extract mean signal from anatomically defined reference region (e.g., cerebellar cortex, pons, whole cerebellum) | `fsl-tool` + `freesurfer-tool` + `nibabel-skill` | Reference region mean time-activity curve |
|
|
48
|
+
| SUVR computation | Compute Standardized Uptake Value Ratio = target ROI / reference region | `scripts/compute_suvr.py` | Per-region SUVR values (CSV) |
|
|
49
|
+
| Partial volume correction | Apply geometric transfer matrix (GTM) or region-based PVC methods | `fsl-tool` + custom | PVC-corrected ROI values |
|
|
50
|
+
| Dynamic PET modeling | Kinetic modeling (e.g., Logan plot, SUVR with dynamic frames) | Custom analysis | DVR or SUVR over time |
|
|
51
|
+
| Tracer-specific workflow | PiB (amyloid, cerebellar cortex ref), FDG (metabolism, pons ref), tau (flortaucipir, cerebellar cortex ref) | Full pipeline | Tracer-appropriate SUVR maps |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Tracer-Specific Reference Regions
|
|
56
|
+
|
|
57
|
+
| Tracer | Target | Reference Region | SUVR Threshold (amyloid+) |
|
|
58
|
+
|---|---|---|---|
|
|
59
|
+
| **PiB** (¹¹C-Pittsburgh Compound B) | Amyloid-β deposition | Cerebellar cortex (gray matter) | SUVR > 1.42 or > 1.21 (centiloid-adjusted) |
|
|
60
|
+
| **FDG** (¹⁸F-Fluorodeoxyglucose) | Glucose metabolism (hypometabolism pattern) | Pons or whole cerebellum | Lower SUVR = worse metabolism |
|
|
61
|
+
| **Tau** (¹⁸F-Flortaucipir / AV-1451) | Tau neurofibrillary tangles | Cerebellar cortex (gray matter) | SUVR > 1.2–1.3 (region-dependent) |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Core Processing Pipeline
|
|
66
|
+
|
|
67
|
+
### Stage 1: T1w Preprocessing (via `smri-skill`)
|
|
68
|
+
- Brain extraction, tissue segmentation, cortical parcellation (FreeSurfer)
|
|
69
|
+
- Required for reference region definition and PVC
|
|
70
|
+
|
|
71
|
+
### Stage 2: PET-to-T1w Coregistration (via `fsl-tool`)
|
|
72
|
+
- Rigid-body registration of mean PET frame to T1w using FLIRT
|
|
73
|
+
- Apply transformation to full dynamic or static PET series
|
|
74
|
+
|
|
75
|
+
### Stage 3: Reference Region Definition
|
|
76
|
+
- Use FreeSurfer parcellation to extract reference region mask in T1w space
|
|
77
|
+
- Common references: cerebellar cortex (`Cerebellum_Cortex` in Desikan-Killiany), pons
|
|
78
|
+
- Project mask to PET space or keep in T1w space with partial volume correction
|
|
79
|
+
|
|
80
|
+
### Stage 4: SUVR Computation (via `scripts/compute_suvr.py`)
|
|
81
|
+
- Extract mean signal from target ROI and reference region
|
|
82
|
+
- SUVR = mean(target) / mean(reference)
|
|
83
|
+
- Output per-region SUVR values as CSV
|
|
84
|
+
|
|
85
|
+
### Stage 5 (Optional): Spatial Normalization to MNI
|
|
86
|
+
- Warp PET (in T1w space) to MNI152 using T1w-to-MNI warp
|
|
87
|
+
- Enable group-level voxelwise analysis
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Scripts
|
|
92
|
+
|
|
93
|
+
### `scripts/compute_suvr.py`
|
|
94
|
+
Computes SUVR from a PET image and ROI/reference masks.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
python skills/pet-skill/scripts/compute_suvr.py \
|
|
98
|
+
--pet /path/to/pet_in_t1w_space.nii.gz \
|
|
99
|
+
--target-mask /path/to/target_roi_mask.nii.gz \
|
|
100
|
+
--ref-mask /path/to/reference_region_mask.nii.gz \
|
|
101
|
+
--output /path/to/pet_output/suvr_values.csv
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Standard Output Layout
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
pet_output/
|
|
110
|
+
├── coregistration/ # PET-to-T1w registration matrices and resampled PET
|
|
111
|
+
├── suvr/ # SUVR maps and per-region CSV values
|
|
112
|
+
│ ├── suvr_values.csv
|
|
113
|
+
│ └── suvr_map.nii.gz
|
|
114
|
+
├── pvc/ # Partial volume corrected values (if requested)
|
|
115
|
+
├── mni/ # PET in MNI152 space (if normalization requested)
|
|
116
|
+
├── qc/ # Coregistration quality, reference region coverage
|
|
117
|
+
└── logs/
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Installation (Handled by dependency-planner)
|
|
123
|
+
|
|
124
|
+
No manual installation required at this layer.
|
|
125
|
+
When first used, `pet-skill` automatically calls `dependency-planner` to ensure `fsl-tool`, `freesurfer-tool`, `nibabel-skill`, and `claw-shell` are ready.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Important Notes & Limitations
|
|
130
|
+
|
|
131
|
+
- PET images are typically low-resolution (~2–4 mm); coregistration to high-resolution T1w is essential.
|
|
132
|
+
- Reference region selection is tracer-dependent; using the wrong reference region invalidates SUVR.
|
|
133
|
+
- Partial volume correction is recommended for atrophy-prone populations (e.g., Alzheimer's disease).
|
|
134
|
+
- Dynamic PET requires frame timing information from DICOM headers or sidecar JSON.
|
|
135
|
+
- Static PET (single late frame) is sufficient for most clinical SUVR analyses.
|
|
136
|
+
- This skill is for research workflows; not for clinical decision-making.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## When to Call This Skill
|
|
141
|
+
|
|
142
|
+
- After `smri-skill` when T1w structural preprocessing is complete and PET data needs processing.
|
|
143
|
+
- When the user needs SUVR computation from amyloid (PiB), metabolism (FDG), or tau PET data.
|
|
144
|
+
- When PET-to-T1w coregistration or normalization to MNI space is required.
|
|
145
|
+
- When partial volume correction is requested for ROI-based PET quantification.
|
|
146
|
+
- When dataset skills (e.g., `aibl-skill`, `adni-skill`) delegate PET processing.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Complementary / Related Skills
|
|
151
|
+
|
|
152
|
+
- `smri-skill` → T1w structural preprocessing (brain extraction, parcellation)
|
|
153
|
+
- `fmri-skill` → if PET is used alongside fMRI for multimodal analysis
|
|
154
|
+
- `fsl-tool` → FLIRT (coregistration), FNIRT (normalization), PETPVC (partial volume correction)
|
|
155
|
+
- `freesurfer-tool` → cortical/subcortical parcellation for ROI definition
|
|
156
|
+
- `nibabel-skill` → NIfTI I/O for mask manipulation
|
|
157
|
+
- `brain-visualization` → PET overlay visualization
|
|
158
|
+
- `aibl-skill` → AIBL dataset (PiB, FDG, tau PET)
|
|
159
|
+
- `adni-skill` → ADNI dataset (PET data available)
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Reference
|
|
164
|
+
- Klunk et al. (2004): PiB amyloid imaging
|
|
165
|
+
- Landau et al. (2012): Amyloid imaging with PiB and florbetapir
|
|
166
|
+
- Baker et al. (2017): AV-1451 tau PET imaging
|
|
167
|
+
- BIDS PET extension: https://bids-specification.readthedocs.io/en/stable/04-modality-specific-files/09-positron-emission-tomography.html
|
|
168
|
+
- FSL: https://fsl.fmrib.ox.ac.uk/fsl/
|
|
169
|
+
- FreeSurfer: https://surfer.nmr.mgh.harvard.edu/
|
|
170
|
+
|
|
171
|
+
Created At: 2026-05-06 12:19 HKT
|
|
172
|
+
Last Updated At: 2026-05-06 12:19 HKT
|
|
173
|
+
Author: chengwang96
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Compute SUVR (Standardized Uptake Value Ratio) from a PET image and ROI masks.
|
|
3
|
+
|
|
4
|
+
Supports static PET (single frame) and mean-of-frames from dynamic PET.
|
|
5
|
+
Outputs per-region SUVR values as CSV and optional SUVR map as NIfTI.
|
|
6
|
+
"""
|
|
7
|
+
import argparse
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Dict, List, Optional
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
import numpy as np
|
|
14
|
+
except ImportError:
|
|
15
|
+
print("Error: numpy is required.", file=sys.stderr)
|
|
16
|
+
sys.exit(1)
|
|
17
|
+
|
|
18
|
+
try:
|
|
19
|
+
import nibabel as nib
|
|
20
|
+
except ImportError:
|
|
21
|
+
print("Error: nibabel is required.", file=sys.stderr)
|
|
22
|
+
sys.exit(1)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def load_mask(mask_path: Path) -> tuple:
|
|
26
|
+
"""Load a NIfTI mask and return (data array, affine)."""
|
|
27
|
+
img = nib.load(str(mask_path))
|
|
28
|
+
data = img.get_fdata()
|
|
29
|
+
return data, img.affine, img.header
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def extract_mean_signal(pet_data: np.ndarray, mask_data: np.ndarray) -> float:
|
|
33
|
+
"""Extract mean PET signal within a binary mask."""
|
|
34
|
+
mask_bool = mask_data > 0
|
|
35
|
+
if not np.any(mask_bool):
|
|
36
|
+
return float("nan")
|
|
37
|
+
return float(np.mean(pet_data[mask_bool]))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def compute_suvr_map(pet_data: np.ndarray, target_mask: np.ndarray, ref_mean: float) -> np.ndarray:
|
|
41
|
+
"""Compute voxelwise SUVR map within target mask."""
|
|
42
|
+
suvr = np.zeros_like(pet_data)
|
|
43
|
+
if ref_mean > 0:
|
|
44
|
+
target_bool = target_mask > 0
|
|
45
|
+
suvr[target_bool] = pet_data[target_bool] / ref_mean
|
|
46
|
+
return suvr
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def load_multi_frame_pet(pet_path: Path, frame_index: Optional[int] = None) -> np.ndarray:
|
|
50
|
+
"""Load PET image, optionally selecting a specific frame from 4D data."""
|
|
51
|
+
img = nib.load(str(pet_path))
|
|
52
|
+
data = img.get_fdata()
|
|
53
|
+
|
|
54
|
+
if data.ndim == 4:
|
|
55
|
+
if frame_index is not None:
|
|
56
|
+
if frame_index >= data.shape[3]:
|
|
57
|
+
print(f"[WARN] Frame index {frame_index} exceeds available frames {data.shape[3]}, using last frame")
|
|
58
|
+
frame_index = data.shape[3] - 1
|
|
59
|
+
data = data[:, :, :, frame_index]
|
|
60
|
+
else:
|
|
61
|
+
# Use mean across all frames
|
|
62
|
+
print(f" 4D PET detected ({data.shape[3]} frames), computing mean across frames")
|
|
63
|
+
data = np.mean(data, axis=3)
|
|
64
|
+
|
|
65
|
+
return data
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def main() -> int:
|
|
69
|
+
parser = argparse.ArgumentParser(
|
|
70
|
+
description="Compute SUVR from a PET image and ROI/reference masks."
|
|
71
|
+
)
|
|
72
|
+
parser.add_argument(
|
|
73
|
+
"--pet",
|
|
74
|
+
required=True,
|
|
75
|
+
help="Path to PET NIfTI file (3D static or 4D dynamic)",
|
|
76
|
+
)
|
|
77
|
+
parser.add_argument(
|
|
78
|
+
"--ref-mask",
|
|
79
|
+
required=True,
|
|
80
|
+
help="Path to reference region binary mask (e.g., cerebellar cortex)",
|
|
81
|
+
)
|
|
82
|
+
parser.add_argument(
|
|
83
|
+
"--target-mask",
|
|
84
|
+
help="Path to target ROI binary mask (single region). If omitted, only reference mean is reported.",
|
|
85
|
+
)
|
|
86
|
+
parser.add_argument(
|
|
87
|
+
"--roi-masks",
|
|
88
|
+
help="Comma-separated list of additional ROI masks for multi-region SUVR computation",
|
|
89
|
+
)
|
|
90
|
+
parser.add_argument(
|
|
91
|
+
"--roi-names",
|
|
92
|
+
help="Comma-separated ROI names (must match --roi-masks order)",
|
|
93
|
+
)
|
|
94
|
+
parser.add_argument(
|
|
95
|
+
"--frame",
|
|
96
|
+
type=int,
|
|
97
|
+
default=None,
|
|
98
|
+
help="Frame index for 4D PET (default: mean across all frames)",
|
|
99
|
+
)
|
|
100
|
+
parser.add_argument(
|
|
101
|
+
"--output",
|
|
102
|
+
required=True,
|
|
103
|
+
help="Output path for SUVR values CSV",
|
|
104
|
+
)
|
|
105
|
+
parser.add_argument(
|
|
106
|
+
"--suvr-map-output",
|
|
107
|
+
help="Optional: output path for voxelwise SUVR map NIfTI (requires --target-mask)",
|
|
108
|
+
)
|
|
109
|
+
args = parser.parse_args()
|
|
110
|
+
|
|
111
|
+
pet_path = Path(args.pet).resolve()
|
|
112
|
+
ref_path = Path(args.ref_mask).resolve()
|
|
113
|
+
|
|
114
|
+
if not pet_path.exists():
|
|
115
|
+
print(f"PET file not found: {pet_path}", file=sys.stderr)
|
|
116
|
+
return 1
|
|
117
|
+
if not ref_path.exists():
|
|
118
|
+
print(f"Reference mask not found: {ref_path}", file=sys.stderr)
|
|
119
|
+
return 1
|
|
120
|
+
|
|
121
|
+
# Load PET
|
|
122
|
+
print(f"Loading PET: {pet_path}")
|
|
123
|
+
pet_data = load_multi_frame_pet(pet_path, args.frame)
|
|
124
|
+
print(f" PET shape: {pet_data.shape}, range: [{pet_data.min():.2f}, {pet_data.max():.2f}]")
|
|
125
|
+
|
|
126
|
+
# Load reference region
|
|
127
|
+
print(f"Loading reference mask: {ref_path}")
|
|
128
|
+
ref_data, ref_affine, ref_header = load_mask(ref_path)
|
|
129
|
+
ref_mean = extract_mean_signal(pet_data, ref_data)
|
|
130
|
+
print(f" Reference region mean: {ref_mean:.4f}")
|
|
131
|
+
|
|
132
|
+
if np.isnan(ref_mean) or ref_mean <= 0:
|
|
133
|
+
print("[ERROR] Reference region mean is NaN or <= 0. Check mask alignment.", file=sys.stderr)
|
|
134
|
+
return 1
|
|
135
|
+
|
|
136
|
+
# Collect results
|
|
137
|
+
results = []
|
|
138
|
+
|
|
139
|
+
# Single target mask
|
|
140
|
+
if args.target_mask:
|
|
141
|
+
target_path = Path(args.target_mask).resolve()
|
|
142
|
+
if not target_path.exists():
|
|
143
|
+
print(f"Target mask not found: {target_path}", file=sys.stderr)
|
|
144
|
+
return 1
|
|
145
|
+
target_data, _, _ = load_mask(target_path)
|
|
146
|
+
target_mean = extract_mean_signal(pet_data, target_data)
|
|
147
|
+
suvr = target_mean / ref_mean if ref_mean > 0 else float("nan")
|
|
148
|
+
results.append({"roi": "target", "mean_signal": target_mean, "ref_mean": ref_mean, "suvr": suvr})
|
|
149
|
+
print(f" Target mean: {target_mean:.4f}, SUVR: {suvr:.4f}")
|
|
150
|
+
|
|
151
|
+
# Optional SUVR map
|
|
152
|
+
if args.suvr_map_output:
|
|
153
|
+
suvr_map = compute_suvr_map(pet_data, target_data, ref_mean)
|
|
154
|
+
out_img = nib.Nifti1Image(suvr_map, ref_affine, ref_header)
|
|
155
|
+
suvr_map_path = Path(args.suvr_map_output).resolve()
|
|
156
|
+
suvr_map_path.parent.mkdir(parents=True, exist_ok=True)
|
|
157
|
+
nib.save(out_img, str(suvr_map_path))
|
|
158
|
+
print(f" SUVR map saved: {suvr_map_path}")
|
|
159
|
+
|
|
160
|
+
# Multiple ROI masks
|
|
161
|
+
if args.roi_masks:
|
|
162
|
+
roi_paths = [Path(p.strip()).resolve() for p in args.roi_masks.split(",")]
|
|
163
|
+
roi_names = None
|
|
164
|
+
if args.roi_names:
|
|
165
|
+
roi_names = [n.strip() for n in args.roi_names.split(",")]
|
|
166
|
+
if roi_names and len(roi_names) != len(roi_paths):
|
|
167
|
+
print("[WARN] --roi-names count does not match --roi-masks count, using file stems", file=sys.stderr)
|
|
168
|
+
roi_names = None
|
|
169
|
+
|
|
170
|
+
for i, roi_path in enumerate(roi_paths):
|
|
171
|
+
if not roi_path.exists():
|
|
172
|
+
print(f"[WARN] ROI mask not found: {roi_path}", file=sys.stderr)
|
|
173
|
+
continue
|
|
174
|
+
roi_data, _, _ = load_mask(roi_path)
|
|
175
|
+
roi_mean = extract_mean_signal(pet_data, roi_data)
|
|
176
|
+
suvr = roi_mean / ref_mean if ref_mean > 0 else float("nan")
|
|
177
|
+
name = roi_names[i] if roi_names else roi_path.stem
|
|
178
|
+
results.append({"roi": name, "mean_signal": roi_mean, "ref_mean": ref_mean, "suvr": suvr})
|
|
179
|
+
|
|
180
|
+
if not results:
|
|
181
|
+
print("[WARN] No target or ROI masks provided. Only reference mean is reported.")
|
|
182
|
+
results.append({"roi": "reference_only", "mean_signal": float("nan"), "ref_mean": ref_mean, "suvr": float("nan")})
|
|
183
|
+
|
|
184
|
+
# Write CSV
|
|
185
|
+
import csv
|
|
186
|
+
|
|
187
|
+
output_path = Path(args.output).resolve()
|
|
188
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
189
|
+
with open(output_path, "w", newline="", encoding="utf-8") as f:
|
|
190
|
+
writer = csv.DictWriter(f, fieldnames=["roi", "mean_signal", "ref_mean", "suvr"])
|
|
191
|
+
writer.writeheader()
|
|
192
|
+
writer.writerows(results)
|
|
193
|
+
|
|
194
|
+
print(f"\nSUVR Summary ({len(results)} ROI(s)) -> {output_path}")
|
|
195
|
+
for r in results:
|
|
196
|
+
print(f" {r['roi']}: SUVR = {r['suvr']:.4f}")
|
|
197
|
+
|
|
198
|
+
return 0
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
if __name__ == "__main__":
|
|
202
|
+
sys.exit(main())
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pnc-skill
|
|
3
|
+
description: "Use this skill whenever the user wants an end-to-end workflow for the Philadelphia Neurodevelopmental Cohort (PNC) dataset, including BIDS validation, multimodal processing of sMRI, rs-fMRI, task-fMRI, and dMRI, phenotype extraction, and QC integration. Triggers include: 'PNC', 'Philadelphia Neurodevelopmental Cohort', 'process PNC data', 'PNC fMRI', or any request to run the PNC multimodal pipeline."
|
|
4
|
+
license: MIT License (NeuroClaw custom skill - freely modifiable within the project)
|
|
5
|
+
layer: subagent
|
|
6
|
+
skill_type: dataset
|
|
7
|
+
dependencies:
|
|
8
|
+
- smri-skill
|
|
9
|
+
- fmri-skill
|
|
10
|
+
- dwi-skill
|
|
11
|
+
- bids-organizer
|
|
12
|
+
- claw-shell
|
|
13
|
+
complementary_skills:
|
|
14
|
+
- brain-visualization
|
|
15
|
+
---
|
|
16
|
+
# PNC Skill (Dataset-Orchestration Layer)
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
`pnc-skill` is the NeuroClaw orchestration skill for the **Philadelphia Neurodevelopmental Cohort (PNC)** dataset, a large-scale collaborative study between the University of Pennsylvania and the Children's Hospital of Philadelphia.
|
|
21
|
+
|
|
22
|
+
It strictly follows the NeuroClaw hierarchical design principles:
|
|
23
|
+
- This skill **only describes WHAT needs to be done** and **which tool skill to delegate to**.
|
|
24
|
+
- It contains **no implementation code or concrete commands**.
|
|
25
|
+
- All concrete execution is delegated to existing base/tool skills via `claw-shell`.
|
|
26
|
+
- Companion scripts in `scripts/` provide reference implementations for BIDS validation, phenotype extraction, and QC.
|
|
27
|
+
|
|
28
|
+
**Core workflow (never bypassed):**
|
|
29
|
+
1. Identify input PNC data and target modalities.
|
|
30
|
+
2. Generate a **numbered execution plan** clearly stating WHAT needs to be done and which tool skill will handle each step.
|
|
31
|
+
3. Present the full plan, estimated runtime, resource requirements, and risks to the user and wait for explicit confirmation ("YES" / "execute" / "proceed").
|
|
32
|
+
4. On confirmation, delegate every step to the appropriate skill via `claw-shell`.
|
|
33
|
+
5. After execution, save all outputs in a clean directory structure (`pnc_output/`).
|
|
34
|
+
|
|
35
|
+
**Research use only.**
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Quick Reference
|
|
40
|
+
|
|
41
|
+
| Task | What needs to be done | Delegate to | Expected output |
|
|
42
|
+
|---|---|---|---|
|
|
43
|
+
| BIDS validation | Validate PNC BIDS structure | `scripts/validate_pnc.py` | Validation report |
|
|
44
|
+
| sMRI processing | Brain extraction, tissue segmentation | `smri-skill` | `smri_output/` derivatives |
|
|
45
|
+
| rs-fMRI processing | Preprocessing, denoising, connectivity | `fmri-skill` | `fmri_output/` connectivity |
|
|
46
|
+
| task-fMRI processing | Go/No-Go, emotion, memory task GLM | `fmri-skill` | `fmri_output/` task results |
|
|
47
|
+
| dMRI processing | Diffusion preprocessing, tensor metrics | `dwi-skill` | `dwi_output/` metrics |
|
|
48
|
+
| Phenotype extraction | Cognitive, psychiatric, demographic | `scripts/extract_pnc_phenotype.py` | Merged phenotype CSV |
|
|
49
|
+
| QC summary | Per-subject quality control | `scripts/pnc_qc_summary.py` | QC summary + exclusion list |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Dataset Characteristics
|
|
54
|
+
|
|
55
|
+
- **Cohort**: ~9,000+ youth aged 8-21 years
|
|
56
|
+
- **Scanner**: 3T Siemens TIM Trio
|
|
57
|
+
- **Modalities**: T1w sMRI, rs-fMRI, task-fMRI, dMRI/DTI
|
|
58
|
+
- **Task paradigms**: Go/No-Go, Fraternal Twins, Penn Line Orientation, Penn Word Memory
|
|
59
|
+
- **Clinical**: Psychiatric assessment, cognitive battery (Penn CNB)
|
|
60
|
+
- **Access**: NIMH Data Archive (NDA), OpenNeuro ds000030 (BIDS subset)
|
|
61
|
+
- **Format**: BIDS-compliant (community conversion)
|
|
62
|
+
- **Reference**: Satterthwaite et al. (2014), NeuroImage
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Supported Modalities
|
|
67
|
+
|
|
68
|
+
| Modality | Description | Tasks/Conditions |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| T1w | High-resolution structural MRI | 1mm isotropic |
|
|
71
|
+
| rs-fMRI | Resting-state functional MRI | Eyes open |
|
|
72
|
+
| task-fMRI | Task-based functional MRI | Go/No-Go, Emotion, Line Orientation, Word Memory |
|
|
73
|
+
| dMRI | Diffusion-weighted imaging | DTI, white matter tractography |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## PNC Task Paradigms
|
|
78
|
+
|
|
79
|
+
| Task | Description | Cognitive Domain |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| Go/No-Go | Response inhibition / impulse control | Executive function |
|
|
82
|
+
| Fraternal Twins | Emotion recognition | Social cognition |
|
|
83
|
+
| Penn Line Orientation | Spatial processing | Visuospatial |
|
|
84
|
+
| Penn Word Memory | Memory encoding/retrieval | Episodic memory |
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## BIDS Preparation
|
|
89
|
+
|
|
90
|
+
### Script: `scripts/validate_pnc.py`
|
|
91
|
+
|
|
92
|
+
Validates PNC BIDS structure and generates a compliance report.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
python skills/pnc-skill/scripts/validate_pnc.py \
|
|
96
|
+
--input /path/to/PNC/bids \
|
|
97
|
+
--output /path/to/pnc_output/qc/bids_validation.csv
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Features:
|
|
101
|
+
- BIDS directory structure validation
|
|
102
|
+
- Modality completeness check (T1w, rs-fMRI, task-fMRI, dMRI)
|
|
103
|
+
- Age range verification (8-21 years)
|
|
104
|
+
- Task paradigm presence check
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Core Workflow (Never Bypassed)
|
|
109
|
+
|
|
110
|
+
1. Identify user target: full PNC processing, imaging subset, phenotype extraction, or BIDS validation only.
|
|
111
|
+
2. Generate a numbered plan with tools, outputs, runtime, storage, and risks.
|
|
112
|
+
3. Wait for explicit confirmation (`YES` / `execute` / `proceed`).
|
|
113
|
+
4. On confirmation, run BIDS validation using `scripts/validate_pnc.py`.
|
|
114
|
+
5. Delegate to `smri-skill` for structural MRI processing.
|
|
115
|
+
6. Delegate to `fmri-skill` for rs-fMRI and task-fMRI processing.
|
|
116
|
+
7. Delegate to `dwi-skill` for dMRI processing.
|
|
117
|
+
8. If phenotype extraction is requested, run `scripts/extract_pnc_phenotype.py`.
|
|
118
|
+
9. If QC summary is requested, run `scripts/pnc_qc_summary.py`.
|
|
119
|
+
10. Save outputs into `pnc_output/`.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Modality Processing Delegation
|
|
124
|
+
|
|
125
|
+
| Modality | Delegated skill | Typical tasks | Main outputs |
|
|
126
|
+
|---|---|---|---|
|
|
127
|
+
| sMRI (T1w) | `smri-skill` | brain extraction, tissue segmentation | `smri_output/` derivatives |
|
|
128
|
+
| rs-fMRI | `fmri-skill` | preprocessing, denoising, connectivity | `fmri_output/` connectivity |
|
|
129
|
+
| task-fMRI | `fmri-skill` | task GLM, activation analysis | `fmri_output/` task results |
|
|
130
|
+
| dMRI | `dwi-skill` | diffusion preprocessing, tensor metrics | `dwi_output/` metrics |
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Standard Output Layout
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
pnc_output/
|
|
138
|
+
├── bids/ # BIDS-staged data (or validation report)
|
|
139
|
+
├── smri/ # Structural MRI derivatives
|
|
140
|
+
├── fmri/ # Functional MRI derivatives (rs + task)
|
|
141
|
+
├── dwi/ # Diffusion MRI derivatives
|
|
142
|
+
├── phenotype/ # Merged phenotype tables (cognitive, psychiatric)
|
|
143
|
+
├── qc/ # QC summaries and exclusion lists
|
|
144
|
+
└── logs/ # Processing logs
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Benchmark Adapter Guidance
|
|
150
|
+
|
|
151
|
+
For benchmark-style prompts, do not force the full orchestration when the task only asks for local PNC data validation.
|
|
152
|
+
|
|
153
|
+
- If the task starts from PNC data already present on disk and only asks for BIDS validation:
|
|
154
|
+
- Skip the download stage
|
|
155
|
+
- Default to the narrow path `local PNC discovery -> BIDS validation -> report`
|
|
156
|
+
- In benchmark mode, do not require explicit confirmation before presenting the validation solution.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Safety and Execution Policy
|
|
161
|
+
- No execution before explicit plan confirmation.
|
|
162
|
+
- All execution must be routed via `claw-shell`.
|
|
163
|
+
- Missing dependencies must be resolved by `dependency-planner` before running.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Important Notes and Limitations
|
|
168
|
+
- PNC is a developmental cohort; analyses should account for age effects (8-21 years).
|
|
169
|
+
- Pediatric data may require adjusted preprocessing parameters (e.g., higher motion thresholds).
|
|
170
|
+
- Penn CNB (Computerized Neurocognitive Battery) provides rich cognitive phenotyping.
|
|
171
|
+
- Psychiatric assessment includes DSM-based diagnoses.
|
|
172
|
+
- Large sample size enables well-powered developmental analyses.
|
|
173
|
+
- `pnc-skill` is orchestration-only; detailed preprocessing logic remains in modality skills.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## When to Call This Skill
|
|
178
|
+
- User asks for end-to-end PNC workflow.
|
|
179
|
+
- User asks to process PNC neuroimaging data.
|
|
180
|
+
- User needs BIDS validation for PNC data.
|
|
181
|
+
- User asks to extract PNC phenotype data (cognitive, psychiatric, demographic).
|
|
182
|
+
- User asks for developmental neuroimaging analysis.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Complementary / Related Skills
|
|
187
|
+
- `smri-skill` → structural MRI preprocessing
|
|
188
|
+
- `fmri-skill` → functional MRI preprocessing and analysis
|
|
189
|
+
- `dwi-skill` → diffusion MRI preprocessing
|
|
190
|
+
- `bids-organizer` → BIDS validation and organization
|
|
191
|
+
- `brain-visualization` → visualization of derivatives
|
|
192
|
+
- `dependency-planner` → dependency resolution
|
|
193
|
+
- `conda-env-manager` → environment management
|
|
194
|
+
- `claw-shell` → command execution
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Reference
|
|
199
|
+
- PNC: https://www.med.upenn.edu/bbl/
|
|
200
|
+
- Satterthwaite et al. (2014): Neuroimaging of the Philadelphia Neurodevelopmental Cohort. NeuroImage.
|
|
201
|
+
- OpenNeuro ds000030
|
|
202
|
+
- NIMH Data Archive: https://nda.nih.gov/
|
|
203
|
+
|
|
204
|
+
Created At: 2026-05-06 13:55 HKT
|
|
205
|
+
Last Updated At: 2026-05-06 13:55 HKT
|
|
206
|
+
Author: chengwang96
|