GDCMDUMP(1)

okay bestie, welcome to gdcmdump(1) from the DICOM Manipulation corner of the manual โ€” this is the tool that spills a DICOM fileโ€™s whole structure and values onto your console like itโ€™s reading tea leaves ๐Ÿ”ฎ๐Ÿ’–.

โœจ NAME โœจ

gdcmdump โ€” dumps a DICOM file, and it will display the structure and values contained in the specified DICOM file. literally the โ€œshow me whatโ€™s insideโ€ bestie we all need ๐Ÿ’….

๐Ÿฆ‹ SYNOPSIS ๐Ÿฆ‹

gdcmdump [options] dcm_file
gdcmdump [options] dcm_directory

๐Ÿ’– DESCRIPTION ๐Ÿ’–

okay so the gdcmdump command line program dumps a DICOM file to the console. For those familiar with dcmdump (DCMTK) output, gdcmdump has some minor differences. Namely:

  • For Implicit Transfer Syntax gdcmdump will print ?? instead of the dictionary VR

also, gdcmdump has a limited private dictionary that is used to lookup private element whenever possible. itโ€™s giving โ€œI know some of the private names, not all of themโ€ ๐Ÿ•ต๏ธโ€โ™€๏ธ.

๐ŸŽ€ PARAMETERS ๐ŸŽ€

  • dcm_file โ€” DICOM input filename
  • dcm_directory โ€” DICOM input directory

๐Ÿ’… OPTIONS ๐Ÿ’…

๐Ÿ”ฅ specific options ๐Ÿ”ฅ

  • -x, --xml-dict โ€” generate the XML dict (only private elements for now).
  • -r, --recursive โ€” recursive (input is a directory)
  • -d, --dump โ€” dump value (limited use).
  • -p, --print โ€” print value instead of simply dumping (default).
  • -c, --color โ€” print in color.
  • -C, --csa โ€” print SIEMENS CSA Header (0029,[12]0,SIEMENS CSA HEADER).
  • --csa-asl โ€” print decoded SIEMENS CSA MR_ASL (base64).
  • --csa-diffusion โ€” print decoded SIEMENS CSA MRDiffusion (base64).
  • --mrprotocol โ€” print SIEMENS MrProtocol only (within ASCCONV BEGIN/END). or Phoenix Meta Protocol (0021,19,SIEMENS MR SDS 01).
  • -P, --pdb โ€” print GEMS Protocol Data Block (0025,1b,GEMS_SERS_01).
  • --elscint โ€” print ELSCINT Protocol Information (01f7,26,ELSCINT1).
  • --vepro โ€” print VEPRO Protocol Information (0055,20,VEPRO VIF 3.0 DATA). or VEPRO Protocol Information (0055,20,VEPRO VIM 5.0 DATA).
  • --sds โ€” print Philips MR Series Data Storage (1.3.46.670589.11.0.0.12.2) Information (2005,32,Philips MR Imaging DD 002).
  • --ct3 โ€” print CT Private Data 2 (7005,10,TOSHIBA_MEC_CT3).
  • --pmtf โ€” print PMTF INFORMATION DATA sub-sequences (0029,01,PMTF INFORMATION DATA). or TOSHIBA_MEC_MR3 sub-sequences (0029,01,TOSHIBA_MEC_MR3). or CANON_MEC_MR3 sub-sequences (0029,01,CANON_MEC_MR3)
  • --medcom โ€” print MedCom History Information as UTF-8 (0029,20,SIEMENS MEDCOM HEADER).
  • --mr3 โ€” print Original Data as UTF-8 (700d,08,TOSHIBA_MEC_MR3).
  • -A, --asn1 โ€” print encapsulated ASN1 structure >(0400,0520).
  • --map-uid-names โ€” map UID to names.

๐ŸŒˆ general options ๐ŸŒˆ

  • -h, --help โ€” print this help text and exit
  • -v, --version โ€” print version information and exit
  • -V, --verbose โ€” verbose mode (warning+error).
  • -W, --warning โ€” warning mode, print warning information
  • -E, --error โ€” error mode, print error information
  • -D, --debug โ€” debug mode, print debug information

โญ special options โญ

  • -I, --ignore-errors โ€” dumps even if file is corrupted (advanced users only, see disclaimers).

๐ŸŒธ TYPICAL USAGE ๐ŸŒธ

๐Ÿ’œ Printing Implicit Transfer Syntax ๐Ÿ’œ

The VR are not found in the file, thus are presented with a โ€œ(??)โ€, and right next to it (if found) the correct VR.

Eg.:

$ gdcmdump GE_DLX-8-MONO2-PrivateSyntax.dcm

# Dicom-File-Format
...
(0008,0000) ?? (UL) 434                                           # 4,1 Generic Group Length
(0008,0005) ?? (CS) [ISO_IR 100]                                  # 10,1-n Specific Character Set
(0008,0008) ?? (CS) [ORIGINAL\\PRIMARY\\SINGLE PLANE ]              # 30,2-n Image Type
(0008,0016) ?? (UI) [1.2.840.10008.5.1.4.1.1.12.1]                # 28,1 SOP Class UID
(0008,0018) ?? (UI) [1.2.840.113619.2.16.1.0.906539207.1.24207]   # 42,1 SOP Instance UID
(0008,0020) ?? (DA) [19980923]                                    # 8,1 Study Date
(0008,0021) ?? (DA) [19980923]                                    # 8,1 Series Date
(0008,0022) ?? (DA) [19980923]                                    # 8,1 Acquisition Date
(0008,0023) ?? (DA) [19980923]                                    # 8,1 Content Date
(0008,0030) ?? (TM) [101229.000]                                  # 10,1 Study Time
(0008,0031) ?? (TM) [101229.000]                                  # 10,1 Series Time
(0008,0032) ?? (TM) [102653.000]                                  # 10,1 Acquisition Time
(0008,0033) ?? (TM) [102653.000]                                  # 10,1 Content Time
...

GDCM has a limited private dictionary. Whenever possible, it will try to lookup the private data element. itโ€™s lowkey a private-element detective and I respect it ๐Ÿซถ.

$ gdcmdump 012345.002.050.dcm

...
(0009,0010) LO [GEMS_IDEN_01]                                     # 12,1 Private Creator
(0009,1001) LO [GE_GENESIS_FF ]                                   # 14,1 Full fidelity
(0009,1002) SH [MRCV]                                             # 4,1 Suite id
(0009,1004) SH [SIGNA ]                                           # 6,1 Product id
(0009,1027) SL 985968524                                          # 4,1 Image actual date
(0009,1030) SH [19356UMR2 ]                                       # 10,1 Service id
(0009,1031) SH [999 ]                                             # 4,1 Mobile location number
(0009,10e3) UI [1.2.840.113619.1.1.4.1762386977]                  # 32,1 Equipment UID
(0009,10e6) SH [08]                                               # 2,1 Genesis Version - now
(0009,10e7) UL 2757786872                                         # 4,1 Exam Record checksum
(0009,10e9) SL 985968523                                          # 4,1 Actual series data time stamp
...
(0019,0000) UL 1208                                               # 4,1 Generic Group Length
(0019,0010) LO [GEMS_ACQU_01]                                     # 12,1 Private Creator
(0019,100f) DS [424.399994]                                       # 10,1 Horiz. Frame of ref.
(0019,1011) SS 0                                                  # 2,1 Series contrast
...
(0019,10e0) DS [0.000000]                                         # 8,1 User data 24 {# DTI Diffusion Dir., release 10.0 & above}
(0019,10e2) DS [0.000000]                                         # 8,1 Velocity Encode Scale
(0019,10f2) SS 0                                                  # 2,1 Fast phases
(0019,10f9) DS [98]                                               # 2,1 Transmit gain
...
(0021,0000) UL 372                                                # 4,1 Generic Group Length
(0021,0010) LO [GEMS_RELA_01]                                     # 12,1 Private Creator
(0021,1003) SS 0                                                  # 2,1 Series from which Prescribed
...

๐Ÿงš SIEMENS CSA Header ๐Ÿงš

Using this option it is possible to dump as a readable text what is contained in the private attribute as found in typical SIEMENS MR DICOM file.

Eg.:

$ gdcmdump --csa MR_SIEMENS_forceLoad29-1010_29-1020.dcm

(0029,0010)siemens csa header
Image shadow data (0029,xx10)

0 - 'EchoLinePosition' VM 1, VR IS, SyngoDT 6, NoOfItems 6, Data '64      '
1 - 'EchoColumnPosition' VM 1, VR IS, SyngoDT 6, NoOfItems 6, Data '64      '
2 - 'EchoPartitionPosition' VM 1, VR IS, SyngoDT 6, NoOfItems 6, Data '32      '
3 - 'UsedChannelMask' VM 1, VR UL, SyngoDT 9, NoOfItems 6, Data '255     '
4 - 'Actual3DImaPartNumber' VM 1, VR IS, SyngoDT 6, NoOfItems 0, Data
5 - 'ICE_Dims' VM 1, VR LO, SyngoDT 19, NoOfItems 6, Data 'X_1_1_1_1_1_1_31_1_1_1_1_19'
6 - 'B_value' VM 1, VR IS, SyngoDT 6, NoOfItems 6, Data '0       '
7 - 'Filter1' VM 1, VR IS, SyngoDT 6, NoOfItems 0, Data
8 - 'Filter2' VM 1, VR IS, SyngoDT 6, NoOfItems 0, Data
...

