---
title: "System setup"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{System setup}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r}
#| label: setup
#| include: false
library(ggseg.extra)
```
Using pre-built atlases requires nothing beyond R.
Creating your own atlases may require external software depending on the
pipeline.
## What each pipeline needs
| Pipeline | R packages | System tools |
|----------|-----------|--------------|
| **Cortical** (annotation, labels) | `freesurferformats` | None |
| **Cortical** (neuromaps volume) | `freesurfer`, `neuromapr` | FreeSurfer |
| **Subcortical** | `freesurfer`, `magick`, `chromote`, `htmlwidgets`, `terra`, `smoothr` | FreeSurfer, ImageMagick |
| **Whole-brain** | `freesurfer`, `RNifti`, `magick`, `chromote`, `htmlwidgets`, `terra`, `smoothr` | FreeSurfer, ImageMagick |
| **Tract** | `RNifti`, `Rvcg` | None |
| **GIFTI / CIFTI** | `gifti` or `ciftiTools` | Connectome Workbench (CIFTI only) |
The cortical mesh-projection pipeline is the lightest --- it runs in seconds
with no system tools and minimal R dependencies. All heavier packages
(`freesurfer`, `magick`, `chromote`, `terra`, etc.) are in Suggests and only
loaded when a pipeline actually needs them.
## FreeSurfer
[FreeSurfer](https://surfer.nmr.mgh.harvard.edu/fswiki/DownloadAndInstall)
is needed by the subcortical, whole-brain, and neuromaps volume pipelines.
The cortical annotation pipeline needs the `freesurferformats` R package
(not FreeSurfer itself) to read `.annot` and `.label` files.
On macOS, you also need:
- [XQuartz](https://www.xquartz.org/)
- [Xcode](https://developer.apple.com/xcode/) command line tools
Verify your installation:
```{r}
#| label: check-fs
#| eval: false
freesurfer::fs_dir()
```
## ImageMagick
[ImageMagick](https://imagemagick.org/) is used by the subcortical and
whole-brain pipelines for image processing --- isolating regions from
screenshots, tracing contours, and converting them to polygons.
**Not needed for cortical or tract pipelines.**
Install via your package manager:
```bash
# macOS
brew install imagemagick
# Ubuntu/Debian
sudo apt-get install imagemagick
```
## Chrome / Chromium
The subcortical and whole-brain pipelines take 3D screenshots using the
`chromote` package, which needs Google Chrome or Chromium.
Chrome is typically already installed.
If not, `chromote` will attempt to download a suitable version automatically.
**Not needed for cortical or tract pipelines.**
## Parallel processing
ggseg.extra uses the [furrr](https://furrr.futureverse.org/) package for
parallel processing.
By default, processing runs sequentially.
To enable parallel processing, set up a `future` plan before running atlas
creation functions:
```{r}
#| label: parallel
#| eval: false
library(future)
plan(multisession, workers = 4)
```
**Use `multisession`, not `multicore`.**
The subcortical pipeline uses
[chromote](https://rstudio.github.io/chromote/) to take 3D brain screenshots
via headless Chrome.
`multicore` relies on process forking, which corrupts chromote's websocket
connections and causes crashes.
`multisession` spawns independent R worker processes that each get their own
clean Chrome instance.
If `plan(multicore)` is active when the pipeline runs, it will automatically
switch to `multisession` and warn you.
To return to sequential processing:
```{r}
#| label: sequential
#| eval: false
plan(sequential)
```
## Progress bars
ggseg.extra uses [progressr](https://progressr.futureverse.org/) to report
progress during long-running operations.
Progress reporting is disabled by default.
To enable progress bars:
```{r}
#| label: progress
#| eval: false
library(progressr)
handlers("cli")
handlers(global = TRUE)
```
This gives you a cli-style progress bar that updates as each region or step
completes.
It works with both sequential and parallel execution.
## Checking your setup
Run the setup report to verify everything is in place:
```{r}
#| label: sitrep
#| eval: false
setup_sitrep()
```