From fc9c3e2a3e5dda78533dd0078efd75ff5b8f5460 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Tue, 6 Oct 2026 11:11:27 -0400 Subject: [PATCH 01/49] [DATALAD RUNCMD] Add STAMPED banner from https://github.com/stamped-principles/stamped-branding === Do not change lines below === { "chain": [], "cmd": "cp /home/yoh/proj/stamped-principles/stamped-branding/ver-3/name-banner/name-banner_ver-3.pdf stampedbanner_ver-3.pdf", "dsid": "9eab38ed-8db7-4b6a-b7ce-bab6be25b670", "exit": 0, "extra_inputs": [], "inputs": [], "outputs": [ "stampedbanner_ver-3.pdf" ], "pwd": "pics/borrowed" } ^^^ Do not change lines above ^^^ --- pics/borrowed/stampedbanner_ver-3.pdf | 1 + 1 file changed, 1 insertion(+) create mode 120000 pics/borrowed/stampedbanner_ver-3.pdf diff --git a/pics/borrowed/stampedbanner_ver-3.pdf b/pics/borrowed/stampedbanner_ver-3.pdf new file mode 120000 index 00000000..57cdb939 --- /dev/null +++ b/pics/borrowed/stampedbanner_ver-3.pdf @@ -0,0 +1 @@ +../../.git/annex/objects/Q1/zG/MD5E-s326267--56b07393b395a807b0242fbc308a26a9.pdf/MD5E-s326267--56b07393b395a807b0242fbc308a26a9.pdf \ No newline at end of file From 0e0634a97a24883a7f4fa0c35b3e35c045e5a8be Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Tue, 6 Oct 2026 11:13:23 -0400 Subject: [PATCH 02/49] [DATALAD RUNCMD] Add STAMPED banner from https://github.com/stamped-principles/stamped-branding === Do not change lines below === { "chain": [], "cmd": "cp /home/yoh/proj/stamped-principles/stamped-branding/ver-3/name-banner/name-banner_ver-3.svg stamped-banner_ver-3.svg", "dsid": "9eab38ed-8db7-4b6a-b7ce-bab6be25b670", "exit": 0, "extra_inputs": [], "inputs": [], "outputs": [ "stamped-banner_ver-3.svg" ], "pwd": "pics/borrowed" } ^^^ Do not change lines above ^^^ --- pics/borrowed/stamped-banner_ver-3.svg | 1 + 1 file changed, 1 insertion(+) create mode 120000 pics/borrowed/stamped-banner_ver-3.svg diff --git a/pics/borrowed/stamped-banner_ver-3.svg b/pics/borrowed/stamped-banner_ver-3.svg new file mode 120000 index 00000000..2982b761 --- /dev/null +++ b/pics/borrowed/stamped-banner_ver-3.svg @@ -0,0 +1 @@ +../../.git/annex/objects/2X/Pv/MD5E-s4193666--c78d882185e6a9c76f2f4017b964db85.svg/MD5E-s4193666--c78d882185e6a9c76f2f4017b964db85.svg \ No newline at end of file From 5281f7a5cb757f17d372d4dbb911f99048e97e82 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Tue, 6 Oct 2026 11:45:46 -0400 Subject: [PATCH 03/49] do delete pdf of stamped banner wrongly named --- pics/borrowed/stampedbanner_ver-3.pdf | 1 - 1 file changed, 1 deletion(-) delete mode 120000 pics/borrowed/stampedbanner_ver-3.pdf diff --git a/pics/borrowed/stampedbanner_ver-3.pdf b/pics/borrowed/stampedbanner_ver-3.pdf deleted file mode 120000 index 57cdb939..00000000 --- a/pics/borrowed/stampedbanner_ver-3.pdf +++ /dev/null @@ -1 +0,0 @@ -../../.git/annex/objects/Q1/zG/MD5E-s326267--56b07393b395a807b0242fbc308a26a9.pdf/MD5E-s326267--56b07393b395a807b0242fbc308a26a9.pdf \ No newline at end of file From d1c82ff424bb20f3dd13f65bf902a5a723e582ca Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Wed, 7 Oct 2026 14:19:35 -0400 Subject: [PATCH 04/49] draft materials for iEEG group talk on Friday --- 2026-dhmc-ieeg.html | 581 +++++++++++++++++++++++++++++ 2026-dhmc-ieeg/NOTES.md | 110 ++++++ pics/2026-dhmc-ieeg-qrcode.png | 1 + pics/borrowed/human+carrot.png | 1 + pics/borrowed/neuro-sciops-fig.svg | 1 + pics/borrowed/neuro-sciops.pdf | 1 + 6 files changed, 695 insertions(+) create mode 100644 2026-dhmc-ieeg.html create mode 100644 2026-dhmc-ieeg/NOTES.md create mode 120000 pics/2026-dhmc-ieeg-qrcode.png create mode 120000 pics/borrowed/human+carrot.png create mode 120000 pics/borrowed/neuro-sciops-fig.svg create mode 120000 pics/borrowed/neuro-sciops.pdf diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html new file mode 100644 index 00000000..15b80bb8 --- /dev/null +++ b/2026-dhmc-ieeg.html @@ -0,0 +1,581 @@ + + + + + + + + + Open Neuroscience Infrastructure for Intracranial EEG + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
+ +

Open Neuroscience Infrastructure for Intracranial EEG

+

+ A toolbelt, not one solution — and an invitation to help bridge academia and the clinic +

+ + + + + Dartmouth/DH Human Intracranial Electrophysiology Consortium — October 9th, 2026
+ Live slides/Sources: + https://datasets.datalad.org/centerforopenneuroscience/talks/2026-dhmc-ieeg.html +
+
+ + + + + + + + + +
+
+ + + + + +
+
+

Before we start

+

What does your pipeline look like today?

+

acquisition → preprocessing → analysis → sharing (or not)

+

