@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,139 @@
1
+ #!/usr/bin/env python3
2
+ """Extract and merge TCP phenotype data.
3
+
4
+ Reads TCP phenotype files (diagnosis, dimensional measures)
5
+ and produces a merged phenotype table aligned with imaging subject list.
6
+ """
7
+ import argparse
8
+ import csv
9
+ import sys
10
+ from pathlib import Path
11
+ from typing import Dict, List, Optional
12
+
13
+ COLUMN_MAP = {
14
+ "subject_id": ["subject", "Subject", "participant_id", "SubID"],
15
+ "age": ["age", "Age"],
16
+ "sex": ["sex", "Sex", "Gender"],
17
+ "race": ["race", "Race"],
18
+ "ethnicity": ["ethnicity", "Ethnicity"],
19
+ "handedness": ["handedness", "Handedness"],
20
+ # Diagnosis
21
+ "diagnosis": ["diagnosis", "Diagnosis", "Group", "DX"],
22
+ "diagnosis_detail": ["diagnosis_detail", "Diagnosis_Detail"],
23
+ # RDoC dimensions
24
+ "negative_valence": ["negative_valence", "NegativeValence"],
25
+ "positive_valence": ["positive_valence", "PositiveValence"],
26
+ "cognitive": ["cognitive", "Cognitive"],
27
+ "social": ["social", "Social"],
28
+ "arousal": ["arousal", "Arousal"],
29
+ # Clinical measures
30
+ "bdi": ["BDI", "bdi"],
31
+ "bai": ["BAI", "bai"],
32
+ "panss_positive": ["PANSS_Pos", "panss_positive"],
33
+ "panss_negative": ["PANSS_Neg", "panss_negative"],
34
+ "ymrs": ["YMRS", "ymrs"],
35
+ }
36
+
37
+
38
+ def load_csv(path: Path) -> List[Dict[str, str]]:
39
+ delimiter = "\t" if path.suffix == ".tsv" else ","
40
+ with open(path, "r", encoding="utf-8") as f:
41
+ reader = csv.DictReader(f, delimiter=delimiter)
42
+ return list(reader)
43
+
44
+
45
+ def find_column(row: Dict[str, str], candidates: List[str]) -> Optional[str]:
46
+ for col in candidates:
47
+ if col in row:
48
+ return col
49
+ return None
50
+
51
+
52
+ def extract_phenotype(
53
+ phenotype_files: List[Path],
54
+ imaging_ids: Optional[List[str]] = None,
55
+ columns: Optional[List[str]] = None,
56
+ ) -> List[Dict[str, str]]:
57
+ all_data = []
58
+ for fpath in phenotype_files:
59
+ rows = load_csv(fpath)
60
+ all_data.extend(rows)
61
+
62
+ if not all_data:
63
+ return []
64
+
65
+ target_columns = columns if columns else list(COLUMN_MAP.keys())
66
+ merged = {}
67
+
68
+ for row in all_data:
69
+ subj_col = find_column(row, COLUMN_MAP["subject_id"])
70
+ if subj_col is None:
71
+ continue
72
+ subj_id = row[subj_col].strip()
73
+ if not subj_id:
74
+ continue
75
+
76
+ if subj_id not in merged:
77
+ merged[subj_id] = {"subject_id": subj_id}
78
+
79
+ for target_col in target_columns:
80
+ if target_col == "subject_id":
81
+ continue
82
+ if target_col in merged[subj_id] and merged[subj_id][target_col]:
83
+ continue
84
+ candidates = COLUMN_MAP.get(target_col, [target_col])
85
+ src_col = find_column(row, candidates)
86
+ if src_col and row.get(src_col, "").strip():
87
+ merged[subj_id][target_col] = row[src_col].strip()
88
+
89
+ result = list(merged.values())
90
+ if imaging_ids:
91
+ imaging_set = set(imaging_ids)
92
+ result = [r for r in result if r["subject_id"] in imaging_set]
93
+ return result
94
+
95
+
96
+ def main() -> int:
97
+ parser = argparse.ArgumentParser(description="Extract TCP phenotype data.")
98
+ parser.add_argument("--phenotype-files", required=True, nargs="+")
99
+ parser.add_argument("--output", required=True)
100
+ parser.add_argument("--imaging-ids")
101
+ parser.add_argument("--columns")
102
+ args = parser.parse_args()
103
+
104
+ phenotype_files = [Path(f).resolve() for f in args.phenotype_files]
105
+ for f in phenotype_files:
106
+ if not f.exists():
107
+ print(f"File not found: {f}", file=sys.stderr)
108
+ return 1
109
+
110
+ imaging_ids = None
111
+ if args.imaging_ids:
112
+ id_file = Path(args.imaging_ids).resolve()
113
+ if id_file.exists():
114
+ imaging_ids = [l.strip() for l in id_file.read_text().splitlines() if l.strip()]
115
+
116
+ columns = None
117
+ if args.columns:
118
+ columns = [c.strip() for c in args.columns.split(",")]
119
+
120
+ merged = extract_phenotype(phenotype_files, imaging_ids, columns)
121
+ if not merged:
122
+ print("[ERROR] No phenotype data extracted.", file=sys.stderr)
123
+ return 1
124
+
125
+ output_path = Path(args.output).resolve()
126
+ output_path.parent.mkdir(parents=True, exist_ok=True)
127
+ fieldnames = list(merged[0].keys())
128
+ with open(output_path, "w", newline="", encoding="utf-8") as f:
129
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
130
+ writer.writeheader()
131
+ writer.writerows(merged)
132
+
133
+ diag_groups = set(r.get("diagnosis", "") for r in merged if r.get("diagnosis"))
134
+ print(f"Phenotype: {len(merged)} subjects, {len(fieldnames)} columns, {len(diag_groups)} groups -> {output_path}")
135
+ return 0
136
+
137
+
138
+ if __name__ == "__main__":
139
+ sys.exit(main())
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env python3
2
+ """Generate per-subject QC summaries for TCP processing.
3
+
4
+ Transdiagnostic: tracks diagnostic group and applies appropriate QC criteria.
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 load_confounds(confounds_path: Path) -> Dict[str, float]:
14
+ metrics = {"fd_mean": float("nan"), "fd_max": float("nan")}
15
+ try:
16
+ import pandas as pd
17
+ df = pd.read_csv(confounds_path, sep="\t")
18
+ if "framewise_displacement" in df.columns:
19
+ fd = df["framewise_displacement"].dropna()
20
+ metrics["fd_mean"] = float(fd.mean())
21
+ metrics["fd_max"] = float(fd.max())
22
+ except Exception:
23
+ pass
24
+ return metrics
25
+
26
+
27
+ def check_exclusion(metrics: Dict[str, float], fd_threshold: float = 0.3) -> List[str]:
28
+ reasons = []
29
+ if not (metrics["fd_mean"] != metrics["fd_mean"]):
30
+ if metrics["fd_mean"] > fd_threshold:
31
+ reasons.append(f"FD mean {metrics['fd_mean']:.3f} > {fd_threshold}")
32
+ return reasons
33
+
34
+
35
+ def main() -> int:
36
+ parser = argparse.ArgumentParser(description="Generate QC summaries for TCP processing.")
37
+ parser.add_argument("--fmriprep-dir", help="Path to fMRIPrep output directory")
38
+ parser.add_argument("--output", required=True)
39
+ parser.add_argument("--exclude-output")
40
+ parser.add_argument("--fd-threshold", type=float, default=0.3)
41
+ parser.add_argument("--diagnosis-file", help="CSV with subject diagnosis info")
42
+ args = parser.parse_args()
43
+
44
+ output_path = Path(args.output).resolve()
45
+ output_path.parent.mkdir(parents=True, exist_ok=True)
46
+
47
+ diagnosis_map = {}
48
+ if args.diagnosis_file:
49
+ diag_path = Path(args.diagnosis_file).resolve()
50
+ if diag_path.exists():
51
+ with open(diag_path, "r", encoding="utf-8") as f:
52
+ reader = csv.DictReader(f)
53
+ for row in reader:
54
+ subj = row.get("subject_id") or row.get("Subject", "")
55
+ diag = row.get("diagnosis") or row.get("Diagnosis") or row.get("Group", "")
56
+ if subj and diag:
57
+ diagnosis_map[subj] = diag
58
+
59
+ subjects = set()
60
+ if args.fmriprep_dir:
61
+ fmriprep_dir = Path(args.fmriprep_dir).resolve()
62
+ if fmriprep_dir.exists():
63
+ for d in fmriprep_dir.glob("sub-*"):
64
+ if d.is_dir():
65
+ subjects.add(d.name)
66
+
67
+ if not subjects:
68
+ print("[WARN] No subjects found.", file=sys.stderr)
69
+ return 1
70
+
71
+ results = []
72
+ excluded = []
73
+ for subj in sorted(subjects):
74
+ metrics = {"subject_id": subj}
75
+ if diagnosis_map:
76
+ metrics["diagnosis"] = diagnosis_map.get(subj, "unknown")
77
+
78
+ if args.fmriprep_dir:
79
+ confounds_files = list(Path(args.fmriprep_dir).glob(f"{subj}/func/*_desc-confounds_timeseries.tsv"))
80
+ if confounds_files:
81
+ metrics.update(load_confounds(confounds_files[0]))
82
+
83
+ exclusion_reasons = check_exclusion(metrics, args.fd_threshold)
84
+ metrics["excluded"] = len(exclusion_reasons) > 0
85
+ metrics["exclusion_reasons"] = "; ".join(exclusion_reasons)
86
+
87
+ results.append(metrics)
88
+ if exclusion_reasons:
89
+ excluded.append({"subject_id": subj, "reasons": "; ".join(exclusion_reasons)})
90
+
91
+ if results:
92
+ fieldnames = list(results[0].keys())
93
+ with open(output_path, "w", newline="", encoding="utf-8") as f:
94
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
95
+ writer.writeheader()
96
+ writer.writerows(results)
97
+ print(f"QC: {len(results)} subjects, {len(excluded)} excluded -> {output_path}")
98
+
99
+ if args.exclude_output and excluded:
100
+ exclude_path = Path(args.exclude_output).resolve()
101
+ exclude_path.parent.mkdir(parents=True, exist_ok=True)
102
+ with open(exclude_path, "w", newline="", encoding="utf-8") as f:
103
+ writer = csv.DictWriter(f, fieldnames=["subject_id", "reasons"])
104
+ writer.writeheader()
105
+ writer.writerows(excluded)
106
+
107
+ return 0
108
+
109
+
110
+ if __name__ == "__main__":
111
+ sys.exit(main())
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env python3
2
+ """Validate TCP BIDS structure and generate compliance report.
3
+
4
+ Checks directory structure, modality completeness, and diagnostic group labeling.
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
+ "anat_complete": False,
17
+ "rs_fMRI_present": False,
18
+ "dwi_present": False,
19
+ "missing_files": [],
20
+ "warnings": [],
21
+ }
22
+
23
+ anat_dir = subject_dir / "anat"
24
+ if anat_dir.exists():
25
+ t1w_files = list(anat_dir.glob("*_T1w.nii.gz"))
26
+ report["anat_complete"] = len(t1w_files) > 0
27
+ if not t1w_files:
28
+ report["missing_files"].append("anat/*_T1w.nii.gz")
29
+ else:
30
+ report["missing_files"].append("anat/")
31
+
32
+ func_dir = subject_dir / "func"
33
+ if func_dir.exists():
34
+ rest_bold = list(func_dir.glob("*_task-rest_bold.nii.gz"))
35
+ report["rs_fMRI_present"] = len(rest_bold) > 0
36
+ if not rest_bold:
37
+ report["missing_files"].append("func/*_task-rest_bold.nii.gz")
38
+ else:
39
+ report["warnings"].append("No func directory")
40
+
41
+ dwi_dir = subject_dir / "dwi"
42
+ if dwi_dir.exists():
43
+ dwi_files = list(dwi_dir.glob("*_dwi.nii.gz"))
44
+ report["dwi_present"] = len(dwi_files) > 0
45
+ else:
46
+ report["warnings"].append("No dwi directory")
47
+
48
+ return report
49
+
50
+
51
+ def main() -> int:
52
+ parser = argparse.ArgumentParser(description="Validate TCP BIDS structure.")
53
+ parser.add_argument("--input", required=True)
54
+ parser.add_argument("--output", required=True)
55
+ args = parser.parse_args()
56
+
57
+ input_dir = Path(args.input).resolve()
58
+ if not input_dir.exists():
59
+ print(f"Input directory not found: {input_dir}", file=sys.stderr)
60
+ return 1
61
+
62
+ subjects = sorted([d for d in input_dir.glob("sub-*") if d.is_dir()])
63
+ print(f"Found {len(subjects)} subjects in {input_dir}")
64
+
65
+ if not subjects:
66
+ print("[ERROR] No subjects found.", file=sys.stderr)
67
+ return 1
68
+
69
+ results = []
70
+ for sub_dir in subjects:
71
+ report = validate_subject(sub_dir)
72
+ results.append(report)
73
+
74
+ output_path = Path(args.output).resolve()
75
+ output_path.parent.mkdir(parents=True, exist_ok=True)
76
+
77
+ fieldnames = ["subject", "anat_complete", "rs_fMRI_present", "dwi_present", "missing_files", "warnings"]
78
+ with open(output_path, "w", newline="", encoding="utf-8") as f:
79
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
80
+ writer.writeheader()
81
+ for r in results:
82
+ r["missing_files"] = "; ".join(r["missing_files"])
83
+ r["warnings"] = "; ".join(r["warnings"])
84
+ writer.writerow(r)
85
+
86
+ complete = sum(1 for r in results if r["anat_complete"] and r["rs_fMRI_present"])
87
+ print(f"\nValidation Summary:")
88
+ print(f" Total subjects: {len(results)}")
89
+ print(f" Complete (anat + rs-fMRI): {complete}")
90
+ print(f" With T1w: {sum(1 for r in results if r['anat_complete'])}")
91
+ print(f" With rs-fMRI: {sum(1 for r in results if r['rs_fMRI_present'])}")
92
+ print(f" With dMRI: {sum(1 for r in results if r['dwi_present'])}")
93
+ print(f" Output: {output_path}")
94
+
95
+ return 0
96
+
97
+
98
+ if __name__ == "__main__":
99
+ sys.exit(main())
@@ -0,0 +1,217 @@
1
+ ---
2
+ name: ucla-cnp-skill
3
+ description: "Use this skill whenever the user wants an end-to-end workflow for the UCLA CNP (Consortium for Neuropsychiatric Phenomics) dataset, including BIDS validation, multimodal processing of sMRI, task-fMRI, and dMRI, phenotype extraction, and QC integration. Triggers include: 'UCLA CNP', 'Consortium Neuropsychiatric Phenomics', 'process UCLA CNP', or any request to run the UCLA CNP multimodal pipeline."
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
+ complementary_skills:
14
+ - brain-visualization
15
+ ---
16
+ # UCLA CNP Skill (Dataset-Orchestration Layer)
17
+
18
+ ## Overview
19
+
20
+ `ucla-cnp-skill` is the NeuroClaw orchestration skill for the **UCLA CNP (Consortium for Neuropsychiatric Phenomics)** dataset, led by Russell Poldrack and colleagues at UCLA.
21
+
22
+ It strictly follows the NeuroClaw hierarchical design principles:
23
+ - This skill **only describes WHAT needs to be done** and **which tool skill to delegate to**.
24
+ - It contains **no implementation code or concrete commands**.
25
+ - All concrete execution is delegated to existing base/tool skills via `claw-shell`.
26
+ - Companion scripts in `scripts/` provide reference implementations for BIDS validation, phenotype extraction, and QC.
27
+
28
+ **Core workflow (never bypassed):**
29
+ 1. Identify input UCLA CNP data and target modalities.
30
+ 2. Generate a **numbered execution plan** clearly stating WHAT needs to be done and which tool skill will handle each step.
31
+ 3. Present the full plan, estimated runtime, resource requirements, and risks to the user and wait for explicit confirmation ("YES" / "execute" / "proceed").
32
+ 4. On confirmation, delegate every step to the appropriate skill via `claw-shell`.
33
+ 5. After execution, save all outputs in a clean directory structure (`ucla_cnp_output/`).
34
+
35
+ **Research use only.**
36
+
37
+ ---
38
+
39
+ ## Quick Reference
40
+
41
+ | Task | What needs to be done | Delegate to | Expected output |
42
+ |---|---|---|---|
43
+ | BIDS validation | Validate UCLA CNP BIDS structure | `scripts/validate_ucla_cnp.py` | Validation report |
44
+ | sMRI processing | Brain extraction, tissue segmentation | `smri-skill` | `smri_output/` derivatives |
45
+ | task-fMRI processing | Task GLM, activation analysis | `fmri-skill` | `fmri_output/` task results |
46
+ | dMRI processing | Diffusion preprocessing, tractography | `dwi-skill` | `dwi_output/` metrics |
47
+ | Phenotype extraction | Diagnosis, cognitive, behavioral | `scripts/extract_ucla_cnp_phenotype.py` | Merged phenotype CSV |
48
+ | QC summary | Per-subject quality control | `scripts/ucla_cnp_qc_summary.py` | QC summary + exclusion list |
49
+
50
+ ---
51
+
52
+ ## Dataset Characteristics
53
+
54
+ - **Cohort**: ~270 participants
55
+ - **Healthy controls**: Age-matched
56
+ - **ADHD**: Attention deficit hyperactivity disorder
57
+ - **Bipolar disorder**: Bipolar I/II
58
+ - **Schizophrenia**: Schizophrenia spectrum
59
+ - **Scanner**: 3T Siemens TIM Trio (UCLA)
60
+ - **Modalities**: T1w sMRI, task-fMRI, dMRI/DTI
61
+ - **Tasks**: Multiple cognitive tasks (stop-signal, spatial working memory, etc.)
62
+ - **Clinical**: Extensive cognitive battery, diagnostic assessments
63
+ - **Access**: OpenNeuro ds000030
64
+ - **Format**: BIDS-compliant
65
+ - **Reference**: Poldrack et al. (2016), Scientific Data
66
+
67
+ ---
68
+
69
+ ## Supported Modalities
70
+
71
+ | Modality | Description | Tasks/Conditions |
72
+ |---|---|---|
73
+ | T1w | High-resolution structural MRI | 1mm isotropic |
74
+ | task-fMRI | Task-based functional MRI | Stop-signal, spatial WM, face memory, etc. |
75
+ | dMRI | Diffusion-weighted imaging | DTI, white matter tractography |
76
+
77
+ ---
78
+
79
+ ## UCLA CNP Task Paradigms
80
+
81
+ | Task | Description | Cognitive Domain |
82
+ |---|---|---|
83
+ | Stop-signal | Response inhibition | Executive function |
84
+ | Spatial working memory | Spatial WM maintenance | Working memory |
85
+ | Face memory | Face encoding/retrieval | Episodic memory |
86
+ | Balloon analog risk | Risk taking behavior | Decision making |
87
+ | Monetary incentive | Reward processing | Motivation |
88
+
89
+ ---
90
+
91
+ ## UCLA CNP Diagnostic Groups
92
+
93
+ | Group | Description | Typical N |
94
+ |---|---|---|
95
+ | Control | Healthy age-matched | ~130 |
96
+ | ADHD | Attention deficit | ~50 |
97
+ | Bipolar | Bipolar disorder | ~45 |
98
+ | Schizophrenia | Schizophrenia spectrum | ~45 |
99
+
100
+ ---
101
+
102
+ ## BIDS Preparation
103
+
104
+ ### Script: `scripts/validate_ucla_cnp.py`
105
+
106
+ Validates UCLA CNP BIDS structure and generates a compliance report.
107
+
108
+ ```bash
109
+ python skills/ucla-cnp-skill/scripts/validate_ucla_cnp.py \
110
+ --input /path/to/UCLA-CNP/bids \
111
+ --output /path/to/ucla_cnp_output/qc/bids_validation.csv
112
+ ```
113
+
114
+ Features:
115
+ - BIDS directory structure validation
116
+ - Diagnostic group completeness check
117
+ - Modality completeness (T1w, task-fMRI, dMRI)
118
+ - Task paradigm presence verification
119
+
120
+ ---
121
+
122
+ ## Core Workflow (Never Bypassed)
123
+
124
+ 1. Identify user target: full UCLA CNP processing, imaging subset, phenotype extraction, or BIDS validation only.
125
+ 2. Generate a numbered plan with tools, outputs, runtime, storage, and risks.
126
+ 3. Wait for explicit confirmation (`YES` / `execute` / `proceed`).
127
+ 4. On confirmation, run BIDS validation using `scripts/validate_ucla_cnp.py`.
128
+ 5. Delegate to `smri-skill` for structural MRI processing.
129
+ 6. Delegate to `fmri-skill` for task-fMRI processing.
130
+ 7. Delegate to `dwi-skill` for dMRI processing.
131
+ 8. If phenotype extraction is requested, run `scripts/extract_ucla_cnp_phenotype.py`.
132
+ 9. If QC summary is requested, run `scripts/ucla_cnp_qc_summary.py`.
133
+ 10. Save outputs into `ucla_cnp_output/`.
134
+
135
+ ---
136
+
137
+ ## Modality Processing Delegation
138
+
139
+ | Modality | Delegated skill | Typical tasks | Main outputs |
140
+ |---|---|---|---|
141
+ | sMRI (T1w) | `smri-skill` | brain extraction, tissue segmentation | `smri_output/` derivatives |
142
+ | task-fMRI | `fmri-skill` | task GLM, activation analysis | `fmri_output/` task results |
143
+ | dMRI | `dwi-skill` | diffusion preprocessing, tensor metrics | `dwi_output/` metrics |
144
+
145
+ ---
146
+
147
+ ## Standard Output Layout
148
+
149
+ ```
150
+ ucla_cnp_output/
151
+ ├── bids/ # BIDS-staged data (or validation report)
152
+ ├── smri/ # Structural MRI derivatives
153
+ ├── fmri/ # Functional MRI derivatives (task-fMRI)
154
+ ├── dwi/ # Diffusion MRI derivatives
155
+ ├── phenotype/ # Merged phenotype tables (diagnosis, cognitive)
156
+ ├── qc/ # QC summaries and exclusion lists
157
+ └── logs/ # Processing logs
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Benchmark Adapter Guidance
163
+
164
+ For benchmark-style prompts, do not force the full orchestration when the task only asks for local UCLA CNP data validation.
165
+
166
+ - If the task starts from UCLA CNP data already present on disk and only asks for BIDS validation:
167
+ - Skip the download stage
168
+ - Default to the narrow path `local UCLA CNP discovery -> BIDS validation -> report`
169
+ - In benchmark mode, do not require explicit confirmation before presenting the validation solution.
170
+
171
+ ---
172
+
173
+ ## Safety and Execution Policy
174
+ - No execution before explicit plan confirmation.
175
+ - All execution must be routed via `claw-shell`.
176
+ - Missing dependencies must be resolved by `dependency-planner` before running.
177
+
178
+ ---
179
+
180
+ ## Important Notes and Limitations
181
+ - UCLA CNP has 4 diagnostic groups; group comparisons should account for sample size differences.
182
+ - Multiple cognitive tasks enable rich cognitive phenotyping.
183
+ - OpenNeuro ds000030 is a widely used benchmark dataset for BIDS tools.
184
+ - Extensive cognitive battery enables linking brain structure/function to behavior.
185
+ - `ucla-cnp-skill` is orchestration-only; detailed preprocessing logic remains in modality skills.
186
+
187
+ ---
188
+
189
+ ## When to Call This Skill
190
+ - User asks for end-to-end UCLA CNP workflow.
191
+ - User asks to process UCLA CNP neuroimaging data.
192
+ - User needs BIDS validation for UCLA CNP data.
193
+ - User asks to extract UCLA CNP phenotype data (diagnosis, cognitive).
194
+ - User asks for multi-disorder neuroimaging analysis.
195
+
196
+ ---
197
+
198
+ ## Complementary / Related Skills
199
+ - `smri-skill` → structural MRI preprocessing
200
+ - `fmri-skill` → functional MRI preprocessing and analysis
201
+ - `dwi-skill` → diffusion MRI preprocessing
202
+ - `bids-organizer` → BIDS validation and organization
203
+ - `brain-visualization` → visualization of derivatives
204
+ - `dependency-planner` → dependency resolution
205
+ - `conda-env-manager` → environment management
206
+ - `claw-shell` → command execution
207
+
208
+ ---
209
+
210
+ ## Reference
211
+ - UCLA CNP: https://www.humanconnectome.org/
212
+ - Poldrack et al. (2016): A phenomic analysis of the UCLA Consortium for Neuropsychiatric Phenomics LA5c Study. Scientific Data.
213
+ - OpenNeuro ds000030
214
+
215
+ Created At: 2026-05-06 14:21 HKT
216
+ Last Updated At: 2026-05-06 14:21 HKT
217
+ Author: chengwang96