1559
|
1 -- Sample Lua script that demonstrates how to extract DICOM tags
|
|
2 -- related to dose reports. In this example, the value of the DLP
|
|
3 -- (Dose Length Product), the value of the mean CTDI volume (Computed
|
|
4 -- Tomography Dose Index), and the number of "IntervalsRejected" are
|
|
5 -- extracted and printed. Furthermore, these values are saved as
|
|
6 -- metadata that is attached to their parent DICOM instance for
|
|
7 -- further processing by external software.
|
|
8
|
|
9
|
|
10 function ExploreContentSequence(instanceId, tags)
|
|
11 if tags then
|
|
12 for key, value in pairs(tags) do
|
|
13 -- Recursive exploration
|
|
14 ExploreContentSequence(instanceId, value['ContentSequence'])
|
|
15
|
|
16 local concept = value['ConceptNameCodeSequence']
|
|
17 local measure = value['MeasuredValueSequence']
|
|
18 if concept and measure then
|
|
19
|
|
20 local value = measure[1]['NumericValue']
|
|
21 local code = concept[1]['CodeValue']
|
|
22
|
|
23 if type(value) == 'string' and type(code) == 'string' then
|
|
24 -- If the field contains the DLP, stores it as a metadata.
|
|
25 -- "DLP" is associated with CodeValue 113838.
|
|
26 -- ftp://medical.nema.org/medical/dicom/final/sup127_ft.pdf
|
|
27 if code == '113838' then
|
|
28 print('DLP = ' .. value)
|
|
29 RestApiPut('/instances/' .. instanceId .. '/metadata/2001', value)
|
|
30 end
|
|
31
|
|
32 -- Extract the mean CTDI volume
|
|
33 if code == '113830' then
|
|
34 print('CTDI = ' .. value)
|
|
35 RestApiPut('/instances/' .. instanceId .. '/metadata/2002', value)
|
|
36 end
|
|
37
|
|
38 -- Other values can be extracted here
|
|
39 end
|
|
40 end
|
|
41 end
|
|
42 end
|
|
43 end
|
|
44
|
|
45
|
|
46 function StoreTagToMetadata(instanceId, tags, name, metadata)
|
|
47 if tags then
|
|
48 for key, value in pairs(tags) do
|
|
49 if type(value) ~= 'string' then
|
|
50 -- Recursive exploration
|
|
51 StoreTagToMetadata(instanceId, value, name, metadata)
|
|
52 elseif key == name then
|
|
53 print(name .. ' = ' .. value)
|
|
54 if metadata then
|
|
55 RestApiPut('/instances/' .. instanceId .. '/metadata/' .. metadata, value)
|
|
56 end
|
|
57 end
|
|
58 end
|
|
59 end
|
|
60 end
|
|
61
|
|
62
|
|
63 function OnStoredInstance(instanceId, tags)
|
|
64 StoreTagToMetadata(instanceId, tags, 'IntervalsRejected', 2000)
|
|
65 ExploreContentSequence(instanceId, tags['ContentSequence'])
|
|
66 end
|