Skip to content
Snippets Groups Projects
Commit b8cb2212 authored by Willy Kuo's avatar Willy Kuo
Browse files

Put Publication_page.qmd back

parent 2deb65d3
No related branches found
No related tags found
No related merge requests found
---
title: 'In vivo Imaging of Central Nervous System Fluid Spaces using Synchrotron Radiation Micro-Computed Tomography'
date: '2024-09-01'
First author: 'Marta Girona Alarcón'
Last author: 'Vartan Kurtcuoglu'
author:
- name: 'Marta Girona Alarcón (first author)'
orcid: 0009-0006-2111-2716
affiliations:
- name: The Interface Group, Institute of Physiology, University of Zurich
- name: 'Vartan Kurtcuoglu (last author)'
orcid: 0000-0003-2665-0995
affiliations:
- name: The Interface Group, Institute of Physiology, University of Zurich
format:
html:
grid:
body-width: 1500px
---
In this hub, we provide additional materials, methods and results for the publication.
## Supplemental Results
In this [DOI](https://doi.org/10.5281/zenodo.13773081), we provide full resolution datasets for download from the publication data and supplemental results:
### Pilot post mortem experiments
In a previous beamtime (ESRF, 2020, December), *ex vivo* imaging was performed. The goal of the pilot experiments was to chose a contrast agent for the presented *in vivo* experiments. The list of used contrast agents is available under the Zenodo download entry "tables_exVivo.7z". We considered the Barium-based contrast agent (CA) to be the most promissing one and therefore decided to employ it for the *in vivo* experiments (Fig. 1).
![Fig. 1. Ex vivo coronal slices of three different mice injected with (left) Mouse.number 23, Gadolinium-based, (middle) Mouse.number 19, Barium-based and (right) Mouse.number 30, Gold-based contrast agent.](images/post_mortem_overview.png)
```{r librLoad}
library(dplyr)
library(kableExtra)
# SET options for table rendering in this page
options(DT.options = list(fixedHeader = TRUE,
scrollX = TRUE,
scrollY = "800px",
paging = FALSE,
scrollCollapse = TRUE,
autoWidth = TRUE))
```
```{r}
tbl <- read.csv(file = 'exVivo_Contrast_agent_per_mouse_list.csv')
kable(tbl, format = "markdown")
```
Table 1. List of *ex vivo* mouse number, including the injected site and contrast agent.
### CSF spaces segmentation
In the publication, we have shown the need of infusing contrast agent to achieve a semi-automatic segmentation. Here, we show a rendering of one segmentation. In the downloads, we have provided a segmentation of a timeseries imaging in the brain ventricles, which can be found under "videos_Reconstructions.7z".
![Fig. 2. Three dimensional rendering of CSF spaces enclosed in the mouse skull: Infusion of contrast agent in the lateral ventricles during high-resolution synchrotron radiation-based hard X-ray computed tomography imaging allows 3D visualization with virtual slicing in all directions. Lateral ventricles in blue, third ventricle in green, aqueduct in pink and fourth ventricle in yellow.](images/JP26-invivo-2scan-phase3-postinjection-brain-80-90min_web.png){width="900"}
### Timeseries movies
Movement of contrast agent over time for the presented timeseries can be observed in projections and reconstructions as movies under the folders "videos_Reconstructions.7z" and "videos_Projections.7z" in [Zenodo](https://doi.org/10.5281/zenodo.13773081).
## Additional materials
We have additively manufactured the mouse holder, optimized for vertical imaging while ensuring fixation of the mouse skull (Fig. 3).
::: {layout-ncol="2"}
![Fig. 3. Visualization of the mouse holder mounted on the imaging rotational stage.](images/holder_1.jpeg){width="650"}
![Fig. 4. Transparent visualization of body mouse holder part containing the water channels to ensure physiological temperature of the mouse.](images/holder_2_holes.jpeg){width="300"}
:::
Additionally, we assambled a customized mouse stage for two surgical procedures: tracheotomy and cisterna magna infusion (Fig. 5).
![Fig. 5. Customized tracheotomy and cisterna magna stage. Available as a 3D model in the downloads.](images/cisternamagna_stage.jpeg){width="700"}
## Equipment and consumables
The following table provides details of consumables, hardware and software that have been employed for this experiments.
```{r}
tbl <- read.csv(file = 'Equipment_table.csv')
DT::datatable(tbl, extensions = c('FixedHeader'), filter = 'top', rownames = FALSE)
```
<!-- Do not edit below this line !! -->
## Links to protocol pages
```{r getrepo}
library(dplyr)
library(here)
# Read repository URL information from _quarto.yml file
vars <- yaml::read_yaml(file.path(here::here(),'_quarto.yml'),)
repo_url <- vars$website$`repo-url`
repo_url_basepath <- file.path(repo_url,'-', 'tree','master','webpage_contents')
```
All protocols can be found this website's repository: [`r repo_url`](repo_url)
```{r protocols}
library(dplyr)
library(here)
# Read repository URL information from _quarto.yml file
vars <- yaml::read_yaml(file.path(here::here(),'_quarto.yml'),)
# Retrieve which are data types and facilities relevant to this publication
inputs <- read.csv(file = 'input_mice.csv')
# Find protocols and files
folders <- unique(cbind(inputs$Data_type,inputs$Facility_name_YYYY_month)) # find table's unique variations of
paths <- dir(path = file.path('..','..','experiments',inputs$Data_type, inputs$Facility_name_YYYY_month, "protocols"),
pattern='*.pdf',full.names = TRUE)
# Add URL of the repo with additional info about the branch
paths <- as.data.frame(file.path(repo_url_basepath,'experiments', sapply(strsplit(paths,'experiments'),'[[',2)))
colnames(paths) <- 'Protocols'
# Add markdown formatting so that it becomes a link
paths$Protocols <- paste0('[', sapply(strsplit(paths$Protocols,'experiments'),'[[',2),'](', paths$Protocols,')')
# Render table
kableExtra::kable(paths,format = 'markdown')
```
## Sample information
`r getwd()`
```{r}
library(dplyr)
library(kableExtra)
# Take the relevant rows from the tables specified in inputs
mice_used <- list()
scans_used <- list()
# Loop through mice as defined in the mice_input table
inputs <- read.csv(file = 'input_mice.csv')
for (i in 1:nrow(inputs)){
# Find experiment table for this mouse
row_filepath <- file.path(here::here(), 'experiments',inputs$Data_type[i], inputs$Facility_name_YYYY_month[i], "metadata_tables",inputs$Metadata_file_mouse[i])
# Read mice info file
mice_used[[i]] <- read.csv(row_filepath) %>% filter(Subject_ID == inputs$Subject_ID[i]) # read table and filter subject
mice_used[[i]]$Subject_pubID <- inputs$Subject_pubID[i] # Add additional input column
mice_used[[i]]$Correction_factor <- inputs$Correction_factor[i] # Add additional input column
# Find and read scan lists for that subject
row_filepath_scans <- file.path(here::here(), 'experiments',inputs$Data_type[i], inputs$Facility_name_YYYY_month[i], "metadata_tables",inputs$Metadata_file_scan[i])
tmp_tbl_scans <- read.csv(row_filepath_scans) %>% filter(Subject_ID == inputs$Subject_ID[i])
# Providing the preview images
# ------------------------------------------------
# Build URL based on the REpo URL (retrieved from _quarto.yml file)
image_url <- file.path(repo_url_basepath,'experiments',inputs$Data_type[i], inputs$Facility_name_YYYY_month[i],'preview_images',tmp_tbl_scans$Preview_Image_LowQuality)
# Find relative path to image and COPY it into the publication folder
source_images_relativepath <- gsub(repo_url_basepath,file.path('..','..'),image_url)
#copy_image_dir <- file.path(getwd(),'preview_images')
#file.copy(source_images_relativepath,copy_image_dir)
"C:/Users/gorka/Gitlab_crs/fdcns/webpage_contents/publications/20240901_Marta_GironaAlarcon/images"
# Add HTML to display images in table and make them clickable link
tmp_tbl_scans$Preview_Image_LowQuality <- paste0('<a href=\'', image_url,'\' target=\'_blank\'>','<img src=\'', source_images_relativepath, '\' height=\'70\'></a>')
# ------------------------------------------------
# join tables ---------------------------------------------
scans_used[[i]] <- full_join(x=mice_used[[i]],
y = tmp_tbl_scans,
by=join_by("Subject_ID"),
suffix = c('.mice','.scans'),
keep=FALSE)
}
# Gather list elements in a table
mice_used <- do.call(rbind,mice_used)
scans_used <- do.call(rbind,scans_used)
#Change position of some columns
mice_used <- relocate(mice_used, Correction_factor, .before = 7)
mice_used <- relocate(mice_used, Subject_pubID, .before = 1)
scans_used <- relocate(scans_used, Correction_factor, .before = 7)
scans_used <- relocate(scans_used, Subject_pubID, .before = 1)
scans_used <- relocate(scans_used, Preview_Image, .before = 1)
## Gather code assumming there is only one data type
mouse_codebook <- read.csv(file = dir(path = file.path(here::here(), 'experiments',inputs$Data_type[1]), pattern = 'Mouse.*codebook.csv',full.names = TRUE))
scan_codebook <- read.csv(file = dir(path = file.path(here::here(), 'experiments',inputs$Data_type[1]), pattern = 'Scan.*codebook.csv',full.names = TRUE))
joint_codebook <- bind_rows(mouse_codebook, scan_codebook) %>% distinct()
```
::: panel-tabset
## Mice
```{r}
DT::datatable(mice_used, extensions = c('FixedHeader'), filter = 'top', rownames = FALSE)
```
#### Codebook
```{r}
kable(joint_codebook, format = "markdown")
```
## Mice and scans info
```{r}
DT::datatable(scans_used, escape = FALSE, extensions = c('FixedHeader'), filter = 'top', rownames = FALSE)
```
#### Codebook
```{r}
kable(mouse_codebook, format = "markdown")
```
:::
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment