newbee problems

1,589 views
Skip to first unread message

ilan...@gmail.com

unread,
Oct 23, 2016, 9:03:47 AM10/23/16
to Orthanc Users
Today is my first day with orthanc so I am be doing something stupid.
I'm not sure if it is really running or not. It says in the end of this that it is stopped:

ilan@ilan-Desktop:~$ /usr/sbin/Orthanc ./Configuration.json --verbose
W1023 15:34:10.175272 main.cpp:1129] Orthanc version: 1.0.0
W1023 15:34:10.180684 OrthancInitialization.cpp:128] Reading the configuration from: "./Configuration.json"
W1023 15:34:10.181760 HttpClient.cpp:386] No certificates are provided to validate peers, set "HttpsCACertificates" if you need to do HTTPS requests
W1023 15:34:10.233308 FromDcmtkBridge.cpp:148] Loading the external DICOM dictionary "/usr/share/libdcmtk5/dicom.dic"
W1023 15:34:10.282280 FromDcmtkBridge.cpp:148] Loading the external DICOM dictionary "/usr/share/libdcmtk5/private.dic"
W1023 15:34:10.320956 OrthancInitialization.cpp:420] Registering JPEG Lossless codecs
W1023 15:34:10.321098 OrthancInitialization.cpp:425] Registering JPEG codecs
W1023 15:34:10.356094 OrthancInitialization.cpp:910] SQLite index directory: "./OrthancStorage"
W1023 15:34:10.356600 OrthancInitialization.cpp:980] Storage directory: "./OrthancStorage"
I1023 15:34:10.358685 DatabaseWrapper.cpp:307] Version of the Orthanc database: 6
I1023 15:34:10.359425 ServerIndex.cpp:365] Starting the database flushing thread (sleep = 10)
I1023 15:34:10.359564 ServerIndex.cpp:1857] Starting the monitor for stable resources (stable age = 60)
W1023 15:34:10.359678 ServerScheduler.cpp:134] The server scheduler has started
W1023 15:34:10.360406 LuaContext.cpp:103] Lua says: Lua toolbox installed
I1023 15:34:10.360572 HttpClient.cpp:412] Setting the default timeout for HTTP client connections: 10 seconds
W1023 15:34:10.360641 ServerContext.cpp:168] Disk compression is disabled
I1023 15:34:10.360682 ServerContext.cpp:447] Storing MD5 for attachments: yes
W1023 15:34:10.360731 ServerIndex.cpp:1372] No limit on the number of stored patients
W1023 15:34:10.360856 ServerIndex.cpp:1389] No limit on the size of the storage area
E1023 15:34:10.362093 DicomServer.cpp:304] cannot create network: TCP Initialization Error: Address already in use
I1023 15:34:11.359643 ServerIndex.cpp:383] Stopping the database flushing thread
I1023 15:34:11.359740 ServerIndex.cpp:1901] Closing the monitor thread for stable resources
E1023 15:34:11.361010 main.cpp:1169] Uncaught exception, stopping now: [The TCP port of the DICOM server is already in use] (code 2004)
W1023 15:34:11.361784 main.cpp:1202] Orthanc has stopped

My goal is send a STORESCU file to orthanc and have it store it. From both dcm4chee and conquest I can do an echo which works. I don't see any list of known dicom aets, so it seems orthanc doesn't know about my 2 clients. Perhaps it doesn't need to know about them, or I have to tell it in a way I still haven't figured out?
Orthanc should be on this computer at 192.168.0.100. Hopefully it will accept query requests from conquest at 192.168.0.104? Dcm4chee is also on 192.168.0.100.

So my first question is: is orthanc running or not? Beyond that can I have it work beyond localhost? I have DicomServerEnabled set to true and
DicomCheckCalledAet set to false.

Inside the orthanc query/retrieve page the list of dicom servers is empty, so I can't do an echo, but then I'm not even sure orthanc is really running.

Thanks,
Ilan

ilan...@gmail.com

unread,
Oct 24, 2016, 4:56:38 AM10/24/16
to Orthanc Users, ilan...@gmail.com
Thanks for the reply Chico. I booted the computer from a cold start and immediately ran

ilan@ilan-Desktop:~$ /usr/sbin/Orthanc ./Configuration.json --verbose

with the same result. Who can possibly be turning on a Dicom server without me knowing about it?
Just to be sure I turned off all cloud servers (even though they are not Dicom servers) and did another boot. The same TCP port already in use comes up.

I found another orthanc.json in /etc/orthanc/ and I can see that this is the one which is really in use. The files are stored where it says and not where Configuration.json says.
Maybe I should delete ./Configuration.json and change /etc/orthanc/orthanc.json with the parameters I want? By hook or by crook orthanc.json seems to be running even if I don't know who activated it.

My second question is still open: how do I get a known list of dicom servers to orthanc? The others (dcm4chee and conquest) know about orthanc, but orthanc doesn't know about them

Thanks,
Ilan

Chico Venancio

unread,
Oct 24, 2016, 9:42:26 AM10/24/16
to ilan...@gmail.com, Orthanc Users
Sorry about not answering to the list, keel forggeting to set answer to all...

Please read the Orthanc documentation and FAQ as far as configuration goes. To get what process is using the port run netstat -l -p and look for results in the configured port (default 4042, look in configuration for actual one). ps aux|grep -i orthanc might be a good a idea to see if there is another instance of Orthanc running from start.



Chico Venancio 
(98) 9 8800 2743
CEO - VM TECH 

ilan...@gmail.com

unread,
Oct 24, 2016, 9:48:56 AM10/24/16
to Orthanc Users, ilan...@gmail.com
I did a cold boot of the computer, and I looked in the list of applications to be started at cold boot. Othanc isn't there, so I can figure who is starting it, and how.

I didn't see any hint of where to put the list of "foreign" dicom servers, i.e. their AETitle and IP. If it is in the configuration file, I have yet to find it.

John Roberts

unread,
Oct 24, 2016, 3:05:21 PM10/24/16
to Orthanc Users, ilan...@gmail.com
Your "foreign" DICOM server settings go in the configuration.json file under the DicomModalities section.  See the "sample" entry in the online example: https://bitbucket.org/sjodogne/orthanc/raw/Orthanc-1.1.0/Resources/Configuration.json

