dcmqrscp(1)

πŸ’Ύ dcmqrscp(1) β€” the OFFIS DCMTK era, but make it a group chat 🫢

okay so bestie, you're looking at dcmqrscp from OFFIS DCMTK, and honestly? she's a whole central test node and she's about to be your new hyperfixation. let's get into it πŸ’…


✨ NAME ✨

dcmqrscp β€” the DICOM image archive, aka the central test node. no cap, that's literally her job πŸŽ€


✨ SYNOPSIS ✨

dcmqrscp [options] [port]

✨ DESCRIPTION ✨

so the Image Central Test Node (that's dcmqrscp, hi bestie πŸ‘‹) implements a simple image archive. she manages a bunch of storage areas and lets images get stored in those storage areas via the DICOM Storage Service Class. iconic behavior honestly.

she also lets image attributes be queried and images be retrieved using the DICOM Query/Retrieve Service Class. and β€” plot twist β€” she implements access restriction rules to limit operations to specific peer application entities. gatekeeping, but make it networking πŸ’…

dcmqrscp is intended for DICOM demonstrations and as a compatibility test tool. and here's the spicy part: she will delete images if her quota restrictions have been exceeded. not me being dramatic, that's just the spec 😭

⚠️ Caution, bestie, please read this one: the format of dcmqrdb's binary index.dat file changed on 20130705 due to a bug fix in the corresponding code. an index.dat file created before that date will not work with dcmqrdb code compiled after that date β€” it must be re-created. use dcmqridx for that task, or re-send all images to the server after deleting all old files (and creating a new empty index.dat file). fr fr, don't skip this πŸ’€

✨ PARAMETERS ✨

  • port β€” the tcp/ip port number to listen on (default: in config file). she's gotta know where to sit and wait for her little connections πŸ¦‹

✨ OPTIONS ✨

🌸 general options 🌸

  • -h, --help β€” print this help text and exit. the classic "help me help you" move.
  • --version β€” print version information and exit. vibe check on the version ✨
  • --arguments β€” print expanded command line arguments. so you can see what you actually said.
  • -q, --quiet β€” quiet mode, print no warnings and errors. she's giving silent treatment energy πŸ™ˆ
  • -v, --verbose β€” verbose mode, print processing details. now she's oversharing (affectionate) πŸ’–
  • -d, --debug β€” debug mode, print debug information. for when you need to know everything.
  • -ll, --log-level [l]evel: string constant β€” (fatal, error, warn, info, debug, trace), use level l for the logger. pick your level of drama, bestie.
  • -lc, --log-config [f]ilename: string β€” use config file f for the logger. logger aesthetic acquired πŸŽ€
  • -c, --config [f]ilename: string β€” use specific configuration file (default: /usr/local/etc/dcmtk-<VERSION>/dcmqrscp.cfg).
this option allows a specific configuration file to be specified. by default, the configuration file in the system configuration directory ("etc" on Unix systems and current working directory on Windows systems) with the name dcmqrscp.cfg will be used. it is an error if a valid configuration file is not available. see the documentation on configuration for more information (dcmqrcnf.txt and the example configuration file dcmqrscp.cfg). no config? she's not showing up to the function 😭

🧚 multi-process options 🧚

  • -s, --single-process β€” single process mode.
this option instructs dcmqrscp to run in single process mode. normally, dcmqrscp will spawn a new copy of itself to handle each association. this option will prevent such copies being spawned and is particularly useful when running within a debugger. one girl, doing everything herself πŸ’…
  • --fork β€” fork child process for each association (default). the clone army default 🫢
please note that the multi-process options are only available on systems that support the fork() call, i.e. not on Windows. sorry windows besties πŸ’€

πŸ¦‹ database options πŸ¦‹

🌈 association negotiation:

  • --require-find β€” reject all MOVE/GET presentation contexts for which no corresponding FIND context is proposed.
this option causes dcmqrscp to enforce a restriction about FIND and MOVE presentation contexts. the RSNA'93 demonstration required that a CTN refuse to accept a presentation context for a MOVE if a FIND presentation context is not also requested. this option enforces this restriction. no FIND? then no MOVE, periodt βœ‹
  • --no-parallel-store β€” reject multiple simultaneous STORE presentation contexts for one application entity title.
this option causes dcmqrscp to refuse storage presentations contexts for AE Titles if another association has already successfully negotiated storage presentation contexts for the AE Title. this option should only be needed for debugging since the dcmqrscp database back-end sequentialises access via file-locking. she already handles it, ok?? πŸ™ˆ
  • --disable-get β€” disable C-GET support. not today, C-GET 🚫
  • --allow-shutdown β€” allow external shutdown via a private SOP class. she can be shut down remotely, main character energy πŸ‘‘

🌈 checking identifier validity:

  • -XF, --check-find β€” check C-FIND identifier validity.
this option causes the dcmqrscp database back-end to perform checks on the Query Identifiers for a C-FIND command. with this option, dcmqrscp will reject any queries which do not conform to the very strict DICOM rules for Query Identifiers. she's a strict queen πŸ’…
  • --no-check-find β€” do not check C-FIND identifier validity (default). chill mode, the default bestie πŸ“
  • -XM, --check-move β€” check C-MOVE identifier validity.
this option causes the dcmqrscp database back-end to perform checks on the Query Identifiers for a C-MOVE command. with this option, dcmqrscp will reject any queries which do not conform to the very strict DICOM rules for Query Identifiers. same energy, different command ✨
  • --no-check-move β€” do not check C-MOVE identifier validity (default). the default, once again, lowkey chill 🧚

🌈 restriction of move targets:

  • --move-unrestricted β€” do not restrict move destination (default). go wherever, girl πŸ’«
  • -ZA, --move-aetitle β€” restrict move destination to requesting AE title. only her own AE title is allowed to be the destination πŸ‘‘
  • -ZH, --move-host β€” restrict move destination to requesting host. only the requesting host, babe πŸ¦‹
  • -ZV, --move-vendor β€” restrict move destination to requesting vendor. vendor-locked, but in a move-destination way 🌸

🌈 restriction of query/retrieve models:

  • -QP, --no-patient-root β€” do not support Patient Root Q/R models.
  • -QS, --no-study-root β€” do not support Study Root Q/R models.
  • -QO, --no-patient-study β€” do not support Patient/Study Only Q/R models.

three little switches, each one telling a whole Q/R model to stay home 😌


πŸ’œ network options πŸ’œ

🌈 IP protocol version:

  • -i4, --ipv4 β€” use IPv4 only (default). the classic, the default, the reliable πŸ’–
  • -i6, --ipv6 β€” use IPv6 only. newer, shinier, more addresses 🌟
  • -i0, --ip-auto β€” use IPv6/IPv4 dual stack. why choose? she does both πŸ’…

🌈 association negotiation profiles from configuration file:

  • -xf, --assoc-config-file [f]ilename, [i]n-profile, [o]ut-profile: string β€” use profile i from f for incoming associations, and profile o from f for outgoing associations. incoming gets i, outgoing gets o, both live in f πŸŽ€

🌈 preferred network transfer syntaxes (incoming associations):

okay this is the long one, deep breaths, we're listing all of them because every single one matters 🫢

  • +x=, --prefer-uncompr β€” prefer explicit VR local byte order (default).
  • +xe, --prefer-little β€” prefer explicit VR little endian TS.
  • +xb, --prefer-big β€” prefer explicit VR big endian TS.
  • +xs, --prefer-lossless β€” prefer default JPEG lossless TS.
  • +xy, --prefer-jpeg8 β€” prefer default JPEG lossy TS for 8 bit data.
  • +xx, --prefer-jpeg12 β€” prefer default JPEG lossy TS for 12 bit data.
  • +xv, --prefer-j2k-lossless β€” prefer JPEG 2000 lossless TS.
  • +xw, --prefer-j2k-lossy β€” prefer JPEG 2000 lossy TS.
  • +xt, --prefer-jls-lossless β€” prefer JPEG-LS lossless TS.
  • +xu, --prefer-jls-lossy β€” prefer JPEG-LS lossy TS.
  • +xm, --prefer-mpeg2 β€” prefer MPEG2 Main Profile @ Main Level TS.
  • +xh, --prefer-mpeg2-high β€” prefer MPEG2 Main Profile @ High Level TS.
  • +xn, --prefer-mpeg4 β€” prefer MPEG4 AVC/H.264 High Profile / Level 4.1 TS.
  • +xl, --prefer-mpeg4-bd β€” prefer MPEG4 AVC/H.264 BD-compatible HP / Level 4.1 TS.
  • +x2, --prefer-mpeg4-2-2d β€” prefer MPEG4 AVC/H.264 HP / Level 4.2 TS for 2D Videos.
  • +x3, --prefer-mpeg4-2-3d β€” prefer MPEG4 AVC/H.264 HP / Level 4.2 TS for 3D Videos.
  • +xo, --prefer-mpeg4-2-st β€” prefer MPEG4 AVC/H.264 Stereo HP / Level 4.2 TS.
  • +x4, --prefer-hevc β€” prefer HEVC/H.265 Main Profile / Level 5.1 TS.
  • +x5, --prefer-hevc10 β€” prefer HEVC/H.265 Main 10 Profile / Level 5.1 TS.
  • +xr, --prefer-rle β€” prefer RLE lossless TS.
  • +xd, --prefer-deflated β€” prefer deflated explicit VR little endian TS.
  • +xi, --implicit β€” accept implicit VR little endian TS only. only the one. picky queen πŸ’…

🌈 proposed transmission transfer syntaxes (outgoing associations):

and now the outgoing side, equally long, equally important, no skipping ✨

  • -x=, --propose-uncompr β€” propose all uncompressed TS, explicit VR with local byte ordering first (default).
  • -xe, --propose-little β€” propose all uncompressed TS, explicit VR little endian first.
  • -xb, --propose-big β€” propose all uncompressed TS, explicit VR big endian first.
  • -xi, --propose-implicit β€” propose implicit VR little endian TS only.
  • -xs, --propose-lossless β€” propose default JPEG lossless TS and all uncompressed transfer syntaxes.
  • -xy, --propose-jpeg8 β€” propose default JPEG lossy TS for 8 bit data and all uncompressed transfer syntaxes.
  • -xx, --propose-jpeg12 β€” propose default JPEG lossy TS for 12 bit data and all uncompressed transfer syntaxes.
  • -xv, --propose-j2k-lossless β€” propose JPEG 2000 lossless TS and all uncompressed transfer syntaxes.
  • -xw, --propose-j2k-lossy β€” propose JPEG 2000 lossy TS and all uncompressed transfer syntaxes.
  • -xt, --propose-jls-lossless β€” propose JPEG-LS lossless TS and all uncompressed transfer syntaxes.
  • -xu, --propose-jls-lossy β€” propose JPEG-LS lossy TS and all uncompressed transfer syntaxes.
  • -xm, --propose-mpeg2 β€” propose MPEG2 Main Profile @ Main Level TS only.
  • -xh, --propose-mpeg2-high β€” propose MPEG2 Main Profile @ High Level TS only.
  • -xn, --propose-mpeg4 β€” propose MPEG4 AVC/H.264 High Profile / Level 4.1 TS only.
  • -xl, --propose-mpeg4-bd β€” propose MPEG4 AVC/H.264 BD-compatible HP / Level 4.1 TS only.
  • -x2, --propose-mpeg4-2-2d β€” propose MPEG4 AVC/H.264 HP / Level 4.2 TS for 2D Videos only.
  • -x3, --propose-mpeg4-2-3d β€” propose MPEG4 AVC/H.264 HP / Level 4.2 TS for 3D Videos only.
  • -xo, --propose-mpeg4-2-st β€” propose MPEG4 AVC/H.264 Stereo HP / Level 4.2 TS only.
  • -x4, --propose-hevc β€” propose HEVC/H.265 Main Profile / Level 5.1 TS only.
  • -x5, --propose-hevc10 β€” propose HEVC/H.265 Main 10 Profile / Level 5.1 TS only.
  • -xr, --propose-rle β€” propose RLE lossless TS and all uncompressed transfer syntaxes.
  • -xd, --propose-deflated β€” propose deflated explicit VR little endian TS and all uncompressed transfer syntaxes.

🌈 network host access control (tcp wrapper):

  • -ac, --access-full β€” accept connections from any host (default). everyone's welcome, come on in 🫢

✨ other network options ✨

  • +ac, --access-control β€” enforce host access control rules.
  • -to, --timeout β€” [s]econds: integer (default: unlimited): timeout for connection requests.
  • -ta, --acse-timeout β€” [s]econds: integer (default: 30): timeout for ACSE messages.
  • -td, --dimse-timeout β€” [s]econds: integer (default: unlimited): timeout for DIMSE messages.
  • -pdu, --max-pdu β€” [n]umber of bytes: integer (4096..131072): set max receive pdu to n bytes (default: use value from configuration file).
  • -dhl, --disable-host-lookup β€” disable hostname lookup.
  • --refuse β€” refuse association.
  • --reject β€” reject association if no implementation class UID.
  • --ignore β€” ignore store data, receive but do not store.
πŸ’€ --ignore causes the dcmqrscp database back-end to ignore all images received by the Storage Service Class. All images will be received from the network but not stored to disk nor recorded in database.
  • -up, --uid-padding β€” silently correct space-padded UIDs.

🌸 processing options 🌸

specific character set:

🧚 the following options require support from an underlying character encoding library (see output of --version on which one is available)
  • +Cr, --use-request-charset β€” try to convert all element values that are affected by Specific Character Set (0008,0005) to the one specified in the request data set, fall back to the one specified via --convert-to-xxx if that is not possible (default, unless overridden by config file).
  • -Cr, --override-charset β€” convert affected element values to the character set specified via --convert-to-xxx, ignoring the one specified in the request.
  • +A7, --convert-to-ascii β€” convert affected element values to 7-bit ASCII (default, unless overridden by config file).
  • +U8, --convert-to-utf8 β€” convert affected element values to UTF-8.
  • +L1, --convert-to-latin1 β€” convert affected element values to ISO 8859-1.
  • +C, --convert-to-charset β€” [c]harset: string: convert affected element values to the character set specified by the DICOM defined term c.
  • -Ct, --transliterate β€” try to approximate characters that cannot be represented through similar looking characters.
  • -Cd, --discard-illegal β€” discard characters that cannot be represented in destination character set.

πŸ” transport layer security (TLS) options πŸ”

transport protocol stack:

  • -tls, --disable-tls β€” use normal TCP/IP connection (default).
  • +tls, --enable-tls β€” [p]rivate key file, [c]ertificate file: string: use authenticated secure TLS connection.

private key password (only with --enable-tls):

  • +ps, --std-passwd β€” prompt user to type password on stdin (default).
  • +pw, --use-passwd β€” [p]assword: string: use specified password.
  • -pw, --null-passwd β€” use empty string as password.

key and certificate file format:

  • -pem, --pem-keys β€” read keys and certificates as PEM file (default).
  • -der, --der-keys β€” read keys and certificates as DER file.

certification authority:

  • +cf, --add-cert-file β€” [f]ilename: string: add certificate file to list of certificates.
  • +cd, --add-cert-dir β€” [d]irectory: string: add certificates in d to list of certificates.
  • +crl, --add-crl-file β€” [f]ilename: string: add certificate revocation list file (implies --enable-crl-vfy).
  • +crv, --enable-crl-vfy β€” enable leaf CRL verification.
  • +cra, --enable-crl-all β€” enable full chain CRL verification.

security profile:

  • +ph, --list-profiles β€” list supported TLS profiles and exit.
  • +pg, --profile-8996 β€” BCP 195 RFC 8996 TLS Profile (default).
  • +pm, --profile-8996-mod β€” Modified BCP 195 RFC 8996 TLS Profile. Only available if underlying TLS library supports all TLS features required for this profile.
  • +py, --profile-bcp195-nd β€” Non-downgrading BCP 195 TLS Profile (retired).
  • +px, --profile-bcp195 β€” BCP 195 TLS Profile (retired).
  • +pz, --profile-bcp195-ex β€” Extended BCP 195 TLS Profile (retired).
  • +pb, --profile-basic β€” Basic TLS Secure Transport Connection Profile (retired). Only available if underlying TLS library supports 3DES.
  • +pa, --profile-aes β€” AES TLS Secure Transport Connection Profile (retired).
  • +pn, --profile-null β€” Authenticated unencrypted communication (retired, was used in IHE ATNA).

ciphersuite:

  • +cc, --list-ciphers β€” list supported TLS ciphersuites and exit.
  • +cs, --cipher β€” [c]iphersuite name: string: add ciphersuite to list of negotiated suites.
  • +dp, --dhparam β€” [f]ilename: string: read DH parameters for DH/DSS ciphersuites.

server name indication:

  • --no-sni β€” do not use SNI (default).
  • --expect-sni β€” [s]erver name: string: expect requests for server name s.

pseudo random generator:

  • +rs, --seed β€” [f]ilename: string: seed random generator with contents of f.
  • +ws, --write-seed β€” write back modified seed (only with --seed).
  • +wf, --write-seed-file β€” [f]ilename: string (only with --seed): write modified seed to file f.

peer authentication:

  • -rc, --require-peer-cert β€” verify peer certificate, fail if absent (default).
  • -vc, --verify-peer-cert β€” verify peer certificate if present.
  • -ic, --ignore-peer-cert β€” don't verify peer certificate.

πŸ’Ύ output options πŸ’Ύ

bit preserving mode:

  • -B, --normal β€” allow implicit format conversions (default).
  • +B, --bit-preserving β€” write data exactly as read.

output file format:

  • +F, --write-file β€” write file format (default).
  • -F, --write-dataset β€” write data set without file meta information.

output transfer syntax: (not with --bit-preserving or compressed transmission)

  • +t=, --write-xfer-same β€” write with same TS as input (default).
  • +te, --write-xfer-little β€” write with explicit VR little endian TS.
  • +tb, --write-xfer-big β€” write with explicit VR big endian TS.
  • +ti, --write-xfer-implicit β€” write with implicit VR little endian TS.
  • +td, --write-xfer-deflated β€” write with deflated explicit VR little endian TS.

post-1993 value representations:

  • +u, --enable-new-vr β€” enable support for new VRs (UN/UT) (default).
  • -u, --disable-new-vr β€” disable support for new VRs, convert to OB.

group length encoding (not with --bit-preserving):

  • +g=, --group-length-recalc β€” recalculate group lengths if present (default).
  • +g, --group-length-create β€” always write with group length elements.
  • -g, --group-length-remove β€” always write without group length elements.

length encoding in sequences and items (not with --bit-preserving):

  • +e, --length-explicit β€” write with explicit lengths (default).
  • -e, --length-undefined β€” write with undefined lengths.

data set trailing padding (not with --write-dataset or --bit-preserving):

  • -p, --padding-off β€” no padding (default).
  • +p, --padding-create β€” [f]ile-pad [i]tem-pad: integer: align file on multiple of f bytes and items on multiple of i bytes.

deflate compression level (only with --propose-deflated or --write-xfer-deflated/same):

  • +cl, --compression-level β€” [l]evel: integer (default: 6): 0=uncompressed, 1=fastest, 9=best compression.

πŸ“ NOTES πŸ“

πŸ› οΈ Operation πŸ› οΈ

Okay so picture this: dcmqrscp is just sitting there waiting for another application to connect at the presentation address (port number) specified in its configuration file β€” or overridden by a command line option. πŸ’… When another application connects, dcmqrscp expects it to be a DICOM application and to use the calling and called AE Titles specified in dcmqrscp's configuration file. It will accept associations with Presentation Contexts for SOP Classes of the Verification Service Class, Storage Service Class and Query/Retrieve Service Class. But heads up: associations will be rejected or Presentation Contexts will be refused if the peer application does not have appropriate access rights as specified by the dcmqrscp configuration file. 🫢

dcmqrscp will receive images on Presentation Contexts of the Storage Service Class, write them to a configurable storage area associated with the class AE title, extract attributes from these images and store them in a database. It will receive query requests and generate query responses on Presentation Contexts of the Query/Retrieve Service class. It will receive retrieve requests and generate retrieve responses on Presentation Contexts of the Query/Retrieve Service class. It will also process C-CANCEL messages to interrupt query/retrieve operations. ✨

Under normal operations dcmqrscp will never exit β€” it keeps on waiting for new associations until killed. Like, main character energy: it does not leave. πŸ’€

🩺 DICOM Conformance 🩺

πŸ“‹ SCU Conformance πŸ“‹

The dcmqrscp application supports the following SOP Classes as an SCU:

VerificationSOPClass                                 1.2.840.10008.1.1

…okay so picking right back up on the list, no interruptions, here's the rest of it, all of it, every single one πŸ’… (yes the RETIRED_ prefixes stay, they're doing their own thing):

