Modality Worklists issue

Hello,

I am using Orthanc on linux and I would like to use the worklist plugin. After following (Sample Modality Worklists plugin — Orthanc Book documentation) and doing some research online, I am experiencing an issue with the following command.

findscu -v -P -k QueryRetrieveLevel=PATIENT -aet MY_SCU -aec ORTHANC remote_ip 4242 /path/to/worklist.dcm

Error:   $dcmtk: findscu v3.6.2 2017-07-14 $
         findscu: DICOM query (C-FIND) SCU
         cannot access file: /path/to/worklist.dcm

The file worklist.dcm is on a remote server, and its content is as follows: -
(0010,0010) PN [PatientName]
(0010,0020) LO [PatientID]
(0032,1060) LO [ScheduledProcedureStepID]

If anyone can tell me what I am doing wrong or anything else I have to do, that would be great.

Thanks,
Avijit

Could you share your configuration file?

Hi bcrickboom,

Please check the configuration below: -

{
  /**
   * General configuration of Orthanc
   **/

  // The logical name of this instance of Orthanc. This one is
  // displayed in Orthanc Explorer and at the URI "/system".
  "Name" : "Orthanc",

  // Path to the directory that holds the heavyweight files (i.e. the
  // raw DICOM instances). Backslashes must be either escaped by
  // doubling them, or replaced by forward slashes "/".
  "StorageDirectory" : "/var/lib/orthanc/db-v6",

  // Path to the directory that holds the SQLite index (if unset, the
  // value of StorageDirectory is used). This index could be stored on
  // a RAM-drive or a SSD device for performance reasons.
  "IndexDirectory" : "/var/lib/orthanc/db-v6",

  // Enable the transparent compression of the DICOM instances
  "StorageCompression" : false,

  // Maximum size of the storage in MB (a value of "0" indicates no
  // limit on the storage size)
  "MaximumStorageSize" : 0,

  // Maximum number of patients that can be stored at a given time
  // in the storage (a value of "0" indicates no limit on the number
  // of patients)
  "MaximumPatientCount" : 0,
  
  // List of paths to the custom Lua scripts that are to be loaded
  // into this instance of Orthanc
  "LuaScripts" : [
  ],

  // List of paths to the plugins that are to be loaded into this
  // instance of Orthanc (e.g. "./libPluginTest.so" for Linux, or
  // "./PluginTest.dll" for Windows). These paths can refer to
  // folders, in which case they will be scanned non-recursively to
  // find shared libraries. Backslashes must be either escaped by
  // doubling them, or replaced by forward slashes "/".
  "Plugins" : [
    "/usr/share/orthanc/plugins/"
  ],



  /**
   * Configuration of the HTTP server
   **/

  // Enable the HTTP server. If this parameter is set to "false",
  // Orthanc acts as a pure DICOM server. The REST API and Orthanc
  // Explorer will not be available.
  "HttpServerEnabled" : true,

  // HTTP port for the REST services and for the GUI
  "HttpPort" : 8042,

  // When the following option is "true", if an error is encountered
  // while calling the REST API, a JSON message describing the error
  // is put in the HTTP answer. This feature can be disabled if the
  // HTTP client does not properly handles such answers.
  "HttpDescribeErrors" : true,

  // Enable HTTP compression to improve network bandwidth utilization,
  // at the expense of more computations on the server. Orthanc
  // supports the "gzip" and "deflate" HTTP encodings.
  "HttpCompressionEnabled" : true,



  /**
   * Configuration of the DICOM server
   **/

  "Worklists" : {
    "Enable": true,
    "Database": "/var/tmp/worklistdb",  // Path to the folder with the worklist files

    "FilterIssuerAet": false, // Some modalities do not specify 'ScheduledStationAETitle (0040,0001)'
                              // in the C-Find and may receive worklists not related to them.  This option
                              // adds an extra filtering based on the AET of the modality issuing the C-Find.
    "LimitAnswers": 0  // Maximum number of answers to be returned (new in release 1.7.3)
  },
  
  
  // Enable the DICOM server. If this parameter is set to "false",
  // Orthanc acts as a pure REST server. It will not be possible to
  // receive files or to do query/retrieve through the DICOM protocol.
  "DicomServerEnabled" : true,

  // The DICOM Application Entity Title
  "DicomAet" : "ORTHANC",

  // Check whether the called AET corresponds to the AET of Orthanc
  // during an incoming DICOM SCU request
  "DicomCheckCalledAet" : true,

  // The DICOM port
  "DicomPort" : 4242,

  // The default encoding that is assumed for DICOM files without
  // "SpecificCharacterSet" DICOM tag, and that is used when answering
  // C-Find requests (including worklists). The allowed values are
  // "Ascii", "Utf8", "Latin1", "Latin2", "Latin3", "Latin4",
  // "Latin5", "Cyrillic", "Windows1251", "Arabic", "Greek", "Hebrew",
  // "Thai", "Japanese", and "Chinese".
  "DefaultEncoding" : "Latin1",

  // The transfer syntaxes that are accepted by Orthanc C-Store SCP
  "DeflatedTransferSyntaxAccepted"     : true,
  "JpegTransferSyntaxAccepted"         : true,
  "Jpeg2000TransferSyntaxAccepted"     : true,
  "JpegLosslessTransferSyntaxAccepted" : true,
  "JpipTransferSyntaxAccepted"         : true,
  "Mpeg2TransferSyntaxAccepted"        : true,
  "RleTransferSyntaxAccepted"          : true,

  // Whether Orthanc accepts to act as C-Store SCP for unknown storage
  // SOP classes (aka. "promiscuous mode")
  "UnknownSopClassAccepted"            : false,

  // Set the timeout (in seconds) after which the DICOM associations
  // are closed by the Orthanc SCP (server) if no further DIMSE
  // command is received from the SCU (client).
  "DicomScpTimeout" : 30,



  /**
   * Security-related options for the HTTP server
   **/

  // Whether remote hosts can connect to the HTTP server
  "RemoteAccessAllowed" : true,

  // Whether or not SSL is enabled
  "SslEnabled" : false,

  // Path to the SSL certificate in the PEM format (meaningful only if
  // SSL is enabled)
  "SslCertificate" : "/etc/certificate.crt",

  // Whether or not the password protection is enabled
  "AuthenticationEnabled" : true,

  // The list of the registered users. Because Orthanc uses HTTP
  // Basic Authentication, the passwords are stored as plain text.
  "RegisteredUsers" : {
     "test" : "test"
  },



  /**
   * Network topology
   **/

  // The list of the known DICOM modalities
  "DicomModalities" : {
    /**
     * Uncommenting the following line would enable Orthanc to
     * connect to an instance of the "storescp" open-source DICOM
     * store (shipped in the DCMTK distribution) started by the
     * command line "storescp 2000".
     **/
    /**
     * A fourth parameter is available to enable patches for
     * specific PACS manufacturers. The allowed values are currently:
     * - "Generic" (default value),
     * - "GenericNoWildcardInDates" (to replace "*" by "" in date fields 
     *   in outgoing C-Find requests originating from Orthanc)
     * - "GenericNoUniversalWildcard" (to replace "*" by "" in all fields
     *   in outgoing C-Find SCU requests originating from Orthanc)
     * - "StoreScp" (storescp tool from DCMTK),
     * - "ClearCanvas", "Dcm4Chee" and "Vitrea".
     * This parameter is case-sensitive.
     **/
    // "clearcanvas" : [ "CLEARCANVAS", "192.168.1.1", 104, "ClearCanvas" ]
  },

  // Whether the Orthanc SCP allows incoming C-Echo requests, even
  // from SCU modalities it does not know about (i.e. that are not
  // listed in the "DicomModalities" option above). Orthanc 1.3.0
  // is the only version to behave as if this argument was set to "false".
  "DicomAlwaysAllowEcho" : true,

  // Whether the Orthanc SCP allows incoming C-Store requests, even
  // from SCU modalities it does not know about (i.e. that are not
  // listed in the "DicomModalities" option above)
  "DicomAlwaysAllowStore" : true,

  // Whether Orthanc checks the IP/hostname address of the remote
  // modality initiating a DICOM connection (as listed in the
  // "DicomModalities" option above). If this option is set to
  // "false", Orthanc only checks the AET of the remote modality.
  "DicomCheckModalityHost" : false,

  // The timeout (in seconds) after which the DICOM associations are
  // considered as closed by the Orthanc SCU (client) if the remote
  // DICOM SCP (server) does not answer.
  "DicomScuTimeout" : 30,

  // The list of the known Orthanc peers
  "OrthancPeers" : {
    /**
     * Each line gives the base URL of an Orthanc peer, possibly
     * followed by the username/password pair (if the password
     * protection is enabled on the peer).
     **/
    // "peer"  : [ "http://127.0.0.1:8043/", "alice", "alicePassword" ]
    // "peer2" : [ "http://127.0.0.1:8044/" ]

    /**
     * This is another, more advanced format to define Orthanc
     * peers. It notably allows to specify a HTTPS client certificate
     * in the PEM format (as in the "--cert" option of curl), or to
     * enable PKCS#11 authentication for smart cards.
     **/
    // "peer" : {
    //   "Url" : "http://127.0.0.1:8043/",
    //   "Username" : "alice",
    //   "Password" : "alicePassword",
    //   "CertificateFile" : "client.crt",
    //   "CertificateKeyFile" : "client.key",
    //   "CertificateKeyPassword" : "certpass",
    //   "Pkcs11" : false
    // }
  },

  // Parameters of the HTTP proxy to be used by Orthanc. If set to the
  // empty string, no HTTP proxy is used. For instance:
  //   "HttpProxy" : "192.168.0.1:3128"
  //   "HttpProxy" : "proxyUser:proxyPassword@192.168.0.1:3128"
  "HttpProxy" : "",

  // Set the timeout for HTTP requests issued by Orthanc (in seconds).
  "HttpTimeout" : 10,

  // Enable the verification of the peers during HTTPS requests. This
  // option must be set to "false" if using self-signed certificates.
  // Pay attention that setting this option to "false" results in
  // security risks!
  // Reference: http://curl.haxx.se/docs/sslcerts.html
  "HttpsVerifyPeers" : true,

  // Path to the CA (certification authority) certificates to validate
  // peers in HTTPS requests. From curl documentation ("--cacert"
  // option): "Tells curl to use the specified certificate file to
  // verify the peers. The file may contain multiple CA
  // certificates. The certificate(s) must be in PEM format."
  "HttpsCACertificates" : "",



  /**
   * Advanced options
   **/

  // Dictionary of symbolic names for the user-defined metadata. Each
  // entry must map an unique string to an unique number between 1024
  // and 65535. Reserved values:
  //  - The Orthanc whole-slide imaging plugin uses metadata 4200
  "UserMetadata" : {
    // "Sample" : 1024
  },

  // Dictionary of symbolic names for the user-defined types of
  // attached files. Each entry must map an unique string to an unique
  // number between 1024 and 65535. Optionally, a second argument can
  // provided to specify a MIME content type for the attachment.
  "UserContentType" : {
    // "sample" : 1024
    // "sample2" : [ 1025, "application/pdf" ]
  },

  // Number of seconds without receiving any instance before a
  // patient, a study or a series is considered as stable.
  "StableAge" : 60,

  // By default, Orthanc compares AET (Application Entity Titles) in a
  // case-insensitive way. Setting this option to "true" will enable
  // case-sensitive matching.
  "StrictAetComparison" : false,

  // When the following option is "true", the MD5 of the DICOM files
  // will be computed and stored in the Orthanc database. This
  // information can be used to detect disk corruption, at the price
  // of a small performance overhead.
  "StoreMD5ForAttachments" : true,

  // The maximum number of results for a single C-FIND request at the
  // Patient, Study or Series level. Setting this option to "0" means
  // no limit.
  "LimitFindResults" : 0,

  // The maximum number of results for a single C-FIND request at the
  // Instance level. Setting this option to "0" means no limit.
  "LimitFindInstances" : 0,

  // The maximum number of active jobs in the Orthanc scheduler. When
  // this limit is reached, the addition of new jobs is blocked until
  // some job finishes.
  "LimitJobs" : 10,

  // If this option is set to "false", Orthanc will not log the
  // resources that are exported to other DICOM modalities of Orthanc
  // peers in the URI "/exports". This is useful to prevent the index
  // to grow indefinitely in auto-routing tasks.
  "LogExportedResources" : true,

  // Enable or disable HTTP Keep-Alive (deprecated). Set this option
  // to "true" only in the case of high HTTP loads.
  "KeepAlive" : false,

  // If this option is set to "false", Orthanc will run in index-only
  // mode. The DICOM files will not be stored on the drive. Note that
  // this option might prevent the upgrade to newer versions of Orthanc.
  "StoreDicom" : true,

  // DICOM associations are kept open as long as new DICOM commands
  // are issued. This option sets the number of seconds of inactivity
  // to wait before automatically closing a DICOM association. If set
  // to 0, the connection is closed immediately.
  "DicomAssociationCloseDelay" : 5,

  // Maximum number of query/retrieve DICOM requests that are
  // maintained by Orthanc. The least recently used requests get
  // deleted as new requests are issued.
  "QueryRetrieveSize" : 10,

  // When handling a C-Find SCP request, setting this flag to "true"
  // will enable case-sensitive match for PN value representation
  // (such as PatientName). By default, the search is
  // case-insensitive, which does not follow the DICOM standard.
  "CaseSensitivePN" : false,

  // Configure PKCS#11 to use hardware security modules (HSM) and
  // smart cards when carrying on HTTPS client authentication.
  /**
     "Pkcs11" : {
       "Module" : "/usr/local/lib/libbeidpkcs11.so",
       "Module" : "C:/Windows/System32/beidpkcs11.dll",
       "Pin" : "1234",
       "Verbose" : true
     }
   **/
  
  // If set to "true", Orthanc will still handle "SOP Classes in
  // Study" (0008,0062) in C-FIND requests, even if the "SOP Class
  // UID" metadata is not available in the database (which is the case
  // if the DB was previously used by Orthanc <= 1.1.0). This option
  // is turned off by default, as it requires intensive accesses to
  // the hard drive.
  "AllowFindSopClassesInStudy" : false,

  // If set to "false", Orthanc will not load its default dictionary
  // of private tags. This might be necessary if you cannot import a
  // DICOM file encoded using the Implicit VR Endian transfer syntax,
  // and containing private tags: Such an import error might stem from
  // a bad dictionary. You can still list your private tags of
  // interest in the "Dictionary" configuration option below.
  "LoadPrivateDictionary" : true,

  // Locale to be used by Orthanc. Currently, only used if comparing
  // strings in a case-insensitive way. It should be safe to keep this
  // value undefined, which lets Orthanc autodetect the suitable locale.
  // "Locale" : "en_US.UTF-8",

  // Register a new tag in the dictionary of DICOM tags that are known
  // to Orthanc. Each line must contain the tag (formatted as 2
  // hexadecimal numbers), the value representation (2 upcase
  // characters), a nickname for the tag, possibly the minimum
  // multiplicity (> 0 with defaults to 1), possibly the maximum
  // multiplicity (0 means arbitrary multiplicity, defaults to 1), and
  // possibly the Private Creator (for private tags).
  "Dictionary" : {
    // "0014,1020" : [ "DA", "ValidationExpiryDate", 1, 1 ]
    // "00e1,10c2" : [ "UI", "PET-CT Multi Modality Name", 1, 1, "ELSCINT1" ]
    // "7053,1003" : [ "ST", "Original Image Filename", 1, 1, "Philips PET Private Group" ]
    // "2001,5f" : [ "SQ", "StackSequence", 1, 1, "Philips Imaging DD 001" ]
  }
}

