-
Notifications
You must be signed in to change notification settings - Fork 100
2.1 ChRIS DS plugin workflow: anonymize DICOM images.
(WARNING -- This page is incomplete as of Feb 2019 due to issues with nesting JSON strings within JSON strings in the calling protocols. The final call instructions do not work.)
This page describes interacting with the ChRIS Ultron Back End (CUBE) using pfurl
and running a DS type plugin called pl-pfdicom_tagsub
. This plugin wraps around an underlying pfdicom_tagSub
python module and provides the ability to edit, or sub, DICOM meta data values.
The set of operations is simply to call CUBE with the correct plugin instance and appropriate arguments for the plugin.See
Please follow the steps here to create a new source, or FS, feed containing data to anonymize.
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_tagsub
. For example, let's say that this is located at
http://10.17.24.163:8000/api/v1/plugins/9/
we can call
export P=9
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/9/",
"items": [
{
"data": [
{ "name": "name", "value": "pfdicom_tagsub" },
{ "name": "dock_image", "value": "fnndsc/pl-pfdicom_tagsub" },
{ "name": "type", "value": "ds" },
{ "name": "authors", "value": "FNNDSC ([email protected])" },
{ "name": "title", "value": "Edits various specified DICOM tags" },
{ "name": "category", "value": "DICOM" },
{
"name": "description",
"value": "This plugin wraps around pfdicom_tagSub and is used to edit the contents of user-specified DICOM tags."
},
{
"name": "documentation",
"value": "https://github.com/FNNDSC/pl-pfdicom_tagSub"
},
{ "name": "license", "value": "Opensource (MIT)" },
{ "name": "version", "value": "1.0.2" },
{ "name": "execshell", "value": "python3" },
{ "name": "selfpath", "value": "/usr/src/dcm_tagSub" },
{ "name": "selfexec", "value": "dcm_tagSub.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/9/",
"links": [
{
"rel": "parameters",
"href": "http://10.72.76.155:8000/api/v1/plugins/9/parameters/"
},
{
"rel": "instances",
"href": "http://10.72.76.155:8000/api/v1/plugins/9/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/9/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/62/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"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/63/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"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": "JSON formatted file containing tags to sub" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/64/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"data": [
{ "name": "name", "value": "tagStruct" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "-T" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "JSON formatted tag sub struct" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/65/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"data": [
{ "name": "name", "value": "outputFileStem" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "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/66/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"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/67/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"data": [
{ "name": "name", "value": "threads" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "0" },
{ "name": "flag", "value": "--threads" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "number of threads for innermost loop processing" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/68/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"data": [
{ "name": "name", "value": "outputLeafDir" },
{ "name": "type", "value": "string" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "" },
{ "name": "flag", "value": "--outputLeafDir" },
{ "name": "action", "value": "store" },
{ "name": "help", "value": "formatting spec for output leaf directory" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/69/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"data": [
{ "name": "name", "value": "man" },
{ "name": "type", "value": "boolean" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "False" },
{ "name": "flag", "value": "-x" },
{ "name": "action", "value": "store_true" },
{ "name": "help", "value": "man" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/70/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
},
{
"data": [
{ "name": "name", "value": "synopsis" },
{ "name": "type", "value": "boolean" },
{ "name": "optional", "value": true },
{ "name": "default", "value": "False" },
{ "name": "flag", "value": "-y" },
{ "name": "action", "value": "store_true" },
{ "name": "help", "value": "short synopsis" }
],
"href": "http://10.72.76.155:8000/api/v1/plugins/parameters/71/",
"links": [{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" }]
}
],
"links": [
{ "rel": "plugin", "href": "http://10.72.76.155:8000/api/v1/plugins/9/" },
{
"rel": "next",
"href": "http://10.72.76.155:8000/api/v1/plugins/9/parameters/?limit=10&offset=10"
}
]
}
}
DO NOT USE! This call is under construction!
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"}
]
}'
DO NOT USE! This call fails via pfurl
due to the nested JSON string that needs to be passed.
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":"tagStruct",
"value":{"PatientName": "anonymized-again"}},
{"name":"previous_id",
"value":"1"}
]
}' \
--quiet --jsonpprintindent 4
{
"stdout": {
"collection": {
"items": [
{
"href": "http://10.17.24.163:8000/api/v1/plugins/instances/2/",
"links": [
{
"href": "http://10.17.24.163:8000/api/v1/plugins/instances/1/",
"rel": "previous"
},
{ "href": "http://10.17.24.163:8000/api/v1/plugins/5/", "rel": "plugin" },
{
"href": "http://10.17.24.163:8000/api/v1/plugins/string-parameter/2/",
"rel": "string_param"
},
{
"href": "http://10.17.24.163:8000/api/v1/plugins/string-parameter/3/",
"rel": "string_param"
},
{
"href": "http://10.17.24.163:8000/api/v1/plugins/int-parameter/1/",
"rel": "int_param"
}
],
"data": [
{ "value": 2, "name": "id" },
{ "value": 1, "name": "previous_id" },
{ "value": "med2img", "name": "plugin_name" },
{ "value": "2017-09-21T21:47:21.718499Z", "name": "start_date" },
{ "value": "2017-09-21T21:47:21.718551Z", "name": "end_date" },
{ "value": "started", "name": "status" },
{ "value": "chris", "name": "owner" }
]
}
],
"href": "http://10.17.24.163:8000/api/v1/plugins/5/instances/",
"links": [ ],
"version": "1.0"
}
},
"msg": "push OK."
}