Compression and routing problem

  • Hi!

    I'm struggling with the following situation:

    Two sites (A and B) connected by a 10 Mbps symmetric link.

    Site A: two modalities (Elscint Twin CT Scanner and Philips Intera 0.5T MRI Scanner).

    Site B: two DICOM storage nodes: a PACS (Carestream VuePACS) and a Disc Publisher (Codonics Virtua).

    Due to the small bandwith, the image sending from A to B is painfully slow. (Upgrading the link is impossible right now due to ISP restrictions).

    So I mounted Conquest in site A acting like a dicom router: compressing and sending studies to their corresponding destination.

    However, if I use JPG-2000 or JGP-LS for image compression, Conquest fails with a "OPENJP2: compress input data out of range" error message.

    So I ended up using JPEG-Lossless instead (that works). The problem is, that neither the PACS nor the DiscPublisher recognize the compression type, so I had to install a second "Conquest-Router" in site B that basically does the reverse operation, that is, receives compressed images from Router-A and send them uncompressed to each node in site B.

    I set up this so far (names are fictitious as an example):

    SITE A

    - Both modalities have the site B destinations with their respective AE Titles, but the IP address and port of Router A instead.

    - Conquest 1.4.19b running in Windows 7 with SQLite DB (and cleanup at night) and listen at 5678.


    ROUTER_A 5678 un

    PACS <ip_addr_router_B> 5678 j2

    DISC_PUB <ip_addr_router_B> 5678 j2


    ExportConverters = 4

    ExportCallingAE0 = CT_SCANNER

    ExportCalledAE0 = PACS

    ExportConverter0 = forward compressed as j2 to PACS org CT_SCANNER

    ExportCallingAE1 = MRI_SCANNER

    ExportCalledAE1 = PACS

    ExportConverter1 = forward compressed as j2 to PACS org MRI_SCANNER

    ExportCallingAE2 = CT_SCANNER

    ExportCalledAE2 = DISC_PUB

    ExportConverter2 = forward compressed as j2 to DISC_PUB org CT_SCANNER

    ExportCallingAE3 = MRI_SCANNER

    ExportCalledAE3 = DISC_PUB

    ExportConverter3 = forward compressed as j2 to DISC_PUB org MRI_SCANNER

    SITE B

    - Conquest 1.4.19b running in Windows 7 without database (null).


    ROUTER_B 5678 un

    PACS <ip_addr_PACS> 2104 un

    DISC_PUB <ip_addr_DISCPUB> 104 un


    ImportConverter0 = ifequal “%c”, “PACS”; { forward to PACS channel *; destroy;}

    ImportConverter1 = ifequal “%c”, “DISC_PUB”; { forward to DISC_PUB channel *; destroy; }

    The above works and the transfer speeds increased considerably! ...but the problem that arise now is:

    How to make Conquest Routers "AE Title-transparent"? (in the sense that the PACS and DiscPublisher believe they are communicating directly with the modalities).

    Looking at the studies that are stored in the PACS, it seems that the calling AET is modified and replaced with the conquest AET (ie: ROUTER_B). How can I change that so the original (ie: the modalities) AET remains ? ¿It's that possible?

    And why does Conquest fail to compress with that message? Don't know where to start looking...

    I read the DICOM Conformance Statement of VuePACS and says it supports JPG-2000 maybe by solving that I could spare the Conquest in site B and avoid the problem of the AET at all.

    Any help is appreciated. Thanks in advance! (and sorry my bad english, i'm from Argentina).

  • Good work,

    data out of range happens when the header says it is 12 bits, and higher values are used. These cannot be compressed hence the error message. Futher, the 'forward' command ORG clause can also be used in server B where you can pass the AE to be used, e.g. the receiving AE. You should be able to use that.



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

  • Thanks for the quick reply Marcel!

    I'll check the header of the images from that modalities to see what is going on with the bit depth.

    Regarding the rules, yes, I thought about adding the ORG clause in the ImportConverter rules, but in that case, how many rules should I create? Four rules? Because I would have to identify where each image comes from and make two chained ifequal-blocks. That is, first compare the calling AE to see the origin and then compare again, but this time the called AE to to check where its going. And the append the ORG clause with the modality name. Right ?

    Or maybe I can just to make two rules like above and simply use a variable?

    I mean something like this:

    ImportConverter0 = ifequal “%c”, “PACS”; { forward to PACS channel * ORG "%u"; destroy;}

    ImportConverter1 = ifequal “%c”, “DISC_PUB”; { forward to DISC_PUB channel * ORG "%u"; destroy; }

    Thanks again!