Upload multi subjects / session XNAT


Following the same line of work as the last blog post, I’ll explain a possible way of uploading a set of Dicom images separated in folders indicating subject/session organization into XNAT. This solution is based on a script by Hauke Bartsch (hbartsch@ucsd.edu).

Bash script:

# Create a session cookie, we want to re-use that session instead of providing

# login information every time. Number of sessions might be limited otherwise to 1000.

cookie=`curl -k -u $USER:$PASSWORD -X POST $XNAT/data/JSESSION` echo "Session ID is: $cookie"

# create subject in case it does not exist

echo "create subject $c" c=`curl --cookie JSESSIONID=$cookie -k -X PUT $XNAT/data/archive/projects/$PROJECT/subjects/$subject`

# create session in case it does not exist

echo "create session $c" c=`curl --cookie JSESSIONID=$cookie -k -X PUT $XNAT/data/archive/projects/$PROJECT/subjects/$subject/experiments/$session?xsiType=xnat:mrSessionData`

timestamps=( ) for file in `find $directory -type f -print` do

```
 # move file over using REST API
 c=`curl  --cookie JSESSIONID=$cookie -s -k -H 'Content-Type: application/dicom' -X POST "$XNAT/data/services/import?inbody=true&PROJECT_ID=$PROJECT&SUBJECT_ID=$subject&EXPT_LABEL=$session&prearchive=true&overwrite=append&format=DICOM&content=T1_RAW" --data-binary @$file | tr -d [:cntrl:]`
 echo -n "."
 timestamp=`echo $c | cut -d'/' -f6`
 # is timestamp new?
 found="0"
 for f in "${timestamps[@]}"; do
    if [ "$f" = "$timestamp" ]; then

       found="1"
    fi
 done
 # add to array
 if [ $found = "0" ]; then
    timestamps+=($timestamp)
    echo "found a new series $timestamp"
 fi
```

done echo "done sending files..."