Hi bcrickboom,

It seems I am able to connect MWL via Orthanc server now, but unable to fetch information from the worklist file from /var/tmp/worklistdb path which I have downloaded from source distribution of Orthanc into the machine.

My situation has been stuck for days and I would appreciate it if you could help me to resolve it as soon as you can.

Thanks,
Avijit

This error message is not related to Orthanc but to findscu that can not access the file.

Hi Alain,

Thank you for your reply. The issue with the “findscu” command has been resolved, but as I mentioned in my previous message, we are currently facing challenges in retrieving data from the MWL server into the echo machine. The echo machine and MWL server have been connected without any issues. Are there any additional configurations required beyond the instructions provided in this article: - Sample Modality Worklists plugin — Orthanc Book documentation (orthanc-server.com)?

Thanks,

@Avijit I’m currently facing challenges in understanding the challenges you are facing.

I have enabled the ModalityWorklist plugin in the “orthanc.json” configuration file by adding the following section: -

"Worklists" : {
    "Enable": true,
    "Database": "/var/tmp/worklistdb",

Then I downloaded some worklist files from Orthanc source distribution and then transferred them to the directory "/var/tmp/worklistdb".

I have now configured the echo machine with the Application Entity Title (AET), port, and host IP of our Orthanc server.

The echo machine has successfully confirmed the connection with the worklist server; however, it is not displaying patient informations from the worklist files.

What about the orthanc logs in verbose mode ?

Hi Alain,

I apologize for the delay in my response. Please check the logs below: -

W0823 05:06:42.041999 main.cpp:2034] Orthanc version: 1.12.0
W0823 05:06:42.046583 OrthancConfiguration.cpp:57] Reading the configuration from: "/tmp/orthanc.json"
W0823 05:06:42.140451 main.cpp:911] Loading plugin(s) from: /usr/share/orthanc/plugins
W0823 05:06:42.149655 PluginsManager.cpp:261] Registering plugin 'wsi' (version 1.1)
W0823 05:06:42.153299 PluginsManager.cpp:157] The whole-slide imaging plugin will use at most 4 threads to transcode the tiles
W0823 05:06:42.167364 PluginsManager.cpp:261] Registering plugin 'python' (version 4.0)
W0823 05:06:42.168112 PluginsManager.cpp:157] Python plugin is initializing
W0823 05:06:42.168389 PluginsManager.cpp:157] The option "PythonScript" is not provided: Python scripting is disabled
W0823 05:06:42.172946 PluginsManager.cpp:261] Registering plugin 'worklists' (version 1.12.0)
W0823 05:06:42.172980 PluginsManager.cpp:157] Sample worklist plugin is initializing
W0823 05:06:42.173381 PluginsManager.cpp:157] The database of worklists will be read from folder: /var/tmp/worklistdb
W0823 05:06:42.181331 PluginsManager.cpp:261] Registering plugin 'stone-webviewer' (version 2.5)
W0823 05:06:42.232544 PluginsManager.cpp:261] Registering plugin 'gdcm' (version 1.5)
W0823 05:06:42.235099 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.90
W0823 05:06:42.235133 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.91
W0823 05:06:42.235140 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.92
W0823 05:06:42.235146 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.93
W0823 05:06:42.235156 PluginsManager.cpp:157] Throttling GDCM to 4 concurrent thread(s)
W0823 05:06:42.236223 PluginsManager.cpp:157] Version of GDCM: 3.0.10
W0823 05:06:42.283600 PluginsManager.cpp:261] Registering plugin 'osimis-web-viewer' (version 1.4.2.0-9d9eff4)
W0823 05:06:42.287749 PluginsManager.cpp:157] Initializing the Web viewer
W0823 05:06:42.289803 PluginsManager.cpp:157] Using GDCM instead of the DICOM decoder that is built in Orthanc
W0823 05:06:42.298598 PluginsManager.cpp:261] Registering plugin 'web-viewer' (version 2.8)
W0823 05:06:42.301129 PluginsManager.cpp:157] Initializing the Web viewer
W0823 05:06:42.302602 PluginsManager.cpp:157] Web viewer using 2 threads for the decoding of the DICOM images
W0823 05:06:42.302634 PluginsManager.cpp:157] Storing the cache of the Web viewer in folder: /var/lib/orthanc/db/WebViewerCache
W0823 05:06:42.321450 PluginsManager.cpp:157] Web viewer using a cache of 100 MB
W0823 05:06:42.330149 PluginsManager.cpp:261] Registering plugin 'dicom-web' (version 1.13)
W0823 05:06:42.336608 PluginsManager.cpp:157] URI to the DICOMweb REST API: /dicom-web/
W0823 05:06:42.339491 PluginsManager.cpp:157] DICOMWeb PublicRoot: /dicom-web/
W0823 05:06:42.339517 PluginsManager.cpp:157] URI to the WADO-URI API: /wado
W0823 05:06:42.344759 PluginsManager.cpp:261] Registering plugin 'connectivity-checks' (version 1.12.0)
W0823 05:06:42.348924 PluginsManager.cpp:261] Registering plugin 'housekeeper' (version 1.12.0)
W0823 05:06:42.349727 PluginsManager.cpp:157] Housekeeper plugin is initializing
W0823 05:06:42.357468 PluginsManager.cpp:261] Registering plugin 'orthanc-explorer-2' (version 0.9.3)
W0823 05:06:42.360166 PluginsManager.cpp:157] Root URI to the Orthanc-Explorer 2 application: /ui/
W0823 05:06:42.471308 PluginsManager.cpp:261] Registering plugin 'authorization' (version 0.5.2)
W0823 05:06:42.471358 PluginsManager.cpp:157] Initializing the authorization plugin
W0823 05:06:42.473304 PluginsManager.cpp:157] No section "Authorization" in the configuration file, the authorization plugin is disabled
W0823 05:06:42.480052 PluginsManager.cpp:261] Registering plugin 'transfers' (version 1.4)
W0823 05:06:42.492456 PluginsManager.cpp:261] Registering plugin 'delayed-deletion' (version 1.12.0)
W0823 05:06:42.492923 PluginsManager.cpp:157] DelayedDeletion - Path to the storage area: /var/lib/orthanc/db
W0823 05:06:42.492970 PluginsManager.cpp:157] DelayedDeletion - Path to the SQLite database: /var/lib/orthanc/db/pending-deletions.f4907599-0fd7e394-4efe28e9-af897d78-0807e4a4.db
W0823 05:06:42.501069 PluginsManager.cpp:261] Registering plugin 'tcia' (version 1.1)
W0823 05:06:42.511599 PluginsManager.cpp:261] Registering plugin 'volview' (version 1.1)
W0823 05:06:42.517457 PluginsManager.cpp:261] Registering plugin 'serve-folders' (version 1.12.0)
W0823 05:06:42.518030 PluginsManager.cpp:157] ServeFolders: Empty configuration file: No additional folder will be served!
W0823 05:06:42.527392 PluginsManager.cpp:261] Registering plugin 'neuro' (version 1.0)
W0823 05:06:42.527554 main.cpp:911] Loading plugin(s) from: /usr/local/share/orthanc/plugins
E0823 05:06:42.528573 PluginsManager.cpp:234] Inexistent path to plugins: /usr/local/share/orthanc/plugins
W0823 05:06:42.528611 OrthancInitialization.cpp:420] SQLite index directory: "/var/lib/orthanc/db"
W0823 05:06:42.529172 main.cpp:1713] Using a custom storage area from plugins
W0823 05:06:42.535202 HttpClient.cpp:1194] HTTPS will use the CA certificates from this file: /etc/ssl/certs/ca-certificates.crt
W0823 05:06:42.538523 LuaContext.cpp:94] Lua says: Lua toolbox installed
W0823 05:06:42.538771 LuaContext.cpp:94] Lua says: Lua toolbox installed
W0823 05:06:42.539514 ServerContext.cpp:515] Disk compression is disabled
W0823 05:06:42.539540 ServerIndex.cpp:381] No limit on the number of stored patients
W0823 05:06:42.539547 ServerIndex.cpp:401] No limit on the size of the storage area
W0823 05:06:42.539554 ServerIndex.cpp:420] Maximum Storage mode: Recycle
W0823 05:06:42.543836 ServerContext.cpp:244] Reloading the jobs from the last execution of Orthanc
W0823 05:06:42.545479 JobsEngine.cpp:272] The jobs engine has started with 2 threads
W0823 05:06:42.547057 main.cpp:1317] DICOM server listening with AET  on port: 4242
W0823 05:06:42.547095 HttpServer.cpp:2036] HTTP compression is enabled
W0823 05:06:42.547120 main.cpp:1172] Remote LUA script execution is disabled
W0823 05:06:42.547127 main.cpp:1184] REST API can not write to the file system.
W0823 05:06:42.555663 HttpServer.cpp:1794] HTTP server listening on port: 8042 (HTTPS encryption is enabled, remote access is allowed)
W0823 05:06:42.555700 main.cpp:923] Orthanc has started
W0823 05:06:42.557171 PluginsManager.cpp:157] Starting Housekeeper worker thread
W0823 05:06:42.557655 PluginsManager.cpp:157] Housekeeper: everything has been processed already !
W0823 05:06:42.558081 PluginsManager.cpp:157] When using OE2 and the authorization plugin together, you must set 'Authorization.CheckedLevel' to 'studies'.  Unless you are using this orthanc only to generate tokens.
W0823 05:06:42.558694 PluginsManager.cpp:157] DelayedDeletion - Starting the deletion thread
W0823 05:26:05.822640 PluginsManager.cpp:157] DelayedDeletion - Stopping the deletion thread
W0823 05:26:05.847119 main.cpp:985] Orthanc is stopping
W0823 05:26:05.954041 main.cpp:1223]     HTTP server has stopped
W0823 05:26:06.952267 main.cpp:1333]     DICOM server has stopped
W0823 05:26:07.215117 JobsEngine.cpp:313] The jobs engine has stopped
W0823 05:26:07.580439 PluginsManager.cpp:211] Unregistering plugin 'authorization' (version 0.5.2)
W0823 05:26:07.590237 PluginsManager.cpp:211] Unregistering plugin 'connectivity-checks' (version 1.12.0)
W0823 05:26:07.591394 PluginsManager.cpp:211] Unregistering plugin 'delayed-deletion' (version 1.12.0)
W0823 05:26:07.591690 PluginsManager.cpp:211] Unregistering plugin 'dicom-web' (version 1.13)
W0823 05:26:07.591856 PluginsManager.cpp:211] Unregistering plugin 'gdcm' (version 1.5)
W0823 05:26:07.596515 PluginsManager.cpp:211] Unregistering plugin 'housekeeper' (version 1.12.0)
W0823 05:26:07.596549 PluginsManager.cpp:157] Housekeeper plugin is finalizing
W0823 05:26:07.596597 PluginsManager.cpp:211] Unregistering plugin 'neuro' (version 1.0)
W0823 05:26:07.596743 PluginsManager.cpp:211] Unregistering plugin 'orthanc-explorer-2' (version 0.9.3)
W0823 05:26:07.596932 PluginsManager.cpp:211] Unregistering plugin 'osimis-web-viewer' (version 1.4.2.0-9d9eff4)
W0823 05:26:07.596959 PluginsManager.cpp:157] Finalizing the Web viewer
W0823 05:26:07.602170 PluginsManager.cpp:211] Unregistering plugin 'python' (version 4.0)
W0823 05:26:07.602200 PluginsManager.cpp:157] Python plugin is finalizing
W0823 05:26:07.604755 PluginsManager.cpp:211] Unregistering plugin 'serve-folders' (version 1.12.0)
W0823 05:26:07.604824 PluginsManager.cpp:211] Unregistering plugin 'stone-webviewer' (version 2.5)
W0823 05:26:07.604896 PluginsManager.cpp:211] Unregistering plugin 'tcia' (version 1.1)
W0823 05:26:07.604913 PluginsManager.cpp:157] TCIA plugin is finalizing
W0823 05:26:07.604962 PluginsManager.cpp:211] Unregistering plugin 'transfers' (version 1.4)
W0823 05:26:07.604996 PluginsManager.cpp:157] Transfers accelerator plugin is finalizing
W0823 05:26:07.605051 PluginsManager.cpp:211] Unregistering plugin 'volview' (version 1.1)
W0823 05:26:07.605118 PluginsManager.cpp:211] Unregistering plugin 'web-viewer' (version 2.8)
W0823 05:26:07.605150 PluginsManager.cpp:157] Finalizing the Web viewer
W0823 05:26:07.843418 PluginsManager.cpp:211] Unregistering plugin 'worklists' (version 1.12.0)
W0823 05:26:07.843473 PluginsManager.cpp:157] Sample worklist plugin is finalizing
W0823 05:26:07.843516 PluginsManager.cpp:211] Unregistering plugin 'wsi' (version 1.1)
W0823 05:26:07.843613 main.cpp:2122] Orthanc has stopped
Startup command: exec "Orthanc /tmp/orthanc.json"
W0823 05:26:08.568796 main.cpp:2034] Orthanc version: 1.12.0
W0823 05:26:08.569004 OrthancConfiguration.cpp:57] Reading the configuration from: "/tmp/orthanc.json"
W0823 05:26:08.602904 main.cpp:911] Loading plugin(s) from: /usr/share/orthanc/plugins
W0823 05:26:08.603574 PluginsManager.cpp:261] Registering plugin 'wsi' (version 1.1)
W0823 05:26:08.603669 PluginsManager.cpp:157] The whole-slide imaging plugin will use at most 4 threads to transcode the tiles
W0823 05:26:08.605017 PluginsManager.cpp:261] Registering plugin 'python' (version 4.0)
W0823 05:26:08.605055 PluginsManager.cpp:157] Python plugin is initializing
W0823 05:26:08.605308 PluginsManager.cpp:157] The option "PythonScript" is not provided: Python scripting is disabled
W0823 05:26:08.605574 PluginsManager.cpp:261] Registering plugin 'worklists' (version 1.12.0)
W0823 05:26:08.605605 PluginsManager.cpp:157] Sample worklist plugin is initializing
W0823 05:26:08.606004 PluginsManager.cpp:157] The database of worklists will be read from folder: /var/tmp/worklistdb
W0823 05:26:08.606401 PluginsManager.cpp:261] Registering plugin 'stone-webviewer' (version 2.5)
W0823 05:26:08.617796 PluginsManager.cpp:261] Registering plugin 'gdcm' (version 1.5)
W0823 05:26:08.618266 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.90
W0823 05:26:08.618295 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.91
W0823 05:26:08.618302 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.92
W0823 05:26:08.618309 PluginsManager.cpp:157] Orthanc will use GDCM to decode transfer syntax: 1.2.840.10008.1.2.4.93
W0823 05:26:08.618318 PluginsManager.cpp:157] Throttling GDCM to 4 concurrent thread(s)
W0823 05:26:08.618333 PluginsManager.cpp:157] Version of GDCM: 3.0.10
W0823 05:26:08.631934 PluginsManager.cpp:261] Registering plugin 'osimis-web-viewer' (version 1.4.2.0-9d9eff4)
W0823 05:26:08.631988 PluginsManager.cpp:157] Initializing the Web viewer
W0823 05:26:08.632353 PluginsManager.cpp:157] Using GDCM instead of the DICOM decoder that is built in Orthanc
W0823 05:26:08.632867 PluginsManager.cpp:261] Registering plugin 'web-viewer' (version 2.8)
W0823 05:26:08.632912 PluginsManager.cpp:157] Initializing the Web viewer
W0823 05:26:08.633162 PluginsManager.cpp:157] Web viewer using 2 threads for the decoding of the DICOM images
W0823 05:26:08.633185 PluginsManager.cpp:157] Storing the cache of the Web viewer in folder: /var/lib/orthanc/db/WebViewerCache
W0823 05:26:08.634170 PluginsManager.cpp:157] Web viewer using a cache of 100 MB
W0823 05:26:08.634677 PluginsManager.cpp:261] Registering plugin 'dicom-web' (version 1.13)
W0823 05:26:08.635191 PluginsManager.cpp:157] URI to the DICOMweb REST API: /dicom-web/
W0823 05:26:08.635471 PluginsManager.cpp:157] DICOMWeb PublicRoot: /dicom-web/
W0823 05:26:08.635493 PluginsManager.cpp:157] URI to the WADO-URI API: /wado
W0823 05:26:08.635832 PluginsManager.cpp:261] Registering plugin 'connectivity-checks' (version 1.12.0)
W0823 05:26:08.636088 PluginsManager.cpp:261] Registering plugin 'housekeeper' (version 1.12.0)
W0823 05:26:08.636116 PluginsManager.cpp:157] Housekeeper plugin is initializing
W0823 05:26:08.636945 PluginsManager.cpp:261] Registering plugin 'orthanc-explorer-2' (version 0.9.3)
W0823 05:26:08.637370 PluginsManager.cpp:157] Root URI to the Orthanc-Explorer 2 application: /ui/
W0823 05:26:08.648014 PluginsManager.cpp:261] Registering plugin 'authorization' (version 0.5.2)
W0823 05:26:08.648056 PluginsManager.cpp:157] Initializing the authorization plugin
W0823 05:26:08.648611 PluginsManager.cpp:157] No section "Authorization" in the configuration file, the authorization plugin is disabled
W0823 05:26:08.649078 PluginsManager.cpp:261] Registering plugin 'transfers' (version 1.4)
W0823 05:26:08.649821 PluginsManager.cpp:261] Registering plugin 'delayed-deletion' (version 1.12.0)
W0823 05:26:08.650270 PluginsManager.cpp:157] DelayedDeletion - Path to the storage area: /var/lib/orthanc/db
W0823 05:26:08.650312 PluginsManager.cpp:157] DelayedDeletion - Path to the SQLite database: /var/lib/orthanc/db/pending-deletions.f4907599-0fd7e394-4efe28e9-af897d78-0807e4a4.db
W0823 05:26:08.651307 PluginsManager.cpp:261] Registering plugin 'tcia' (version 1.1)
W0823 05:26:08.652223 PluginsManager.cpp:261] Registering plugin 'volview' (version 1.1)
W0823 05:26:08.652501 PluginsManager.cpp:261] Registering plugin 'serve-folders' (version 1.12.0)
W0823 05:26:08.652992 PluginsManager.cpp:157] ServeFolders: Empty configuration file: No additional folder will be served!
W0823 05:26:08.653459 PluginsManager.cpp:261] Registering plugin 'neuro' (version 1.0)
W0823 05:26:08.653560 main.cpp:911] Loading plugin(s) from: /usr/local/share/orthanc/plugins
E0823 05:26:08.653576 PluginsManager.cpp:234] Inexistent path to plugins: /usr/local/share/orthanc/plugins
W0823 05:26:08.653589 OrthancInitialization.cpp:420] SQLite index directory: "/var/lib/orthanc/db"
W0823 05:26:08.653724 main.cpp:1713] Using a custom storage area from plugins
W0823 05:26:08.657419 HttpClient.cpp:1194] HTTPS will use the CA certificates from this file: /etc/ssl/certs/ca-certificates.crt
W0823 05:26:08.657964 LuaContext.cpp:94] Lua says: Lua toolbox installed
W0823 05:26:08.658217 LuaContext.cpp:94] Lua says: Lua toolbox installed
W0823 05:26:08.658510 ServerContext.cpp:515] Disk compression is disabled
W0823 05:26:08.658537 ServerIndex.cpp:381] No limit on the number of stored patients
W0823 05:26:08.658544 ServerIndex.cpp:401] No limit on the size of the storage area
W0823 05:26:08.658551 ServerIndex.cpp:420] Maximum Storage mode: Recycle
W0823 05:26:08.658942 ServerContext.cpp:244] Reloading the jobs from the last execution of Orthanc
W0823 05:26:08.659987 JobsEngine.cpp:272] The jobs engine has started with 2 threads
W0823 05:26:08.660445 main.cpp:1317] DICOM server listening with AET on port: 4242
W0823 05:26:08.660481 HttpServer.cpp:2036] HTTP compression is enabled
W0823 05:26:08.660510 main.cpp:1172] Remote LUA script execution is disabled
W0823 05:26:08.660518 main.cpp:1184] REST API can not write to the file system.
W0823 05:26:08.666270 HttpServer.cpp:1794] HTTP server listening on port: 8042 (HTTPS encryption is enabled, remote access is allowed)
W0823 05:26:08.666304 main.cpp:923] Orthanc has started
W0823 05:26:08.666741 PluginsManager.cpp:157] Starting Housekeeper worker thread
W0823 05:26:08.666915 PluginsManager.cpp:157] When using OE2 and the authorization plugin together, you must set 'Authorization.CheckedLevel' to 'studies'.  Unless you are using this orthanc only to generate tokens.
W0823 05:26:08.667222 PluginsManager.cpp:157] Housekeeper: everything has been processed already !
W0823 05:26:08.667528 PluginsManager.cpp:157] DelayedDeletion - Starting the deletion thread