From the looks of your posts here, you're running Orthanc on a linux based host computer.  Did you install a pre-compiled version of Orthanc for your distribution, perhaps with apt-get, yum or dnf?  Or are you using Docker?  It looks like you're running into an Orthanc that is set to start when the machine boots (or the Docker container is started).  That would explain why it's looking in the default /etc/orthanc folder for the default configuration file.

If you have curl installed, try the following to shut down a running Orthanc from the command line:

curl -X POST -d '' http://192.168.0.100:8042/tools/shutdown

assuming 192.168.0.100 is the true address of your orthanc.

Then, if you can start orthanc with the configuration.json you want, you should figure out how to stop the other orthanc from starting at boot.  If you're on Ubuntu, check here:
https://orthanc.chu.ulg.ac.be/book/faq/debian-daemon.html?highlight=shutdown

John.

ilan...@gmail.com

unread,
Oct 25, 2016, 4:57:52 AM10/25/16
to Orthanc Users, ilan...@gmail.com
Hi John,
You reply definitely helped but I am still not there.
In the query retrieve the dicom servers list is still empty.
When I try to query from conquest I get this:

I1025 11:40:10.168672 CommandDispatcher.cpp:491] Association Received from AET CONQUESTSRV1 on IP 192.168.0.104
I1025 11:40:10.170641 CommandDispatcher.cpp:689] Association Acknowledged (Max Send PDV: 16372)
E1025 11:40:10.172856 main.cpp:182] Unknown remote DICOM modality AET: "CONQUESTSRV1"
E1025 11:40:10.172973 CommandDispatcher.cpp:781] Find requests are disallowed for the AET "CONQUESTSRV1"
E1025 11:40:10.173030 CommandDispatcher.cpp:877] DIMSE failure (aborting association): DIMSE Caller passed in an illegal association

It is telling me conquest is unknown. My configuration files is this:

{
/**
* 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)
"StorageDirectory" : "OrthancStorage",

// 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" : "OrthancStorage",

// 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.
"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
**/

// 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 during a DICOM request
"DicomCheckCalledAet" : false,

// The DICOM port
"DicomPort" : 4242,

// The default encoding that is assumed for DICOM files without
// "SpecificCharacterSet" DICOM tag. 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,

/**
* 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 (meaningful only if SSL is enabled)
"SslCertificate" : "certificate.pem",

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

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

/**
* 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".
**/
// "sample" : [ "STORESCP", "localhost", 2000 ]
"dcm4chee" : ["DCM4CHEE, "192.168.0.100", 11112, "Dcm4Chee"]
"conquest" : ["CONQUEST1, "192.168.0.104, 5678]

/**
* A fourth parameter is available to enable patches for a
* specific PACS manufacturer. The allowed values are currently
* "Generic" (default value), "StoreScp" (storescp tool from
* DCMTK), "ClearCanvas", "MedInria", "Dcm4Chee", "SyngoVia",
* "AgfaImpax" (Agfa IMPAX), "EFilm2" (eFilm version 2), and
* "Vitrea". This parameter is case-sensitive.
**/
// "clearcanvas" : [ "CLEARCANVAS", "192.168.1.1", 104, "ClearCanvas" ]
},

// 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://localhost:8043/", "alice", "alicePassword" ]
// "peer2" : [ "http://localhost:8044/" ]
},

// 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:proxyP...@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.
// 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.
"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,

// 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), and possibly the maximum
// multiplicity (0 means arbitrary multiplicity, defaults to 1).
"Dictionary" : {
// "0014,1020" : [ "DA", "ValidationExpiryDate", 1, 1 ]
}
}

I forgot to mention that when setting up orthanc, it was suggested to use synaptic. I noticed that orthanc was already in the Ubuntu database, so I took the version it suggested. I could be that this is older than what is on source forge, but my experience with the Ubuntu file list is pretty good.

In any case both dcm4chee and conquest are listed as other dicom servers and both are running (conquest inside a Windows virtual box). From conquest I can echo to both dcm4chee and orthanc.

ilan...@gmail.com

unread,
Oct 25, 2016, 5:08:37 AM10/25/16
to Orthanc Users, ilan...@gmail.com
I noticed a typo in
"conquest" : ["CONQUEST1, "192.168.0.104, 5678]
that I forgot to close the quote.
Fixed the typo to
"conquest" : ["CONQUEST1, "192.168.0.104", 5678]
but it didn't help.

Chico Venancio

unread,
Oct 25, 2016, 8:52:32 AM10/25/16
to Ilan Tal, Orthanc Users
There is another missing quote on the dcm4chee line, and there is a missing comma at the end of that line as well.

Chico Venancio 
(98) 9 8800 2743
CEO - VM TECH 

ilan...@gmail.com

unread,
Oct 25, 2016, 9:03:17 AM10/25/16
to Orthanc Users, ilan...@gmail.com
Thanks Chico.
How many typos can I make???
I fixed it

// 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".
**/
// "sample" : [ "STORESCP", "localhost", 2000 ]

"dcm4chee" : ["DCM4CHEE", "192.168.0.100", 11112, "Dcm4Chee"],
"conquest" : ["CONQUEST1", "192.168.0.104", 5678]

/**
* A fourth parameter is available to enable patches for a
* specific PACS manufacturer. The allowed values are currently
* "Generic" (default value), "StoreScp" (storescp tool from
* DCMTK), "ClearCanvas", "MedInria", "Dcm4Chee", "SyngoVia",
* "AgfaImpax" (Agfa IMPAX), "EFilm2" (eFilm version 2), and
* "Vitrea". This parameter is case-sensitive.
**/
// "clearcanvas" : [ "CLEARCANVAS", "192.168.1.1", 104, "ClearCanvas" ]
},

but it didn't help. Still the list of dicom servers on the query retrieve page is empty. What else could be wrong?

Thanks,
Ilan

Chico Venancio

unread,
Oct 25, 2016, 9:07:14 AM10/25/16
to Ilan Tal, Orthanc Users
You restarted Orthanc after changing the config right? 
What does the log say? Orthanc parses the config in startup and mentions any problems with it.

Chico Venancio 
(98) 9 8800 2743
CEO - VM TECH 

ilan...@gmail.com

unread,
Oct 25, 2016, 9:12:18 AM10/25/16
to Orthanc Users, ilan...@gmail.com
I did ^C to stop the server and restarted it:

