Posts by markpearson

    According to the GE Genie dicom conformance statement there is a private storage sop so you could add the following line to dgatesop.lst


    Code
    GENIEPrivateStorage 1.2.840.113619.4.27 sop


    Make sure you only use spaces, not tabs between elements.

    Here is a solution you may wish to use. It is a perl program that generates a list of study or series UIDs based on modaliity and then feeds each one to --deletestudy or --deleteseries.


    If you don't already have perl you can get a free package from Activestate http://www.activestate.com/Products/activeperl/.


    Copy the following program and call it delete_by_modality.pl

    Code
    ## Create a list of study or series UIDs that match the given modality# and optionally delete them.# eg. delete_by_modality.pl --modality CT --series # Author: Mark Pearson markp@nucmed.crg.cs.nsw.gov.au#use Getopt::Long;sub rtrim;sub getStudyList;sub getSeriesList;my $dgateHome = 'C:\Conquest';my $dgate = "dgate.exe";my $modality = '';my $matchSeries = 0;my $matchStudy = 0;my $verbose = 0;my $delete = 0;my $help = 0;my $print = 0;my $test = 0;my $found = 0;my $deleted = 0;my $limit = 0;my @uids = ();$ret = &GetOptions( "modality=s" => \$modality, "limit=i" => \$limit, "study" => \$matchStudy, "series" => \$matchSeries, "delete" => \$delete, "print" => \$print, "verbose" => \$verbose, "noaction" => \$test, "help" => \$help );if (! $ret || $help) { my $useage = "USAGE: delete_by_modality --options\n"; $usage .= "Options:\n"; $usage .= "\t--modality=XX\t\tfind all uids matching the modality XXX (manditory)\n"; $usage .= "\t--study or --series\tfind study or series UIDs (manditory)\n"; $usage .= "\t--delete\t\tdelete UIDs found.\n"; $usage .= "\t--noaction\t\tdo all actions except delete. Best with --verbose\n"; $usage .= "\t--print\t\tPrint a list of the UIDs found\n"; $usage .= "\t--limit=NN\t\tFind at most NN matches\n"; $usage .= "\t--verbose\t\tShow more detail of actions\n"; die $usage;}if (length($modality) == 0) { die "ERROR: No modality specified. Use --modality=XXX\n";}if ($matchSeries && $matchStudy) { die "ERROR: Specify --study or --series, not both\n";}chdir $dgateHome or die "ERROR: could not cd to $dgateHome\n";;if ($matchStudy) { print "StudyUIDs that match modality $modality\n" if ($verbose); @uids = getStudyList($modality, $limit); foreach $uid (@uids) { print "$uid\n" if ($print); $found++; }}if ($matchSeries) { print "SeriesUIDs that match modality $modality\n" if ($verbose); @uids = getSeriesList($modality, $limit); foreach $uid (@uids) { print "$uid\n" if ($print); $found++; }}print "$found UIDs found\n";if ($delete && $found == 0) { die "WARNING: No UIDs found to delete\n";}if ($delete && $matchStudy) { foreach $uid (@uids) { $cmd = $dgate." --deletestudy:\"".$uid."\""; if ($verbose) { print "Call $cmd\n"; } if (! $test) { my $resp = `$cmd`; $deleted++; } }}if ($delete && $matchSeries) { foreach $uid (@uids) { $cmd = $dgate." --deleteseries:\"".$uid."\""; if ($verbose) { print "Call $cmd\n"; } if (! $test) { my $resp = `$cmd`; $deleted++; } }}print "$deleted UIDs deleted\n";if ($regen) { $cmd = $dgate." --initializetables:"; if ($verbose) { print "Call $cmd\n"; } my $resp = `$cmd`; $cmd = $dgate." --regen:"; if ($verbose) { print "Call $cmd\n"; } my $resp = `$cmd`;}exit;sub getStudyList($) { my ($mod, $lim) = @_; if ($lim) { $cmd = $dgate." --query2:\"DICOMStudies|StudyInsta|StudyModal = '".$mod."'|%s|$lim\""; } else { $cmd = $dgate." --query:\"DICOMStudies|StudyInsta|StudyModal = '".$mod."'|%s\""; } if ($verbose) { print "Call $cmd\n"; } my $resp = `$cmd`; my @suids = split("\n", rtrim($resp)); return @suids;}sub getSeriesList($) { my ($mod, $lim) = @_; if ($lim) { $cmd = $dgate." --query2:\"DICOMSeries|SeriesInst|Modality = '".$mod."'|%s|$lim\""; } else { $cmd = $dgate." --query:\"DICOMSeries|SeriesInst|Modality = '".$mod."'|%s\""; } if ($verbose) { print "Call $cmd\n"; } my $resp = `$cmd`; my @suids = split("\n", rtrim($resp)); return @suids;}# Right trim function to remove trailing whitespacesub rtrim { my ($string) = @_; $string =~ s/\0//g; $string =~ s/\s+$//; return $string;}


    If conquest is not installed in the default location the variable $dgateHome must be adjusted.


    To run the program, open a command shell and type in

    Code
    delete_by_modality.pl --modality CT --series --print1.2.840.113704.1.111.5700.1193965940.89999.9999.7.1196035999.2501.2.840.113704.1.111.4628.1193960088.201.2.840.113704.1.111.5076.1155781949.81.2.840.113704.1.111.5076.1155781894.41.2.840.113704.1.111.2664.1156723230.111.2.840.113704.1.111.5296.1156813228.87 UIDs found0 UIDs deleteddelete_by_modality.pl --modality CT --series --delete7 UIDs found7 UIDs deleted


    To find out what actions wouild be taken without deleting anything add the options --verbose --noaction.


    If there are a very large number of UIDs the program may run out of memory. In that case use the --limit option to restrict the number UIDs found.


    While testing on linux with conquest 1412c I found that if the dabase is Mysql the files were deleted but the database did not update and a manual database re-initialization was necessary. Neither dbase or postgres had these problems.


    To use the program on linux add the location the the perl binary to the top of the program and modify $dgateHome and $dgate

    Perl
    #!/usr/bin/perl
    #
    # Create a list of study or series UIDs that match the given modality
    .....
    my $dgateHome = '/usr/local/conquest/postgres';
    my $dgate = "./dgate";
    .....

    I just wanted to post an update of my analysis of this problem. My theory that the cfind demographics should be returned as LittleEndianImplicit is incorrect. I tried connecting to different dicom server that gave a correct response as LittleEndianExplicit.


    If I caputre data with wireshark from the two servers using LittleEndianExplicit it is able to decode the data from the other server but not from conquest.


    If I am able to track down the source of the problem I'll post it with a new subjet title.

    The data used to populate the database tables comes from the dicom header in each file and must be extracted, formatted and inserted into the database by a dicom processing program, in this case conquest.


    Mysql and other database programs only know how to process SQL (database language) commands.

    After trying to read and understand the DICOM standard part 5 I have a possible explanation of the LittleEndianExplicit issue. In section 7.3 dealing with byte ordering there is a note as follows: Note:

    Quote

    The Command Set structure as specified in PS 3.7 is encoded using the Little Endian Implicit VR Transfer Syntax.


    I think this means that the entire cfind exchange must use LittleEndianImplicit.


    When LittleEndianExplicit is available dcmtk cfind returns the following:

    Code
    findscu -d --study --key 0008,0052="STUDY" --key 0010,0010 --key 0010,0020 --key 0008,0020 --call TRAEKIPG2 127.0.0.1 5678Request Parameters:Our Implementation Class UID: 1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID:Their Implementation Version Name:Application Context Name: 1.2.840.10008.3.1.1.1Calling Application Name: FINDSCUCalled Application Name: TRAEKIPG2Responding Application Name: resp AP TitleOur Max PDU Receive Size: 16384Their Max PDU Receive Size: 0Presentation Contexts: Context ID: 1 (Proposed) Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel Proposed SCP/SCU Role: Default Accepted SCP/SCU Role: Default Proposed Transfer Syntax(es): =LittleEndianExplicit =BigEndianExplicit =LittleEndianImplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneConstructing Associate RQ PDUPDU Type: Associate Accept, PDU Length: 190 + 6 bytes PDU header 02 00 00 00 00 be 00 01 00 00 54 52 41 45 4b 49 50 47 32 20 20 20 20 20 20 20 46 49 4e 44 53 43 55 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 15 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 33 2e 31 2e 31 2e 31 21 00 00 1b 01 00 00 00 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 50 00 00 3e 51 00 00 04 00 00 40 00 52 00 00 22 31 2e 32 2e 38 32 36 2e 30 2e 31 2e 33 36 38 30 30 34 33 2e 32 2e 31 33 35 2e 31 30 36 36 2e 31 30 31 55 00 00 0c 31 2e 34 2e 31 32 2f 4f 54 48 45 52Association Parameters Negotiated:Our Implementation Class UID: 1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID: 1.2.826.0.1.3680043.2.135.1066.101Their Implementation Version Name: 1.4.12/OTHERApplication Context Name: 1.2.840.10008.3.1.1.1Calling Application Name: FINDSCUCalled Application Name: TRAEKIPG2Responding Application Name: TRAEKIPG2Our Max PDU Receive Size: 16384Their Max PDU Receive Size: 16384Presentation Contexts: Context ID: 1 (Accepted) Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel Proposed SCP/SCU Role: Default Accepted SCP/SCU Role: Default Accepted Transfer Syntax: =LittleEndianExplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneDIMSE Command To Send:# Dicom-Data-Set# Used TransferSyntax: UnknownTransferSyntax(0000,0000) UL 0 # 4, 1 CommandGroupLength(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel # 28, 1 AffectedSOPClassUID(0000,0100) US 32 # 2, 1 CommandField(0000,0110) US 1 # 2, 1 MessageID(0000,0700) US 2 # 2, 1 Priority(0000,0800) US 1 # 2, 1 DataSetTypeDIMSE sendDcmDataset: sending 88 bytesDIMSE sendDcmDataset: sending 38 bytesDIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel # 28, 1 AffectedSOPClassUID(0000,0100) US 32800 # 2, 1 CommandField(0000,0120) US 1 # 2, 1 MessageIDBeingRespondedTo(0000,0800) US 258 # 2, 1 DataSetType(0000,0900) US 65280 # 2, 1 StatusDIMSE receiveFileData: 82 bytes read (last: YES)RESPONSE: 1 (Pending)# Dicom-Data-Set# Used TransferSyntax: LittleEndianExplicit(0008,0020) UN 31\39\39\38\30\34\31\34 # 8, 1 StudyDate(0008,0052) UN 53\54\55\44\59\20 # 6, 1 QueryRetrieveLevel(0010,0010) UN 48\45\41\44\20\45\58\50\32\20 # 10, 1 PatientsName(0010,0020) UN 30\30\30\39\37\30\33\38\32\38 # 10, 1 PatientID--------DIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel # 28, 1 AffectedSOPClassUID(0000,0100) US 32800 # 2, 1 CommandField(0000,0120) US 1 # 2, 1 MessageIDBeingRespondedTo(0000,0800) US 257 # 2, 1 DataSetType(0000,0900) US 0 # 2, 1 Status


    Part of the data sent captured by wireshark looks like this:

    Code
    0000 00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00 ........ ......E.0010 00 f6 8b ea 40 00 40 06 b0 15 7f 00 00 01 7f 00 ....@.@. ........0020 00 01 16 2e c3 3f c1 60 5e 48 c1 7f 8e 8c 80 18 .....?.` ^H......0030 02 11 fe ea 00 00 01 01 08 0a 07 b1 d7 35 07 b1 ........ .....5..0040 d7 35 04 00 00 00 00 58 00 00 00 54 01 02 08 00 .5.....X ...T....0050 20 00 55 4e 00 00 08 00 00 00 31 39 39 38 30 34 .UN.... ..1998040060 31 34 08 00 52 00 55 4e 00 00 06 00 00 00 53 54 14..R.UN ......ST0070 55 44 59 20 10 00 10 00 55 4e 00 00 0a 00 00 00 UDY .... UN......0080 48 45 41 44 20 45 58 50 32 20 10 00 20 00 55 4e HEAD EXP 2 .. .UN0090 00 00 0a 00 00 00 30 30 30 39 37 30 33 38 32 38 ......00 0970382800a0 04 00 00 00 00 5e 00 00 00 5a 01 03 00 00 00 00 .....^.. .Z......00b0 04 00 00 00 4c 00 00 00 00 00 02 00 1c 00 00 00 ....L... ........00c0 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 1.2.840. 10008.5.00d0 31 2e 34 2e 31 2e 32 2e 32 2e 31 00 00 00 00 01 1.4.1.2. 2.1.....00e0 02 00 00 00 20 80 00 00 20 01 02 00 00 00 01 00 .... ... .......00f0 00 00 00 08 02 00 00 00 01 01 00 00 00 09 02 00 ........ ........0100 00 00 00 00 ....


    When LittleEndianExplicit is not available the following is produced:

    Code
    findscu -d --study --key 0008,0052="STUDY" --key 0010,0010 --key 0010,0020 --key 0008,0020 --call TRAEKIPG2 127.0.0.1 5678Request Parameters:Our Implementation Class UID: 1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID:Their Implementation Version Name:Application Context Name: 1.2.840.10008.3.1.1.1Calling Application Name: FINDSCUCalled Application Name: TRAEKIPG2Responding Application Name: resp AP TitleOur Max PDU Receive Size: 16384Their Max PDU Receive Size: 0Presentation Contexts: Context ID: 1 (Proposed) Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel Proposed SCP/SCU Role: Default Accepted SCP/SCU Role: Default Proposed Transfer Syntax(es): =LittleEndianExplicit =BigEndianExplicit =LittleEndianImplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneConstructing Associate RQ PDUPDU Type: Associate Accept, PDU Length: 190 + 6 bytes PDU header 02 00 00 00 00 be 00 01 00 00 54 52 41 45 4b 49 50 47 32 20 20 20 20 20 20 20 46 49 4e 44 53 43 55 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 15 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 33 2e 31 2e 31 2e 31 21 00 00 1b 01 00 00 00 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 50 00 00 3e 51 00 00 04 00 00 40 00 52 00 00 22 31 2e 32 2e 38 32 36 2e 30 2e 31 2e 33 36 38 30 30 34 33 2e 32 2e 31 33 35 2e 31 30 36 36 2e 31 30 31 55 00 00 0c 31 2e 34 2e 31 32 2f 4f 54 48 45 52Association Parameters Negotiated:Our Implementation Class UID: 1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID: 1.2.826.0.1.3680043.2.135.1066.101Their Implementation Version Name: 1.4.12/OTHERApplication Context Name: 1.2.840.10008.3.1.1.1Calling Application Name: FINDSCUCalled Application Name: TRAEKIPG2Responding Application Name: TRAEKIPG2Our Max PDU Receive Size: 16384Their Max PDU Receive Size: 16384Presentation Contexts: Context ID: 1 (Accepted) Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel Proposed SCP/SCU Role: Default Accepted SCP/SCU Role: Default Accepted Transfer Syntax: =LittleEndianExplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneDIMSE Command To Send:# Dicom-Data-Set# Used TransferSyntax: UnknownTransferSyntax(0000,0000) UL 0 # 4, 1 CommandGroupLength(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel # 28, 1 AffectedSOPClassUID(0000,0100) US 32 # 2, 1 CommandField(0000,0110) US 1 # 2, 1 MessageID(0000,0700) US 2 # 2, 1 Priority(0000,0800) US 1 # 2, 1 DataSetTypeDIMSE sendDcmDataset: sending 88 bytesDIMSE sendDcmDataset: sending 38 bytesDIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel # 28, 1 AffectedSOPClassUID(0000,0100) US 32800 # 2, 1 CommandField(0000,0120) US 1 # 2, 1 MessageIDBeingRespondedTo(0000,0800) US 258 # 2, 1 DataSetType(0000,0900) US 65280 # 2, 1 StatusDIMSE receiveFileData: 82 bytes read (last: YES)RESPONSE: 1 (Pending)# Dicom-Data-Set# Used TransferSyntax: LittleEndianExplicit(0008,0020) UN 31\39\39\38\30\34\31\34 # 8, 1 StudyDate(0008,0052) UN 53\54\55\44\59\20 # 6, 1 QueryRetrieveLevel(0010,0010) UN 48\45\41\44\20\45\58\50\32\20 # 10, 1 PatientsName(0010,0020) UN 30\30\30\39\37\30\33\38\32\38 # 10, 1 PatientID--------DIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel # 28, 1 AffectedSOPClassUID(0000,0100) US 32800 # 2, 1 CommandField(0000,0120) US 1 # 2, 1 MessageIDBeingRespondedTo(0000,0800) US 257 # 2, 1 DataSetType(0000,0900) US 0 # 2, 1 Status


    wireshark capture:


    The point to note is that the study demographic data is sent as LittleEndianExplicit when available, so even though the data on the wire is the same the interpretation is incorrect. I think the standard says that only the pixel data should be sent as LittleEndianExplicit.


    If the flag --propose-implicit is added to the dcmtk cfind then the correct result is returned, but our Philips nuclear medicine workstations just crash.

    I have discovered a problem with printing under linux using conquest 1413.


    In order for the dcmtk program findscu to work correctly, LittleEndianExplicit must be commented out in dgatesop.lst. When this happens printing stops.


    The only difference in the log output is that the line Print file: .... is missing.


    If LittleEndianExplicit is enabled again then the print files are generated.


    From the code in dgate.cpp (line 10465) it seems vr->SQObjectArray is not being populated.


    Does anyone have any possible solutions other than running multiple instances?

    I use the following start/stop script.

    Bash
    #!/bin/bash## conquest-pacs.sh SysV init script for Conquest PACS.## Written by Miquel van Smoorenburg <miquels>.# Modified for Debian GNU/Linux by Ian Murdock <imurdock>.# Customized for Conquest by Mark Pearson <markp>## HOME and PACSUSER should be the only variables that may need to be modified.#PATH=/sbin:/bin:/usr/sbin:/usr/bin# Modify HOME to suit your environment.HOME=/usr/local/conquest# This is the user to run as. Modify it if you don't use username conquest.PACSUSER=conquestDAEMON=$HOME/dgateINI=$HOME/dicom.iniNAME=conquest_pacs.sh# All defaults here will be overridden by values from $HOME/dicom.iniSTATUSLOG=$HOME/serverstatus.logPORT=104DESC="Conquest PACS Server"STOPPACS=$HOME"/dgate --quit:"STARTAS=$DAEMONtest -f $DAEMON || echo "Cannot find $DAEMON" exit 0test -f $INI || echo "Cannot find $INI" exit 0set -eif grep "TCPPort" $INI > /dev/null ; then PORT=`egrep -i '^*TCPPort *= ' $INI | sed 's/\r//' | awk '{ print $3}'`fiif [ $PORT -le 1024 ]; then test -f /usr/bin/authbind || echo "authbind is needed for access to ports < 1024" exit 0 STARTAS="/usr/bin/authbind "fiif grep -is "^ *StatusLog" $INI > /dev/null ; then STATUSLOG=`egrep -i '^*StatusLog' $INI | sed 's/\r//' | awk '{ print $3}'`fiPIDFILE=/var/run/$NAME.$PORT.pidif [ $STARTAS = $DAEMON ]; then ARGS=" -^$STATUSLOG"else ARGS="$DAEMON -^$STATUSLOG"ficase "$1" in start) if [ -f $HOME/disable_autostart ]; then echo "Not starting $DESC: disabled via $HOME/disable_autostart" exit 0 fi echo -n "Starting $DESC: " start-stop-daemon --start --quiet --pidfile $PIDFILE \ --chuid $PACSUSER --chdir $HOME --exec $DAEMON \ --startas $STARTAS --background -- $ARGS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " cd $HOME $STOPPACS start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $ARGS echo "$NAME." echo ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --oknodo --quiet --pidfile $PIDFILE \ --exec $DAEMON -- $ARGS sleep 1 start-stop-daemon --start --quiet --pidfile $PIDFILE \ --chuid conquest --chdir $HOME --exec $DAEMON -- $ARGS echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;;esacexit 0


    For security reasons I have added a user "conquest" and the package authbind to allow access to priveleged ports.
    I added the following entries to dicom.ini:
    HomeDir = /usr/local/conquest
    StatusLog = /var/log/conquest/NMPACS.serverstatus.log
    TroubleLog = /var/log/conquest/NMPACS.PacsTrouble.log


    The file /etc/cron.weekly/conquest_rotate does weekly log rotation for me.



    This copes with multiple pacs instances on the same host. The advantage of using savelog is that old logfiles are compressed.
    It should be quite simple to edit the files to have executable or log in /opt.
    Also, don't forget to set the appropriate file permissions for the user that runs conquest.

    There is a subtle bug in 1.4.13 (only tested on linux) with debuglevel set greater than 0. Using a command line option with a long format string will cause a segfault. Here is an example


    dgate --setdebuglevel:1
    dgate --get_amap:1,%s%s%s%s


    will cause a segfault, but dgate --get_amap:1,%s%s will not.


    I noticed that the logfile shows output like this:


    9999,0400 16 UN "get_amap:1,ðLõ(null)"


    The incorrect output is also produced in 1.4.12c, but it does not trigger the segfault.

    The compile line is
    g++ -I/path/to/include/file -DUNIX -DNATIVE_ENDIAN=1 -DNOINTJPEG -DPOSTGRES total.cxx -o dgate -lpthread -L/path/to/libpq -lpq
    There will be quite a few warnings, but they can be ignored.
    Don't compile on a 64 bit system as it is only 32 bit safe.


    In dicom.ini check that:
    PostGres = 1
    DoubleBackSlashToDB = 1

    Hi,


    I have a question about Query/Move in the windows version of conquest. I am tyring to emulate most of the windows GUI on linux but am stuck here. Does the GIU just call dgate with command line switches or does it use other programs/libraries for doing Query/Move?


    On linux, I have tried using --patientfinder:srv|str|fmt|file to query other dicom hosts, but it only queries the local host, and a note in the source code that the srv is ignored confirms this.


    My next option is to try using the dcmtk programs for these functions.

    This is covered in the manual. Search for largefile to find it.


    There is a setting in dicom.ini: LargeFileSizeKB = 1024.


    Any image over this file size will not be displayed by default, so increase it to the size of your files.

    I don't think the limit comes from Conquest. I can use port 50089 on my linux system without any problems. I don't have access to windows system at the moment to do other testing.


    I could be a privilege problem and may also depend on the version of windows you are using and the rights of the user. More details of your setup would be useful.

    As an aid for compiling conquest under linux, I have created a command file for using cmake (http://www.cmake.org/HTML/Index.html).


    cmake is an alternative to automake and uses a single configuration file called CMakeLists.txt. Installation of cmake should be simple as binary packages are available for most linux distributions including red hat and debian based systems.


    The CMakeLists.txt file plus some basic instructions are available at http://www.nmrf.org.au/conquest/conquest_cmake.html


    More instructions and tips for using conquest on linux will be added as time permits.


    Mark

    If you do edit the database directly then you cannot do a re-initialize. If you re-initialize, the records are deleted (along with your changes) and new data is inserted.


    In general you should avoid manually editing the database files directly as conquest does not know about it and the changes may not accuratly reflect the contents of the dicom files.


    You should probably either
    - add a forwarding rule that makes the changes you want
    or
    - use an external program such as dcmodify from DCMTK toolkit to modify the files and then use the command line option --regenfile:file to update the database

    You could use the command line options to do that --query:table|fields|where|fmt|file


    dgate --query:"DICOMPatients|PatientID,PatientNam,PatientSex,PatientBir||%s,%s,%s,%s|demographics.txt"


    Data will be written to demographics.txt. A where clause can be added to limit data.