๐Ÿซถ SIEMENS CSA Header: MR_ASL ๐Ÿซถ

Using this option it is possible to dump a decoded (base64) version of MR_ASL contained in the CSA header.

Eg.:

$ gdcmdump --csa-asl ASL.dcm

(0018,9251) SQ (Sequence with undefined length)                   # u/l,1 MR Arterial Spin Labeling Sequence
  (fffe,e000) na (Item with undefined length)
    (0018,9252) LO [2D pulsed ASL (EP2D)]                         # 20,1 ASL Technique Description
    (0018,9257) CS [LABEL ]                                       # 6,1 ASL Context
    (0018,9259) CS [NO]                                           # 2,1 ASL Crusher Flag
    (0018,925c) CS [YES ]                                         # 4,1 ASL Bolus Cut-off Flag
    (0018,925d) SQ (Sequence with undefined length)               # u/l,1 ASL Bolus Cut-off Timing Sequence
      (fffe,e000) na (Item with undefined length)
        (0018,925e) LO [Q2TIPS]                                   # 6,1 ASL Bolus Cut-off Technique
        (0018,925f) IS (UL) [1990]                                # 4,1 ASL Bolus Cut-off Delay Time
      (fffe,e00d)
    (fffe,e0dd)
    (0018,9260) SQ (Sequence with undefined length)               # u/l,1 ASL Slab Sequence
      (fffe,e000) na (Item with undefined length)
        (0018,9253) US 1                                          # 2,1 ASL Slab Number
        (0018,9254) FD 109.5                                      # 8,1 ASL Slab Thickness
        (0018,9255) FD 0\0\1                                      # 24,3 ASL Slab Orientation
        (0018,9256) FD 0\-23.9333\-70.9189                        # 24,3 ASL Mid Slab Position
        (0018,9258) IS (UL) [10]                                  # 2,1 ASL Pulse Train Duration
      (fffe,e00d)
    (fffe,e0dd)
  (fffe,e00d)
(fffe,e0dd)

This is completely equivalent to doing (by hand):

$ gdcmdump --csa asl.dcm | grep -A 6 MR_ASL
98 - 'MR_ASL' VM 1, VR UT, SyngoDT 27, NoOfItems 6, Data 'GABRklNRAAD//////v8A4P////8YAFKSTE8UADJEIHB1bHNlZCBBU0wgKEVQMkQpGABXkkNT
BgBMQUJFTCAYAGCSU1EAAP/////+/wDg/////xgAU5JVUwIAAQAYAFSSRkQIAAAAAAAAYFtA
GABVkkZEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8YAFaSRkQYAAAAAAAAAAAAAAAAYOvu
N8AAAACAzrpRwBgAWJJJUwIAMTD+/w3gAAAAAP7/3eAAAAAAGABZkkNTAgBOTxgAXJJDUwQA
WUVTIBgAXZJTUQAA//////7/AOD/////GABekkxPBgBRMlRJUFMYAF+SSVMEADE5OTD+/w3g
AAAAAP7/3eAAAAAA/v8N4AAAAAD+/93gAAAAAA==
'
$  echo 'GABRklNRAAD//////v8A4P////8YAFKSTE8UADJEIHB1bHNlZCBBU0wgKEVQMkQpGABXkkNT
BgBMQUJFTCAYAGCSU1EAAP/////+/wDg/////xgAU5JVUwIAAQAYAFSSRkQIAAAAAAAAYFtA
GABVkkZEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8YAFaSRkQYAAAAAAAAAAAAAAAAYOvu
N8AAAACAzrpRwBgAWJJJUwIAMTD+/w3gAAAAAP7/3eAAAAAAGABZkkNTAgBOTxgAXJJDUwQA
WUVTIBgAXZJTUQAA//////7/AOD/////GABekkxPBgBRMlRJUFMYAF+SSVMEADE5OTD+/w3g
AAAAAP7/3eAAAAAA/v8N4AAAAAD+/93gAAAAAA==
' | base64 -d > asl.dcm
$ dcmdump -f asl.dcm

...and just so we're clear on that VR thing โ€” bestie, pay attention, because this is a real gotcha: currently two attributes, (0018,925f) and (0018,9258), are using a VR that is different from what the DICOM standard specifies. Not a vibe, just a fact. Note it and move on. ๐Ÿ’…


๐ŸŒธ SIEMENS CSA Header: MRDiffusion

Using this option it is possible to dump a decoded (base64) version of MRDiffusion contained in the CSA header. Yes, decoded โ€” we're un-base64-ing it for you so your eyeballs can actually enjoy the tea. โœจ

Eg.:

$ gdcmdump --csa-diffusion DIFFUSION.dcm

# Dicom-File-Format

# Dicom-Meta-Information-Header
# Used TransferSyntax:

# Dicom-Data-Set
# Used TransferSyntax: Unknown Transfer Syntax
(0018,9117) SQ (Sequence with undefined length)                   # u/l,1 MR Diffusion Sequence
  (fffe,e000) na (Item with undefined length)
    (0018,9075) CS [ISOTROPIC ]                                   # 10,1 Diffusion Directionality
    (0018,9087) FD 0                                              # 8,1 Diffusion b-value
  (fffe,e00d)
(fffe,e0dd)

Like, look at that sequence go โ€” ISOTROPIC directionality and a b-value of 0, all laid out and adorable. ๐ŸŒˆ


๐Ÿฆ‹ SIEMENS CSA Header: MrProtocol

Using this option it is possible to dump a sorted version of MrProtocol (extra '"' are trimmed). Sorted and de-quoted?? The glow-up is real โ€” it's giving "I organized my entire life and also removed the clutter." ๐ŸŽ€

Eg.:

$ gdcmdump --mrprotocol input.dcm

Short and sweet, no notes. ๐Ÿซถ