ilan@ilan-Desktop:~$ /usr/sbin/Orthanc --verbose
W1025 16:08:20.335069 main.cpp:1129] Orthanc version: 1.0.0
W1025 16:08:20.340482 OrthancInitialization.cpp:228] Using the default Orthanc configuration
W1025 16:08:20.340551 HttpClient.cpp:386] No certificates are provided to validate peers, set "HttpsCACertificates" if you need to do HTTPS requests
W1025 16:08:20.391794 FromDcmtkBridge.cpp:148] Loading the external DICOM dictionary "/usr/share/libdcmtk5/dicom.dic"
W1025 16:08:20.439515 FromDcmtkBridge.cpp:148] Loading the external DICOM dictionary "/usr/share/libdcmtk5/private.dic"
W1025 16:08:20.477920 OrthancInitialization.cpp:420] Registering JPEG Lossless codecs
W1025 16:08:20.478038 OrthancInitialization.cpp:425] Registering JPEG codecs
W1025 16:08:20.512800 OrthancInitialization.cpp:910] SQLite index directory: "/home/ilan/OrthancStorage"
W1025 16:08:20.513525 OrthancInitialization.cpp:980] Storage directory: "/home/ilan/OrthancStorage"
I1025 16:08:20.515572 DatabaseWrapper.cpp:307] Version of the Orthanc database: 6
I1025 16:08:20.516306 ServerIndex.cpp:1857] Starting the monitor for stable resources (stable age = 60)
I1025 16:08:20.517265 ServerIndex.cpp:365] Starting the database flushing thread (sleep = 10)
W1025 16:08:20.517425 ServerScheduler.cpp:134] The server scheduler has started
W1025 16:08:20.518386 LuaContext.cpp:103] Lua says: Lua toolbox installed
I1025 16:08:20.518545 HttpClient.cpp:412] Setting the default timeout for HTTP client connections: 0 seconds
W1025 16:08:20.518632 ServerContext.cpp:168] Disk compression is disabled
I1025 16:08:20.518669 ServerContext.cpp:447] Storing MD5 for attachments: yes
W1025 16:08:20.518709 ServerIndex.cpp:1372] No limit on the number of stored patients
W1025 16:08:20.518872 ServerIndex.cpp:1389] No limit on the size of the storage area
W1025 16:08:20.521093 main.cpp:751] DICOM server listening with AET ORTHANC on port: 4242
I1025 16:08:20.521128 DicomServer.cpp:64] DICOM server started
W1025 16:08:20.521455 MongooseServer.cpp:950] HTTP keep alive is disabled
W1025 16:08:20.521503 MongooseServer.cpp:976] HTTP compression is enabled
W1025 16:08:20.529175 main.cpp:707] HTTP server listening on port: 8042
W1025 16:08:20.529318 main.cpp:630] Orthanc has started
I1025 16:08:32.306433 MongooseServer.cpp:719] GET /system
I1025 16:08:32.370374 MongooseServer.cpp:719] GET /modalities

To me, it looks OK. I don't know what the Mongoose server is, but I guess it is OK.

Chico Venancio

unread,
Oct 25, 2016, 9:35:26 AM10/25/16
to Ilan Tal, Orthanc Users

If you're starting orthanc from the command line you need to point it to the config file used. Right now it is using the default config W1025 16:08:20.340482 OrthancInitialization.cpp:228] Using the default Orthanc configuration

Chico Venancio
CEO
VM TECH - (98)8800-2743

ilan...@gmail.com

unread,
Oct 25, 2016, 9:38:38 AM10/25/16
to Orthanc Users, ilan...@gmail.com
Yes I wanted the config file with the program so I changed
/etc/orthanc/orthanc.json

I did the copy-paste from it.

John Roberts

unread,
Oct 26, 2016, 1:01:34 PM10/26/16
to Orthanc Users, ilan...@gmail.com
If you only wish to have a DICOM listener receive images sent from other DICOM nodes, you might consider trying the storescp command line utility from the dcmtk package.

Orthanc really offers a full PACS solution for handling DICOM.  That might be more than you're looking for.

John.

ilan...@gmail.com

unread,
Oct 27, 2016, 4:24:57 AM10/27/16
to Orthanc Users, ilan...@gmail.com
I have a Pet-Ct viewer for Fiji (ImageJ)
http://petctviewer.org

My job is to give my users maximum freedom. Orthanc is much easier to install than dcm4chee, so I want try it as a possible solution. I think I saw it has an interface to ImageJ, which will be very interesting once I manage to get it going.

I never expected to have such a difficult time installing Orthanc. I must be doing some little detail wrong which is causing it not to work. It looks like a very promising program if I can only figure out what is wrong.

Thanks,
Ilan

ilan...@gmail.com

unread,
Oct 30, 2016, 2:18:21 AM10/30/16
to Orthanc Users, ilan...@gmail.com
I decided that perhaps something went wrong when I installed orthanc so I completely removed it and reinstalled from scratch. I used synaptic as the simplest possible method. I used the default configuration is the simplest possible case.

