@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,140 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Reorganize COBRE raw data into BIDS-compliant directory structure."""
|
|
3
|
+
import argparse
|
|
4
|
+
import csv
|
|
5
|
+
import json
|
|
6
|
+
import re
|
|
7
|
+
import shutil
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Dict, List, Optional, Tuple
|
|
11
|
+
|
|
12
|
+
SIDECAR_EXTENSIONS = [".json", ".bval", ".bvec", ".tsv"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def normalize_subject_id(raw_id: str) -> str:
|
|
16
|
+
clean = re.sub(r"[^a-zA-Z0-9]", "", str(raw_id).strip())
|
|
17
|
+
return f"sub-{clean}"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def detect_modality(directory: Path, filename: str) -> Optional[Tuple[str, str]]:
|
|
21
|
+
name_lower = (directory.name + " " + filename).lower()
|
|
22
|
+
if any(k in name_lower for k in ["t1w", "t1", "anat", "mprage"]):
|
|
23
|
+
if "bold" not in name_lower and "fmri" not in name_lower:
|
|
24
|
+
return ("T1w", "anat")
|
|
25
|
+
if any(k in name_lower for k in ["rest", "bold", "fmri", "func", "rsfmri"]):
|
|
26
|
+
return ("task-rest_bold", "func")
|
|
27
|
+
return None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def find_nifti_files(directory: Path) -> List[Path]:
|
|
31
|
+
return [f for f in directory.rglob("*") if f.is_file() and (f.name.endswith(".nii") or f.name.endswith(".nii.gz"))]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def copy_with_sidecars(src_nifti: Path, dst_dir: Path, dst_stem: str) -> None:
|
|
35
|
+
dst_dir.mkdir(parents=True, exist_ok=True)
|
|
36
|
+
ext = ".nii.gz" if src_nifti.name.endswith(".nii.gz") else ".nii"
|
|
37
|
+
dst_nifti = dst_dir / f"{dst_stem}{ext}"
|
|
38
|
+
if not dst_nifti.exists():
|
|
39
|
+
shutil.copy2(str(src_nifti), str(dst_nifti))
|
|
40
|
+
src_stem = src_nifti.name[:-7] if src_nifti.name.endswith(".nii.gz") else src_nifti.name[:-4]
|
|
41
|
+
for sidecar_ext in SIDECAR_EXTENSIONS:
|
|
42
|
+
src_sidecar = src_nifti.parent / f"{src_stem}{sidecar_ext}"
|
|
43
|
+
if src_sidecar.exists():
|
|
44
|
+
dst_sidecar = dst_dir / f"{dst_stem}{sidecar_ext}"
|
|
45
|
+
if not dst_sidecar.exists():
|
|
46
|
+
shutil.copy2(str(src_sidecar), str(dst_sidecar))
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def write_dataset_description(bids_root: Path) -> None:
|
|
50
|
+
desc = {"Name": "COBRE", "BIDSVersion": "1.8.0", "DatasetType": "raw", "GeneratedBy": [{"Name": "NeuroClaw cobre-skill", "Version": "1.0.0"}]}
|
|
51
|
+
(bids_root / "dataset_description.json").write_text(json.dumps(desc, indent=2), encoding="utf-8")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def write_participants_tsv(bids_root: Path, participants: List[Dict[str, str]], phenotype_file: Optional[Path] = None) -> None:
|
|
55
|
+
phenotype_map: Dict[str, Dict[str, str]] = {}
|
|
56
|
+
if phenotype_file and phenotype_file.exists():
|
|
57
|
+
try:
|
|
58
|
+
with open(phenotype_file, "r", encoding="utf-8") as f:
|
|
59
|
+
reader = csv.DictReader(f)
|
|
60
|
+
for row in reader:
|
|
61
|
+
sid = row.get("subject", row.get("SUBJECT_ID", ""))
|
|
62
|
+
if sid:
|
|
63
|
+
phenotype_map[normalize_subject_id(sid)] = row
|
|
64
|
+
except Exception:
|
|
65
|
+
pass
|
|
66
|
+
|
|
67
|
+
tsv_path = bids_root / "participants.tsv"
|
|
68
|
+
headers = ["participant_id"]
|
|
69
|
+
if phenotype_map:
|
|
70
|
+
sample = next(iter(phenotype_map.values()))
|
|
71
|
+
headers.extend(c for c in sample if c not in ("subject", "SUBJECT_ID"))
|
|
72
|
+
|
|
73
|
+
with open(tsv_path, "w", encoding="utf-8", newline="") as f:
|
|
74
|
+
writer = csv.writer(f, delimiter="\t")
|
|
75
|
+
writer.writerow(headers)
|
|
76
|
+
seen = set()
|
|
77
|
+
for p in participants:
|
|
78
|
+
pid = p["participant_id"]
|
|
79
|
+
if pid in seen:
|
|
80
|
+
continue
|
|
81
|
+
seen.add(pid)
|
|
82
|
+
row = [pid]
|
|
83
|
+
pheno = phenotype_map.get(pid, {})
|
|
84
|
+
for col in headers[1:]:
|
|
85
|
+
row.append(pheno.get(col, "n/a"))
|
|
86
|
+
writer.writerow(row)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def main() -> int:
|
|
90
|
+
parser = argparse.ArgumentParser(description="Reorganize COBRE raw data into BIDS structure.")
|
|
91
|
+
parser.add_argument("--input", required=True, help="Path to COBRE raw data directory")
|
|
92
|
+
parser.add_argument("--output", required=True, help="Path to output BIDS directory")
|
|
93
|
+
parser.add_argument("--phenotype", help="Path to COBRE phenotype CSV file")
|
|
94
|
+
parser.add_argument("--dry-run", action="store_true", help="Preview without copying")
|
|
95
|
+
args = parser.parse_args()
|
|
96
|
+
|
|
97
|
+
input_dir = Path(args.input).resolve()
|
|
98
|
+
output_dir = Path(args.output).resolve()
|
|
99
|
+
if not input_dir.exists():
|
|
100
|
+
print(f"Input directory does not exist: {input_dir}", file=sys.stderr)
|
|
101
|
+
return 1
|
|
102
|
+
|
|
103
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
104
|
+
participants: List[Dict[str, str]] = []
|
|
105
|
+
converted = skipped = failed = 0
|
|
106
|
+
|
|
107
|
+
for subject_dir in sorted(p for p in input_dir.iterdir() if p.is_dir() and not p.name.startswith(".")):
|
|
108
|
+
sub_label = normalize_subject_id(subject_dir.name)
|
|
109
|
+
participants.append({"participant_id": sub_label})
|
|
110
|
+
for nifti in find_nifti_files(subject_dir):
|
|
111
|
+
result = detect_modality(nifti.parent, nifti.name)
|
|
112
|
+
if result is None:
|
|
113
|
+
result = detect_modality(subject_dir, nifti.name)
|
|
114
|
+
if result is None:
|
|
115
|
+
failed += 1
|
|
116
|
+
continue
|
|
117
|
+
bids_suffix, bids_folder = result
|
|
118
|
+
bids_sub_dir = output_dir / sub_label / "ses-1" / bids_folder
|
|
119
|
+
dst_stem = f"{sub_label}_ses-1_{bids_suffix}"
|
|
120
|
+
if (bids_sub_dir / f"{dst_stem}.nii.gz").exists():
|
|
121
|
+
skipped += 1
|
|
122
|
+
continue
|
|
123
|
+
if args.dry_run:
|
|
124
|
+
print(f"[DRY] {sub_label}/ses-1/{bids_folder}/{dst_stem}")
|
|
125
|
+
else:
|
|
126
|
+
copy_with_sidecars(nifti, bids_sub_dir, dst_stem)
|
|
127
|
+
print(f"[OK] {sub_label} / {bids_folder} / {dst_stem}")
|
|
128
|
+
converted += 1
|
|
129
|
+
|
|
130
|
+
if not args.dry_run and converted > 0:
|
|
131
|
+
write_dataset_description(output_dir)
|
|
132
|
+
phenotype_path = Path(args.phenotype).resolve() if args.phenotype else None
|
|
133
|
+
write_participants_tsv(output_dir, participants, phenotype_path)
|
|
134
|
+
|
|
135
|
+
print(f"\nDone. Converted={converted}, Skipped={skipped}, Failed={failed}")
|
|
136
|
+
return 0 if failed == 0 else 2
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
if __name__ == "__main__":
|
|
140
|
+
sys.exit(main())
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: conn-tool
|
|
3
|
+
description: "Use this skill whenever the user wants to perform advanced functional connectivity (ROI-to-ROI, seed-to-voxel, ICA) or effective connectivity (PPI, gPPI, DCM) analysis using the CONN Toolbox. Triggers include: 'conn', 'CONN toolbox', 'functional connectivity', 'effective connectivity', 'ROI-to-ROI', 'seed-to-voxel', 'PPI', 'gPPI', 'DCM', 'psychophysiological interaction', or any request for connectivity analysis after preprocessing."
|
|
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
|
+
# CONN Tool
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
CONN is a MATLAB/SPM-based toolbox for comprehensive functional and effective connectivity analysis. It excels at ROI-to-ROI, seed-to-voxel, ICA-based network analysis, and psychophysiological interaction (PPI/gPPI) as well as Dynamic Causal Modeling (DCM).
|
|
15
|
+
|
|
16
|
+
This skill serves as the **NeuroClaw interface-layer wrapper** for the CONN Toolbox and strictly follows the hierarchical design:
|
|
17
|
+
|
|
18
|
+
1. Check whether CONN Toolbox and dependencies (MATLAB + SPM) are installed.
|
|
19
|
+
2. If missing → invoke `dependency-planner` to generate a safe installation plan.
|
|
20
|
+
3. Verify input data (typically preprocessed BOLD from `fmriprep-tool` or `hcppipeline-tool`).
|
|
21
|
+
4. Generate a clear, numbered execution plan with exact commands, project setup, and analysis steps.
|
|
22
|
+
5. Present the plan and wait for explicit user confirmation (“YES” / “execute” / “proceed”).
|
|
23
|
+
6. On confirmation → delegate the entire CONN project setup and analysis to `claw-shell`.
|
|
24
|
+
7. After completion, summarize connectivity matrices, statistical maps, and suggest next steps (e.g., visualization or `paper-writing`).
|
|
25
|
+
|
|
26
|
+
**Research use only.**
|
|
27
|
+
|
|
28
|
+
## Quick Reference
|
|
29
|
+
|
|
30
|
+
| Task | What needs to be done | Delegate to which tool skill | Expected output |
|
|
31
|
+
|-------------------------------------------|----------------------------------------------------------------------------|-----------------------------------------------|------------------------------------------|
|
|
32
|
+
| Project setup | Create new CONN project from preprocessed data | `claw-shell` | conn_*.mat project file |
|
|
33
|
+
| ROI definition & extraction | Define ROIs from atlas or seed regions | `claw-shell` | ROI time series |
|
|
34
|
+
| Functional connectivity (ROI-to-ROI) | ROI-to-ROI correlation analysis | `claw-shell` | Correlation matrices |
|
|
35
|
+
| Seed-to-voxel connectivity | Seed-based whole-brain correlation | `claw-shell` | Seed-to-voxel maps |
|
|
36
|
+
| ICA network analysis | Group ICA + network component extraction | `claw-shell` | ICA components + networks |
|
|
37
|
+
| PPI / gPPI | Psychophysiological interaction analysis | `claw-shell` | PPI contrast maps |
|
|
38
|
+
| Effective connectivity (DCM) | Dynamic Causal Modeling | `claw-shell` | DCM parameters & model comparison |
|
|
39
|
+
| Full connectivity pipeline | Preprocessed data → ROI definition → connectivity → statistics | `claw-shell` | Complete CONN results + figures |
|
|
40
|
+
|
|
41
|
+
## Common Shell Command Examples
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Launch CONN in MATLAB (typical usage)
|
|
45
|
+
matlab -nodisplay -nosplash -r "conn; conn_batch('conn_project.mat'); exit;"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Installation (Handled by dependency-planner)
|
|
49
|
+
|
|
50
|
+
Use `dependency-planner` with one of the following requests:
|
|
51
|
+
|
|
52
|
+
- “Install CONN Toolbox and SPM in MATLAB environment”
|
|
53
|
+
- “Install CONN Toolbox via MATLAB Add-Ons or manual download”
|
|
54
|
+
|
|
55
|
+
After installation, verify with:
|
|
56
|
+
```bash
|
|
57
|
+
matlab -batch "conn; disp('CONN version:'); conn('ver')"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Prerequisites**:
|
|
61
|
+
- MATLAB (R2019b or newer recommended)
|
|
62
|
+
- SPM12 or SPM8
|
|
63
|
+
- Preprocessed data from `fmriprep-tool` or `hcppipeline-tool`
|
|
64
|
+
|
|
65
|
+
## Benchmark Adapter Guidance
|
|
66
|
+
|
|
67
|
+
For benchmark-style prompts, do not force the full CONN project workflow when the task is only asking for a direct functional connectivity matrix from an already preprocessed BOLD file.
|
|
68
|
+
|
|
69
|
+
- If the task starts from an existing preprocessed BOLD NIfTI and an atlas and only asks for ROI-level functional connectivity output:
|
|
70
|
+
- default to the narrow direct path `preprocessed BOLD -> ROI time series -> square FC matrix`
|
|
71
|
+
- do not require MATLAB, SPM, or a `.mat` CONN project file as the primary route
|
|
72
|
+
- do not require explicit confirmation before presenting the executable benchmark answer
|
|
73
|
+
- When the task provides an explicit benchmark output directory, preserve that exact output contract instead of writing into generic CONN project folders or ad hoc subject-local directories.
|
|
74
|
+
- Only use the full CONN Toolbox route as the default when the prompt explicitly asks for CONN, seed-to-voxel analysis, ICA, PPI/gPPI, DCM, or other advanced CONN-native workflows.
|
|
75
|
+
|
|
76
|
+
## NeuroClaw recommended wrapper script
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
# conn_wrapper.py (placed inside the skill folder for reference)
|
|
80
|
+
import subprocess
|
|
81
|
+
import argparse
|
|
82
|
+
|
|
83
|
+
def run_conn_batch(project_file):
|
|
84
|
+
cmd = [
|
|
85
|
+
"matlab", "-nodisplay", "-nosplash", "-r",
|
|
86
|
+
f"conn; conn_batch('{project_file}'); exit;"
|
|
87
|
+
]
|
|
88
|
+
print("Running CONN batch:", project_file)
|
|
89
|
+
subprocess.run(cmd, check=True)
|
|
90
|
+
|
|
91
|
+
if __name__ == "__main__":
|
|
92
|
+
parser = argparse.ArgumentParser()
|
|
93
|
+
parser.add_argument("--project", required=True, help="Path to conn_*.mat project file")
|
|
94
|
+
args = parser.parse_args()
|
|
95
|
+
run_conn_batch(args.project)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Important Notes & Limitations
|
|
99
|
+
|
|
100
|
+
- All actual CONN execution is routed through `claw-shell` (MATLAB calls).
|
|
101
|
+
- CONN requires a valid MATLAB license and SPM installation.
|
|
102
|
+
- Best results are obtained when input data comes from `fmriprep-tool` or `hcppipeline-tool`.
|
|
103
|
+
- Long-running analyses (whole-brain seed-to-voxel, DCM model comparison) are automatically run in background mode.
|
|
104
|
+
- Execution begins **only after explicit user confirmation** of the full numbered plan.
|
|
105
|
+
|
|
106
|
+
## When to Call This Skill
|
|
107
|
+
|
|
108
|
+
- After `fmriprep-tool` or `hcppipeline-tool` when the user needs advanced connectivity analysis.
|
|
109
|
+
- When the research question involves ROI-to-ROI, seed-to-voxel, PPI/gPPI, or DCM effective connectivity.
|
|
110
|
+
- When high-quality functional/effective connectivity results are required for `paper-writing` or `experiment-controller`.
|
|
111
|
+
|
|
112
|
+
## Complementary / Related Skills
|
|
113
|
+
|
|
114
|
+
- `dependency-planner` → install CONN + SPM + MATLAB environment
|
|
115
|
+
|
|
116
|
+
## Reference
|
|
117
|
+
|
|
118
|
+
- Official CONN Toolbox Website: https://web.conn-toolbox.org/
|
|
119
|
+
- CONN Documentation: https://web.conn-toolbox.org/documentation
|
|
120
|
+
- Aligned with NeuroClaw modality-skill pattern (see `fmri-skill`, `eeg-skill`).
|
|
121
|
+
|
|
122
|
+
## Post-Execution Verification (Harness Integration)
|
|
123
|
+
|
|
124
|
+
After CONN processing completes, this skill **automatically invokes harness-core's VerificationRunner** to validate output integrity:
|
|
125
|
+
|
|
126
|
+
**Integrated verification checks**:
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
from skills.harness_core import VerificationRunner, AuditLogger
|
|
130
|
+
|
|
131
|
+
verifier = VerificationRunner(task_type="conn_connectivity_analysis")
|
|
132
|
+
|
|
133
|
+
# 1. CONN project file creation
|
|
134
|
+
verifier.add_check("project_file",
|
|
135
|
+
checker=lambda: verify_conn_project_exists(output_dir),
|
|
136
|
+
severity="error"
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# 2. ROI extraction success
|
|
140
|
+
verifier.add_check("roi_extraction",
|
|
141
|
+
checker=lambda: verify_roi_extracted(output_dir),
|
|
142
|
+
severity="error"
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
# 3. Connectivity matrices existence and shape
|
|
146
|
+
verifier.add_check("connectivity_matrices",
|
|
147
|
+
checker=lambda: verify_connectivity_matrices(output_dir),
|
|
148
|
+
severity="error"
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
# 4. Statistical maps (Z-scores, p-values)
|
|
152
|
+
verifier.add_check("statistical_maps",
|
|
153
|
+
checker=lambda: verify_stat_maps(output_dir),
|
|
154
|
+
severity="warning"
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
# 5. Data integrity in connectivity results
|
|
158
|
+
verifier.add_check("data_integrity",
|
|
159
|
+
checker=lambda: verify_no_nan_inf_in_conn(output_dir),
|
|
160
|
+
severity="error"
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
report = verifier.run(output_dir)
|
|
164
|
+
|
|
165
|
+
# Log verification results
|
|
166
|
+
logger = AuditLogger(log_file=f"{output_dir}/conn_verification.jsonl")
|
|
167
|
+
logger.log_validation(
|
|
168
|
+
task_name="conn_connectivity_analysis",
|
|
169
|
+
checks_passed=len([r for r in report.results if r.passed]),
|
|
170
|
+
total_checks=len(report.results),
|
|
171
|
+
output_path=output_dir
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Output**: `{output_dir}/conn_verification.jsonl` (structured audit log with JSONL format)
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
Created At: 2026-03-25 16:10 HKT
|
|
179
|
+
Last Updated At: 2026-04-05 02:03 HKT
|
|
180
|
+
Author: chengwang96
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dcm2nii
|
|
3
|
+
description: "Use this skill whenever the user wants to convert DICOM files or folders to NIfTI format (.nii or .nii.gz), extract neuroimaging volumes from clinical DICOM series (MRI, CT, PET, etc.), prepare raw DICOM data for research processing pipelines, anonymize while converting, or batch-convert multiple series/studies. Triggers include: 'DICOM to NIfTI', 'dcm to nii', 'convert dicom to nii.gz', 'dcm2niix', 'extract nii from dicom', 'batch dicom to nifti', 'prepare dicom for freesurfer/fsl/spm', 'anonymized nifti conversion', or any request to transform clinical DICOM data into analysis-ready NIfTI format while preserving orientation, voxel spacing, slice timing (when available), and important metadata in the JSON sidecar."
|
|
4
|
+
license: BSD 3-Clause (original dcm2niix license). See https://github.com/rordenlab/dcm2niix/blob/master/LICENSE for complete terms.
|
|
5
|
+
layer: base
|
|
6
|
+
skill_type: tool
|
|
7
|
+
dependencies:
|
|
8
|
+
- claw-shell
|
|
9
|
+
---
|
|
10
|
+
# DICOM to NIfTI conversion
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
DICOM is the universal clinical imaging format containing rich metadata, patient information, acquisition parameters, and often multi-slice series.
|
|
15
|
+
NIfTI (.nii/.nii.gz) is the de-facto standard in neuroimaging research — compact, orientation-aware, and directly supported by FSL, FreeSurfer, SPM, AFNI, ANTs, etc.
|
|
16
|
+
|
|
17
|
+
This skill wraps `dcm2niix` (latest stable release as of 2026), the most widely used and actively maintained DICOM→NIfTI converter in neuroimaging.
|
|
18
|
+
It produces high-fidelity 3D/4D NIfTI volumes + comprehensive JSON sidecar files containing DICOM tags (BIDS-compatible when using `-b y`).
|
|
19
|
+
|
|
20
|
+
## Benchmark-Facing Default Mainline
|
|
21
|
+
|
|
22
|
+
For benchmark-style DICOM conversion tasks, default to the narrow canonical answer instead of a broad converter survey:
|
|
23
|
+
|
|
24
|
+
- Preferred default command shape: `dcm2niix -z y -b y -o <output_dir> <dicom_dir>`
|
|
25
|
+
- For batch conversion, the default answer should be a simple loop over subject/session or series directories.
|
|
26
|
+
- Metadata preservation means emitting paired `.nii.gz` and `.json` outputs; present this as the primary validation target.
|
|
27
|
+
- Prefer `dcm2niix` over legacy `dcm2nii` unless the user explicitly asks for the legacy converter.
|
|
28
|
+
- Do not lead with installation, Docker, anonymization, or wrapper-script material unless the prompt asks for those concerns or the task is blocked by a missing binary.
|
|
29
|
+
|
|
30
|
+
If the prompt is specifically about structural MRI DICOM conversion, keep the answer focused on batch conversion plus sidecar validation. Do not expand into downstream BIDS curation or anatomical processing unless requested.
|
|
31
|
+
|
|
32
|
+
**Research use only** — not certified for clinical diagnostic workflows.
|
|
33
|
+
|
|
34
|
+
## Quick Reference
|
|
35
|
+
|
|
36
|
+
| Task | Recommended Flags / Approach |
|
|
37
|
+
|-----------------------------------|-------------------------------------------------------|
|
|
38
|
+
| Basic single-series conversion | `dcm2niix -z y -o output/ dicom_folder/` |
|
|
39
|
+
| 4D fMRI/DWI/perfusion | `dcm2niix -z y -f "%s_%t" -b y dicom_folder/` |
|
|
40
|
+
| BIDS-like naming + JSON sidecar | `-o out/ -f sub-%s_ses-%t -z y -b y` |
|
|
41
|
+
| Lossless compression | `-z y` (pigz) or `-z i` (internal) |
|
|
42
|
+
| Anonymize (remove most PHI) | `-x y` (cautious) or `-x n` (aggressive) |
|
|
43
|
+
| Merge 2D slices into 3D volume | default behavior (auto-detected) |
|
|
44
|
+
| Keep slice timing / Philips diff | `-t y` (important for fMRI) |
|
|
45
|
+
| Custom output filename | `-f "%p_%s_%t_%d"` (patient_study_time_desc) |
|
|
46
|
+
| Only convert specific series | Use `-m y` + manual selection or post-filter |
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
### Via pre-built binary (recommended for NeuroClaw)
|
|
51
|
+
Most reliable and fastest:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Linux / macOS (use latest release)
|
|
55
|
+
wget https://github.com/rordenlab/dcm2niix/releases/latest/download/dcm2niix_lnx.zip
|
|
56
|
+
unzip dcm2niix_lnx.zip
|
|
57
|
+
chmod +x dcm2niix
|
|
58
|
+
mv dcm2niix /usr/local/bin/ # or add to PATH
|
|
59
|
+
dcm2niix --version
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Windows / macOS: download from release page → https://github.com/rordenlab/dcm2niix/releases
|
|
63
|
+
|
|
64
|
+
### Via conda (clean & reproducible)
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
conda install -c conda-forge dcm2niix
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Via pip (python wrapper – if needed for scripting)
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pip install pydicom # optional helper
|
|
74
|
+
# then call subprocess.run(["dcm2niix", ...])
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Docker (isolated environment)
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
docker pull rordenlab/dcm2niix:latest
|
|
81
|
+
docker run --rm -v $(pwd)/dicom:/data rordenlab/dcm2niix -z y /data
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Usage Examples
|
|
85
|
+
|
|
86
|
+
### Basic conversion (most common)
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
dcm2niix -z y -o ./nifti/ ./dicom/T1_MPRAGE/
|
|
90
|
+
# → produces T1_MPRAGE.nii.gz + T1_MPRAGE.json
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### fMRI / 4D conversion with BIDS-style naming
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
dcm2niix \
|
|
97
|
+
-o ./nifti/ \
|
|
98
|
+
-f "sub-001_ses-01_task-rest_bold" \
|
|
99
|
+
-z y -b y -t y \
|
|
100
|
+
./dicom/func_rest/
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Aggressive anonymization + compression
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
dcm2niix -z y -x n -o anonymized/ dicom_study/
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Convert entire study folder (auto-detect series)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
dcm2niix -z y -o nifti_all/ -b y ./patient_20250318/
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### NeuroClaw recommended wrapper (for agent consistency)
|
|
116
|
+
|
|
117
|
+
A thin python wrapper can be placed in the skill directory:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
# dcm2nii_wrapper.py
|
|
121
|
+
import subprocess
|
|
122
|
+
import argparse
|
|
123
|
+
|
|
124
|
+
parser = argparse.ArgumentParser()
|
|
125
|
+
parser.add_argument("--input-dir", required=True)
|
|
126
|
+
parser.add_argument("--output-dir", required=True)
|
|
127
|
+
parser.add_argument("--bids-prefix", default="sub-%p_ses-%t")
|
|
128
|
+
parser.add_argument("--compress", action="store_true")
|
|
129
|
+
parser.add_argument("--json-sidecar", action="store_true")
|
|
130
|
+
parser.add_argument("--anonymize", action="store_true")
|
|
131
|
+
|
|
132
|
+
args = parser.parse_args()
|
|
133
|
+
|
|
134
|
+
cmd = ["dcm2niix"]
|
|
135
|
+
if args.compress:
|
|
136
|
+
cmd += ["-z", "y"]
|
|
137
|
+
if args.json_sidecar:
|
|
138
|
+
cmd += ["-b", "y"]
|
|
139
|
+
if args.anonymize:
|
|
140
|
+
cmd += ["-x", "n"]
|
|
141
|
+
cmd += ["-o", args.output_dir]
|
|
142
|
+
cmd += ["-f", args.bids_prefix]
|
|
143
|
+
cmd += [args.input_dir]
|
|
144
|
+
|
|
145
|
+
subprocess.run(cmd, check=True)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
python dcm2nii_wrapper.py \
|
|
150
|
+
--input-dir ./dicom/T1/ \
|
|
151
|
+
--output-dir ./nifti/ \
|
|
152
|
+
--bids-prefix "sub-001_ses-01_T1w" \
|
|
153
|
+
--compress --json-sidecar
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Important Notes & Limitations
|
|
157
|
+
|
|
158
|
+
- Excellent support for MRI (GE, Siemens, Philips, Hitachi), CT, PET, XA
|
|
159
|
+
- 4D data (fMRI, DWI, ASL, perfusion) well handled
|
|
160
|
+
- Philips enhanced DICOM & private tags → very good parsing
|
|
161
|
+
- **Does NOT** convert RTSTRUCT / RTDOSE / SEG (use other tools)
|
|
162
|
+
- Compression requires pigz (faster) or internal deflate
|
|
163
|
+
- JSON sidecar contains most clinically relevant tags (BIDS-ish)
|
|
164
|
+
- Always **verify** output orientation & voxel size in viewer (FSLeyes, ITK-Snap, FreeSurfer)
|
|
165
|
+
- For very large studies → consider `-m y` + parallel runs
|
|
166
|
+
|
|
167
|
+
## When to Call This Skill
|
|
168
|
+
|
|
169
|
+
- Received clinical DICOM from hospital / scanner / collaborator
|
|
170
|
+
- Need to feed data into FSL, FreeSurfer, SPM, ANTs, nnU-Net, etc.
|
|
171
|
+
- Preparing dataset for BIDS conversion or deep learning training
|
|
172
|
+
- Want reliable metadata (TR, TE, flip angle, slice timing, phase encoding) in sidecar
|
|
173
|
+
- Batch-processing multiple subjects / sessions
|
|
174
|
+
|
|
175
|
+
## Complementary / Related Skills
|
|
176
|
+
|
|
177
|
+
- `dependency-planner` → install dependencies
|
|
178
|
+
|
|
179
|
+
## Reference
|
|
180
|
+
|
|
181
|
+
Original & latest: https://github.com/rordenlab/dcm2niix
|
|
182
|
+
Documentation: https://www.nitrc.org/plugins/mwiki/index.php/dcm2nii:MainPage
|
|
183
|
+
Maintainer: Chris Rorden
|
|
184
|
+
Core algorithm: dicom → NIfTI reorientation + private tag parsing
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
Created At: 2026-03-18 20:55 HKT
|
|
188
|
+
Last Updated At: 2026-03-25 20:53 HKT
|
|
189
|
+
Author: chengwang96
|