ArcGet.py: yet another XNAT command line downloader¶
The standard XNAT distribution provides a simple command line tool called
ArcGet that helps you download your imaging data from XNAT to your local
hard drive. Not surprisingly, the YAXIL version of ArcGet.py does pretty
much the same thing, but with a few extra useful nuggets.
Basic Usage¶
If you want to download all scans for a MR Session, just use this
ArcGet.py -a xnatastic -s LABEL -o ./dicoms
If you know the scan numbers that you want to download, use the -r|--scans
argument
ArcGet.py -a xnatastic -s LABEL -r 1 2 3 -o ./dicoms
If you know the scan types that you want to download, use the -t|--types
argument
ArcGet.py -a xnatastic -s LABEL -t MEMPRAGE BOLD --output-dir ./dicoms
If you know the tasks that were coded into the scan notes field, use the
-k|--tasks argument
ArcGet.py -a xnatastic -s LABEL -k ANAT1 REST1 -o ./dicoms
This functionality should more or less cover what you already know and love from
classic ArcGet.
BIDS compatibility¶
By default ArcGet.py will download your data into a flat unstructured
directory. This is nice, but there is a new standard in town when it comes to
organizing your neuroimaging data on disk called
BIDS.
To be brief, the BIDS specification wants you to store your functional scans in
a func folder, your anatomical scans in an anat folder, your field
distortion maps in a fmap folder, and so on. BIDS also wants you to convert
your files to NIFTI format and name your files with useful pieces of information
such as the subject, session, task, run, etc. You can read up on
the full specification here.
The YAXIL version of ArcGet.py will help you download and save your data
into a proper BIDS structure in two ways. The first way involves supplying a
simple YAML formatted configuation file. Here is an example
func:
bold:
- scan: 12
task: REST
run: 1
- scan: 16
task: REST
run: 2
- scan: 28
task: LANG
run: 1
- scan: 30
task: LANG
run: 2
fmap:
magnitude1:
- scan: 33
run: 1
phasediff:
- scan 34
run: 1
anat:
T1w:
- scan: 10
run: 1
- scan: 36
run: 2
When you pass this file to ArcGet.py, you will end up with your data
downloaded and converted to a proper BIDS structure
ArcGet.py -a xnatastic -s LABEL -c bids.yaml -o ./bids
Huzzah!
ArcGet.py also supports a second way to output your data to a BIDS
structure that does not require a configuration file. By supplying the
-b|--bids argument, ArcGet.py will use XNAT scan metadata and
additional information coded into the scan note field. If you set your scan
note field(s) to ANAT_001, REST_001, FMAPM, etc. these strings will
be parsed and used to construct a proper BIDS structure
ArcGet.py -a xnatastic -s LABEL -k ANAT_001 REST_001 FMAPM -b -o ./bids
Internally, the -b|--bids argument will construct a configuration
file similar to the one described above. The following table describes
how BIDS data types and modalities are determined from scan types and
note fields in XNAT
| XNAT | BIDS | ||||
|---|---|---|---|---|---|
| type | note | type | modality | task | run |
| ANAT_001 | anat | T1w | 1 | ||
| BOLD | REST_001 | func | bold | REST | 1 |
| BOLD | REST2 | func | bold | REST | 2 |
| FMAPM | fmap | magnitude1 | 1 | ||
| FMAPP | fmap | phasediff | 1 | ||