Interrogating structure and function
using whole-brain reconstruction
Daniel Fürth
Meletis Lab
Half-time seminar
7th March 2016
daniel.furth@ki.se
Graybiel, A. et al. (1990) PNAS
cfos
cocaine
saline
Graybiel, A. et al. (1990) PNAS
cfos
Albin, Young & Penney, 1989
Alexander, DeLong & Stric 1986
McCulloch & Pitts, 1943
McClelland & Rumelhart 1986
Elman 1990
Jordan 1997
Minsky & Papert, (1972)
Graybiel, A. et al. (1990)
Jordan, M. I. et. al. (1991). Adaptive mixtures of local experts.
Winter & McClelland (1978)
Winter & McClelland (1978)
Stevens (1946)
Church (2015)
Cell types
Connections
Connections strengths and types
Developmental lineages
Histories of electrical activity patterns over time
Histories of molecular changes over time
Pollak et al. 2014
www.mcstan.org
Pollak Dorocic et al. 2014
Reconstructing brain from sectioned tissue
similar to...
works with...
Basic idea:
A
B
C
Independent
variable
Dependent
variable
Mediator
variable
Mediational statistical analysis
Basic idea.
A
B
C
cocaine
dosage
(mg/ml)
Behavior
total track length (cm)
c-fos expression
(ith region)
direct effect
indirect effect
mediating effect
Question: How much of the behavioral variability is explained by variability in c-fos expression?
Kourrich, Calu & Bonci (2015)
Can be used to segment processes and their direction.
NATURE BIOTECHNOLOGY | COMPUTATIONAL BIOLOGY | ANALYSIS
Kaia Achim, Jean-Baptiste Pettit, Luis R Saraiva, Daria Gavriouchkina, Tomas Larsson, Detlev Arendt & John C Marioni
Allen Brain Reference Atlas
Allen Brain Reference Atlas
Anatomic Gene Expression Atlas
Lydia Ng, et al. (2009) Nat. Neuro.
http://mouse.brain-map.org/agea
324 cells from cortico-striatal section
Our approach
Our approach
Allen Brain Reference Atlas
Connectivity average template (Ng et al. 2014)
Allen Brain Reference Atlas
Connectivity average template (Ng et al. 2014)
Do we really have a 'BigData' problem in neuroscience?
http://www.parallac.org/
10 computers (146 processors)
Up to 64 cores per processor!
Freeman et al. (2014) Nature Methods
xx <- faithful$eruptions
fit <- density(xx)
plot(fit)
#Line 1: loading
xx <- faithful$eruptions
#Line 2: estimate density
fit1 <- density(xx)
#Line 2: draw 10'000 bootstraps
fit2 <- replicate(10000, {
x <- sample(xx,replace=TRUE);
density(x, from=min(fit1$x), to=max(fit1$x))$y
})
#Line 3: compute 95% error "bars"
fit3 <- apply(fit2, 1, quantile,c(0.025,0.975))
#Line 4: plot the estimate
plot(fit1, ylim=range(fit3))
#Line 5: add estimation error as shaded region
polygon(c(fit1$x,rev(fit1$x)), c(fit3[1,], rev(fit3[2,])), col=’grey’, border=F)
#Line 6: add the line again since the polygon overshadows it.
lines(fit1)
What other language can do this in 6 lines of code?
# install.packages('foreach'); install.packages('doSNOW')
library(foreach)
library(doSNOW)
cl <- makeCluster(2, type = "SOCK")
registerDoSNOW(cl)
getDoParName()
#matrix operators
x <- foreach(i=1:8, .combine='rbind', .packages='wholebrain' ) %:%
foreach(j=1:2, .combine='c', .packages='wholebrain' ) %dopar% {
l <- runif(1, i, 100)
i + j + l
}
#include <string>
#include <iostream>
#include <thread>
using namespace std;
//The functions we want to make the thread run.
void task1(string msg)
{
cout << "task1 says: " << msg;
}
void task2(string msg)
{
cout << "task1 says: " << msg;
}
//Main loop.
int main()
{
thread t1(task1, "Task 1 executed");
thread t2(task2, "Task 1 executed");
t1.join();
t2.join();
}
Rcpp
#include <string>
#include <iostream>
#include <thread>
using namespace std;
//The functions we want to make the thread run.
void task1(string msg)
{
cout << "task1 says: " << msg;
}
void task2(string msg)
{
cout << "task1 says: " << msg;
}
//Main loop.
int main()
{
thread t1(task1, "Task 1 executed");
thread t2(task2, "Task 1 executed");
//let main wait for t1 and t2 to finish.
t1.join();
t2.join();
}
Rcpp
Dual core
Gene specificity
about ~24'000 genes expressed in the brain.