multi threading

  • Has Conquest developed a way to multi thread yet? I want to use just as a dicom router, but if it can't multi thread, I can't. I have about 30 sites sending in studies that have to route to my PACS and using first in, first out will be too slow. I need at least 10 threads at once. Also, can it do a "send as" for the AET?

  • Hi,

    Use importconverters (which do not support retrying). Use the 'channel *' option to forward, this will split the incoming connections over max 20 simultaneous multiple outgoing connections. See manual please. Also there is a 'org' clause to set the AET. If you 'destroy' as last command the routing does not store the information.


    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • Thank you very much for the info.

    My server has a 1 TB SSD drive. I have installed and tested 4 services. It also has a 4 TB raid configuration. I want all images stored in all mag devices to move automatically from MAG0 to MAG1.

    For example, I have one AET of "ZVISIONAHI". I setup a new folder on the raid "e:\ahimag2". I then edited the dicom.ini file to add this MAG device. After saving the .ini file and then closing and restarting the GUI, it put the information correctly in the GUI. However, I don't want it to use a standard of space left, I want it to automatically, at 3:00 am every day, to move all images from MAG0 to MAG1 no matter what the space is on the MAG0 device drive

    I put that in the dicom.ini file. Please look at the file as I uploaded it. I read the documentation very closely but I am not sure this is correct. If it is not correct, can you either tell me in the documentation where I can see example or what is the correct way to do it please?

  • I just changed it. I set it to "950000" as the threshold to move. However, where in the dicom.ini file can I specify the time to do it? By setting threshold to "950000" I am presuming that at the specified time, the program will check the space left (since it is a 1 TB drive, it will ALWAYS meet the criteria) and then move the images from MAG0 to MAG1. I just want it to do it once every 24 hours. 2:00 am is fine, but would like to know where the option is to control the time if I need or want to change it please.

    I attached the new dicom.ini as a txt file

  • Marcel, I don't know where to turn right now. I have been reading the manual for a week. I understand most of the concepts and instructions for setting up auto routing, but I am not confident I can do it right.

    I have uploaded a document. This explains how I have setup Conquest. It also explains how I need the routing to go. Is there anyone that is part of your team that can create a document with the all commands to accomplish this?

    I am a retired stand alone individual trying to help others and just don't have the experience in programming to do this with confidence.

  • Hi,

    The nightlymove setup (2 posts above) seems allright. It moves until storage on MAG0 is over 950GB to MAG1. I.e. it moves eveything to MAG1.

    Not sure how much data is involved, but the move process may be slow, becuase it will move over entire patients at a time, and queries to find those patients are a bit slow.


    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • About the forwarding. If you want to store the information that is forwarded you can best use an ExportConverter (runs after the image is stored). These do send over a single thread though!. The delayed ones (e.g. forward study) are a bit easier to setup. The non-delayed ones (forward to) have extra parameters to control how long the forwarding association stays open. The delayed forwarders have one parameter:

    So the delayed one works like e.g.:

    ExportConverters = 1

    ExportConverter0 = forward study compressed as JL to RSAPACS after 60 org %u

    This waits until a study is received and then starts sending a minute after the first image (older versions) or after the last image (1.4.15alpha). So one minute may be a bit short for the older versions. The AE is mimicking the caller (%u).

    You can also foward images before they are stored:

    ImportConverter0 = forward compressed as JL to RSAPACS org %u

    But this does not allow a delay.

    Hope this helps!


    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • Thanks much. Very helpful.

    One more thing, I have the need for adding an accession number to a study that comes into Conquest IF there is no accession number in dicom tag 0008,0050 is empty. Is this possible?

  • Sure,

    maybe best use lua (for readability and versatility), e.g. add to dicom.ini at end:


    ImportConverter0 = if Data.AccessionNumber=="" then Data.AccessionNumber = crc(Data.StudyInstanceUID) end

    Here I used a crc to create a number, but of course you can define your own algorithm.

    Make sure ImportConverter0, ImportConverter1 etc are only used once, [lua] is a section header and is needed only once.


    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • that worked perfectly. Can Conquest do data coercion? Like I want everything from 1 AET to add a prefix to an MRN, suffix to an accession, and change institution name BEFORE it routes it all out?

  • Marcel, the server keeps crashing and the service stops everytime I try to send data. It will start to receive and then stop within 5 seconds. No matter type of study (i.e., DR, CT, US) I send, no matter if I use compression or not. I check the services when it happens and it has stopped. I tried to use the "keep alive" and all it does is say restarted dead server, but the service does not restart. Bug log attached

  • also, I forgot to ask a question and tell you that the OS for this computer is Windows 10 PRO, XEON processor, 32 gigs ram, 1 TB SSD.

    Question, I tried sending 3 different types of studies at once (DR, US, CT) and it seems, what from what I can see, to only accept 1 at a time. Will it multi-thread incoming studies or only do 1 at a time? If this all works, there could be up to 50 studies at a time incoming across 4 instances of Conquest running. The sending devices will be sending using multi-threading, but I can control them so that they send to the Conquest AET but I don't want to slow them down. Right now they are set to send up to 10 at once

  • Hi,

    can you try sending one at a time as a test. There may be something not thread safe e.g. in the JS compressor.

    Edit: try UN

    Edit: try disable export converter for now

    Just to locate the issue


  • Hi,

    About data coercion, yes it can do that because the exportconverters can run a script on each exported image. The script can depend on the AET.


    ExportConverter0 = forward study compressed as JS to RSAPACS after 60 org %u script process.lua(%u)

    Some comments on your config:

    -- these are for direct forwarders e.g. 'forward compressed as JS to RSAPACS org %u'

    # Configuration of forwarding and/or converter programs to export DICOM slices

    ForwardAssociationLevel = STUDY

    ForwardAssociationCloseDelay = 5

    ForwardAssociationRefreshDelay = 3600

    ForwardAssociationRelease = 1

    ExportConverters = 1

    ExportConverter0 = forward study compressed as JS to RSAPACS after 60 org %u

    -- this is overruled by your 'after 60'

    ForwardCollectDelay = 60

    MaximumExportRetries = 0

    MaximumDelayedFetchForwardRetries = 0

    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • I missed you previous comments, sorry. After researching it more, I figured out why it was freezing. My fault. I forgot to change the receiving PACS incoming AET to reflect the test server IP address. So sorry. Using JS compression worked fine, as did sending several studies at once (CT, US, DR)

    So, down to final issue....Sending PACS seems to show that it is multi-threading incoming. Server status shows one at a time, but I believe that is because it has no way to show multi-threading. But outgoing PACS does show several connections at one time.

    I know earlier you said if we use Export Converters it only uses single thread. Since I need auto routing, there is no way to multi-thread with auto routing?

    Again, my apologies about not seeing that I did not setup the incoming PACS correctly.

  • BTW, do you have an example of how the script has to read for data coercion? I don't see anything in the manual about how to do it. For example, for an MRN, I need to add a prefix. One would be "AHI-". I know the dicom tag is 0010,0020, but how do I add the prefix to the MRN please. I have no idea what the commands are for Conquest to do that. I read the manual again, including the lua script information, but the actual command to add a prefix, add a suffix, and to change the institution name or refence to those dicom tags I could not find. I did a search in the document for "coercion" and nothing came up

  • Hi,

    Great to hear you solved the issue - crashes always worry me a lot.

    Currently the delayed export converters work on a single thread. You can try the non delayed ones which do multithread:

    ForwardAssociationLevel = STUDY

    ExportConverters = 1

    ExportConverter0 = forward compressed as JS to RSAPACS channel * org %u


    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • with non delayed, once the study is finished it will start right away? That might work. Have to put under a stress test to see.

    What about the data coercion questions please? No matter how much I read the manual, I can't find anything about data coercion or example of the commands. I am not familiar with "lua" at all. I am reading about it now but it will take me a lot of time to try to learn properly.

    Is there a way to add to dicom.ini file all the data coercion rules I will need? I will need a prefix rule, suffix rule, and institution name change rule.

    So, I just changed my commands exactly has you have in your last post. It starts to receive and then stops. I check the services, it has stopped. If I don't put "channel *" in there, it does receive fine with no crash or stopping of services, but it will not forward.

  • I take it back, it did finally forward, but it took a long time. And, of course, it only does 1 at a time. Is there a way to make the forwarding start sooner? I believe it took 5 minutes to start.

    Also, reading manual carefully, I see under the options section for scripting, it says that "Channel" option (showing both how to specify a channel number or use the "*") is only available for Import convertors. Am I misreading this? No matter what I do, if I use the "channel *" option, it freezes. I tried a number also. Same thing.