-
Notifications
You must be signed in to change notification settings - Fork 100
2.3 ChRIS DS plugin workflow: extract DICOM metadata.
This page describes interacting with the ChRIS Ultron Back End (CUBE) using pfurl
and running a DS type plugin called pl-pfdicom_tagextract
. This plugin wraps around an underlying pfdicom_tagExtract
python module and provides the ability to extract DICOM meta data values and generate reports in a variety of formats.
Please follow the steps here to create a new source, or FS, feed containing data to anonymize.
Be sure that the internal pman
job database has been cleared after instantiating CUBE and running the test suite. If this is not done, then collisions in the job-ID jid
space will occur -- some of the tests will have the same jid
as actual feeds and operations will fail.
pfurl --verb POST --raw --http ${HOST_IP}:5010/api/v1/cmd \
--jsonwrapper 'payload' --msg \
'{ "action": "DBctl",
"meta": {
"do": "clear"
}
}' --quiet --jsonpprintindent 4
In a new terminal, set HOST_IP
to the IP of the actual host you are using. In Linux, this is
export HOST_IP=$(ip route | grep -v docker | awk '{if(NF==11) print $9}')
export HOST_PORT=8000
At least one user with name/password combination as
-
chris
/chris1234
The FS example will take care of this.
pfcon
pfioh
pman
The FS example will take care of this.
pfurl --auth chris:chris1234 \
--http ${HOST_IP}:${HOST_PORT}/api/v1/plugins/ \
--quiet --jsonpprintindent 4
Look through the list for pl-pfdicom_tagextract
. For example, let's say that this is located at
http://10.17.24.163:8000/api/v1/plugins/8/
we can call
export P=8
pfurl --auth chris:chris1234 \
--http ${HOST_IP}:8000/api/v1/plugins/$P/ \
--quiet --jsonpprintindent 4
{
"collection": {
"version": "1.0",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/",
"items": [
{
"data": [
{ "name": "name", "value": "pfdicom_tagextract" },
{ "name": "dock_image", "value": "fnndsc/pl-pfdicom_tagextract" },
{ "name": "type", "value": "ds" },
{ "name": "authors", "value": "FNNDSC ([email protected])" },
{
"name": "title",
"value": "A DICOM tag extractor/reporting tool. Generates reports based on DICOM header information."
},
{ "name": "category", "value": "DICOM" },
{
"name": "description",
"value": "This app performs a recursive walk down an input tree, and for each location with a DICOM file, will generate a report in the corresponding location in the output tree."
},
{
"name": "documentation",
"value": "https://github.com/FNNDSC/pfdicom_tagExtract"
},
{ "name": "license", "value": "Opensource (MIT)" },
{ "name": "version", "value": "1.0" },
{ "name": "execshell", "value": "python3" },
{ "name": "selfpath", "value": "/usr/src/dcm_tagExtract" },
{ "name": "selfexec", "value": "dcm_tagExtract.py" },
{ "name": "compute_resource_identifier", "value": "host" },
{ "name": "min_number_of_workers", "value": 1 },
{ "name": "max_number_of_workers", "value": 1 },
{ "name": "min_cpu_limit", "value": 1000 },
{ "name": "max_cpu_limit", "value": 2147483647 },
{ "name": "min_memory_limit", "value": 200 },
{ "name": "max_memory_limit", "value": 2147483647 },
{ "name": "min_gpu_limit", "value": 0 },
{ "name": "max_gpu_limit", "value": 0 }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/8/",
"links": [
{
"rel": "parameters",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/parameters/"
},
{
"rel": "instances",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/instances/"
}
]
}
],
"links": [ ]
}
}
Follow the links provided to get information on the parameters for the plugin
pfurl --auth chris:chris1234 \
--http ${HOST_IP}:${HOST_PORT}/api/v1/plugins/$P/parameters/ \
--quiet --jsonpprintindent 4
{
"collection": {
"version": "1.0",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/parameters/",
"items": [
{
"data": [
{ "name": "name", "value": "inputFile" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-i" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "input file" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/43/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "extension" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-e" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "DICOM file extension" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/44/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "tagFile" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-F" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "file containing tags to parse" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/45/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "tagList" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-T" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "comma-separated tag list" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/46/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "rawType" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "raw" },
{ "name": "flag", "value": "-r" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "display raw tags" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/47/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "imageFile" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-m" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "image file to convert DICOM input" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/48/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "imageScale" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-s" },
{ "name": "action", "value": "store" },
{
"name": "help",
"value": "scale images with factor and optional :interpolation"
}
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/49/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "outputFileStem" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": false },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-o" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "output file" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/50/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "outputFileType" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "raw" },
{ "name": "flag", "value": "-t" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "list of output report types" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/51/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
},
{
"data": [
{ "name": "name", "value": "printElapsedTime" },
{ "name": "type", "value": "boolean" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "False" },
{ "name": "flag", "value": "--printElapsedTime" },
{ "name": "action", "value": "store_true" },
{ "name": "help", "value": "print program run time" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/52/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" }]
}
],
"links": [
{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" },
{
"rel": "next",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/parameters/?limit=10&offset=10"
}
]
}
}
http -a chris:chris1234 POST http://${HOST_IP}:${HOST_PORT}/api/v1/plugins/$P/instances/ \
Content-Type:application/vnd.collection+json \
Accept:application/vnd.collection+json \
template:='{"data":
[
{"name":"outputFileType",
"value":"jpg"},
{"name":"sliceToConvert",
"value":"-1"},
{"name":"func",
"value":"invertIntensities"},
{"name":"previous_id",
"value":"1"}
]
}'
pfurl --auth chris:chris1234 --verb POST --http ${HOST_IP}:${HOST_PORT}/api/v1/plugins/$P/instances/ \
--content-type application/vnd.collection+json \
--jsonwrapper 'template' --msg '
{"data":
[
{"name":"extension",
"value":"dcm"},
{"name":"threads",
"value":"0"},
{"name":"imageScale",
"value":"2"},
{"name":"outputFileStem",
"value":"%PatientID-%PatientAge"},
{"name":"outputFileType",
"value":"raw,json,html,dict,col,csv"},
{"name":"imageFile",
"value":"m:%_nospc|-_ProtocolName.jpg"},
{"name":"useIndexhtml",
"value":"True"},
{"name":"verbosity",
"value":"5"},
{"name":"previous_id",
"value":"1"}
]
}' \
--quiet --jsonpprintindent 4
{
"stdout": {
"collection": {
"version": "1.0",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/instances/",
"items": [
{
"data": [
{ "name": "id", "value": 2 },
{ "name": "previous_id", "value": 1 },
{ "name": "plugin_name", "value": "pfdicom_tagextract" },
{ "name": "start_date", "value": "2018-09-17T12:46:02.738334-04:00" },
{ "name": "end_date", "value": "2018-09-17T12:46:02.738375-04:00" },
{ "name": "status", "value": "started" },
{ "name": "owner", "value": "chris" },
{ "name": "compute_resource_identifier", "value": "host" },
{ "name": "cpu_limit", "value": 1000 },
{ "name": "memory_limit", "value": 200 },
{ "name": "number_of_workers", "value": 1 },
{ "name": "gpu_limit", "value": 0 }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/instances/2/",
"links": [
{
"rel": "previous",
"href": "http://10.72.76.155:8000/api/v1/plugins/instances/1/"
},
{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/8/" },
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/1/"
},
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/2/"
},
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/3/"
},
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/4/"
},
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/5/"
},
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/6/"
},
{
"rel": "string_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/string-parameter/7/"
},
{
"rel": "bool_param",
"href": "http://10.72.76.155:8000/api/v1/plugins/bool-parameter/1/"
}
]
}
],
"links": [ ]
}
},
"msg": "push OK."
}
Examine the return JSON for the instance ID returned. In the above, we note that this is
{
"stdout": {
"collection": {
"version": "1.0",
"href": "http://10.72.76.155:8000/api/v1/plugins/8/instances/",
"items": [
{
"data": [
{ "name": "id", "value": 2 },
{ "name": "previous_id", "value": 1 },
{ "name": "plugin_name", "value": "pfdicom_tagextract" },
{ "name": "start_date", "value": "2018-09-17T12:46:02.738334-04:00" },
{ "name": "end_date", "value": "2018-09-17T12:46:02.738375-04:00" },
{ "name": "status", "value": "started" },
{ "name": "owner", "value": "chris" },
{ "name": "compute_resource_identifier", "value": "host" },
{ "name": "cpu_limit", "value": 1000 },
{ "name": "memory_limit", "value": 200 },
{ "name": "number_of_workers", "value": 1 },
{ "name": "gpu_limit", "value": 0 }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/instances/2/",
In other words, instance 2.
pfurl --auth chris:chris1234 \
--verb GET \
--http ${HOST_IP}:${HOST_PORT}/api/v1/plugins/instances/2/ \
--content-type application/vnd.collection+json \
--quiet --jsonpprintindent 4
{
"collection": {
"version": "1.0",
"href": "http://192.168.1.189:8000/api/v1/plugins/instances/2/",
"items": [
{
"data": [
{ "name": "id", "value": 2 },
{ "name": "previous_id", "value": 1 },
{ "name": "plugin_name", "value": "pfdicom_tagextract" },
{ "name": "start_date", "value": "2018-09-21T18:26:33.273411-04:00" },
{ "name": "end_date", "value": "2018-09-21T18:27:23.556806-04:00" },
{ "name": "status", "value": "finishedSuccessfully" },
where we note that status is finishedSuccessfully
.
-30-