okay so this next bit of the dump is the MR side of things, and bestieโ€ฆ it's a lot ๐Ÿ’€ we're talking about the private MrProtocol / CSA-style block, and gdcmdump just airs out every single parameter without shame. Grab a snack ๐Ÿ“, stretch your thumbs, and let it scroll:

           MrProtocolVersion: 12510002
           acFlowComp[0] : 1
           adFlipAngleDegree[0] : 90
           alTE[0] : 60000
           alTR[0] : 3000000
           dRefSNR : 181090.7706
           dRefSNR_VOI : 181090.7706
           lAverages : 1
           lCombinedEchoes : 1
           lContrasts : 1
           lParadigmPeriodicity : 1
           lRepetitions : 79
           lScanTimeSec : 3
           lTotalScanTimeSec : 246
           sAdjFreSpec.ulMode : 0x1
           sAdjShimSpec.ulMode : 0x2
           sAdjWatSupSpec.ulMode : 0x1
           sAngio.ucPCFlowMode : 0x2
           sAngio.ucTOFInflow : 0x4
           sAutoAlign.dAAMatrix[0] : 1
           sAutoAlign.dAAMatrix[10] : 1
           sAutoAlign.dAAMatrix[15] : 1
           sAutoAlign.dAAMatrix[5] : 1
           sCOIL_SELECT_MEAS.asList[0].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[0].lRxChannelConnected : 1
           sCOIL_SELECT_MEAS.asList[0].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[0].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[0].sCoilElementID.tElement : PH7
           sCOIL_SELECT_MEAS.asList[1].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[1].lRxChannelConnected : 2
           sCOIL_SELECT_MEAS.asList[1].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[1].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[1].sCoilElementID.tElement : PH5
           sCOIL_SELECT_MEAS.asList[2].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[2].lRxChannelConnected : 3
           sCOIL_SELECT_MEAS.asList[2].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[2].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[2].sCoilElementID.tElement : PH3
           sCOIL_SELECT_MEAS.asList[3].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[3].lRxChannelConnected : 4
           sCOIL_SELECT_MEAS.asList[3].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[3].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[3].sCoilElementID.tElement : PH1
           sCOIL_SELECT_MEAS.asList[4].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[4].lRxChannelConnected : 5
           sCOIL_SELECT_MEAS.asList[4].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[4].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[4].sCoilElementID.tElement : PH8
           sCOIL_SELECT_MEAS.asList[5].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[5].lRxChannelConnected : 6
           sCOIL_SELECT_MEAS.asList[5].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[5].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[5].sCoilElementID.tElement : PH6
           sCOIL_SELECT_MEAS.asList[6].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[6].lRxChannelConnected : 7
           sCOIL_SELECT_MEAS.asList[6].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[6].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[6].sCoilElementID.tElement : PH4
           sCOIL_SELECT_MEAS.asList[7].lElementSelected : 1
           sCOIL_SELECT_MEAS.asList[7].lRxChannelConnected : 8
           sCOIL_SELECT_MEAS.asList[7].sCoilElementID.lCoilCopy : 1
           sCOIL_SELECT_MEAS.asList[7].sCoilElementID.tCoilID : 8_Channel_Head
           sCOIL_SELECT_MEAS.asList[7].sCoilElementID.tElement : PH2
           sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[0] : 0x2
           sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[1] : 0x2
           sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[2] : 0x2
           sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[3] : 0x2
           sCOIL_SELECT_MEAS.sCOILPLUGS.auiNmbrOfNibbles[4] : 0x2
           sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[0] : 0xff
           sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[1] : 0xaa
           sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[2] : 0xee
           sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[3] : 0xee
           sCOIL_SELECT_MEAS.sCOILPLUGS.aulPlugId[4] : 0xa4
           sDiffusion.ulMode : 0x1
           sEFISPEC.bEFIDataValid : 1
           sEllipticalFilter.ucMode : 0x1
           sFastImaging.lEPIFactor : 128
           sFastImaging.lSegments : 1
           sFastImaging.lTurboFactor : 1
           sGRADSPEC.alShimCurrent[0] : -166
           sGRADSPEC.alShimCurrent[1] : 596
           sGRADSPEC.alShimCurrent[2] : -516
           sGRADSPEC.alShimCurrent[3] : 84
           sGRADSPEC.alShimCurrent[4] : -295
           sGRADSPEC.bB0CompensationValid : 1
           sGRADSPEC.bCrossTermCompensationValid : 1
           sGRADSPEC.bDelayValid : 1
           sGRADSPEC.bEddyCompensationValid : 1
           sGRADSPEC.bOffsetValid : 1
           sGRADSPEC.bSensitivityValid : 1
           sGRADSPEC.bShimCurrentValid : 1
           sGRADSPEC.flGSWDMinRiseTime : 5
           sGRADSPEC.flSensitivityX : 0.000353238
           sGRADSPEC.flSensitivityY : 0.000364826
           sGRADSPEC.flSensitivityZ : 0.000356804
           sGRADSPEC.lDelayX : 14
           sGRADSPEC.lDelayY : 15
           sGRADSPEC.lDelayZ : 13
           sGRADSPEC.lOffsetX : -10
           sGRADSPEC.lOffsetY : 22
           sGRADSPEC.lOffsetZ : 34
           sGRADSPEC.sB0CompensationX.aflAmplitude[0] : -0.0110937
           sGRADSPEC.sB0CompensationX.aflAmplitude[1] : -0.0276212
           sGRADSPEC.sB0CompensationX.aflAmplitude[2] : 0.00261628
           sGRADSPEC.sB0CompensationX.aflTimeConstant[0] : 1.86006
           sGRADSPEC.sB0CompensationX.aflTimeConstant[1] : 0.0451358
           sGRADSPEC.sB0CompensationX.aflTimeConstant[2] : 0.00199924
           sGRADSPEC.sB0CompensationY.aflAmplitude[0] : 0.0647921
           sGRADSPEC.sB0CompensationY.aflAmplitude[1] : 0.0207167
           sGRADSPEC.sB0CompensationY.aflAmplitude[2] : -0.0131878
           sGRADSPEC.sB0CompensationY.aflTimeConstant[0] : 0.852499
           sGRADSPEC.sB0CompensationY.aflTimeConstant[1] : 0.0633158
           sGRADSPEC.sB0CompensationY.aflTimeConstant[2] : 0.00199999
           sGRADSPEC.sB0CompensationZ.aflAmplitude[0] : 0.119857
           sGRADSPEC.sB0CompensationZ.aflAmplitude[1] : 0.0106907
           sGRADSPEC.sB0CompensationZ.aflAmplitude[2] : -0.0159243
           sGRADSPEC.sB0CompensationZ.aflTimeConstant[0] : 1.03958
           sGRADSPEC.sB0CompensationZ.aflTimeConstant[1] : 0.019543
           sGRADSPEC.sB0CompensationZ.aflTimeConstant[2] : 0.00141055
           sGRADSPEC.sCrossTermCompensationXY.aflAmplitude[0] : 0.000779649
           sGRADSPEC.sCrossTermCompensationXY.aflTimeConstant[0] : 0.609972
           sGRADSPEC.sCrossTermCompensationXZ.aflAmplitude[0] : -0.000357764
           sGRADSPEC.sCrossTermCompensationXZ.aflTimeConstant[0] : 0.757463
           sGRADSPEC.sCrossTermCompensationYX.aflAmplitude[0] : 0.00028701
           sGRADSPEC.sCrossTermCompensationYX.aflTimeConstant[0] : 0.692162
           sGRADSPEC.sCrossTermCompensationYZ.aflAmplitude[0] : 0.000341002
           sGRADSPEC.sCrossTermCompensationYZ.aflTimeConstant[0] : 0.643997
           sGRADSPEC.sEddyCompensationX.aflAmplitude[0] : 0.00321033
           sGRADSPEC.sEddyCompensationX.aflAmplitude[1] : 0.0764387
           sGRADSPEC.sEddyCompensationX.aflAmplitude[2] : -0.0119296
           sGRADSPEC.sEddyCompensationX.aflAmplitude[3] : 0.002806
           sGRADSPEC.sEddyCompensationX.aflAmplitude[4] : 0.00131044
           sGRADSPEC.sEddyCompensationX.aflTimeConstant[0] : 1.92825
           sGRADSPEC.sEddyCompensationX.aflTimeConstant[1] : 0.530542
           sGRADSPEC.sEddyCompensationX.aflTimeConstant[2] : 0.348189
           sGRADSPEC.sEddyCompensationX.aflTimeConstant[3] : 0.0172583
           sGRADSPEC.sEddyCompensationX.aflTimeConstant[4] : 0.00199055
           sGRADSPEC.sEddyCompensationY.aflAmplitude[0] : 0.00129643
           sGRADSPEC.sEddyCompensationY.aflAmplitude[1] : 0.0657945
           sGRADSPEC.sEddyCompensationY.aflAmplitude[2] : -0.00875319
           sGRADSPEC.sEddyCompensationY.aflAmplitude[3] : 0.00247817
           sGRADSPEC.sEddyCompensationY.aflAmplitude[4] : 0.00136282
           sGRADSPEC.sEddyCompensationY.aflTimeConstant[0] : 2.18733
           sGRADSPEC.sEddyCompensationY.aflTimeConstant[1] : 0.554603
           sGRADSPEC.sEddyCompensationY.aflTimeConstant[2] : 0.363992
           sGRADSPEC.sEddyCompensationY.aflTimeConstant[3] : 0.0174167
           sGRADSPEC.sEddyCompensationY.aflTimeConstant[4] : 0.0019934
           sGRADSPEC.sEddyCompensationZ.aflAmplitude[0] : 0.0106364
           sGRADSPEC.sEddyCompensationZ.aflAmplitude[1] : 0.0644895
           sGRADSPEC.sEddyCompensationZ.aflAmplitude[2] : -0.0116849
           sGRADSPEC.sEddyCompensationZ.aflAmplitude[3] : 0.00245425
           sGRADSPEC.sEddyCompensationZ.aflAmplitude[4] : -0.000382604
           sGRADSPEC.sEddyCompensationZ.aflTimeConstant[0] : 2.45763
           sGRADSPEC.sEddyCompensationZ.aflTimeConstant[1] : 0.728919
           sGRADSPEC.sEddyCompensationZ.aflTimeConstant[2] : 0.490303
           sGRADSPEC.sEddyCompensationZ.aflTimeConstant[3] : 0.0146871
           sGRADSPEC.sEddyCompensationZ.aflTimeConstant[4] : 0.00198729
           sGRADSPEC.ucMode : 0x11
           sGroupArray.anMember[10] : 10
           sGroupArray.anMember[11] : 11
           sGroupArray.anMember[12] : 12
           sGroupArray.anMember[13] : 13
           sGroupArray.anMember[14] : 14
           sGroupArray.anMember[15] : 15
           sGroupArray.anMember[16] : 16
           sGroupArray.anMember[17] : 17
           sGroupArray.anMember[18] : 18
           sGroupArray.anMember[19] : 19
           sGroupArray.anMember[1] : 1
           sGroupArray.anMember[20] : 20
           sGroupArray.anMember[21] : 21
           sGroupArray.anMember[22] : 22
           sGroupArray.anMember[23] : 23
           sGroupArray.anMember[24] : 24
           sGroupArray.anMember[25] : 25
           sGroupArray.anMember[26] : 26
           sGroupArray.anMember[27] : 27
           sGroupArray.anMember[28] : 28
           sGroupArray.anMember[29] : 29
           sGroupArray.anMember[2] : 2
           sGroupArray.anMember[30] : 30
           sGroupArray.anMember[31] : -1
           sGroupArray.anMember[3] : 3
           sGroupArray.anMember[4] : 4
           sGroupArray.anMember[5] : 5
           sGroupArray.anMember[6] : 6
           sGroupArray.anMember[7] : 7
           sGroupArray.anMember[8] : 8
           sGroupArray.anMember[9] : 9
           sGroupArray.asGroup[0].dDistFact : 0.1
           sGroupArray.asGroup[0].nSize : 31
           sGroupArray.lSize : 1
           sGroupArray.sPSat.dGap : 10
           sGroupArray.sPSat.dThickness : 50
           sKSpace.dPhaseResolution : 1
           sKSpace.dSliceResolution : 1
           sKSpace.lBaseResolution : 64
           sKSpace.lImagesPerSlab : 64
           sKSpace.lPartitions : 64
           sKSpace.lPhaseEncodingLines : 64
           sKSpace.ucAveragingMode : 0x2
           sKSpace.ucDimension : 0x2
           sKSpace.ucMultiSliceMode : 0x2
           sKSpace.ucPhasePartialFourier : 0x10
           sKSpace.ucSlicePartialFourier : 0x10
           sKSpace.unReordering : 0x1
           sNavigatorPara.ucRespComp : 0x4
           sPat.lAccelFact3D : 1
           sPat.lAccelFactPE : 1
           sPat.ucPATMode : 0x1
           sPat.ucRefScanMode : 0x1
           sPhysioImaging.lMethod1 : 1
           sPhysioImaging.lMethod2 : 1
           sPhysioImaging.lPhases : 1
           sPhysioImaging.lRetroGatedImages : 16
           sPhysioImaging.lSignal1 : 1
           sPhysioImaging.lSignal2 : 1
           sPhysioImaging.sPhysioECG.lArrhythmiaDetection : 1
           sPhysioImaging.sPhysioECG.lCardiacGateOffThreshold : 700000
           sPhysioImaging.sPhysioECG.lCardiacGateOnThreshold : 100000
           sPhysioImaging.sPhysioECG.lTriggerPulses : 1
           sPhysioImaging.sPhysioECG.lTriggerWindow : 5

