dcmqrti(1)

🌸 NAME 🌸

okay bestie, welcome to the dcmqrti(1) page from OFFIS DCMTK β€” this is The Terminal Initiator Telnet Client Program, and she is very much main character energy in the DICOM demo world πŸ’…

✨ SYNOPSIS ✨

dcmqrti [options] peer...

πŸŽ€ DESCRIPTION πŸŽ€

so dcmqrti is the telnet initiator, and she's an interactive character based program. Her whole vibe is: examine the dcmqrscp image databases and send the images inside those databases to Vendor nodes. iconic behavior, no cap πŸ’–

during a DICOM Demonstration, dcmqrti can be activated by a Vendor by logging onto the computer running the dcmqrscp program. each vendor gets their own login account, and when they log in, dcmqrti starts instead of a normal shell. literally built different 🫢

the program takes one main argument: the hostname or vendor symbolic name (from the VendorTable in the configuration file) of a Vendor. then she searches in the configuration file for all AE titles associated with this hostname or vendor name, plus all storage areas accessible to those AE titles. so only the accessible databases and peer applications discovered in the configuration file show up as choices inside the dcmqrti user interface. no random extras, periodt ✨

πŸ¦‹ PARAMETERS πŸ¦‹

  • peer β€” peer host name or symbolic name from cfg file

πŸ”₯ OPTIONS πŸ”₯

🌈 general options 🌈

  • -h, --help β€” print this help text and exit
  • --version β€” print version information and exit
  • --arguments β€” print expanded command line arguments
  • -q, --quiet β€” quiet mode, print no warnings and errors
  • -v, --verbose β€” verbose mode, print processing details
  • -d, --debug β€” debug mode, print debug information
  • -ll, --log-level β€” takes [l]evel: string constant (fatal, error, warn, info, debug, trace) β€” use level l for the logger
  • -lc, --log-config β€” takes [f]ilename: string β€” use config file f for the logger
  • -c, --config β€” takes [f]ilename: string β€” use specific configuration file (default: /usr/local/etc/dcmtk-<VERSION>/dcmqrscp.cfg)

🧚 network options 🧚

  • -to, --timeout β€” takes [s]econds: integer (default: unlimited) β€” timeout for connection requests
  • -ta, --acse-timeout β€” takes [s]econds: integer (default: 30) β€” timeout for ACSE messages
  • -td, --dimse-timeout β€” takes [s]econds: integer (default: unlimited) β€” timeout for DIMSE messages
  • -xi, --propose-implicit β€” propose implicit VR little endian TS only
  • -aet, --aetitle β€” takes [a]etitle: string β€” set my AE title (default: TELNET_INITIATOR)
  • -pdu, --max-pdu β€” takes [n]umber of bytes: integer (4096..131072) β€” set max receive pdu to n bytes (default: use value from configuration file)

⭐ other options ⭐

  • -u, --disable-new-vr β€” disable support for new VRs, convert to OB
  • -rmt, --remote β€” takes [t]itle: string β€” connect to remote database defined in cfg file

✨ NOTES ✨

πŸ’¬ Commands

ok so first thing, bestie: all commands can be abbreviated. An abbreviation is allowed if it does not conflict with another command. iykyk β€” type just enough letters and you're golden. ✨

help Command

the help command gives you a summary of all available commands. its output is shown right down below πŸ‘‡. and real quick β€” to keep the examples from bleeding into the surrounding text, every example is bracketed by dashed lines. those lines do not appear when running the program, they're just here for readability πŸ’…