Thanks,

verbose logs while your modality is trying to access Orthanc…

Please, at least try to perform the first/basic analysis by yourself before posting to this forum, you should realize that there is nothing usable in these logs !

Dear Alain

I sincerely appreciate you trying to help me and also regret asking questions which may seem very simple and basic. However, I am new to this and trying my best before putting any queries here.
I am trying to connect echo machine to the server worklist. I have previously run the command findscu -v -P -W -k 0008,0060="*" -aec orthanc-aet orthanc-ip 4242 on the local server, as mentioned in my earlier posts. Kindly review the response provided below: -

I do not know how to access the verbose logs on the Echo Machine. The Orthanc logs have already been shared. However, I have set up an additional Orthanc server on a Windows platform, enabled the worklist, and attempted to establish a connection with the Echo Machine. The connection was successful. Unfortunately, I am still unable to retrieve information but this time I did find some information in the orthanc log file: -

W0823 17:12:07.198545 main.cpp:923] Orthanc has started
W0823 17:12:07.198545 PluginsManager.cpp:157] When using OE2 and the authorization plugin together, you must set 'Authorization.CheckedLevel' to 'studies'.  Unless you are using this orthanc only to generate tokens.
E0823 17:12:16.760600 OrthancException.cpp:61] Error in the network protocol: DicomAssociation - connecting to AET "echomachine-aet": Peer aborted Association (or never connected)
E0823 17:17:12.131633 OrthancException.cpp:61] Bad file format: Cannot parse an invalid DICOM file (size: 0 bytes)
E0823 17:17:13.772516 OrthancException.cpp:61] Bad file format: Cannot parse an invalid DICOM file (size: 0 bytes)