okay, a few things I'm obsessed with here, because this dump is a whole aesthetic ๐ŸŒธ

  • The very first line is a little rebel: MrProtocolVersion: 12510002 โ€” colon glued right to the value, no space around it, unlike literally every other line which gets the : treatment. Not me noticing the formatting inconsistency ๐Ÿ˜ญ
  • The coil section is doing the most: eight entries, sCOIL_SELECT_MEAS.asList[0] through sCOIL_SELECT_MEAS.asList[7], each with lRxChannelConnected counting up 1โ€ฆ8 ๐Ÿ’…, each saying tCoilID : 8_Channel_Head, and each one holding a different tElement โ€” PH7, PH5, PH3, PH1, PH8, PH6, PH4, PH2. Note the coil ID and element are not in quotes and use underscores where you'd expect spaces, so 8_Channel_Head is exactly how it prints, bestie โ€” don't "fix" it.
  • Then sCOIL_SELECT_MEAS.sCOILPLUGS gives us five auiNmbrOfNibbles[k], all 0x2, and five aulPlugId[k] in hex: 0xff, 0xaa, 0xee, 0xee, 0xa4. Cute hex, no notes. ๐ŸŽ€
  • sGRADSPEC is the main character of this dump โ€” shim currents (-166, 596, -516, 84, -295), a bunch of b...Valid flags all set to 1, tiny sensitivity floats like sGRADSPEC.flSensitivityX : 0.000353238, plus delays/offsets per axis and stacks of aflAmplitude / aflTimeConstant arrays for B0, cross-term and eddy compensation. It's giving "someone actually measured things" energy ๐Ÿ”ฅ
  • The sGroupArray.anMember list is not numerically sorted โ€” you get [10], [11], [12], โ€ฆ [19], then [1], then [20] โ€ฆ [31], then [2], [3] โ€ฆ [9]. Pure lexicographic sorting vibes. And sGroupArray.anMember[31] : -1 is out there living its truth ๐Ÿ™ˆ while sGroupArray.asGroup[0].nSize : 31 and sGroupArray.lSize : 1 sit below.
  • sKSpace is like the most symmetrical thing ever: dPhaseResolution : 1, dSliceResolution : 1, lBaseResolution : 64, lImagesPerSlab : 64, lPartitions : 64, lPhaseEncodingLines : 64, then ucAveragingMode : 0x2, ucDimension : 0x2, ucMultiSliceMode : 0x2, ucPhasePartialFourier : 0x10, ucSlicePartialFourier : 0x10, unReordering : 0x1. So satisfying, no cap โœจ
  • And the ECG/physio bits at the end: sPhysioImaging.sPhysioECG.lCardiacGateOnThreshold : 100000 vs sPhysioImaging.sPhysioECG.lCardiacGateOffThreshold : 700000 โ€” two very different numbers, both just sitting there, and that's literally all we're gonna say about them because the dump doesn't editorialize and neither should we ๐Ÿซถ
fr fr: every value in that block is printed exactly as it appears โ€” hex stays hex, floats keep all their digits, indices keep their weird order. If you're diffing two dumps, this ordering is the ordering. Don't let anyone tell you otherwise ๐Ÿ’€

and bestie, that's genuinely not even the end of the output โ€” there's more header coming, so keep those scrolling thumbs warm ๐Ÿฆ‹

โ€ฆand it just keeps going, bestie ๐Ÿ˜ญ the CSA header really said "no thoughts, head empty, here's every single field I know." This is the part of the dump where gdcmdump shows you the protocol's whole inner monologue โ€” physiology gating, prep pulses, receiver scaling, and then the slice array just absolutely refusing to be brief. Slay, I guess. ๐Ÿ’…

           sPhysioImaging.sPhysioExt.lCardiacGateOffThreshold : 700000
           sPhysioImaging.sPhysioExt.lCardiacGateOnThreshold : 100000
           sPhysioImaging.sPhysioExt.lTriggerPulses : 1
           sPhysioImaging.sPhysioExt.lTriggerWindow : 5
           sPhysioImaging.sPhysioPulse.lCardiacGateOffThreshold : 700000
           sPhysioImaging.sPhysioPulse.lCardiacGateOnThreshold : 100000
           sPhysioImaging.sPhysioPulse.lTriggerPulses : 1
           sPhysioImaging.sPhysioPulse.lTriggerWindow : 5
           sPhysioImaging.sPhysioResp.dGatingRatio : 0.3
           sPhysioImaging.sPhysioResp.lRespGatePhase : 2
           sPhysioImaging.sPhysioResp.lRespGateThreshold : 20
           sPrepPulses.ucFatSat : 0x1
           sPrepPulses.ucFatSatMode : 0x2
           sPrepPulses.ucInversion : 0x4
           sPrepPulses.ucSatRecovery : 0x1
           sPrepPulses.ucWaterSat : 0x4
           sProtConsistencyInfo.flGMax : 26
           sProtConsistencyInfo.flNominalB0 : 1.494
           sProtConsistencyInfo.flRiseTime : 5
           sRXSPEC.aFFT_SCALE[0].bValid : 1
           sRXSPEC.aFFT_SCALE[0].flFactor : 0.720612
           sRXSPEC.aFFT_SCALE[0].lRxChannel : 1
           sRXSPEC.aFFT_SCALE[1].bValid : 1
           sRXSPEC.aFFT_SCALE[1].flFactor : 0.719059
           sRXSPEC.aFFT_SCALE[1].lRxChannel : 2
           sRXSPEC.aFFT_SCALE[2].bValid : 1
           sRXSPEC.aFFT_SCALE[2].flFactor : 0.705708
           sRXSPEC.aFFT_SCALE[2].lRxChannel : 3
           sRXSPEC.aFFT_SCALE[3].bValid : 1
           sRXSPEC.aFFT_SCALE[3].flFactor : 0.731533
           sRXSPEC.aFFT_SCALE[3].lRxChannel : 4
           sRXSPEC.aFFT_SCALE[4].bValid : 1
           sRXSPEC.aFFT_SCALE[4].flFactor : 0.722418
           sRXSPEC.aFFT_SCALE[4].lRxChannel : 5
           sRXSPEC.aFFT_SCALE[5].bValid : 1
           sRXSPEC.aFFT_SCALE[5].flFactor : 0.738751
           sRXSPEC.aFFT_SCALE[5].lRxChannel : 6
           sRXSPEC.aFFT_SCALE[6].bValid : 1
           sRXSPEC.aFFT_SCALE[6].flFactor : 0.719098
           sRXSPEC.aFFT_SCALE[6].lRxChannel : 7
           sRXSPEC.aFFT_SCALE[7].bValid : 1
           sRXSPEC.aFFT_SCALE[7].flFactor : 0.733029
           sRXSPEC.aFFT_SCALE[7].lRxChannel : 8
           sRXSPEC.alDwellTime[0] : 3000
           sRXSPEC.bGainValid : 1
           sRXSPEC.bVariCapVoltagesValid : 1
           sRXSPEC.lGain : 1