What I get is
ilan@ilan-Desktop:~$ /usr/sbin/Orthanc --verbose
W1030 07:45:30.762277 main.cpp:1222] Orthanc version: 1.1.0
W1030 07:45:30.766505 OrthancInitialization.cpp:230] Using the default Orthanc configuration
W1030 07:45:30.820894 FromDcmtkBridge.cpp:140] Loading the external DICOM dictionary "/usr/share/libdcmtk8/dicom.dic"
W1030 07:45:30.871736 FromDcmtkBridge.cpp:140] Loading the external DICOM dictionary "/usr/share/libdcmtk8/private.dic"
W1030 07:45:30.910457 OrthancInitialization.cpp:502] Registering JPEG Lossless codecs
W1030 07:45:30.910541 OrthancInitialization.cpp:507] Registering JPEG codecs
W1030 07:45:30.946753 OrthancInitialization.cpp:993] SQLite index directory: "/home/ilan/OrthancStorage"
W1030 07:45:30.947442 OrthancInitialization.cpp:1063] Storage directory: "/home/ilan/OrthancStorage"
I1030 07:45:30.949536 DatabaseWrapper.cpp:307] Version of the Orthanc database: 6
I1030 07:45:30.951084 ServerIndex.cpp:365] Starting the database flushing thread (sleep = 10)
W1030 07:45:30.951372 ServerScheduler.cpp:134] The server scheduler has started
I1030 07:45:30.951436 ServerIndex.cpp:1857] Starting the monitor for stable resources (stable age = 60)
W1030 07:45:30.952341 LuaContext.cpp:103] Lua says: Lua toolbox installed
W1030 07:45:30.952492 HttpClient.cpp:658] No certificates are provided to validate peers, set "HttpsCACertificates" if you need to do HTTPS requests
I1030 07:45:30.952544 HttpClient.cpp:140] Setting the default timeout for HTTP client connections: 0 seconds
I1030 07:45:30.952608 HttpClient.cpp:124] Setting the default proxy for HTTP client connections:
W1030 07:45:30.952645 ServerContext.cpp:168] Disk compression is disabled
I1030 07:45:30.952680 ServerContext.cpp:447] Storing MD5 for attachments: yes
W1030 07:45:30.952733 ServerIndex.cpp:1372] No limit on the number of stored patients
W1030 07:45:30.952932 ServerIndex.cpp:1389] No limit on the size of the storage area
E1030 07:45:30.953988 DicomServer.cpp:304] cannot create network: TCP Initialization Error: Address already in use
I1030 07:45:31.951583 ServerIndex.cpp:383] Stopping the database flushing thread
I1030 07:45:31.951626 ServerIndex.cpp:1901] Closing the monitor thread for stable resources
E1030 07:45:31.953718 main.cpp:1247] Uncaught exception, stopping now: [The TCP port of the DICOM server is privileged or already in use] (code 2004)
W1030 07:45:31.954747 main.cpp:1280] Orthanc has stopped

I looked at the documentation and saw that in the default configuration all the ports were defined correctly.

This machine is an Ubuntu 16.10 so I tried my laptop which is Ubuntu 16.04LTS. Again I got the same results.
On the face of it, it looks like something is broken in the Ubuntu database. I am not aware that my cloud servers could cause problems and my laptop is clean of any other competing DICOM servers.
I wonder if anyone can verify if the simplest synaptic installation of orthanc is clean or not? Use the defaults "as is".

Thanks,
Ilan

Sébastien Jodogne

unread,
Oct 30, 2016, 3:50:01 AM10/30/16
to Orthanc Users, ilan...@gmail.com
Dear Ilan,

Sorry for giving this first answer attempt so late, I was extremely busy with the releases of Stone and whole-slide imaging over the last weeks. I have not read all the previous messages, so maybe what I write below has already is redundant, please excuse me if it is the case.

It was a good idea to start Orthanc from the default configuration. However, it is not normal that the log reports version 1.1.0, as the version shipped with Xenial (16.04) is in theory 1.0.0. Please run the following commands to be sure you use the default package with version 1.0.0:

# sudo apt-get remove --purge orthanc
# sudo apt-get install orthanc
# sudo /etc/init.d/orthanc stop
# /usr/sbin/Orthanc --version

From what I read from your log, your TCP port 4242 is used by another application. IMHO, this means that you have not stopped the background service that is automatically started when you install the default Ubuntu package. Use the following command to know what is listening on 4242 and prevents your manual starting of Orthanc:

# sudo netstat -tulpn | grep 4242

If Orthanc is reported, stop it with "sudo /etc/init.d/orthanc stop". Some other software (such as Juniper's VPN) might also listen on 4242, preventing Orthanc to start. You can change this 4242 by modifying the option "DicomPort" in the Orthanc configuration:

Let me know if this helps.

Regards,
Sébastien-


On Sunday, October 30, 2016 at 7:18:21 AM UTC+1, ilan...@gmail.com wrote:
I decided that perhaps something went wrong when I installed orthanc so I completely removed it and reinstalled from scratch. I used synaptic as the simplest possible method. I used the default configuration is the simplest possible case.

What I get is
ilan@ilan-Desktop:~$ /usr/sbin/Orthanc  --verbose
W1030 07:45:30.762277 main.cpp:1222] Orthanc version: 1.1.0
W1030 07:45:30.766505 OrthancInitialization.cpp:230] Using the default Orthanc configuration

[...]

E1030 07:45:30.953988 DicomServer.cpp:304] cannot create network: TCP Initialization Error: Address already in use

[...]

ilan...@gmail.com

unread,
Oct 30, 2016, 5:48:06 AM10/30/16
to Orthanc Users, ilan...@gmail.com
Dear Sebastian,
I have no idea what is going wrong with the GUI in synaptic, but it definitely doesn't work. On the other hand your instructions work fine.
I had to work a bit on the sudo apt-get remove --purge orthanc as it didn't clean out everything the first time around. In any case I purged it successfully.

The version is now 1.1.0. I tried an SCUSTORE from my program. That has some sort of error, but now I am in a place where I have control. Under the debugger I can carefully inspect the DICOM file which I generate.

To test connectivity, I activated both dcm4chee and conquest. I still can't see them in the list of servers. The configuration is:

// 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".
**/

// "sample" : [ "STORESCP", "127.0.0.1", 2000 ]


"dcm4chee" : ["DCM4CHEE", "192.168.0.100", 11112, "Dcm4Chee"],
"conquest" : ["CONQUEST1", "192.168.0.104", 5678]

/**
* A fourth parameter is available to enable patches for a
* specific PACS manufacturer. The allowed values are currently
* "Generic" (default value), "StoreScp" (storescp tool from
* DCMTK), "ClearCanvas", "MedInria", "Dcm4Chee", "SyngoVia",
* "AgfaImpax" (Agfa IMPAX), "EFilm2" (eFilm version 2), and
* "Vitrea". This parameter is case-sensitive.
**/
// "clearcanvas" : [ "CLEARCANVAS", "192.168.1.1", 104, "ClearCanvas" ]
},

What else could be missing that could cause the dicom server list to be empty?

BTW, I used dcm4chee to send an echo command to both orthanc and to conquest. Both echo commands worked fine. In my case I want orthanc to be the center of the universe and replace the other 2.

Thanks for the help. I am closer to having it working, but not yet there.
Ilan

Sébastien Jodogne

unread,
Oct 30, 2016, 7:01:47 AM10/30/16
to Ilan Tal, Orthanc Users

I think you do not use the expected configuration file.