Thanks,

ORTHANC logs in VERBOSE mode while your modality is trying to access Orthanc… this is my last try …

@Avijit

Excerpt from the Orthanc book: Collecting logs — Orthanc Book documentation (orthanc-server.com)

Generating an exploitable debug log

By default, the Orthanc logs contain only the WARNING and ERROR information levels. For your logs to be exploitable by the Orthanc community, you must include more information by adding the --verbose or --trace command-line options, which will add the INFO and TRACE information levels. If you are starting Orthanc from the command-line, simply add these flags and redirect the standard outputs to some log file. For instance:

$ ./Orthanc --trace --logfile=orthanc.log

Note that the Orthanc command-line tool has many other options related to logging. Check out the full manpage.

However, if you use packaged versions of Orthanc that starts the server in background (such as GNU/Linux packages or the Windows installers by Osimis), you will have to manually start Orthanc. The sections below explain how to achieve this goal with the officially supported packages.

Please ask for help if you’re unable to toggle verbose mode.

Hi Benjamin,

I am grateful for your information and assistance. I have started Orthanc server in verbose mode, I attempted to retrieve patient information from the worklist by conducting a patient ID search on the echo machine. I have included the logs generated in verbose mode below:

I0828 07:36:32.687561 CommandDispatcher.cpp:333] (dicom) Association Received from AET **echomachine-aet** on IP **echomachine-ip**
I0828 07:36:32.718737 main.cpp:318] Incoming connection from AET **echomachine-aet** on IP **echomachine-ip**, calling AET  **orthanc-worklist-aet**
I0828 07:36:32.720643 CommandDispatcher.cpp:666] (dicom) Association Acknowledged (Max Send PDV: 32756) to AET **echomachine-aet** on IP **echomachine-ip**
I0828 07:36:32.838296 main.cpp:353] Incoming Echo request from AET **echomachine-aet** on IP **echomachine-ip**, calling AET **orthanc-worklist-aet**
I0828 07:36:32.838354 CommandDispatcher.cpp:963] (dicom) Received Echo Request
I0828 07:36:32.947385 CommandDispatcher.cpp:931] (dicom) Finishing association with AET **echomachine-aet** on IP **echomachine-ip**: DUL Peer Requested Release
I0828 07:36:32.947447 CommandDispatcher.cpp:939] (dicom) Association Release with AET **echomachine-aet** on IP **echomachine-ip**
I0828 07:36:33.176064 CommandDispatcher.cpp:333] (dicom) Association Received from AET **echomachine-aet** on IP **echomachine-ip**
I0828 07:36:33.176159 main.cpp:318] Incoming connection from AET **echomachine-aet** on IP **echomachine-ip**, calling AET **orthanc-worklist-aet**
I0828 07:36:33.176225 CommandDispatcher.cpp:666] (dicom) Association Acknowledged (Max Send PDV: 32756) to AET **echomachine-aet** on IP **echomachine-ip**
I0828 07:36:33.289349 main.cpp:353] Incoming FindWorklist request from AET **echomachine-aet** on IP **echomachine-ip**, calling AET **orthanc-worklist-aet**
I0828 07:36:33.290760 main.cpp:225] No limit on the number of C-FIND results at the Patient, Study and Series levels
I0828 07:36:33.290794 main.cpp:235] No limit on the number of C-FIND results at the Instance level
I0828 07:36:33.306080 PluginsManager.cpp:161] (plugins) Received worklist query from remote modality **echomachine-aet**:
{
   "0008,0020" : "",
   "0008,0050" : "",
   "0008,0080" : "",
   "0008,0081" : "",
   "0008,0082" : [
      {
         "0008,0100" : "",
         "0008,0102" : "",
         "0008,0103" : "",
         "0008,0104" : ""
      }
   ],
   "0008,0090" : "",
   "0008,0092" : "",
   "0008,0094" : "",
   "0008,1080" : "",
   "0008,1084" : [
      {
         "0008,0100" : "",
         "0008,0102" : "",
         "0008,0103" : "",
         "0008,0104" : ""
      }
   ],
   "0008,1110" : [],
   "0008,1120" : [],
   "0008,1125" : [],
   "0010,0010" : "",
   "0010,0020" : "2653484",
   "0010,0021" : "",
   "0010,0030" : "",
   "0010,0032" : "",
   "0010,0040" : "",
   "0010,0050" : [
      {
         "0008,0100" : "",
         "0008,0102" : "",
         "0008,0103" : "",
         "0008,0104" : ""
      }
   ],
   "0010,1000" : "",
   "0010,1001" : "",
   "0010,1005" : "",
   "0010,1010" : "",
   "0010,1020" : "",
   "0010,1030" : "",
   "0010,1040" : "",
   "0010,1060" : "",
   "0010,1080" : "",
   "0010,1081" : "",
   "0010,1090" : "",
   "0010,2000" : "",
   "0010,2110" : "",
   "0010,2150" : "",
   "0010,2152" : "",
   "0010,2154" : "",
   "0010,2160" : "",
   "0010,2180" : "",
   "0010,21a0" : "",
   "0010,21b0" : "",
   "0010,21c0" : null,
   "0010,21d0" : "",
   "0010,21f0" : "",
   "0010,4000" : "",
   "0020,000d" : "",
   "0032,1032" : "",
   "0032,1033" : "",
   "0032,1060" : "",
   "0032,1064" : [
      {
         "0008,0100" : "",
         "0008,0102" : "",
         "0008,0103" : "",
         "0008,0104" : ""
      }
   ],
   "0038,0004" : [],
   "0038,0008" : "",
   "0038,0010" : "",
   "0038,0011" : "",
   "0038,0016" : "",
   "0038,0020" : "",
   "0038,0021" : "",
   "0038,0050" : "",
   "0038,0300" : "",
   "0038,0400" : "",
   "0038,0500" : "",
   "0038,4000" : "",
   "0040,0100" : [
      {
         "0008,0060" : "US",
         "0032,1070" : "",
         "0040,0001" : "",
         "0040,0002" : "20230825",
         "0040,0003" : "",
         "0040,0004" : "",
         "0040,0005" : "",
         "0040,0006" : "",
         "0040,0007" : "",
         "0040,0008" : [
            {
               "0008,0100" : "",
               "0008,0102" : "",
               "0008,0103" : "",
               "0008,0104" : ""
            }
         ],
         "0040,0009" : "",
         "0040,0010" : "",
         "0040,0011" : "",
         "0040,0012" : "",
         "0040,0020" : "",
         "0040,0400" : ""
      }
   ],
   "0040,1001" : "",
   "0040,1002" : "",
   "0040,1003" : "",
   "0040,1004" : "",
   "0040,1005" : "",
   "0040,1006" : "",
   "0040,1007" : "",
   "0040,1008" : "",
   "0040,1009" : "",
   "0040,1010" : "",
   "0040,1400" : "",
   "0040,2001" : "",
   "0040,2004" : "",
   "0040,2005" : "",
   "0040,2008" : "",
   "0040,2009" : "",
   "0040,2010" : "",
   "0040,2016" : "",
   "0040,2017" : "",
   "0040,2400" : "",
   "0040,3001" : ""
}