Okay so that's the physics-y half, and honestly? It ate. ๐Ÿ”ฅ Cardiac gate thresholds, respiratory gating ratio, fat sat, water sat, inversion โ€” all just laid out in plain text like a little recipe. And those eight sRXSPEC.aFFT_SCALE[...] entries are one per receive channel, each with its own flFactor, bestie, each one slightly different, and I need you to know that is completely normal and not a bug, don't come for me.

Then the slice array shows up and it's giving main character energy with like thirty entries. Behold, in all its alphabetical-lexicographic-string-sorted glory:

           sSliceArray.anAsc[10] : 10
           sSliceArray.anAsc[11] : 11
           sSliceArray.anAsc[12] : 12
           sSliceArray.anAsc[13] : 13
           sSliceArray.anAsc[14] : 14
           sSliceArray.anAsc[15] : 15
           sSliceArray.anAsc[16] : 16
           sSliceArray.anAsc[17] : 17
           sSliceArray.anAsc[18] : 18
           sSliceArray.anAsc[19] : 19
           sSliceArray.anAsc[1] : 1
           sSliceArray.anAsc[20] : 20
           sSliceArray.anAsc[21] : 21
           sSliceArray.anAsc[22] : 22
           sSliceArray.anAsc[23] : 23
           sSliceArray.anAsc[24] : 24
           sSliceArray.anAsc[25] : 25
           sSliceArray.anAsc[26] : 26
           sSliceArray.anAsc[27] : 27
           sSliceArray.anAsc[28] : 28
           sSliceArray.anAsc[29] : 29
           sSliceArray.anAsc[2] : 2
           sSliceArray.anAsc[30] : 30
           sSliceArray.anAsc[3] : 3
           sSliceArray.anAsc[4] : 4
           sSliceArray.anAsc[5] : 5
           sSliceArray.anAsc[6] : 6
           sSliceArray.anAsc[7] : 7
           sSliceArray.anAsc[8] : 8
           sSliceArray.anAsc[9] : 9
           sSliceArray.anPos[10] : 10
           sSliceArray.anPos[11] : 11
           sSliceArray.anPos[12] : 12
           sSliceArray.anPos[13] : 13
           sSliceArray.anPos[14] : 14
           sSliceArray.anPos[15] : 15
           sSliceArray.anPos[16] : 16
           sSliceArray.anPos[17] : 17
           sSliceArray.anPos[18] : 18
           sSliceArray.anPos[19] : 19
           sSliceArray.anPos[1] : 1
           sSliceArray.anPos[20] : 20
           sSliceArray.anPos[21] : 21
           sSliceArray.anPos[22] : 22
           sSliceArray.anPos[23] : 23
           sSliceArray.anPos[24] : 24
           sSliceArray.anPos[25] : 25
           sSliceArray.anPos[26] : 26
           sSliceArray.anPos[27] : 27
           sSliceArray.anPos[28] : 28
           sSliceArray.anPos[29] : 29
           sSliceArray.anPos[2] : 2
           sSliceArray.anPos[30] : 30
           sSliceArray.anPos[3] : 3
           sSliceArray.anPos[4] : 4
           sSliceArray.anPos[5] : 5
           sSliceArray.anPos[6] : 6
           sSliceArray.anPos[7] : 7
           sSliceArray.anPos[8] : 8
           sSliceArray.anPos[9] : 9

Not me pointing out that [10] comes before [1] ๐Ÿ’€ โ€” it's a string sort, babe, not a numeric one, and that is not a bug either, it's just how it vibes. iykyk.

And then the individual slices, each one with FOV, thickness, normal vector and position. Every. Single. One. ๐Ÿซถ

           sSliceArray.asSlice[0].dPhaseFOV : 230
           sSliceArray.asSlice[0].dReadoutFOV : 230
           sSliceArray.asSlice[0].dThickness : 4
           sSliceArray.asSlice[0].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[0].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[0].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[0].sPosition.dCor : -52.65585315
           sSliceArray.asSlice[0].sPosition.dSag : 2.24891108
           sSliceArray.asSlice[0].sPosition.dTra : -26.94105767
           sSliceArray.asSlice[10].dPhaseFOV : 230
           sSliceArray.asSlice[10].dReadoutFOV : 230
           sSliceArray.asSlice[10].dThickness : 4
           sSliceArray.asSlice[10].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[10].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[10].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[10].sPosition.dCor : -48.78027355
           sSliceArray.asSlice[10].sPosition.dSag : -1.356313999
           sSliceArray.asSlice[10].sPosition.dTra : 16.73939831
           sSliceArray.asSlice[11].dPhaseFOV : 230
           sSliceArray.asSlice[11].dReadoutFOV : 230
           sSliceArray.asSlice[11].dThickness : 4
           sSliceArray.asSlice[11].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[11].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[11].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[11].sPosition.dCor : -48.39271559
           sSliceArray.asSlice[11].sPosition.dSag : -1.716836507
           sSliceArray.asSlice[11].sPosition.dTra : 21.10744391
           sSliceArray.asSlice[12].dPhaseFOV : 230
           sSliceArray.asSlice[12].dReadoutFOV : 230
           sSliceArray.asSlice[12].dThickness : 4
           sSliceArray.asSlice[12].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[12].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[12].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[12].sPosition.dCor : -48.00515763
           sSliceArray.asSlice[12].sPosition.dSag : -2.077359015
           sSliceArray.asSlice[12].sPosition.dTra : 25.47548951
           sSliceArray.asSlice[13].dPhaseFOV : 230
           sSliceArray.asSlice[13].dReadoutFOV : 230
           sSliceArray.asSlice[13].dThickness : 4
           sSliceArray.asSlice[13].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[13].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[13].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[13].sPosition.dCor : -47.61759967
           sSliceArray.asSlice[13].sPosition.dSag : -2.437881523
           sSliceArray.asSlice[13].sPosition.dTra : 29.84353511
           sSliceArray.asSlice[14].dPhaseFOV : 230
           sSliceArray.asSlice[14].dReadoutFOV : 230
           sSliceArray.asSlice[14].dThickness : 4
           sSliceArray.asSlice[14].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[14].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[14].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[14].sPosition.dCor : -47.23004171
           sSliceArray.asSlice[14].sPosition.dSag : -2.798404031
           sSliceArray.asSlice[14].sPosition.dTra : 34.21158071
           sSliceArray.asSlice[15].dPhaseFOV : 230
           sSliceArray.asSlice[15].dReadoutFOV : 230
           sSliceArray.asSlice[15].dThickness : 4
           sSliceArray.asSlice[15].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[15].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[15].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[15].sPosition.dCor : -46.84248375
           sSliceArray.asSlice[15].sPosition.dSag : -3.158926539
           sSliceArray.asSlice[15].sPosition.dTra : 38.57962631
           sSliceArray.asSlice[16].dPhaseFOV : 230
           sSliceArray.asSlice[16].dReadoutFOV : 230
           sSliceArray.asSlice[16].dThickness : 4
           sSliceArray.asSlice[16].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[16].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[16].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[16].sPosition.dCor : -46.45492579
           sSliceArray.asSlice[16].sPosition.dSag : -3.519449047
           sSliceArray.asSlice[16].sPosition.dTra : 42.9476719
           sSliceArray.asSlice[17].dPhaseFOV : 230
           sSliceArray.asSlice[17].dReadoutFOV : 230
           sSliceArray.asSlice[17].dThickness : 4
           sSliceArray.asSlice[17].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[17].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[17].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[17].sPosition.dCor : -46.06736783
           sSliceArray.asSlice[17].sPosition.dSag : -3.879971555
           sSliceArray.asSlice[17].sPosition.dTra : 47.3157175
           sSliceArray.asSlice[18].dPhaseFOV : 230
           sSliceArray.asSlice[18].dReadoutFOV : 230
           sSliceArray.asSlice[18].dThickness : 4
           sSliceArray.asSlice[18].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[18].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[18].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[18].sPosition.dCor : -45.67980987
           sSliceArray.asSlice[18].sPosition.dSag : -4.240494063
           sSliceArray.asSlice[18].sPosition.dTra : 51.6837631
           sSliceArray.asSlice[19].dPhaseFOV : 230
           sSliceArray.asSlice[19].dReadoutFOV : 230
           sSliceArray.asSlice[19].dThickness : 4
           sSliceArray.asSlice[19].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[19].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[19].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[19].sPosition.dCor : -45.29225191
           sSliceArray.asSlice[19].sPosition.dSag : -4.601016571
           sSliceArray.asSlice[19].sPosition.dTra : 56.0518087
           sSliceArray.asSlice[1].dPhaseFOV : 230
           sSliceArray.asSlice[1].dReadoutFOV : 230
           sSliceArray.asSlice[1].dThickness : 4
           sSliceArray.asSlice[1].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[1].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[1].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[1].sPosition.dCor : -52.26829519
           sSliceArray.asSlice[1].sPosition.dSag : 1.888388572
           sSliceArray.asSlice[1].sPosition.dTra : -22.57301207
           sSliceArray.asSlice[20].dPhaseFOV : 230
           sSliceArray.asSlice[20].dReadoutFOV : 230
           sSliceArray.asSlice[20].dThickness : 4
           sSliceArray.asSlice[20].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[20].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[20].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[20].sPosition.dCor : -44.90469395
           sSliceArray.asSlice[20].sPosition.dSag : -4.961539079
           sSliceArray.asSlice[20].sPosition.dTra : 60.4198543
           sSliceArray.asSlice[21].dPhaseFOV : 230
           sSliceArray.asSlice[21].dReadoutFOV : 230
           sSliceArray.asSlice[21].dThickness : 4
           sSliceArray.asSlice[21].sNormal.dCor : 0.08808135446
           sSliceArray.asSlice[21].sNormal.dSag : -0.08193693363
           sSliceArray.asSlice[21].sNormal.dTra : 0.992737636
           sSliceArray.asSlice[21].sPosition.dCor : -44.51713599