Please could you provide the full command line, the full configuration file, and the full Orthanc log in "--verbose" mode that you use? This information is needed to provide more help.

Also, have you carefully followed the DICOM troubleshooting instructions of the Orthanc Book?
https://orthanc.chu.ulg.ac.be/book/faq/dicom.html

Sébastien-

ilan...@gmail.com

unread,
Oct 30, 2016, 7:11:17 AM10/30/16
to Orthanc Users, ilan...@gmail.com
Dear Sebastien,
While waiting for your possible comments about the missing dicom servers, I wanted to try my STORESCU. I got a couple of unusual warnings, so I tried a study I got directly from GE. It too has the warnings:

I1030 12:54:54.496799 CommandDispatcher.cpp:491] Association Received from AET STORESCU on IP 192.168.0.100
I1030 12:54:54.498016 CommandDispatcher.cpp:689] Association Acknowledged (Max Send PDV: 16366)
W: DcmItem: Invalid Element (0000,0000) found in data set
W: DcmItem: Invalid Element (0000,0002) found in data set
W: DcmItem: Invalid Element (0000,0100) found in data set
W: DcmItem: Invalid Element (0000,0110) found in data set
W: DcmItem: Invalid Element (0000,0700) found in data set
W: DcmItem: Invalid Element (0000,0800) found in data set
W: DcmItem: Invalid Element (0000,1000) found in data set

The important things is, if I ignore the warnings, the transfer takes place and the new study appears with the patient in the list of patients. This is really great as I will be able to write to Orthanc as a PACS from inside my Fiji program.
Since Orthanc is far easier to install compared to dcm4chee, this is an important step forward.
We still need to figure out the mystery of the empty dicom server list, but that will probably be something stupid which I missed.

Thanks again,
Ilan

ilan...@gmail.com

unread,
Oct 30, 2016, 7:49:55 AM10/30/16
to Orthanc Users, ilan...@gmail.com
I am modifying the /etc/orthanc/orthanc.json file so I can use the default.

The command is:
ilan@ilan-Desktop:~$ /usr/sbin/Orthanc --verbose
W1030 13:40:07.159492 main.cpp:1222] Orthanc version: 1.1.0
W1030 13:40:07.164091 OrthancInitialization.cpp:230] Using the default Orthanc configuration
W1030 13:40:07.223959 FromDcmtkBridge.cpp:140] Loading the external DICOM dictionary "/usr/share/libdcmtk8/dicom.dic"
W1030 13:40:07.280794 FromDcmtkBridge.cpp:140] Loading the external DICOM dictionary "/usr/share/libdcmtk8/private.dic"
W1030 13:40:07.322914 OrthancInitialization.cpp:502] Registering JPEG Lossless codecs
W1030 13:40:07.323003 OrthancInitialization.cpp:507] Registering JPEG codecs
W1030 13:40:07.364661 OrthancInitialization.cpp:993] SQLite index directory: "/home/ilan/OrthancStorage"
W1030 13:40:07.365353 OrthancInitialization.cpp:1063] Storage directory: "/home/ilan/OrthancStorage"
I1030 13:40:07.367417 DatabaseWrapper.cpp:307] Version of the Orthanc database: 6
I1030 13:40:07.368230 ServerIndex.cpp:1857] Starting the monitor for stable resources (stable age = 60)
I1030 13:40:07.368363 ServerIndex.cpp:365] Starting the database flushing thread (sleep = 10)
W1030 13:40:07.368427 ServerScheduler.cpp:134] The server scheduler has started
W1030 13:40:07.369204 LuaContext.cpp:103] Lua says: Lua toolbox installed
W1030 13:40:07.369356 HttpClient.cpp:658] No certificates are provided to validate peers, set "HttpsCACertificates" if you need to do HTTPS requests
I1030 13:40:07.369400 HttpClient.cpp:140] Setting the default timeout for HTTP client connections: 0 seconds
I1030 13:40:07.369464 HttpClient.cpp:124] Setting the default proxy for HTTP client connections:
W1030 13:40:07.369504 ServerContext.cpp:168] Disk compression is disabled
I1030 13:40:07.369542 ServerContext.cpp:447] Storing MD5 for attachments: yes
W1030 13:40:07.369582 ServerIndex.cpp:1372] No limit on the number of stored patients
W1030 13:40:07.369750 ServerIndex.cpp:1389] No limit on the size of the storage area
W1030 13:40:07.371889 main.cpp:820] DICOM server listening with AET ORTHANC on port: 4242
I1030 13:40:07.371914 DicomServer.cpp:64] DICOM server started
W1030 13:40:07.372616 MongooseServer.cpp:954] HTTP keep alive is disabled
W1030 13:40:07.372675 MongooseServer.cpp:980] HTTP compression is enabled
W1030 13:40:07.387920 main.cpp:757] HTTP server listening on port: 8042
W1030 13:40:07.388062 main.cpp:644] Orthanc has started
I1030 13:40:20.712939 MongooseServer.cpp:723] GET /app/explorer.html
I1030 13:40:20.920874 MongooseServer.cpp:723] GET /app/libs/jquery.mobile.min.css
I1030 13:40:21.525843 MongooseServer.cpp:723] GET /app/libs/jqtree.css
I1030 13:40:21.527198 MongooseServer.cpp:723] GET /app/libs/jquery.mobile.simpledialog.min.css
I1030 13:40:21.527334 MongooseServer.cpp:723] GET /app/libs/jquery-file-upload/css/jquery.fileupload-ui.css
I1030 13:40:21.527477 MongooseServer.cpp:723] GET /app/libs/jquery-file-upload/css/style.css
I1030 13:40:21.528245 MongooseServer.cpp:723] GET /app/libs/slimbox2/slimbox2.css
I1030 13:40:21.962049 MongooseServer.cpp:723] GET /app/libs/jquery.min.js
I1030 13:40:22.379572 MongooseServer.cpp:723] GET /app/libs/jquery.mobile.simpledialog2.js
I1030 13:40:22.380792 MongooseServer.cpp:723] GET /app/libs/date.js
I1030 13:40:22.381189 MongooseServer.cpp:723] GET /app/libs/jqm.page.params.js
I1030 13:40:22.381676 MongooseServer.cpp:723] GET /app/libs/slimbox2.js
I1030 13:40:22.382035 MongooseServer.cpp:723] GET /app/libs/jquery.mobile.min.js
I1030 13:40:22.383438 MongooseServer.cpp:723] GET /app/libs/tree.jquery.js
I1030 13:40:22.806902 MongooseServer.cpp:723] GET /app/libs/jquery.blockui.js
I1030 13:40:22.807058 MongooseServer.cpp:723] GET /app/file-upload.js
I1030 13:40:22.807388 MongooseServer.cpp:723] GET /app/explorer.css
I1030 13:40:22.807599 MongooseServer.cpp:723] GET /app/libs/jquery-file-upload/js/vendor/jquery.ui.widget.js
I1030 13:40:22.807881 MongooseServer.cpp:723] GET /app/libs/jquery-file-upload/js/jquery.iframe-transport.js
I1030 13:40:22.807969 MongooseServer.cpp:723] GET /app/libs/jquery-file-upload/js/jquery.fileupload.js
I1030 13:40:23.205109 MongooseServer.cpp:723] GET /plugins/explorer.js
I1030 13:40:23.205227 MongooseServer.cpp:723] GET /app/query-retrieve.js
I1030 13:40:23.205683 MongooseServer.cpp:723] GET /app/explorer.js
I1030 13:40:23.460866 MongooseServer.cpp:723] GET /app/libs/images/ajax-loader.gif
I1030 13:40:23.729114 MongooseServer.cpp:723] GET /system
I1030 13:40:23.869546 MongooseServer.cpp:723] GET /patients
I1030 13:40:24.008837 MongooseServer.cpp:723] GET /app/libs/images/icons-18-white.png
I1030 13:40:28.985421 MongooseServer.cpp:723] GET /system
I1030 13:40:29.077925 MongooseServer.cpp:723] GET /modalities

