CTSC Slicer XNE
Contents
- 1 UXP & functionality planning for Slicer's XNE client
- 1.1 Workflow & Implementation approaches
- 1.1.1 All Workflow Steps:
- 1.1.2 1. Select XNAT Enterprise Server
- 1.1.3 2. Authentication Dialog Presented
- 1.1.4 3. Process Dialog Input
- 1.1.5 4. Query XNAT for Projects Available to User
- 1.1.6 5. User Selects One Project
- 1.1.7 6. Query XNAT for Subjects in Selected Project
- 1.1.8 7. User Selects One Subject, Configures Filters to Narrow Search & Selects Search
- 1.1.9 8. Example Query XNAT for All Scans for Selected Experiment
- 1.1.10 9. User Selects One Scan and Clicks Download
- 1.1.11 10. Scan is Loaded into Slicer
- 1.1 Workflow & Implementation approaches
UXP & functionality planning for Slicer's XNE client
Workflow & Implementation approaches
All Workflow Steps:
- Select XNAT Enterprise server
- Authentication dialog presented
- Dialog input is processed
- XNAT queried for projects
- response is checked for http error codes
- xml parsed to get list of projects
- GUI populated
- One project selected
- XNAT queried for subjects in that project
- response is checked for http error codes
- xml parsed to get list of subjects
- GUI populated
- One subject and filters selected to narrow search
- User selects "search" for all scans
- XNAT queried for appropriate scans
- response is checked for http error codes
- xml is parsed to get list of scans
- GUI is populated
- User selects one scan and "download"
- Scan is loaded into Slicer
Each step is detailed below.
1. Select XNAT Enterprise Server
This sets the current URI handler to be the XNE_HttpHandler for subsequent REST-based client calls to XNE web services.
2. Authentication Dialog Presented
- Enter user name and password
3. Process Dialog Input
- Save the username (XNE_UserName) and password (XNE_Password)
- Authenticate and create a session:
curl -d POST $XNE_Svr/REST/JSESSION -u $XNE_UserName:$XNE_Password
4. Query XNAT for Projects Available to User
- XNAT queried for appropriate projects
curl $XNE_Srv/REST/projects?format=xml --cookie JSESSIONID=$sessionID
- response is checked for http error codes
- if error is found, report to user
- else xml is parsed to get list of scans
5. User Selects One Project
6. Query XNAT for Subjects in Selected Project
- XNAT queried for appropriate subjects
curl $XNE_Svr/REST/projects/$projectID/subjects?format=xml --cookie JSESSIONID=$sessionID
- response is checked for http error codes
- if error is found, report to user
- else xml is parsed to get list of scans
7. User Selects One Subject, Configures Filters to Narrow Search & Selects Search
Presents a search that grabs all scans for a given subject by default (the simplest workflow), but has advanced functionality that can be used to focus the search:
7a. Initial Presentation
* Subject: { SubjectIDs} * Experiments: { ExperimentIDs } ** Imaging Sessions: {} *** Scans: {} *** Reconstructions: {} *** Assessors: {} ** Non-imaging Assessments: {}
7b. A Subject ID is selected; Experiments are updated
* Subject: $SubjectIDs * Experiments: { ExperimentIDs } ** Imaging Sessions: {} *** Scans: {} *** Reconstructions: {} *** Assessors: {} ** Non-imaging Assessments: {}
7c. An Experiment ID is selected; Imaging Sessions & Non-imaging Assessments are updated
* Subject: $SubjectIDs * Experiments: $ExperimentID ** Imaging Sessions: { $SessionIDs } *** Scans: {} *** Reconstructions: {} *** Assessors: {} ** Non-imaging Assessments: { $AssessmentIDs }
7d. A Session ID is selected; ScanIDs, etc. are updated
* Subject: $SubjectIDs * Experiments: $ExperimentID ** Imaging Sessions: $SessionID *** Scans: { ScanIDs } *** Reconstructions: { ReconstructionIDs } *** Assessors: { AssessorIDs } ** Non-imaging Assessments: {AssessmentIDs}
8. Example Query XNAT for All Scans for Selected Experiment
- XNAT queried for appropriate scans
curl $XNE_Svr/REST/projects/$ProjectID/subjects/$SubjectID/experiments/$ExpID/scans?format=xml --cookie JSESSION=$sessionID
- response is checked for http error codes
- if error is found, report to user
- else xml is parsed to get list of scans
9. User Selects One Scan and Clicks Download
curl $XNE_Svr/projects/$ProjectID/subjects/$SubjectID/experiments/$ExpID/scans/$ScanID/resources/DICOM/files
This returns a list of URIs which Slicer uses to populate a vtkMRMLVolumeArchetypeStorageNode:URI and vtkMRMLVolumeArchetypeStorageNode::URIListMembers
10. Scan is Loaded into Slicer
vtkMRMLVolumeArchetypeStorageNode::ReadData( vtkMRMLVolumeArchetypeStorage *node) is called, which calls vtkMRMLStorageNode::StageReadData (*node) to download data using the XNE_HttpHandler.