(~5 min — we'll shape the rest of the talk around what you tell us)

+ +
+ +
+

One toolbelt, not one solution

+
    +
  • "Many sizes fit all" — no single tool or standard solves everything
  • +
  • You don't have to "buy in 100%" — pieces compose, and are useful alone
  • +
  • Everything today is a pointer: a name, a URL, a reason to look closer — + not a deep technical tutorial
  • +
+ +
+
+ + + + + +
+
+

Where this is going

+

Two worlds that talk past each other — and a group sitting exactly in the middle

+ + +
+
+graph LR
+  A[Academia / open neuroscience] -. weak .-> B(DHMC iEEG group - already here) -. weak .-> C[Clinic / hardware / vendors]
+  classDef aca fill:#dff0d8,stroke:#3c763d;
+  classDef bridge fill:#fcf8e3,stroke:#8a6d3b;
+  classDef clin fill:#d9edf7,stroke:#31708f;
+  class A aca
+  class B bridge
+  class C clin
+	  
+
+ + + + + + + +
BIDS / HED, NWB, DataLad,
OpenNeuro / NEMAR / DANDI
DICOM WG-16 ↔ BIDS, neuroconv, OBC (consent)Natus / Blackrock / Ripple /
Nihon Kohden / Medtronic, DICOM, PACS, EHR/EMR
+ +
+ +
+ +

Carrots, not (only) sticks

+ +

+ Figure from M. Hanke, "Carrots! Not sticks!" + hedgedoc.psychoinformatics.de/p/gBE63_ytiE +

+
+ +
+

What pulls people toward standards

+
    +
  • Carrots — the standards themselves: free tools, free archive storage, + "someone else already solved this", collaborators who can actually read your data
  • +
  • Sticks exist too — mostly from funders and journals: + NIH Data Management & Sharing Policy, journal data-availability requirements
  • +
  • Our pitch today is almost entirely carrots — the stick is already pulling on everyone; + we're here to make the carrot side concrete
  • +
+
+
+ + + + + +
+
+ +
+
+ + + + + +
+ +
+

NWB: Neurodata Without Borders

+
    +
  • Open standard for neurophysiology data (spikes, LFP, behavior, imaging, ...)
  • +
  • Self-describing, HDF5- or Zarr-backed container format
  • +
  • neuroconv — converts many acquisition-system formats into NWB + (a concrete bridge from clinical/proprietary hardware formats)
  • +
+ +
+ +
+

neurosift: stream, don't download

+
    +
  • Browser-based NWB viewer — no download required, works directly against DANDI
  • +
  • Open-source
  • +
  • TODO (Cody): record GIFs of your LFP (event-related) and spectrogram plugins — + live demo won't work over this group's Zoom, needs to be pre-recorded
  • +
+

+ One known iEEG NWB example on DANDI: + ds008610 (LFP only) + — TODO: find/convert a second example with spectrograms if one exists. +

+
+
+ + + + + +
+
+ +
+
+ + + + + +
+
+ +
+
+ + + + + +
+

Compute: pointers only

+
    +
  • ReproNim/containers — portable, versioned software environments
  • +
  • mechababs + BABS — + STAMPED execution of BIDS-Apps at scale, DataLad-native, per-subject isolation
  • +
  • TODO: dandi-compute demo — not yet documented anywhere we could pull from; need a pointer/screenshot from whoever owns it
  • +
  • TODO: "compute on Unity" — need one line from you/Austin; nothing in our existing materials mentions this
  • +
+
+ + + + + +
+
+ +
+
+ + + + + +
+
+

All standards are "Bad"*,
but some are used

+

* ref: D. Clunie, MICCAI 2017

+
+ +
+

Two widely-used standards which could cooperate more

+

BIDS (academia) and DICOM (clinic/vendors) — same underlying problem, + different communities, thin collaboration today

+ see 2023-bids-dicom.html + (BIDS 4 DICOM WG-16 talk) for the longer version of this argument + +
+ +
+

How could we collaborate on metadata that matters clinically?

+
    +
  • Should individual labs channel requests to manufacturers one at a time, + or could DICOM Working Groups (e.g. WG-16) help coordinate?
  • +
  • Proposition: a library of concrete DICOM↔BIDS/NWB conversions, + per manufacturer and modality
  • +
+
+ +
+

You're already standing in the gap

+
    +
  • This group runs clinical iEEG acquisition and does research analysis — + both worlds, already, every day
  • +
  • That makes you natural informants for neuroconv format support, + BEP010 edge cases, and DICOM↔BIDS/NWB conversion libraries
  • +
  • Ask: who else should be in that room? what hardware/format + gaps have you hit that we should know about?
  • +
+
+
+ + + + + +
+ +
+ + + + + +
+

Acknowledgements

+ + + + + +
+
+
Collaborators & sources
+
+
    +
  • Ariel Rokem, Rémi Gau — BIDS-101 slide material
  • +
  • Michael Hanke — "Carrots! Not sticks!" figure
  • +
  • Austin Macdonald — mechababs
  • +
  • SCCN/NEMAR, EMBER/BBQS, BrainKB, EBRAINS teams
  • +
+
+
+
+
Funders
+ + +
Collaborators
+ + + +
+
+ +
+

Thank you!

+

Questions & discussion

+
+ + + + +
+
+ + + + + + + + + diff --git a/2026-dhmc-ieeg/NOTES.md b/2026-dhmc-ieeg/NOTES.md new file mode 100644 index 00000000..fa6ded27 --- /dev/null +++ b/2026-dhmc-ieeg/NOTES.md @@ -0,0 +1,110 @@ +--- +title: CON for iEEG @ DHMC group + +--- + +# CON for iEEG @ DHMC group + +## Prior pointers + +"intracranial electrophysiology meeting" + +> I hope all is well. Our Dartmouth/DH Human Intracranial + Electrophysiology Consortium would like to invite you to give a talk at + one of our monthly meetings. Our next meeting will take place via Zoom + from 1:00 to 2:00 PM on September 11, 2026. + +> Thank you for proposing the various topics and we would love to have Cody talk about NWB. Nonetheless, topics on data standards, data management, and reproducibility would be very helpful to our group. + +> @Krzysztof A. Bujarski, do we have any prior recordings of our past meetings? In terms of the audience, our human intracranial group primarily collects data from epilepsy patients (performing computer-based tasks) undergoing +> intracranial EEG investigation. Some of the PIs involved in this group include Kris Bujarski, Caroline Robertson, Wilder Doucette, Arjen Stolk, Tor Wager, and me. We all use various tools for analysis (python, R, and matlab +> packages) and preprocessing. I anticipate some questions on the best practices (and not too onerous) we can undertake as a group to standardize the outputs of individual analysis steps (preprocessing versus +> experiment-specific analyses) such that someone else who is not involved in the experiment/analysis can examine, understand, and replicate (or not) the results with little effort. + +> Thank you very much for agreeing to present at our group’s meeting. + October 9^th at 1 PM would be perfect if you could make it. As + Richard may have told you, we collect human intracranial EEG data for + research purposes. Right now it is macroelectrodes but soon it will + also be microelectrodes with larger storage and data handling needs. + We would be most interested in hearing about what you do and how you go + about handling data in general. We have not been saving our video + meetings but generally 10-15 people meet over Zoom and discuss a + research project or we have a conversation about a specific topic. + Happy to talk to you if you would like more context. + + + +Target ~40 minutes for talk, leave lots of time for questions/discussion + + +## Points + +- May be start the talk with mission statement of discovering from their questions/feedback on how they do research and where "our" products could help + - clarifications Qs are good, BIG - till Q&A + - Drive or thread with "Reasons" as "Why?" any particular thing should be adopted/used + - "many sizes fit all" -- not 1 solution, but a "toolbelt" and many ways to assemble without "buying in 100%" + - relate to maturity model plot, may be use it as the umbrella to thread under? + +- Focus on high-level concepts: + - BI **Archives** + - Mainly OpenNeuro/NEMAR, talk about your repronim work? mention future of EMBER & BBQS + - reasons AKA why good: "free backup", "open by design" [ref] + - **Standards** as enabler for tooling: + - Oliver's poster to bring them all together + - from single file format into datasets + - BIDS data structure and HED annotations within (and on NEMAR) + - point to AI tools to come up with annotations + - seek their input on how THEY do preprocessing + - NWB + - neurosift demos (will have to mostly be GIFs on DANDI data) + - accent: stream based, no need to download + - open-source + - Cody's plugins on LFP (event related) and spectrograms + - Example 1 (LFP only): https://openneuro.org/datasets/ds008610/versions/1.0.0/file-display/sub-01:ses-ieeg01:ieeg:sub-01_ses-ieeg01_task-FUS_acq-VPL_run-005_ieeg.nwb + - Not finding any others + - **RDM** Data Management (DataLad get, run/rerun, containers) + - **must** have reason(s) stated + - STAMPED principles (which we then keep coming back) + - Brief overview + pointer to BBQS talk + - Relate to FAIR they have likely heard about (Cody's slide/part of poster) + - Self-containment + Modularity: (Meta) BIDS-Study + - point to https://github.com/brain-bbqs/study-template + - demo OpenNeuroStudies and dandi-compute + - STAMPED examples + - Compute + - dandi-compute + - mechababs (enabler for BIDS datasets) and compute on Unity + - Visions for the future: + - mass preprocessed data to be reused with confidence: both of those for "mass compute" to fascilitate future "meta-studies" or "multi-verse" + - knowledge bases: from local (ORINOCOs) to EBRAIN KB, brainkb etc and relation to STAMPED + - + +- Map out the mind-tree of resources across projects + - ReproNim: reproducible practices + - webinar series talks + - reprotube copy with them + - point to ReproNim fellows program + - DANDI: + - NeuroData AI accepting applications + - EMBER [emphasize future, nothing available as of today]: + - Synchronization (they are the experts to share expertiese) + - Pozu: turnkey platform for pose estimation and behavioral annotations with integration into archives + +- Map/remind any particular solution in terms of STAMPED and FAIR + +### Messages + +- "MVC" points to modularity with models for modules/components +- Open Source might allow + - for local use whenever BRAIN archives use centrally + - to collaborate with colleagues who do not have your proprietary solution + - have issue reported & fixed +- "Cool stuff (visualization, turnkey apps) is possible only because of boring stuff (standards)" +- Bring up DICOM (Open Standard) standard as unifying factor for imaging and some physio + - problem: when proprietary fields are used. + - again not "all size fits all" but iterative improvements +- Bring up NWB as the unification of the wild-west in neurophysiology + - neuroconv image for conversions... + - They could become part of the larger DICOM ecosystem + - point to WG-32 requests + diff --git a/pics/2026-dhmc-ieeg-qrcode.png b/pics/2026-dhmc-ieeg-qrcode.png new file mode 120000 index 00000000..b67dbc9f --- /dev/null +++ b/pics/2026-dhmc-ieeg-qrcode.png @@ -0,0 +1 @@ +../.git/annex/objects/1Q/f4/MD5E-s969--f46f6a205a1cdd524f100df55a03fb04.png/MD5E-s969--f46f6a205a1cdd524f100df55a03fb04.png \ No newline at end of file diff --git a/pics/borrowed/human+carrot.png b/pics/borrowed/human+carrot.png new file mode 120000 index 00000000..49b99981 --- /dev/null +++ b/pics/borrowed/human+carrot.png @@ -0,0 +1 @@ +../../.git/annex/objects/q8/jz/MD5E-s59022--2c5b2fa9eafe978a2789153c08e8fd1a.png/MD5E-s59022--2c5b2fa9eafe978a2789153c08e8fd1a.png \ No newline at end of file diff --git a/pics/borrowed/neuro-sciops-fig.svg b/pics/borrowed/neuro-sciops-fig.svg new file mode 120000 index 00000000..7cd06360 --- /dev/null +++ b/pics/borrowed/neuro-sciops-fig.svg @@ -0,0 +1 @@ +../../.git/annex/objects/Q1/Mg/MD5E-s403001--bbdd0047190b7b7b5f3c7c744df729e5.svg/MD5E-s403001--bbdd0047190b7b7b5f3c7c744df729e5.svg \ No newline at end of file diff --git a/pics/borrowed/neuro-sciops.pdf b/pics/borrowed/neuro-sciops.pdf new file mode 120000 index 00000000..e9865461 --- /dev/null +++ b/pics/borrowed/neuro-sciops.pdf @@ -0,0 +1 @@ +../../.git/annex/objects/zF/Wg/MD5E-s154841--585dfce386f842891e334e476e25ca1b.pdf/MD5E-s154841--585dfce386f842891e334e476e25ca1b.pdf \ No newline at end of file From cc14ad65dae81a570282e0f0c9224c96422b573b Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Wed, 7 Oct 2026 23:27:44 -0400 Subject: [PATCH 05/49] Added thread through the slides based on the ecosystem figure --- .gitignore | 1 + 202404xx-NSF-POSE-BIDS.odp | 1 + 202404xx-NSF-POSE-BIDS.pdf | 1 + 2026-dhmc-ieeg.html | 695 +++++++++++++----- README.md | 10 +- pics/academic-clinician.svg | 15 + pics/academic-clinician.svgtune | 25 + pics/academic-clinician_tuned/academic.svg | 15 + pics/academic-clinician_tuned/base.svg | 15 + pics/academic-clinician_tuned/bep032.svg | 15 + pics/academic-clinician_tuned/clinical.svg | 15 + pics/academic-clinician_tuned/ecosystem.svg | 15 + pics/academic-clinician_tuned/layers.svg | 15 + pics/academic-clinician_tuned/wg32.svg | 15 + pics/academic-participants.svg | 30 + pics/academic-participants.svgtune | 55 ++ pics/academic-participants_tuned/archives.svg | 30 + pics/academic-participants_tuned/av.svg | 30 + pics/academic-participants_tuned/base.svg | 30 + .../academic-participants_tuned/bids-apps.svg | 30 + pics/academic-participants_tuned/bids.svg | 30 + pics/academic-participants_tuned/compute.svg | 30 + .../dandi-compute.svg | 30 + .../data-management.svg | 30 + pics/academic-participants_tuned/hed.svg | 30 + pics/academic-participants_tuned/nwb-apps.svg | 30 + pics/academic-participants_tuned/nwb.svg | 30 + pics/academic-participants_tuned/nwb2bids.svg | 30 + .../participants.svg | 30 + pics/academic-participants_tuned/pozu.svg | 30 + pics/academic-participants_tuned/stamped.svg | 30 + pics/academic-participants_tuned/sync.svg | 30 + pics/borrowed/brainkb-webshot-20261006.png | 1 + pics/borrowed/ebrains-kg-webshot-20261006.png | 1 + .../ember-archive-webshot-20261005.png | 1 + pics/nemar-dataexplorer-20261006.png | 1 + pics/nemar-homepage-20261006.png | 1 + tools/mkpdf.py | 70 ++ 38 files changed, 1291 insertions(+), 202 deletions(-) create mode 120000 202404xx-NSF-POSE-BIDS.odp create mode 120000 202404xx-NSF-POSE-BIDS.pdf create mode 100644 pics/academic-clinician.svg create mode 100644 pics/academic-clinician.svgtune create mode 100644 pics/academic-clinician_tuned/academic.svg create mode 100644 pics/academic-clinician_tuned/base.svg create mode 100644 pics/academic-clinician_tuned/bep032.svg create mode 100644 pics/academic-clinician_tuned/clinical.svg create mode 100644 pics/academic-clinician_tuned/ecosystem.svg create mode 100644 pics/academic-clinician_tuned/layers.svg create mode 100644 pics/academic-clinician_tuned/wg32.svg create mode 100644 pics/academic-participants.svg create mode 100644 pics/academic-participants.svgtune create mode 100644 pics/academic-participants_tuned/archives.svg create mode 100644 pics/academic-participants_tuned/av.svg create mode 100644 pics/academic-participants_tuned/base.svg create mode 100644 pics/academic-participants_tuned/bids-apps.svg create mode 100644 pics/academic-participants_tuned/bids.svg create mode 100644 pics/academic-participants_tuned/compute.svg create mode 100644 pics/academic-participants_tuned/dandi-compute.svg create mode 100644 pics/academic-participants_tuned/data-management.svg create mode 100644 pics/academic-participants_tuned/hed.svg create mode 100644 pics/academic-participants_tuned/nwb-apps.svg create mode 100644 pics/academic-participants_tuned/nwb.svg create mode 100644 pics/academic-participants_tuned/nwb2bids.svg create mode 100644 pics/academic-participants_tuned/participants.svg create mode 100644 pics/academic-participants_tuned/pozu.svg create mode 100644 pics/academic-participants_tuned/stamped.svg create mode 100644 pics/academic-participants_tuned/sync.svg create mode 120000 pics/borrowed/brainkb-webshot-20261006.png create mode 120000 pics/borrowed/ebrains-kg-webshot-20261006.png create mode 120000 pics/borrowed/ember-archive-webshot-20261005.png create mode 120000 pics/nemar-dataexplorer-20261006.png create mode 120000 pics/nemar-homepage-20261006.png create mode 100755 tools/mkpdf.py diff --git a/.gitignore b/.gitignore index 9eb2f925..5578c1f6 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ node_modules/ .cache .pki talk-proposal-draft.pdf +.duct diff --git a/202404xx-NSF-POSE-BIDS.odp b/202404xx-NSF-POSE-BIDS.odp new file mode 120000 index 00000000..cf8293e3 --- /dev/null +++ b/202404xx-NSF-POSE-BIDS.odp @@ -0,0 +1 @@ +.git/annex/objects/wg/8g/MD5E-s30051553--3a1d79c45fd22c347dc21ebcaec311f2.odp/MD5E-s30051553--3a1d79c45fd22c347dc21ebcaec311f2.odp \ No newline at end of file diff --git a/202404xx-NSF-POSE-BIDS.pdf b/202404xx-NSF-POSE-BIDS.pdf new file mode 120000 index 00000000..608e85cb --- /dev/null +++ b/202404xx-NSF-POSE-BIDS.pdf @@ -0,0 +1 @@ +.git/annex/objects/jQ/X2/MD5E-s9129001--1c1996a62416a0c6f5c9f65915f9dc6b.pdf/MD5E-s9129001--1c1996a62416a0c6f5c9f65915f9dc6b.pdf \ No newline at end of file diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 15b80bb8..735a3a7a 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -31,6 +31,25 @@ DRAFT for review. TODO markers throughout flag content that needs input from Cody Baker or is explicitly out of scope for this first draft. See 2026-dhmc-ieeg/NOTES.md for the original brief. + + Structure (2026-10-07 reorg, refined 2026-10-07): the backbone is two + incrementally-built diagrams (pics/academic-clinician.svg and + pics/academic-participants.svg, sequences driven by their .svgtune + files, pre-rendered under pics/academic-clinician_tuned/ and + pics/academic-participants_tuned/). Image slides are NOT annotated + with which svgtune step they are -- the filename already says so. + Existing content slides ("detours") are slotted in right after the + diagram step that introduces their topic, grouped with it into one + top-level section. When a detour is substantial (2+ slides), the + section closes by returning to the same triggering image once more + (a bookend) before the next top-level section moves on to the next + increment -- a smoother transition than jumping straight from + content back into a new, slightly-changed diagram. Light, single- + slide detours (or bare TODO placeholders) skip the bookend and just + flow into the next section. Slide titles for the bare image-reveal + slides are intentionally left blank -- TBD. Anything that doesn't + map onto either diagram lives in the "Leftover" section near the + end for Yarik to triage. --> @@ -40,7 +59,7 @@
-

Open Neuroscience Infrastructure for Intracranial EEG

+

Open Neuroscience Infrastructure
for Intracranial EEG

A toolbelt, not one solution — and an invitation to help bridge academia and the clinic

@@ -51,11 +70,12 @@

Open Neuroscience Infrastructu Yaroslav O. Halchenko
@yarikoptic - @yarikoptic@fosstodon.org + @yarikoptic@fosstodon.org
+ ORCID 0000-0003-3456-2493 + - Cody Baker
- cody.c.baker.phd@gmail.com
+ Cody Baker

ORCID 0000-0002-0829-4790 @@ -89,182 +109,241 @@

Open Neuroscience Infrastructu

- - + -
+
-

Before we start

-

What does your pipeline look like today?

-

acquisition → preprocessing → analysis → sharing (or not)

-

(~5 min — we'll shape the rest of the talk around what you tell us)

- +
+ +
-

One toolbelt, not one solution

-
    -
  • "Many sizes fit all" — no single tool or standard solves everything
  • -
  • You don't have to "buy in 100%" — pieces compose, and are useful alone
  • -
  • Everything today is a pointer: a name, a URL, a reason to look closer — - not a deep technical tutorial
  • +

    Brief Yarik's Bio

    +

    Born in Siberia (RSFSR, USSR), Grew up in Ukraine, Matured in U.S.A.

    +
      +
    • -1994 Physics Mathematics Gymnasium #17 (Ukraine):
      + Regional&State Physics and Programming + competitions. MS-DOS. Borland Pascal
    • + +
    • -1999 VSTU (Ukraine): + Masters in Opto-Electronic Engineering
      + (@yarikoptic). State Physics and International ACM Programming + competitions. Spine diagnostic apparatus. Member of "Small Academy of Science of + Ukraine". SPIE. Soros Fellowship (twice). MS-DOS/Windows. + Borland Pascal, Delphi, VBA +
    • + +
    • -2003 University of New Mexico: + Masters in Computer Science
      + B.Pearlmutter. + SOBI/JADE ICA for single trial MEG. Favorite course: Data structures + and algorithms. + Debian GNU/Linux. + C, Matlab, shell. CVS +
    • + +
    • -2009 Rutgers-Newark/NJIT: + Ph.D. in Computer Science
      + S.Hanson. + fMRI decoding (RFE SVM). + RUMBA. + HPC sysadmin (cfengine, PBS). + M.Hanke. + Debian pkg-exppsy (for FSL and PyEPL). + Official Debian developer. + fMRI/EEG (TRANS)fusion. + PyMVPA. + C++, Python. SVN, GIT. 1 wife, 3 kids +
    • +
    • - NOW Dartmouth College, PBS Department:
      + Postdoc, Scientist, Research Assistant/Associate/null Professor

      + J.Haxby. + PyMVPA + (Hyperalignment, + ...), + NeuroDebian, + DataLad, + ReproNim, + DANDI, + STAMPED, + ... + 1(+1) dog, 3 cats, Chicken Coop (12 chickens, 1 rooster), + ... + distribits, + CON: + +
    - -
-
+ + +
- - - -
-

Where this is going

-

Two worlds that talk past each other — and a group sitting exactly in the middle

- - -
-
-graph LR
-  A[Academia / open neuroscience] -. weak .-> B(DHMC iEEG group - already here) -. weak .-> C[Clinic / hardware / vendors]
-  classDef aca fill:#dff0d8,stroke:#3c763d;
-  classDef bridge fill:#fcf8e3,stroke:#8a6d3b;
-  classDef clin fill:#d9edf7,stroke:#31708f;
-  class A aca
-  class B bridge
-  class C clin
-	  
+
+ + + + + + +
- - - - - - - -
BIDS / HED, NWB, DataLad,
OpenNeuro / NEMAR / DANDI
DICOM WG-16 ↔ BIDS, neuroconv, OBC (consent)Natus / Blackrock / Ripple /
Nihon Kohden / Medtronic, DICOM, PACS, EHR/EMR
-
-
- -

Carrots, not (only) sticks

- -

- Figure from M. Hanke, "Carrots! Not sticks!" - hedgedoc.psychoinformatics.de/p/gBE63_ytiE -

+
+

Acknowledgements

+ + + +
-

What pulls people toward standards

+

Disclaimers

+

One toolbelt, not one solution

    -
  • Carrots — the standards themselves: free tools, free archive storage, - "someone else already solved this", collaborators who can actually read your data
  • -
  • Sticks exist too — mostly from funders and journals: - NIH Data Management & Sharing Policy, journal data-availability requirements
  • -
  • Our pitch today is almost entirely carrots — the stick is already pulling on everyone; - we're here to make the carrot side concrete
  • +
  • "Many sizes fit all" — no single tool or standard solves everything
  • +
  • You don't have to "buy in 100%" — pieces compose, and are useful alone
  • +
  • Everything today is a pointer not a deep technical tutorial
- + + + -
-
- + +
+
+
- - - +
-
+ +
+ +
+

NWB: Neurodata Without Borders

  • Open standard for neurophysiology data (spikes, LFP, behavior, imaging, ...)
  • @@ -274,8 +353,21 @@

    NWB: Neurodata Without Borders

+
+ + + + +
+ +
+ +
+

neurosift: stream, don't download

  • Browser-based NWB viewer — no download required, works directly against DANDI
  • @@ -290,13 +382,18 @@

    neurosift: stream, don't download

+ - - - + +
-
+
+ +
+ +
+ + +
+ +
+ - - - + +
-
+
+ +
+ +
+ +
+ + + Gorgolewski, K. J., Auer, T., Calhoun, V. D., Craddock, R. C., Das, S., Duff, + E. P., Flandin, G., Ghosh, S. S., Glatard, T., Halchenko, Y. O., Handwerker, + D. A., Hanke, M., Keator, D., Li, X., Michael, Z., Maumet, C., Nichols, B. N., + Nichols, T. E., Pellman, J., Poline, J.-B., Rokem, A., Schaefer, G., Sochat, V., + Triplett, W., Turner, J. A., Varoquaux, G., and Poldrack, R. A. (2016). The + brain imaging data structure, a format for organizing and describing outputs + of neuroimaging experiments. Scientific Data, 3:160044 + +
+ +
+
+ + +
+ +
+
+ + + + + +
+
+ + +
+ +
+ +
+ +
+

dandi-compute

+
    +
  • TODO: dandi-compute demo — not yet documented anywhere we could pull from; + need a pointer/screenshot from whoever owns it
  • +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+ + + + +
+
+ +
+ +
+

Compute: pointers only

+
    +
  • ReproNim/containers — portable, versioned software environments
  • +
  • mechababs + BABS — + STAMPED execution of BIDS-Apps at scale, DataLad-native, per-subject isolation
  • +
  • TODO: "compute on Unity" — need one line from you/Austin; nothing in our existing materials mentions this
  • +
+
+
+ + + + + +
+
+ + +
+ +
+ +
+
+ + + + + + +
+
+ +
+ +
+
+ + +
+ +
+ - + + +
-

Compute: pointers only

-
    -
  • ReproNim/containers — portable, versioned software environments
  • -
  • mechababs + BABS — - STAMPED execution of BIDS-Apps at scale, DataLad-native, per-subject isolation
  • -
  • TODO: dandi-compute demo — not yet documented anywhere we could pull from; need a pointer/screenshot from whoever owns it
  • -
  • TODO: "compute on Unity" — need one line from you/Austin; nothing in our existing materials mentions this
  • -
-
+
+

Leftover: not yet placed

+

These don't map onto a specific step in either + incremental diagram (academic-clinician / academic-participants) — + kept here for Yarik to decide where (or whether) they belong.

+
+
+

How could we collaborate on metadata that matters clinically?

+
    +
  • Should individual labs channel requests to manufacturers one at a time, + or could DICOM WG-32 help coordinate?
  • +
  • Proposition: a library of concrete DICOM↔BIDS/NWB conversions, + per manufacturer and modality
  • +
+
+ +
+

You're already standing in the gap

+
    +
  • This group runs clinical iEEG acquisition and does research analysis — + both worlds, already, every day
  • +
  • That makes you natural informants for neuroconv format support, + BEP010 edge cases, and DICOM↔BIDS/NWB conversion libraries
  • +
  • Ask: who else should be in that room? what hardware/format + gaps have you hit that we should know about?
  • +
+
+ +
+ +

Carrots, not (only) sticks

+ +

+ Figure from M. Hanke, "Carrots! Not sticks!" + hedgedoc.psychoinformatics.de/p/gBE63_ytiE +

+
+ +
+

What pulls people toward standards

+
    +
  • Carrots — the standards themselves: free tools, free archive storage, + "someone else already solved this", collaborators who can actually read your data
  • +
  • Sticks exist too — mostly from funders and journals: + NIH Data Management & Sharing Policy, journal data-availability requirements
  • +
  • Our pitch today is almost entirely carrots — the stick is already pulling on everyone; + we're here to make the carrot side concrete
  • +
+
- - - -
diff --git a/pics/borrowed/2025-sfn-poster-data-standards--archives.png b/pics/borrowed/2025-sfn-poster-data-standards--archives.png new file mode 120000 index 00000000..352bfa05 --- /dev/null +++ b/pics/borrowed/2025-sfn-poster-data-standards--archives.png @@ -0,0 +1 @@ +../../.git/annex/objects/63/1w/MD5E-s140997--1dfba006c787c3766bc5220fbf83f830.png/MD5E-s140997--1dfba006c787c3766bc5220fbf83f830.png \ No newline at end of file From 39a7c5cd15df5eb45d74d10e9a036b4af7542b3a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 8 Oct 2026 18:22:09 +0000 Subject: [PATCH 19/49] 2026-dhmc-ieeg: Neurosift slides: OpenNeuro example wording, lab/subject lines - "One known iEEG NWB example" is on OpenNeuro (ds008610), not DANDI; TODO now: find some on DANDI with the neurosift registration fix - Example slides get a second caption line with lab, species and task: Zador Lab (CSHL), Jadhav Lab (Brandeis), Allen Institute for Neural Dynamics Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2026-dhmc-ieeg.html | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 78462dbd..53a4e783 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -444,8 +444,8 @@

In large part thanks to apps such as Neurosift

  • New spectrogram view
  • - One known iEEG NWB example on DANDI: - + One known iEEG NWB example on OpenNeuro: + ds008610 (LFP only)

    @@ -461,7 +461,9 @@

    Camera motion energy, aligned to auditory_cue_time, grouped by gabor_stimulus_contrast - — DANDI:000409 + — DANDI:000409
    + Zador Lab, Cold Spring Harbor Laboratory + · Mus musculus · visual stimulus + decision-making task

    +
    +

    NWB GUIDE: the TurboTax of file conversions

    +
    + + +
    +

    + github.com/NeurodataWithoutBorders/nwb-guide +

    + +
    +

    Life without NWB

    diff --git a/pics/nwb-guide-file-metadata-20261008.webp b/pics/nwb-guide-file-metadata-20261008.webp new file mode 120000 index 00000000..71ae368e --- /dev/null +++ b/pics/nwb-guide-file-metadata-20261008.webp @@ -0,0 +1 @@ +../.git/annex/objects/zJ/Vg/MD5E-s90096--4c53b68777258af1f5135a2ef07c4340.webp/MD5E-s90096--4c53b68777258af1f5135a2ef07c4340.webp \ No newline at end of file diff --git a/pics/nwb-guide-logo.png b/pics/nwb-guide-logo.png new file mode 120000 index 00000000..1e6ca1e1 --- /dev/null +++ b/pics/nwb-guide-logo.png @@ -0,0 +1 @@ +../.git/annex/objects/2f/3K/MD5E-s80805--c90fbdf995b20d8c8838b66c4cd32d49.png/MD5E-s80805--c90fbdf995b20d8c8838b66c4cd32d49.png \ No newline at end of file From 80efa0bd800e87a8d9ffafe931698b8bec131631 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 8 Oct 2026 18:37:16 +0000 Subject: [PATCH 21/49] 2026-dhmc-ieeg: NeuroConv formats as a modality-colored word cloud "Life without NWB": replace the formats listing with a word cloud of the same formats colored by modality (extracellular ephys with spike sorting shade, intracellular, optical imaging/segmentation, natural behavior, behavioral events; faded = in progress), with the NeuroConv logo beside it. Generator: 2026-dhmc-ieeg/neuroconv-formats-cloud.py. The original figure file stays in pics/. The logo is annexed; its content is also served via jsDelivr from the claude/festive-darwin-hvuqwk branch (URL registered with git-annex). Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2026-dhmc-ieeg.html | 5 ++- 2026-dhmc-ieeg/neuroconv-formats-cloud.py | 48 +++++++++++++++++++++++ pics/neuroconv-formats-cloud.svg | 1 + pics/neuroconv-logo.png | 1 + 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 2026-dhmc-ieeg/neuroconv-formats-cloud.py create mode 100644 pics/neuroconv-formats-cloud.svg create mode 120000 pics/neuroconv-logo.png diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 5b7eb5e4..e3634885 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -404,7 +404,10 @@

    NWB GUIDE: the TurboTax of file conversions

    Life without NWB

    - +
    + + +

    neuroconv.readthedocs.io

    diff --git a/2026-dhmc-ieeg/neuroconv-formats-cloud.py b/2026-dhmc-ieeg/neuroconv-formats-cloud.py new file mode 100644 index 00000000..db70da15 --- /dev/null +++ b/2026-dhmc-ieeg/neuroconv-formats-cloud.py @@ -0,0 +1,48 @@ +# Generates pics/neuroconv-formats-cloud.svg (NeuroConv formats, colored by modality). +# Needs only Pillow; run from the repo root: python3 2026-dhmc-ieeg/neuroconv-formats-cloud.py +import math, random +from PIL import ImageFont +FONT='/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf' +W,H=1500,800 +cats={ # name: (color, center, words) + 'Extracellular ephys: recording':('#1f5fa8',(420,330),"AlphaOmega Axona Biocam Blackrock EDF Intan MaxOne MCSRaw MEArec Neuralynx NeuroScope OpenEphys Plexon Spike2 Spikegadgets SpikeGLX TDT WhiteMatter".split()), + 'Extracellular ephys: sorting':('#5b8fd1',(420,330),"Blackrock CellExplorer KiloSort Neuralynx NeuroScope Phy Plexon".split()), + 'Intracellular ephys':('#6a3d9a',(760,120),["ABF"]), + 'Optical: imaging':('#c8501a',(1050,250),"Bruker HDF5 Micro-Manager Miniscope Scanbox ScanImage Tiff Thor Inscopix".split()), + 'Optical: segmentation':('#e8963c',(1050,250),"Caiman CNMFE EXTRACT Suite2P".split()), + 'Natural behavior':('#2a8a4a',(1000,600),"Audio DeepLabCut FicTrac LightningPose SLEAP Videos Facemap Moseq".split()), + 'Behavioral events':('#8a7a1a',(560,650),"CSV Excel MedPC".split()), +} +soon={'Inscopix','Facemap','Moseq'} # greyed out on the NeuroConv listing +pad=8; placed=[]; out=[] +def fits(b): + x0,y0,x1,y1=b + if x0<10 or y0<10 or x1>W-10 or y1>H-85: return False + return all(x1+pad<=a or x0-pad>=c or y1+pad<=b2 or y0-pad>=d for a,b2,c,d in placed) +random.seed(4) +items=[] +for cat,(col,ctr,words) in cats.items(): + for w in words: items.append((cat,col,ctr,w)) +items.sort(key=lambda t:-len(t[3])) +for cat,col,ctr,w in items: + size=44 if len(w)<=5 else 38 if len(w)<=8 else 32 + f=ImageFont.truetype(FONT,size); tw=f.getlength(w); th=size*0.95 + ok=False; t=0 + while not ok and t<4000: + r=2.2*t**0.5*4; a=t*0.55; x=ctr[0]+r*math.cos(a)-tw/2; y=ctr[1]+r*math.sin(a)*0.6-th/2 + b=(x,y,x+tw,y+th); ok=fits(b); t+=1 + assert ok,w + placed.append(b) + op=0.35 if w in soon else 1 + out.append(f'{w}') +legend=[('Extracellular ephys: recording','#1f5fa8'),('spike sorting','#5b8fd1'),('Intracellular ephys','#6a3d9a'), + ('Optical: imaging','#c8501a'),('segmentation','#e8963c'),('Natural behavior','#2a8a4a'),('Behavioral events','#8a7a1a'),('faded: in progress','#bbbbbb')] +legsvg=[]; x=20; y=H-62 +for label,col in legend: + f=ImageFont.truetype(FONT,20); tw=f.getlength(label) + if x+tw+50>W-10: x=20; y+=30 + legsvg.append(f'{label}') + x+=tw+56 +svg=f''+''.join(out)+''.join(legsvg)+'' +open('/home/user/talks/pics/neuroconv-formats-cloud.svg','w').write(svg) +print(len(svg),'bytes',len(out),'words; legend width',x) diff --git a/pics/neuroconv-formats-cloud.svg b/pics/neuroconv-formats-cloud.svg new file mode 100644 index 00000000..bf00867a --- /dev/null +++ b/pics/neuroconv-formats-cloud.svg @@ -0,0 +1 @@ +Micro-ManagerLightningPoseSpikegadgetsCellExplorerWhiteMatterAlphaOmegaNeuroScopeNeuroScopeDeepLabCutBlackrockNeuralynxOpenEphysBlackrockNeuralynxMiniscopeScanImageSpikeGLXKiloSortInscopixScanboxEXTRACTSuite2PFicTracFacemapBiocamMaxOneMCSRawMEArecPlexonSpike2PlexonBrukerCaimanVideosAxonaIntanCNMFEAudioSLEAPMoseqExcelMedPCHDF5TiffThorEDFTDTPhyABFCSVExtracellular ephys: recordingspike sortingIntracellular ephysOptical: imagingsegmentationNatural behaviorBehavioral eventsfaded: in progress \ No newline at end of file diff --git a/pics/neuroconv-logo.png b/pics/neuroconv-logo.png new file mode 120000 index 00000000..96ab9536 --- /dev/null +++ b/pics/neuroconv-logo.png @@ -0,0 +1 @@ +../.git/annex/objects/Fq/5V/MD5E-s459609--11783e72e3293a976c63d4e2707e8170.png/MD5E-s459609--11783e72e3293a976c63d4e2707e8170.png \ No newline at end of file From 2f05d0308b310ac364342e71af6eb4f8c0cc664c Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 14:43:55 -0400 Subject: [PATCH 22/49] More on consent and archives --- 2026-dhmc-ieeg.html | 83 ++++++++++++++++--- .../dandiarchive-stats-webshote-20261008.png | 1 + .../dandiarchive-webshote-20261008.png | 1 + .../openneuro-ieeg-webshote-20261008.png | 1 + 4 files changed, 74 insertions(+), 12 deletions(-) create mode 120000 pics/borrowed/dandiarchive-stats-webshote-20261008.png create mode 120000 pics/borrowed/dandiarchive-webshote-20261008.png create mode 120000 pics/borrowed/openneuro-ieeg-webshote-20261008.png diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 78462dbd..04dad17f 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -346,9 +346,41 @@

    Federally regulated but locally “managed”

    every archive downstream (OpenNeuro, DANDI, NEMAR, EMBER) relies on consent like this at the gate

    - + +
    +

    The ask: plan for depositing to the archive in the consent form

    +

    Consent is the one step that is MUCH harder if not impossible to do later!

    + +
    + “We will give access to the data we are collecting, including the imaging data, + to the general public via the Internet and a fully open database.” +
    — one sentence from the + OBC Ultimate form +
    + +

    Ideally aim to

    + +
      +
    • Name the archives, not just “investigators at other institutions”: + OpenNeuro/NEMAR, + DANDI, + EMBER
    • +
    • Open as the default tier; controlled access as the fallback, not the only option
    • +
    • Permit secondary research beyond this protocol's aims, with no end date
    • +
    • Cover the whole record: iEEG + electrode-localization CT/MRI + task logs + video
    • +
    • Take care about data (pseudo)annonymization as early as feasible
    • +
    +

    + Reuse vetted wording the way you reuse a software license — your IRB then reviews a + known template instead of ad-hoc prose: + open-brain-consent.readthedocs.io + · + NIH + sample language for secondary research (2022) + · it also covers the sharing half of your + NIH DMS plan +

    +
    @@ -511,11 +543,11 @@

    -
    +
    diff --git a/pics/borrowed/nemar-webshote-20261008.png b/pics/borrowed/nemar-webshote-20261008.png new file mode 120000 index 00000000..91485aea --- /dev/null +++ b/pics/borrowed/nemar-webshote-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/Wk/Zq/MD5E-s2007009--fc930455f6f4cf7cc7f2b78ce7e3e87a.png/MD5E-s2007009--fc930455f6f4cf7cc7f2b78ce7e3e87a.png \ No newline at end of file From f3d4683f2af12c21c25e53759e0dd847cc3e382d Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 20:09:09 -0400 Subject: [PATCH 32/49] Clauded script for injecting pretty faces, will tune manually for now --- 2026-dhmc-ieeg.html | 92 ++++++++++- con-whoweare.phtml | 73 +++++++++ pics/con-whoweare/adina.jpg | 1 + pics/con-whoweare/asmacdo.jpg | 1 + pics/con-whoweare/ben.jpg | 1 + pics/con-whoweare/chang.jpg | 1 + pics/con-whoweare/chr.jpg | 1 + pics/con-whoweare/chris.jpg | 1 + pics/con-whoweare/cody.jpg | 1 + pics/con-whoweare/franco.jpg | 1 + pics/con-whoweare/gergana.jpg | 1 + pics/con-whoweare/ito.jpg | 1 + pics/con-whoweare/jason.jpg | 1 + pics/con-whoweare/jb.png | 1 + pics/con-whoweare/jeremy.jpg | 1 + pics/con-whoweare/jim.jpg | 1 + pics/con-whoweare/joey.jpg | 1 + pics/con-whoweare/johnlee.jpg | 1 + pics/con-whoweare/jwodder.jpg | 1 + pics/con-whoweare/kennedy.jpg | 1 + pics/con-whoweare/kyle.jpg | 1 + pics/con-whoweare/markiewicz.jpg | 1 + pics/con-whoweare/matteo.jpg | 1 + pics/con-whoweare/matthew.jpg | 1 + pics/con-whoweare/michael.jpg | 1 + pics/con-whoweare/mvdm.jpg | 1 + pics/con-whoweare/nick.jpg | 1 + pics/con-whoweare/oli.jpg | 1 + pics/con-whoweare/sam.jpg | 1 + pics/con-whoweare/satra.jpg | 1 + pics/con-whoweare/soichi.jpg | 1 + pics/con-whoweare/tor.jpg | 1 + pics/con-whoweare/vadim.jpg | 1 + pics/con-whoweare/vanessa.png | 1 + pics/con-whoweare/yarik.jpg | 1 + tools/mk_whoweare.py | 261 +++++++++++++++++++++++++++++++ 36 files changed, 452 insertions(+), 7 deletions(-) create mode 100644 con-whoweare.phtml create mode 120000 pics/con-whoweare/adina.jpg create mode 120000 pics/con-whoweare/asmacdo.jpg create mode 120000 pics/con-whoweare/ben.jpg create mode 120000 pics/con-whoweare/chang.jpg create mode 120000 pics/con-whoweare/chr.jpg create mode 120000 pics/con-whoweare/chris.jpg create mode 120000 pics/con-whoweare/cody.jpg create mode 120000 pics/con-whoweare/franco.jpg create mode 120000 pics/con-whoweare/gergana.jpg create mode 120000 pics/con-whoweare/ito.jpg create mode 120000 pics/con-whoweare/jason.jpg create mode 120000 pics/con-whoweare/jb.png create mode 120000 pics/con-whoweare/jeremy.jpg create mode 120000 pics/con-whoweare/jim.jpg create mode 120000 pics/con-whoweare/joey.jpg create mode 120000 pics/con-whoweare/johnlee.jpg create mode 120000 pics/con-whoweare/jwodder.jpg create mode 120000 pics/con-whoweare/kennedy.jpg create mode 120000 pics/con-whoweare/kyle.jpg create mode 120000 pics/con-whoweare/markiewicz.jpg create mode 120000 pics/con-whoweare/matteo.jpg create mode 120000 pics/con-whoweare/matthew.jpg create mode 120000 pics/con-whoweare/michael.jpg create mode 120000 pics/con-whoweare/mvdm.jpg create mode 120000 pics/con-whoweare/nick.jpg create mode 120000 pics/con-whoweare/oli.jpg create mode 120000 pics/con-whoweare/sam.jpg create mode 120000 pics/con-whoweare/satra.jpg create mode 120000 pics/con-whoweare/soichi.jpg create mode 120000 pics/con-whoweare/tor.jpg create mode 120000 pics/con-whoweare/vadim.jpg create mode 120000 pics/con-whoweare/vanessa.png create mode 120000 pics/con-whoweare/yarik.jpg create mode 100755 tools/mk_whoweare.py diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 5db34d78..047516a3 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -1133,7 +1133,85 @@

    What pulls people toward standards

    Acknowledgements

    - + + + + + + + + +
    @@ -1150,12 +1228,12 @@

    Acknowledgements

    Funders
    - - -
    Collaborators
    - - - + + +
    Collaborators
    + + +
    diff --git a/con-whoweare.phtml b/con-whoweare.phtml new file mode 100644 index 00000000..d6c2f5c8 --- /dev/null +++ b/con-whoweare.phtml @@ -0,0 +1,73 @@ + + + diff --git a/pics/con-whoweare/adina.jpg b/pics/con-whoweare/adina.jpg new file mode 120000 index 00000000..cb63899c --- /dev/null +++ b/pics/con-whoweare/adina.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/W3/Qp/MD5E-s9383--99a193fa5173758936227f460f292c57.jpg/MD5E-s9383--99a193fa5173758936227f460f292c57.jpg \ No newline at end of file diff --git a/pics/con-whoweare/asmacdo.jpg b/pics/con-whoweare/asmacdo.jpg new file mode 120000 index 00000000..38154fbc --- /dev/null +++ b/pics/con-whoweare/asmacdo.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/4v/FX/MD5E-s51842--43b00607a61fd0701f1d2289ed72dd27.jpg/MD5E-s51842--43b00607a61fd0701f1d2289ed72dd27.jpg \ No newline at end of file diff --git a/pics/con-whoweare/ben.jpg b/pics/con-whoweare/ben.jpg new file mode 120000 index 00000000..b8287b7f --- /dev/null +++ b/pics/con-whoweare/ben.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/VF/P6/MD5E-s17003--f871f89a8508acb2724403626565de40.jpg/MD5E-s17003--f871f89a8508acb2724403626565de40.jpg \ No newline at end of file diff --git a/pics/con-whoweare/chang.jpg b/pics/con-whoweare/chang.jpg new file mode 120000 index 00000000..9686a150 --- /dev/null +++ b/pics/con-whoweare/chang.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/kW/8q/MD5E-s26320--22d3e1284038d233bfc4a2f3df493d55.jpg/MD5E-s26320--22d3e1284038d233bfc4a2f3df493d55.jpg \ No newline at end of file diff --git a/pics/con-whoweare/chr.jpg b/pics/con-whoweare/chr.jpg new file mode 120000 index 00000000..d813b65d --- /dev/null +++ b/pics/con-whoweare/chr.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/wk/qx/MD5E-s54606--dc847556144262b4cec625f598c71875.jpg/MD5E-s54606--dc847556144262b4cec625f598c71875.jpg \ No newline at end of file diff --git a/pics/con-whoweare/chris.jpg b/pics/con-whoweare/chris.jpg new file mode 120000 index 00000000..91ea2013 --- /dev/null +++ b/pics/con-whoweare/chris.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/pF/Fm/MD5E-s11011--ac9299c4de358ca671ffe520e67cd783.jpg/MD5E-s11011--ac9299c4de358ca671ffe520e67cd783.jpg \ No newline at end of file diff --git a/pics/con-whoweare/cody.jpg b/pics/con-whoweare/cody.jpg new file mode 120000 index 00000000..059ae1ba --- /dev/null +++ b/pics/con-whoweare/cody.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/VF/MG/MD5E-s7347--17d502d5b4a82975820cfdfb1b9da64a.jpg/MD5E-s7347--17d502d5b4a82975820cfdfb1b9da64a.jpg \ No newline at end of file diff --git a/pics/con-whoweare/franco.jpg b/pics/con-whoweare/franco.jpg new file mode 120000 index 00000000..5f9bbbaa --- /dev/null +++ b/pics/con-whoweare/franco.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/Zq/56/MD5E-s70135--c0a4168637a372be62486370459d966f.jpg/MD5E-s70135--c0a4168637a372be62486370459d966f.jpg \ No newline at end of file diff --git a/pics/con-whoweare/gergana.jpg b/pics/con-whoweare/gergana.jpg new file mode 120000 index 00000000..6e89e4db --- /dev/null +++ b/pics/con-whoweare/gergana.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/0z/FJ/MD5E-s8615--b5f854ff25b64a48f1c96e2e73224c82.jpg/MD5E-s8615--b5f854ff25b64a48f1c96e2e73224c82.jpg \ No newline at end of file diff --git a/pics/con-whoweare/ito.jpg b/pics/con-whoweare/ito.jpg new file mode 120000 index 00000000..9460e4a1 --- /dev/null +++ b/pics/con-whoweare/ito.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/Wp/30/MD5E-s25196--810ef69d09e0fa097e2c0daa45a603d4.jpg/MD5E-s25196--810ef69d09e0fa097e2c0daa45a603d4.jpg \ No newline at end of file diff --git a/pics/con-whoweare/jason.jpg b/pics/con-whoweare/jason.jpg new file mode 120000 index 00000000..411267e2 --- /dev/null +++ b/pics/con-whoweare/jason.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/f3/jv/MD5E-s13331--46563a279503c58c597a2582dae8a901.jpg/MD5E-s13331--46563a279503c58c597a2582dae8a901.jpg \ No newline at end of file diff --git a/pics/con-whoweare/jb.png b/pics/con-whoweare/jb.png new file mode 120000 index 00000000..37b36774 --- /dev/null +++ b/pics/con-whoweare/jb.png @@ -0,0 +1 @@ +../../.git/annex/objects/9j/Xv/MD5E-s88193--0b34903f516875d61b7776c52c3fb6b7.png/MD5E-s88193--0b34903f516875d61b7776c52c3fb6b7.png \ No newline at end of file diff --git a/pics/con-whoweare/jeremy.jpg b/pics/con-whoweare/jeremy.jpg new file mode 120000 index 00000000..6bf560d5 --- /dev/null +++ b/pics/con-whoweare/jeremy.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/QZ/Xx/MD5E-s60895--1dd2505736ba4d3c4bd8629f57723596.jpg/MD5E-s60895--1dd2505736ba4d3c4bd8629f57723596.jpg \ No newline at end of file diff --git a/pics/con-whoweare/jim.jpg b/pics/con-whoweare/jim.jpg new file mode 120000 index 00000000..35dd05f0 --- /dev/null +++ b/pics/con-whoweare/jim.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/qF/kf/MD5E-s37030--5d7ff0adb32cd2ba851e9c6ca09ebce7.jpg/MD5E-s37030--5d7ff0adb32cd2ba851e9c6ca09ebce7.jpg \ No newline at end of file diff --git a/pics/con-whoweare/joey.jpg b/pics/con-whoweare/joey.jpg new file mode 120000 index 00000000..df7eda63 --- /dev/null +++ b/pics/con-whoweare/joey.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/7j/GP/MD5E-s12530--8cb6241bbcfe50a3d33567fea21fd812.jpg/MD5E-s12530--8cb6241bbcfe50a3d33567fea21fd812.jpg \ No newline at end of file diff --git a/pics/con-whoweare/johnlee.jpg b/pics/con-whoweare/johnlee.jpg new file mode 120000 index 00000000..f07e6c44 --- /dev/null +++ b/pics/con-whoweare/johnlee.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/4m/wg/MD5E-s47517--e2e8fe455948544aa70a56a6b7881f3c.jpg/MD5E-s47517--e2e8fe455948544aa70a56a6b7881f3c.jpg \ No newline at end of file diff --git a/pics/con-whoweare/jwodder.jpg b/pics/con-whoweare/jwodder.jpg new file mode 120000 index 00000000..8e646e92 --- /dev/null +++ b/pics/con-whoweare/jwodder.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/p1/v1/MD5E-s7969--a1140bd50fbcf36c733d9ddd83730627.jpg/MD5E-s7969--a1140bd50fbcf36c733d9ddd83730627.jpg \ No newline at end of file diff --git a/pics/con-whoweare/kennedy.jpg b/pics/con-whoweare/kennedy.jpg new file mode 120000 index 00000000..0ff221d0 --- /dev/null +++ b/pics/con-whoweare/kennedy.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/f1/Pf/MD5E-s12594--f641ce739562bca9994d4fb7febf6d50.jpg/MD5E-s12594--f641ce739562bca9994d4fb7febf6d50.jpg \ No newline at end of file diff --git a/pics/con-whoweare/kyle.jpg b/pics/con-whoweare/kyle.jpg new file mode 120000 index 00000000..5ebdae7e --- /dev/null +++ b/pics/con-whoweare/kyle.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/kw/wm/MD5E-s9594--cff7df4b1c0277f63d1141f1d16831fc.jpg/MD5E-s9594--cff7df4b1c0277f63d1141f1d16831fc.jpg \ No newline at end of file diff --git a/pics/con-whoweare/markiewicz.jpg b/pics/con-whoweare/markiewicz.jpg new file mode 120000 index 00000000..6a783258 --- /dev/null +++ b/pics/con-whoweare/markiewicz.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/Q8/02/MD5E-s42248--bcc9f1dfdc56ec4ae56f01d919675ace.jpg/MD5E-s42248--bcc9f1dfdc56ec4ae56f01d919675ace.jpg \ No newline at end of file diff --git a/pics/con-whoweare/matteo.jpg b/pics/con-whoweare/matteo.jpg new file mode 120000 index 00000000..ca334083 --- /dev/null +++ b/pics/con-whoweare/matteo.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/m3/9P/MD5E-s7739--4b97529c7113016f49a01a5455b201e0.jpg/MD5E-s7739--4b97529c7113016f49a01a5455b201e0.jpg \ No newline at end of file diff --git a/pics/con-whoweare/matthew.jpg b/pics/con-whoweare/matthew.jpg new file mode 120000 index 00000000..c183834f --- /dev/null +++ b/pics/con-whoweare/matthew.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/5p/xG/MD5E-s14556--e1972374f7793c04a2f2f4c1b3337fd3.jpg/MD5E-s14556--e1972374f7793c04a2f2f4c1b3337fd3.jpg \ No newline at end of file diff --git a/pics/con-whoweare/michael.jpg b/pics/con-whoweare/michael.jpg new file mode 120000 index 00000000..b593639e --- /dev/null +++ b/pics/con-whoweare/michael.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/W0/Zf/MD5E-s6682--f0b8e270ce246a1d661a6fc09e512981.jpg/MD5E-s6682--f0b8e270ce246a1d661a6fc09e512981.jpg \ No newline at end of file diff --git a/pics/con-whoweare/mvdm.jpg b/pics/con-whoweare/mvdm.jpg new file mode 120000 index 00000000..0f678e4f --- /dev/null +++ b/pics/con-whoweare/mvdm.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/kg/wW/MD5E-s11989--bf2c7f14b99475da2c737330b6d4cbb4.jpg/MD5E-s11989--bf2c7f14b99475da2c737330b6d4cbb4.jpg \ No newline at end of file diff --git a/pics/con-whoweare/nick.jpg b/pics/con-whoweare/nick.jpg new file mode 120000 index 00000000..0389dad6 --- /dev/null +++ b/pics/con-whoweare/nick.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/qv/6j/MD5E-s10384--60a69c9604f0225a27ad880587154b7a.jpg/MD5E-s10384--60a69c9604f0225a27ad880587154b7a.jpg \ No newline at end of file diff --git a/pics/con-whoweare/oli.jpg b/pics/con-whoweare/oli.jpg new file mode 120000 index 00000000..6fae1ff5 --- /dev/null +++ b/pics/con-whoweare/oli.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/jX/XJ/MD5E-s16154--0a9af2046ce5909d789b63033216d5a3.jpg/MD5E-s16154--0a9af2046ce5909d789b63033216d5a3.jpg \ No newline at end of file diff --git a/pics/con-whoweare/sam.jpg b/pics/con-whoweare/sam.jpg new file mode 120000 index 00000000..d7f1c0ce --- /dev/null +++ b/pics/con-whoweare/sam.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/60/W0/MD5E-s29184--89367cbcaaf786b7ab34809fc8016f10.jpg/MD5E-s29184--89367cbcaaf786b7ab34809fc8016f10.jpg \ No newline at end of file diff --git a/pics/con-whoweare/satra.jpg b/pics/con-whoweare/satra.jpg new file mode 120000 index 00000000..674cea4b --- /dev/null +++ b/pics/con-whoweare/satra.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/Q0/wv/MD5E-s13129--4764a2664af43e256c7ce6dbfc8e5fe6.jpg/MD5E-s13129--4764a2664af43e256c7ce6dbfc8e5fe6.jpg \ No newline at end of file diff --git a/pics/con-whoweare/soichi.jpg b/pics/con-whoweare/soichi.jpg new file mode 120000 index 00000000..e7664c5a --- /dev/null +++ b/pics/con-whoweare/soichi.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/6x/fW/MD5E-s6262--8598fedd0af070fc997fc293ec67a163.jpg/MD5E-s6262--8598fedd0af070fc997fc293ec67a163.jpg \ No newline at end of file diff --git a/pics/con-whoweare/tor.jpg b/pics/con-whoweare/tor.jpg new file mode 120000 index 00000000..7c3b092c --- /dev/null +++ b/pics/con-whoweare/tor.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/xV/mQ/MD5E-s31398--394604688af6788721d969430fa3162b.jpg/MD5E-s31398--394604688af6788721d969430fa3162b.jpg \ No newline at end of file diff --git a/pics/con-whoweare/vadim.jpg b/pics/con-whoweare/vadim.jpg new file mode 120000 index 00000000..c69b5c1b --- /dev/null +++ b/pics/con-whoweare/vadim.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/8v/P1/MD5E-s9008--9a5ff34ba5143292397fe9385125c6b8.jpg/MD5E-s9008--9a5ff34ba5143292397fe9385125c6b8.jpg \ No newline at end of file diff --git a/pics/con-whoweare/vanessa.png b/pics/con-whoweare/vanessa.png new file mode 120000 index 00000000..c3b9c1d1 --- /dev/null +++ b/pics/con-whoweare/vanessa.png @@ -0,0 +1 @@ +../../.git/annex/objects/4g/1K/MD5E-s3823--c901a434f9ba75f4ef2b2354016de679.png/MD5E-s3823--c901a434f9ba75f4ef2b2354016de679.png \ No newline at end of file diff --git a/pics/con-whoweare/yarik.jpg b/pics/con-whoweare/yarik.jpg new file mode 120000 index 00000000..66e3d393 --- /dev/null +++ b/pics/con-whoweare/yarik.jpg @@ -0,0 +1 @@ +../../.git/annex/objects/vF/69/MD5E-s30443--1632f111d947ff229d3ba53baf7b0e1f.jpg/MD5E-s30443--1632f111d947ff229d3ba53baf7b0e1f.jpg \ No newline at end of file diff --git a/tools/mk_whoweare.py b/tools/mk_whoweare.py new file mode 100755 index 00000000..2d12e2fd --- /dev/null +++ b/tools/mk_whoweare.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +"""Generate an acknowledgements fragment with all the faces from the CON website. + +Reads content/pages/whoweare.html straight from the +con/centerforopenneuroscience.org repository, groups people by the

    +tier they live under (Centroids, Collaborators, Affiliated Faculty, +Emeritus, ...), downloads their portraits, and writes a reusable HTML +fragment (con-whoweare.phtml by default) with one row of linked faces per +tier. Each face links back to that person's anchor on the live page. + +Usage (from the repository root): + + tools/mk_whoweare.py # regenerate fragment + pictures + tools/mk_whoweare.py --inject 2026-dhmc-ieeg.html + tools/mk_whoweare.py --no-images # fragment only, keep pictures + +--inject replaces whatever sits between + + + + +in the given deck(s), so decks stay openable as a single file (no build +step, no runtime include) while the fragment remains the single source to +regenerate from. + +Portraits are rendered through `object-fit: cover`, so non-square +originals are centre-cropped rather than squashed, and are downscaled on +the way in (--max-size, 0 to keep the originals). +""" + +import argparse +import html +import os +import shutil +import subprocess +import sys +import urllib.request +from html.parser import HTMLParser + +REPO = "con/centerforopenneuroscience.org" +SITE = "https://centerforopenneuroscience.org" +PAGE = "content/pages/whoweare.html" +# Pelican serves theme/static/img/... as /theme/img/... +STATIC_PREFIX = ("/theme/img/", "theme/static/img/") + + +def fetch(url): + req = urllib.request.Request(url, headers={"User-Agent": "mk_whoweare.py"}) + with urllib.request.urlopen(req) as r: + return r.read() + + +def slugify(name): + """Anchor id the website generates for a heading: 'Tor D. Wager' -> 'tor_d_wager_'.""" + kept = "".join(c if (c.isalnum() or c.isspace()) else "" for c in name.lower()) + return "_".join(kept.split()) + "_" + + +class Person: + def __init__(self, name, anchor): + self.name = name + self.anchor = anchor + self.image = None + self.position = "" + + +class WhoWeAreParser(HTMLParser): + """Linear scan:

    opens a tier,

    opens a person, the next and + .position
    belong to that person.""" + + def __init__(self): + super().__init__(convert_charrefs=True) + self.tiers = [] # [(tier name, [Person, ...]), ...] + self._collect = None # 'tier' | 'name' | 'position' + self._buf = [] + self._person = None + + def handle_starttag(self, tag, attrs): + a = dict(attrs) + if tag == "h2": + self._collect, self._buf = "tier", [] + elif tag == "h3": + self._collect, self._buf = "name", [] + self._person = Person(None, a.get("id")) + elif tag == "img" and self._person is not None and self._person.image is None: + self._person.image = a.get("src") + elif tag == "div" and "position" in a.get("class", "").split(): + self._collect, self._buf = "position", [] + + def handle_data(self, data): + if self._collect: + self._buf.append(data) + + def handle_endtag(self, tag): + if self._collect is None: + return + text = html.unescape(" ".join("".join(self._buf).split())) + if tag == "h2" and self._collect == "tier": + self.tiers.append((text, [])) + self._person = None + elif tag == "h3" and self._collect == "name": + self._person.name = text + self._person.anchor = self._person.anchor or slugify(text) + if not self.tiers: # people before any

    , shouldn't happen + self.tiers.append(("", [])) + self.tiers[-1][1].append(self._person) + elif tag == "div" and self._collect == "position": + if self._person is not None: + self._person.position = text + else: + return + self._collect, self._buf = None, [] + + +def shrink(path, max_size): + """Downscale in place -- these are displayed at ~64px, originals run to ~1MB.""" + if not max_size or not shutil.which("convert"): + return + tmp = path + ".tmp" + os.path.splitext(path)[1] + subprocess.run( + ["convert", path, "-colorspace", "RGB", "-filter", "Lanczos", + "-resize", f"{max_size}x{max_size}>", "-colorspace", "sRGB", + "-quality", "88", "-strip", tmp], + check=True, + ) + # re-encoding an already-small portrait can grow it -- keep whichever is smaller + if os.path.getsize(tmp) < os.path.getsize(path): + os.replace(tmp, path) + else: + os.remove(tmp) + + +def download_portraits(people, picsdir, ref, max_size): + """Repo first; fall back to the live site when the blob is a git-annex pointer.""" + os.makedirs(picsdir, exist_ok=True) + if max_size and not shutil.which("convert"): + print("WARNING: ImageMagick `convert` not found -- keeping originals", file=sys.stderr) + for p in people: + if not p.image: + continue + name = os.path.basename(p.image) + dest = os.path.join(picsdir, name) + repo_path = p.image.replace(*STATIC_PREFIX, 1) if p.image.startswith(STATIC_PREFIX[0]) else p.image.lstrip("/") + data = fetch(f"https://raw.githubusercontent.com/{REPO}/{ref}/{repo_path}") + if len(data) < 512 and b"annex" in data: # git-annex pointer file, not the image + data = fetch(SITE + p.image) + where = "site" + else: + where = "repo" + with open(dest, "wb") as f: + f.write(data) + shrink(dest, max_size) + print(f" {name:<20} {len(data):>8} -> {os.path.getsize(dest):>7} B ({where})", file=sys.stderr) + + +STYLE = """ +""" + + +def render(tiers, picsdir, ref): + out = [ + f"", + STYLE.rstrip(), + '
    ', + ] + for tier, people in tiers: + out.append(f'
    {html.escape(tier)}') + out.append('
    ') + for p in people: + title = f"{p.name} — {p.position}" if p.position else p.name + img = os.path.join(picsdir, os.path.basename(p.image)) + out.append( + f' ' + f'{html.escape(p.name, quote=True)}' + f"{html.escape(p.name)}" + ) + out.append("
    ") + out.append("
    ") + out.append("
    ") + return "\n".join(out) + "\n" + + +BEGIN, END = "", "" + + +def inject(deck, fragment): + with open(deck) as f: + s = f.read() + try: + head, rest = s.split(BEGIN, 1) + _, tail = rest.split(END, 1) + except ValueError: + sys.exit(f"{deck}: no {BEGIN} ... {END} markers to fill in") + with open(deck, "w") as f: + f.write(f"{head}{BEGIN}\n{fragment}{END}{tail}") + print(f"injected into {deck}", file=sys.stderr) + + +def check_anchors(tiers): + live = fetch(SITE + "/whoweare").decode("utf-8", "replace") + missing = [p.name for _, people in tiers for p in people if f'id="{p.anchor}"' not in live] + if missing: + print(f"WARNING: anchors not found on the live page: {', '.join(missing)}", file=sys.stderr) + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--ref", default="master", help="git ref of the website repo (default: master)") + ap.add_argument("--outfile", default="con-whoweare.phtml") + ap.add_argument("--picsdir", default="pics/con-whoweare") + ap.add_argument("--inject", nargs="*", default=[], metavar="DECK.html") + ap.add_argument("--no-images", action="store_true", help="only regenerate the fragment") + ap.add_argument("--max-size", type=int, default=512, metavar="PX", + help="downscale portraits to fit PX (0 keeps the originals; default: 512)") + ap.add_argument("--no-check-anchors", action="store_true") + args = ap.parse_args() + + src = fetch(f"https://raw.githubusercontent.com/{REPO}/{args.ref}/{PAGE}").decode("utf-8") + parser = WhoWeAreParser() + parser.feed(src) + # tiers without portraits are the logo sections (Collaborating projects, Partners) + tiers = [(t, ps) for t, ps in parser.tiers if any(p.image for p in ps)] + for tier, people in tiers: + print(f"{tier}: {len(people)}", file=sys.stderr) + + if not args.no_check_anchors: + check_anchors(tiers) + if not args.no_images: + download_portraits([p for _, ps in tiers for p in ps], args.picsdir, args.ref, args.max_size) + + fragment = render(tiers, args.picsdir, args.ref) + with open(args.outfile, "w") as f: + f.write(fragment) + print(f"wrote {args.outfile}", file=sys.stderr) + for deck in args.inject: + inject(deck, fragment) + + +if __name__ == "__main__": + main() From 57a01ed3882cb5144873b938918b2fe8863a74ab Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 20:40:15 -0400 Subject: [PATCH 33/49] More refinements going from the beginning (moved acknowledgements there too) --- 2026-dhmc-ieeg.html | 246 ++++++++++-------- .../borrowed/bids-bep032-preview-20261008.png | 1 + .../dicom-wg32-compression-rfc-20261008.png | 1 + tools/mk_whoweare.py | 21 ++ 4 files changed, 154 insertions(+), 115 deletions(-) create mode 120000 pics/borrowed/bids-bep032-preview-20261008.png create mode 120000 pics/borrowed/dicom-wg32-compression-rfc-20261008.png diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 047516a3..9e7965ed 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -205,6 +205,102 @@

    Brief Yarik's Bio

    + + + +
    +

    Acknowledgements

    + + + + + + + +
    + + + +

    Disclaimers

    One toolbelt, not one solution

    @@ -220,6 +317,7 @@

    One toolbelt, not one solution

  • "Many sizes fit all" — no single tool or standard solves everything
  • You don't have to "buy in 100%" — pieces compose, and are useful alone
  • Everything today is a pointer not a deep technical tutorial
  • +
  • There is a community to join!
  • @@ -251,6 +349,21 @@

    One toolbelt, not one solution

    +
    + +
    + +
    + + + +

    Ask: do you have ephys processing which could get affected by lossy compression? Let's analyze together?!

    +
    + +
    + +
    +
    @@ -261,7 +374,7 @@

    2017: State of things from an eye of DICOM ppl

    - +
    @@ -307,6 +420,17 @@

    The ask: Do report research-related gotchas to manufacturers!

    +
    + + + +

    Ask: Read it, checkout example datasets!

    +
    + +
    + +
    +
    @@ -383,13 +507,16 @@

    Federally regulated but locally “managed”

    The ask: plan for depositing to the archive in the consent form

    Consent is the one step that is MUCH harder if not impossible to do later!

    -
    + +
    +
    +

    Ideally aim to

      @@ -1128,117 +1255,6 @@

      What pulls people toward standards

    - - - -
    -

    Acknowledgements

    - - - - - - - - - - - - - -
    -
    -
    Collaborators & sources
    -
    -
      -
    • Ariel Rokem, Rémi Gau — BIDS-101 slide material
    • -
    • Michael Hanke — "Carrots! Not sticks!" figure
    • -
    • Austin Macdonald — mechababs
    • -
    • SCCN/NEMAR, EMBER/BBQS, BrainKB, EBRAINS teams
    • -
    -
    -
    -
    -
    Funders
    - - -
    Collaborators
    - - - -
    -
    -

    Thank you!

    Questions & discussion

    diff --git a/pics/borrowed/bids-bep032-preview-20261008.png b/pics/borrowed/bids-bep032-preview-20261008.png new file mode 120000 index 00000000..bb81d02b --- /dev/null +++ b/pics/borrowed/bids-bep032-preview-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/Wg/k2/MD5E-s619911--9c0567dafcb7a5202d9472857361e21f.png/MD5E-s619911--9c0567dafcb7a5202d9472857361e21f.png \ No newline at end of file diff --git a/pics/borrowed/dicom-wg32-compression-rfc-20261008.png b/pics/borrowed/dicom-wg32-compression-rfc-20261008.png new file mode 120000 index 00000000..b0c9b69c --- /dev/null +++ b/pics/borrowed/dicom-wg32-compression-rfc-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/2v/zx/MD5E-s357652--3fd51f16ac530ac3b93a69b36d58712e.png/MD5E-s357652--3fd51f16ac530ac3b93a69b36d58712e.png \ No newline at end of file diff --git a/tools/mk_whoweare.py b/tools/mk_whoweare.py index 2d12e2fd..f57be265 100755 --- a/tools/mk_whoweare.py +++ b/tools/mk_whoweare.py @@ -26,6 +26,27 @@ Portraits are rendered through `object-fit: cover`, so non-square originals are centre-cropped rather than squashed, and are downscaled on the way in (--max-size, 0 to keep the originals). + +TODO: emit the logo tiers too, so the whole Acknowledgements slide is +generated rather than hand-maintained. Right now --inject overwrites +everything between the markers, so any logo row added to a deck by hand +is lost on the next run. Two separate pieces of work: + + * Collaborating projects / Partners. Both already live on the same + whoweare page, as inside + div#collaborating-projects and the Partners row -- links and titles + come for free. They are dropped today because tiers without + portraits are filtered out in main(). Needs: a second "logo tier" + renderer (no round crop, no name caption, height-based sizing), a + way to pick a handful rather than all ~40 projects (--projects + repronim,openneuro,dandi,datalad?), and the images pulled from + theme/static/img/3rd/ instead of .../team/. + + * Funders. NOT on the whoweare page at all -- there is no funders + section to scrape. Needs its own source: either a small table in + this script (logo, href, title, award number) or a funders page on + the website to parse once one exists. Award numbers matter here; + the logos alone are less useful than a link to the award. """ import argparse From fb7482b5f7e3ddbba637738bbc60b414f3445db8 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 20:52:47 -0400 Subject: [PATCH 34/49] Trim leftovers --- 2026-dhmc-ieeg.html | 124 +++++++------------------------------------- 1 file changed, 19 insertions(+), 105 deletions(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 9e7965ed..c44ebbe0 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -316,10 +316,21 @@

    One toolbelt, not one solution

    • "Many sizes fit all" — no single tool or standard solves everything
    • You don't have to "buy in 100%" — pieces compose, and are useful alone
    • -
    • Everything today is a pointer not a deep technical tutorial
    • -
    • There is a community to join!
    • +
    • Everything today is a pointer not a tutorial
    +

    There is community to join!

    + +
    +

    Carrots, not (only) sticks

    + +

    + + Figure from a recent talk by M. Hanke, "Carrots! Not sticks!" + hedgedoc.psychoinformatics.de/p/gBE63_ytiE +

    +
    +
    @@ -1138,105 +1149,6 @@

    Compute: pointers only

    - - - - - -
    -
    -

    Leftover: not yet placed

    -

    These don't map onto a specific step in either - incremental diagram (academic-clinician / academic-participants) — - kept here for Yarik to decide where (or whether) they belong.

    -
    - -
    -

    How could we collaborate on metadata that matters clinically?

    -
      -
    • Should individual labs channel requests to manufacturers one at a time, - or could DICOM WG-32 help coordinate?
    • -
    • Proposition: a library of concrete DICOM↔BIDS/NWB conversions, - per manufacturer and modality
    • -
    -
    - -
    -

    You're already standing in the gap

    -
      -
    • This group runs clinical iEEG acquisition and does research analysis — - both worlds, already, every day
    • -
    • That makes you natural informants for neuroconv format support, - BEP010 edge cases, and DICOM↔BIDS/NWB conversion libraries
    • -
    • Ask: who else should be in that room? what hardware/format - gaps have you hit that we should know about?
    • -
    -
    - -
    - -

    Carrots, not (only) sticks

    - -

    - Figure from M. Hanke, "Carrots! Not sticks!" - hedgedoc.psychoinformatics.de/p/gBE63_ytiE -

    -
    - -
    -

    What pulls people toward standards

    -
      -
    • Carrots — the standards themselves: free tools, free archive storage, - "someone else already solved this", collaborators who can actually read your data
    • -
    • Sticks exist too — mostly from funders and journals: - NIH Data Management & Sharing Policy, journal data-availability requirements
    • -
    • Our pitch today is almost entirely carrots — the stick is already pulling on everyone; - we're here to make the carrot side concrete
    • -
    -
    - -
    - -
    -
    - @@ -1246,11 +1158,13 @@

    What pulls people toward standards

    ## Monday checklist -- Browse [nemar.org](https://nemar.org) or [dandiarchive.org](https://dandiarchive.org) — find a dataset like yours -- Skim the [BIDS iEEG spec](https://bids-specification.readthedocs.io/) section (BEP010) +- Browse: [nemar.org](https://nemar.org) and/or [dandiarchive.org](https://dandiarchive.org) — find a dataset like yours +- Skim: [BIDS iEEG](https://bids-specification.readthedocs.io/) (BEP010) and/or [BIDS microelectrode](https://con.github.io/talks/pr-preview/pr-26/2026-dhmc-ieeg.html#/6/4) (BEP032) specs - Tell us: what hardware/format gap should be on our radar? -- Keep the conversation going — this is a toolbelt, pick what's useful, ignore the rest - +- Think: what could lossy compression effect in your analyses? +- Consider (for the night): [DataLad Handbook](https://handbook.datalad.org/en/latest/) +- Keep the conversation going: this is a toolbelt, pick what's useful, ignore the rest +- Keep an eye for: series of talks at PBS around all these topics
    From b4316670e3818f94c445c0d9dd1e378d590b2953 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 9 Oct 2026 01:04:22 +0000 Subject: [PATCH 35/49] 2023-bids-dicom: fix whitespace on the "DICOMs in BIDS" slide The two fragment images share one r-stack box, which took the height of the tall portrait figure (1296px slide) and centered the short flow figure in it, leaving big gaps. Cap both heights and pin them to the top of the stack. Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2023-bids-dicom.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2023-bids-dicom.html b/2023-bids-dicom.html index 4d728bc0..7ee55b79 100644 --- a/2023-bids-dicom.html +++ b/2023-bids-dicom.html @@ -300,8 +300,8 @@

    We have two widely used standards,
    which can benefit from cooperation

    DICOMs in BIDS: the recommended source

    - - + +
    From eadef15aa6260a886a671f482c58795b1852c724 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 9 Oct 2026 01:09:15 +0000 Subject: [PATCH 36/49] Neurosift slide: drop OpenNeuro ds008610 example line Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2026-dhmc-ieeg.html | 5 ----- 1 file changed, 5 deletions(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index c44ebbe0..94cee799 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -673,11 +673,6 @@

    In large part thanks to apps such as Neurosift

    • align any time series to any column of a trials/intervals table, pick channels, group trials by a condition
  • New spectrogram view
  • -

    - One known iEEG NWB example on OpenNeuro: - - ds008610 (LFP only) -

    From dd63b5967dd26c1cf6a99c9d0a5d86e689368173 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 9 Oct 2026 01:19:19 +0000 Subject: [PATCH 37/49] Neurosift slide: spectrogram sub-bullets (on-the-fly, configurable) Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2026-dhmc-ieeg.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 94cee799..c565db1c 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -671,7 +671,9 @@

    In large part thanks to apps such as Neurosift

  • New event-related signals view
    • align any time series to any column of a trials/intervals table, pick channels, group trials by a condition
  • -
  • New spectrogram view
  • +
  • New spectrogram view +
    • on-the-fly spectrograms (not pre-calculated)
    • +
    • Large range of options for configuring strategy and hyperparameters
  • From 15972b93ad35da004bcf2ff757e766e5747aa39e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 9 Oct 2026 01:22:48 +0000 Subject: [PATCH 38/49] Neurosift slide: persistent URLs bullet Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2026-dhmc-ieeg.html | 1 + 1 file changed, 1 insertion(+) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index c565db1c..7db5e6cd 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -663,6 +663,7 @@

    In large part thanks to apps such as Neurosift

  • no download required
  • integrates with most major archives (DANDI, EMBER, OpenNeuro)
  • works on TB-sized files "just as well" as MB-sized ones
  • +
  • fully persistent URLs leading to specific visualizations; easy to send to collaborators!
  • Free & Open-source (fix & extend at will)
      From 321bc19dc8c589ae2590b0f86309e977a949179b Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 9 Oct 2026 01:26:36 +0000 Subject: [PATCH 39/49] Example 5: retitle, add lab/species/task caption Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01TXdd7X7FRyDaxWk9ngYT6j --- 2026-dhmc-ieeg.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 7db5e6cd..54220c08 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -759,12 +759,13 @@

      Example 5: spectrogram, no normalization

      +

      Example 5: spectrogram, temperature-controlling probe

      /processing/ecephys/LFP/LFP, channels 6–8 averaged, 0–625 Hz, first 30 s of a 1250 Hz recording - — DANDI:000059 - + — DANDI:000059
      + Buzsáki Lab, NYU + · rat · memory + spatial navigation task

      +
      +

      Standards are an enabler for tooling

      + +

      Cool stuff (visualization, turnkey apps) is possible only because of boring stuff (standards)

      + +
      + +

      Example 1: behavior, grouped by condition

      @@ -879,7 +895,7 @@

      +

      @@ -894,85 +910,117 @@

      -
      - -
      - -
      - Gorgolewski, K. J., Auer, T., Calhoun, V. D., Craddock, R. C., Das, S., Duff, - E. P., Flandin, G., Ghosh, S. S., Glatard, T., Halchenko, Y. O., Handwerker, - D. A., Hanke, M., Keator, D., Li, X., Michael, Z., Maumet, C., Nichols, B. N., - Nichols, T. E., Pellman, J., Poline, J.-B., Rokem, A., Schaefer, G., Sochat, V., - Triplett, W., Turner, J. A., Varoquaux, G., and Poldrack, R. A. (2016). The - brain imaging data structure, a format for organizing and describing outputs - of neuroimaging experiments. Scientific Data, 3:160044 - -
      - -
      +
      +
      + +
      +
      + +
      +

      BIDS Features

      + + + + + + +
      + DICOMs reorganized into a BIDS dataset + + +
      -analogy via Rémi Gau, 10.5281/zenodo.5863713 +

      + See deeper overview at "The Brain Imaging Data Structure (BIDS): an open community standard for neuroscience",
      NSF POSE Workshop 2024 +

      +
      ----- +
      +

      iEEG is a first-class BIDS citizen

      -### iEEG is a first-class BIDS citizen + +
      + + +
      +
      + See also Holdgraf et al., Scientific Data, 2019 -- **BEP010** — intracranial EEG extension - (Holdgraf et al., Scientific Data, 2019) -- `channels.tsv` — per-channel metadata (type, sampling frequency, status) -- `electrodes.tsv` — electrode coordinates; clarified **REQUIRED** for iEEG in - bids-specification PR#1896 (v1.10.1) -- **HED** (Hierarchical Event Descriptor) tags for event annotation — NEMAR has built-in HED support (see Archives, previous section) +
      ----- +
      + +
      -### Inheritance: don't repeat 320 JSON files + +
      + +
      -40 subjects × 2 sessions × 4 runs = 320 files to edit? No — -one `task-xyz_ieeg.json` at the dataset root covers all of them unless overridden. +
      +

      @DBIC: ReproIn + HeuDiConv

      +
      + + - +
      - +
      @@ -988,6 +1036,26 @@

      +
      +

      nwb2bids: NWB dandisets represented in BIDS

      +
      + + +
      + +
      +

      nwb2bids: BIDS version of 000003

      +

      You seen one of them -- you saw them all

      + + + +
      + +
      + +
      + +
      @@ -1024,6 +1092,10 @@

      DANDI Compute: the derivative it produces

      +
      + +
      +
      diff --git a/pics/borrowed/bids-dandisets-000003-20261008.png b/pics/borrowed/bids-dandisets-000003-20261008.png new file mode 120000 index 00000000..28029aea --- /dev/null +++ b/pics/borrowed/bids-dandisets-000003-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/wW/j1/MD5E-s407241--1e23d5f1effa21a1d48b05cd202cd1d7.png/MD5E-s407241--1e23d5f1effa21a1d48b05cd202cd1d7.png \ No newline at end of file diff --git a/pics/borrowed/bids-dandisets-dashboard-20261008.png b/pics/borrowed/bids-dandisets-dashboard-20261008.png new file mode 120000 index 00000000..100fce9b --- /dev/null +++ b/pics/borrowed/bids-dandisets-dashboard-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/QK/ww/MD5E-s250270--b46b11d180e8f43becb1b8bb29d7f472.png/MD5E-s250270--b46b11d180e8f43becb1b8bb29d7f472.png \ No newline at end of file diff --git a/pics/borrowed/bids-ieeg-20261008.png b/pics/borrowed/bids-ieeg-20261008.png new file mode 120000 index 00000000..4bd33ef6 --- /dev/null +++ b/pics/borrowed/bids-ieeg-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/qz/GX/MD5E-s696553--0189d95dc1ff7194795d52f3ae56361d.png/MD5E-s696553--0189d95dc1ff7194795d52f3ae56361d.png \ No newline at end of file diff --git a/pics/borrowed/bids-ieeg-formats-20261008.png b/pics/borrowed/bids-ieeg-formats-20261008.png new file mode 120000 index 00000000..4becdb74 --- /dev/null +++ b/pics/borrowed/bids-ieeg-formats-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/M3/Q2/MD5E-s772783--ac299136e4df3a7a49038628acab899c.png/MD5E-s772783--ac299136e4df3a7a49038628acab899c.png \ No newline at end of file diff --git a/pics/borrowed/human+carrot_black.png b/pics/borrowed/human+carrot_black.png new file mode 120000 index 00000000..d9a181d0 --- /dev/null +++ b/pics/borrowed/human+carrot_black.png @@ -0,0 +1 @@ +../../.git/annex/objects/3q/7F/MD5E-s40867--82f5bf6470d482f48eb851d54a3996f8.png/MD5E-s40867--82f5bf6470d482f48eb851d54a3996f8.png \ No newline at end of file From 545218af2cf5904b0585a20d4fd165f8fbbb2b57 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 22:00:00 -0400 Subject: [PATCH 41/49] [DATALAD RUNCMD] Replace with new batch from claude design === Do not change lines below === { "chain": [], "cmd": "unzip /tmp/slides-svgtune.zip", "dsid": "9eab38ed-8db7-4b6a-b7ce-bab6be25b670", "exit": 0, "extra_inputs": [], "inputs": [], "outputs": [], "pwd": "pics" } ^^^ Do not change lines above ^^^ --- pics/academic-participants.svg | 3 +- pics/academic-participants.svgtune | 3 ++ pics/academic-participants_tuned/archives.svg | 3 +- pics/academic-participants_tuned/av.svg | 3 +- pics/academic-participants_tuned/base.svg | 3 +- .../academic-participants_tuned/bids-apps.svg | 3 +- pics/academic-participants_tuned/bids.svg | 3 +- pics/academic-participants_tuned/compute.svg | 3 +- .../dandi-compute.svg | 3 +- .../data-management.svg | 3 +- pics/academic-participants_tuned/hed.svg | 3 +- .../academic-participants_tuned/heudiconv.svg | 31 +++++++++++++++++++ pics/academic-participants_tuned/nwb-apps.svg | 3 +- pics/academic-participants_tuned/nwb.svg | 3 +- pics/academic-participants_tuned/nwb2bids.svg | 3 +- .../participants.svg | 3 +- pics/academic-participants_tuned/pozu.svg | 3 +- pics/academic-participants_tuned/stamped.svg | 3 +- pics/academic-participants_tuned/sync.svg | 3 +- 19 files changed, 68 insertions(+), 17 deletions(-) create mode 100644 pics/academic-participants_tuned/heudiconv.svg diff --git a/pics/academic-participants.svg b/pics/academic-participants.svg index 654b762c..1981bca1 100644 --- a/pics/academic-participants.svg +++ b/pics/academic-participants.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS sourcedata/derivatives/ nwb2bids +HeuDiConv linkedReproStim STAMPED principles diff --git a/pics/academic-participants.svgtune b/pics/academic-participants.svgtune index e0d1a9ff..6cf00fdc 100644 --- a/pics/academic-participants.svgtune +++ b/pics/academic-participants.svgtune @@ -22,6 +22,9 @@ layer label:re=^bids$ style=display:inline layer label:re=^bids\~av$ style=display:inline %save bids +layer label:re=^heudiconv$ style=display:inline +%save heudiconv + layer label:re=^nwb2bids$ style=display:inline %save nwb2bids diff --git a/pics/academic-participants_tuned/archives.svg b/pics/academic-participants_tuned/archives.svg index 579809ef..13621cab 100644 --- a/pics/academic-participants_tuned/archives.svg +++ b/pics/academic-participants_tuned/archives.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive - + + diff --git a/pics/academic-participants_tuned/av.svg b/pics/academic-participants_tuned/av.svg index f2887850..fba48d38 100644 --- a/pics/academic-participants_tuned/av.svg +++ b/pics/academic-participants_tuned/av.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv linkedReproStim diff --git a/pics/academic-participants_tuned/base.svg b/pics/academic-participants_tuned/base.svg index 10e5d68b..9117def3 100644 --- a/pics/academic-participants_tuned/base.svg +++ b/pics/academic-participants_tuned/base.svg @@ -20,10 +20,11 @@ - + + diff --git a/pics/academic-participants_tuned/bids-apps.svg b/pics/academic-participants_tuned/bids-apps.svg index 279312b8..88786dd4 100644 --- a/pics/academic-participants_tuned/bids-apps.svg +++ b/pics/academic-participants_tuned/bids-apps.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv linkedReproStim diff --git a/pics/academic-participants_tuned/bids.svg b/pics/academic-participants_tuned/bids.svg index 5c130619..8ba3ac26 100644 --- a/pics/academic-participants_tuned/bids.svg +++ b/pics/academic-participants_tuned/bids.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS + diff --git a/pics/academic-participants_tuned/compute.svg b/pics/academic-participants_tuned/compute.svg index 9294c801..398b782c 100644 --- a/pics/academic-participants_tuned/compute.svg +++ b/pics/academic-participants_tuned/compute.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS sourcedata/derivatives/ nwb2bids +HeuDiConv linkedReproStim diff --git a/pics/academic-participants_tuned/dandi-compute.svg b/pics/academic-participants_tuned/dandi-compute.svg index 4820ed2f..ab853a4f 100644 --- a/pics/academic-participants_tuned/dandi-compute.svg +++ b/pics/academic-participants_tuned/dandi-compute.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv diff --git a/pics/academic-participants_tuned/data-management.svg b/pics/academic-participants_tuned/data-management.svg index 8dbeaa3c..81cd1be7 100644 --- a/pics/academic-participants_tuned/data-management.svg +++ b/pics/academic-participants_tuned/data-management.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS sourcedata/derivatives/ nwb2bids +HeuDiConv linkedReproStim diff --git a/pics/academic-participants_tuned/hed.svg b/pics/academic-participants_tuned/hed.svg index acfe3982..85bfe048 100644 --- a/pics/academic-participants_tuned/hed.svg +++ b/pics/academic-participants_tuned/hed.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv linkedReproStim diff --git a/pics/academic-participants_tuned/heudiconv.svg b/pics/academic-participants_tuned/heudiconv.svg new file mode 100644 index 00000000..852238c9 --- /dev/null +++ b/pics/academic-participants_tuned/heudiconv.svg @@ -0,0 +1,31 @@ + + +academic-participants + + + + +SOFTWAREFORMATSHARDWAREPACSreceive,exportDICOMEphys rigsNeuropixels,Intan, …ClinicaliEEGNatus,NihonKohdenResearchEEGBrainVision,BioSemiMRI scannershared with clinicsArrow = conversion · dashed = light, optional or future · BEP = BIDS Extension Proposal · names are links +NWB AppsNeurosift +ArchivesDANDI,OpenNeuro,NEMAR + + + + +NWBNeuroConv + +BIDS ·BEP032 ·all BEPs + + +Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive + + +iEEG-BIDSEEG-BIDS + + + +HeuDiConv + + + + \ No newline at end of file diff --git a/pics/academic-participants_tuned/nwb-apps.svg b/pics/academic-participants_tuned/nwb-apps.svg index f1cac9bf..c7f54c88 100644 --- a/pics/academic-participants_tuned/nwb-apps.svg +++ b/pics/academic-participants_tuned/nwb-apps.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive - + + diff --git a/pics/academic-participants_tuned/nwb.svg b/pics/academic-participants_tuned/nwb.svg index 81725dff..1bb8221f 100644 --- a/pics/academic-participants_tuned/nwb.svg +++ b/pics/academic-participants_tuned/nwb.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive - + + diff --git a/pics/academic-participants_tuned/nwb2bids.svg b/pics/academic-participants_tuned/nwb2bids.svg index 814280b5..cf0887c5 100644 --- a/pics/academic-participants_tuned/nwb2bids.svg +++ b/pics/academic-participants_tuned/nwb2bids.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv diff --git a/pics/academic-participants_tuned/participants.svg b/pics/academic-participants_tuned/participants.svg index d5b7fd62..387071ad 100644 --- a/pics/academic-participants_tuned/participants.svg +++ b/pics/academic-participants_tuned/participants.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive - + + diff --git a/pics/academic-participants_tuned/pozu.svg b/pics/academic-participants_tuned/pozu.svg index 6dd7f162..5dbbd116 100644 --- a/pics/academic-participants_tuned/pozu.svg +++ b/pics/academic-participants_tuned/pozu.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv linkedReproStim diff --git a/pics/academic-participants_tuned/stamped.svg b/pics/academic-participants_tuned/stamped.svg index 09e70703..c293df7d 100644 --- a/pics/academic-participants_tuned/stamped.svg +++ b/pics/academic-participants_tuned/stamped.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS sourcedata/derivatives/ nwb2bids +HeuDiConv linkedReproStim STAMPED principles diff --git a/pics/academic-participants_tuned/sync.svg b/pics/academic-participants_tuned/sync.svg index 300b14cd..400a1672 100644 --- a/pics/academic-participants_tuned/sync.svg +++ b/pics/academic-participants_tuned/sync.svg @@ -20,10 +20,11 @@ Participants · every recording above starts with a person · their consent (Open Brain Consent) is the gate to every archive -HeuDiConviEEG-BIDSEEG-BIDS +iEEG-BIDSEEG-BIDS nwb2bids +HeuDiConv linkedReproStim From 6451190a0b965dc5a8685b03cd950701a49bebb1 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 22:07:12 -0400 Subject: [PATCH 42/49] [DATALAD] Download URLs URLs: https://reprostim.readthedocs.io/en/latest/_images/reproflow.svg --- pics/borrowed/reproflow.svg | 1 + 1 file changed, 1 insertion(+) create mode 120000 pics/borrowed/reproflow.svg diff --git a/pics/borrowed/reproflow.svg b/pics/borrowed/reproflow.svg new file mode 120000 index 00000000..2e34b508 --- /dev/null +++ b/pics/borrowed/reproflow.svg @@ -0,0 +1 @@ +../../.git/annex/objects/KZ/MQ/MD5E-s3433105--c355809da74e8b2888d8c9190fd17069.svg/MD5E-s3433105--c355809da74e8b2888d8c9190fd17069.svg \ No newline at end of file From 0db22c5575ff1f14ff0817fca813d17ec40b901b Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 22:35:12 -0400 Subject: [PATCH 43/49] Add some datalad --- 2026-dhmc-ieeg.html | 89 +++++++++++-------- pics/borrowed/dbic-QA-audiovideo-20261008.png | 1 + 2 files changed, 55 insertions(+), 35 deletions(-) create mode 120000 pics/borrowed/dbic-QA-audiovideo-20261008.png diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 1b632cd6..2b403738 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -1000,26 +1000,27 @@

      iEEG is a first-class BIDS citizen

      -
      +
      - -
      +
      -

      @DBIC: ReproIn + HeuDiConv

      +

      DICOMs to BIDS: ReproIn + HeuDiConv

      -
      + + Discover more from "SciOps from ReproNim" webinar (video on ReproTube). +
      -
      +
      @@ -1097,11 +1098,28 @@

      DANDI Compute: the derivative it produces

      -
      +
      +

      ReproFlow: Automatic collection of Audio-Video Stimuli and responses

      + +
      + +
      +

      ... and then all into BIDS too!

      + + + Discover more from "SciOps from ReproNim" webinar (video on ReproTube). + + +
      + +
      + +
      + +
      - - - - -
      -
      - +

      over 6,000+ Git repositories as "subdatasets",
      + with access to 600TB+ of neural data

      diff --git a/pics/borrowed/dbic-QA-audiovideo-20261008.png b/pics/borrowed/dbic-QA-audiovideo-20261008.png new file mode 120000 index 00000000..1f091931 --- /dev/null +++ b/pics/borrowed/dbic-QA-audiovideo-20261008.png @@ -0,0 +1 @@ +../../.git/annex/objects/xV/0g/MD5E-s354055--7f4bff14a7b5ffc6e5c4b12f7931d5e5.png/MD5E-s354055--7f4bff14a7b5ffc6e5c4b12f7931d5e5.png \ No newline at end of file From 4c795c7a6db225fa8d860ab3fdcc910a8d0bfa78 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 22:38:58 -0400 Subject: [PATCH 44/49] [DATALAD RUNCMD] Revert unintended change to another slide === Do not change lines below === { "chain": [], "cmd": "git diff master.. -- 2023-bids-dicom.html | patch -p1 -R", "dsid": "9eab38ed-8db7-4b6a-b7ce-bab6be25b670", "exit": 0, "extra_inputs": [], "inputs": [], "outputs": [], "pwd": "." } ^^^ Do not change lines above ^^^ --- 2023-bids-dicom.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/2023-bids-dicom.html b/2023-bids-dicom.html index 7ee55b79..09982e56 100644 --- a/2023-bids-dicom.html +++ b/2023-bids-dicom.html @@ -277,9 +277,9 @@

      NIfTI-1

      2017: State of things from an eye of DICOM ppl

      - +
      @@ -300,8 +300,8 @@

      We have two widely used standards,
      which can benefit from cooperation

      DICOMs in BIDS: the recommended source

      - - + +
      From b4f178b215d46ee26d3594c6ad0240b1845ae3ea Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 23:14:35 -0400 Subject: [PATCH 45/49] Final full draft --- 2026-dhmc-ieeg.html | 102 ++++++++++++------ .../notebooklm-stamped-glassbox-20261008.pdf | 1 + 2 files changed, 73 insertions(+), 30 deletions(-) create mode 120000 pics/borrowed/notebooklm-stamped-glassbox-20261008.pdf diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 95bd44e3..fae00ad4 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -256,6 +256,9 @@

      Acknowledgements

      Franco PestilliFranco Pestilli Michael HankeMichael Hanke Satrajit GhoshSatrajit Ghosh +
  • + +
    @@ -280,6 +283,9 @@

    Acknowledgements

    Samuel NastaseSamuel Nastase Nikolaas N. OosterhofNikolaas N. Oosterhof Matthew BrettMatthew Brett +
    + +
    Kyle MeyerKyle Meyer Chris ChengChris Cheng Soichi HayashiSoichi Hayashi @@ -1156,8 +1162,6 @@

    @@ -1187,6 +1191,32 @@

    DataLad in one figure

    +
    +

    Why version control?

    + + + + + +
    +
      +
    • collaborate
    • +
    • keep things synchronized
    • +
    • keep track of changes
    • +
    • use as a backup
    • +
    • search (grep)
    • +
    • ...
    • + +
    +
    + + Borrowed from PhD Comics 1531. +
    + +
    +

    Meet one of the "largest" Git "repositories"

    @@ -1194,6 +1224,23 @@

    Meet one of the "largest" Git "repositories"

    over 6,000+ Git repositories as "subdatasets",
    with access to 600TB+ of neural data

    + +
    +

    In DataLad We Trust!

    +

    And so do they:

    + + +
    + M. Hanke, F. Pestilli, A. S. Wagner, C. J. Markiewicz, J.-B. Poline, and Y. O. Halchenko. In defense of + decentralized research data management. Neuroforum, 0(0), jan 2021. doi: 10.1515/nf-2020-0037 + + +
    + +
    + +
    + @@ -1210,27 +1257,20 @@

    Meet one of the "largest" Git "repositories"

    +
    +

    Goal: Distill the best operation practices for Humans and AI

    + +
    +
    @@ -1239,22 +1279,19 @@

    Meet one of the "largest" Git "repositories"

    - - - -
    @@ -1262,6 +1299,11 @@

    Meet one of the "largest" Git "repositories"

    Thank you!

    Questions & discussion

    +

    Think about your SciOps level

    + +

    + From "A Maturity Model for Operations in Neuroscience Research", 2026
    by E.C. Johnson, ..., Y.O. Halchenko, ..., D. Yatsenko https://arxiv.org/abs/2401.00077v1
    +

    diff --git a/pics/borrowed/notebooklm-stamped-glassbox-20261008.pdf b/pics/borrowed/notebooklm-stamped-glassbox-20261008.pdf new file mode 120000 index 00000000..16ef4fae --- /dev/null +++ b/pics/borrowed/notebooklm-stamped-glassbox-20261008.pdf @@ -0,0 +1 @@ +../../.git/annex/objects/j3/7z/MD5E-s12986397--7e38cc06fd58f461e2ae1253fe14aac6.pdf/MD5E-s12986397--7e38cc06fd58f461e2ae1253fe14aac6.pdf \ No newline at end of file From 963e567e24a31370022e189e770125a71e92ca17 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 23:15:10 -0400 Subject: [PATCH 46/49] Saving forgotten extracted page --- pics/borrowed/notebooklm-stamped-glassbox-20261008-p3.png | 1 + 1 file changed, 1 insertion(+) create mode 120000 pics/borrowed/notebooklm-stamped-glassbox-20261008-p3.png diff --git a/pics/borrowed/notebooklm-stamped-glassbox-20261008-p3.png b/pics/borrowed/notebooklm-stamped-glassbox-20261008-p3.png new file mode 120000 index 00000000..58890ac5 --- /dev/null +++ b/pics/borrowed/notebooklm-stamped-glassbox-20261008-p3.png @@ -0,0 +1 @@ +../../.git/annex/objects/Xz/qF/MD5E-s1319551--88f79fc8886866c8dbce9fab5b78eff9.png/MD5E-s1319551--88f79fc8886866c8dbce9fab5b78eff9.png \ No newline at end of file From a73e9eac2d9ae27607483884cd0f5fcfd6c84938 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 23:16:19 -0400 Subject: [PATCH 47/49] git-annex in yoh@lena:~/proj/CON/talks --- 2026-dhmc-ieeg.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index fae00ad4..69f7b683 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -491,7 +491,7 @@

    Ask: Read it, checkout example datasets!

    -
    +

    Let's Zoom-in on
    Academic ecosystem

    From 9117c303202074ac0b9c7e340106f82f2c6ec483 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Thu, 8 Oct 2026 23:17:22 -0400 Subject: [PATCH 48/49] minor transition tuneup --- 2026-dhmc-ieeg.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2026-dhmc-ieeg.html b/2026-dhmc-ieeg.html index 69f7b683..10404b71 100644 --- a/2026-dhmc-ieeg.html +++ b/2026-dhmc-ieeg.html @@ -478,7 +478,7 @@

    Ask: Read it, checkout example datasets!

    -
    +
    From 45b095d787ca4f1f5fb85e3e8e4f81577b1e6f17 Mon Sep 17 00:00:00 2001 From: Yaroslav Halchenko Date: Fri, 9 Oct 2026 04:37:28 -0400 Subject: [PATCH 49/49] 2026-dhmc-ieeg: rewrite the deck in markdown The deck had grown into a mix of hand-written reveal.js HTML and a few
    islands. Everything is markdown now: each top-level
    is one horizontal stack whose slides live in a single
    - - -

    Acknowledgements

    @@ -305,539 +225,526 @@

    Acknowledgements

    +
    - - - - - +
    -
    - - -
    +
    +
    + +
    -
    - -
    +
    - - - +
    -
    - -
    +
    - + +
    +
    +
    + +
    -
    - -
    +
    -
    - -
    - -
    +---- + + + + + + +
    - - - +
    -
    - -
    +
    -
    - -
    -
    +

    + +adapted from Rokem/Gau/Halchenko, 2024: BIDS presented at NSF POSE workshop + +

    -
    -

    BIDS Features

    - - - - - - -
    - DICOMs reorganized into a BIDS dataset - - -
    +---- -

    - See deeper overview at "The Brain Imaging Data Structure (BIDS): an open community standard for neuroscience",
    NSF POSE Workshop 2024 -

    -
    + -
    -

    iEEG is a first-class BIDS citizen

    +---- - -
    - - -
    -
    - See also Holdgraf et al., Scientific Data, 2019 +### BIDS Features + + + + + + +
    +DICOMs reorganized into a BIDS dataset + + +
    + +

    See deeper overview at "The Brain Imaging Data Structure (BIDS): an open community standard for neuroscience",
    NSF POSE Workshop 2024

    -
    +---- -
    - -
    +### iEEG is a first-class BIDS citizen -
    - -
    + +
    + + +
    +
    -
    -

    DICOMs to BIDS: ReproIn + HeuDiConv

    -
    - - -
    - - Discover more from "SciOps from ReproNim" webinar (video on ReproTube). - -
    + +See also Holdgraf et al., Scientific Data, 2019 + - -
    - -
    -
    - +---- + + + + + + +---- + + + + +---- + + + +## DICOMs to BIDS: ReproIn + HeuDiConv + +
    + + +
    + + +Discover more from "SciOps from ReproNim" webinar (video on ReproTube). + + +---- + - - + + + +
    +
    + +
    -
    - - -
    +
    - - +
    -
    - -
    +
    - - - - +
    -
    - -
    +
    -
    +Cody's deeper dive @ BBQS workshop: [slides](2026-bbqs-stamped.pdf), and [video@CONTube](https://datasets.datalad.org/centerforopenneuroscience/contube/web/#/video/8NTWKHer5Zo)
    +Collection of examples: [examples.stamped-principles.org](https://examples.stamped-principles.org/)
    +Checklist: [checklist.stamped-principles.org](https://checklist.stamped-principles.org/)
    -
    -

    Goal: Distill the best operation practices for Humans and AI

    - -
    +---- - -
    - -
    +### Goal: Distill the best operation practices for Humans and AI + +![](pics/borrowed/notebooklm-stamped-glassbox-20261008-p3.png) + +---- + + + + + + +
    - -
    - -
    + -
    -

    Thank you!

    -

    Questions & discussion

    -

    Think about your SciOps level

    - -

    - From "A Maturity Model for Operations in Neuroscience Research", 2026
    by E.C. Johnson, ..., Y.O. Halchenko, ..., D. Yatsenko https://arxiv.org/abs/2401.00077v1
    -

    +