@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.
Files changed (285) hide show
  1. package/package.json +2 -2
  2. package/skills/01_Meta-Skills/academic-research-hub/SKILL.md +108 -0
  3. package/skills/01_Meta-Skills/academic-research-hub/scripts/requirements.txt +17 -0
  4. package/skills/01_Meta-Skills/academic-research-hub/scripts/research.py +781 -0
  5. package/skills/01_Meta-Skills/beautiful-log/SKILL.md +64 -0
  6. package/skills/01_Meta-Skills/beautiful-log/scripts/beautiful_log.py +274 -0
  7. package/skills/01_Meta-Skills/ethoclaw-daily-paper/SKILL.md +130 -0
  8. package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/config.template.yaml +54 -0
  9. package/skills/01_Meta-Skills/ethoclaw-daily-paper/assets/top5_digest_template.md +5 -0
  10. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/build_top5_digest.py +300 -0
  11. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/common.py +137 -0
  12. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/merge_results.py +106 -0
  13. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/run_pipeline.py +177 -0
  14. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_arxiv.py +162 -0
  15. package/skills/01_Meta-Skills/ethoclaw-daily-paper/scripts/search_pubmed.py +202 -0
  16. package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/SKILL.md +173 -0
  17. package/skills/01_Meta-Skills/ethoclaw-normalize-tabular/scripts/normalize_data.py +874 -0
  18. package/skills/01_Meta-Skills/ethoclaw-pdf-research/SKILL.md +134 -0
  19. package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/confirmation-prompts.md +31 -0
  20. package/skills/01_Meta-Skills/ethoclaw-pdf-research/references/output-patterns.md +45 -0
  21. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_markdown_deliverables.py +41 -0
  22. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_research_log.py +84 -0
  23. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/build_summary_md.py +63 -0
  24. package/skills/01_Meta-Skills/ethoclaw-pdf-research/scripts/extract_pdf_bundle.py +140 -0
  25. package/skills/01_Meta-Skills/experiment-controller/SKILL.md +140 -0
  26. package/skills/01_Meta-Skills/knowledge-graph-builder/SKILL.md +366 -0
  27. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/entity_resolution.py +120 -0
  28. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/extraction_prompt_template.txt +19 -0
  29. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/graph_query.py +106 -0
  30. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/hypothesis_cli_reference.py +42 -0
  31. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/new_data_source_template.py +116 -0
  32. package/skills/01_Meta-Skills/knowledge-graph-builder/scripts/requirements.txt +15 -0
  33. package/skills/01_Meta-Skills/method-design/SKILL.md +61 -0
  34. package/skills/01_Meta-Skills/multi-search-engine/SKILL.md +119 -0
  35. package/skills/01_Meta-Skills/research-idea/SKILL.md +65 -0
  36. package/skills/05_EEG_ERP/eeg-skill/SKILL.md +197 -0
  37. package/skills/05_EEG_ERP/meg-skill/SKILL.md +188 -0
  38. package/skills/05_EEG_ERP/meg-skill/scripts/time_frequency.py +223 -0
  39. package/skills/05_EEG_ERP/mne-eeg-tool/SKILL.md +165 -0
  40. package/skills/05_EEG_ERP/mne-eeg-tool/scripts/eeg_pipeline_reference.py +231 -0
  41. package/skills/05_EEG_ERP/seed-iv-skill/SKILL.md +184 -0
  42. package/skills/05_EEG_ERP/seed-iv-skill/scripts/classify_seed_iv.py +154 -0
  43. package/skills/05_EEG_ERP/seed-iv-skill/scripts/extract_seed_iv_features.py +190 -0
  44. package/skills/05_EEG_ERP/seed-iv-skill/scripts/validate_seed_iv.py +102 -0
  45. package/skills/05_EEG_ERP/seed-vig-skill/SKILL.md +182 -0
  46. package/skills/05_EEG_ERP/seed-vig-skill/scripts/classify_seed_vig.py +165 -0
  47. package/skills/05_EEG_ERP/seed-vig-skill/scripts/extract_seed_vig_features.py +185 -0
  48. package/skills/05_EEG_ERP/seed-vig-skill/scripts/validate_seed_vig.py +88 -0
  49. package/skills/06_fMRI_Neuroimaging/abcd-skill/SKILL.md +308 -0
  50. package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/abcd_qc_summary.py +449 -0
  51. package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/extract_abcd_phenotype.py +292 -0
  52. package/skills/06_fMRI_Neuroimaging/abcd-skill/scripts/reorganize_abcd.py +387 -0
  53. package/skills/06_fMRI_Neuroimaging/abide-skill/SKILL.md +302 -0
  54. package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/abide_qc_summary.py +317 -0
  55. package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/extract_abide_phenotype.py +267 -0
  56. package/skills/06_fMRI_Neuroimaging/abide-skill/scripts/reorganize_abide.py +387 -0
  57. package/skills/06_fMRI_Neuroimaging/adhd200-skill/SKILL.md +244 -0
  58. package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/adhd200_qc_summary.py +98 -0
  59. package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/extract_adhd200_phenotype.py +134 -0
  60. package/skills/06_fMRI_Neuroimaging/adhd200-skill/scripts/reorganize_adhd200.py +206 -0
  61. package/skills/06_fMRI_Neuroimaging/adni-skill/SKILL.md +358 -0
  62. package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_adni_task_files.py +1305 -0
  63. package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/generate_vqa_from_tasks.py +766 -0
  64. package/skills/06_fMRI_Neuroimaging/adni-skill/scripts/reorganize_adni.py +491 -0
  65. package/skills/06_fMRI_Neuroimaging/aibl-skill/SKILL.md +295 -0
  66. package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/aibl_qc_summary.py +260 -0
  67. package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/extract_aibl_phenotype.py +365 -0
  68. package/skills/06_fMRI_Neuroimaging/aibl-skill/scripts/reorganize_aibl.py +394 -0
  69. package/skills/06_fMRI_Neuroimaging/aomic-skill/SKILL.md +292 -0
  70. package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/aomic_qc_summary.py +258 -0
  71. package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/extract_aomic_phenotype.py +284 -0
  72. package/skills/06_fMRI_Neuroimaging/aomic-skill/scripts/reorganize_aomic.py +322 -0
  73. package/skills/06_fMRI_Neuroimaging/asl-skill/SKILL.md +168 -0
  74. package/skills/06_fMRI_Neuroimaging/asl-skill/scripts/compute_cbf.py +224 -0
  75. package/skills/06_fMRI_Neuroimaging/bids-organizer/SKILL.md +241 -0
  76. package/skills/06_fMRI_Neuroimaging/bold5000-skill/SKILL.md +186 -0
  77. package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/bold5000_qc_summary.py +96 -0
  78. package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/extract_bold5000_stimulus.py +125 -0
  79. package/skills/06_fMRI_Neuroimaging/bold5000-skill/scripts/reorganize_bold5000.py +102 -0
  80. package/skills/06_fMRI_Neuroimaging/camcan-skill/SKILL.md +213 -0
  81. package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/camcan_qc_summary.py +131 -0
  82. package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/extract_camcan_phenotype.py +145 -0
  83. package/skills/06_fMRI_Neuroimaging/camcan-skill/scripts/validate_camcan.py +141 -0
  84. package/skills/06_fMRI_Neuroimaging/cobre-skill/SKILL.md +201 -0
  85. package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/cobre_qc_summary.py +95 -0
  86. package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/extract_cobre_phenotype.py +104 -0
  87. package/skills/06_fMRI_Neuroimaging/cobre-skill/scripts/reorganize_cobre.py +140 -0
  88. package/skills/06_fMRI_Neuroimaging/conn-tool/SKILL.md +180 -0
  89. package/skills/06_fMRI_Neuroimaging/dcm2nii/SKILL.md +189 -0
  90. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/SKILL.md +183 -0
  91. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/dmt_har_med_qc_summary.py +96 -0
  92. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/extract_dmt_har_med_phenotype.py +121 -0
  93. package/skills/06_fMRI_Neuroimaging/dmt-har-med-skill/scripts/reorganize_dmt_har_med.py +125 -0
  94. package/skills/06_fMRI_Neuroimaging/dwi-skill/SKILL.md +359 -0
  95. package/skills/06_fMRI_Neuroimaging/fmri-skill/SKILL.md +371 -0
  96. package/skills/06_fMRI_Neuroimaging/fmriprep-tool/SKILL.md +228 -0
  97. package/skills/06_fMRI_Neuroimaging/freesurfer-tool/SKILL.md +286 -0
  98. package/skills/06_fMRI_Neuroimaging/freesurfer-tool/scripts/freesurfer_processor.py +145 -0
  99. package/skills/06_fMRI_Neuroimaging/fsl-tool/SKILL.md +208 -0
  100. package/skills/06_fMRI_Neuroimaging/hbn-skill/SKILL.md +271 -0
  101. package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/extract_hbn_phenotype.py +107 -0
  102. package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/hbn_qc_summary.py +96 -0
  103. package/skills/06_fMRI_Neuroimaging/hbn-skill/scripts/reorganize_hbn.py +150 -0
  104. package/skills/06_fMRI_Neuroimaging/hcpa-skill/SKILL.md +210 -0
  105. package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/extract_hcpa_phenotype.py +146 -0
  106. package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/hcpa_qc_summary.py +120 -0
  107. package/skills/06_fMRI_Neuroimaging/hcpa-skill/scripts/reorganize_hcpa.py +155 -0
  108. package/skills/06_fMRI_Neuroimaging/hcpd-skill/SKILL.md +210 -0
  109. package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/extract_hcpd_phenotype.py +148 -0
  110. package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/hcpd_qc_summary.py +125 -0
  111. package/skills/06_fMRI_Neuroimaging/hcpd-skill/scripts/reorganize_hcpd.py +146 -0
  112. package/skills/06_fMRI_Neuroimaging/hcpep-skill/SKILL.md +215 -0
  113. package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/extract_hcpep_phenotype.py +157 -0
  114. package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/hcpep_qc_summary.py +143 -0
  115. package/skills/06_fMRI_Neuroimaging/hcpep-skill/scripts/reorganize_hcpep.py +146 -0
  116. package/skills/06_fMRI_Neuroimaging/hcppipeline-tool/SKILL.md +217 -0
  117. package/skills/06_fMRI_Neuroimaging/hcpya-skill/SKILL.md +214 -0
  118. package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/extract_hcpya_phenotype.py +190 -0
  119. package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/hcpya_qc_summary.py +152 -0
  120. package/skills/06_fMRI_Neuroimaging/hcpya-skill/scripts/reorganize_hcpya.py +203 -0
  121. package/skills/06_fMRI_Neuroimaging/ixi-skill/SKILL.md +198 -0
  122. package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/ixi_qc_summary.py +137 -0
  123. package/skills/06_fMRI_Neuroimaging/ixi-skill/scripts/reorganize_ixi.py +190 -0
  124. package/skills/06_fMRI_Neuroimaging/mnd-skill/SKILL.md +191 -0
  125. package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/extract_mnd_phenotype.py +143 -0
  126. package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/mnd_qc_summary.py +120 -0
  127. package/skills/06_fMRI_Neuroimaging/mnd-skill/scripts/validate_mnd.py +107 -0
  128. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/SKILL.md +203 -0
  129. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/analyze_lesions.py +119 -0
  130. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/longitudinal_lesion.py +148 -0
  131. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/mschallenge_qc_summary.py +132 -0
  132. package/skills/06_fMRI_Neuroimaging/mschallenge-skill/scripts/validate_mschallenge.py +116 -0
  133. package/skills/06_fMRI_Neuroimaging/nibabel-skill/SKILL.md +184 -0
  134. package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/atlas_coordinate_reference.py +61 -0
  135. package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/freesurfer_io_reference.py +34 -0
  136. package/skills/06_fMRI_Neuroimaging/nibabel-skill/scripts/nifti_inspection_reference.py +35 -0
  137. package/skills/06_fMRI_Neuroimaging/nifd-skill/SKILL.md +205 -0
  138. package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/extract_nifd_phenotype.py +132 -0
  139. package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/nifd_qc_summary.py +111 -0
  140. package/skills/06_fMRI_Neuroimaging/nifd-skill/scripts/validate_nifd.py +111 -0
  141. package/skills/06_fMRI_Neuroimaging/nii2dcm/SKILL.md +143 -0
  142. package/skills/06_fMRI_Neuroimaging/nilearn-tool/SKILL.md +266 -0
  143. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/connectome_reference.py +65 -0
  144. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/denoise_timeseries_reference.py +58 -0
  145. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/hierarchical_parcellation_reference.py +53 -0
  146. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/kmeans_parcellation_reference.py +53 -0
  147. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/preprocess_bold_reference.py +76 -0
  148. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_dictlearning_reference.py +56 -0
  149. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/rest_ica_reference.py +59 -0
  150. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/second_level_glm_reference.py +58 -0
  151. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/spacenet_classifier_reference.py +59 -0
  152. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/svm_classifier_reference.py +60 -0
  153. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/task_glm_reference.py +63 -0
  154. package/skills/06_fMRI_Neuroimaging/nilearn-tool/scripts/zalff_summary_reference.py +109 -0
  155. package/skills/06_fMRI_Neuroimaging/nsd-skill/SKILL.md +210 -0
  156. package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/extract_nsd_stimulus.py +171 -0
  157. package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/nsd_qc_summary.py +142 -0
  158. package/skills/06_fMRI_Neuroimaging/nsd-skill/scripts/validate_nsd.py +142 -0
  159. package/skills/06_fMRI_Neuroimaging/oasis-skill/SKILL.md +205 -0
  160. package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/extract_oasis_phenotype.py +126 -0
  161. package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/oasis_qc_summary.py +115 -0
  162. package/skills/06_fMRI_Neuroimaging/oasis-skill/scripts/validate_oasis.py +119 -0
  163. package/skills/06_fMRI_Neuroimaging/pet-skill/SKILL.md +173 -0
  164. package/skills/06_fMRI_Neuroimaging/pet-skill/scripts/compute_suvr.py +202 -0
  165. package/skills/06_fMRI_Neuroimaging/pnc-skill/SKILL.md +206 -0
  166. package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/extract_pnc_phenotype.py +136 -0
  167. package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/pnc_qc_summary.py +116 -0
  168. package/skills/06_fMRI_Neuroimaging/pnc-skill/scripts/validate_pnc.py +120 -0
  169. package/skills/06_fMRI_Neuroimaging/ppmi-skill/SKILL.md +209 -0
  170. package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/extract_ppmi_phenotype.py +138 -0
  171. package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/ppmi_qc_summary.py +111 -0
  172. package/skills/06_fMRI_Neuroimaging/ppmi-skill/scripts/validate_ppmi.py +117 -0
  173. package/skills/06_fMRI_Neuroimaging/qsiprep-tool/SKILL.md +320 -0
  174. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/SKILL.md +215 -0
  175. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/extract_rest_mdd_phenotype.py +132 -0
  176. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/harmonize_sites.py +152 -0
  177. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/rest_mdd_qc_summary.py +124 -0
  178. package/skills/06_fMRI_Neuroimaging/rest-mneta-mdd-skill/scripts/validate_rest_mdd.py +103 -0
  179. package/skills/06_fMRI_Neuroimaging/smri-skill/SKILL.md +302 -0
  180. package/skills/06_fMRI_Neuroimaging/tcp-skill/SKILL.md +204 -0
  181. package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/extract_tcp_phenotype.py +139 -0
  182. package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/tcp_qc_summary.py +111 -0
  183. package/skills/06_fMRI_Neuroimaging/tcp-skill/scripts/validate_tcp.py +99 -0
  184. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/SKILL.md +217 -0
  185. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/extract_ucla_cnp_phenotype.py +145 -0
  186. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/ucla_cnp_qc_summary.py +111 -0
  187. package/skills/06_fMRI_Neuroimaging/ucla-cnp-skill/scripts/validate_ucla_cnp.py +113 -0
  188. package/skills/06_fMRI_Neuroimaging/ukb-skill/SKILL.md +310 -0
  189. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/build_ukb_survival.py +210 -0
  190. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_cases.py +308 -0
  191. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/extract_ukb_phenotype.py +232 -0
  192. package/skills/06_fMRI_Neuroimaging/ukb-skill/scripts/ukb_qc_summary.py +158 -0
  193. package/skills/06_fMRI_Neuroimaging/wmh-segmentation/SKILL.md +133 -0
  194. package/skills/07_Computational_Modeling/detrending/SKILL.md +118 -0
  195. package/skills/07_Computational_Modeling/dictlearning/SKILL.md +122 -0
  196. package/skills/07_Computational_Modeling/filtering/SKILL.md +121 -0
  197. package/skills/07_Computational_Modeling/glm/SKILL.md +153 -0
  198. package/skills/07_Computational_Modeling/hierarchical/SKILL.md +121 -0
  199. package/skills/07_Computational_Modeling/ica/SKILL.md +122 -0
  200. package/skills/07_Computational_Modeling/kmeans/SKILL.md +119 -0
  201. package/skills/07_Computational_Modeling/run_models/SKILL.md +427 -0
  202. package/skills/07_Computational_Modeling/spacenet/SKILL.md +122 -0
  203. package/skills/07_Computational_Modeling/svm/SKILL.md +120 -0
  204. package/skills/08_Computational_Neuroscience/brain_gnn/SKILL.md +183 -0
  205. package/skills/08_Computational_Neuroscience/dipy-tool/SKILL.md +239 -0
  206. package/skills/08_Computational_Neuroscience/dipy-tool/scripts/dti_metrics_reference.py +70 -0
  207. package/skills/08_Computational_Neuroscience/dipy-tool/scripts/load_and_mask_reference.py +76 -0
  208. package/skills/08_Computational_Neuroscience/dipy-tool/scripts/roi_stats_reference.py +59 -0
  209. package/skills/08_Computational_Neuroscience/fm_app/SKILL.md +195 -0
  210. package/skills/08_Computational_Neuroscience/neurostorm/SKILL.md +151 -0
  211. package/skills/13_Visualization/brain-visualization/SKILL.md +191 -0
  212. package/skills/13_Visualization/brain-visualization/scripts/connectome_reference.py +108 -0
  213. package/skills/13_Visualization/brain-visualization/scripts/freesurfer_ply_reference.py +54 -0
  214. package/skills/13_Visualization/brain-visualization/scripts/zalff_summary_reference.py +116 -0
  215. package/skills/13_Visualization/ethoclaw-paper-figure-layout/SKILL.md +78 -0
  216. package/skills/13_Visualization/ethoclaw-paper-figure-layout/assets/naturecomm_figures.tex +74 -0
  217. package/skills/13_Visualization/ethoclaw-paper-figure-layout/scripts/layout_results_foldered.py +579 -0
  218. package/skills/14_Writing/overleaf-skill/SKILL.md +184 -0
  219. package/skills/14_Writing/overleaf-skill/scripts/install.sh +30 -0
  220. package/skills/14_Writing/paper-writing/SKILL.md +146 -0
  221. package/skills/14_Writing/paper-writing/scripts/data_statement_templates.py +164 -0
  222. package/skills/14_Writing/paper-writing/scripts/figure_templates.py +315 -0
  223. package/skills/14_Writing/paper-writing/scripts/nature_figure_style.py +214 -0
  224. package/skills/14_Writing/paper-writing/scripts/section_phrasebank.py +246 -0
  225. package/skills/16_Animal_Behavior/deeplabcut/SKILL.md +154 -0
  226. package/skills/16_Animal_Behavior/deeplabcut/references/3d-pose.md +89 -0
  227. package/skills/16_Animal_Behavior/deeplabcut/references/maDLC.md +123 -0
  228. package/skills/16_Animal_Behavior/deeplabcut/references/modelzoo.md +98 -0
  229. package/skills/16_Animal_Behavior/deeplabcut/references/standard-pipeline.md +165 -0
  230. package/skills/16_Animal_Behavior/deeplabcut/references/utilities.md +146 -0
  231. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/SKILL.md +274 -0
  232. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.html +112 -0
  233. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/report_template_en.md +21 -0
  234. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/cluster-section.md +5 -0
  235. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/heatmap-section.md +5 -0
  236. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/integrated-interpretation.md +3 -0
  237. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/overview.md +3 -0
  238. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/project-summary.md +3 -0
  239. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/radar-section.md +5 -0
  240. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/raw-trajectory.md +3 -0
  241. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/sample-check.md +3 -0
  242. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/single-subject-section.md +3 -0
  243. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/assets/section_templates/stats-section.md +5 -0
  244. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/epm.md +52 -0
  245. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/fst.md +37 -0
  246. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/nor.md +39 -0
  247. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/oft.md +43 -0
  248. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tcst.md +45 -0
  249. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/experiment-types/tst.md +36 -0
  250. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/input-types.md +59 -0
  251. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/interpretation-guardrails.md +45 -0
  252. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/metadata-schema.md +57 -0
  253. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/report-sections.md +86 -0
  254. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/references/section-selection-rules.md +169 -0
  255. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/build_report_manifest.py +27 -0
  256. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/render_report.py +34 -0
  257. package/skills/16_Animal_Behavior/ethoclaw-analysis-report/scripts/report_utils.py +1121 -0
  258. package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/SKILL.md +390 -0
  259. package/skills/16_Animal_Behavior/ethoclaw-animal-grounding/reference_code.py +98 -0
  260. package/skills/16_Animal_Behavior/ethoclaw-animal-pose-estimation/SKILL.md +336 -0
  261. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/README.md +21 -0
  262. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/SKILL.md +41 -0
  263. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/batch_kinematic_generator.py +663 -0
  264. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/config.json +19 -0
  265. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/generate_kinematic_parameter.py +401 -0
  266. package/skills/16_Animal_Behavior/ethoclaw-kinematic-parameter-generator/kinematic_generator.py +265 -0
  267. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/SKILL.md +72 -0
  268. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/references/config.example.toml +56 -0
  269. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params.py +232 -0
  270. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-clustermap-generate/scripts/cluster_all_params_from_config.py +236 -0
  271. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/SKILL.md +68 -0
  272. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/references/notes.md +5 -0
  273. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-radar-generate/scripts/plot_h5_radar.py +513 -0
  274. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/SKILL.md +52 -0
  275. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/config.toml +81 -0
  276. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/references/stats-rule.md +18 -0
  277. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_inspect.py +79 -0
  278. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_batch.py +624 -0
  279. package/skills/16_Animal_Behavior/ethoclaw-multiparameter-violin-stats-generate/scripts/h5_violin_stats.py +438 -0
  280. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/SKILL.md +280 -0
  281. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_trajectory.py +790 -0
  282. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/core_scripts/heatmap_velocity.py +855 -0
  283. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.csv +101 -0
  284. package/skills/16_Animal_Behavior/ethoclaw-trajectory-velocity-heatmap-generate/reference_data/reference_2d.h5 +0 -0
  285. 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