@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,185 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Extract features from SEED-VIG EEG data for vigilance detection.
|
|
3
|
+
|
|
4
|
+
Supports band power, Differential Entropy (DE), and connectivity features.
|
|
5
|
+
"""
|
|
6
|
+
import argparse
|
|
7
|
+
import csv
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Dict, List
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def compute_band_power(data: np.ndarray, sfreq: float = 200.0) -> np.ndarray:
|
|
16
|
+
"""Compute band power features.
|
|
17
|
+
|
|
18
|
+
Bands: delta (1-4), theta (4-8), alpha (8-14), beta (14-31), gamma (31-50).
|
|
19
|
+
"""
|
|
20
|
+
from scipy.signal import butter, filtfilt
|
|
21
|
+
|
|
22
|
+
bands = {
|
|
23
|
+
"delta": (1, 4),
|
|
24
|
+
"theta": (4, 8),
|
|
25
|
+
"alpha": (8, 14),
|
|
26
|
+
"beta": (14, 31),
|
|
27
|
+
"gamma": (31, 50),
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
n_channels = data.shape[0] if data.ndim > 1 else 1
|
|
31
|
+
features = np.zeros((n_channels, len(bands)))
|
|
32
|
+
|
|
33
|
+
for j, (band_name, (low, high)) in enumerate(bands.items()):
|
|
34
|
+
nyq = sfreq / 2.0
|
|
35
|
+
b, a = butter(4, [low / nyq, high / nyq], btype="band")
|
|
36
|
+
if data.ndim > 1:
|
|
37
|
+
for ch in range(n_channels):
|
|
38
|
+
filtered = filtfilt(b, a, data[ch])
|
|
39
|
+
features[ch, j] = np.log(np.var(filtered) + 1e-10)
|
|
40
|
+
else:
|
|
41
|
+
filtered = filtfilt(b, a, data)
|
|
42
|
+
features[0, j] = np.log(np.var(filtered) + 1e-10)
|
|
43
|
+
|
|
44
|
+
return features
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def compute_vigilance_ratio(data: np.ndarray, sfreq: float = 200.0) -> np.ndarray:
|
|
48
|
+
"""Compute vigilance-related spectral ratios.
|
|
49
|
+
|
|
50
|
+
Common ratios: theta/alpha, (theta+alpha)/beta, theta/beta.
|
|
51
|
+
"""
|
|
52
|
+
from scipy.signal import butter, filtfilt
|
|
53
|
+
|
|
54
|
+
def band_var(signal, low, high):
|
|
55
|
+
nyq = sfreq / 2.0
|
|
56
|
+
b, a = butter(4, [low / nyq, high / nyq], btype="band")
|
|
57
|
+
filtered = filtfilt(b, a, signal)
|
|
58
|
+
return np.var(filtered)
|
|
59
|
+
|
|
60
|
+
n_channels = data.shape[0] if data.ndim > 1 else 1
|
|
61
|
+
ratios = np.zeros((n_channels, 3))
|
|
62
|
+
|
|
63
|
+
for ch in range(n_channels if data.ndim > 1 else 1):
|
|
64
|
+
signal = data[ch] if data.ndim > 1 else data
|
|
65
|
+
theta = band_var(signal, 4, 8)
|
|
66
|
+
alpha = band_var(signal, 8, 14)
|
|
67
|
+
beta = band_var(signal, 14, 31)
|
|
68
|
+
|
|
69
|
+
ratios[ch, 0] = theta / (alpha + 1e-10) # theta/alpha
|
|
70
|
+
ratios[ch, 1] = (theta + alpha) / (beta + 1e-10) # (theta+alpha)/beta
|
|
71
|
+
ratios[ch, 2] = theta / (beta + 1e-10) # theta/beta
|
|
72
|
+
|
|
73
|
+
return ratios
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def load_eeg_file(path: Path) -> tuple:
|
|
77
|
+
"""Load EEG data from various formats."""
|
|
78
|
+
suffix = path.suffix.lower()
|
|
79
|
+
|
|
80
|
+
if suffix == ".mat":
|
|
81
|
+
import scipy.io as sio
|
|
82
|
+
mat = sio.loadmat(str(path))
|
|
83
|
+
for key in mat:
|
|
84
|
+
if not key.startswith("_") and isinstance(mat[key], np.ndarray) and mat[key].ndim >= 2:
|
|
85
|
+
return mat[key], 200.0
|
|
86
|
+
raise ValueError(f"No EEG data found in {path}")
|
|
87
|
+
|
|
88
|
+
elif suffix in (".edf", ".bdf"):
|
|
89
|
+
import mne
|
|
90
|
+
raw = mne.io.read_raw_edf(str(path), preload=True, verbose=False)
|
|
91
|
+
return raw.get_data(), raw.info["sfreq"]
|
|
92
|
+
|
|
93
|
+
elif suffix == ".set":
|
|
94
|
+
import mne
|
|
95
|
+
raw = mne.io.read_raw_eeglab(str(path), preload=True, verbose=False)
|
|
96
|
+
return raw.get_data(), raw.info["sfreq"]
|
|
97
|
+
|
|
98
|
+
elif suffix == ".vhdr":
|
|
99
|
+
import mne
|
|
100
|
+
raw = mne.io.read_raw_brainvision(str(path), preload=True, verbose=False)
|
|
101
|
+
return raw.get_data(), raw.info["sfreq"]
|
|
102
|
+
|
|
103
|
+
else:
|
|
104
|
+
raise ValueError(f"Unsupported EEG format: {suffix}")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def main() -> int:
|
|
108
|
+
parser = argparse.ArgumentParser(description="Extract SEED-VIG EEG features.")
|
|
109
|
+
parser.add_argument("--input", required=True, help="Path to SEED-VIG BIDS directory")
|
|
110
|
+
parser.add_argument("--output", required=True, help="Output directory for features")
|
|
111
|
+
parser.add_argument("--feature-type", choices=["bandpower", "ratio", "both"], default="both")
|
|
112
|
+
parser.add_argument("--subject", help="Process specific subject only")
|
|
113
|
+
parser.add_argument("--epoch-duration", type=float, default=4.0,
|
|
114
|
+
help="Epoch duration in seconds (default: 4.0)")
|
|
115
|
+
args = parser.parse_args()
|
|
116
|
+
|
|
117
|
+
input_dir = Path(args.input).resolve()
|
|
118
|
+
if not input_dir.exists():
|
|
119
|
+
print(f"Input directory not found: {input_dir}", file=sys.stderr)
|
|
120
|
+
return 1
|
|
121
|
+
|
|
122
|
+
output_dir = Path(args.output).resolve()
|
|
123
|
+
output_dir.mkdir(parents=True, exist_ok=True)
|
|
124
|
+
|
|
125
|
+
if args.subject:
|
|
126
|
+
subjects = [args.subject]
|
|
127
|
+
else:
|
|
128
|
+
subjects = sorted([d.name for d in input_dir.glob("sub-*") if d.is_dir()])
|
|
129
|
+
|
|
130
|
+
band_names = ["delta", "theta", "alpha", "beta", "gamma"]
|
|
131
|
+
ratio_names = ["theta_alpha", "theta_alpha_beta", "theta_beta"]
|
|
132
|
+
all_results = []
|
|
133
|
+
|
|
134
|
+
for subj in subjects:
|
|
135
|
+
subj_dir = input_dir / subj
|
|
136
|
+
eeg_files = list(subj_dir.rglob("*.edf")) + list(subj_dir.rglob("*.set")) + \
|
|
137
|
+
list(subj_dir.rglob("*.vhdr")) + list(subj_dir.rglob("*.mat"))
|
|
138
|
+
|
|
139
|
+
for eeg_file in eeg_files:
|
|
140
|
+
try:
|
|
141
|
+
data, sfreq = load_eeg_file(eeg_file)
|
|
142
|
+
epoch_samples = int(args.epoch_duration * sfreq)
|
|
143
|
+
n_epochs = data.shape[-1] // epoch_samples if data.ndim > 1 else len(data) // epoch_samples
|
|
144
|
+
|
|
145
|
+
for epoch_idx in range(n_epochs):
|
|
146
|
+
start = epoch_idx * epoch_samples
|
|
147
|
+
end = start + epoch_samples
|
|
148
|
+
epoch_data = data[..., start:end] if data.ndim > 1 else data[start:end]
|
|
149
|
+
|
|
150
|
+
if args.feature_type in ("bandpower", "both"):
|
|
151
|
+
bp = compute_band_power(epoch_data, sfreq)
|
|
152
|
+
row = {"subject": subj, "file": eeg_file.name, "epoch": epoch_idx, "feature": "bandpower"}
|
|
153
|
+
for ch_idx in range(bp.shape[0]):
|
|
154
|
+
for band_idx, band in enumerate(band_names):
|
|
155
|
+
row[f"ch{ch_idx}_{band}"] = f"{bp[ch_idx, band_idx]:.6f}"
|
|
156
|
+
all_results.append(row)
|
|
157
|
+
|
|
158
|
+
if args.feature_type in ("ratio", "both"):
|
|
159
|
+
ratios = compute_vigilance_ratio(epoch_data, sfreq)
|
|
160
|
+
row = {"subject": subj, "file": eeg_file.name, "epoch": epoch_idx, "feature": "ratio"}
|
|
161
|
+
for ch_idx in range(ratios.shape[0]):
|
|
162
|
+
for ratio_idx, ratio_name in enumerate(ratio_names):
|
|
163
|
+
row[f"ch{ch_idx}_{ratio_name}"] = f"{ratios[ch_idx, ratio_idx]:.6f}"
|
|
164
|
+
all_results.append(row)
|
|
165
|
+
|
|
166
|
+
except Exception as e:
|
|
167
|
+
print(f"[WARN] Failed to process {eeg_file}: {e}", file=sys.stderr)
|
|
168
|
+
|
|
169
|
+
if not all_results:
|
|
170
|
+
print("[ERROR] No features extracted.", file=sys.stderr)
|
|
171
|
+
return 1
|
|
172
|
+
|
|
173
|
+
output_path = output_dir / f"seed_vig_features_{args.feature_type}.csv"
|
|
174
|
+
fieldnames = list(all_results[0].keys())
|
|
175
|
+
with open(output_path, "w", newline="", encoding="utf-8") as f:
|
|
176
|
+
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
177
|
+
writer.writeheader()
|
|
178
|
+
writer.writerows(all_results)
|
|
179
|
+
|
|
180
|
+
print(f"Features: {len(all_results)} epochs, {len(fieldnames)} columns -> {output_path}")
|
|
181
|
+
return 0
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
if __name__ == "__main__":
|
|
185
|
+
sys.exit(main())
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Validate SEED-VIG BIDS structure and generate compliance report.
|
|
3
|
+
|
|
4
|
+
Checks directory structure, subject completeness, and EEG file presence.
|
|
5
|
+
"""
|
|
6
|
+
import argparse
|
|
7
|
+
import csv
|
|
8
|
+
import sys
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Dict, List
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def validate_subject(subject_dir: Path) -> Dict[str, any]:
|
|
14
|
+
report = {
|
|
15
|
+
"subject": subject_dir.name,
|
|
16
|
+
"eeg_present": False,
|
|
17
|
+
"n_eeg_files": 0,
|
|
18
|
+
"vigilance_labels": False,
|
|
19
|
+
"missing_files": [],
|
|
20
|
+
"warnings": [],
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
eeg_dir = subject_dir / "eeg"
|
|
24
|
+
if eeg_dir.exists():
|
|
25
|
+
eeg_files = list(eeg_dir.glob("*.edf")) + list(eeg_dir.glob("*.set")) + \
|
|
26
|
+
list(eeg_dir.glob("*.vhdr")) + list(eeg_dir.glob("*.mat"))
|
|
27
|
+
report["n_eeg_files"] = len(eeg_files)
|
|
28
|
+
report["eeg_present"] = len(eeg_files) > 0
|
|
29
|
+
|
|
30
|
+
# Check for vigilance labels
|
|
31
|
+
events = list(eeg_dir.glob("*_events.tsv"))
|
|
32
|
+
report["vigilance_labels"] = len(events) > 0
|
|
33
|
+
|
|
34
|
+
if not eeg_files:
|
|
35
|
+
report["missing_files"].append("eeg/*.{edf,set,vhdr,mat}")
|
|
36
|
+
else:
|
|
37
|
+
report["missing_files"].append("eeg/")
|
|
38
|
+
|
|
39
|
+
return report
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def main() -> int:
|
|
43
|
+
parser = argparse.ArgumentParser(description="Validate SEED-VIG BIDS structure.")
|
|
44
|
+
parser.add_argument("--input", required=True)
|
|
45
|
+
parser.add_argument("--output", required=True)
|
|
46
|
+
args = parser.parse_args()
|
|
47
|
+
|
|
48
|
+
input_dir = Path(args.input).resolve()
|
|
49
|
+
if not input_dir.exists():
|
|
50
|
+
print(f"Input directory not found: {input_dir}", file=sys.stderr)
|
|
51
|
+
return 1
|
|
52
|
+
|
|
53
|
+
subjects = sorted([d for d in input_dir.glob("sub-*") if d.is_dir()])
|
|
54
|
+
print(f"Found {len(subjects)} subjects in {input_dir}")
|
|
55
|
+
|
|
56
|
+
if not subjects:
|
|
57
|
+
print("[ERROR] No subjects found.", file=sys.stderr)
|
|
58
|
+
return 1
|
|
59
|
+
|
|
60
|
+
results = []
|
|
61
|
+
for sub_dir in subjects:
|
|
62
|
+
report = validate_subject(sub_dir)
|
|
63
|
+
results.append(report)
|
|
64
|
+
|
|
65
|
+
output_path = Path(args.output).resolve()
|
|
66
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
67
|
+
|
|
68
|
+
fieldnames = ["subject", "eeg_present", "n_eeg_files", "vigilance_labels", "missing_files", "warnings"]
|
|
69
|
+
with open(output_path, "w", newline="", encoding="utf-8") as f:
|
|
70
|
+
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
71
|
+
writer.writeheader()
|
|
72
|
+
for r in results:
|
|
73
|
+
r["missing_files"] = "; ".join(r["missing_files"])
|
|
74
|
+
r["warnings"] = "; ".join(r["warnings"])
|
|
75
|
+
writer.writerow(r)
|
|
76
|
+
|
|
77
|
+
print(f"\nValidation Summary:")
|
|
78
|
+
print(f" Total subjects: {len(results)}")
|
|
79
|
+
print(f" With EEG: {sum(1 for r in results if r['eeg_present'])}")
|
|
80
|
+
print(f" With vigilance labels: {sum(1 for r in results if r['vigilance_labels'])}")
|
|
81
|
+
print(f" Total EEG files: {sum(r['n_eeg_files'] for r in results)}")
|
|
82
|
+
print(f" Output: {output_path}")
|
|
83
|
+
|
|
84
|
+
return 0
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
if __name__ == "__main__":
|
|
88
|
+
sys.exit(main())
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: abcd-skill
|
|
3
|
+
description: "Use this skill whenever the user wants an end-to-end workflow for the ABCD Study dataset, including download via NIMH Data Archive, BIDS organization, and multimodal processing of sMRI, fMRI, and dMRI. Triggers include: 'ABCD Study', 'ABCD data', 'process ABCD', 'ABCD fMRI', 'ABCD sMRI', 'ABCD diffusion', or any request to run the ABCD multimodal pipeline. This is the NeuroClaw dataset-orchestration layer for ABCD."
|
|
4
|
+
license: MIT License (NeuroClaw custom skill - freely modifiable within the project)
|
|
5
|
+
layer: subagent
|
|
6
|
+
skill_type: dataset
|
|
7
|
+
dependencies:
|
|
8
|
+
- smri-skill
|
|
9
|
+
- fmri-skill
|
|
10
|
+
- dwi-skill
|
|
11
|
+
- bids-organizer
|
|
12
|
+
- claw-shell
|
|
13
|
+
---
|
|
14
|
+
# ABCD Skill (Dataset-Orchestration Layer)
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
`abcd-skill` is the NeuroClaw orchestration skill for the **ABCD Study (Adolescent Brain Cognitive Development)** dataset.
|
|
18
|
+
|
|
19
|
+
It coordinates a fixed three-phase workflow:
|
|
20
|
+
1. Download ABCD data from the NIMH Data Archive (NDA).
|
|
21
|
+
2. Prepare and validate BIDS-style data organization for downstream processing.
|
|
22
|
+
3. Delegate modality pipelines to `smri-skill`, `fmri-skill`, and `dwi-skill`.
|
|
23
|
+
|
|
24
|
+
It also provides **phenotype extraction** and **QC integration** paths:
|
|
25
|
+
- Extract and merge ABCD phenotype tables (mental health, cognition, substance use, etc.).
|
|
26
|
+
- Generate per-subject QC summaries with exclusion lists.
|
|
27
|
+
|
|
28
|
+
This skill follows NeuroClaw hierarchy:
|
|
29
|
+
- Defines **WHAT to do**, not low-level implementation details.
|
|
30
|
+
- Does **not** execute direct shell commands itself.
|
|
31
|
+
- Delegates all execution via `claw-shell` to base/tool skills.
|
|
32
|
+
|
|
33
|
+
**Research use only.**
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Download Stage (Mandatory First Step)
|
|
38
|
+
|
|
39
|
+
### Source
|
|
40
|
+
ABCD data is distributed through the **NIMH Data Archive (NDA)**:
|
|
41
|
+
- Website: https://abcdstudy.org/
|
|
42
|
+
- Data access: https://nda.nih.gov/ (requires NDA account and data use agreement)
|
|
43
|
+
|
|
44
|
+
### Supported ABCD Data Packages
|
|
45
|
+
- **ABCD Study 5.1** (latest release): includes imaging, phenotype, and biospecimen data
|
|
46
|
+
- **Imaging data**: T1w, T2w, dMRI, rs-fMRI, task-fMRI (NIfTI format)
|
|
47
|
+
- **Phenotype data**: tab-delimited files (abcd_p_tab, mental_health, cbcl, etc.)
|
|
48
|
+
- **Derived imaging data**: FreeSurfer, fMRIPrep outputs (if available from NDA)
|
|
49
|
+
|
|
50
|
+
### Delegation Rules for Download
|
|
51
|
+
- Environment/setup checks: `dependency-planner` + `conda-env-manager`
|
|
52
|
+
- NDA download tool installation and execution: `claw-shell`
|
|
53
|
+
- Optional raw-data organization to BIDS-style staging: `bids-organizer`
|
|
54
|
+
|
|
55
|
+
### Download Inputs to Confirm in Plan
|
|
56
|
+
- NDA credentials/authorized access
|
|
57
|
+
- Target data package (imaging only, phenotype only, or both)
|
|
58
|
+
- Subject list scope (full cohort or custom subset)
|
|
59
|
+
- ABCD release version (e.g., 5.1)
|
|
60
|
+
- Destination directory with sufficient disk space (ABCD imaging data can exceed 10 TB for full cohort)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Narrow Path: ABCD Raw NIfTI -> BIDS Staging
|
|
65
|
+
|
|
66
|
+
Use this path when the task only asks to reorganize raw ABCD NIfTI files into a BIDS-style dataset and does not require preprocessing, ROI extraction, phenotype merging, or downstream analysis.
|
|
67
|
+
|
|
68
|
+
### When this narrow path should dominate
|
|
69
|
+
- The task objective is limited to ABCD NIfTI staging, BIDS renaming, sidecar handling, and dataset-level metadata.
|
|
70
|
+
- Inputs are already local ABCD NIfTI files or ABCD-style subject/session folders.
|
|
71
|
+
- The required deliverable is a direct staging script or command sequence, not a plan for fMRIPrep or downstream analysis.
|
|
72
|
+
|
|
73
|
+
### Narrow-path contract
|
|
74
|
+
- Do not widen the solution to fMRIPrep, ROI extraction, phenotype merging, or downstream analysis unless the task explicitly requires them.
|
|
75
|
+
- Treat this as a direct file-organization problem: scan ABCD subject/session layout, normalize subject labels, map modalities to BIDS names, copy or symlink NIfTI plus matching sidecars, and write dataset-level metadata plus staging logs.
|
|
76
|
+
- If the task is benchmark-style, prefer a single direct end-to-end staging script over a confirmation-first orchestration plan.
|
|
77
|
+
|
|
78
|
+
### Expected narrow-path behavior
|
|
79
|
+
1. Detect ABCD-style subject IDs (NDAR format, e.g., `NDAR_INVXXXXXXXX`) and normalize to BIDS labels such as `sub-NDARINVXXXXXXXX`.
|
|
80
|
+
2. Detect visit/timepoint information and normalize to session labels such as `ses-baselineYear1Arm1`, `ses-2YearFollowUpYArm1`, etc.
|
|
81
|
+
3. Route modalities:
|
|
82
|
+
- T1w -> `anat/*_T1w`
|
|
83
|
+
- T2w -> `anat/*_T2w`
|
|
84
|
+
- dMRI/DWI -> `dwi/*_dwi`
|
|
85
|
+
- rs-fMRI -> `func/*_task-rest_bold`
|
|
86
|
+
- task-fMRI -> `func/*_task-<taskname>_bold`
|
|
87
|
+
4. Preserve or rename matching JSON sidecars when available; if metadata is absent, create only the minimal dataset files required by the task and log the limitation.
|
|
88
|
+
5. Emit dataset-level outputs such as `dataset_description.json`, `participants.tsv`, `README`, and a manifest or skipped-file report.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Core Workflow (Never Bypassed)
|
|
93
|
+
1. Identify user target: full ABCD download, imaging subset, phenotype extraction, or BIDS staging only.
|
|
94
|
+
2. Generate a numbered plan with tools, outputs, runtime, storage, and risks.
|
|
95
|
+
3. Wait for explicit confirmation (`YES` / `execute` / `proceed`).
|
|
96
|
+
4. On confirmation, run download stage first (if needed).
|
|
97
|
+
5. After download success, run BIDS preparation using `scripts/reorganize_abcd.py`.
|
|
98
|
+
6. Delegate sequentially or in parallel to:
|
|
99
|
+
- `smri-skill` for structural MRI (T1w, T2w)
|
|
100
|
+
- `fmri-skill` for functional MRI (rs-fMRI, task-fMRI)
|
|
101
|
+
- `dwi-skill` for diffusion MRI (dMRI)
|
|
102
|
+
7. If phenotype extraction is requested, run `scripts/extract_abcd_phenotype.py`.
|
|
103
|
+
8. If QC summary is requested, run `scripts/abcd_qc_summary.py`.
|
|
104
|
+
9. Save outputs into an ABCD-centered structure under `abcd_output/`.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Input Layout (Example)
|
|
109
|
+
|
|
110
|
+
Subject `NDAR_INVXXXXXXXX` (multimodal imaging + phenotype):
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
abcd_raw/
|
|
114
|
+
ndar_subject01/
|
|
115
|
+
baselineYear1Arm1/
|
|
116
|
+
T1w/
|
|
117
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_T1w.nii.gz
|
|
118
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_T1w.json
|
|
119
|
+
T2w/
|
|
120
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_T2w.nii.gz
|
|
121
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_T2w.json
|
|
122
|
+
dwi/
|
|
123
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_dwi.nii.gz
|
|
124
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_dwi.bval
|
|
125
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_dwi.bvec
|
|
126
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_dwi.json
|
|
127
|
+
func/
|
|
128
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_task-rest_bold.nii.gz
|
|
129
|
+
sub-NDARINVXXXXXXXX_ses-baselineYear1Arm1_task-rest_bold.json
|
|
130
|
+
phenotype/
|
|
131
|
+
abcd_p_tab.csv
|
|
132
|
+
mental_health.csv
|
|
133
|
+
cbcl.csv
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## BIDS Preparation
|
|
139
|
+
|
|
140
|
+
### Script: `scripts/reorganize_abcd.py`
|
|
141
|
+
|
|
142
|
+
Converts ABCD raw directory structure to BIDS-compliant layout.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
python skills/abcd-skill/scripts/reorganize_abcd.py \
|
|
146
|
+
--input /path/to/abcd_raw \
|
|
147
|
+
--output /path/to/abcd_bids \
|
|
148
|
+
--participants-file /path/to/abcd_raw/phenotype/abcd_p_tab.csv
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Features:
|
|
152
|
+
- Subject ID normalization: NDAR format to BIDS `sub-NDARINVXXXXXXXX`
|
|
153
|
+
- Session mapping: ABCD event names to BIDS `ses-` labels
|
|
154
|
+
- Modality routing: T1w, T2w, dMRI, rs-fMRI, task-fMRI
|
|
155
|
+
- Sidecar JSON preservation and validation
|
|
156
|
+
- `dataset_description.json` and `participants.tsv` generation
|
|
157
|
+
- Dry-run mode: `--dry-run` to preview without copying
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Multimodal Processing Delegation
|
|
162
|
+
|
|
163
|
+
After BIDS staging completes, `abcd-skill` delegates by modality:
|
|
164
|
+
|
|
165
|
+
| Modality | Delegated skill | Typical tasks | Main outputs |
|
|
166
|
+
|---|---|---|---|
|
|
167
|
+
| sMRI (T1w/T2w) | `smri-skill` | brain extraction, tissue segmentation, cortical reconstruction, ROI morphometry | `smri_output/` derivatives and stats |
|
|
168
|
+
| fMRI (rs-fMRI/task-fMRI) | `fmri-skill` | preprocessing, denoising, ROI time series, connectivity | `fmri_output/` derivatives, timeseries, connectivity |
|
|
169
|
+
| dMRI | `dwi-skill` | diffusion preprocessing, tensor metrics, tractography/connectome | `dwi_output/` metrics and tract files |
|
|
170
|
+
|
|
171
|
+
### Delegation Strategy
|
|
172
|
+
- If user asks for full multimodal ABCD analysis: run sMRI -> fMRI -> dMRI in ordered phases.
|
|
173
|
+
- If user asks for one modality only: call only the corresponding modality skill.
|
|
174
|
+
- If compute resources are adequate and the user approves parallel runs: run modality pipelines in parallel after shared prerequisites are ready.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Phenotype Extraction
|
|
179
|
+
|
|
180
|
+
### Script: `scripts/extract_abcd_phenotype.py`
|
|
181
|
+
|
|
182
|
+
Extracts and merges ABCD phenotype tables for downstream analysis.
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
python skills/abcd-skill/scripts/extract_abcd_phenotype.py \
|
|
186
|
+
--phenotype-dir /path/to/abcd_raw/phenotype \
|
|
187
|
+
--output /path/to/abcd_output/phenotype/merged_phenotype.csv \
|
|
188
|
+
--columns src_subject_id,eventname,sex,age,cbcl_total,ksads_dx \
|
|
189
|
+
--imaging-ids /path/to/abcd_output/bids/participants.tsv
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Features:
|
|
193
|
+
- Reads ABCD tab-delimited phenotype files
|
|
194
|
+
- Column selection and renaming
|
|
195
|
+
- Visit/event alignment (baselineYear1Arm1, 2YearFollowUpYArm1, etc.)
|
|
196
|
+
- Missing value handling (filter or impute)
|
|
197
|
+
- Cross-reference with imaging subject list to keep only subjects with both imaging and phenotype data
|
|
198
|
+
- Outputs merged CSV ready for statistical analysis or model training
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## QC Integration
|
|
203
|
+
|
|
204
|
+
### Script: `scripts/abcd_qc_summary.py`
|
|
205
|
+
|
|
206
|
+
Generates per-subject QC summaries and exclusion lists.
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
python skills/abcd-skill/scripts/abcd_qc_summary.py \
|
|
210
|
+
--fmriprep-dir /path/to/abcd_output/fmriprep \
|
|
211
|
+
--freesurfer-dir /path/to/abcd_output/smri/freesurfer \
|
|
212
|
+
--raw-qc /path/to/abcd_raw/phenotype/abcd_imgincl01.csv \
|
|
213
|
+
--output /path/to/abcd_output/qc/qc_summary.csv \
|
|
214
|
+
--exclude-output /path/to/abcd_output/qc/exclude_list.csv \
|
|
215
|
+
--fd-threshold 0.3 \
|
|
216
|
+
--coverage-threshold 0.8
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Features:
|
|
220
|
+
- Reads fMRIPrep confounds (framewise displacement, DVARS)
|
|
221
|
+
- Reads FreeSurfer recon-all QC metrics
|
|
222
|
+
- Incorporates ABCD native QC flags (imgincl01: include_t1, include_dti, etc.)
|
|
223
|
+
- Applies exclusion criteria: motion threshold (FD), coverage threshold, structural quality
|
|
224
|
+
- Outputs per-subject QC summary CSV and exclusion list CSV
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Recommended Output Layout
|
|
229
|
+
All assets should be organized under `./abcd_output/`:
|
|
230
|
+
- `abcd_output/raw/` (downloaded original ABCD files)
|
|
231
|
+
- `abcd_output/bids/` (staged BIDS data)
|
|
232
|
+
- `abcd_output/staging/` (optional normalized staging intermediate)
|
|
233
|
+
- `abcd_output/smri/` (links or copies from `smri_output/`)
|
|
234
|
+
- `abcd_output/fmri/` (links or copies from `fmri_output/`)
|
|
235
|
+
- `abcd_output/dwi/` (links or copies from `dwi_output/`)
|
|
236
|
+
- `abcd_output/phenotype/` (merged phenotype tables)
|
|
237
|
+
- `abcd_output/qc/` (QC summaries and exclusion lists)
|
|
238
|
+
- `abcd_output/logs/` (download + orchestration logs)
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Benchmark Adapter Guidance
|
|
243
|
+
|
|
244
|
+
For benchmark-style prompts, do not force the full `download -> staging -> multimodal processing` orchestration when the task is only asking for local ABCD data staging or organization.
|
|
245
|
+
|
|
246
|
+
- If the task starts from raw ABCD data already present on disk and only asks for BIDS-style staging / organization:
|
|
247
|
+
- skip the mandatory download stage
|
|
248
|
+
- do not automatically delegate to `smri-skill`, `fmri-skill`, or `dwi-skill`
|
|
249
|
+
- default to the narrow path `local raw ABCD discovery -> BIDS-style staging -> minimal metadata -> validation/report`
|
|
250
|
+
- In benchmark mode, do not require explicit confirmation before presenting the direct staging solution.
|
|
251
|
+
- Preserve the ABCD-centered output contract under `abcd_output/bids/` when the task is specifically a staging benchmark.
|
|
252
|
+
- Only use the full multimodal orchestration and confirmation-heavy workflow when the prompt explicitly asks for download, end-to-end multimodal ABCD processing, or post-staging structural / functional / diffusion analysis.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Safety and Execution Policy
|
|
257
|
+
- No execution before explicit plan confirmation.
|
|
258
|
+
- All execution must be routed via `claw-shell`.
|
|
259
|
+
- Missing dependencies must be resolved by `dependency-planner` before running.
|
|
260
|
+
- If download fails for partial subjects, continue batch with clear failure report and retry list.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Important Notes and Limitations
|
|
265
|
+
- ABCD multimodal processing is resource intensive (CPU, RAM, and storage). Full cohort imaging data exceeds 10 TB.
|
|
266
|
+
- NDA download requires authenticated access and compliance with the ABCD Data Use Agreement.
|
|
267
|
+
- ABCD subject IDs use NDAR format; normalization to BIDS labels must be consistent across all stages.
|
|
268
|
+
- ABCD has multiple follow-up timepoints (baselineYear1Arm1 through 4YearFollowUpYArm1); session handling must account for longitudinal structure.
|
|
269
|
+
- ABCD phenotype tables use tab-delimited format with specific column naming conventions; column names may change across releases.
|
|
270
|
+
- `abcd-skill` is orchestration-only; detailed preprocessing logic remains in `smri-skill`, `fmri-skill`, and `dwi-skill`.
|
|
271
|
+
- For highest-fidelity preprocessing, optionally delegate to `fmriprep-tool` and `hcppipeline-tool` as alternative routes.
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## When to Call This Skill
|
|
276
|
+
- User asks for end-to-end ABCD Study workflow.
|
|
277
|
+
- User asks to download ABCD data and then run sMRI/fMRI/dMRI processing.
|
|
278
|
+
- User needs BIDS staging for raw ABCD NIfTI files.
|
|
279
|
+
- User asks to extract and merge ABCD phenotype tables.
|
|
280
|
+
- User asks for ABCD-specific QC summaries and exclusion lists.
|
|
281
|
+
- User needs a single entry point for ABCD multimodal orchestration.
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Complementary / Related Skills
|
|
286
|
+
- `smri-skill`
|
|
287
|
+
- `fmri-skill`
|
|
288
|
+
- `dwi-skill`
|
|
289
|
+
- `bids-organizer`
|
|
290
|
+
- `fmriprep-tool`
|
|
291
|
+
- `freesurfer-tool`
|
|
292
|
+
- `neurostorm`
|
|
293
|
+
- `brain_gnn`
|
|
294
|
+
- `dependency-planner`
|
|
295
|
+
- `conda-env-manager`
|
|
296
|
+
- `claw-shell`
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Reference
|
|
301
|
+
- ABCD Study: https://abcdstudy.org/
|
|
302
|
+
- NIMH Data Archive: https://nda.nih.gov/
|
|
303
|
+
- ABCD BIDS App: https://github.com/ABCD-STUDY/abcd-bids-tfmri
|
|
304
|
+
- BIDS spec: https://bids.neuroimaging.io/
|
|
305
|
+
|
|
306
|
+
Created At: 2026-05-06 01:30 HKT
|
|
307
|
+
Last Updated At: 2026-05-06 01:30 HKT
|
|
308
|
+
Author: chengwang96
|