# HG changeset patch # User amazy # Date 1492877769 -7200 # Node ID e83da2f99e45addbfde4241978ade82da7ccd01c # Parent b56083f38695575f89191a1298a33e86384df05d added 'troubleshooting C-Find queries' in the worklist section diff -r b56083f38695 -r e83da2f99e45 Sphinx/source/plugins/worklists-plugin.rst --- a/Sphinx/source/plugins/worklists-plugin.rst Mon Mar 27 21:14:18 2017 +0200 +++ b/Sphinx/source/plugins/worklists-plugin.rst Sat Apr 22 18:16:09 2017 +0200 @@ -15,7 +15,7 @@ `__. The worklists to be served must be put inside the folder of interest -by an external application or script. ``dump2dcm`` might be a very +by an external application or script (note: files must have a ``.wl`` extension). ``dump2dcm`` might be a very `useful companion tool `__ to generate such worklist files. Whenever a C-Find SCP request is issued to Orthanc, @@ -77,7 +77,7 @@ from the Orthanc source code and copy them in a dedicated folder. - Generate the :ref:`default configuration of Orthanc `. - Enable the ModalityWorklist plugin in your configuration file by adding this section:: - + "Worklists" : { "Enable": true, "Database": "WorklistsDatabase" // Path to the folder with the worklist files @@ -85,7 +85,7 @@ - Add the plugin to the list of plugins to load (this is an example for Microsoft Windows):: - + "Plugins" : [ "OsimisWebViewer.dll", "ModalityWorklists.dll" // On GNU/Linux, use libModalityWorklists.so @@ -97,17 +97,17 @@ ``findscu`` and Orthanc runs on the same computer (i.e. on the ``127.0.0.1`` localhost), declare the ``FINDSCU`` AET to the list of know modalities:: - + "DicomModalities" : { "horos" : [ "HOROS", "192.168.0.8", 11112 ], "findscu" : [ "FINDSCU", "127.0.0.1", 1234 ] }, .. highlight:: bash - + - Launch Orthanc as usual, making sure to give the proper configuration file (e.g. for Microsoft Windows):: - + Orthanc.exe config.json - In another command-line prompt, launch a ``findscu`` request to ask @@ -127,7 +127,7 @@ ----------------------------- .. highlight:: bash - + - Start with an existing worklist file, some samples of which can be found in the `Orthanc source distribution `__ @@ -136,7 +136,7 @@ using ``dcmdump``:: dcmdump.exe wklist1.wl > sampleWorklist.txt - + - The content of the just-generated ``sampleWorklist.txt`` file should look similar to this text file:: @@ -167,14 +167,84 @@ (0032,1060) LO [EXAM6] # 6, 1 RequestedProcedureDescription (0040,1001) SH [RP454G234] # 10, 1 RequestedProcedureID (0040,1003) SH [LOW] # 4, 1 RequestedProcedurePriority - + - Open ``sampleWorklist.txt`` file in a standard text editor so as to modify, add or remove some DICOM tags depending on your needs. - Generate a new DICOM worklist file from your modified file using ``dump2dcm``:: dump2dcm.exe sampleWorklist.txt newWorklist.wl - + - As a last step, copy that file in the folder where Orthanc searches for its worklist files. Of course, this worklist generation workflow can be automated using any scripting language. + +Troubleshooting C-Find queries +------------------------------ + +When trying to retrieve worklists from a modality, one usually don't get debugging capabilities from the modality itself. +Therefore, it is usually convenient to mimic the modality with ``findscu`` (provided by `DCMTK software +`__). + +- First, you should make sure that you have configured the Worklist plugin correctly and that you have pushed + at least a ``.wl`` file in the worklist database. For this, you should issue this kind of command:: + + findscu -W 127.0.0.1 4242 -k 0008,0050="*" + + This is the most generic C-Find request and should return all AccessionNumber of all the worklists in your database. + + Note: you should make sure you have added a ``findscu`` DICOM modality in your configuration file. + + ``findscu`` should output something like this:: + + W: --------------------------- + W: Find Response: 1 (Pending) + W: + W: # Dicom-Data-Set + W: # Used TransferSyntax: Little Endian Explicit + W: (0008,0005) CS [ISO_IR 100] # 10, 1 SpecificCharacterSet + W: (0008,0050) SH [**********] # 10, 1 AccessionNumber + W: + + If you don't get any output, you may add ``-v -d`` options to the ``findscu`` command line to get additional details. + +- Everytime it receives a C-Find request, Orthanc displays the query parameters in its :ref:`logs `. + With the previous C-Find command, you should expect this kind of output:: + + I0422 17:16:03.512449 CommandDispatcher.cpp:490] Association Received from AET FINDSCU on IP 127.0.0.1 + I0422 17:16:03.514433 CommandDispatcher.cpp:688] Association Acknowledged (Max Send PDV: 16372) + I0422 17:16:03.532062 main.cpp:118] No limit on the number of C-FIND results at the Patient, Study and Series levels + I0422 17:16:03.535986 main.cpp:128] No limit on the number of C-FIND results at the Instance level + I0422 17:16:03.536968 PluginsManager.cpp:171] Received worklist query from remote modality FINDSCU: + { + "0008,0050" : "*" + } + I0422 17:16:03.559539 CommandDispatcher.cpp:891] DUL Peer Requested Release + I0422 17:16:03.560520 CommandDispatcher.cpp:898] Association Release + +- Now you may try to issue a C-Find request from your modality and check Orthanc logs. You should then have a better understanding of the query + content and eventually understand why it does not match your worklists. You should also be able re-issue ``findscu`` requests with additional arguments to mimic the requests issued by your modality. + +Common problems +--------------- + +- Some modalities do not include their AET name in ``ScheduledStationAETitle``. Therefore, they do receive worklists that do not concern them. + This may be handled by the ``FilterIssuerAet`` configuration option. + +- Orthanc 1.2.0 does not handle the ``Generic group length`` tags. + You might need to include this kind of :ref:`lua script ` to remove these tags from the queries:: + + function IncomingFindRequestFilter(query, origin) + + -- First display the content of the C-Find query + PrintRecursive(query) + PrintRecursive(origin) + + -- Remove the "Generic group length" tags from the query + local v = query + v['0008,0000'] = nil + v['0010,0000'] = nil + v['0020,0000'] = nil + return v + + end diff -r b56083f38695 -r e83da2f99e45 Sphinx/source/users/lua.rst --- a/Sphinx/source/users/lua.rst Mon Mar 27 21:14:18 2017 +0200 +++ b/Sphinx/source/users/lua.rst Sat Apr 22 18:16:09 2017 +0200 @@ -411,6 +411,7 @@ to react to other events than the reception of a single instance with ``OnStoredInstance()``. +.. _lua-fix-cfind: Fixing C-Find requests ----------------------