getscu(1)

๐Ÿ’– NAME ๐Ÿ’–

okay bestie, welcome to getscu(1) โ€” the OFFIS DCMTK manual page for the DICOM retrieve (C-GET) SCU, and yes, she is that girl ๐Ÿ’…

getscu โ€” DICOM retrieve (C-GET) SCU โœจ


๐ŸŒธ SYNOPSIS ๐ŸŒธ

getscu [options] peer port [dcmfile-in...]

๐Ÿฆ‹ DESCRIPTION ๐Ÿฆ‹

The getscu application implements an SCU for the Query/Retrieve Service Class. getscu supports retrieve functionality using the C-GET message. It sends query keys to an SCP and waits for responses with images or other DICOM objects sent via C-STORE.

As the DICOM service demands, C-GET and the accompanying C-STORE messages are handled on the same association. This is the whole vibe. Therefore, objects can only be received by getscu itself and cannot be sent to a third party โ€” movescu would be the right tool for this task, no cap.

๐Ÿ’€ bestie, this is not a "forward it to your friend" situation. getscu receives the objects itself, periodt.

๐ŸŽ€ PARAMETERS ๐ŸŽ€

  • peer โ€” hostname of DICOM peer ๐ŸŒ
  • port โ€” tcp/ip port number of peer ๐Ÿ”Œ
  • dcmfile-in โ€” DICOM query file(s) ๐Ÿ“„

โœจ 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 โ€” [l]evel: string constant (fatal, error, warn, info, debug, trace): use level l for the logger ๐Ÿชต
  • -lc, --log-config โ€” [f]ilename: string: use config file f for the logger โš™๏ธ
  • +v, --verbose-pc โ€” show presentation contexts in verbose mode ๐Ÿ–ผ๏ธ

๐ŸŒ network options ๐ŸŒ

๐Ÿ”‘ override matching keys:

  • -k, --key โ€” [k]ey: gggg,eeee="str", path or dictionary name="str": override matching key ๐Ÿ”‘

๐Ÿง  query information model:

  • -P, --patient โ€” use patient root information model (default) ๐Ÿ‘‘
  • -S, --study โ€” use study root information model ๐Ÿ“š
  • -O, --psonly โ€” use patient/study only information model ๐ŸŒฑ

๐ŸŒˆ IP protocol version:

  • -i4, --ipv4 โ€” use IPv4 only (default) ๐ŸŸข
  • -i6, --ipv6 โ€” use IPv6 only ๐Ÿ”ต
  • -i0, --ip-auto โ€” use DNS lookup to determine IP protocol ๐Ÿงญ

๐Ÿชช application entity titles:

  • -aet, --aetitle โ€” [a]etitle: string: set my calling AE title (default: GETSCU) ๐Ÿ’Œ
  • -aec, --call โ€” [a]etitle: string: set called AE title of peer (default: ANY-SCP) ๐Ÿ“ž

๐Ÿ–ผ๏ธ preferred storage transfer syntaxes (incoming associations):

  • +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 HP / 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 ๐Ÿšซ

๐Ÿ“ค proposed retrieve transfer syntaxes (outgoing associations):

  • -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 ๐Ÿ˜
  • -xd, --propose-deflated โ€” propose deflated explicit VR little endian TS and all uncompressed transfer syntaxes ๐Ÿซง
  • -xi, --propose-implicit โ€” propose implicit VR little endian TS only ๐Ÿšซ

๐Ÿ›ฐ๏ธ other network options:

  • -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: 16384) ๐Ÿ“ฆ
  • --repeat โ€” [n]umber: integer: repeat n times ๐Ÿ”
  • --abort โ€” abort association instead of releasing it ๐Ÿ’ฅ

๐Ÿ” 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 ๐Ÿ”’
  • +tla, --anonymous-tls โ€” use secure TLS connection without certificate ๐Ÿ•ต๏ธ

๐Ÿ”‘ 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 ๐Ÿงฉ

๐Ÿท๏ธ server name indication:

  • --no-sni โ€” do not use SNI (default) ๐Ÿšซ
  • --request-sni โ€” [s]erver name: string: request 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) โœ…
  • -ic, --ignore-peer-cert โ€” don't verify peer certificate ๐Ÿ™ˆ