------------------------------------------------------------
Command Summary:
help                list this summary
?                   short help
title [#]           list [set] current peer AE title
database [#]        list [set] current database
study [#]           list [set] current study
series [#]          list [set] current series
image [#]           list [set] current image
display [#]         display current [specific] image
send study [#]      send current [specific] study
send series [#]     send current [specific] series
send image [#]      send current [specific] image
echo [#]            verify connectivity [# times]
quit                quit program
exit                synonym for quit
------------------------------------------------------------

title Command

title with no argument lets you list the known remote Application Entities (AE). an example output might look like this:

------------------------------------------------------------
Peer AE Titles:
     Peer AE          HostName:PortNumber
* 0) ACME1            (swallow:2001)
  1) ACME2            (swallow:2002)
  2) UNITED1          (kolibri:2001)
  3) UNITED2          (kolibri:2002)
------------------------------------------------------------

the current peer AE is marked with an asterisk (*) β€” main character energy, honestly πŸ‘‘. each peer AE has an index (that's the second column) which you can use as an argument to title to set the current peer AE. the third column gives the AE title of the peer AE. the fourth column shows the hostname and TCP/IP port number of the peer AE. 🫢

when you invoke it with an argument index, title sets the current peer AE. and then β€” this is the important bit β€” dcmqrti will attempt to initiate an association to the current peer AE whenever you ask it to send a study/series/image or to send an echo. so like, pick your fave before you send anything, fr fr.

database Command

database with no argument lets you list the known local databases (these correspond to dcmqrscp's Application Entity Titles). an example output might look like:

------------------------------------------------------------
Database Titles:
     Database
* 0) COMMON
  1) ACME_QUERY
  2) ACME_STORE
  3) UNITED_QUERY
------------------------------------------------------------

the current database is marked with an asterisk (*). each database has an index (second column) which you can use as an argument to database to set the current database. the third column shows the name of the database β€” that's the dcmqrscp Application Entity title for that particular storage area, iykyk.

when you invoke it with an argument index, database sets the current database. and the current database is the basis for all the database-specific actions you do next. ✨

study Command

study with no argument lists the studies in the current database. an example output might look like:

------------------------------------------------------------
      Patient                        PatientID    StudyID
*  0) JACKSON^ANDREW^^^              M4997106     20001
   1) GRANT^MARY^^^                  F4997108     20002
   2) ARTHUR^CHESTER^^^              M4997107     20003
   3) JEFFERSON^THOMAS^^^            M4997096     9465
   4) MADISON^DOLLY^^^               F4997097     9443

4 Studies in Database: COMMON
------------------------------------------------------------

the current study is marked with an asterisk (*). each study has an index (second column) which you can use as an argument to study to set the current study. third column = patient name, fourth column = patient ID, fifth column = study ID. πŸŽ€

when you invoke it with an argument index, study sets the current study. the current study is the basis for all the study-specific actions that follow.

series Command

series with no argument lists the series in the current study. example output, coming right up:

------------------------------------------------------------
      Series Modality SeriesInstanceUID
*  0) 1      MR       1.2.840.113654.2.3.1993.201
   1) 2      MR       1.2.840.113654.2.3.1993.202
   2) 3      MR       1.2.840.113654.2.3.1993.203
   3) 4      MR       1.2.840.113654.2.3.1993.204
   4) 5      MR       1.2.840.113654.2.3.1993.205

5 Series in StudyID 05381,
  Patient: MONROE^JAMES^^^ (Database: COMMON)
------------------------------------------------------------

the current series is marked with an asterisk (*). each series has an index (second column) which you can use as an argument to series to set the current series. third column = series number, fourth column = series modality, fifth column = series instance UID. the way this layout just works πŸ˜­πŸ’–

when you invoke it with an argument index, series sets the current series. the current series is the basis for all the series-specific actions.

image Command

image with no argument lists the images in the current series. example:

------------------------------------------------------------
      Image ImageInstanceUID
*  0) 1     1.2.840.113654.2.3.1993.9.123.6.2674
   1) 2     1.2.840.113654.2.3.1993.9.123.6.2675
   2) 3     1.2.840.113654.2.3.1993.9.123.6.2676
   3) 4     1.2.840.113654.2.3.1993.9.123.6.2677
   4) 5     1.2.840.113654.2.3.1993.9.123.6.2678
   5) 6     1.2.840.113654.2.3.1993.9.123.6.2679
   6) 7     1.2.840.113654.2.3.1993.9.123.6.2680
   7) 8     1.2.840.113654.2.3.1993.9.123.6.2681
   8) 9     1.2.840.113654.2.3.1993.9.123.6.2682
   9) 10    1.2.840.113654.2.3.1993.9.123.6.2683
  10) 11    1.2.840.113654.2.3.1993.9.123.6.2684
  11) 12    1.2.840.113654.2.3.1993.9.123.6.2685
  12) 13    1.2.840.113654.2.3.1993.9.123.6.2686

