The recipe headers page taught you how to write a recipe that has one or more commands to parse a dicom image header. For example, we might have defined a custom function per the example here to replace patient info with a result from our custom function:
%header
REPLACE fields:patient_info func:generate_uid
As of version 0.2.3 of deid, we have packaged functions along with deid that you can use without needing to write your own! Current functions are provided for:
- generating unique identifiers
- jittering
- let us know if you want to contribute or request a new function!
The current offerings include the following:
Name | Description | Extra Params |
---|---|---|
simple_uuid |
Modify with a simple uuid.uuid4() string |
None |
dicom_uuid |
A more formal dicom uid that requires an org root | org_root |
suffix_uuid |
Make the value the field name with a uuid.uuid4() suffix. |
None |
jitter |
The same as JITTER (grandfathered in) | days |
A Simple UUID
For a simple example, let’s replace the recipe above with the deid provided “simple_uuid” function,
which is simply going to replace the field of our choice with a uuid.uuid4()
string in Python.
That would look like this:
%header
REPLACE fields:patient_info deid_func:simple_uuid
The only change is that we replaced func
with deid_func
. Deid will see this function
is provided in its library, and grab it for use.
A Pydicom UUID
Pydicom provides a function to generate a UUID and for most this is likely a good approach to take. The most basic usage (for one run) is to generate a random valid unique identifier:
%header
REPLACE ReferringPhysicianName deid_func:pydicom_uuid
The default uses stable_remapping=true
, which means we use the original UUID as entropy
to be able to consistently return the same value between runs. You can disable it, however
we do not recommended it (but maybe could be appropriate for your use case).
You can also optionally define a custom prefix. Note that it needs to match the
regular expression ^(0|[1-9][0-9]*)(\\.(0|[1-9][0-9]*))*\\.$
which (in spoken terms)
is a number followed by a period, another number, and ending also in a period (e.g, 1.55.
).
%header
REPLACE ReferringPhysicianName deid_func:pydicom_uuid prefix=1.55.
A Dicom UUID
A more “formal” uuid function was added that requires an organization root. Your
organization should have it’s own - for example the PYMEDPHYS_ROOT_UID
is
“1.2.826.0.1.3680043.10.188” so we might do:
%header
REPLACE fields:patient_info deid_func:dicom_uuid org_root=1.2.826.0.1.3680043.10.188
Notice how we’ve provided an extra argument, org_root
to be parsed. If you don’t
provide one an anonymous-organization
will be used, which isn’t technically an organization root.
A UUID Suffix
If you simply want to take the current field and add a suffix to it as the value:
%header
REPLACE fields:patient_info deid_func:suffix_uuid
This would make a final value that looks something like patient_into-5897bd32-b4f3-4bda-9dc5-2d29e5688ea1
Jitter
Jitter is intended for datetime fields, and technically you can just use the JITTER
function provided
natively in the recipe. We decided to include it here to add further customization. For example, you can provide
variables for both days and years for a more fine-tuned jitter. We also wanted to add it here because
technically it is a custom action. A jitter (as a custom deid function) might look like this:
%header
REPLACE fields:AcquisitionDate deid_func:jitter days=1
or some number of years and days:
%header
REPLACE fields:AcquisitionDate deid_func:jitter days=1 years=1
And that’s it! If you want to request or contribute a custom (deid provided) function, please open an issue.