๐Ÿ“ฆ output options ๐Ÿ“ฆ

๐Ÿ—‚๏ธ general:

  • -od, --output-directory โ€” [d]irectory: string (default: "."): write received objects to existing directory d ๐Ÿ“

๐Ÿ’พ storage mode:

  • -B, --normal โ€” receive in memory, then write to disk (default) ๐Ÿง 
  • +B, --bit-preserving โ€” receive directly to disk ๐Ÿ’ฝ
  • --ignore โ€” ignore store data, receive but do not store ๐Ÿšฎ

๐Ÿ“ NOTES ๐Ÿ“

Each file supplied on the command line will be sent to the SCP as part of a C-GET request. The query file must be a valid DICOM data set containing the dataset part of a C-GET-RQ message. The query file could, for instance, be created with the dump2dcm utility from a script like the following example:

# request all images for the patient with ID=PAT001
(0008,0052) CS [PATIENT]     # QueryRetrieveLevel
(0010,0020) LO [PAT001]      # PatientID

Another possibility is to use the dcmodify tool to create a file from scratch using the option --create-file with successive calls to the --insert option. Individual attributes can be modified or supplemented using the -k (or --key) option. For example the command:

getscu -k "0010,0020=PAT002" caesar 5678 patqry.dcm

will, when sent to the SCP caesar at TCP/IP port 5678, cause any PatientID attribute in patqry.dcm to have the value 'PAT002'. If such an attribute is present it will be replaced, if absent it will be inserted. The -k option can be present more than once. The value part (after the '=') may be absent causing the attribute to be sent with zero length. It is also possible to specify sequences, items and nested attributes using the -k option. In these cases, a special "path" notation has to be used. Details can be found in the dcmodify documentation.

If no file is specified on the command line, the query must be specified completely with one or more -k options. If multiple query files are provided, getscu will send multiple C-GET requests to the SCP. ๐Ÿ”

๐Ÿ’€ Known Problems ๐Ÿ’€

getscu is intended to be used as a testing tool for DICOM software developers. The query keys file must be created by hand based upon the contents of the SCP. ๐Ÿซ 

no cap, bestie: this is a developer testing-tool situation, and the query keys file is a handmade thing based on what the SCP has. ๐Ÿ’…
  • C-GET? yeah, not every Query/Retrieve SCP is gonna play nice with it ๐Ÿ™ˆ the C-MOVE protocol โ€” which is what the movescu tool implements โ€” is way more common out there in the wild. iykyk.
  • also real talk: getscu makes no attempt to stop you from sending a bad query. none. zero. it will absolutely let you cook ๐Ÿ”ฅ in particular, the query keys of a C-MOVE request should only contain the QueryRetrieveLevel attribute and one or more of the so-called "unique key attributes" (PatientID, StudyInstanceUID, SeriesInstanceUID and SOPInstanceUID). that's the whole guest list, bestie โ€” nobody else gets in ๐Ÿ’…

๐ŸŒˆ DICOM Conformance ๐ŸŒˆ

โœจ SCU Conformance โœจ

okay so here's the tea on what getscu can do as an SCU โ€” it supports these SOP Classes, periodt:

  • GETPatientRootQueryRetrieveInformationModel โ€” 1.2.840.10008.5.1.4.1.2.1.3
  • GETStudyRootQueryRetrieveInformationModel โ€” 1.2.840.10008.5.1.4.1.2.2.3
  • GETPatientStudyOnlyQueryRetrieveInformationModel โ€” 1.2.840.10008.5.1.4.1.2.3.3

the getscu application will propose presentation contexts for one of the abovementioned supported SOP Classes depending on your command line options (-P, -S, or -O). your flags, your fate ๐Ÿฆ‹

for outgoing associations, these 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
(*) only if it was compiled with zlib support enabled ๐Ÿ‘€ check the --version output to find out. no zlib, no deflate, that's the rule ๐Ÿ’€

which transfer syntaxes actually get proposed, and in what order, is fully up to you โ€” you specify that with the --propose options. main character energy, honestly ๐Ÿ‘‘


๐ŸŽ€ Storage Conformance ๐ŸŽ€

and when getscu is out here being an SCP, it supports this one:

  • VerificationSOPClass โ€” 1.2.840.10008.1.1

