Towards an open source "Google Maps"-like interface for neuroanatomical data
Daniel Fürth
Meletis Lab
Lee lab meeting
22th July 2016
daniel.furth@ki.se
Towards an open source "Google Maps"-like interface for neuroanatomical data
Daniel Fürth
Meletis Lab
Zador lab meeting
11th April 2016
daniel.furth@ki.se
Content:
Geographical Information System (GIS)
similar to...
works with...
Non-Uniform Rational B-Splines (NURBS)
Reconstructing brain from sectioned tissue
Pollak et al. 2014
www.mcstan.org
Pollak Dorocic et al. 2014
Graybiel, A. et al. (1990) PNAS
cfos
cocaine
saline
Albin, Young & Penney, 1989
Alexander, DeLong & Stric 1986
Graybiel, A. et al. (1990)
Jordan, M. I. et. al. (1991). Adaptive mixtures of local experts.
Can be used to segment processes and their direction.
Stevens (1999)
Stevens (1999)
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
Mats Nilsson
Reverse transcription
RNase H digestion
Hybridization
Ligation
Rolling Circle Amplification
mFISH
Base calling
Mats Nilsson
Mats Nilsson
#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
#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
# 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
}
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?
Gene specificity
about ~24'000 genes expressed in the brain.