I0828 07:36:33.309270 PluginsManager.cpp:161] (plugins) Worklist matched: /var/tmp/worklistdb/deepti.wl
I0828 07:36:33.309729 PluginsManager.cpp:161] (plugins) Worklist C-Find: parsed 18 files, found 1 match(es)
I0828 07:36:33.417096 CommandDispatcher.cpp:931] (dicom) Finishing association with AET **echomachine-aet** on IP **echomachine-ip**: DUL Peer Requested Release
I0828 07:36:33.417153 CommandDispatcher.cpp:939] (dicom) Association Release with AET **echomachine-aet** on IP **echomachine-ip**

Based on the logs generated, my interpretation is that the Orthanc worklist server received a query from the echo machine, resulting in 1 match being found. However, the server did not display all the information. I checked this on the echo machine also, which indicates that there are no matches found.

Kindly refer to the image provided below.: -

Thanks,

Hi Avijit,

From the Orthanc point of view, everything seems fine since Orthanc says it returns 1 answer to the Echo machine.

I would suggest you to get in touch with the Echo machine provider to ask them if they are performing additional filtering on their side. Before that, you may need to capture network trafic with WireShark (that has a nice DICOM interpreter) to prove them that Orthanc really sends an answer to the Echo machine.

HTH,

Alain

Hi Alain,

Apologies for the delay in responding, and I appreciate your suggestion.
We will contact the echo machine technician, and once it is resolved, I will update this thread.

Thanks,

Hello,

Apologies for the delayed response. The issue with the worklist was resolved. I was using a sample worklist file, and one study tag was missing (0040,0002) DA ScheduledProcedureStepStartDate. After adding this tag to the worklist file, I could see the list in the echo machine. Thanks to @alainmazy and @benjamin.golinvaux for their support.

Thanks

1 Like