just the vibe check class, and honestly? she slays it ๐Ÿ’–

...still going, bestie, the guest list is long but every single one of these is getting an invite ๐Ÿ’… Here's the rest of the SOP Class lineup โ€” name on the left, UID on the right, and yeah you need both, that's the whole point:

       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 phew, that's the whole roster ๐Ÿซถ Now for the actual tea: getscu will usually accept presentation contexts for all of the SOP Classes we just listed up there, 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

And here's where it gets a lil opinionated ๐Ÿ˜Œ When it's acting as a storage SCP, getscu prefers transfer syntaxes that have an explicit encoding over the default implicit transfer syntax โ€” it's just built different, no cap. And if getscu happens to be running on big-endian hardware, it'll prefer BigEndianExplicit over LittleEndianExplicit (and the other way around on little-endian, duh). You can absolutely change all of this with the --prefer options, which are up above if you skipped 'em (go back, bestie, they're important ๐Ÿ‘€). And depending on which --prefer option you actually ended up using, a combination of the following transfer syntaxes is 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

(*) only if it was compiled with zlib support enabled โ€” peep the --version output to check, bestie ๐Ÿซถ

Also, huge heads-up: getscu does not support extended negotiation. That's just how it is, no notes ๐Ÿ’…


๐ŸŒˆ EXAMPLES ๐ŸŒˆ

okay so watch this:

getscu --patient --call ARCHIVE caesar 104 q.dcm

That sends the attributes contained in the DICOM file q.dcm as part of a C-GET request to the application entity ARCHIVE on the host caesar at port 104, using the Patient Root query model. And getscu itself? It rolls with the default AE title GETSCU. main character energy โœจ

Now here's the little plot twist you need to know about โ€” in contrast to C-MOVE-based Query/Retrieve SOP Classes, the C-GET-based SOP Classes that getscu uses only permit retrieving the desired objects on the same connection, i.e. getscu will receive the objects itself. So no, you can't tell the SCP to yeet the objects over to a third party. ๐Ÿ˜ญ And that's literally not getscu's fault โ€” it's a limitation of the DICOM protocol itself, not of the getscu tool. fr fr.


๐ŸŽ€ LOGGING ๐ŸŽ€

So the level of logging output of the various command line tools and underlying libraries? That's up to you, bestie โ€” user's choice. By default, only errors and warnings get written to the standard error stream. Basic but valid.

Wanna see more? --verbose also reports informational messages like processing details. ๐Ÿ‘€ And --debug gets you more details on the internal activity, e.g. for debugging purposes โ€” perfect when you're being a little detective ๐Ÿ”

Other logging levels can be selected using --log-level. And in --quiet mode? Only fatal errors are reported. In those very severe error events, the application will usually terminate ๐Ÿ’€ like okay dramatic but fair.

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

Now, if you want that logging output written to a file (optionally with logfile rotation ๐Ÿ’ซ), to syslog (Unix) or to the event log (Windows), use --log-config. This configuration file also allows for directing only certain messages to a particular output stream and for filtering certain messages based on the module or application where they're generated. An example configuration file is provided in <etcdir>/logger.cfg โ€” go look, it's giving helpful ๐ŸŽ


๐Ÿ’œ COMMAND LINE ๐Ÿ’œ

All command line tools use the following notation for parameters: 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. Little syntax cheat sheet, love that for us ๐Ÿ“

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. So the rightmost one wins, no cap ๐Ÿ‘‘

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 that a command file cannot contain another command file. No inception, sorry ๐ŸŒ€

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). iconic honestly โœจ


๐Ÿฆ‹ ENVIRONMENT ๐Ÿฆ‹

The getscu 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. Like, don't touch it unless you gotta ๐Ÿ™ˆ

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. And it is an error if no data dictionary can be loaded. ๐Ÿ’€


๐ŸŒธ SEE ALSO ๐ŸŒธ

Go read these too, they're the friend group:


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


okay that's the whole page bestie, you're officially fluent ๐Ÿ’– this was Version 3.7.1, dated Sat Oct 17 2026 09:34:01 โ€” go query something and slay โœจ๐ŸŽ€๐Ÿฆ‹

๐Ÿ“ฆ where this page comes from