RETIRED_StoredPrintStorage                           1.2.840.10008.5.1.1.27
RETIRED_HardcopyGrayscaleImageStorage                1.2.840.10008.5.1.1.29
RETIRED_HardcopyColorImageStorage                    1.2.840.10008.5.1.1.30
ComputedRadiographyImageStorage                      1.2.840.10008.5.1.4.1.1.1
DigitalXRayImageStorageForPresentation               1.2.840.10008.5.1.4.1.1.1.1
DigitalXRayImageStorageForProcessing                 1.2.840.10008.5.1.4.1.1.1.1.1
DigitalMammographyXRayImageStorageForPresentation    1.2.840.10008.5.1.4.1.1.1.2
DigitalMammographyXRayImageStorageForProcessing      1.2.840.10008.5.1.4.1.1.1.2.1
DigitalIntraOralXRayImageStorageForPresentation      1.2.840.10008.5.1.4.1.1.1.3
DigitalIntraOralXRayImageStorageForProcessing        1.2.840.10008.5.1.4.1.1.1.3.1
CTImageStorage                                       1.2.840.10008.5.1.4.1.1.2
EnhancedCTImageStorage                               1.2.840.10008.5.1.4.1.1.2.1
LegacyConvertedEnhancedCTImageStorage                1.2.840.10008.5.1.4.1.1.2.2
RETIRED_UltrasoundMultiframeImageStorage             1.2.840.10008.5.1.4.1.1.3
UltrasoundMultiframeImageStorage                     1.2.840.10008.5.1.4.1.1.3.1
MRImageStorage                                       1.2.840.10008.5.1.4.1.1.4
EnhancedMRImageStorage                               1.2.840.10008.5.1.4.1.1.4.1
MRSpectroscopyStorage                                1.2.840.10008.5.1.4.1.1.4.2
EnhancedMRColorImageStorage                          1.2.840.10008.5.1.4.1.1.4.3
LegacyConvertedEnhancedMRImageStorage                1.2.840.10008.5.1.4.1.1.4.4
RETIRED_NuclearMedicineImageStorage                  1.2.840.10008.5.1.4.1.1.5
RETIRED_UltrasoundImageStorage                       1.2.840.10008.5.1.4.1.1.6
UltrasoundImageStorage                               1.2.840.10008.5.1.4.1.1.6.1
EnhancedUSVolumeStorage                              1.2.840.10008.5.1.4.1.1.6.2
SecondaryCaptureImageStorage                         1.2.840.10008.5.1.4.1.1.7
MultiframeSingleBitSecondaryCaptureImageStorage      1.2.840.10008.5.1.4.1.1.7.1
MultiframeGrayscaleByteSecondaryCaptureImageStorage  1.2.840.10008.5.1.4.1.1.7.2
MultiframeGrayscaleWordSecondaryCaptureImageStorage  1.2.840.10008.5.1.4.1.1.7.3
MultiframeTrueColorSecondaryCaptureImageStorage      1.2.840.10008.5.1.4.1.1.7.4
RETIRED_StandaloneOverlayStorage                     1.2.840.10008.5.1.4.1.1.8
RETIRED_StandaloneCurveStorage                       1.2.840.10008.5.1.4.1.1.9
TwelveLeadECGWaveformStorage                         1.2.840.10008.5.1.4.1.1.9.1.1
GeneralECGWaveformStorage                            1.2.840.10008.5.1.4.1.1.9.1.2
AmbulatoryECGWaveformStorage                         1.2.840.10008.5.1.4.1.1.9.1.3
HemodynamicWaveformStorage                           1.2.840.10008.5.1.4.1.1.9.2.1
CardiacElectrophysiologyWaveformStorage              1.2.840.10008.5.1.4.1.1.9.3.1
BasicVoiceAudioWaveformStorage                       1.2.840.10008.5.1.4.1.1.9.4.1
GeneralAudioWaveformStorage                          1.2.840.10008.5.1.4.1.1.9.4.2
ArterialPulseWaveformStorage                         1.2.840.10008.5.1.4.1.1.9.5.1
RespiratoryWaveformStorage                           1.2.840.10008.5.1.4.1.1.9.6.1
RETIRED_StandaloneModalityLUTStorage                 1.2.840.10008.5.1.4.1.1.10
RETIRED_StandaloneVOILUTStorage                      1.2.840.10008.5.1.4.1.1.11
GrayscaleSoftcopyPresentationStateStorage            1.2.840.10008.5.1.4.1.1.11.1
ColorSoftcopyPresentationStateStorage                1.2.840.10008.5.1.4.1.1.11.2
PseudoColorSoftcopyPresentationStateStorage          1.2.840.10008.5.1.4.1.1.11.3
BlendingSoftcopyPresentationStateStorage             1.2.840.10008.5.1.4.1.1.11.4
XAXRFGrayscaleSoftcopyPresentationStateStorage       1.2.840.10008.5.1.4.1.1.11.5
XRayAngiographicImageStorage                         1.2.840.10008.5.1.4.1.1.12.1
EnhancedXAImageStorage                               1.2.840.10008.5.1.4.1.1.12.1.1
XRayRadiofluoroscopicImageStorage                    1.2.840.10008.5.1.4.1.1.12.2
EnhancedXRFImageStorage                              1.2.840.10008.5.1.4.1.1.12.2.1
RETIRED_XRayAngiographicBiPlaneImageStorage          1.2.840.10008.5.1.4.1.1.12.3
XRay3DAngiographicImageStorage                       1.2.840.10008.5.1.4.1.1.13.1.1
XRay3DCraniofacialImageStorage                       1.2.840.10008.5.1.4.1.1.13.1.2
BreastTomosynthesisImageStorage                      1.2.840.10008.5.1.4.1.1.13.1.3
IntravascularOpt.Coh.Tom.ImageStorageForPresentation 1.2.840.10008.5.1.4.1.1.14.1
IntravascularOpt.Coh.Tom.ImageStorageForProcessing   1.2.840.10008.5.1.4.1.1.14.2
NuclearMedicineImageStorage                          1.2.840.10008.5.1.4.1.1.20
RawDataStorage                                       1.2.840.10008.5.1.4.1.1.66
SpatialRegistrationStorage                           1.2.840.10008.5.1.4.1.1.66.1
SpatialFiducialsStorage                              1.2.840.10008.5.1.4.1.1.66.2
DeformableSpatialRegistrationStorage                 1.2.840.10008.5.1.4.1.1.66.3
SegmentationStorage                                  1.2.840.10008.5.1.4.1.1.66.4
SurfaceSegmentationStorage                           1.2.840.10008.5.1.4.1.1.66.5
RealWorldValueMappingStorage                         1.2.840.10008.5.1.4.1.1.67
SurfaceScanMeshStorage                               1.2.840.10008.5.1.4.1.1.68.1
SurfaceScanPointCloudStorage                         1.2.840.10008.5.1.4.1.1.68.2
RETIRED_VLImageStorage                               1.2.840.10008.5.1.4.1.1.77.1
VLEndoscopicImageStorage                             1.2.840.10008.5.1.4.1.1.77.1.1
VideoEndoscopicImageStorage                          1.2.840.10008.5.1.4.1.1.77.1.1.1
VLMicroscopicImageStorage                            1.2.840.10008.5.1.4.1.1.77.1.2
VideoMicroscopicImageStorage                         1.2.840.10008.5.1.4.1.1.77.1.2.1
VLSlideCoordinatesMicroscopicImageStorage            1.2.840.10008.5.1.4.1.1.77.1.3
VLPhotographicImageStorage                           1.2.840.10008.5.1.4.1.1.77.1.4
VideoPhotographicImageStorage                        1.2.840.10008.5.1.4.1.1.77.1.4.1
OphthalmicPhotography8BitImageStorage                1.2.840.10008.5.1.4.1.1.77.1.5.1
OphthalmicPhotography16BitImageStorage               1.2.840.10008.5.1.4.1.1.77.1.5.2
StereometricRelationshipStorage                      1.2.840.10008.5.1.4.1.1.77.1.5.3
OphthalmicTomographyImageStorage                     1.2.840.10008.5.1.4.1.1.77.1.5.4
VLWholeSlideMicroscopyImageStorage                   1.2.840.10008.5.1.4.1.1.77.1.6
RETIRED_VLMultiframeImageStorage                     1.2.840.10008.5.1.4.1.1.77.2
LensometryMeasurementsStorage                        1.2.840.10008.5.1.4.1.1.78.1
AutorefractionMeasurementsStorage                    1.2.840.10008.5.1.4.1.1.78.2
KeratometryMeasurementsStorage                       1.2.840.10008.5.1.4.1.1.78.3
SubjectiveRefractionMeasurementsStorage              1.2.840.10008.5.1.4.1.1.78.4
VisualAcuityMeasurementsStorage                      1.2.840.10008.5.1.4.1.1.78.5
SpectaclePrescriptionReportStorage                   1.2.840.10008.5.1.4.1.1.78.6
OphthalmicAxialMeasurementsStorage                   1.2.840.10008.5.1.4.1.1.78.7
IntraocularLensCalculationsStorage                   1.2.840.10008.5.1.4.1.1.78.8
MacularGridThicknessAndVolumeReportStorage           1.2.840.10008.5.1.4.1.1.79.1
OphthalmicVisualFieldStaticPerimetryMeasurementsSt.  1.2.840.10008.5.1.4.1.1.80.1
OphthalmicThicknessMapStorage                        1.2.840.10008.5.1.4.1.1.81.1
BasicTextSRStorage                                   1.2.840.10008.5.1.4.1.1.88.11
EnhancedSRStorage                                    1.2.840.10008.5.1.4.1.1.88.22
ComprehensiveSRStorage                               1.2.840.10008.5.1.4.1.1.88.33
Comprehensive3DSRStorage                             1.2.840.10008.5.1.4.1.1.88.34
ProcedureLogStorage                                  1.2.840.10008.5.1.4.1.1.88.40
MammographyCADSRStorage                              1.2.840.10008.5.1.4.1.1.88.50
KeyObjectSelectionDocumentStorage                    1.2.840.10008.5.1.4.1.1.88.59
ChestCADSRStorage                                    1.2.840.10008.5.1.4.1.1.88.65
XRayRadiationDoseSRStorage                           1.2.840.10008.5.1.4.1.1.88.67
ColonCADSRStorage                                    1.2.840.10008.5.1.4.1.1.88.69
ImplantationPlanSRStorage                            1.2.840.10008.5.1.4.1.1.88.70
EncapsulatedPDFStorage                               1.2.840.10008.5.1.4.1.1.104.1
EncapsulatedCDAStorage                               1.2.840.10008.5.1.4.1.1.104.2
PositronEmissionTomographyImageStorage               1.2.840.10008.5.1.4.1.1.128
LegacyConvertedEnhancedPETImageStorage               1.2.840.10008.5.1.4.1.1.128.1
RETIRED_StandalonePETCurveStorage                    1.2.840.10008.5.1.4.1.1.129
EnhancedPETImageStorage                              1.2.840.10008.5.1.4.1.1.130
BasicStructuredDisplayStorage                        1.2.840.10008.5.1.4.1.1.131
RTImageStorage                                       1.2.840.10008.5.1.4.1.1.481.1
RTDoseStorage                                        1.2.840.10008.5.1.4.1.1.481.2
RTStructureSetStorage                                1.2.840.10008.5.1.4.1.1.481.3
RTBeamsTreatmentRecordStorage                        1.2.840.10008.5.1.4.1.1.481.4
RTPlanStorage                                        1.2.840.10008.5.1.4.1.1.481.5
RTBrachyTreatmentRecordStorage                       1.2.840.10008.5.1.4.1.1.481.6
RTTreatmentSummaryRecordStorage                      1.2.840.10008.5.1.4.1.1.481.7
RTIonPlanStorage                                     1.2.840.10008.5.1.4.1.1.481.8
RTIonBeamsTreatmentRecordStorage                     1.2.840.10008.5.1.4.1.1.481.9
RTBeamsDeliveryInstructionStorage                    1.2.840.10008.5.1.4.34.7

