Conquest 1.5.0d released

  • Hi Conquest users and friends,


    This is the 1.5.0d release. It fixes some bugs (CGET) and improves the web interface functionality, using Apache or the built-in webserver.


    You can download the release here:


    http://natura-ingenium.nl/dicomserver/dicomserver150d.zip


    This is the corresponding Github commit for 1.5.0d:


    https://github.com/marcelvanhe…9b6669417163dc5c9852bd6e5


    As usual you can update by extracting dgate.exe or dgate64.exe and conquestdicomserver.exe, but also quite a few other files have changed - mainly in the web interface, lua code and installer. The web interface no longer required cgi, but uses PhP instead.


    The latest source code (1.5.0d+) can be browsed on: https://github.com/marcelvanherk/Conquest-DICOM-Server


    Please report bugs and successes!


    Marcel

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

    Edited 5 times, last by marcelvanherk: Corrected links ().

  • This is the buglist, starting with leftover bugs from earlier versions, per category:


    GUI bugs

    G1) browse tab does not work if user of server service and server gui are differerent.


    Web interface bugs

    DICOM Communication bugs

    C1) Multiple instance matching incomplete


    Installer bugs or limitations (low priority)

    I1) last line of dicom.ini does not read if no CR - futured

    I2) web installer should copy OHIF (in github) and luiz html folders and compile servertask

    I3) Web installer on windows does not offer a 'regen' by itself

    I4) Fedora uses /var/www, and nohup has an issue. Therefore provide specific web install scripts for other linux flavours, e.g. fedora.sh. Fedora also requires "sudo setenforce Permissive" for the web server and install to work; also acrnema.map must be copied locally to the cgi-bin/newweb folder rather than pointing to the server folder.

    I5) Oracle linux issues see below; add mysql/mariadb option

    I6) Running ConquestDicomserver from wine with dgate as linux service issues, replace c: temp filenames with z:/


    Unconfirmed bugs:

    U1) I was also expecting DicomObject:Read('stu\ser\sop') to work with virtual servers but I tested it again and sadly no luck there

    U2) Show header in wadoviewer (wado text) open sometimes as dgate.exe downloads

    U3) App/newweb may add HTML header to zip files if using userlogin (not confirmed)


    Below ---- newly found bugs for 1.5.0c will be collected (also see above)

    N1) Too long queries do not give a proper error message in GUI

    N2) Dicom printing from script or gui fails for compressed images

    N3) print text from lua should fail gracefully for too long output

    N4) Internal networking is unreliable on Centos7

    N5) data processed though incoming has CallingAE of 16 spaces in ImportConverter

    N6) progressbar in GUI fails to close on very short operations from browser (fix on Git)

    N7) export:xx,,,,binary does not work

    N8) Change or modify should not allow empty patientIDs

    N9) Update license to Apache

    N10) The GUI ignores ACRNemaMap in dicom.ini

    N11) The supplied postgress DLL uses a deprecated login method can use libcrypto-3-x64.dll; libiconv-2.dll; libintl-9.dll; libpq(64).dll; libssl-3-x64.dll; libwinpthread-1.dll from recent release

    N12) I think autodelete only works when there is a single MAG device (-ff option).

    ----- 1.5.0d release -----

    N13) Weasis issue: \r\n missing in dicomweb multipart message before boundary (fix on Git)

    N14) Weasis issue: Ladle server responds with 200/OK should be 200 OK (fix on Git)

    N15) Ladle started in wrong folder under Linux (fix on Git)

    N16) linux/webviewer script should not stop ladle (fix on Git)

    N17) Provide sample links for Weasis in newweb/dicom.ini (fix on Git)

    N18) Update Linux prerequisites for PhP8.1 (fix on Git)

    N19) dicomread example overview.lua crashes server on Linux with segmentation fault; must pass SOPInstanceUID (fix on Git)

    N20) the filenames in overview.lua are only suitable for windows

    N21) print(servercommand('display_status:')) crashes on Linux if dgate runs as dgate -v (rights problem, fix on Git)

    N22) update outdated or unused viewer start files (e.g. weasis)

    N23) remove cgi-bin web interface, only support php

    N24) support minimal download eg without sources

    N25) deleting e.g. a RTPLAN from a study does not update StudyModality. Will not fix.

    N26) web installer must be made to run on PhP, as cgi is no longer mandated (fix on Git)

    N27) e.g. ImportConverter0 = process with C:\Windows\System32\ping.exe does not remove temporary file (fix on Git)

    N28) provide script to setup linux prerequisites, taking php version into account (fix on Git)

    N29) Crash Postgres on server startup (fix on Git)

    N30) conquest.service should no longer set StandardOutput=syslog and StandardError=syslog (fix on Git)

    N31) Update mariadb doc in linuxmanual; sudo apt install libmariadb-dev; grant all privileges on *.* to 'conquest';set password for conquest = password('conquest') (fix on Git)

    N32) apt install mariadb-server iso mariadb (fix on Git)

    N33) The clonedb: test command requires VirtualServerFor0 to be defined

    N34) installer.lua fails if /usr/sbin is not on the path (apache2 a2query) (fix on Git)

    N35) installer.lua does not work for dbaseiii and null (fix on Git)

    N36) anonymizer does not process stage with # (MD5 non-reversible mapping) (fix on Git)

    N37) download location seems broken

    N38) readdicom(name) crashes server (fix on Git)

    N39) setting port in GUI should update config.php files (it does)

    N40) #stage anonymisation generates UIDs with 0 following . which is invalid (fix on Git)

    N41) document that you must pass empty string (not nil) to changeuid to parameter if you want to use stage

    N42) Added a IgnoreRewrite flag to limit processing of existing files (fix on Git)

    N43) "save to" and export: treat private tags different from normal SaveToDatabase (fix on Git)

    N44) Print more information after parsing error (fix on Git)

    N45) Random ***No valid presentation contexts/transfer syntax found in 0 candidates, in dicomget from web interface

    N46) Replace 200/OK with 200 OK in Ladle web server response (fix on Git)

    N47) Dockerfile is php version dependent; replace 7.4 by * (fix on Git)

    N48) Photometric interpretation fix by Luis Incoll (fix on Git)

    N49) Need to add datatype OL for cardiac data from Michiel Jaspers (fix on Git)

    N50) * in query does not match empty data; lua:if Data.AccessionNumber=='*' then Data.AccessionNumber = '' end

    N51) series and studyviewer: lncoll without WindowCenter/WindowWidth use BitsStored, with a default of 11 bits (fix on Git)

    N52) Luis has improved the acrnema.map parser for full C-style comments, to be merged. (fix on Git)

    N53) FilenameSyntax = lua:dofile('makefilename.lua') loses a few characters at the end of the statement (fix on Git)

    N54) Add n5 compressor with reduced bit depth and air trunctation; add flag to allow N compression of DCM files (on Git)

    N55) Sort on imagenumber fails on GUI (it does work, it just does not reverse)

    N56) http://127.0.0.1/api/dicom/rs/studies/<UID>/series/<UID>/instances/<UID>/metadata. For the tag 3004, 000E (DoseGridScaling), I get the value 0 (Postman API result). (fix on Git)

    N57) User had difficulty blocking C-GET functionality. Confirmed 1.2.840.10008.5.1.4.1.2.2.3 is not checked in dgatesop.lst

    N58) group lenghts of groups with sequences are not stored correctly (lsp). Suggest to no longer store group lenghts in files

    N59) NightlyCleanThreshold not in dgate code next to NightlyCleanThreshold; same for MAGDeviceThreshHold, MAGDeviceFullThreshHold, IgnoreMAGDeviceThreshHold (fix on Git)

    N60) The UIDPrefix can be too long whan installing server (fix on Git)

    N61) by just adding this if (*q == '+') q++; after Line 7847 (Please verify this!!!) (fix on Git)


    Please tell me of any bugs you find.

  • This is a placeholder for feature requests


    1 Add: " { 0x0010, 0x21d0, "LastMenstrualDate", 8, SQL_C_DATE, DT_DATE, "---" }, "

    A bit reluctant as this may require a database update for updaters

    2 tag editor


    Marcel

  • If you want to install a reduced version of server 1.5.0d on Windows this is a list files of that are needed with full functionality:


  • If you want to try Conquest on Linux, this is an absolute minimal automatic install script:


    Code
    sudo apt install lua5.1
    wget https://raw.githubusercontent.com/marcelvanherk/Conquest-DICOM-Server/master/install/installer.lua
    lua5.1 installer.lua


    It will then ask to install prerequisites. If you allow that, then after it completes you must again run:


    Code
    lua5.1 installer.lua


    It will ask for an AE title (server folder name); then download all; compile it; configure it and install it.

    Afterwards the DICOM server and its web server will run.


    Note that the script installs or assumes Apache web server.

    This is what it looks like, with user input in bold:


    >lua5.1 installer.lua

    This will install Conquest dicom server and its prerequisites - continue? y/n: y

    Checking prerequisites....

    [OK] Operating system: GNU/Linux

    [OK] GNU Make 4.3

    [OK] g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

    [OK] gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0

    [OK] 7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21

    [OK] UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

    [OK] git version 2.34.1

    [OK] Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio

    [OK] Apache Server version: Apache/2.4.52 (Ubuntu)

    [OK] Apache PHP php8.1 (enabled by maintainer script)

    [OK] lua-socket

    Server not found - download Conquest DICOM server? y/n: y

    Give server AE (also folder name) (CONQUESTSRV1): CONQUESTSRV3

    Cloning into 'CONQUESTSRV3'...

    remote: Enumerating objects: 4051, done.

    remote: Counting objects: 100% (994/994), done.

    remote: Compressing objects: 100% (384/384), done.

    remote: Total 4051 (delta 637), reused 914 (delta 573), pack-reused 3057

    Receiving objects: 100% (4051/4051), 188.68 MiB | 8.09 MiB/s, done.

    Resolving deltas: 100% (2308/2308), done.

    [OK] Server folder: /home/marcel/test/CONQUESTSRV3

    Compile the server (this takes a while) y/n: y

    [OK] Compiled jpeg library

    [OK] Compiled openjpeg library (jpeg2000)

    [OK] Compiled charls library (jpegLS)

    [OK] Compiled sqlite3 library (database)

    [OK] Compiled dgate application (server core)

    [OK] compiled servertask (for web api)

    Give sudo password for installation operations: xxxxxx

    [OK] server compiled

    Failed to stop CONQUESTSRV3.service: Unit CONQUESTSRV3.service not loaded.

    Give server port (5678): 5680

    Configure the server? y/n: y

    [OK] server configured

    [OK] web server already configured, delete /var/www/html/app and /api to reconfigure

    Regen the database, this can take a long time if there is loads of data? y/n: y

    Dropping Existing tables (if-any)

    Worklist is empty

    Dropping worklist

    Dropping other tables

    WorkList Database

    Patient Database

    Study Database

    Series Database

    Image Database

    Regen Database

    Step 1: Re-intialize SQL Tables

    ***SQLITEExec error: no such table: DICOMWorkList

    ***SQLITEExec error: no such table: DICOMWorkList

    ***Failed SQLITEExec : DROP TABLE DICOMWorkList

    ***SQLITEExec error: no such table: DICOMPatients

    ***Failed SQLITEExec : DROP TABLE DICOMPatients

    ***SQLITEExec error: no such table: DICOMStudies

    ***Failed SQLITEExec : DROP TABLE DICOMStudies

    ***SQLITEExec error: no such table: DICOMSeries

    ***Failed SQLITEExec : DROP TABLE DICOMSeries

    ***SQLITEExec error: no such table: DICOMImages

    ***Failed SQLITEExec : DROP TABLE DICOMImages

    ***SQLITEExec error: no such table: UIDMODS

    ***Failed SQLITEExec : DROP TABLE UIDMODS

    Step 2: Load / Add DICOM Object files

    Regen Device 'MAG0'

    [Regen] /home/marcel/test/CONQUESTSRV3/data/0009703828/1.3.46.670589.5.2.10.2156913941.892665339.860724_0001_003000_14579035620001.dcm -SUCCESS

    [Regen] /home/marcel/test/CONQUESTSRV3/data/0009703828/1.3.46.670589.5.2.10.2156913941.892665339.860724_0001_002000_14579035620000.dcm -SUCCESS

    Regeneration Complete


    Install and start the server? y/n: y

    Created symlink /etc/systemd/system/multi-user.target.wants/CONQUESTSRV3.service → /etc/systemd/system/CONQUESTSRV3.service.

    ● CONQUESTSRV3.service - conquest dicom server service

    Loaded: loaded (/etc/systemd/system/CONQUESTSRV3.service; enabled; vendor preset: enabled)

    Active: active (running) since Sat 2023-09-09 23:47:42 BST; 303ms ago

    Main PID: 12723 (dgate)

    Tasks: 1 (limit: 9519)

    Memory: 5.0M

    CGroup: /system.slice/CONQUESTSRV3.service

    └─12723 /home/marcel/test/CONQUESTSRV3/dgate -w/home/marcel/test/CONQUESTSRV3 -v


    Sep 09 23:47:42 Paradigit systemd[1]: Started conquest dicom server service.

    Sep 09 23:47:42 Paradigit conquest-server[12723]: DGATE (1.5.0d, build Sat Sep 9 23:47:15 2023, bits 64) is running as>

    Sep 09 23:47:42 Paradigit conquest-server[12723]: Database type: built-in SQLite driver

    q

    Enter web interface? y/n:y

  • Code
    Good morning marcelvanherk, thank you for what you do.
    A question about this release...
    Is it possible to enable image retrieval without declaring the dicom hosts on the acrnema.map?
    I would like to enable retrive without any restrictions, is it possible to do this by placing * on the acrnema.map?
    Thank you
  • Hi,


    acrnema.map is not about restrictions (that is dgatesop.lst), but only to lookup the IP address and port of an AE.


    Solution 1: (for C-MOVE) if you control the AE of the host, you can use e.g. the V* in acrnema.map:


    Give your host e.g. AE = V127.0.0.1 then the line:


    V* * 1234 un


    Defines V127.0.0.1 as:


    V127.0.0.1 127.0.0.1 1234 un


    Solution 2: use a C-GET request.


    Solution 3: use DICOMWeb access.


    Solution 4: (for C-MOVE) use a script to add a client to acrnema.map as needed.


    Marcel

  • Code
    I'm sorry I did not understand.
    Let me start by saying that I have to use C-Move, how should I configure dgatesop.lst and acrnema.map if for example I have to enable cmove for the entire 192.168.1.x class? The goal is that all viewers of the 192.168.1.x class can retrieve without each of them being declared on the acrnema.map
  • This is possible as explained in the above reply in solution 1 and 4.


    Can you define the AE of the viewers to encode the .x in your example? E.g. AE=viewer.1 for 192.168.1.1?


    Then define in acrnema.map:


    viewer.* 192.168.1.* 1234 un


    to do the trick


    Marcel

  • Store images into database speed test in 2023 (old hardware with modern SSD, Debian 12, database on same hardware)

    Database test without transferring images. 4.3 million records transferred. Average speed as function of transfer association.


    NULL driver: 4200 records / s

    sqlite sync off: 2035 records / s

    sqlite sync on: 29 records/s

    postgres: 202 records / s

    postgres sync off: 600 records / s

    mariadb (innodb): 225 records / s

    mariadb (myisam): 670 records / s

    dbaseiii: 550 records / s

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

    Edited 4 times, last by marcelvanherk: Added myisam ().

  • Hello! First time posting here. My department's MRI Facility has a Siemens Skyra 3T and Prisma 3T running VE11C. Our IT support set up Conquest years ago for our DICOM transfers. We will soon be upgrading both machines to the XA platform (XA30). The new platform uses "Enhanced Dicoms".


    So I'm writing in to see if the latest version of Conquest will be able to transfer these new Dicoms / has anyone used Conquest with an XA Siemens MRI to verify it works ? Any information I can provide to our IT team would be tremendously helpful.


    Thank you!
    Mark Pinsk

    Princeton U.

  • Thanks for giving the community a great application.


    A feature request for the server would the ability to select if a file already exiting in the Database can be replaced or not. This will save computer resources by not having to overwrite data that are duplicates.

  • In the announcement...

    This is the 1.5.0d release. It fixes some bugs (CGET) and improves the web interface functionality, using Apache or the built-in webserver.


    You can download the release here:


    http://natura-ingenium.nl/dicomserver/dicomserver150d.zip


    The link, "http://natura-ingenium.nl/dicomserver/dicomserver150d.zip" is actually a link to dicomserver150c.zip, not ...150d.zip


    Code
    <a href="http://natura-ingenium.nl/dicomserver/dicomserver150c.zip">
    http://natura-ingenium.nl/dicomserver/dicomserver150d.zip</a>


    ---Shane

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!