@brainpilot/skills 0.0.6 → 0.0.8
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,286 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: freesurfer-tool
|
|
3
|
+
description: "Use this skill whenever the user wants to process structural MRI data (T1w, T2w, FLAIR, etc.) with FreeSurfer, especially for cortical/subcortical segmentation, surface reconstruction, parcellation, cortical thickness, volume statistics, or full recon-all pipeline. Triggers include: 'freesurfer', 'recon-all', 'segment MRI', 'FreeSurfer processing', 'cortical segmentation', 'subcortical segmentation', 'run recon-all', 'freesurfer T1', 'process brain MRI with freesurfer', 'aseg aparc', or any request to run FreeSurfer on NIfTI MRI data for research analysis."
|
|
4
|
+
license: MIT License (NeuroClaw custom skill – freely modifiable within the project)
|
|
5
|
+
layer: base
|
|
6
|
+
skill_type: tool
|
|
7
|
+
dependencies:
|
|
8
|
+
- claw-shell
|
|
9
|
+
---
|
|
10
|
+
# FreeSurfer Tool
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
FreeSurfer is the gold-standard open-source suite for automated reconstruction of the brain’s cortical surface from structural MRI, including skull-stripping, intensity normalization, Talairach registration, cortical parcellation (Desikan-Killiany / Destrieux atlases), subcortical segmentation (`aseg`), surface mesh generation, cortical thickness estimation, and statistics.
|
|
15
|
+
|
|
16
|
+
This skill serves as the **NeuroClaw interface-layer wrapper** for FreeSurfer and strictly follows the hierarchical design:
|
|
17
|
+
|
|
18
|
+
1. Check whether FreeSurfer is installed (`recon-all --version`, `$FREESURFER_HOME` environment variable).
|
|
19
|
+
2. If not found → immediately invoke `dependency-planner` to plan and (after user confirmation) install the latest stable FreeSurfer release + license setup.
|
|
20
|
+
3. Collect and confirm: input NIfTI file(s), subject ID, output `SUBJECTS_DIR`, desired stages/flags (e.g. `-all`, `-autorecon1..3`, `-T2`, `-FLAIR`, `-parallel`).
|
|
21
|
+
4. Generate a clear, numbered execution plan including exact shell commands.
|
|
22
|
+
5. Present plan, estimated runtime, disk/RAM requirements, and risks → wait for explicit user confirmation (“YES” / “execute” / “proceed”).
|
|
23
|
+
6. On confirmation → delegate **all** shell command execution to the `claw-shell` skill (environment setup, `recon-all` invocation, logging, progress monitoring).
|
|
24
|
+
7. Report completion status, log location, output directory, and next steps.
|
|
25
|
+
|
|
26
|
+
**Key design principle (2026 update)**: No direct `subprocess.run()` calls for long-running FreeSurfer commands. All shell execution is routed through `claw-shell` for centralized logging, timeout handling, real-time output streaming, and interruption safety.
|
|
27
|
+
|
|
28
|
+
**Research use only.**
|
|
29
|
+
|
|
30
|
+
## Quick Reference (Common Use Cases)
|
|
31
|
+
|
|
32
|
+
| Task | Recommended `recon-all` flags / approach |
|
|
33
|
+
|-----------------------------------|-------------------------------------------------------------------|
|
|
34
|
+
| Full pipeline (most common) | `-all` |
|
|
35
|
+
| Fast subcortical + basic surfaces | `-autorecon1 -autorecon2 -autorecon3` |
|
|
36
|
+
| Cortical surfaces & parcellation | `-autorecon2 -autorecon3` (after `autorecon1` completed) |
|
|
37
|
+
| Improve pial surface with T2 | `-T2 T2w.nii.gz` |
|
|
38
|
+
| Use FLAIR for better segmentation | `-FLAIR FLAIR.nii.gz` |
|
|
39
|
+
| Enable multi-core acceleration | `-parallel -openmp 8` (or match available cores) |
|
|
40
|
+
| Resume interrupted run | Omit `-i` and `-all`, specify stages only |
|
|
41
|
+
| Generate statistics only | `-stats` |
|
|
42
|
+
|
|
43
|
+
## Installation Check & Setup
|
|
44
|
+
|
|
45
|
+
Installation is **fully delegated** to `dependency-planner`.
|
|
46
|
+
|
|
47
|
+
When FreeSurfer is not detected:
|
|
48
|
+
- Call `dependency-planner` with request:
|
|
49
|
+
"Install latest stable FreeSurfer (8.1.0 or newer) on current OS, including license.txt setup"
|
|
50
|
+
- After user confirms the installation plan → `dependency-planner` handles download, package install, license placement
|
|
51
|
+
- This skill then verifies `$FREESURFER_HOME` and `recon-all` availability
|
|
52
|
+
|
|
53
|
+
**Prerequisites**:
|
|
54
|
+
- `dependency-planner` (mandatory for installation)
|
|
55
|
+
- `claw-shell` (mandatory for command execution)
|
|
56
|
+
- Valid FreeSurfer academic license (free registration required)
|
|
57
|
+
- ≥16 GB RAM recommended (32 GB+ strongly preferred for `-all`)
|
|
58
|
+
|
|
59
|
+
## Agent Reference Rule
|
|
60
|
+
|
|
61
|
+
When the agent needs FreeSurfer processing implementation code, it should first consult the curated snippet in `skills/freesurfer-tool/scripts/` instead of copying from the embedded wrapper below.
|
|
62
|
+
|
|
63
|
+
Reference snippet available:
|
|
64
|
+
- `scripts/freesurfer_processor.py` -> recon-all pipeline orchestration: environment setup, stage selection, parallel flags, claw-shell delegation
|
|
65
|
+
|
|
66
|
+
Example:
|
|
67
|
+
```bash
|
|
68
|
+
python skills/freesurfer-tool/scripts/freesurfer_processor.py \
|
|
69
|
+
--input-mri sub-001_T1w.nii.gz \
|
|
70
|
+
--subjid sub-001 \
|
|
71
|
+
--subjects-dir /data/freesurfer_output \
|
|
72
|
+
--stages all \
|
|
73
|
+
--extra-flags "-T2 T2.nii.gz -parallel -openmp 12"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## NeuroClaw recommended wrapper script
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
# freesurfer_processor.py
|
|
80
|
+
import argparse
|
|
81
|
+
import os
|
|
82
|
+
import sys
|
|
83
|
+
from pathlib import Path
|
|
84
|
+
from datetime import datetime
|
|
85
|
+
|
|
86
|
+
# In real NeuroClaw: these would be agent tool calls
|
|
87
|
+
def check_freesurfer_installed():
|
|
88
|
+
# Simulate check via claw-shell
|
|
89
|
+
# Real impl: call claw-shell with "recon-all --version"
|
|
90
|
+
return False, "FreeSurfer not found (simulation mode)"
|
|
91
|
+
|
|
92
|
+
def delegate_to_claw_shell(commands, purpose, log_tag):
|
|
93
|
+
print(f"[Delegating to claw-shell] Purpose: {purpose}")
|
|
94
|
+
print(f"Log tag: {log_tag}")
|
|
95
|
+
print("Commands to execute:")
|
|
96
|
+
for cmd in commands:
|
|
97
|
+
print(" " + cmd)
|
|
98
|
+
# Real implementation: agent/tool call to claw-shell
|
|
99
|
+
# e.g. tool_call("claw-shell", commands=commands, log_tag=log_tag, capture_output=True, timeout="24h")
|
|
100
|
+
|
|
101
|
+
def main():
|
|
102
|
+
parser = argparse.ArgumentParser(description="NeuroClaw FreeSurfer Processor")
|
|
103
|
+
parser.add_argument("--input-mri", required=True, help="Path to T1w (or other) NIfTI file")
|
|
104
|
+
parser.add_argument("--subjid", required=True, help="Subject ID (e.g. sub-001)")
|
|
105
|
+
parser.add_argument("--subjects-dir", required=True, help="Output SUBJECTS_DIR path")
|
|
106
|
+
parser.add_argument("--stages", default="all", help="all / autorecon1 / autorecon2 / autorecon3 / stats / comma-separated stages")
|
|
107
|
+
parser.add_argument("--extra-flags", default="", help="Additional flags, e.g. '-T2 T2.nii.gz -FLAIR FLAIR.nii.gz -parallel -openmp 12'")
|
|
108
|
+
parser.add_argument("--plan-only", action="store_true", help="Show plan without execution")
|
|
109
|
+
args = parser.parse_args()
|
|
110
|
+
|
|
111
|
+
installed, version_info = check_freesurfer_installed()
|
|
112
|
+
if not installed:
|
|
113
|
+
print("FreeSurfer not detected on system.")
|
|
114
|
+
print("→ Invoking dependency-planner to install FreeSurfer and set up license.")
|
|
115
|
+
print("Please complete the dependency-planner confirmation flow first.")
|
|
116
|
+
sys.exit(1)
|
|
117
|
+
|
|
118
|
+
print("FreeSurfer detected:", version_info)
|
|
119
|
+
|
|
120
|
+
subjects_dir = Path(args.subjects_dir).resolve()
|
|
121
|
+
print(f"\nProcessing plan for subject: {args.subjid}")
|
|
122
|
+
print(f"Input MRI : {args.input_mri}")
|
|
123
|
+
print(f"Output dir : {subjects_dir}")
|
|
124
|
+
print(f"Stages : {args.stages}")
|
|
125
|
+
if args.extra_flags:
|
|
126
|
+
print(f"Extra flags : {args.extra_flags}")
|
|
127
|
+
|
|
128
|
+
# Build shell commands
|
|
129
|
+
commands = []
|
|
130
|
+
# 1. Set environment
|
|
131
|
+
fs_home = "/usr/local/freesurfer" # typical default; adjust if needed
|
|
132
|
+
commands.append(f"export FREESURFER_HOME={fs_home}")
|
|
133
|
+
commands.append(f"source $FREESURFER_HOME/SetUpFreeSurfer.sh")
|
|
134
|
+
|
|
135
|
+
# 2. recon-all command
|
|
136
|
+
recon_cmd = [
|
|
137
|
+
"recon-all",
|
|
138
|
+
"-subjid", args.subjid,
|
|
139
|
+
"-i", args.input_mri
|
|
140
|
+
]
|
|
141
|
+
|
|
142
|
+
if args.stages == "all":
|
|
143
|
+
recon_cmd.append("-all")
|
|
144
|
+
elif "," in args.stages:
|
|
145
|
+
for stage in args.stages.split(","):
|
|
146
|
+
stage = stage.strip()
|
|
147
|
+
if stage:
|
|
148
|
+
recon_cmd.append(f"-{stage}")
|
|
149
|
+
else:
|
|
150
|
+
recon_cmd.append(f"-{args.stages}")
|
|
151
|
+
|
|
152
|
+
if args.extra_flags:
|
|
153
|
+
recon_cmd.extend(args.extra_flags.split())
|
|
154
|
+
|
|
155
|
+
# Recommend parallel execution if not disabled
|
|
156
|
+
if "-parallel" not in args.extra_flags and "-openmp" not in args.extra_flags:
|
|
157
|
+
recon_cmd.extend(["-parallel", "-openmp", "8"])
|
|
158
|
+
|
|
159
|
+
commands.append(" ".join(recon_cmd))
|
|
160
|
+
|
|
161
|
+
log_tag = f"freesurfer_{args.subjid}_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
|
|
162
|
+
|
|
163
|
+
print("\nExecution plan (to be run via claw-shell):")
|
|
164
|
+
for i, cmd in enumerate(commands, 1):
|
|
165
|
+
print(f"Step {i}: {cmd}")
|
|
166
|
+
|
|
167
|
+
print(f"\nEstimated runtime: 4–24 hours (full -all), 1–4 hours (segmentation stages only)")
|
|
168
|
+
print(f"Disk usage: ~2–5 GB per subject")
|
|
169
|
+
print(f"Logs will be captured by claw-shell under tag: {log_tag}")
|
|
170
|
+
|
|
171
|
+
if args.plan_only:
|
|
172
|
+
print("\nPlan-only mode — no execution performed.")
|
|
173
|
+
return
|
|
174
|
+
|
|
175
|
+
confirm = input("\nExecute now? Type YES to proceed: ").strip().upper()
|
|
176
|
+
if confirm != "YES":
|
|
177
|
+
print("Aborted by user.")
|
|
178
|
+
return
|
|
179
|
+
|
|
180
|
+
print("\nDelegating pipeline execution to claw-shell skill...")
|
|
181
|
+
delegate_to_claw_shell(
|
|
182
|
+
commands=commands,
|
|
183
|
+
purpose=f"FreeSurfer processing for subject {args.subjid} ({args.stages})",
|
|
184
|
+
log_tag=log_tag
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
print(f"→ Execution handed over to claw-shell.")
|
|
188
|
+
print(f"→ Check logs using tag: {log_tag}")
|
|
189
|
+
print(f"→ Final outputs will be in: {subjects_dir / args.subjid}")
|
|
190
|
+
|
|
191
|
+
if __name__ == "__main__":
|
|
192
|
+
main()
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
## Important Notes & Limitations
|
|
196
|
+
|
|
197
|
+
- All actual shell command execution is delegated to `claw-shell` (no direct `subprocess` calls for `recon-all`).
|
|
198
|
+
- Full `-all` pipeline is very long-running → `claw-shell` should support background/detached mode or long timeouts.
|
|
199
|
+
- Input must be NIfTI (`.nii` or `.nii.gz`); convert DICOM first using `dcm2nii` skill.
|
|
200
|
+
- Output follows standard FreeSurfer structure: `$SUBJECTS_DIR/<subjid>`.
|
|
201
|
+
- Windows users: strongly recommended to use WSL2 (installation handled by `dependency-planner`).
|
|
202
|
+
- License check: skill assumes `license.txt` is already in place after `dependency-planner` run.
|
|
203
|
+
|
|
204
|
+
## When to Call This Skill
|
|
205
|
+
|
|
206
|
+
- User provides structural MRI (NIfTI) and wants automated FreeSurfer processing.
|
|
207
|
+
- Any mention of `recon-all`, `aseg`, `aparc`, cortical thickness, surface reconstruction, or FreeSurfer statistics.
|
|
208
|
+
|
|
209
|
+
## Complementary / Related Skills
|
|
210
|
+
|
|
211
|
+
- `dependency-planner` → install FreeSurfer + license
|
|
212
|
+
- `claw-shell` → safe execution of long-running shell commands
|
|
213
|
+
- `conda-env-manager` → manage Python environment for post-processing FreeSurfer outputs
|
|
214
|
+
|
|
215
|
+
## Reference
|
|
216
|
+
|
|
217
|
+
Official site: https://surfer.nmr.mgh.harvard.edu
|
|
218
|
+
Latest stable release (as of 2026): FreeSurfer 8.1.0 or newer
|
|
219
|
+
License registration: https://surfer.nmr.mgh.harvard.edu/registration.html
|
|
220
|
+
Documentation: https://surfer.nmr.mgh.harvard.edu/fswiki/FreeSurferWiki
|
|
221
|
+
|
|
222
|
+
Custom NeuroClaw skill created to integrate FreeSurfer safely into the hierarchical skill structure.
|
|
223
|
+
|
|
224
|
+
Curated reference snippet in this skill:
|
|
225
|
+
- `skills/freesurfer-tool/scripts/freesurfer_processor.py`
|
|
226
|
+
|
|
227
|
+
## Post-Execution Verification (Harness Integration)
|
|
228
|
+
|
|
229
|
+
After FreeSurfer processing completes, this skill **automatically invokes harness-core's VerificationRunner** to validate output integrity:
|
|
230
|
+
|
|
231
|
+
**Integrated verification checks**:
|
|
232
|
+
|
|
233
|
+
```python
|
|
234
|
+
from skills.harness_core import VerificationRunner, AuditLogger
|
|
235
|
+
|
|
236
|
+
verifier = VerificationRunner(task_type="freesurfer_processing")
|
|
237
|
+
|
|
238
|
+
# 1. Brain-extracted anatomy files
|
|
239
|
+
verifier.add_check("brain_extraction",
|
|
240
|
+
checker=lambda: verify_brain_extraction(subjects_dir, subjid),
|
|
241
|
+
severity="error"
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
# 2. Cortical surface files (white, pial)
|
|
245
|
+
verifier.add_check("surface_reconstruction",
|
|
246
|
+
checker=lambda: verify_surface_files(subjects_dir, subjid),
|
|
247
|
+
severity="error"
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
# 3. Cortical thickness bounds (1–4 mm range)
|
|
251
|
+
verifier.add_check("thickness_bounds",
|
|
252
|
+
checker=lambda: verify_cortical_thickness_range(subjects_dir, subjid),
|
|
253
|
+
severity="warning"
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
# 4. parcellation labels (aparc/aseg)
|
|
257
|
+
verifier.add_check("parcellation",
|
|
258
|
+
checker=lambda: verify_aparc_aseg(subjects_dir, subjid),
|
|
259
|
+
severity="error"
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
# 5. Statistics file completeness
|
|
263
|
+
verifier.add_check("statistics",
|
|
264
|
+
checker=lambda: verify_stats_files(subjects_dir, subjid),
|
|
265
|
+
severity="warning"
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
report = verifier.run(subjects_dir)
|
|
269
|
+
|
|
270
|
+
# Log verification results
|
|
271
|
+
logger = AuditLogger(log_file=f"{subjects_dir}/{subjid}/freesurfer_verification.jsonl")
|
|
272
|
+
logger.log_validation(
|
|
273
|
+
task_name="freesurfer_processing",
|
|
274
|
+
subject_id=subjid,
|
|
275
|
+
checks_passed=len([r for r in report.results if r.passed]),
|
|
276
|
+
total_checks=len(report.results)
|
|
277
|
+
)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Output**: `{SUBJECTS_DIR}/{subjid}/freesurfer_verification.jsonl` (structured audit log with JSONL format)
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
Created At: 2026-03-19 20:00 HKT
|
|
285
|
+
Last Updated At: 2026-04-05 02:03 HKT
|
|
286
|
+
Author: chengwang96
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"""FreeSurfer Processor Reference - recon-all pipeline orchestration.
|
|
2
|
+
|
|
3
|
+
Distilled from the NeuroClaw freesurfer-tool SKILL.md.
|
|
4
|
+
Agent should consult this script instead of copying from SKILL.md directly.
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
python skills/freesurfer-tool/scripts/freesurfer_processor.py \
|
|
8
|
+
--input-mri sub-001_T1w.nii.gz \
|
|
9
|
+
--subjid sub-001 \
|
|
10
|
+
--subjects-dir /data/freesurfer_output \
|
|
11
|
+
--stages all \
|
|
12
|
+
--extra-flags "-T2 T2.nii.gz -parallel -openmp 12"
|
|
13
|
+
|
|
14
|
+
# Plan only (no execution):
|
|
15
|
+
python skills/freesurfer-tool/scripts/freesurfer_processor.py \
|
|
16
|
+
--input-mri sub-001_T1w.nii.gz \
|
|
17
|
+
--subjid sub-001 \
|
|
18
|
+
--subjects-dir /data/freesurfer_output \
|
|
19
|
+
--plan-only
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
import argparse
|
|
23
|
+
import sys
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from datetime import datetime
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def check_freesurfer_installed():
|
|
29
|
+
"""Check if FreeSurfer is available on the system."""
|
|
30
|
+
# Simulate check via claw-shell
|
|
31
|
+
# Real impl: call claw-shell with "recon-all --version"
|
|
32
|
+
return False, "FreeSurfer not found (simulation mode)"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def delegate_to_claw_shell(commands, purpose, log_tag):
|
|
36
|
+
"""Delegate command execution to claw-shell."""
|
|
37
|
+
print(f"[Delegating to claw-shell] Purpose: {purpose}")
|
|
38
|
+
print(f"Log tag: {log_tag}")
|
|
39
|
+
print("Commands to execute:")
|
|
40
|
+
for cmd in commands:
|
|
41
|
+
print(" " + cmd)
|
|
42
|
+
# Real implementation: agent/tool call to claw-shell
|
|
43
|
+
# e.g. tool_call("claw-shell", commands=commands, log_tag=log_tag, capture_output=True, timeout="24h")
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def build_recon_all_command(args):
|
|
47
|
+
"""Build the recon-all command from arguments."""
|
|
48
|
+
commands = []
|
|
49
|
+
|
|
50
|
+
# 1. Set environment
|
|
51
|
+
fs_home = "/usr/local/freesurfer" # typical default; adjust if needed
|
|
52
|
+
commands.append(f"export FREESURFER_HOME={fs_home}")
|
|
53
|
+
commands.append("source $FREESURFER_HOME/SetUpFreeSurfer.sh")
|
|
54
|
+
|
|
55
|
+
# 2. recon-all command
|
|
56
|
+
recon_cmd = [
|
|
57
|
+
"recon-all",
|
|
58
|
+
"-subjid", args.subjid,
|
|
59
|
+
"-i", args.input_mri,
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
if args.stages == "all":
|
|
63
|
+
recon_cmd.append("-all")
|
|
64
|
+
elif "," in args.stages:
|
|
65
|
+
for stage in args.stages.split(","):
|
|
66
|
+
stage = stage.strip()
|
|
67
|
+
if stage:
|
|
68
|
+
recon_cmd.append(f"-{stage}")
|
|
69
|
+
else:
|
|
70
|
+
recon_cmd.append(f"-{args.stages}")
|
|
71
|
+
|
|
72
|
+
if args.extra_flags:
|
|
73
|
+
recon_cmd.extend(args.extra_flags.split())
|
|
74
|
+
|
|
75
|
+
# Recommend parallel execution if not disabled
|
|
76
|
+
if "-parallel" not in args.extra_flags and "-openmp" not in args.extra_flags:
|
|
77
|
+
recon_cmd.extend(["-parallel", "-openmp", "8"])
|
|
78
|
+
|
|
79
|
+
commands.append(" ".join(recon_cmd))
|
|
80
|
+
return commands
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def main():
|
|
84
|
+
parser = argparse.ArgumentParser(description="NeuroClaw FreeSurfer Processor")
|
|
85
|
+
parser.add_argument("--input-mri", required=True, help="Path to T1w (or other) NIfTI file")
|
|
86
|
+
parser.add_argument("--subjid", required=True, help="Subject ID (e.g. sub-001)")
|
|
87
|
+
parser.add_argument("--subjects-dir", required=True, help="Output SUBJECTS_DIR path")
|
|
88
|
+
parser.add_argument("--stages", default="all",
|
|
89
|
+
help="all / autorecon1 / autorecon2 / autorecon3 / stats / comma-separated stages")
|
|
90
|
+
parser.add_argument("--extra-flags", default="",
|
|
91
|
+
help="Additional flags, e.g. '-T2 T2.nii.gz -FLAIR FLAIR.nii.gz -parallel -openmp 12'")
|
|
92
|
+
parser.add_argument("--plan-only", action="store_true", help="Show plan without execution")
|
|
93
|
+
args = parser.parse_args()
|
|
94
|
+
|
|
95
|
+
installed, version_info = check_freesurfer_installed()
|
|
96
|
+
if not installed:
|
|
97
|
+
print("FreeSurfer not detected on system.")
|
|
98
|
+
print("-> Invoking dependency-planner to install FreeSurfer and set up license.")
|
|
99
|
+
print("Please complete the dependency-planner confirmation flow first.")
|
|
100
|
+
sys.exit(1)
|
|
101
|
+
|
|
102
|
+
print("FreeSurfer detected:", version_info)
|
|
103
|
+
|
|
104
|
+
subjects_dir = Path(args.subjects_dir).resolve()
|
|
105
|
+
print(f"\nProcessing plan for subject: {args.subjid}")
|
|
106
|
+
print(f"Input MRI : {args.input_mri}")
|
|
107
|
+
print(f"Output dir : {subjects_dir}")
|
|
108
|
+
print(f"Stages : {args.stages}")
|
|
109
|
+
if args.extra_flags:
|
|
110
|
+
print(f"Extra flags : {args.extra_flags}")
|
|
111
|
+
|
|
112
|
+
commands = build_recon_all_command(args)
|
|
113
|
+
log_tag = f"freesurfer_{args.subjid}_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
|
|
114
|
+
|
|
115
|
+
print("\nExecution plan (to be run via claw-shell):")
|
|
116
|
+
for i, cmd in enumerate(commands, 1):
|
|
117
|
+
print(f"Step {i}: {cmd}")
|
|
118
|
+
|
|
119
|
+
print(f"\nEstimated runtime: 4-24 hours (full -all), 1-4 hours (segmentation stages only)")
|
|
120
|
+
print(f"Disk usage: ~2-5 GB per subject")
|
|
121
|
+
print(f"Logs will be captured by claw-shell under tag: {log_tag}")
|
|
122
|
+
|
|
123
|
+
if args.plan_only:
|
|
124
|
+
print("\nPlan-only mode - no execution performed.")
|
|
125
|
+
return
|
|
126
|
+
|
|
127
|
+
confirm = input("\nExecute now? Type YES to proceed: ").strip().upper()
|
|
128
|
+
if confirm != "YES":
|
|
129
|
+
print("Aborted by user.")
|
|
130
|
+
return
|
|
131
|
+
|
|
132
|
+
print("\nDelegating pipeline execution to claw-shell skill...")
|
|
133
|
+
delegate_to_claw_shell(
|
|
134
|
+
commands=commands,
|
|
135
|
+
purpose=f"FreeSurfer processing for subject {args.subjid} ({args.stages})",
|
|
136
|
+
log_tag=log_tag,
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
print(f"-> Execution handed over to claw-shell.")
|
|
140
|
+
print(f"-> Check logs using tag: {log_tag}")
|
|
141
|
+
print(f"-> Final outputs will be in: {subjects_dir / args.subjid}")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
if __name__ == "__main__":
|
|
145
|
+
main()
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fsl-tool
|
|
3
|
+
description: "Use this skill whenever the user wants to process neuroimaging data with FSL (FMRIB Software Library), covering structural MRI, functional MRI (fMRI), and diffusion MRI (dMRI/DTI). Triggers include: 'use FSL', 'FSL processing', 'fsl_anat', 'FEAT', 'MELODIC', 'eddy', 'bedpostx', 'probtrackx', 'BET', 'FAST', 'FLIRT', 'FNIRT', 'run FSL pipeline'. This skill is the NeuroClaw interface-layer wrapper for FSL: checks installation, generates execution plan with concrete shell commands, waits for explicit confirmation, then routes all commands through claw-shell."
|
|
4
|
+
license: MIT License (NeuroClaw custom skill – freely modifiable within the project)
|
|
5
|
+
layer: base
|
|
6
|
+
skill_type: tool
|
|
7
|
+
dependencies:
|
|
8
|
+
- claw-shell
|
|
9
|
+
---
|
|
10
|
+
# FSL Tool
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
FSL is a comprehensive library of analysis tools for MRI, fMRI, and diffusion brain imaging. This skill provides a safe, unified interface for the three core modalities in NeuroClaw:
|
|
15
|
+
|
|
16
|
+
- Structural MRI (T1w, T2w, FLAIR)
|
|
17
|
+
- Functional MRI (task-based and resting-state)
|
|
18
|
+
- Diffusion MRI (DTI / dMRI)
|
|
19
|
+
|
|
20
|
+
**Workflow**:
|
|
21
|
+
|
|
22
|
+
1. Check if FSL is installed (`fslversion`).
|
|
23
|
+
2. If not installed → call `dependency-planner` to generate installation plan.
|
|
24
|
+
3. Analyze input files and propose concrete shell commands with parameter explanations.
|
|
25
|
+
4. Present full numbered plan + estimated time + risks.
|
|
26
|
+
5. Wait for explicit user confirmation (“YES”, “execute”, “proceed”).
|
|
27
|
+
6. Execute all commands safely via `claw-shell`.
|
|
28
|
+
7. Summarize outputs and suggest next steps.
|
|
29
|
+
|
|
30
|
+
**Research use only.**
|
|
31
|
+
|
|
32
|
+
## Core Modalities and Common Shell Commands
|
|
33
|
+
|
|
34
|
+
### 1. Structural MRI
|
|
35
|
+
```bash
|
|
36
|
+
# One-click structural preprocessing (strongly recommended)
|
|
37
|
+
fsl_anat -i T1w.nii.gz -o T1w_anat --clobber
|
|
38
|
+
# -i : input T1w file
|
|
39
|
+
# -o : output folder name
|
|
40
|
+
# --clobber : overwrite existing files (commonly used)
|
|
41
|
+
|
|
42
|
+
# Brain extraction (BET)
|
|
43
|
+
bet T1w.nii.gz T1w_brain -m -f 0.5
|
|
44
|
+
# -m : output brain mask (_mask.nii.gz)
|
|
45
|
+
# -f : brain extraction threshold (0.3~0.7; 0.5 is usually stable)
|
|
46
|
+
|
|
47
|
+
# Tissue segmentation + bias correction
|
|
48
|
+
fast -t 1 -n 3 -H 0.1 -I 4 -l 20.0 -o T1w_fast T1w_brain
|
|
49
|
+
# -t 1 : T1-weighted image
|
|
50
|
+
# -n 3 : 3 tissue classes (GM, WM, CSF)
|
|
51
|
+
# -H 0.1 : bias field correction strength
|
|
52
|
+
|
|
53
|
+
# Linear + nonlinear registration to MNI152
|
|
54
|
+
flirt -in T1w_brain -ref $FSLDIR/data/standard/MNI152_T1_2mm_brain -out T1w_to_MNI -omat T1w_to_MNI.mat -dof 12
|
|
55
|
+
fnirt --in=T1w_brain --aff=T1w_to_MNI.mat --cout=T1w_to_MNI_warp --config=T1_2_MNI152_2mm
|
|
56
|
+
|
|
57
|
+
# Subcortical segmentation
|
|
58
|
+
first -i T1w_brain -o T1w_first -b
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 2. Functional MRI
|
|
62
|
+
```bash
|
|
63
|
+
# Motion correction
|
|
64
|
+
mcflirt -in bold.nii.gz -out bold_mcf -plots -refvol 0
|
|
65
|
+
|
|
66
|
+
# Task-based fMRI full analysis (FEAT)
|
|
67
|
+
feat design.fsf
|
|
68
|
+
|
|
69
|
+
# Resting-state ICA
|
|
70
|
+
melodic -i bold_mcf.nii.gz -o melodic_output --report --nobet --bgthreshold=10 --tr=2.0 --mmthresh=0.5 --dim=30
|
|
71
|
+
|
|
72
|
+
# Automatic denoising (FIX)
|
|
73
|
+
fix melodic_output -c $FSLDIR/training_files/Standard.RData -m -f 20
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 3. Diffusion MRI
|
|
77
|
+
```bash
|
|
78
|
+
# Distortion and eddy current correction
|
|
79
|
+
topup --imain=AP_PA_b0.nii.gz --datain=acqparams.txt --out=topup_results --fout=field --iout=b0_unwarped
|
|
80
|
+
eddy --imain=dwi.nii.gz --mask=dwi_brain_mask.nii.gz --acqp=acqparams.txt --index=index.txt \
|
|
81
|
+
--bvecs=bvecs --bvals=bvals --topup=topup_results --out=eddy_corrected --very_verbose
|
|
82
|
+
|
|
83
|
+
# Tensor fitting
|
|
84
|
+
dtifit -k eddy_corrected.nii.gz -m dwi_brain_mask.nii.gz -r bvecs -b bvals -o dtifit
|
|
85
|
+
|
|
86
|
+
# Multi-fiber modeling
|
|
87
|
+
bedpostx bedpostx_input -n 3 -w 1 -b 1000
|
|
88
|
+
|
|
89
|
+
# Automated major tract extraction
|
|
90
|
+
xtract -bpx bedpostx_input.bedpostX -out xtract_results -str $FSLDIR/data/xtract/tracts.txt
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Quick Reference
|
|
94
|
+
|
|
95
|
+
| Modality | Task | Main Command | Typical Time |
|
|
96
|
+
|--------------|-----------------------------|-------------------------------|-------------------|
|
|
97
|
+
| Structural | Full preprocessing | `fsl_anat` | 10–40 min |
|
|
98
|
+
| Structural | Brain extraction | `bet` | 1–3 min |
|
|
99
|
+
| Structural | Tissue segmentation | `fast` | 5–15 min |
|
|
100
|
+
| Functional | Motion correction | `mcflirt` | 2–10 min |
|
|
101
|
+
| Functional | Task GLM | `feat` | 15–90 min |
|
|
102
|
+
| Functional | Resting-state ICA | `melodic` | 20–120 min |
|
|
103
|
+
| Diffusion | Preprocessing | `topup + eddy` | 30–180 min |
|
|
104
|
+
| Diffusion | Tensor metrics | `dtifit` | 5–20 min |
|
|
105
|
+
| Diffusion | Tractography | `probtrackx2 / xtract` | 30 min – 24 h+ |
|
|
106
|
+
|
|
107
|
+
## Installation
|
|
108
|
+
|
|
109
|
+
Use `dependency-planner` skill with one of the following requests:
|
|
110
|
+
- “Install latest FSL on Ubuntu using official installer”
|
|
111
|
+
- “Install FSL via conda-forge in a new environment”
|
|
112
|
+
|
|
113
|
+
After installation, verify with:
|
|
114
|
+
```bash
|
|
115
|
+
fslversion
|
|
116
|
+
echo $FSLDIR
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Important Notes & Limitations
|
|
120
|
+
|
|
121
|
+
- All actual execution is routed through `claw-shell`.
|
|
122
|
+
- Long-running commands (bedpostx, probtrackx, group FEAT, etc.) run safely in the `claw` tmux session.
|
|
123
|
+
- Always consider running `fsl_anat` first for structural data — it handles BET + FAST + registration automatically.
|
|
124
|
+
- Input must be NIfTI format. Use `dcm2nii` skill first if starting from DICOM.
|
|
125
|
+
- Monitor progress with `tail -f` on the log file provided by claw-shell.
|
|
126
|
+
|
|
127
|
+
## When to Call This Skill
|
|
128
|
+
|
|
129
|
+
- After `dcm2nii` conversion
|
|
130
|
+
- When any FSL preprocessing, registration, segmentation or advanced analysis is needed
|
|
131
|
+
- Before feeding quantitative results into `paper-writing` or `experiment-controller`
|
|
132
|
+
|
|
133
|
+
## Complementary / Related Skills
|
|
134
|
+
|
|
135
|
+
- `dependency-planner`
|
|
136
|
+
- `claw-shell`
|
|
137
|
+
|
|
138
|
+
## More Advanced Features
|
|
139
|
+
|
|
140
|
+
For less common tools (ASL, FABBER, VBM, PALM, custom scripting, etc.), please refer to the official FSL documentation:
|
|
141
|
+
- Official FSL Website: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/
|
|
142
|
+
- Structural tools: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/Structural
|
|
143
|
+
- Functional tools: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FEAT
|
|
144
|
+
- Diffusion tools: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FDT
|
|
145
|
+
- Full tool list: https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/FSL
|
|
146
|
+
|
|
147
|
+
You may use the `multi-search-engine`, `academic-research-hub`, or `arxiv-cli-tools` skill anytime to find the latest FSL tutorials or example pipelines.
|
|
148
|
+
|
|
149
|
+
## Post-Execution Verification (Harness Integration)
|
|
150
|
+
|
|
151
|
+
After FSL processing completes, this skill **automatically invokes harness-core's VerificationRunner** to validate output integrity:
|
|
152
|
+
|
|
153
|
+
**Integrated verification checks**:
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
from skills.harness_core import VerificationRunner, AuditLogger
|
|
157
|
+
|
|
158
|
+
verifier = VerificationRunner(task_type="fsl_processing")
|
|
159
|
+
|
|
160
|
+
# 1. Brain extraction quality (BET)
|
|
161
|
+
verifier.add_check("brain_extraction",
|
|
162
|
+
checker=lambda: verify_bet_output(output_dir),
|
|
163
|
+
severity="error"
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# 2. FSL output files existence
|
|
167
|
+
verifier.add_check("output_files",
|
|
168
|
+
checker=lambda: verify_output_files(output_dir),
|
|
169
|
+
severity="error"
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
# 3. Data integrity (NaN/Inf checks)
|
|
173
|
+
verifier.add_check("data_integrity",
|
|
174
|
+
checker=lambda: verify_no_nan_inf(output_dir),
|
|
175
|
+
severity="error"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
# 4. Registration quality metrics
|
|
179
|
+
verifier.add_check("registration_quality",
|
|
180
|
+
checker=lambda: verify_registration_quality(output_dir),
|
|
181
|
+
severity="warning"
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
# 5. Tensor metrics bounds (for DTI/DWI)
|
|
185
|
+
verifier.add_check("tensor_bounds",
|
|
186
|
+
checker=lambda: verify_fa_md_bounds(output_dir),
|
|
187
|
+
severity="warning"
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
report = verifier.run(output_dir)
|
|
191
|
+
|
|
192
|
+
# Log verification results
|
|
193
|
+
logger = AuditLogger(log_file=f"{output_dir}/fsl_verification.jsonl")
|
|
194
|
+
logger.log_validation(
|
|
195
|
+
task_name="fsl_processing",
|
|
196
|
+
checks_passed=len([r for r in report.results if r.passed]),
|
|
197
|
+
total_checks=len(report.results),
|
|
198
|
+
output_path=output_dir
|
|
199
|
+
)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**Output**: `{output_dir}/fsl_verification.jsonl` (structured audit log with JSONL format)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
Created At: 2026-03-25 00:00 HKT
|
|
207
|
+
Last Updated At: 2026-04-05 02:03 HKT
|
|
208
|
+
Author: chengwang96
|