13 Images in MR Series, StudyID 05381,
  Patient: MONROE^JAMES^^^ (Database: COMMON)
------------------------------------------------------------

the current image is marked with an asterisk (*). each image has an index (second column) which you can use as an argument to image to set the current image. third column = image number, fourth column = image instance UID (that's the SOP Instance UID, bestie). 🌸

when you invoke it with an argument index, image sets the current image. the current image is the basis for all the image-specific actions.

display Command

ok so real talk: the display command serves no purpose in the current version of DCMTK. it was used in prior releases to request the CTN Display Program to display an image. that's it. that's the whole tea. 🍡

send Command

the send command lets you store a complete study/series β€” or an individual image β€” on a remote AE. when you invoke it, dcmqrti operates as an SCU of the DICOM Storage Service Class and attempts to initiate an association with the current peer AE (which you defined via title). presentation contexts for all relevant Storage SOP Classes get proposed. then it tries to store all the specified images. πŸ”₯

a couple of things that can go sideways, and you should know about them:

  • if no association could be negotiated, an error message will be printed.
  • if a storage operation fails, or if no appropriate presentation context is available, an error message will be printed.

the send command exists in three forms:

send study [#]
send series [#]
send image [#]

the study keyword means send all images in the current study. when invoked with an argument index, the specified study in the current database gets stored. the series keyword means send all images in the current series. when invoked with an argument index, the specified series in the current study gets stored. the image keyword means send the current image. when invoked with an argument index, the specified image in the current series gets stored. periodt. πŸ’…

when an image is stored, you get a message of this form:

------------------------------------------------------------
New Association Started (swallow:2001,ACME1)
[MsgID 1] Store,
  PatientName: JACKSON^ANDREW^^^, StudyID: 20001,
  Series: 2, Modality: CR, Image: 1,
  Image UID: 1.2.840.113654.2.3.1993.9.123.6.1834
  0%________25%_________50%__________75%________100%
  --------------------------------------------------
[MsgID 1] Complete [Status: Success]
Released Association (swallow:2001,ACME1)
------------------------------------------------------------

that progress bar? iconic. πŸ¦‹

echo Command

the echo command lets you verify connectivity with the current peer AE (again, defined via the title command). when you invoke it, dcmqrti acts as an SCU of the Verification Service Class. ✨

  • when invoked without an argument, only one C-ECHO message is generated.
  • when invoked with an argument, the specified number of C-ECHO messages will be sent. πŸ”

a message gets printed in this form:

------------------------------------------------------------
New Association Started (localhost:2001,CMOVE)
[MsgID 1] Echo, Complete [Status: Success]
Released Association (localhost:2001,CMOVE)
------------------------------------------------------------

quit, exit Commands

quit and exit do the exact same thing β€” they're synonyms, no cap. they terminate the dcmqrti program. πŸ‘‹


🌈 DICOM Conformance

the dcmqrti application supports the same set of SOP Classes as an SCU as the dcmqrscp application β€” go check the dcmqrscp documentation for the full rundown. πŸ“š

it will propose presentation contexts for all of those abovementioned supported SOP Classes using these transfer syntaxes:

LittleEndianImplicitTransferSyntax  1.2.840.10008.1.2
LittleEndianExplicitTransferSyntax  1.2.840.10008.1.2.1
BigEndianExplicitTransferSyntax     1.2.840.10008.1.2.2
and heads up: the dcmqrti application does not support extended negotiation. ⚠️

πŸŽ€ Configuration

the dcmqrti program uses the same configuration file as the dcmqrscp program. see the documentation on configuration for more info (dcmqrcnf.txt and the example configuration file dcmqrscp.cfg). 🫢

🌈 LOGGING 🌈

Okay bestie, here's the tea on how the logging works β€” the level of logging output of the various command line tools and underlying libraries can be specified by the user. πŸ’…

By default, only errors and warnings are written to the standard error stream. Lowkey minimal, right?

  • --verbose β€” also reports informational messages like processing details. So you get the actually useful stuff, not just the screaming.
  • --debug β€” gets you way more details on the internal activity, e.g. for debugging purposes. Main character energy for your bugs.
  • --log-level β€” use this to pick other logging levels, whatever your heart desires.
  • --quiet β€” in quiet mode only fatal errors are reported. And ngl, in such very severe error events, the application will usually terminate. πŸ’€ So yeah, quiet mode is a real vibe check.

For more details on the different logging levels, see documentation of module "oflog". iykyk 🫢


Now, in case the logging output should be written to file (optionally with logfile rotation), to syslog (Unix) or the event log (Windows) β€” --log-config is your girl.

This configuration file also allows for:

  • directing only certain messages to a particular output stream ✨
  • filtering certain messages based on the module or application where they are generated πŸŽ€

An example configuration file is provided in <etcdir>/logger.cfg. Go look, it's giving helpful.

✨ COMMAND LINE ✨

So all command line tools use the following notation for parameters β€” memorize this, bestie:

  • square brackets enclose optional values (0-1) πŸ”²
  • three trailing dots indicate that multiple values are allowed (1-n) β‹―
  • a combination of both means 0 to n values 🌸

Command line options are distinguished from parameters by a leading '+' or '-' sign, respectively. Cute, right?

Usually, order and position of command line options are arbitrary (i.e. they can appear anywhere). But β€” and this is important β€” if options are mutually exclusive the rightmost appearance is used. This behavior conforms to the standard evaluation rules of common Unix shells. Slay. πŸ‘‘


Also! One or more command files can be specified using an '@' sign as a prefix to the filename (e.g. @command.txt).

Such a command argument is replaced by the content of the corresponding text file (multiple whitespaces are treated as a single separator unless they appear between two quotation marks) prior to any further evaluation. πŸ¦‹

Please note that a command file cannot contain another command file. No nesting, no inception, we don't do that here. πŸ™ˆ

This simple but effective approach allows one to summarize common combinations of options/parameters and avoids longish and confusing command lines (an example is provided in file <datadir>/dumppat.txt). Literally genius.

🧚 ENVIRONMENT 🧚

The dcmqrti utility will attempt to load DICOM data dictionaries specified in the DCMDICTPATH environment variable.

By default, i.e. if the DCMDICTPATH environment variable is not set, the file <datadir>/dicom.dic will be loaded β€” unless the dictionary is built into the application (default for Windows). πŸͺŸ

The default behavior should be preferred and the DCMDICTPATH environment variable only used when alternative data dictionaries are required. Fr fr, just let the default do its thing.

The DCMDICTPATH environment variable has the same format as the Unix shell PATH variable in that a colon (":") separates entries. On Windows systems, a semicolon (";") is used as a separator. πŸŽ€

The data dictionary code will attempt to load each file specified in the DCMDICTPATH environment variable.

It is an error if no data dictionary can be loaded. 😭 Like, actually an error. Not a vibe.

πŸ“ FILES πŸ“

  • <docdir>/dcmqrcnf.txt β€” configuration information
  • <docdir>/dcmqrset.txt β€” setup information
  • <etcdir>/dcmqrscp.cfg β€” example configuration file

Look at you, knowing where everything lives. Iconic. ✨

πŸ‘‘ SEE ALSO πŸ‘‘

dcmqrscp(1)

Go read the sibling page too, bestie β€” it's giving complementary documentation. πŸ’œ

Copyright (C) 1993-2026 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.


And that's the whole page, bestie!! πŸŽ€βœ¨ You made it to the very end β€” highkey proud of you. This one's from Version 3.7.1, dated Sat Oct 17 2026 09:34:01, and it's the dcmqrti(1) page. Now go forth and interact with those DICOM query/retrieve servers like the main character you are. πŸ’…πŸ«Ά

πŸ“¦ where this page comes from