Michael Hanke
Institute of Neuroscience and Medicine, Brain & Behavior (INM-7),
Research Center Jülich
Institute of Systems Neuroscience, Medical Faculty, Heinrich Heine University Düsseldorf
http://psychoinformatics.de
“The task of neural science is to explain behavior in terms of the activities of the brain.”
— Eric Kandel, Principles of Neuroscience.
Is brain structure alone an optimal reference
for inter-individual analysis of brain function?
Compute a transformation of
2D/3D space
based on a single feature (e.g. image gray value),
or a low-dimensional feature vector (e.g. sulcal depth, curvature, myelin)
from Yeo, et al., Journal of Neurophysiology, 2011 and Robinson et al., NeuroImage, 2014
Compute a transformation of
a high-dimensional (representational) space
based on a high-dimensional feature vector,
such as the functional response to watching a movie (>1000 time points)
Four individual brains performing the same task
(time-locked activity assumed)
Voxels selected independently for each brain
— no structural constraints necessary, albeit often desired
Independent Z-scoring of time series (centered data)
only deviation from mean is considered
Pick a reference subject/space:
first acquired, random, least motion,
most variance, largest brain, ...
Compute orthonormal transformation that minimizes distance in 4D between subjects; average of transformed data defines response profiles in common space
Individual transformation matrices align a subject's voxel space with the common space; can be applied to other data (see later slide for requirements)
Orthonormal transformation is reversible: easily project data from common space into an individual voxel space
Common pattern of involment of brain networks in particular brain functions in real-life cognition.
Reconceptualization of inter-individual differences.
Potential to facilitate reliable clinical diagnostics.
Too big, too risky, too expensive — for an individual lab/center
request via standard URL,
(each dataset has a UUID, and each dataset location another UUID)
$ datalad install http://example.com/ds1
request via user-friendly local file path, not internal ID,
regardless of remote actual storage solution properties
ds1/ $ datalad get file2
ability to track any number of dataset "siblings",
in Git or non-Git data stores
ds1/ $ datalad update
apply changes from default or selected sibling
while maintaining local data availability status
ds1/ $ datalad update --merge --reobtain-data
$ datalad install --dataset . --source http://example.com/ds inputs/rawdata
$ git diff HEAD~1
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..c3370ba
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "inputs/rawdata"]
+ path = inputs/rawdata
+ url = http://example.com/importantds
diff --git a/inputs/rawdata b/inputs/rawdata
new file mode 160000
index 0000000..fabf852
--- /dev/null
+++ b/inputs/rawdata
@@ -0,0 +1 @@
+Subproject commit fabf8521130a13986bd6493cb33a70e580ce8572
"actionable" links to subdatasets/files, seamless handling of dataset trees, each dataset can be individually managed by a different curator
- for any local command
$ datalad run -m "Perform eye movement event detection"\
--input 'inputs/raw_eyegaze/sub-*/beh/sub-*...tsv.gz' \
--output 'sub-*' \
bash code/compute_all.sh
- for any containerized app (can be tracked in the dataset too)
$ datalad containers-run -n nilearn \
--input 'inputs/mri_aligned/sub-*/in_bold3Tp2/sub-*_task-avmovie_run-*_bold*' \
--output 'sub-*/LC_timeseries_run-*.csv' \
"bash -c 'for sub in sub-*; do for run in run-1 ... run-8;
do python3 code/extract_lc_timeseries.py \$sub \$run; done; done'"
Complete capture of any input data, computational environment, code, parameters, and outputs possible — without sacrificing modularity
Enables enigma-style computing — analyze data that you don't have!
across datasets, without a DB (server)
$ datalad \
-c datalad.search.index-egrep-documenttype=files \
-f json_pp \
search \
bids.subject.sex:female \
bids.type:t1 \
bids.subject.age:24
{
"dsid": "4842e188-7df5-11e6-8e6b-002590f97d84",
"metadata": {
"@context": {...},
"bids": {...},
"datalad_core": {
"url": [
"http://openneuro.s3.amazonaws.com/ds000008/ds000008_R1.1.0/...MZ92g",
"http://openneuro.s3.amazonaws.com/ds000008/ds000008_R1.1.1/...UyanK",
"http://openneuro.s3.amazonaws.com/ds000008/ds000008_R2.0.0/..._flBz"
]
},
"nifti1": {...},
"parentds": "/tmp/mega/openfmri/ds000008",
"path": "/tmp/mega/openfmri/ds000008/sub-15/anat/sub-15_T1w.nii.gz",
"query_matched": {
"bids.subject.age(years)": "24",
"bids.subject.sex": "female",
"bids.type": "T1"
},
"refcommit": "b18692ef1beefd88055bc0578b7567a8f4fdf8f9",
"type": "file"
}
...
alternative output formats: JSON stream, custom, ...
All this is possible, but not necessary!
# 1. start something
myproject/ % datalad create
# 2. do something
# ...
# 3. save state
myproject/ % datalad save
# go to (2)
|
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Website + Demos: http://datalad.org
Documentation: http://handbook.datalad.org
Development: http://github.com/datalad
Support: https://matrix.to/#/#datalad:matrix.org
Open data: http://datasets.datalad.org