Mercurial > hg > orthanc
annotate OrthancServer/Resources/Samples/Lua/ClassifyUsingAet.lua @ 4248:38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 13 Oct 2020 15:36:48 +0200 |
parents | |
children | 485f9be9ba92 |
rev | line source |
---|---|
4248
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 -- Write the received DICOM instances to an external directory, and |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 -- group the patients by the source AET that has sent the DICOM |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 -- files. This sample is similar to "WriteToDisk.lua". |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 TARGET = '/tmp/lua' |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 function ToAscii(s) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 -- http://www.lua.org/manual/5.1/manual.html#pdf-string.gsub |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 -- https://groups.google.com/d/msg/orthanc-users/qMLgkEmwwPI/6jRpCrlgBwAJ |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 return s:gsub('[^a-zA-Z0-9-/-: ]', '_') |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 end |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 function GetFromTable(t, key, defaultValue) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 local result = t[key] |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 if result == nil or result == '' then |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 return defaultValue |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 else |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 return result |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 end |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
23 end |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 function OnStoredInstance(instanceId, tags, metadata, origin) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 local dicom = RestApiGet('/instances/' .. instanceId .. '/file') |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 local tags = ParseJson(RestApiGet('/instances/' .. instanceId .. '/tags?simplify')) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 local metadata = ParseJson(RestApiGet('/instances/' .. instanceId .. '/metadata?expand')) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 local path = ToAscii( |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 TARGET .. '/' .. |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 GetFromTable(metadata, 'RemoteAET', 'None') .. '/'.. |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 GetFromTable(tags, 'PatientID', '') .. ' - ' .. GetFromTable(tags, 'PatientName', '') .. '/' .. |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 GetFromTable(tags, 'StudyDate', '') .. ' - ' .. GetFromTable(tags, 'StudyDescription', '') .. '/' .. |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 GetFromTable(tags, 'SeriesDescription', '')) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 -- Create the subdirectory (CAUTION: For Linux demo only, this is insecure!) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 -- http://stackoverflow.com/a/16029744/881731 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 os.execute('mkdir -p "' .. path .. '"') |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 -- Write to the file |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 local target = assert(io.open(path .. '/' .. GetFromTable(tags, 'SOPInstanceUID', 'none') .. '.dcm', 'wb')) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 target:write(dicom) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 target:close() |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 -- Optional step: Remove the source file |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 RestApiDelete('/instances/' .. instanceId) |
38b24aa98ed3
new lua sample: ClassifyUsingAet.lua
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 end |