The only thing I just changed is DicomAssociationCloseDelay is now zero.
I tried commenting out the contents of
"Plugins" : [
"/usr/share/orthanc/plugins/"
],
but nothing changed there as well. Somehow it seems better to leave that as is.

The log is
W1030 10:42:43.420697 main.cpp:1222] Orthanc version: 1.1.0
W1030 10:42:43.424849 OrthancInitialization.cpp:183] Scanning folder "/etc/orthanc/" for configuration files
W1030 10:42:43.425057 OrthancInitialization.cpp:135] Reading the configuration from: "/etc/orthanc/serve-folders.json"
W1030 10:42:43.425356 OrthancInitialization.cpp:135] Reading the configuration from: "/etc/orthanc/worklists.json"
W1030 10:42:43.425495 OrthancInitialization.cpp:135] Reading the configuration from: "/etc/orthanc/orthanc.json"
W1030 10:42:43.482997 FromDcmtkBridge.cpp:140] Loading the external DICOM dictionary "/usr/share/libdcmtk8/dicom.dic"
W1030 10:42:43.535033 FromDcmtkBridge.cpp:140] Loading the external DICOM dictionary "/usr/share/libdcmtk8/private.dic"
W1030 10:42:43.574235 OrthancInitialization.cpp:502] Registering JPEG Lossless codecs
W1030 10:42:43.574329 OrthancInitialization.cpp:507] Registering JPEG codecs
W1030 10:42:43.611037 main.cpp:632] Loading plugin(s) from: /usr/share/orthanc/plugins/
W1030 10:42:43.612011 PluginsManager.cpp:268] Registering plugin 'serve-folders' (version 1.1.0)
W1030 10:42:43.613247 PluginsManager.cpp:268] Registering plugin 'worklists' (version 1.1.0)
W1030 10:42:43.613291 PluginsManager.cpp:167] Sample worklist plugin is initializing
W1030 10:42:43.613689 PluginsManager.cpp:167] Worklists server is disabled by the configuration file
W1030 10:42:43.613770 OrthancInitialization.cpp:993] SQLite index directory: "/var/lib/orthanc/db-v6"
W1030 10:42:43.614339 OrthancInitialization.cpp:1063] Storage directory: "/var/lib/orthanc/db-v6"
W1030 10:42:43.706993 ServerScheduler.cpp:134] The server scheduler has started
W1030 10:42:43.707772 LuaContext.cpp:103] Lua says: Lua toolbox installed
W1030 10:42:43.707900 HttpClient.cpp:658] No certificates are provided to validate peers, set "HttpsCACertificates" if you need to do HTTPS requests
W1030 10:42:43.707946 ServerContext.cpp:168] Disk compression is disabled
W1030 10:42:43.707985 ServerIndex.cpp:1372] No limit on the number of stored patients
W1030 10:42:43.708069 ServerIndex.cpp:1389] No limit on the size of the storage area
W1030 10:42:43.710023 main.cpp:820] DICOM server listening with AET ORTHANC on port: 4242
W1030 10:42:43.710173 MongooseServer.cpp:954] HTTP keep alive is disabled
W1030 10:42:43.710205 MongooseServer.cpp:980] HTTP compression is enabled
W1030 10:42:43.718089 main.cpp:757] HTTP server listening on port: 8042
W1030 10:42:43.718185 main.cpp:644] Orthanc has started
W1030 10:43:21.518996 main.cpp:702] Orthanc is stopping
W1030 10:43:21.569596 main.cpp:762] HTTP server has stopped
W1030 10:43:21.777432 main.cpp:836] DICOM server has stopped
W1030 10:43:22.808586 PluginsManager.cpp:218] Unregistering plugin 'serve-folders' (version 1.1.0)
W1030 10:43:22.808768 PluginsManager.cpp:218] Unregistering plugin 'worklists' (version 1.1.0)
W1030 10:43:22.808806 PluginsManager.cpp:167] Sample worklist plugin is finalizing
W1030 10:43:22.809511 main.cpp:1280] Orthanc has stopped

orthanc.json

Sébastien Jodogne

unread,
Oct 30, 2016, 3:27:44 PM10/30/16
to Orthanc Users, ilan...@gmail.com
OK, so your problem is here:


ilan@ilan-Desktop:~$ /usr/sbin/Orthanc  --verbose
W1030 13:40:07.159492 main.cpp:1222] Orthanc version: 1.1.0
W1030 13:40:07.164091 OrthancInitialization.cpp:230] Using the default Orthanc configuration 

[...] 