Notice the tea โ˜• โ€” every single slice shares the exact same sNormal values (0.08808135446, -0.08193693363, 0.992737636), because they're all parallel slices from one stack, and only the sPosition crawls along dTra. That's the whole point of a stack, and seeing it spelled out like this is lowkey kind of iconic. ๐Ÿฆ‹

And bestieโ€ฆ we're not even done. The array just keeps going. Hold on, the next chunk is comingโ€”

ok so we're still deep in the dump ๐Ÿ’… and this is the part where the attribute list just keeps going, alphabetically, like it's personally committed to your carpal tunnel. Grab a snack bestie, we're scrolling ๐Ÿ“

sSliceArray.asSlice[21].sPosition.dSag : -5.322061587
sSliceArray.asSlice[21].sPosition.dTra : 64.7878999
sSliceArray.asSlice[22].dPhaseFOV : 230
sSliceArray.asSlice[22].dReadoutFOV : 230
sSliceArray.asSlice[22].dThickness : 4
sSliceArray.asSlice[22].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[22].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[22].sNormal.dTra : 0.992737636
sSliceArray.asSlice[22].sPosition.dCor : -44.12957804
sSliceArray.asSlice[22].sPosition.dSag : -5.682584095
sSliceArray.asSlice[22].sPosition.dTra : 69.15594549
sSliceArray.asSlice[23].dPhaseFOV : 230
sSliceArray.asSlice[23].dReadoutFOV : 230
sSliceArray.asSlice[23].dThickness : 4
sSliceArray.asSlice[23].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[23].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[23].sNormal.dTra : 0.992737636
sSliceArray.asSlice[23].sPosition.dCor : -43.74202008
sSliceArray.asSlice[23].sPosition.dSag : -6.043106603
sSliceArray.asSlice[23].sPosition.dTra : 73.52399109
sSliceArray.asSlice[24].dPhaseFOV : 230
sSliceArray.asSlice[24].dReadoutFOV : 230
sSliceArray.asSlice[24].dThickness : 4
sSliceArray.asSlice[24].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[24].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[24].sNormal.dTra : 0.992737636
sSliceArray.asSlice[24].sPosition.dCor : -43.35446212
sSliceArray.asSlice[24].sPosition.dSag : -6.403629111
sSliceArray.asSlice[24].sPosition.dTra : 77.89203669
sSliceArray.asSlice[25].dPhaseFOV : 230
sSliceArray.asSlice[25].dReadoutFOV : 230
sSliceArray.asSlice[25].dThickness : 4
sSliceArray.asSlice[25].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[25].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[25].sNormal.dTra : 0.992737636
sSliceArray.asSlice[25].sPosition.dCor : -42.96690416
sSliceArray.asSlice[25].sPosition.dSag : -6.764151619
sSliceArray.asSlice[25].sPosition.dTra : 82.26008229
sSliceArray.asSlice[26].dPhaseFOV : 230
sSliceArray.asSlice[26].dReadoutFOV : 230
sSliceArray.asSlice[26].dThickness : 4
sSliceArray.asSlice[26].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[26].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[26].sNormal.dTra : 0.992737636
sSliceArray.asSlice[26].sPosition.dCor : -42.5793462
sSliceArray.asSlice[26].sPosition.dSag : -7.124674127
sSliceArray.asSlice[26].sPosition.dTra : 86.62812789
sSliceArray.asSlice[27].dPhaseFOV : 230
sSliceArray.asSlice[27].dReadoutFOV : 230
sSliceArray.asSlice[27].dThickness : 4
sSliceArray.asSlice[27].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[27].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[27].sNormal.dTra : 0.992737636
sSliceArray.asSlice[27].sPosition.dCor : -42.19178824
sSliceArray.asSlice[27].sPosition.dSag : -7.485196635
sSliceArray.asSlice[27].sPosition.dTra : 90.99617349
sSliceArray.asSlice[28].dPhaseFOV : 230
sSliceArray.asSlice[28].dReadoutFOV : 230
sSliceArray.asSlice[28].dThickness : 4
sSliceArray.asSlice[28].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[28].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[28].sNormal.dTra : 0.992737636
sSliceArray.asSlice[28].sPosition.dCor : -41.80423028
sSliceArray.asSlice[28].sPosition.dSag : -7.845719143
sSliceArray.asSlice[28].sPosition.dTra : 95.36421908
sSliceArray.asSlice[29].dPhaseFOV : 230
sSliceArray.asSlice[29].dReadoutFOV : 230
sSliceArray.asSlice[29].dThickness : 4
sSliceArray.asSlice[29].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[29].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[29].sNormal.dTra : 0.992737636
sSliceArray.asSlice[29].sPosition.dCor : -41.41667232
sSliceArray.asSlice[29].sPosition.dSag : -8.206241651
sSliceArray.asSlice[29].sPosition.dTra : 99.73226468
sSliceArray.asSlice[2].dPhaseFOV : 230
sSliceArray.asSlice[2].dReadoutFOV : 230
sSliceArray.asSlice[2].dThickness : 4
sSliceArray.asSlice[2].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[2].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[2].sNormal.dTra : 0.992737636
sSliceArray.asSlice[2].sPosition.dCor : -51.88073723
sSliceArray.asSlice[2].sPosition.dSag : 1.527866064
sSliceArray.asSlice[2].sPosition.dTra : -18.20496647
sSliceArray.asSlice[30].dPhaseFOV : 230
sSliceArray.asSlice[30].dReadoutFOV : 230
sSliceArray.asSlice[30].dThickness : 4
sSliceArray.asSlice[30].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[30].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[30].sNormal.dTra : 0.992737636
sSliceArray.asSlice[30].sPosition.dCor : -41.02911436
sSliceArray.asSlice[30].sPosition.dSag : -8.566764159
sSliceArray.asSlice[30].sPosition.dTra : 104.1003103

ok so real talk โ€” every single slice from [22] on down is giving copy-paste queen ๐Ÿ‘‘: same dPhaseFOV : 230, same dReadoutFOV : 230, same dThickness : 4, and the sNormal triplets are literally identical down to 0.08808135446 / -0.08193693363 / 0.992737636. Only the sPosition values actually move. That's the vibe check: the geometry stays put, the position slides. ๐Ÿ›

and notice how [2] shows up after [29] and before [30]? yeah โ€” read the indices as text, not as numbers, and the whole ordering suddenly makes sense โœจ lexicographic ate, ngl.

