@brainpilot/skills 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,224 @@
1
+ #!/usr/bin/env python3
2
+ """Compute CBF (Cerebral Blood Flow) maps from ASL perfusion MRI.
3
+
4
+ Implements the Buxton single-compartment model for pCASL/CASL/PASL
5
+ quantification. Outputs CBF map as NIfTI and optional ROI summary as CSV.
6
+ """
7
+ import argparse
8
+ import sys
9
+ from pathlib import Path
10
+ from typing import Dict, List, Optional
11
+
12
+ try:
13
+ import numpy as np
14
+ except ImportError:
15
+ print("Error: numpy is required.", file=sys.stderr)
16
+ sys.exit(1)
17
+
18
+ try:
19
+ import nibabel as nib
20
+ except ImportError:
21
+ print("Error: nibabel is required.", file=sys.stderr)
22
+ sys.exit(1)
23
+
24
+ # Physical constants
25
+ DEFAULT_PARAMS = {
26
+ "pcasl": {"alpha": 0.85, "tau": 1.8, "pld": 1.8},
27
+ "casl": {"alpha": 0.95, "tau": 2.0, "pld": 1.5},
28
+ "pasl": {"alpha": 0.98, "tau": 0.7, "pld": 1.8},
29
+ }
30
+
31
+ # T1 of arterial blood (seconds)
32
+ T1B = {1.5: 1.35, 3.0: 1.65, 7.0: 2.1}
33
+
34
+ # Blood-tissue water partition coefficient (mL/g)
35
+ LAMBDA = 0.9
36
+
37
+ # Conversion factor: mL/g/s -> mL/100g/min
38
+ CONVERSION = 6000
39
+
40
+
41
+ def compute_cbf_pcasl_casl(
42
+ diff_data: np.ndarray,
43
+ m0_data: np.ndarray,
44
+ alpha: float,
45
+ tau: float,
46
+ pld: float,
47
+ t1b: float,
48
+ ) -> np.ndarray:
49
+ """Compute CBF from pCASL/CASL using the Buxton model.
50
+
51
+ CBF = (6000 * ΔM * λ) / (2 * α * M0 * T1b * (exp(-w/T1b) - exp(-(τ+w)/T1b)))
52
+
53
+ Returns CBF in mL/100g/min.
54
+ """
55
+ m0_safe = np.where(m0_data > 0, m0_data, 1.0)
56
+ numerator = CONVERSION * diff_data * LAMBDA
57
+ denominator = 2.0 * alpha * m0_safe * t1b * (np.exp(-pld / t1b) - np.exp(-(tau + pld) / t1b))
58
+
59
+ cbf = np.where(m0_data > 0, numerator / denominator, 0.0)
60
+ return cbf
61
+
62
+
63
+ def compute_cbf_pasl(
64
+ diff_data: np.ndarray,
65
+ m0_data: np.ndarray,
66
+ alpha: float,
67
+ ti1: float,
68
+ ti2: float,
69
+ t1b: float,
70
+ bolus_thickness: float = 0.15,
71
+ ) -> np.ndarray:
72
+ """Compute CBF from PASL (QUIPSS II).
73
+
74
+ CBF = (6000 * ΔM * λ * TI1) / (2 * α * M0 * T1b * (TI2 - TI1) * exp(-TI2/T1b))
75
+
76
+ Returns CBF in mL/100g/min.
77
+ """
78
+ m0_safe = np.where(m0_data > 0, m0_data, 1.0)
79
+ numerator = CONVERSION * diff_data * LAMBDA * ti1
80
+ denominator = 2.0 * alpha * m0_safe * t1b * (ti2 - ti1) * np.exp(-ti2 / t1b)
81
+
82
+ cbf = np.where(m0_data > 0, numerator / denominator, 0.0)
83
+ return cbf
84
+
85
+
86
+ def extract_roi_mean(data: np.ndarray, atlas: np.ndarray, labels: Optional[List[int]] = None) -> Dict[int, float]:
87
+ """Extract mean CBF for each ROI in the atlas."""
88
+ unique_labels = np.unique(atlas[atlas > 0]).astype(int)
89
+ if labels is not None:
90
+ unique_labels = [l for l in unique_labels if l in labels]
91
+
92
+ results = {}
93
+ for label in unique_labels:
94
+ mask = atlas == label
95
+ values = data[mask]
96
+ values = values[~np.isnan(values)]
97
+ if len(values) > 0:
98
+ results[int(label)] = float(np.mean(values))
99
+ return results
100
+
101
+
102
+ def main() -> int:
103
+ parser = argparse.ArgumentParser(
104
+ description="Compute CBF maps from ASL perfusion MRI."
105
+ )
106
+ parser.add_argument("--diff", required=True, help="Path to ASL difference image (control - label)")
107
+ parser.add_argument("--m0", help="Path to M0 reference image (required for absolute CBF)")
108
+ parser.add_argument("--output", required=True, help="Output path for CBF map NIfTI")
109
+ parser.add_argument("--roi-summary", help="Optional: output path for ROI summary CSV")
110
+ parser.add_argument("--roi-atlas", help="Optional: path to atlas NIfTI for ROI extraction")
111
+ parser.add_argument("--roi-labels", help="Optional: comma-separated ROI label IDs to extract")
112
+ parser.add_argument("--label-strategy", default="pcasl", choices=["pcasl", "casl", "pasl"],
113
+ help="ASL labeling strategy (default: pcasl)")
114
+ parser.add_argument("--alpha", type=float, help="Labeling efficiency (overrides default)")
115
+ parser.add_argument("--tau", type=float, help="Label duration in seconds (overrides default)")
116
+ parser.add_argument("--pld", type=float, help="Post-labeling delay in seconds (overrides default)")
117
+ parser.add_argument("--field-strength", type=float, default=3.0, choices=[1.5, 3.0, 7.0],
118
+ help="MRI field strength in Tesla (default: 3.0)")
119
+ parser.add_argument("--no-m0", action="store_true", help="Compute relative CBF without M0 normalization")
120
+ args = parser.parse_args()
121
+
122
+ diff_path = Path(args.diff).resolve()
123
+ if not diff_path.exists():
124
+ print(f"Difference image not found: {diff_path}", file=sys.stderr)
125
+ return 1
126
+
127
+ # Load ASL difference image
128
+ print(f"Loading ASL difference image: {diff_path}")
129
+ diff_img = nib.load(str(diff_path))
130
+ diff_data = diff_img.get_fdata()
131
+ print(f" Shape: {diff_data.shape}, range: [{diff_data.min():.4f}, {diff_data.max():.4f}]")
132
+
133
+ # Load M0
134
+ m0_data = None
135
+ if not args.no_m0:
136
+ if not args.m0:
137
+ print("[ERROR] --m0 is required for absolute CBF quantification. Use --no-m0 for relative CBF.", file=sys.stderr)
138
+ return 1
139
+ m0_path = Path(args.m0).resolve()
140
+ if not m0_path.exists():
141
+ print(f"M0 image not found: {m0_path}", file=sys.stderr)
142
+ return 1
143
+ m0_img = nib.load(str(m0_path))
144
+ m0_data = m0_img.get_fdata()
145
+ print(f" M0 shape: {m0_data.shape}, range: [{m0_data.min():.4f}, {m0_data.max():.4f}]")
146
+ else:
147
+ m0_data = np.ones_like(diff_data)
148
+ print(" No M0 normalization (relative CBF)")
149
+
150
+ # Get quantification parameters
151
+ strategy = args.label_strategy
152
+ params = DEFAULT_PARAMS[strategy].copy()
153
+
154
+ if args.alpha is not None:
155
+ params["alpha"] = args.alpha
156
+ if args.tau is not None:
157
+ params["tau"] = args.tau
158
+ if args.pld is not None:
159
+ params["pld"] = args.pld
160
+
161
+ t1b = T1B[args.field_strength]
162
+
163
+ print(f"\nCBF Quantification Parameters:")
164
+ print(f" Strategy: {strategy}")
165
+ print(f" α (labeling efficiency): {params['alpha']}")
166
+ print(f" τ (label duration): {params['tau']} s")
167
+ print(f" PLD (post-labeling delay): {params['pld']} s")
168
+ print(f" T1b (blood T1 at {args.field_strength}T): {t1b} s")
169
+ print(f" λ (partition coefficient): {LAMBDA} mL/g")
170
+
171
+ # Compute CBF
172
+ if strategy in ("pcasl", "casl"):
173
+ cbf_data = compute_cbf_pcasl_casl(
174
+ diff_data, m0_data,
175
+ alpha=params["alpha"], tau=params["tau"], pld=params["pld"], t1b=t1b,
176
+ )
177
+ else:
178
+ cbf_data = compute_cbf_pasl(
179
+ diff_data, m0_data,
180
+ alpha=params["alpha"], ti1=params["tau"], ti2=params["pld"], t1b=t1b,
181
+ )
182
+
183
+ # Clip negative values
184
+ cbf_data = np.clip(cbf_data, 0, None)
185
+
186
+ # Save CBF map
187
+ output_path = Path(args.output).resolve()
188
+ output_path.parent.mkdir(parents=True, exist_ok=True)
189
+ cbf_img = nib.Nifti1Image(cbf_data, diff_img.affine, diff_img.header)
190
+ nib.save(cbf_img, str(output_path))
191
+ print(f"\nCBF map saved: {output_path}")
192
+ print(f" Range: [{cbf_data.min():.2f}, {cbf_data.max():.2f}] mL/100g/min")
193
+ print(f" Mean (non-zero): {cbf_data[cbf_data > 0].mean():.2f} mL/100g/min")
194
+
195
+ # ROI extraction
196
+ if args.roi_atlas and args.roi_summary:
197
+ atlas_path = Path(args.roi_atlas).resolve()
198
+ if not atlas_path.exists():
199
+ print(f"[WARN] Atlas not found: {atlas_path}", file=sys.stderr)
200
+ else:
201
+ atlas_img = nib.load(str(atlas_path))
202
+ atlas_data = atlas_img.get_fdata()
203
+
204
+ labels = None
205
+ if args.roi_labels:
206
+ labels = [int(l.strip()) for l in args.roi_labels.split(",")]
207
+
208
+ roi_values = extract_roi_mean(cbf_data, atlas_data, labels)
209
+
210
+ import csv
211
+ summary_path = Path(args.roi_summary).resolve()
212
+ summary_path.parent.mkdir(parents=True, exist_ok=True)
213
+ with open(summary_path, "w", newline="", encoding="utf-8") as f:
214
+ writer = csv.writer(f)
215
+ writer.writerow(["roi_label", "mean_cbf_ml_100g_min"])
216
+ for label, mean_cbf in sorted(roi_values.items()):
217
+ writer.writerow([label, f"{mean_cbf:.2f}"])
218
+ print(f"\nROI summary ({len(roi_values)} ROIs) -> {summary_path}")
219
+
220
+ return 0
221
+
222
+
223
+ if __name__ == "__main__":
224
+ sys.exit(main())
@@ -0,0 +1,241 @@
1
+ ---
2
+ name: bids-organizer
3
+ description: "Use this skill whenever the user wants to automatically organize raw neuroimaging data (DICOM, NIfTI, EEG, etc.) into a valid BIDS (Brain Imaging Data Structure) dataset. Triggers include: 'organize to BIDS', 'BIDS organizer', 'convert to BIDS', 'BIDS conversion', 'bidsify', 'create BIDS dataset', 'raw data to BIDS', or any request to structure data according to BIDS specification."
4
+ license: MIT License (NeuroClaw custom skill – freely modifiable within the project)
5
+ layer: subagent
6
+ skill_type: tool
7
+ dependencies:
8
+ - dcm2nii
9
+ - claw-shell
10
+ ---
11
+ # BIDS Organizer (Tool Layer)
12
+
13
+ ## Overview
14
+
15
+ BIDS Organizer is the NeuroClaw interface-layer skill that automatically converts raw or semi-organized neuroimaging data into a standardized BIDS-compliant dataset.
16
+
17
+ It supports DICOM → NIfTI conversion + BIDS naming, existing NIfTI reorganization, EEG (.set/.edf/.bdf/.fif), and basic metadata handling. The skill generates a clear execution plan, waits for user confirmation, then delegates all heavy work to appropriate base tools.
18
+
19
+ **Core workflow (never bypassed):**
20
+ 1. Scan input directory and detect data types (DICOM, NIfTI, EEG, etc.).
21
+ 2. Generate a numbered execution plan with proposed BIDS structure and subject/session labels.
22
+ 3. Present the plan, estimated time, and risks; wait for explicit confirmation (“YES” / “execute” / “proceed”).
23
+ 4. On confirmation, delegate tasks to `dcm2nii`, `mne-eeg-tool`, and `claw-shell`.
24
+ 5. After completion, run BIDS validation and generate a summary report.
25
+
26
+ **Research use only.**
27
+
28
+ ## Quick Reference
29
+
30
+ | Task | What needs to be done | Delegate to which tool skill | Expected output |
31
+ |-----------------------------------|------------------------------------------------------------|---------------------------------------|-------------------------------------|
32
+ | DICOM to BIDS | Convert DICOM → NIfTI + apply BIDS naming | `dcm2nii` + `claw-shell` | BIDS-compliant NIfTI + JSON sidecars|
33
+ | Existing NIfTI to BIDS | Rename and reorganize NIfTI files into BIDS hierarchy | `claw-shell` | Properly named BIDS dataset |
34
+ | EEG to BIDS | Convert .set/.edf/.bdf/.fif to BIDS EEG format | `mne-eeg-tool` + `claw-shell` | BIDS EEG files + events |
35
+ | Create dataset_description.json | Generate required BIDS metadata files | `claw-shell` | dataset_description.json |
36
+ | Validate BIDS dataset | Run bids-validator and generate report | `claw-shell` | validation report |
37
+ | Full automatic organization | End-to-end raw data → valid BIDS dataset | All above tools | Complete BIDS dataset + QC report |
38
+
39
+ ## Common Shell Command Examples
40
+
41
+ ```bash
42
+ # DICOM to BIDS (most common)
43
+ dcm2niix -o ./bids/sub-001/ses-01/anat -f "%p_%s" -b y -z y /path/to/dicom/T1
44
+
45
+ # Validate the resulting BIDS dataset
46
+ bids-validator /path/to/bids_dataset
47
+ ```
48
+
49
+ ## Installation (Handled by dependency-planner)
50
+
51
+ Use `dependency-planner` with requests such as:
52
+ - “Install dcm2niix and bids-validator”
53
+ - “Install MNE-Python for EEG to BIDS conversion”
54
+
55
+ After installation, verify with:
56
+ ```bash
57
+ dcm2niix --version
58
+ bids-validator --version
59
+ ```
60
+
61
+ ## NeuroClaw recommended wrapper script
62
+
63
+ ```python
64
+ # bids_organizer_wrapper.py (placed inside the skill folder for reference)
65
+ import subprocess
66
+ from pathlib import Path
67
+
68
+ def organize_to_bids(raw_dir, bids_dir, subject_id, session_id="01"):
69
+ bids_dir = Path(bids_dir)
70
+ bids_dir.mkdir(parents=True, exist_ok=True)
71
+
72
+ # DICOM to BIDS example
73
+ cmd = [
74
+ "dcm2niix", "-o", str(bids_dir / f"sub-{subject_id}" / f"ses-{session_id}" / "anat"),
75
+ "-f", "%p_%s", "-b", "y", "-z", "y", str(raw_dir)
76
+ ]
77
+
78
+ print("Executing:", " ".join(cmd))
79
+ subprocess.run(cmd, check=True)
80
+
81
+ # Create basic dataset_description.json
82
+ desc = {
83
+ "Name": "NeuroClaw BIDS Dataset",
84
+ "BIDSVersion": "1.8.0",
85
+ "DatasetType": "raw"
86
+ }
87
+ (bids_dir / "dataset_description.json").write_text(str(desc))
88
+
89
+ print(f"BIDS dataset created at: {bids_dir}")
90
+ ```
91
+
92
+ ## Important Notes & Limitations
93
+
94
+ - This skill only generates the plan and delegates; actual file operations are performed via `claw-shell`.
95
+ - DICOM conversion relies on `dcm2nii`.
96
+ - EEG conversion is delegated to `mne-eeg-tool`.
97
+ - Always review the proposed BIDS structure (subject/session labels, run numbers) before confirmation.
98
+ - Large datasets may require significant disk space and time.
99
+
100
+ ## When to Call This Skill
101
+
102
+ - Raw scanner data (DICOM) needs to be converted and organized into BIDS
103
+ - Existing NIfTI/EEG files need proper BIDS naming and folder structure
104
+ - Preparing data for `fmriprep-tool`, `hcppipeline-tool`, `fsl-tool`, or `fmri-skill`
105
+ - Before running any standardized preprocessing pipeline
106
+
107
+ ## Benchmark-Facing Default Mainline
108
+
109
+ For benchmark-style BIDS organization tasks, do not expand into a generic all-modality organizer unless the task explicitly asks for that breadth.
110
+
111
+ - First identify the narrow target modality and output contract.
112
+ - Reuse only the BIDS pieces needed for that target modality.
113
+ - Do not pull in EEG branches, full multi-modality survey logic, or large wrapper orchestration when the task is only asking for one narrow anatomical or diffusion path.
114
+ - Do not treat the interactive confirmation-heavy core workflow as mandatory for benchmark tasks that explicitly ask for direct completion. In benchmark mode, the answer should default to the narrow executable organization path instead of plan-first / confirm-first orchestration.
115
+ - Do not make large review buckets such as `misc_nonbids_review/`, broad unresolved-item triage systems, or generic catch-all wrappers the center of the answer unless the prompt explicitly asks for audit/review handling.
116
+ - If the task is specifically structural MRI organization, keep the answer centered on:
117
+ - DICOM to NIfTI conversion only if needed,
118
+ - `sub-*/[ses-*/]anat/` placement,
119
+ - valid suffix naming such as `T1w`, `T2w`, `FLAIR`,
120
+ - required top-level files like `dataset_description.json`,
121
+ - validator/report output.
122
+ - If the task is diffusion-only, keep the answer centered on `dwi/` organization and diffusion sidecars instead of broadening into whole-dataset BIDS strategy.
123
+ - If subject/session/modality cannot be inferred reliably, report the blocked item explicitly instead of widening into a generic heuristic-heavy organizer.
124
+
125
+ ### Direct Mixed-Modality Benchmark Path
126
+
127
+ When the benchmark task asks for automatic organization of local DICOM/NIfTI/EEG raw data into BIDS, but does not ask for an interactive planner, default to this narrow path:
128
+
129
+ 1. scan only for the modalities explicitly mentioned by the task,
130
+ 2. organize those modalities into the required BIDS hierarchy,
131
+ 3. generate the minimal required dataset metadata,
132
+ 4. run validation and report concrete blockers,
133
+ 5. stop there.
134
+
135
+ Do not turn this into a reusable platform-style organizer with review zones, broad plugin branches, or full modality-by-modality expansion unless the prompt explicitly asks for that breadth.
136
+
137
+ ### Existing DWI NIfTI Sidecar Path
138
+
139
+ When the task already provides DWI `NIfTI + bval + bvec` files, the preferred mainline is:
140
+
141
+ 1. detect valid DWI image / sidecar triplets,
142
+ 2. infer `sub-`, optional `ses-`, and optional `run-` entities,
143
+ 3. place outputs under `sub-*/[ses-*/]dwi/`,
144
+ 4. preserve matching `.bval`, `.bvec`, and optional `.json`,
145
+ 5. generate minimal dataset metadata and validate.
146
+
147
+ In this situation, do not broaden the answer into DICOM conversion, EEG conversion, or a whole-dataset mixed-modality organizer unless the prompt explicitly asks for those branches.
148
+
149
+ ### Structural MRI Narrow Path
150
+
151
+ For narrow structural MRI BIDS tasks, the preferred mainline is:
152
+
153
+ 1. detect whether input is DICOM or existing NIfTI,
154
+ 2. convert with `dcm2niix` only when needed,
155
+ 3. place outputs under `sub-*/[ses-*/]anat/`,
156
+ 4. assign only the correct structural suffixes,
157
+ 5. generate minimal required dataset metadata,
158
+ 6. run BIDS validation and summarize unmapped files.
159
+
160
+ Do not replace that mainline with a broader all-modality organizer unless the prompt explicitly requests a full mixed-modality BIDS conversion.
161
+
162
+ ## Post-Execution Verification (Harness Integration)
163
+
164
+ After BIDS organization completes, this skill **automatically invokes harness-core's VerificationRunner** to validate output integrity:
165
+
166
+ **Integrated verification checks**:
167
+
168
+ ```python
169
+ from skills.harness_core import VerificationRunner, AuditLogger
170
+
171
+ verifier = VerificationRunner(task_type="bids_organization")
172
+
173
+ # 1. BIDS structure compliance
174
+ verifier.add_check("bids_structure",
175
+ checker=lambda: verify_bids_structure(bids_dir),
176
+ severity="error"
177
+ )
178
+
179
+ # 2. Dataset description file
180
+ verifier.add_check("dataset_description",
181
+ checker=lambda: verify_dataset_description_exists(bids_dir),
182
+ severity="error"
183
+ )
184
+
185
+ # 3. Subject/session naming convention
186
+ verifier.add_check("naming_convention",
187
+ checker=lambda: verify_bids_naming(bids_dir),
188
+ severity="error"
189
+ )
190
+
191
+ # 4. Metadata JSON sidecar completeness
192
+ verifier.add_check("json_sidecars",
193
+ checker=lambda: verify_json_sidecars(bids_dir),
194
+ severity="warning"
195
+ )
196
+
197
+ # 5. Required BIDS files presence
198
+ verifier.add_check("required_files",
199
+ checker=lambda: verify_required_files(bids_dir),
200
+ severity="error"
201
+ )
202
+
203
+ report = verifier.run(bids_dir)
204
+
205
+ # Log verification results
206
+ logger = AuditLogger(log_file=f"{bids_dir}/bids_verification.jsonl")
207
+ logger.log_validation(
208
+ task_name="bids_organization",
209
+ checks_passed=len([r for r in report.results if r.passed]),
210
+ checks_failed=len([r for r in report.results if not r.passed]),
211
+ warnings=len([r for r in report.results if r.severity == "warning" and not r.passed]),
212
+ report_summary=report.to_dict()
213
+ )
214
+
215
+ if report.failed:
216
+ raise ValueError(f"BIDS verification failed: {report.summary}")
217
+ ```
218
+
219
+ **Output files generated**:
220
+ - `{bids_dir}/bids_verification.jsonl` — structured audit log
221
+ - `{bids_dir}/.bids_validation_timestamp` — verification completion marker
222
+
223
+ ## Complementary / Related Skills
224
+
225
+ - `dependency-planner` → install required tools
226
+ - `claw-shell` → safe execution of all commands
227
+ - `harness-core` → automated verification and audit logging
228
+
229
+ ## More Advanced Features
230
+
231
+ For complex BIDS cases (multi-session, multi-run, custom metadata, HEUDICONV heuristics, etc.), please refer to the official BIDS specification:
232
+
233
+ - Official BIDS Website: https://bids.neuroimaging.io/
234
+ - BIDS Specification: https://bids-specification.readthedocs.io/
235
+
236
+ You may use the `multi-search-engine` or `academic-research-hub` skill to find the latest BIDS conversion best practices.
237
+
238
+ ---
239
+ Created At: 2026-03-25 16:00 HKT
240
+ Last Updated At: 2026-04-05 02:01 HKT
241
+ Author: chengwang96
@@ -0,0 +1,186 @@
1
+ ---
2
+ name: bold5000-skill
3
+ description: "Use this skill whenever the user wants an end-to-end workflow for the BOLD5000 dataset, including download, BIDS organization, and processing of task-fMRI data with visual image stimuli. Triggers include: 'BOLD5000', 'BOLD 5000', 'process BOLD5000', 'visual fMRI', or any request to run the BOLD5000 pipeline. This is the NeuroClaw dataset-orchestration layer for BOLD5000."
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
+ - bids-organizer
11
+ - claw-shell
12
+ ---
13
+ # BOLD5000 Skill (Dataset-Orchestration Layer)
14
+
15
+ ## Overview
16
+ `bold5000-skill` is the NeuroClaw orchestration skill for the **BOLD5000** dataset.
17
+
18
+ BOLD5000 is a high-density repeated visual fMRI dataset with 8 participants performing 5,000-image visual recognition tasks. It is designed for studying visual object recognition and scene understanding.
19
+
20
+ It coordinates a fixed three-phase workflow:
21
+ 1. Download BOLD5000 data from the OpenNeuro repository.
22
+ 2. Prepare and validate BIDS-style data organization for downstream processing.
23
+ 3. Delegate modality pipelines to `smri-skill` and `fmri-skill`.
24
+
25
+ This skill follows NeuroClaw hierarchy:
26
+ - Defines **WHAT to do**, not low-level implementation details.
27
+ - Does **not** execute direct shell commands itself.
28
+ - Delegates all execution via `claw-shell` to base/tool skills.
29
+
30
+ **Research use only.**
31
+
32
+ ---
33
+
34
+ ## Download Stage (Mandatory First Step)
35
+
36
+ ### Source
37
+ BOLD5000 data is available on OpenNeuro:
38
+ - Website: https://bold5000-dataset.github.io/
39
+ - OpenNeuro: https://openneuro.org/datasets/ds002785
40
+
41
+ ### Supported BOLD5000 Data Packages
42
+ - **Imaging data**: T1w structural, task-fMRI (NIfTI format)
43
+ - **Stimulus data**: 5,000 natural images with category labels and image metadata
44
+ - **Behavioral data**: Recognition memory judgments, response times
45
+ - **Participants**: 4 participants x ~1250 images each (high-density repeated measures)
46
+
47
+ ### Delegation Rules for Download
48
+ - Environment/setup checks: `dependency-planner` + `conda-env-manager`
49
+ - OpenNeuro dataset download: `claw-shell` (via `openneuro` CLI or `datalad`)
50
+ - Optional raw-data organization to BIDS-style staging: `bids-organizer`
51
+
52
+ ### Download Inputs to Confirm in Plan
53
+ - Target subset (all subjects, specific subjects)
54
+ - Whether to include stimulus images
55
+ - Destination directory with sufficient disk space
56
+
57
+ ---
58
+
59
+ ## Narrow Path: BOLD5000 Raw NIfTI -> BIDS Staging
60
+
61
+ Use this path when the task only asks to reorganize raw BOLD5000 NIfTI files into a BIDS-style dataset and does not require preprocessing or downstream analysis.
62
+
63
+ ### Expected narrow-path behavior
64
+ 1. BOLD5000 data from OpenNeuro is already in BIDS format; verify and validate structure.
65
+ 2. Route modalities:
66
+ - T1w -> `anat/*_T1w`
67
+ - task-fMRI -> `func/*_task-*_bold`
68
+ 3. Preserve stimulus metadata and event files.
69
+ 4. Emit dataset-level outputs such as `dataset_description.json`, `participants.tsv`.
70
+
71
+ ---
72
+
73
+ ## Core Workflow (Never Bypassed)
74
+ 1. Identify user target: download, BIDS staging, or full preprocessing.
75
+ 2. Generate a numbered plan with tools, outputs, runtime, storage, and risks.
76
+ 3. Wait for explicit confirmation (`YES` / `execute` / `proceed`).
77
+ 4. On confirmation, run download stage first (if needed).
78
+ 5. After download success, verify/prepare BIDS staging using `scripts/reorganize_bold5000.py`.
79
+ 6. Delegate to modality skills:
80
+ - `smri-skill` for structural MRI (T1w)
81
+ - `fmri-skill` for task-fMRI
82
+ 7. If stimulus analysis is requested, use `scripts/extract_bold5000_stimulus.py` to generate stimulus metadata.
83
+ 8. Save outputs into a BOLD5000-centered structure under `bold5000_output/`.
84
+
85
+ ---
86
+
87
+ ## Stimulus Metadata Extraction
88
+
89
+ ### Script: `scripts/extract_bold5000_stimulus.py`
90
+
91
+ Extracts and organizes BOLD5000 stimulus metadata for downstream analysis.
92
+
93
+ ```bash
94
+ python skills/bold5000-skill/scripts/extract_bold5000_stimulus.py \
95
+ --stimulus-dir /path/to/bold5000_raw/stimuli \
96
+ --output /path/to/bold5000_output/stimulus/stimulus_metadata.csv
97
+ ```
98
+
99
+ Features:
100
+ - Reads stimulus image file names and paths
101
+ - Extracts category labels (object, scene, etc.)
102
+ - Generates per-image metadata CSV for modeling
103
+ - Links stimulus presentation events to fMRI volumes
104
+
105
+ ---
106
+
107
+ ## QC Integration
108
+
109
+ ### Script: `scripts/bold5000_qc_summary.py`
110
+
111
+ ```bash
112
+ python skills/bold5000-skill/scripts/bold5000_qc_summary.py \
113
+ --fmriprep-dir /path/to/bold5000_output/fmriprep \
114
+ --output /path/to/bold5000_output/qc/qc_summary.csv \
115
+ --fd-threshold 0.3
116
+ ```
117
+
118
+ ---
119
+
120
+ ## Recommended Output Layout
121
+ All assets should be organized under `./bold5000_output/`:
122
+ - `bold5000_output/raw/` (downloaded original BOLD5000 files)
123
+ - `bold5000_output/bids/` (BIDS data)
124
+ - `bold5000_output/smri/` (links or copies from `smri_output/`)
125
+ - `bold5000_output/fmri/` (links or copies from `fmri_output/`)
126
+ - `bold5000_output/stimulus/` (stimulus metadata and event files)
127
+ - `bold5000_output/qc/` (QC summaries)
128
+ - `bold5000_output/logs/` (download + orchestration logs)
129
+
130
+ ---
131
+
132
+ ## Benchmark Adapter Guidance
133
+
134
+ For benchmark-style prompts, do not force the full `download -> staging -> multimodal processing` orchestration when the task is only asking for local BOLD5000 data staging or organization.
135
+
136
+ - If the task starts from raw BOLD5000 data already present on disk and only asks for BIDS-style staging / validation:
137
+ - skip the mandatory download stage
138
+ - default to the narrow path `local raw BOLD5000 discovery -> BIDS validation -> minimal metadata -> report`
139
+ - In benchmark mode, do not require explicit confirmation before presenting the direct staging solution.
140
+
141
+ ---
142
+
143
+ ## Safety and Execution Policy
144
+ - No execution before explicit plan confirmation.
145
+ - All execution must be routed via `claw-shell`.
146
+ - Missing dependencies must be resolved by `dependency-planner` before running.
147
+
148
+ ---
149
+
150
+ ## Important Notes and Limitations
151
+ - BOLD5000 is a small dataset (4 participants); statistical power is limited for group-level analyses.
152
+ - BOLD5000 uses high-density repeated image presentations; analysis requires handling of repeated measures.
153
+ - BOLD5000 data from OpenNeuro is already in BIDS format; re-staging may not be needed.
154
+ - Stimulus images are included in the dataset; event files reference image file names.
155
+ - `bold5000-skill` is orchestration-only; detailed preprocessing logic remains in `smri-skill` and `fmri-skill`.
156
+
157
+ ---
158
+
159
+ ## When to Call This Skill
160
+ - User asks for end-to-end BOLD5000 workflow.
161
+ - User asks to download BOLD5000 data and then run task-fMRI processing.
162
+ - User needs BIDS validation for BOLD5000 data.
163
+ - User asks to extract BOLD5000 stimulus metadata.
164
+ - User needs BOLD5000-specific QC summaries.
165
+
166
+ ---
167
+
168
+ ## Complementary / Related Skills
169
+ - `smri-skill`
170
+ - `fmri-skill`
171
+ - `bids-organizer`
172
+ - `fmriprep-tool`
173
+ - `dependency-planner`
174
+ - `conda-env-manager`
175
+ - `claw-shell`
176
+
177
+ ---
178
+
179
+ ## Reference
180
+ - BOLD5000: https://bold5000-dataset.github.io/
181
+ - Chang et al., 2019, *BOLD5000: A public fMRI dataset of 5,000 images*
182
+ - BIDS spec: https://bids.neuroimaging.io/
183
+
184
+ Created At: 2026-05-06 01:52 HKT
185
+ Last Updated At: 2026-05-06 01:52 HKT
186
+ Author: chengwang96