As written in the log, Orthanc uses its default configuration file... which is not the file you edited (you reported it was "/etc/orthanc/orthanc.json"). It is thus perfectly normal that Orthanc does not take your modifications into account. In order to manually start Orthanc with your edited configuration, you must type:

$ Orthanc /etc/orthanc/ --verbose

The proper way of using the official Ubuntu package is as follows (this is the same procedure than that of many Linux services):

$ sudo apt-get install orthanc
$ nano /etc/orthanc/orthanc.json (...update your configuration...)
$ sudo /etc/init.d/orthanc restart

HTH,
Sébastien-

ilan...@gmail.com

unread,
Oct 31, 2016, 5:01:33 AM10/31/16
to Orthanc Users, ilan...@gmail.com
Dear Sebastien,
My mistake was thinking "what you see is what you get" on the default configuration file. I thought it would take the defaults from that file.
Even Orthanc /etc/orthanc/orthanc.json --verbose didn't give what I expected. It wanted to put the stored file into etc/OrthancStorage which was not what I wanted.

Never mind. I copied orthanc.json to my home directory so it put OrthancStorage in my directory. Finally I could see some dicom servers. A big step forward.

I am still having trouble with dcm4chee, but I'm not at all sure it is completely installed correctly. This is one of the major reasons why orthanc is so attractive, i.e. it is much easier to install. Thus I won't bother you with messages from dcm4chee.

Conquest is much easier to install, and it shows signs of life. I tried to have orthanc query Conquest to see a list of patients. I get this:

I1031 10:17:52.978862 DicomUserConnection.cpp:888] Opening a DICOM SCU connection from AET "ORTHANC" to AET "CONQUESTSRV1" on host 192.168.0.104:5678 (manufacturer: Generic)


W: DcmItem: Invalid Element (0000,0000) found in data set
W: DcmItem: Invalid Element (0000,0002) found in data set
W: DcmItem: Invalid Element (0000,0100) found in data set

W: DcmItem: Invalid Element (0000,0120) found in data set


W: DcmItem: Invalid Element (0000,0800) found in data set

W: DcmItem: Invalid Element (0000,0900) found in data set
I1031 10:17:53.201623 MongooseServer.cpp:723] GET /system
I1031 10:17:53.331060 MongooseServer.cpp:723] GET /queries/0f33037f-2c6b-4c7b-9803-9d3fce257a01/answers
I1031 10:17:58.046241 ReusableDicomUserConnection.cpp:94] Closing the global SCU connection after timeout

There is the usual Invalid Element business, where these are studies from commercial vendors, so I assume I can ignore the warnings. In any case orthanc came back with an empty list, and that shouldn't be. I don't know what that number 0f3303.... is - if it should appear on Conquest or not.

If I make the query from Conquest, I see the study on Orthanc, with the usual Invalid Elements
I1031 10:46:11.241089 CommandDispatcher.cpp:491] Association Received from AET CONQUESTSRV1 on IP 192.168.0.104
I1031 10:46:11.243003 CommandDispatcher.cpp:689] Association Acknowledged (Max Send PDV: 16372)


W: DcmItem: Invalid Element (0000,0000) found in data set
W: DcmItem: Invalid Element (0000,0002) found in data set
W: DcmItem: Invalid Element (0000,0100) found in data set
W: DcmItem: Invalid Element (0000,0110) found in data set
W: DcmItem: Invalid Element (0000,0700) found in data set
W: DcmItem: Invalid Element (0000,0800) found in data set

I1031 10:46:11.244324 main.cpp:119] No limit on the number of C-FIND results at the Patient, Study and Series levels
I1031 10:46:11.244381 main.cpp:129] No limit on the number of C-FIND results at the Instance level
I1031 10:46:11.292684 OrthancFindRequestHandler.cpp:578] DICOM C-Find request at level: Patient
I1031 10:46:11.292832 OrthancFindRequestHandler.cpp:584] (0008,0052) QueryRetrieveLevel = PATIENT
I1031 10:46:11.292970 OrthancFindRequestHandler.cpp:584] (0010,0010) PatientName =
I1031 10:46:11.293157 OrthancFindRequestHandler.cpp:584] (0010,0020) PatientID =
I1031 10:46:11.296797 OrthancFindRequestHandler.cpp:678] Number of matching resources: 1
I1031 10:46:11.299135 CommandDispatcher.cpp:860] DUL Peer Requested Release
I1031 10:46:11.299212 CommandDispatcher.cpp:867] Association Release

So far, so good. Next I try to pull the study from Orthanc. After a couple of false starts, I got Conquest to pull the study from Orthanc.

Thus in one direction it works. In the other direction, not quite there yet.

Thanks for all you help,
Ilan

Sébastien Jodogne

unread,
Oct 31, 2016, 5:36:15 AM10/31/16
to Orthanc Users, ilan...@gmail.com
Hello,

Glad to read things are getting better for you. This is nice to know you are able to pull from Orthanc using Conquest.


Even Orthanc /etc/orthanc/orthanc.json --verbose didn't give what I expected. It wanted to put the stored file into etc/OrthancStorage which was not what I wanted.

This is actually the purpose of the "StorageDirectory" and "IndexDirectory" configuration options:

 

Conquest is much easier to install, and it shows signs of life. I tried to have orthanc query Conquest to see a list of patients. I get this:

I1031 10:17:52.978862 DicomUserConnection.cpp:888] Opening a DICOM SCU connection from AET "ORTHANC" to AET "CONQUESTSRV1" on host 192.168.0.104:5678 (manufacturer: Generic)

I1031 10:17:53.201623 MongooseServer.cpp:723] GET /system
I1031 10:17:53.331060 MongooseServer.cpp:723] GET /queries/0f33037f-2c6b-4c7b-9803-9d3fce257a01/answers
I1031 10:17:58.046241 ReusableDicomUserConnection.cpp:94] Closing the global SCU connection after timeout

In any case orthanc came back with an empty list, and that shouldn't be.


In the "DicomModalities" configuration option of Orthanc, you can add a manufacturer to enable some manufacturer-specific patches (currently, "StoreScp", "ClearCanvas", "MedInria", "Dcm4Chee", "SyngoVia", "AgfaImpax", and "EFilm2" are available). Please could you try each of them, in order to know whether one of this patch also solves your issue?

If none of these options works, the following pending issue in our bug tracker might provide an explanation:

 

I don't know what that number 0f3303.... is - if it should appear on Conquest or not.