Okay bestie, quick vibe check on that list 🫢 β€” the ones with RETIRED_ up front are literally the elders of the group chat, and a couple of the long names got clipped with a . at the end (IntravascularOpt.Coh.Tom.ImageStorageForPresentation, I'm looking at you πŸ‘€, and OphthalmicVisualFieldStaticPerimetryMeasurementsSt. too). That's their actual names in here, don't come for me, I typed them exactly like the page says ✨

Now the important part πŸ”₯

dcmqrscp will propose presentation contexts for all of the 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

That's the default behavior, bestie β€” the out-of-the-box, no-thoughts-just-vibes setup πŸŽ€ But you can change it, and the way you change it is with the --propose options (they're up there in the options section, go scroll, I'll wait πŸ’…). Depending on which of those you pick, here's the transfer syntaxes that are supported:

…and here's the rest of the default presentation-context list, bestie β€” full UIDs, no skips, no shortcuts πŸ’…

LittleEndianImplicitTransferSyntax                   1.2.840.10008.1.2
LittleEndianExplicitTransferSyntax                   1.2.840.10008.1.2.1
DeflatedExplicitVRLittleEndianTransferSyntax         1.2.840.10008.1.2.1.99 (*)
BigEndianExplicitTransferSyntax                      1.2.840.10008.1.2.2
JPEGProcess1TransferSyntax                           1.2.840.10008.1.2.4.50
JPEGProcess2_4TransferSyntax                         1.2.840.10008.1.2.4.51
JPEGProcess14SV1TransferSyntax                       1.2.840.10008.1.2.4.70
JPEGLSLosslessTransferSyntax                         1.2.840.10008.1.2.4.80
JPEGLSLossyTransferSyntax                            1.2.840.10008.1.2.4.81
JPEG2000LosslessOnlyTransferSyntax                   1.2.840.10008.1.2.4.90
JPEG2000TransferSyntax                               1.2.840.10008.1.2.4.91
MPEG2MainProfileAtMainLevelTransferSyntax            1.2.840.10008.1.2.4.100
MPEG2MainProfileAtHighLevelTransferSyntax            1.2.840.10008.1.2.4.101
MPEG4HighProfileLevel4_1TransferSyntax               1.2.840.10008.1.2.4.102
MPEG4BDcompatibleHighProfileLevel4_1TransferSyntax   1.2.840.10008.1.2.4.103
MPEG4HighProfileLevel4_2_For2DVideoTransferSyntax    1.2.840.10008.1.2.4.104
MPEG4HighProfileLevel4_2_For3DVideoTransferSyntax    1.2.840.10008.1.2.4.105
MPEG4StereoHighProfileLevel4_2TransferSyntax         1.2.840.10008.1.2.4.106
HEVCMainProfileLevel5_1TransferSyntax                1.2.840.10008.1.2.4.107
HEVCMain10ProfileLevel5_1TransferSyntax              1.2.840.10008.1.2.4.108
RLELosslessTransferSyntax                            1.2.840.10008.1.2.5

(*) that lil asterisk on the deflated one means it's only there if compiled with zlib support enabled (peep the --version output to check, iykyk 🧚).

Okay and now a genuine vibe check moment 😭 β€” the dcmqrscp application does not support extended negotiation. That's it, that's the whole sentence, no cap.

But like, if you do want presentation contexts for other SOP Classes and/or transfer syntaxes, you can set them up through the --assoc-config-file option β€” just pick an appropriate profile for outgoing associations ✨. Heads up though: the selected profile will completely override the default configuration listed above. Like, whole thing, gone, replaced. Not a merge, bestie, a takeover πŸ‘‘


πŸ’– SCP Conformance πŸ’–

So dcmqrscp supports these SOP Classes as an SCP β€” the full roster, slay πŸ‘‘

VerificationSOPClass                                 1.2.840.10008.1.1

FINDPatientRootQueryRetrieveInformationModel         1.2.840.10008.5.1.4.1.2.1.1
FINDPatientStudyOnlyQueryRetrieveInformationModel    1.2.840.10008.5.1.4.1.2.3.1
FINDStudyRootQueryRetrieveInformationModel           1.2.840.10008.5.1.4.1.2.2.1
GETPatientRootQueryRetrieveInformationModel          1.2.840.10008.5.1.4.1.2.1.3
GETPatientStudyOnlyQueryRetrieveInformationModel     1.2.840.10008.5.1.4.1.2.3.3
GETStudyRootQueryRetrieveInformationModel            1.2.840.10008.5.1.4.1.2.2.3
MOVEPatientRootQueryRetrieveInformationModel         1.2.840.10008.5.1.4.1.2.1.2
MOVEPatientStudyOnlyQueryRetrieveInformationModel    1.2.840.10008.5.1.4.1.2.3.2
MOVEStudyRootQueryRetrieveInformationModel           1.2.840.10008.5.1.4.1.2.2.2

Like, that's the verification one plus the whole FIND / GET / MOVE trio across Patient Root, Patient/Study Only and Study Root β€” main character energy for real 🫢

okay so we're still in the SOP class list, bestie, and it is long 😭 but every single UID here is a real one that dcmqrscp knows about, so we're listing them all, no cap πŸ’… Names with RETIRED_ in front and names with DRAFT_ in front are literally spelled that way β€” that's the actual string, not me being dramatic πŸŽ€


  • RETIRED_StoredPrintStorage β€” 1.2.840.10008.5.1.1.27
  • RETIRED_HardcopyGrayscaleImageStorage β€” 1.2.840.10008.5.1.1.29
  • RETIRED_HardcopyColorImageStorage β€” 1.2.840.10008.5.1.1.30
  • ComputedRadiographyImageStorage β€” 1.2.840.10008.5.1.4.1.1.1
  • DigitalXRayImageStorageForPresentation β€” 1.2.840.10008.5.1.4.1.1.1.1
  • DigitalXRayImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.1.1.1
  • DigitalMammographyXRayImageStorageForPresentation β€” 1.2.840.10008.5.1.4.1.1.1.2
  • DigitalMammographyXRayImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.1.2.1
  • DigitalIntraOralXRayImageStorageForPresentation β€” 1.2.840.10008.5.1.4.1.1.1.3
  • DigitalIntraOralXRayImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.1.3.1

that's the radiography girlies β€” and notice how every ...ForPresentation has a matching ...ForProcessing twin? siblings, your honor 🫢


  • CTImageStorage β€” 1.2.840.10008.5.1.4.1.1.2
  • EnhancedCTImageStorage β€” 1.2.840.10008.5.1.4.1.1.2.1
  • LegacyConvertedEnhancedCTImageStorage β€” 1.2.840.10008.5.1.4.1.1.2.2
  • CTImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.2.3
  • EnhancedCTImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.2.4
  • LegacyConvertedEnhancedCTImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.2.5

  • RETIRED_UltrasoundMultiframeImageStorage β€” 1.2.840.10008.5.1.4.1.1.3
  • UltrasoundMultiframeImageStorage β€” 1.2.840.10008.5.1.4.1.1.3.1
  • MRImageStorage β€” 1.2.840.10008.5.1.4.1.1.4
  • EnhancedMRImageStorage β€” 1.2.840.10008.5.1.4.1.1.4.1
  • MRSpectroscopyStorage β€” 1.2.840.10008.5.1.4.1.1.4.2
  • EnhancedMRColorImageStorage β€” 1.2.840.10008.5.1.4.1.1.4.3
  • LegacyConvertedEnhancedMRImageStorage β€” 1.2.840.10008.5.1.4.1.1.4.4
  • RETIRED_NuclearMedicineImageStorage β€” 1.2.840.10008.5.1.4.1.1.5
  • RETIRED_UltrasoundImageStorage β€” 1.2.840.10008.5.1.4.1.1.6
  • UltrasoundImageStorage β€” 1.2.840.10008.5.1.4.1.1.6.1
  • EnhancedUSVolumeStorage β€” 1.2.840.10008.5.1.4.1.1.6.2
  • PhotoacousticImageStorage β€” 1.2.840.10008.5.1.4.1.1.6.3

the retired US one and the un-retired one sit right next to each other with nearly the same UID and honestly? it's giving "we don't talk about her anymore" πŸ™ˆ


  • SecondaryCaptureImageStorage β€” 1.2.840.10008.5.1.4.1.1.7
  • MultiframeSingleBitSecondaryCaptureImageStorage β€” 1.2.840.10008.5.1.4.1.1.7.1
  • MultiframeGrayscaleByteSecondaryCaptureImageStorage β€” 1.2.840.10008.5.1.4.1.1.7.2
  • MultiframeGrayscaleWordSecondaryCaptureImageStorage β€” 1.2.840.10008.5.1.4.1.1.7.3
  • MultiframeTrueColorSecondaryCaptureImageStorage β€” 1.2.840.10008.5.1.4.1.1.7.4
  • RETIRED_StandaloneOverlayStorage β€” 1.2.840.10008.5.1.4.1.1.8
  • RETIRED_StandaloneCurveStorage β€” 1.2.840.10008.5.1.4.1.1.9

waveform era ⚑ this whole chunk is the body-monitor cinematic universe:

  • DRAFT_WaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.1
  • TwelveLeadECGWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.1.1
  • GeneralECGWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.1.2
  • AmbulatoryECGWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.1.3
  • General32BitECGWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.1.4
  • HemodynamicWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.2.1
  • CardiacElectrophysiologyWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.3.1
  • BasicVoiceAudioWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.4.1
  • GeneralAudioWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.4.2
  • ArterialPulseWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.5.1
  • RespiratoryWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.6.1
  • MultichannelRespiratoryWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.6.2
  • RoutineScalpElectroencephalogramWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.7.1
  • ElectromyogramWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.7.2
  • ElectrooculogramWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.7.3
  • SleepElectroencephalogramWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.7.4
  • BodyPositionWaveformStorage β€” 1.2.840.10008.5.1.4.1.1.9.8.1
  • WaveformPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.9.100.1
  • WaveformAcquisitionPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.9.100.2

presentation state o'clock 🎨 (these are the "here's how you should look at it" ones):

  • RETIRED_StandaloneModalityLUTStorage β€” 1.2.840.10008.5.1.4.1.1.10
  • RETIRED_StandaloneVOILUTStorage β€” 1.2.840.10008.5.1.4.1.1.11
  • GrayscaleSoftcopyPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.1
  • ColorSoftcopyPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.2
  • PseudoColorSoftcopyPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.3
  • BlendingSoftcopyPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.4
  • XAXRFGrayscaleSoftcopyPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.5
  • GrayscalePlanarMPRVolumetricPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.6
  • CompositingPlanarMPRVolumetricPresent.StateStorage β€” 1.2.840.10008.5.1.4.1.1.11.7
  • AdvancedBlendingPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.8
  • VolumeRenderingVolumetricPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.9
  • SegmentedVolumeRenderingVolumetricPres.StateStorage β€” 1.2.840.10008.5.1.4.1.1.11.10
  • MultipleVolumeRenderingVolumetricPres.StateStorage β€” 1.2.840.10008.5.1.4.1.1.11.11
  • VariableModalityLUTSoftcopyPresentationStateStorage β€” 1.2.840.10008.5.1.4.1.1.11.12
yes bestie, CompositingPlanarMPRVolumetricPresent.StateStorage, SegmentedVolumeRenderingVolumetricPres.StateStorage and MultipleVolumeRenderingVolumetricPres.StateStorage really do have a . shoved in the middle of the word β€” that's how they're written here, so type them exactly like that or the lookup will not know her πŸ’€

  • XRayAngiographicImageStorage β€” 1.2.840.10008.5.1.4.1.1.12.1
  • EnhancedXAImageStorage β€” 1.2.840.10008.5.1.4.1.1.12.1.1
  • XRayRadiofluoroscopicImageStorage β€” 1.2.840.10008.5.1.4.1.1.12.2
  • EnhancedXRFImageStorage β€” 1.2.840.10008.5.1.4.1.1.12.2.1
  • RETIRED_XRayAngiographicBiPlaneImageStorage β€” 1.2.840.10008.5.1.4.1.1.12.3
  • XRay3DAngiographicImageStorage β€” 1.2.840.10008.5.1.4.1.1.13.1.1
  • XRay3DCraniofacialImageStorage β€” 1.2.840.10008.5.1.4.1.1.13.1.2
  • BreastTomosynthesisImageStorage β€” 1.2.840.10008.5.1.4.1.1.13.1.3
  • BreastProjectionXRayImageStorageForPresentation β€” 1.2.840.10008.5.1.4.1.1.13.1.4
  • BreastProjectionXRayImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.13.1.5
  • IntravascularOpt.Coh.Tom.ImageStorageForPresentation β€” 1.2.840.10008.5.1.4.1.1.14.1
  • IntravascularOpt.Coh.Tom.ImageStorageForProcessing β€” 1.2.840.10008.5.1.4.1.1.14.2
  • NuclearMedicineImageStorage β€” 1.2.840.10008.5.1.4.1.1.20
  • ParametricMapStorage β€” 1.2.840.10008.5.1.4.1.1.30

object-y section, these aren't even pictures half the time, they're structures πŸ¦‹:

  • RawDataStorage β€” 1.2.840.10008.5.1.4.1.1.66
  • SpatialRegistrationStorage β€” 1.2.840.10008.5.1.4.1.1.66.1
  • SpatialFiducialsStorage β€” 1.2.840.10008.5.1.4.1.1.66.2
  • DeformableSpatialRegistrationStorage β€” 1.2.840.10008.5.1.4.1.1.66.3
  • SegmentationStorage β€” 1.2.840.10008.5.1.4.1.1.66.4
  • SurfaceSegmentationStorage β€” 1.2.840.10008.5.1.4.1.1.66.5
  • TractographyResultsStorage β€” 1.2.840.10008.5.1.4.1.1.66.6
  • LabelMapSegmentationStorage β€” 1.2.840.10008.5.1.4.1.1.66.7
  • HeightMapSegmentationStorage β€” 1.2.840.10008.5.1.4.1.1.66.8
  • RealWorldValueMappingStorage β€” 1.2.840.10008.5.1.4.1.1.67
  • SurfaceScanMeshStorage β€” 1.2.840.10008.5.1.4.1.1.68.1
  • SurfaceScanPointCloudStorage β€” 1.2.840.10008.5.1.4.1.1.68.2

visible light + eyeballs + microscopes, aka the part where the names get ambitious 😭:

  • RETIRED_VLImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1
  • VLEndoscopicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.1
  • VideoEndoscopicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.1.1
  • VLMicroscopicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.2
  • VideoMicroscopicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.2.1
  • VLSlideCoordinatesMicroscopicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.3
  • VLPhotographicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.4
  • VideoPhotographicImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.4.1
  • OphthalmicPhotography8BitImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.1
  • OphthalmicPhotography16BitImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.2
  • StereometricRelationshipStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.3
  • OphthalmicTomographyImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.4
  • WideFieldOphthalmicPhoto.Stereogr.Proj.ImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.5
  • WideFieldOphthalmicPhotogr.3DCoordinatesImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.6
  • OphthalmicOpticalCoherenceTomogr.EnFaceImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.5.7
  • OphthalmicOpticalCoh.Tomogr.BscanVolumeAnalysisStor. β€” 1.2.840.10008.5.1.4.1.1.77.1.5.8
  • VLWholeSlideMicroscopyImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.6
  • DermoscopicPhotographyImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.7
  • ConfocalMicroscopyImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.8
  • ConfocalMicroscopyTiledPyramidalImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.1.9
  • RETIRED_VLMultiframeImageStorage β€” 1.2.840.10008.5.1.4.1.1.77.2

the abbreviations with dots in them (Photo.Stereogr.Proj., Photogr.3DCoordinates, Tomogr.EnFace, Coh.Tomogr.BscanVolumeAnalysisStor.) are literally the names as listed here β€” and yes OphthalmicOpticalCoh.Tomogr.BscanVolumeAnalysisStor. even ends in a . 😭 copy it exactly, trailing dot and all πŸ‘‘


optometry measurements, aka the "your prescription is data now" chapter πŸ•ΆοΈ:

  • LensometryMeasurementsStorage β€” 1.2.840.10008.5.1.4.1.1.78.1
  • AutorefractionMeasurementsStorage β€” 1.2.840.10008.5.1.4.1.1.78.2
  • KeratometryMeasurementsStorage β€” 1.2.840.10008.5.1.4.1.1.78.3
  • SubjectiveRefractionMeasurementsStorage β€” 1.2.840.10008.5.1.4.1.1.78.4
  • VisualAcuityMeasurementsStorage β€” 1.2.840.10008.5.1.4.1.1.78.5
  • SpectaclePrescriptionReportStorage β€” 1.2.840.10008.5.1.4.1.1.78.6
  • OphthalmicAxialMeasurementsStorage β€” 1.2.840.10008.5.1.4.1.1.78.7
  • IntraocularLensCalculationsStorage β€” 1.2.840.10008.5.1.4.1.1.78.8
  • MacularGridThicknessAndVolumeReportStorage β€” 1.2.840.10008.5.1.4.1.1.79.1
  • OphthalmicVisualFieldStaticPerimetryMeasurementsSt. β€” 1.2.840.10008.5.1.4.1.1.80.1
  • OphthalmicThicknessMapStorage β€” 1.2.840.10008.5.1.4.1.1.81.1
  • CornealTopographyMapStorage β€” 1.2.840.10008.5.1.4.1.1.82.1
OphthalmicVisualFieldStaticPerimetryMeasurementsSt. got cut off at St. β€” that's the name in the list, so keep it, don't "finish" it ✨

last stretch of this chunk, the structured report girlies πŸ“:

  • DRAFT_SRTextStorage β€” 1.2.840.10008.5.1.4.1.1.88.1
  • DRAFT_SRAudioStorage β€” 1.2.840.10008.5.1.4.1.1.88.2
  • DRAFT_SRDetailStorage β€” 1.2.840.10008.5.1.4.1.1.88.3
  • DRAFT_SRComprehensiveStorage β€” 1.2.840.10008.5.1.4.1.1.88.4
  • BasicTextSRStorage β€” 1.2.840.10008.5.1.4.1.1.88.11
  • EnhancedSRStorage β€” 1.2.840.10008.5.1.4.1.1.88.22
  • ComprehensiveSRStorage β€” 1.2.840.10008.5.1.4.1.1.88.33

okay that's this whole stretch of the SOP class list β€” the next part keeps rolling right along from here πŸ’–

…aaand the list literally does not stop, bestie, here's the rest of the storage SOP class roster:

Comprehensive3DSRStorage                             1.2.840.10008.5.1.4.1.1.88.34
ExtensibleSRStorage                                  1.2.840.10008.5.1.4.1.1.88.35
ProcedureLogStorage                                  1.2.840.10008.5.1.4.1.1.88.40
MammographyCADSRStorage                              1.2.840.10008.5.1.4.1.1.88.50
KeyObjectSelectionDocumentStorage                    1.2.840.10008.5.1.4.1.1.88.59
ChestCADSRStorage                                    1.2.840.10008.5.1.4.1.1.88.65
XRayRadiationDoseSRStorage                           1.2.840.10008.5.1.4.1.1.88.67
RadiopharmaceuticalRadiationDoseSRStorage            1.2.840.10008.5.1.4.1.1.88.68
ColonCADSRStorage                                    1.2.840.10008.5.1.4.1.1.88.69
ImplantationPlanSRStorage                            1.2.840.10008.5.1.4.1.1.88.70
AcquisitionContextSRStorage                          1.2.840.10008.5.1.4.1.1.88.71
SimplifiedAdultEchoSRStorage                         1.2.840.10008.5.1.4.1.1.88.72
PatientRadiationDoseSRStorage                        1.2.840.10008.5.1.4.1.1.88.73
PlannedImagingAgentAdministrationSRStorage           1.2.840.10008.5.1.4.1.1.88.74
PerformedImagingAgentAdministrationSRStorage         1.2.840.10008.5.1.4.1.1.88.75
EnhancedXRayRadiationDoseSRStorage                   1.2.840.10008.5.1.4.1.1.88.76
WaveformAnnotationSRStorage                          1.2.840.10008.5.1.4.1.1.88.77
ContentAssessmentResultsStorage                      1.2.840.10008.5.1.4.1.1.90.1
MicroscopyBulkSimpleAnnotationsStorage               1.2.840.10008.5.1.4.1.1.91.1
EncapsulatedPDFStorage                               1.2.840.10008.5.1.4.1.1.104.1
EncapsulatedCDAStorage                               1.2.840.10008.5.1.4.1.1.104.2
EncapsulatedSTLStorage                               1.2.840.10008.5.1.4.1.1.104.3
EncapsulatedOBJStorage                               1.2.840.10008.5.1.4.1.1.104.4
EncapsulatedMTLStorage                               1.2.840.10008.5.1.4.1.1.104.5
PositronEmissionTomographyImageStorage               1.2.840.10008.5.1.4.1.1.128
LegacyConvertedEnhancedPETImageStorage               1.2.840.10008.5.1.4.1.1.128.1
RETIRED_StandalonePETCurveStorage                    1.2.840.10008.5.1.4.1.1.129
EnhancedPETImageStorage                              1.2.840.10008.5.1.4.1.1.130
BasicStructuredDisplayStorage                        1.2.840.10008.5.1.4.1.1.131
CTPerformedProcedureProtocolStorage                  1.2.840.10008.5.1.4.1.1.200.2
XAPerformedProcedureProtocolStorage                  1.2.840.10008.5.1.4.1.1.200.8
RTImageStorage                                       1.2.840.10008.5.1.4.1.1.481.1
RTDoseStorage                                        1.2.840.10008.5.1.4.1.1.481.2
RTStructureSetStorage                                1.2.840.10008.5.1.4.1.1.481.3
RTBeamsTreatmentRecordStorage                        1.2.840.10008.5.1.4.1.1.481.4
RTPlanStorage                                        1.2.840.10008.5.1.4.1.1.481.5
RTBrachyTreatmentRecordStorage                       1.2.840.10008.5.1.4.1.1.481.6
RTTreatmentSummaryRecordStorage                      1.2.840.10008.5.1.4.1.1.481.7
RTIonPlanStorage                                     1.2.840.10008.5.1.4.1.1.481.8
RTIonBeamsTreatmentRecordStorage                     1.2.840.10008.5.1.4.1.1.481.9
RTPhysicianIntentStorage                             1.2.840.10008.5.1.4.1.1.481.10
RTSegmentAnnotationStorage                           1.2.840.10008.5.1.4.1.1.481.11
RTRadiationSetStorage                                1.2.840.10008.5.1.4.1.1.481.12
CArmPhotonElectronRadiationStorage                   1.2.840.10008.5.1.4.1.1.481.13
TomotherapeuticRadiationStorage                      1.2.840.10008.5.1.4.1.1.481.14
RoboticArmRadiationStorage                           1.2.840.10008.5.1.4.1.1.481.15
RTRadiationRecordSetStorage                          1.2.840.10008.5.1.4.1.1.481.16
RTRadiationSalvageRecordStorage                      1.2.840.10008.5.1.4.1.1.481.17
TomotherapeuticRadiationRecordStorage                1.2.840.10008.5.1.4.1.1.481.18
CArmPhotonElectronRadiationRecordStorage             1.2.840.10008.5.1.4.1.1.481.19
RoboticRadiationRecordStorage                        1.2.840.10008.5.1.4.1.1.481.20
RTRadiationSetDeliveryInstructionStorage             1.2.840.10008.5.1.4.1.1.481.21
RTTreatmentPreparationStorage                        1.2.840.10008.5.1.4.1.1.481.22
EnhancedRTImageStorage                               1.2.840.10008.5.1.4.1.1.481.23
EnhancedContinuousRTImageStorage                     1.2.840.10008.5.1.4.1.1.481.24
RTPatientPositionAcquisitionInstructionStorage       1.2.840.10008.5.1.4.1.1.481.25
DICOS_CTImageStorage                                 1.2.840.10008.5.1.4.1.1.501.1
DICOS_DigitalXRayImageStorageForPresentation         1.2.840.10008.5.1.4.1.1.501.2.1
DICOS_DigitalXRayImageStorageForProcessing           1.2.840.10008.5.1.4.1.1.501.2.2
DICOS_ThreatDetectionReportStorage                   1.2.840.10008.5.1.4.1.1.501.3
DICOS_2DAITStorage                                   1.2.840.10008.5.1.4.1.1.501.4
DICOS_3DAITStorage                                   1.2.840.10008.5.1.4.1.1.501.5
DICOS_QuadrupoleResonanceStorage                     1.2.840.10008.5.1.4.1.1.501.6
DICONDE_EddyCurrentImageStorage                      1.2.840.10008.5.1.4.1.1.601.1
DICONDE_EddyCurrentMultiframeImageStorage            1.2.840.10008.5.1.4.1.1.601.2
DICONDE_ThermographyImageStorage                     1.2.840.10008.5.1.4.1.1.601.3
DICONDE_ThermographyMultiFrameImageStorage           1.2.840.10008.5.1.4.1.1.601.4
DICONDE_UltrasoundWaveformStorage                    1.2.840.10008.5.1.4.1.1.601.5
DRAFT_RTBeamsDeliveryInstructionStorage              1.2.840.10008.5.1.4.34.1
RTBeamsDeliveryInstructionStorage                    1.2.840.10008.5.1.4.34.7
RTBrachyApplicationSetupDeliveryInstructionStorage   1.2.840.10008.5.1.4.34.10

PrivateShutdownSOPClass                              1.2.276.0.7230010.3.4.1915765545.18030.917282194.0

Okay so dcmqrscp will accept presentation contexts for all of those supported SOP Classes using any of 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

Vibe check on the preference thing: dcmqrscp will prefer transfer syntaxes having an explicit encoding over the default implicit transfer syntax. And if dcmqrscp is running on big-endian hardware it will prefer BigEndianExplicit to LittleEndianExplicit transfer syntax (and vice versa) β€” lowkey it just wants to match the hardware's energy. You can change this behavior with the --prefer options (see above ✨). Depending on these options, the following transfer syntaxes are supported:

LittleEndianImplicitTransferSyntax                   1.2.840.10008.1.2
LittleEndianExplicitTransferSyntax                   1.2.840.10008.1.2.1
DeflatedExplicitVRLittleEndianTransferSyntax         1.2.840.10008.1.2.1.99
BigEndianExplicitTransferSyntax                      1.2.840.10008.1.2.2
JPEGProcess1TransferSyntax                           1.2.840.10008.1.2.4.50
JPEGProcess2_4TransferSyntax                         1.2.840.10008.1.2.4.51
JPEGProcess14SV1TransferSyntax                       1.2.840.10008.1.2.4.70
JPEGLSLosslessTransferSyntax                         1.2.840.10008.1.2.4.80
JPEGLSLossyTransferSyntax                            1.2.840.10008.1.2.4.81
JPEG2000LosslessOnlyTransferSyntax                   1.2.840.10008.1.2.4.90
JPEG2000TransferSyntax                               1.2.840.10008.1.2.4.91
MPEG2MainProfileAtMainLevelTransferSyntax            1.2.840.10008.1.2.4.100
MPEG2MainProfileAtHighLevelTransferSyntax            1.2.840.10008.1.2.4.101
MPEG4HighProfileLevel4_1TransferSyntax               1.2.840.10008.1.2.4.102
MPEG4BDcompatibleHighProfileLevel4_1TransferSyntax   1.2.840.10008.1.2.4.103
MPEG4HighProfileLevel4_2_For2DVideoTransferSyntax    1.2.840.10008.1.2.4.104
MPEG4HighProfileLevel4_2_For3DVideoTransferSyntax    1.2.840.10008.1.2.4.105
MPEG4StereoHighProfileLevel4_2TransferSyntax         1.2.840.10008.1.2.4.106
HEVCMainProfileLevel5_1TransferSyntax                1.2.840.10008.1.2.4.107
HEVCMain10ProfileLevel5_1TransferSyntax              1.2.840.10008.1.2.4.108
RLELosslessTransferSyntax                            1.2.840.10008.1.2.5
Heads up bestie πŸ’… β€” the dcmqrscp application does not support extended negotiation. Not its thing. It said no.

Presentation contexts for other SOP Classes and Transfer Syntax may be configured via the --assoc-config-file option by selecting an appropriate profile for incoming associations. The selected profile will override only the above mentioned storage SOP classes, and dcmqrscp will accept contexts with the above mentioned FIND, GET, MOVE and private shutdown SOP Classes additionally to the ones defined in the selected profile. Slight but important note: an appropriate profile for role negotiation must be defined and used for enabling GET support. No profile, no GET. iykyk 🫢


🌸 Query Keys 🌸

The dcmqrscp application supports the following attributes as query keys. Basically the search filters it will actually fw, organized by Q/R level:

Query/Retrieve Level: PATIENT (or STUDY for the Study Root Q/R model)

  • (0010,0010) PatientName β€” who they are πŸ’–
  • (0010,0020) PatientID β€” their ID
  • (0010,0021) IssuerOfPatientID β€” who issued that ID
  • (0010,0030) PatientBirthDate β€” birthday
  • (0010,0032) PatientBirthTime β€” birthday, but with the time ✨
  • (0010,0040) PatientSex
  • (0010,1000) OtherPatientIDs (retired)
  • (0010,1001) OtherPatientNames
  • (0010,2160) EthnicGroup (retired)
  • (0010,4000) PatientComments

Query/Retrieve Level: STUDY

  • (0008,0020) StudyDate
  • (0008,0030) StudyTime
  • (0008,0050) AccessionNumber
  • (0008,0090) ReferringPhysicianName
  • (0008,1030) StudyDescription
  • (0008,1060) NameOfPhysiciansReadingStudy
  • (0008,1080) AdmittingDiagnosesDescription
  • (0010,1010) PatientAge
  • (0010,1020) PatientSize
  • (0010,1030) PatientWeight
  • (0010,2180) Occupation
  • (0010,21B0) AdditionalPatientHistory
  • (0020,000D) StudyInstanceUID
  • (0020,0010) StudyID
  • (0020,1070) OtherStudyNumbers (retired)

Query/Retrieve Level: SERIES

  • (0008,0060) Modality
  • (0020,000E) SeriesInstanceUID
  • (0020,0011) SeriesNumber

Query/Retrieve Level: IMAGE

  • (0008,0018) SOPInstanceUID
  • (0020,0013) InstanceNumber

πŸŽ€ Configuration πŸŽ€

The dcmqrscp program uses the same configuration file as the dcmqrti program β€” yes, they share, it's giving sibling energy πŸ‘‘. See the documentation on configuration for more information.


πŸ”₯ Access Control πŸ”₯

When compiled on Unix platforms with TCP wrapper support, host-based access control can be enabled with the --access-control command line option. In this case the access control rules defined in the system's host access control tables for dcmqrscp are enforced β€” the bouncer is checking the list, fr fr. The default locations of the host access control tables are /etc/hosts.allow and /etc/hosts.deny. Further details are described in hosts_access(5).

✨ LOGGING ✨

okay so the level of logging output from all the command line tools and the underlying libraries is something you can control, bestie. By default, only errors and warnings get written to the standard error stream. Using option --verbose also reports informational messages like processing details. Option --debug gets you more details on the internal activity, e.g. for debugging purposes. Other logging levels can be picked using option --log-level. In --quiet mode, only fatal errors are reported β€” and in those very severe error events, the application will usually terminate. For more details on the different logging levels, see the documentation of module "oflog".

If the logging output should go to a file (optionally with logfile rotation), to syslog (Unix) or to the event log (Windows), option --log-config is your girl. This configuration file also lets you direct only certain messages to a particular output stream and filter certain messages based on the module or application where they are generated. An example configuration file is provided in <etcdir>/logger.cfg. πŸŽ€


πŸ’» COMMAND LINE πŸ’»

All command line tools use this notation for parameters, no cap: square brackets enclose optional values (0-1), three trailing dots indicate that multiple values are allowed (1-n), and a combination of both means 0 to n values.

Command line options are distinguished from parameters by a leading + or - sign, respectively. Usually, order and position of command line options are arbitrary (i.e. they can appear anywhere). However, if options are mutually exclusive, the rightmost appearance is used. This behavior conforms to the standard evaluation rules of common Unix shells. πŸ’…

In addition, 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: a command file cannot contain another command file. iykyk

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


🌸 ENVIRONMENT 🌸

The dcmqrscp 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 should only be used when alternative data dictionaries are required, bestie. 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.

Depending on the command line options specified, the dcmqrscp utility will attempt to load character set mapping tables. This happens when DCMTK was compiled with the oficonv library (which is the default) and the mapping tables are not built into the library (default when DCMTK uses shared libraries).

The mapping table files are expected in DCMTK's <datadir>. The DCMICONVPATH environment variable can be used to specify a different location. If a different location is specified, those mapping tables also replace any built-in tables. πŸ¦‹


πŸŽ€ FILES πŸŽ€

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

πŸ”₯ SEE ALSO πŸ”₯

dcmqridx(1), dcmqrti(1)


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


That’s the whole vibe, bestie. The page footer says Version 3.7.1, dated Sat Oct 17 2026 09:34:01 β€” iconic, periodt. πŸ’–βœ¨

πŸ“¦ where this page comes from