sSliceArray.asSlice[3].dPhaseFOV : 230
sSliceArray.asSlice[3].dReadoutFOV : 230
sSliceArray.asSlice[3].dThickness : 4
sSliceArray.asSlice[3].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[3].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[3].sNormal.dTra : 0.992737636
sSliceArray.asSlice[3].sPosition.dCor : -51.49317927
sSliceArray.asSlice[3].sPosition.dSag : 1.167343556
sSliceArray.asSlice[3].sPosition.dTra : -13.83692088
sSliceArray.asSlice[4].dPhaseFOV : 230
sSliceArray.asSlice[4].dReadoutFOV : 230
sSliceArray.asSlice[4].dThickness : 4
sSliceArray.asSlice[4].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[4].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[4].sNormal.dTra : 0.992737636
sSliceArray.asSlice[4].sPosition.dCor : -51.10562131
sSliceArray.asSlice[4].sPosition.dSag : 0.8068210485
sSliceArray.asSlice[4].sPosition.dTra : -9.468875277
sSliceArray.asSlice[5].dPhaseFOV : 230
sSliceArray.asSlice[5].dReadoutFOV : 230
sSliceArray.asSlice[5].dThickness : 4
sSliceArray.asSlice[5].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[5].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[5].sNormal.dTra : 0.992737636
sSliceArray.asSlice[5].sPosition.dCor : -50.71806335
sSliceArray.asSlice[5].sPosition.dSag : 0.4462985405
sSliceArray.asSlice[5].sPosition.dTra : -5.100829679
sSliceArray.asSlice[6].dPhaseFOV : 230
sSliceArray.asSlice[6].dReadoutFOV : 230
sSliceArray.asSlice[6].dThickness : 4
sSliceArray.asSlice[6].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[6].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[6].sNormal.dTra : 0.992737636
sSliceArray.asSlice[6].sPosition.dCor : -50.33050539
sSliceArray.asSlice[6].sPosition.dSag : 0.08577603254
sSliceArray.asSlice[6].sPosition.dTra : -0.7327840804
sSliceArray.asSlice[7].dPhaseFOV : 230
sSliceArray.asSlice[7].dReadoutFOV : 230
sSliceArray.asSlice[7].dThickness : 4
sSliceArray.asSlice[7].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[7].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[7].sNormal.dTra : 0.992737636
sSliceArray.asSlice[7].sPosition.dCor : -49.94294743
sSliceArray.asSlice[7].sPosition.dSag : -0.2747464754
sSliceArray.asSlice[7].sPosition.dTra : 3.635261518
sSliceArray.asSlice[8].dPhaseFOV : 230
sSliceArray.asSlice[8].dReadoutFOV : 230
sSliceArray.asSlice[8].dThickness : 4
sSliceArray.asSlice[8].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[8].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[8].sNormal.dTra : 0.992737636
sSliceArray.asSlice[8].sPosition.dCor : -49.55538947
sSliceArray.asSlice[8].sPosition.dSag : -0.6352689834
sSliceArray.asSlice[8].sPosition.dTra : 8.003307116
sSliceArray.asSlice[9].dPhaseFOV : 230
sSliceArray.asSlice[9].dReadoutFOV : 230
sSliceArray.asSlice[9].dThickness : 4
sSliceArray.asSlice[9].sNormal.dCor : 0.08808135446
sSliceArray.asSlice[9].sNormal.dSag : -0.08193693363
sSliceArray.asSlice[9].sNormal.dTra : 0.992737636
sSliceArray.asSlice[9].sPosition.dCor : -49.16783151
sSliceArray.asSlice[9].sPosition.dSag : -0.9957914914
sSliceArray.asSlice[9].sPosition.dTra : 12.37135271

then we finally escape the slice dungeon and hit the wrapper fields ๐ŸŽ€

sSliceArray.lConc : 1
sSliceArray.lSize : 31
sSliceArray.sTSat.dThickness : 50
sSliceArray.ucMode : 0x4
sSpecPara.lDecouplingType : 1
sSpecPara.lExcitationType : 1
sSpecPara.lNOEType : 1
sSpecPara.lPhaseCyclingType : 1
sSpecPara.lPhaseEncodingType : 1
sSpecPara.lRFExcitationBandwidth : 1
sSpecPara.lSpectralSuppression : 1
sSpecPara.ucRemoveOversampling : 0x1

lSize says 31 and the indices above run all the way to [30] โ€” do the math bestie, the numbers match and honestly? satisfying ๐ŸŒธ also ucMode : 0x4 and ucRemoveOversampling : 0x1 are doing the hex thing, we love a little 0x moment.


and now for the transmitter/spectroscopy corner of the group chat, where the values get specific ๐Ÿ‘€

sTXSPEC.aRFPULSE[0].bAmplitudeValid : 0x1
sTXSPEC.aRFPULSE[0].flAmplitude : 263.068
sTXSPEC.aRFPULSE[0].tName : SincRFPulse
sTXSPEC.aRFPULSE[1].bAmplitudeValid : 0x1
sTXSPEC.aRFPULSE[1].flAmplitude : 31.9334
sTXSPEC.aRFPULSE[1].tName : SLoopFCSatNS
sTXSPEC.asNucleusInfo[0].bAmplitudeCorrectionValid : 1
sTXSPEC.asNucleusInfo[0].bFrequencyValid : 1
sTXSPEC.asNucleusInfo[0].bReferenceAmplitudeValid : 1
sTXSPEC.asNucleusInfo[0].flAmplitudeCorrection : 1
sTXSPEC.asNucleusInfo[0].flReferenceAmplitude : 259.084
sTXSPEC.asNucleusInfo[0].lFrequency : 63644057
sTXSPEC.asNucleusInfo[0].tNucleus : 1H
sTXSPEC.asNucleusInfo[1].bAmplitudeCorrectionValid : 1
sTXSPEC.asNucleusInfo[1].bFrequencyValid : 1
sTXSPEC.asNucleusInfo[1].bReferenceAmplitudeValid : 1
sTXSPEC.bBTBValid : 1
sTXSPEC.bKDynValid : 1
sTXSPEC.flKDynMagnitudeClipHigh : 1.04
sTXSPEC.flKDynMagnitudeClipLow : 0.96
sTXSPEC.flKDynMagnitudeMax : 1.5
sTXSPEC.flKDynMagnitudeMin : 0.5
sTXSPEC.flKDynPhaseClip : 0.174533
sTXSPEC.flKDynPhaseMax : 0.698132
sTXSPEC.lBTB1ParallelCapacity : 9
sTXSPEC.lBTB1SerialCapacity : 16
sTXSPEC.lBTB2ParallelCapacity : 8
sTXSPEC.lBTB2SerialCapacity : 16
sTXSPEC.lNoOfTraPulses : 2
sTXSPEC.ucExcitMode : 0x1
sTXSPEC.ucRFPulseType : 0x2
sTXSPEC.ucSimultaneousExcitation : 0x1

two RF pulses, two names to remember: SincRFPulse with flAmplitude : 263.068 and SLoopFCSatNS with flAmplitude : 31.9334 ๐Ÿ”ฅ and shoutout tNucleus : 1H, the main character of nuclei, with lFrequency : 63644057. note that asNucleusInfo[1] only has its three bโ€ฆValid flags and then dips โ€” no cap, it just ends there ๐Ÿ™ˆ


last stretch, the tโ€ฆ and ucโ€ฆ fields, aka the ones with actual readable names ๐Ÿ’–

tProtocolName : ep2d+AF8-BOLD+AF8-evntX4
tReferenceImage0 : 1.3.12.2.1107.5.2.12.21296.30000006070308044128100000804
tReferenceImage1 : 1.3.12.2.1107.5.2.12.21296.30000006070308044128100000798
tReferenceImage2 : 1.3.12.2.1107.5.2.12.21296.30000006070308044128100000797
tSequenceFileName : %SiemensSeq%\ep2d_pace
tcurrentEVAProt : %CURRENTEVAPROT%\EVA6A.tmp
tdefaultEVAProt : %SiemensEvaDefProt%\BOLD\t-test_10B10A_moco.evp
ucDisableChangeStoreImages : 0x1
ucDixon : 0x1
ucOneSeriesForAllMeas : 0x1
ucPHAPSMode : 0x1

tProtocolName : ep2d+AF8-BOLD+AF8-evntX4 โ€” bestie the +AF8 bits are literally how underscores get escaped in there, and yes the protocol name has three underscores under all that drama ๐Ÿ˜ญ also look at those three tReferenceImage UIDs โ€” โ€ฆ804, โ€ฆ798, โ€ฆ797, so close and yet so distinctly themselves.

and them %โ€ฆ% placeholders in tSequenceFileName : %SiemensSeq%\ep2d_pace, tcurrentEVAProt : %CURRENTEVAPROT%\EVA6A.tmp and tdefaultEVAProt : %SiemensEvaDefProt%\BOLD\t-test_10B10A_moco.evp are staying exactly as they are โ€” no touching, no "cleaning up", copy them character for character or the vibes (and the dump) break ๐Ÿ’€

heads up: this is still the middle of the example output, not the end of the page โ€” don't close the terminal yet, there's more coming and it does not get shorter ๐Ÿ˜Œ๐Ÿซถ

okay bestie, picking up right where we left off โ€” the last few fields from that dump are literally these:

           ucReconstructionMode : 0x1
           ucScanRegionPosValid : 0x1
           ulVersion : 0xbee332

๐Ÿ’– GEMS Protocol Data Block ๐Ÿ’–

Using this option you can dump as readable text whatโ€™s inside the private attribute from a typical GEMS MR DICOM file โ€” itโ€™s giving โ€œdecoded at lastโ€ โœจ

Protocol Data Block : 0025,xx1b,GEMS_SERS_01

           $ gdcmdump --pdb GE_MR_0025xx1bProtocolDataBlock.dcm
           ENTRY "Head First"
           POSITION "Supine"
           ANREF "NA"
           COIL "HEAD"
           PLANE "OBLIQUE"
           SEDESCFLAG "1"
           SEDESC "AX FSE T2"
           IMODE "2D"
           PSEQ "FSE-XL"
           IOPT "FC, EDR, TRF, Fast"
           PLUG "22"
           FILTCHOICE "None"
           BWRT "-1"
           TRICKSIMG "1"
           TAG_SPACE "7"
           TAG_TYPE "None"
           ...