It is the ID of the query/retrieve request that Orthanc Explorer made using the REST API of Orthanc. As an end-user of Orthanc, you can ignore this information that is internal to Orthanc.

Sébastien-

ilan...@gmail.com

unread,
Oct 31, 2016, 6:35:41 AM10/31/16
to Orthanc Users, ilan...@gmail.com
Dear Sebastien,
I tried all the possibilities one by one. In each case C-ECHO worked but an empty list was returned.
I looked into the bug report where it said there was success with an empty string in place of *. No such luck with me - still an empty string.
The only one I had real hopes for was StoreScp. I tried all the others just to be sure, but no luck on anything.

I suppose I could try to find out what is wrong with dcm4chee, and try that as well. The real trouble with dcm4chee is I can just see some poor physician in the field trying to install it - good luck, as they say. I did do it once a few years ago under Windows. Even then it wasn't easy.
Orthanc is almost trivial by comparison.

In any case, if there is anything I can do to help, please let me know. Salim will start to test Orthanc in his department in Toulouse. I'm not sure what environment he has there.

Thanks for all the help,
Ilan

ilan...@gmail.com

unread,
Oct 31, 2016, 7:00:33 AM10/31/16
to Orthanc Users, ilan...@gmail.com
Dear Sebastien,
Just to complete the picture I tried to push from Conquest to Orthanc.
That also works like a charm (using the default Generic).

So the only piece missing is to have Orthanc read Conquest.

Best regards,
Ilan

salim....@gmail.com

unread,
Oct 31, 2016, 9:49:28 AM10/31/16
to Orthanc Users
Dear Sébastien,

Just a message to present myself, i'm a nuclear medicin physician working with Ilan for almost 3 years now.

Our project is to build a free and open source pet ct viewer, project that Ilan started long time ago with beth israel hospital in Boston and I joint it because I needed specific quantification in pet/ct to calculate metabolic tumor volume.

We made a lot of developpement in our pet/ct viewer and we add a lot of functions with many display and quantification feature.

These last week we had a long discussion with Ilan because even if the viewer is pretty good we still miss Dicom capabilities to allows our user to connect our software to an existing dicom network.

I found your project on the internet some days ago and we figured the very high potential of using your software for dicom communication especially thanks to all the restapi you provide.

There are a lot of functions you made that i'm interessted in, of course all the dicom query / move etc function but also some unexpected functionalities like anonimization features (because our first goal is to provide a software tool for pet/ct processing in reasearch and we will need to share anonimized data).

However, this message is just to say that your software is a huge opportunity for us. By integrating your services with our software you should also get benefit for your project by bringing new users and new applications to your software.

Of course we will mention your software in our website and give all credit of dicom exchange features to your work that will have to be visible.


It is sad I didn't discover your work before because just few weeks ago i was working in Dijon which was not to far from Liège (now i'm relocating in Toulouse)

However thank you so much for your help, I let you continue your discussion with Ilan for that exciting project.

As soon as I will be in my new departement I will make some dicom testing (as a physician I have the easy part of the job bringing ideas and make testing, Ilan handles 100℅ of code writing).

Best regards,

Salim


Sébastien Jodogne

unread,
Oct 31, 2016, 12:48:33 PM10/31/16
to Orthanc Users, ilan...@gmail.com
Hello,

I have made tests against Conquest, and the transfers work fine, in both directions. 

For reference, you will find below the instructions to reproduce my test environment using Docker.


Terminal 1 - Configure and start Conquest

# sudo docker run --rm --entrypoint=cat wavedrift/docker-conquest /conquest/acrnema.map > /tmp/acrnema.map
# echo "ORTHANC localhost 4242 un" >> /tmp/acrnema.map
# sudo docker run --name conquest --rm -t -i -p 4242:4242 -p 8042:8042 -p 5678:5678 -p 8043:80 -v /tmp/acrnema.map:/conquest/acrnema.map:ro wavedrift/docker-conquest

The Conquest Web interface is then accessible at: http://localhost:8043/cgi-bin/dgate

Note that "ORTHANC" is added to the drop-down list of servers next to "Find patient".


Terminal 2 - Configure and start Orthanc

# sudo docker run --rm --entrypoint=cat jodogne/orthanc /etc/orthanc/orthanc.json > /tmp/orthanc.json

Edit "/tmp/orthanc.json" so that the "DicomModalities" section looks like:

  "DicomModalities" : {
    "conquest" : [ "CONQUESTSRV1", "localhost", 5678 ]
  },

Then start Orthanc, using the same network stack as Conquest (so that "localhost" is shared by both Orthanc and Conquest):

# sudo docker run --rm -v /tmp/orthanc.json:/etc/orthanc/orthanc.json:ro --net container:conquest jodogne/orthanc /etc/orthanc/ --verbose


Summary of the TCP ports that are in use:
Play with the Web interfaces, and you'll see everything working as expected. In particular, it is possible to query/retrieve the content of Conquest from Orthanc Explorer.

HTH,
Sébastien-

Sébastien Jodogne

unread,
Nov 2, 2016, 4:51:01 AM11/2/16
to Orthanc Users, salim....@gmail.com
Dear Salim,

Thanks for your feedback: I am delighted to read that Orthanc might prove useful to connect your PET/CT viewer to the DICOM network of any hospital.

This is especially nice to know that your work on nuclear medicine might bring Orthanc to a wider audience, starting from French hospitals such as Toulouse and Dijon.

The Orthanc project is of course happy to know that you will reference it on your Web site. Conversely, do not hesitate to ask inclusion on our list of references published on our own homepage:

I am looking forward to see how your project grows. Please keep us updated :)

Sincerely,
Sébastien-

salim....@gmail.com

unread,
Nov 2, 2016, 12:51:48 PM11/2/16
to Orthanc Users, salim....@gmail.com
Dear Sebastien,

Sure, we will give you updates,

Ilan is working on implementing your services in our viewer, we are going to enter in a development/testing/bug-fixing time for probably several weeks.

When we will have something stable we will announce it in our website and we will share our links on both websites.

Probably that we will have questions during that development time, so you will have updates anyway,

Very happy to start this collaboration, i'm sure that we can push both software in many places, starting with Dijon and Toulouse but also much further.

Sincerely,

Salim
Reply all
Reply to author
Forward
0 new messages