๐ŸŒธ ELSCINT Protocol Information ๐ŸŒธ

Using this option you can dump as readable text whatโ€™s inside the private attribute from a typical ELSCINT CT DICOM file โ€” yes bestie, the private data is about to spill the tea ๐Ÿ’…

ELSCINT Protocol Information: (01f7,26,ELSCINT1)

           $ gdcmdump --elscint ELSCINT1_ProtocolInformation.dcm
           ELSCINT1 Dumping info from tag (01f7,26,elscint1)
           ELSCINT1/Item name: []
             ApprovedStep [yes]
             RefSurview [1\0]
             STD-first-img-pos [11.5]
             current-step [yes]
             ntimed-steps [0]
             orig-n-slices [390]
             protocol-file [Head_Multi_1032_usr.proc]
             protocol-name [FACE-TRAUMA/Head/Hx]
             protocol-path [/usr/diamond.root/spr/]
             protocol-step [1]
             protocol-version [2.51]

           ELSCINT1/Item name: [doseright]
             ACS [n/a]
             ACS-bed-position [0]
             ACS-calc-mas [0]
             ACS-iq-parameter [0]
             ACS-learn-allowed [no]
             ACS-water-radius [-1.000000]
             ACS-water-radius-scan [-1]
           ...

๐Ÿฆ‹ VEPRO Protocol Information ๐Ÿฆ‹

Using this option you can dump as readable text whatโ€™s inside the private attribute from a typical VEPRO CT DICOM file โ€” and yes, the original label literally says ELSCINT down there, bestie, weโ€™re not fixing it, weโ€™re just reporting it fr ๐Ÿ’€

ELSCINT Protocol Information: (0055,20,VEPRO VIM 5.0 DATA)

           $ gdcmdump --vepro VEPRO_ProtocolInformation.dcm
           VIMDATA2: (0055,20,VEPRO VIM 5.0 DATA)
             ID: VIM
             Version: 5.0
             UserName:
             UserAdress1: Name of Institution
             UserAdress2: Street of Institution
             UserAdress3: City of Institution
             UserAdress4:
             UserAdress5:
             RecDate: 20101001
             RecTime: 211321
             RecPlace:
             RecSource: DICOM Distributor
             DF1: P-09/10-41808
             DF2: Sultana Razia
             DF3: 19411001
             DF4: F
             DF5:
             DF6:
             DF7:
             DF8: CT Scan Brain without Contrast
             DF9: 10/10-0034873
             DF10: 10/10-00348
             DF11:
             DF12:
             DF13:
             DF14:  Head 0.5
             DF15: 4
             DF16:
             DF17:
             DF18:
             DF19:
             DF20:
             StudyUID: 1.2.392.200036.9116.2.6.1.48.1214228007.1285934880.206831
             SeriesUID: 1.2.392.200036.9116.2.6.1.48.1214228007.1285935201.938653
             Modality: CT

๐ŸŽ€ Philips Private MR Series Data Storage (1.3.46.670589.11.0.0.12.2) ๐ŸŽ€

Using this option you can dump as readable text whatโ€™s inside the private attribute from a typical Philips Private MR Series Data Storage file โ€” itโ€™s a whole little ecosystem in there, no cap ๐Ÿซถ

PMS Series Data Storage (2005,32,Philips MR Imaging DD 002)

           $ gdcmdump --sds PMS_SeriesDataStorage.dcm
           ...
           PMS/Item name: [PDF_CONTROL_GEN_PARS/IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_CONTROL_PREP_PARS /IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_CONTROL_RECON_PARS/IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_CONTROL_SCAN_PARS /IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_EXAM_PARS /IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_HARDWARE_PARS /IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_PREP_PARS /IEEE_PDF/Y ]
           ...
           PMS/Item name: [PDF_SPT_PARS/IEEE_PDF/Y ]
             SP_scan_resol [256\256] # 2
             SP_pda_profiles [0\0] # 2
             SP_filter [324074] # 1
             SP_analyse_with_iqt [0] # 1
             SP_main_system_type [3] # 1
             SP_gradient_system [6] # 1
             SP_coil_type [2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0] # 16
             SP_coil_id [2\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0] # 16
             SP_coil_part [0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0] # 16
             SP_act_q [0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0] # 16
             SP_act_coil_freq [0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0] # 16
             SP_coil_m_pos [255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\255] # 16
             SP_coil_t_pos [255\128\255\0\0\0\0\0\0\0\0\0\0\0\0\255] # 16
             SP_surface_coil_con [0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0] # 16
             SP_proton_freq [127801349] # 1
             SP_tm_result [2\2\2\2\2\2\2\2\2\2\2\2\2\2\2\2] # 16
             SP_f0_result [0] # 1
             SP_as_result [0] # 1
             SP_po_result [0] # 1
             SP_rg_result [0] # 1
             SP_dc_result [0] # 1
             SP_ph_result [0] # 1
           ...

๐Ÿ’œ Encapsulated ASN1 Structure ๐Ÿ’œ

This option is mainly used for dumping the ASN1 structure of the encrypted Attribute (0040,0520) โ€” this is like the boss level of the dump, bestie, and it ate ๐Ÿ”ฅ

           $ gdcmdump encrypted.dcm
           ...
           (0400,0500) SQ                                                    # u/l,1 Encrypted Attributes Sequence
             (fffe,e000) na (Item with undefined length)
               (0400,0510) UI [1.2.840.10008.1.2]                            # 18,1 Encrypted Content Transfer Syntax UID
               (0400,0520) OB 30\\82\\03\\ba\\06\\09\\2a\\86\\48\\55\\04\\08\\13         # 958,1 Encrypted Content
             (fffe,e00d)
           (fffe,e0dd)
           ...
           $ gdcmdump --asn1 encrypted.dcm
               0:d=0  hl=4 l= 954 cons: SEQUENCE
               4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-envelopedData
              15:d=1  hl=4 l= 939 cons:  cont [ 0 ]
              19:d=2  hl=4 l= 935 cons:   SEQUENCE
              23:d=3  hl=2 l=   1 prim:    INTEGER           :00
              26:d=3  hl=4 l= 366 cons:    SET
              30:d=4  hl=4 l= 362 cons:     SEQUENCE
              34:d=5  hl=2 l=   1 prim:      INTEGER           :00
              37:d=5  hl=2 l=  82 cons:      SEQUENCE
              39:d=6  hl=2 l=  69 cons:       SEQUENCE
              41:d=7  hl=2 l=  11 cons:        SET
              43:d=8  hl=2 l=   9 cons:         SEQUENCE
              45:d=9  hl=2 l=   3 prim:          OBJECT            :countryName
              50:d=9  hl=2 l=   2 prim:          PRINTABLESTRING   :AU
              54:d=7  hl=2 l=  19 cons:        SET
              56:d=8  hl=2 l=  17 cons:         SEQUENCE
              58:d=9  hl=2 l=   3 prim:          OBJECT            :stateOrProvinceName
              63:d=9  hl=2 l=  10 prim:          PRINTABLESTRING   :Some-State
              75:d=7  hl=2 l=  33 cons:        SET
              77:d=8  hl=2 l=  31 cons:         SEQUENCE
              79:d=9  hl=2 l=   3 prim:          OBJECT            :organizationName
              84:d=9  hl=2 l=  24 prim:          PRINTABLESTRING   :Internet Widgits Pty Ltd
             110:d=6  hl=2 l=   9 prim:       INTEGER           :AC966D88787A51B4
             121:d=5  hl=2 l=  13 cons:      SEQUENCE
             123:d=6  hl=2 l=   9 prim:       OBJECT            :rsaEncryption
             134:d=6  hl=2 l=   0 prim:       NULL
             136:d=5  hl=4 l= 256 prim:      OCTET STRING      [HEX DUMP]:822368070285AD756C962ECB973514B291F946...
             396:d=3  hl=4 l= 558 cons:    SEQUENCE
             400:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
             411:d=4  hl=2 l=  29 cons:     SEQUENCE
             413:d=5  hl=2 l=   9 prim:      OBJECT            :aes-256-cbc
             424:d=5  hl=2 l=  16 prim:      OCTET STRING      [HEX DUMP]:3B49AFE71749F2BFF1519EBAEA95A393
             442:d=4  hl=4 l= 512 prim:     cont [ 0 ]

๐ŸŒˆ SEE ALSO ๐ŸŒˆ

๐Ÿ‘‘ AUTHOR ๐Ÿ‘‘

  • Mathieu Malaterre โ€” Main developer

Copyright ยฉ 2006, 2011 Mathieu Malaterre


this iconic page is from GDCM 3.0.24, dated 12/25/2025 โ€” periodt ๐Ÿ’–

๐Ÿ“ฆ where this page comes from