Home | History | Annotate | Download | only in coders
      1 /*
      2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      3 %                                                                             %
      4 %                                                                             %
      5 %                                                                             %
      6 %                            DDDD    CCCC  M   M                              %
      7 %                            D   D  C      MM MM                              %
      8 %                            D   D  C      M M M                              %
      9 %                            D   D  C      M   M                              %
     10 %                            DDDD    CCCC  M   M                              %
     11 %                                                                             %
     12 %                                                                             %
     13 %                          Read DICOM Image Format                            %
     14 %                                                                             %
     15 %                              Software Design                                %
     16 %                                   Cristy                                    %
     17 %                                 July 1992                                   %
     18 %                                                                             %
     19 %                                                                             %
     20 %  Copyright 1999-2019 ImageMagick Studio LLC, a non-profit organization      %
     21 %  dedicated to making software imaging solutions freely available.           %
     22 %                                                                             %
     23 %  You may not use this file except in compliance with the License.  You may  %
     24 %  obtain a copy of the License at                                            %
     25 %                                                                             %
     26 %    https://imagemagick.org/script/license.php                               %
     27 %                                                                             %
     28 %  Unless required by applicable law or agreed to in writing, software        %
     29 %  distributed under the License is distributed on an "AS IS" BASIS,          %
     30 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
     31 %  See the License for the specific language governing permissions and        %
     32 %  limitations under the License.                                             %
     33 %                                                                             %
     34 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     35 %
     36 %
     37 */
     38 
     39 /*
     41   Include declarations.
     42 */
     43 #include "MagickCore/studio.h"
     44 #include "MagickCore/artifact.h"
     45 #include "MagickCore/attribute.h"
     46 #include "MagickCore/blob.h"
     47 #include "MagickCore/blob-private.h"
     48 #include "MagickCore/cache.h"
     49 #include "MagickCore/color.h"
     50 #include "MagickCore/color-private.h"
     51 #include "MagickCore/colormap.h"
     52 #include "MagickCore/colormap-private.h"
     53 #include "MagickCore/constitute.h"
     54 #include "MagickCore/enhance.h"
     55 #include "MagickCore/exception.h"
     56 #include "MagickCore/exception-private.h"
     57 #include "MagickCore/image.h"
     58 #include "MagickCore/image-private.h"
     59 #include "MagickCore/list.h"
     60 #include "MagickCore/magick.h"
     61 #include "MagickCore/memory_.h"
     62 #include "MagickCore/monitor.h"
     63 #include "MagickCore/monitor-private.h"
     64 #include "MagickCore/option.h"
     65 #include "MagickCore/pixel-accessor.h"
     66 #include "MagickCore/property.h"
     67 #include "MagickCore/resource_.h"
     68 #include "MagickCore/quantum-private.h"
     69 #include "MagickCore/static.h"
     70 #include "MagickCore/string_.h"
     71 #include "MagickCore/string-private.h"
     72 #include "MagickCore/module.h"
     73 
     74 /*
     76   Dicom medical image declarations.
     77 */
     78 
     79 typedef struct _DicomInfo
     80 {
     81   const unsigned short
     82     group,
     83     element;
     84 
     85   const char
     86     *vr,
     87     *description;
     88 } DicomInfo;
     89 
     90 static const DicomInfo
     91   dicom_info[] =
     92   {
     93     { 0x0000, 0x0000, "UL", "Group Length" },
     94     { 0x0000, 0x0001, "UL", "Command Length to End" },
     95     { 0x0000, 0x0002, "UI", "Affected SOP Class UID" },
     96     { 0x0000, 0x0003, "UI", "Requested SOP Class UID" },
     97     { 0x0000, 0x0010, "LO", "Command Recognition Code" },
     98     { 0x0000, 0x0100, "US", "Command Field" },
     99     { 0x0000, 0x0110, "US", "Message ID" },
    100     { 0x0000, 0x0120, "US", "Message ID Being Responded To" },
    101     { 0x0000, 0x0200, "AE", "Initiator" },
    102     { 0x0000, 0x0300, "AE", "Receiver" },
    103     { 0x0000, 0x0400, "AE", "Find Location" },
    104     { 0x0000, 0x0600, "AE", "Move Destination" },
    105     { 0x0000, 0x0700, "US", "Priority" },
    106     { 0x0000, 0x0800, "US", "Data Set Type" },
    107     { 0x0000, 0x0850, "US", "Number of Matches" },
    108     { 0x0000, 0x0860, "US", "Response Sequence Number" },
    109     { 0x0000, 0x0900, "US", "Status" },
    110     { 0x0000, 0x0901, "AT", "Offending Element" },
    111     { 0x0000, 0x0902, "LO", "Exception Comment" },
    112     { 0x0000, 0x0903, "US", "Exception ID" },
    113     { 0x0000, 0x1000, "UI", "Affected SOP Instance UID" },
    114     { 0x0000, 0x1001, "UI", "Requested SOP Instance UID" },
    115     { 0x0000, 0x1002, "US", "Event Type ID" },
    116     { 0x0000, 0x1005, "AT", "Attribute Identifier List" },
    117     { 0x0000, 0x1008, "US", "Action Type ID" },
    118     { 0x0000, 0x1020, "US", "Number of Remaining Suboperations" },
    119     { 0x0000, 0x1021, "US", "Number of Completed Suboperations" },
    120     { 0x0000, 0x1022, "US", "Number of Failed Suboperations" },
    121     { 0x0000, 0x1023, "US", "Number of Warning Suboperations" },
    122     { 0x0000, 0x1030, "AE", "Move Originator Application Entity Title" },
    123     { 0x0000, 0x1031, "US", "Move Originator Message ID" },
    124     { 0x0000, 0x4000, "LO", "Dialog Receiver" },
    125     { 0x0000, 0x4010, "LO", "Terminal Type" },
    126     { 0x0000, 0x5010, "SH", "Message Set ID" },
    127     { 0x0000, 0x5020, "SH", "End Message Set" },
    128     { 0x0000, 0x5110, "LO", "Display Format" },
    129     { 0x0000, 0x5120, "LO", "Page Position ID" },
    130     { 0x0000, 0x5130, "LO", "Text Format ID" },
    131     { 0x0000, 0x5140, "LO", "Normal Reverse" },
    132     { 0x0000, 0x5150, "LO", "Add Gray Scale" },
    133     { 0x0000, 0x5160, "LO", "Borders" },
    134     { 0x0000, 0x5170, "IS", "Copies" },
    135     { 0x0000, 0x5180, "LO", "OldMagnificationType" },
    136     { 0x0000, 0x5190, "LO", "Erase" },
    137     { 0x0000, 0x51a0, "LO", "Print" },
    138     { 0x0000, 0x51b0, "US", "Overlays" },
    139     { 0x0002, 0x0000, "UL", "Meta Element Group Length" },
    140     { 0x0002, 0x0001, "OB", "File Meta Information Version" },
    141     { 0x0002, 0x0002, "UI", "Media Storage SOP Class UID" },
    142     { 0x0002, 0x0003, "UI", "Media Storage SOP Instance UID" },
    143     { 0x0002, 0x0010, "UI", "Transfer Syntax UID" },
    144     { 0x0002, 0x0012, "UI", "Implementation Class UID" },
    145     { 0x0002, 0x0013, "SH", "Implementation Version Name" },
    146     { 0x0002, 0x0016, "AE", "Source Application Entity Title" },
    147     { 0x0002, 0x0100, "UI", "Private Information Creator UID" },
    148     { 0x0002, 0x0102, "OB", "Private Information" },
    149     { 0x0003, 0x0000, "US", "?" },
    150     { 0x0003, 0x0008, "US", "ISI Command Field" },
    151     { 0x0003, 0x0011, "US", "Attach ID Application Code" },
    152     { 0x0003, 0x0012, "UL", "Attach ID Message Count" },
    153     { 0x0003, 0x0013, "DA", "Attach ID Date" },
    154     { 0x0003, 0x0014, "TM", "Attach ID Time" },
    155     { 0x0003, 0x0020, "US", "Message Type" },
    156     { 0x0003, 0x0030, "DA", "Max Waiting Date" },
    157     { 0x0003, 0x0031, "TM", "Max Waiting Time" },
    158     { 0x0004, 0x0000, "UL", "File Set Group Length" },
    159     { 0x0004, 0x1130, "CS", "File Set ID" },
    160     { 0x0004, 0x1141, "CS", "File Set Descriptor File ID" },
    161     { 0x0004, 0x1142, "CS", "File Set Descriptor File Specific Character Set" },
    162     { 0x0004, 0x1200, "UL", "Root Directory Entity First Directory Record Offset" },
    163     { 0x0004, 0x1202, "UL", "Root Directory Entity Last Directory Record Offset" },
    164     { 0x0004, 0x1212, "US", "File Set Consistency Flag" },
    165     { 0x0004, 0x1220, "SQ", "Directory Record Sequence" },
    166     { 0x0004, 0x1400, "UL", "Next Directory Record Offset" },
    167     { 0x0004, 0x1410, "US", "Record In Use Flag" },
    168     { 0x0004, 0x1420, "UL", "Referenced Lower Level Directory Entity Offset" },
    169     { 0x0004, 0x1430, "CS", "Directory Record Type" },
    170     { 0x0004, 0x1432, "UI", "Private Record UID" },
    171     { 0x0004, 0x1500, "CS", "Referenced File ID" },
    172     { 0x0004, 0x1504, "UL", "MRDR Directory Record Offset" },
    173     { 0x0004, 0x1510, "UI", "Referenced SOP Class UID In File" },
    174     { 0x0004, 0x1511, "UI", "Referenced SOP Instance UID In File" },
    175     { 0x0004, 0x1512, "UI", "Referenced Transfer Syntax UID In File" },
    176     { 0x0004, 0x1600, "UL", "Number of References" },
    177     { 0x0005, 0x0000, "US", "?" },
    178     { 0x0006, 0x0000, "US", "?" },
    179     { 0x0008, 0x0000, "UL", "Identifying Group Length" },
    180     { 0x0008, 0x0001, "UL", "Length to End" },
    181     { 0x0008, 0x0005, "CS", "Specific Character Set" },
    182     { 0x0008, 0x0008, "CS", "Image Type" },
    183     { 0x0008, 0x0010, "LO", "Recognition Code" },
    184     { 0x0008, 0x0012, "DA", "Instance Creation Date" },
    185     { 0x0008, 0x0013, "TM", "Instance Creation Time" },
    186     { 0x0008, 0x0014, "UI", "Instance Creator UID" },
    187     { 0x0008, 0x0016, "UI", "SOP Class UID" },
    188     { 0x0008, 0x0018, "UI", "SOP Instance UID" },
    189     { 0x0008, 0x0020, "DA", "Study Date" },
    190     { 0x0008, 0x0021, "DA", "Series Date" },
    191     { 0x0008, 0x0022, "DA", "Acquisition Date" },
    192     { 0x0008, 0x0023, "DA", "Image Date" },
    193     { 0x0008, 0x0024, "DA", "Overlay Date" },
    194     { 0x0008, 0x0025, "DA", "Curve Date" },
    195     { 0x0008, 0x002A, "DT", "Acquisition DateTime" },
    196     { 0x0008, 0x0030, "TM", "Study Time" },
    197     { 0x0008, 0x0031, "TM", "Series Time" },
    198     { 0x0008, 0x0032, "TM", "Acquisition Time" },
    199     { 0x0008, 0x0033, "TM", "Image Time" },
    200     { 0x0008, 0x0034, "TM", "Overlay Time" },
    201     { 0x0008, 0x0035, "TM", "Curve Time" },
    202     { 0x0008, 0x0040, "xs", "Old Data Set Type" },
    203     { 0x0008, 0x0041, "xs", "Old Data Set Subtype" },
    204     { 0x0008, 0x0042, "CS", "Nuclear Medicine Series Type" },
    205     { 0x0008, 0x0050, "SH", "Accession Number" },
    206     { 0x0008, 0x0052, "CS", "Query/Retrieve Level" },
    207     { 0x0008, 0x0054, "AE", "Retrieve AE Title" },
    208     { 0x0008, 0x0058, "UI", "Failed SOP Instance UID List" },
    209     { 0x0008, 0x0060, "CS", "Modality" },
    210     { 0x0008, 0x0062, "SQ", "Modality Subtype" },
    211     { 0x0008, 0x0064, "CS", "Conversion Type" },
    212     { 0x0008, 0x0068, "CS", "Presentation Intent Type" },
    213     { 0x0008, 0x0070, "LO", "Manufacturer" },
    214     { 0x0008, 0x0080, "LO", "Institution Name" },
    215     { 0x0008, 0x0081, "ST", "Institution Address" },
    216     { 0x0008, 0x0082, "SQ", "Institution Code Sequence" },
    217     { 0x0008, 0x0090, "PN", "Referring Physician's Name" },
    218     { 0x0008, 0x0092, "ST", "Referring Physician's Address" },
    219     { 0x0008, 0x0094, "SH", "Referring Physician's Telephone Numbers" },
    220     { 0x0008, 0x0100, "SH", "Code Value" },
    221     { 0x0008, 0x0102, "SH", "Coding Scheme Designator" },
    222     { 0x0008, 0x0103, "SH", "Coding Scheme Version" },
    223     { 0x0008, 0x0104, "LO", "Code Meaning" },
    224     { 0x0008, 0x0105, "CS", "Mapping Resource" },
    225     { 0x0008, 0x0106, "DT", "Context Group Version" },
    226     { 0x0008, 0x010b, "CS", "Code Set Extension Flag" },
    227     { 0x0008, 0x010c, "UI", "Private Coding Scheme Creator UID" },
    228     { 0x0008, 0x010d, "UI", "Code Set Extension Creator UID" },
    229     { 0x0008, 0x010f, "CS", "Context Identifier" },
    230     { 0x0008, 0x1000, "LT", "Network ID" },
    231     { 0x0008, 0x1010, "SH", "Station Name" },
    232     { 0x0008, 0x1030, "LO", "Study Description" },
    233     { 0x0008, 0x1032, "SQ", "Procedure Code Sequence" },
    234     { 0x0008, 0x103e, "LO", "Series Description" },
    235     { 0x0008, 0x1040, "LO", "Institutional Department Name" },
    236     { 0x0008, 0x1048, "PN", "Physician of Record" },
    237     { 0x0008, 0x1050, "PN", "Performing Physician's Name" },
    238     { 0x0008, 0x1060, "PN", "Name of Physician(s) Reading Study" },
    239     { 0x0008, 0x1070, "PN", "Operator's Name" },
    240     { 0x0008, 0x1080, "LO", "Admitting Diagnosis Description" },
    241     { 0x0008, 0x1084, "SQ", "Admitting Diagnosis Code Sequence" },
    242     { 0x0008, 0x1090, "LO", "Manufacturer's Model Name" },
    243     { 0x0008, 0x1100, "SQ", "Referenced Results Sequence" },
    244     { 0x0008, 0x1110, "SQ", "Referenced Study Sequence" },
    245     { 0x0008, 0x1111, "SQ", "Referenced Study Component Sequence" },
    246     { 0x0008, 0x1115, "SQ", "Referenced Series Sequence" },
    247     { 0x0008, 0x1120, "SQ", "Referenced Patient Sequence" },
    248     { 0x0008, 0x1125, "SQ", "Referenced Visit Sequence" },
    249     { 0x0008, 0x1130, "SQ", "Referenced Overlay Sequence" },
    250     { 0x0008, 0x1140, "SQ", "Referenced Image Sequence" },
    251     { 0x0008, 0x1145, "SQ", "Referenced Curve Sequence" },
    252     { 0x0008, 0x1148, "SQ", "Referenced Previous Waveform" },
    253     { 0x0008, 0x114a, "SQ", "Referenced Simultaneous Waveforms" },
    254     { 0x0008, 0x114c, "SQ", "Referenced Subsequent Waveform" },
    255     { 0x0008, 0x1150, "UI", "Referenced SOP Class UID" },
    256     { 0x0008, 0x1155, "UI", "Referenced SOP Instance UID" },
    257     { 0x0008, 0x1160, "IS", "Referenced Frame Number" },
    258     { 0x0008, 0x1195, "UI", "Transaction UID" },
    259     { 0x0008, 0x1197, "US", "Failure Reason" },
    260     { 0x0008, 0x1198, "SQ", "Failed SOP Sequence" },
    261     { 0x0008, 0x1199, "SQ", "Referenced SOP Sequence" },
    262     { 0x0008, 0x2110, "CS", "Old Lossy Image Compression" },
    263     { 0x0008, 0x2111, "ST", "Derivation Description" },
    264     { 0x0008, 0x2112, "SQ", "Source Image Sequence" },
    265     { 0x0008, 0x2120, "SH", "Stage Name" },
    266     { 0x0008, 0x2122, "IS", "Stage Number" },
    267     { 0x0008, 0x2124, "IS", "Number of Stages" },
    268     { 0x0008, 0x2128, "IS", "View Number" },
    269     { 0x0008, 0x2129, "IS", "Number of Event Timers" },
    270     { 0x0008, 0x212a, "IS", "Number of Views in Stage" },
    271     { 0x0008, 0x2130, "DS", "Event Elapsed Time(s)" },
    272     { 0x0008, 0x2132, "LO", "Event Timer Name(s)" },
    273     { 0x0008, 0x2142, "IS", "Start Trim" },
    274     { 0x0008, 0x2143, "IS", "Stop Trim" },
    275     { 0x0008, 0x2144, "IS", "Recommended Display Frame Rate" },
    276     { 0x0008, 0x2200, "CS", "Transducer Position" },
    277     { 0x0008, 0x2204, "CS", "Transducer Orientation" },
    278     { 0x0008, 0x2208, "CS", "Anatomic Structure" },
    279     { 0x0008, 0x2218, "SQ", "Anatomic Region Sequence" },
    280     { 0x0008, 0x2220, "SQ", "Anatomic Region Modifier Sequence" },
    281     { 0x0008, 0x2228, "SQ", "Primary Anatomic Structure Sequence" },
    282     { 0x0008, 0x2230, "SQ", "Primary Anatomic Structure Modifier Sequence" },
    283     { 0x0008, 0x2240, "SQ", "Transducer Position Sequence" },
    284     { 0x0008, 0x2242, "SQ", "Transducer Position Modifier Sequence" },
    285     { 0x0008, 0x2244, "SQ", "Transducer Orientation Sequence" },
    286     { 0x0008, 0x2246, "SQ", "Transducer Orientation Modifier Sequence" },
    287     { 0x0008, 0x2251, "SQ", "Anatomic Structure Space Or Region Code Sequence" },
    288     { 0x0008, 0x2253, "SQ", "Anatomic Portal Of Entrance Code Sequence" },
    289     { 0x0008, 0x2255, "SQ", "Anatomic Approach Direction Code Sequence" },
    290     { 0x0008, 0x2256, "ST", "Anatomic Perspective Description" },
    291     { 0x0008, 0x2257, "SQ", "Anatomic Perspective Code Sequence" },
    292     { 0x0008, 0x2258, "ST", "Anatomic Location Of Examining Instrument Description" },
    293     { 0x0008, 0x2259, "SQ", "Anatomic Location Of Examining Instrument Code Sequence" },
    294     { 0x0008, 0x225a, "SQ", "Anatomic Structure Space Or Region Modifier Code Sequence" },
    295     { 0x0008, 0x225c, "SQ", "OnAxis Background Anatomic Structure Code Sequence" },
    296     { 0x0008, 0x4000, "LT", "Identifying Comments" },
    297     { 0x0009, 0x0000, "xs", "?" },
    298     { 0x0009, 0x0001, "xs", "?" },
    299     { 0x0009, 0x0002, "xs", "?" },
    300     { 0x0009, 0x0003, "xs", "?" },
    301     { 0x0009, 0x0004, "xs", "?" },
    302     { 0x0009, 0x0005, "UN", "?" },
    303     { 0x0009, 0x0006, "UN", "?" },
    304     { 0x0009, 0x0007, "UN", "?" },
    305     { 0x0009, 0x0008, "xs", "?" },
    306     { 0x0009, 0x0009, "LT", "?" },
    307     { 0x0009, 0x000a, "IS", "?" },
    308     { 0x0009, 0x000b, "IS", "?" },
    309     { 0x0009, 0x000c, "IS", "?" },
    310     { 0x0009, 0x000d, "IS", "?" },
    311     { 0x0009, 0x000e, "IS", "?" },
    312     { 0x0009, 0x000f, "UN", "?" },
    313     { 0x0009, 0x0010, "xs", "?" },
    314     { 0x0009, 0x0011, "xs", "?" },
    315     { 0x0009, 0x0012, "xs", "?" },
    316     { 0x0009, 0x0013, "xs", "?" },
    317     { 0x0009, 0x0014, "xs", "?" },
    318     { 0x0009, 0x0015, "xs", "?" },
    319     { 0x0009, 0x0016, "xs", "?" },
    320     { 0x0009, 0x0017, "LT", "?" },
    321     { 0x0009, 0x0018, "LT", "Data Set Identifier" },
    322     { 0x0009, 0x001a, "US", "?" },
    323     { 0x0009, 0x001e, "UI", "?" },
    324     { 0x0009, 0x0020, "xs", "?" },
    325     { 0x0009, 0x0021, "xs", "?" },
    326     { 0x0009, 0x0022, "SH", "User Orientation" },
    327     { 0x0009, 0x0023, "SL", "Initiation Type" },
    328     { 0x0009, 0x0024, "xs", "?" },
    329     { 0x0009, 0x0025, "xs", "?" },
    330     { 0x0009, 0x0026, "xs", "?" },
    331     { 0x0009, 0x0027, "xs", "?" },
    332     { 0x0009, 0x0029, "xs", "?" },
    333     { 0x0009, 0x002a, "SL", "?" },
    334     { 0x0009, 0x002c, "LO", "Series Comments" },
    335     { 0x0009, 0x002d, "SL", "Track Beat Average" },
    336     { 0x0009, 0x002e, "FD", "Distance Prescribed" },
    337     { 0x0009, 0x002f, "LT", "?" },
    338     { 0x0009, 0x0030, "xs", "?" },
    339     { 0x0009, 0x0031, "xs", "?" },
    340     { 0x0009, 0x0032, "LT", "?" },
    341     { 0x0009, 0x0034, "xs", "?" },
    342     { 0x0009, 0x0035, "SL", "Gantry Locus Type" },
    343     { 0x0009, 0x0037, "SL", "Starting Heart Rate" },
    344     { 0x0009, 0x0038, "xs", "?" },
    345     { 0x0009, 0x0039, "SL", "RR Window Offset" },
    346     { 0x0009, 0x003a, "SL", "Percent Cycle Imaged" },
    347     { 0x0009, 0x003e, "US", "?" },
    348     { 0x0009, 0x003f, "US", "?" },
    349     { 0x0009, 0x0040, "xs", "?" },
    350     { 0x0009, 0x0041, "xs", "?" },
    351     { 0x0009, 0x0042, "xs", "?" },
    352     { 0x0009, 0x0043, "xs", "?" },
    353     { 0x0009, 0x0050, "LT", "?" },
    354     { 0x0009, 0x0051, "xs", "?" },
    355     { 0x0009, 0x0060, "LT", "?" },
    356     { 0x0009, 0x0061, "LT", "Series Unique Identifier" },
    357     { 0x0009, 0x0070, "LT", "?" },
    358     { 0x0009, 0x0080, "LT", "?" },
    359     { 0x0009, 0x0091, "LT", "?" },
    360     { 0x0009, 0x00e2, "LT", "?" },
    361     { 0x0009, 0x00e3, "UI", "Equipment UID" },
    362     { 0x0009, 0x00e6, "SH", "Genesis Version Now" },
    363     { 0x0009, 0x00e7, "UL", "Exam Record Checksum" },
    364     { 0x0009, 0x00e8, "UL", "?" },
    365     { 0x0009, 0x00e9, "SL", "Actual Series Data Time Stamp" },
    366     { 0x0009, 0x00f2, "UN", "?" },
    367     { 0x0009, 0x00f3, "UN", "?" },
    368     { 0x0009, 0x00f4, "LT", "?" },
    369     { 0x0009, 0x00f5, "xs", "?" },
    370     { 0x0009, 0x00f6, "LT", "PDM Data Object Type Extension" },
    371     { 0x0009, 0x00f8, "US", "?" },
    372     { 0x0009, 0x00fb, "IS", "?" },
    373     { 0x0009, 0x1002, "OB", "?" },
    374     { 0x0009, 0x1003, "OB", "?" },
    375     { 0x0009, 0x1010, "UN", "?" },
    376     { 0x0010, 0x0000, "UL", "Patient Group Length" },
    377     { 0x0010, 0x0010, "PN", "Patient's Name" },
    378     { 0x0010, 0x0020, "LO", "Patient's ID" },
    379     { 0x0010, 0x0021, "LO", "Issuer of Patient's ID" },
    380     { 0x0010, 0x0030, "DA", "Patient's Birth Date" },
    381     { 0x0010, 0x0032, "TM", "Patient's Birth Time" },
    382     { 0x0010, 0x0040, "CS", "Patient's Sex" },
    383     { 0x0010, 0x0050, "SQ", "Patient's Insurance Plan Code Sequence" },
    384     { 0x0010, 0x1000, "LO", "Other Patient's ID's" },
    385     { 0x0010, 0x1001, "PN", "Other Patient's Names" },
    386     { 0x0010, 0x1005, "PN", "Patient's Birth Name" },
    387     { 0x0010, 0x1010, "AS", "Patient's Age" },
    388     { 0x0010, 0x1020, "DS", "Patient's Size" },
    389     { 0x0010, 0x1030, "DS", "Patient's Weight" },
    390     { 0x0010, 0x1040, "LO", "Patient's Address" },
    391     { 0x0010, 0x1050, "LT", "Insurance Plan Identification" },
    392     { 0x0010, 0x1060, "PN", "Patient's Mother's Birth Name" },
    393     { 0x0010, 0x1080, "LO", "Military Rank" },
    394     { 0x0010, 0x1081, "LO", "Branch of Service" },
    395     { 0x0010, 0x1090, "LO", "Medical Record Locator" },
    396     { 0x0010, 0x2000, "LO", "Medical Alerts" },
    397     { 0x0010, 0x2110, "LO", "Contrast Allergies" },
    398     { 0x0010, 0x2150, "LO", "Country of Residence" },
    399     { 0x0010, 0x2152, "LO", "Region of Residence" },
    400     { 0x0010, 0x2154, "SH", "Patients Telephone Numbers" },
    401     { 0x0010, 0x2160, "SH", "Ethnic Group" },
    402     { 0x0010, 0x2180, "SH", "Occupation" },
    403     { 0x0010, 0x21a0, "CS", "Smoking Status" },
    404     { 0x0010, 0x21b0, "LT", "Additional Patient History" },
    405     { 0x0010, 0x21c0, "US", "Pregnancy Status" },
    406     { 0x0010, 0x21d0, "DA", "Last Menstrual Date" },
    407     { 0x0010, 0x21f0, "LO", "Patients Religious Preference" },
    408     { 0x0010, 0x4000, "LT", "Patient Comments" },
    409     { 0x0011, 0x0001, "xs", "?" },
    410     { 0x0011, 0x0002, "US", "?" },
    411     { 0x0011, 0x0003, "LT", "Patient UID" },
    412     { 0x0011, 0x0004, "LT", "Patient ID" },
    413     { 0x0011, 0x000a, "xs", "?" },
    414     { 0x0011, 0x000b, "SL", "Effective Series Duration" },
    415     { 0x0011, 0x000c, "SL", "Num Beats" },
    416     { 0x0011, 0x000d, "LO", "Radio Nuclide Name" },
    417     { 0x0011, 0x0010, "xs", "?" },
    418     { 0x0011, 0x0011, "xs", "?" },
    419     { 0x0011, 0x0012, "LO", "Dataset Name" },
    420     { 0x0011, 0x0013, "LO", "Dataset Type" },
    421     { 0x0011, 0x0015, "xs", "?" },
    422     { 0x0011, 0x0016, "SL", "Energy Number" },
    423     { 0x0011, 0x0017, "SL", "RR Interval Window Number" },
    424     { 0x0011, 0x0018, "SL", "MG Bin Number" },
    425     { 0x0011, 0x0019, "FD", "Radius Of Rotation" },
    426     { 0x0011, 0x001a, "SL", "Detector Count Zone" },
    427     { 0x0011, 0x001b, "SL", "Num Energy Windows" },
    428     { 0x0011, 0x001c, "SL", "Energy Offset" },
    429     { 0x0011, 0x001d, "SL", "Energy Range" },
    430     { 0x0011, 0x001f, "SL", "Image Orientation" },
    431     { 0x0011, 0x0020, "xs", "?" },
    432     { 0x0011, 0x0021, "xs", "?" },
    433     { 0x0011, 0x0022, "xs", "?" },
    434     { 0x0011, 0x0023, "xs", "?" },
    435     { 0x0011, 0x0024, "SL", "FOV Mask Y Cutoff Angle" },
    436     { 0x0011, 0x0025, "xs", "?" },
    437     { 0x0011, 0x0026, "SL", "Table Orientation" },
    438     { 0x0011, 0x0027, "SL", "ROI Top Left" },
    439     { 0x0011, 0x0028, "SL", "ROI Bottom Right" },
    440     { 0x0011, 0x0030, "xs", "?" },
    441     { 0x0011, 0x0031, "xs", "?" },
    442     { 0x0011, 0x0032, "UN", "?" },
    443     { 0x0011, 0x0033, "LO", "Energy Correct Name" },
    444     { 0x0011, 0x0034, "LO", "Spatial Correct Name" },
    445     { 0x0011, 0x0035, "xs", "?" },
    446     { 0x0011, 0x0036, "LO", "Uniformity Correct Name" },
    447     { 0x0011, 0x0037, "LO", "Acquisition Specific Correct Name" },
    448     { 0x0011, 0x0038, "SL", "Byte Order" },
    449     { 0x0011, 0x003a, "SL", "Picture Format" },
    450     { 0x0011, 0x003b, "FD", "Pixel Scale" },
    451     { 0x0011, 0x003c, "FD", "Pixel Offset" },
    452     { 0x0011, 0x003e, "SL", "FOV Shape" },
    453     { 0x0011, 0x003f, "SL", "Dataset Flags" },
    454     { 0x0011, 0x0040, "xs", "?" },
    455     { 0x0011, 0x0041, "LT", "Medical Alerts" },
    456     { 0x0011, 0x0042, "LT", "Contrast Allergies" },
    457     { 0x0011, 0x0044, "FD", "Threshold Center" },
    458     { 0x0011, 0x0045, "FD", "Threshold Width" },
    459     { 0x0011, 0x0046, "SL", "Interpolation Type" },
    460     { 0x0011, 0x0055, "FD", "Period" },
    461     { 0x0011, 0x0056, "FD", "ElapsedTime" },
    462     { 0x0011, 0x00a1, "DA", "Patient Registration Date" },
    463     { 0x0011, 0x00a2, "TM", "Patient Registration Time" },
    464     { 0x0011, 0x00b0, "LT", "Patient Last Name" },
    465     { 0x0011, 0x00b2, "LT", "Patient First Name" },
    466     { 0x0011, 0x00b4, "LT", "Patient Hospital Status" },
    467     { 0x0011, 0x00bc, "TM", "Current Location Time" },
    468     { 0x0011, 0x00c0, "LT", "Patient Insurance Status" },
    469     { 0x0011, 0x00d0, "LT", "Patient Billing Type" },
    470     { 0x0011, 0x00d2, "LT", "Patient Billing Address" },
    471     { 0x0013, 0x0000, "LT", "Modifying Physician" },
    472     { 0x0013, 0x0010, "xs", "?" },
    473     { 0x0013, 0x0011, "SL", "?" },
    474     { 0x0013, 0x0012, "xs", "?" },
    475     { 0x0013, 0x0016, "SL", "AutoTrack Peak" },
    476     { 0x0013, 0x0017, "SL", "AutoTrack Width" },
    477     { 0x0013, 0x0018, "FD", "Transmission Scan Time" },
    478     { 0x0013, 0x0019, "FD", "Transmission Mask Width" },
    479     { 0x0013, 0x001a, "FD", "Copper Attenuator Thickness" },
    480     { 0x0013, 0x001c, "FD", "?" },
    481     { 0x0013, 0x001d, "FD", "?" },
    482     { 0x0013, 0x001e, "FD", "Tomo View Offset" },
    483     { 0x0013, 0x0020, "LT", "Patient Name" },
    484     { 0x0013, 0x0022, "LT", "Patient Id" },
    485     { 0x0013, 0x0026, "LT", "Study Comments" },
    486     { 0x0013, 0x0030, "DA", "Patient Birthdate" },
    487     { 0x0013, 0x0031, "DS", "Patient Weight" },
    488     { 0x0013, 0x0032, "LT", "Patients Maiden Name" },
    489     { 0x0013, 0x0033, "LT", "Referring Physician" },
    490     { 0x0013, 0x0034, "LT", "Admitting Diagnosis" },
    491     { 0x0013, 0x0035, "LT", "Patient Sex" },
    492     { 0x0013, 0x0040, "LT", "Procedure Description" },
    493     { 0x0013, 0x0042, "LT", "Patient Rest Direction" },
    494     { 0x0013, 0x0044, "LT", "Patient Position" },
    495     { 0x0013, 0x0046, "LT", "View Direction" },
    496     { 0x0015, 0x0001, "DS", "Stenosis Calibration Ratio" },
    497     { 0x0015, 0x0002, "DS", "Stenosis Magnification" },
    498     { 0x0015, 0x0003, "DS", "Cardiac Calibration Ratio" },
    499     { 0x0018, 0x0000, "UL", "Acquisition Group Length" },
    500     { 0x0018, 0x0010, "LO", "Contrast/Bolus Agent" },
    501     { 0x0018, 0x0012, "SQ", "Contrast/Bolus Agent Sequence" },
    502     { 0x0018, 0x0014, "SQ", "Contrast/Bolus Administration Route Sequence" },
    503     { 0x0018, 0x0015, "CS", "Body Part Examined" },
    504     { 0x0018, 0x0020, "CS", "Scanning Sequence" },
    505     { 0x0018, 0x0021, "CS", "Sequence Variant" },
    506     { 0x0018, 0x0022, "CS", "Scan Options" },
    507     { 0x0018, 0x0023, "CS", "MR Acquisition Type" },
    508     { 0x0018, 0x0024, "SH", "Sequence Name" },
    509     { 0x0018, 0x0025, "CS", "Angio Flag" },
    510     { 0x0018, 0x0026, "SQ", "Intervention Drug Information Sequence" },
    511     { 0x0018, 0x0027, "TM", "Intervention Drug Stop Time" },
    512     { 0x0018, 0x0028, "DS", "Intervention Drug Dose" },
    513     { 0x0018, 0x0029, "SQ", "Intervention Drug Code Sequence" },
    514     { 0x0018, 0x002a, "SQ", "Additional Drug Sequence" },
    515     { 0x0018, 0x0030, "LO", "Radionuclide" },
    516     { 0x0018, 0x0031, "LO", "Radiopharmaceutical" },
    517     { 0x0018, 0x0032, "DS", "Energy Window Centerline" },
    518     { 0x0018, 0x0033, "DS", "Energy Window Total Width" },
    519     { 0x0018, 0x0034, "LO", "Intervention Drug Name" },
    520     { 0x0018, 0x0035, "TM", "Intervention Drug Start Time" },
    521     { 0x0018, 0x0036, "SQ", "Intervention Therapy Sequence" },
    522     { 0x0018, 0x0037, "CS", "Therapy Type" },
    523     { 0x0018, 0x0038, "CS", "Intervention Status" },
    524     { 0x0018, 0x0039, "CS", "Therapy Description" },
    525     { 0x0018, 0x0040, "IS", "Cine Rate" },
    526     { 0x0018, 0x0050, "DS", "Slice Thickness" },
    527     { 0x0018, 0x0060, "DS", "KVP" },
    528     { 0x0018, 0x0070, "IS", "Counts Accumulated" },
    529     { 0x0018, 0x0071, "CS", "Acquisition Termination Condition" },
    530     { 0x0018, 0x0072, "DS", "Effective Series Duration" },
    531     { 0x0018, 0x0073, "CS", "Acquisition Start Condition" },
    532     { 0x0018, 0x0074, "IS", "Acquisition Start Condition Data" },
    533     { 0x0018, 0x0075, "IS", "Acquisition Termination Condition Data" },
    534     { 0x0018, 0x0080, "DS", "Repetition Time" },
    535     { 0x0018, 0x0081, "DS", "Echo Time" },
    536     { 0x0018, 0x0082, "DS", "Inversion Time" },
    537     { 0x0018, 0x0083, "DS", "Number of Averages" },
    538     { 0x0018, 0x0084, "DS", "Imaging Frequency" },
    539     { 0x0018, 0x0085, "SH", "Imaged Nucleus" },
    540     { 0x0018, 0x0086, "IS", "Echo Number(s)" },
    541     { 0x0018, 0x0087, "DS", "Magnetic Field Strength" },
    542     { 0x0018, 0x0088, "DS", "Spacing Between Slices" },
    543     { 0x0018, 0x0089, "IS", "Number of Phase Encoding Steps" },
    544     { 0x0018, 0x0090, "DS", "Data Collection Diameter" },
    545     { 0x0018, 0x0091, "IS", "Echo Train Length" },
    546     { 0x0018, 0x0093, "DS", "Percent Sampling" },
    547     { 0x0018, 0x0094, "DS", "Percent Phase Field of View" },
    548     { 0x0018, 0x0095, "DS", "Pixel Bandwidth" },
    549     { 0x0018, 0x1000, "LO", "Device Serial Number" },
    550     { 0x0018, 0x1004, "LO", "Plate ID" },
    551     { 0x0018, 0x1010, "LO", "Secondary Capture Device ID" },
    552     { 0x0018, 0x1012, "DA", "Date of Secondary Capture" },
    553     { 0x0018, 0x1014, "TM", "Time of Secondary Capture" },
    554     { 0x0018, 0x1016, "LO", "Secondary Capture Device Manufacturer" },
    555     { 0x0018, 0x1018, "LO", "Secondary Capture Device Manufacturer Model Name" },
    556     { 0x0018, 0x1019, "LO", "Secondary Capture Device Software Version(s)" },
    557     { 0x0018, 0x1020, "LO", "Software Version(s)" },
    558     { 0x0018, 0x1022, "SH", "Video Image Format Acquired" },
    559     { 0x0018, 0x1023, "LO", "Digital Image Format Acquired" },
    560     { 0x0018, 0x1030, "LO", "Protocol Name" },
    561     { 0x0018, 0x1040, "LO", "Contrast/Bolus Route" },
    562     { 0x0018, 0x1041, "DS", "Contrast/Bolus Volume" },
    563     { 0x0018, 0x1042, "TM", "Contrast/Bolus Start Time" },
    564     { 0x0018, 0x1043, "TM", "Contrast/Bolus Stop Time" },
    565     { 0x0018, 0x1044, "DS", "Contrast/Bolus Total Dose" },
    566     { 0x0018, 0x1045, "IS", "Syringe Counts" },
    567     { 0x0018, 0x1046, "DS", "Contrast Flow Rate" },
    568     { 0x0018, 0x1047, "DS", "Contrast Flow Duration" },
    569     { 0x0018, 0x1048, "CS", "Contrast/Bolus Ingredient" },
    570     { 0x0018, 0x1049, "DS", "Contrast/Bolus Ingredient Concentration" },
    571     { 0x0018, 0x1050, "DS", "Spatial Resolution" },
    572     { 0x0018, 0x1060, "DS", "Trigger Time" },
    573     { 0x0018, 0x1061, "LO", "Trigger Source or Type" },
    574     { 0x0018, 0x1062, "IS", "Nominal Interval" },
    575     { 0x0018, 0x1063, "DS", "Frame Time" },
    576     { 0x0018, 0x1064, "LO", "Framing Type" },
    577     { 0x0018, 0x1065, "DS", "Frame Time Vector" },
    578     { 0x0018, 0x1066, "DS", "Frame Delay" },
    579     { 0x0018, 0x1067, "DS", "Image Trigger Delay" },
    580     { 0x0018, 0x1068, "DS", "Group Time Offset" },
    581     { 0x0018, 0x1069, "DS", "Trigger Time Offset" },
    582     { 0x0018, 0x106a, "CS", "Synchronization Trigger" },
    583     { 0x0018, 0x106b, "UI", "Synchronization Frame of Reference" },
    584     { 0x0018, 0x106e, "UL", "Trigger Sample Position" },
    585     { 0x0018, 0x1070, "LO", "Radiopharmaceutical Route" },
    586     { 0x0018, 0x1071, "DS", "Radiopharmaceutical Volume" },
    587     { 0x0018, 0x1072, "TM", "Radiopharmaceutical Start Time" },
    588     { 0x0018, 0x1073, "TM", "Radiopharmaceutical Stop Time" },
    589     { 0x0018, 0x1074, "DS", "Radionuclide Total Dose" },
    590     { 0x0018, 0x1075, "DS", "Radionuclide Half Life" },
    591     { 0x0018, 0x1076, "DS", "Radionuclide Positron Fraction" },
    592     { 0x0018, 0x1077, "DS", "Radiopharmaceutical Specific Activity" },
    593     { 0x0018, 0x1080, "CS", "Beat Rejection Flag" },
    594     { 0x0018, 0x1081, "IS", "Low R-R Value" },
    595     { 0x0018, 0x1082, "IS", "High R-R Value" },
    596     { 0x0018, 0x1083, "IS", "Intervals Acquired" },
    597     { 0x0018, 0x1084, "IS", "Intervals Rejected" },
    598     { 0x0018, 0x1085, "LO", "PVC Rejection" },
    599     { 0x0018, 0x1086, "IS", "Skip Beats" },
    600     { 0x0018, 0x1088, "IS", "Heart Rate" },
    601     { 0x0018, 0x1090, "IS", "Cardiac Number of Images" },
    602     { 0x0018, 0x1094, "IS", "Trigger Window" },
    603     { 0x0018, 0x1100, "DS", "Reconstruction Diameter" },
    604     { 0x0018, 0x1110, "DS", "Distance Source to Detector" },
    605     { 0x0018, 0x1111, "DS", "Distance Source to Patient" },
    606     { 0x0018, 0x1114, "DS", "Estimated Radiographic Magnification Factor" },
    607     { 0x0018, 0x1120, "DS", "Gantry/Detector Tilt" },
    608     { 0x0018, 0x1121, "DS", "Gantry/Detector Slew" },
    609     { 0x0018, 0x1130, "DS", "Table Height" },
    610     { 0x0018, 0x1131, "DS", "Table Traverse" },
    611     { 0x0018, 0x1134, "CS", "Table Motion" },
    612     { 0x0018, 0x1135, "DS", "Table Vertical Increment" },
    613     { 0x0018, 0x1136, "DS", "Table Lateral Increment" },
    614     { 0x0018, 0x1137, "DS", "Table Longitudinal Increment" },
    615     { 0x0018, 0x1138, "DS", "Table Angle" },
    616     { 0x0018, 0x113a, "CS", "Table Type" },
    617     { 0x0018, 0x1140, "CS", "Rotation Direction" },
    618     { 0x0018, 0x1141, "DS", "Angular Position" },
    619     { 0x0018, 0x1142, "DS", "Radial Position" },
    620     { 0x0018, 0x1143, "DS", "Scan Arc" },
    621     { 0x0018, 0x1144, "DS", "Angular Step" },
    622     { 0x0018, 0x1145, "DS", "Center of Rotation Offset" },
    623     { 0x0018, 0x1146, "DS", "Rotation Offset" },
    624     { 0x0018, 0x1147, "CS", "Field of View Shape" },
    625     { 0x0018, 0x1149, "IS", "Field of View Dimension(s)" },
    626     { 0x0018, 0x1150, "IS", "Exposure Time" },
    627     { 0x0018, 0x1151, "IS", "X-ray Tube Current" },
    628     { 0x0018, 0x1152, "IS", "Exposure" },
    629     { 0x0018, 0x1153, "IS", "Exposure in uAs" },
    630     { 0x0018, 0x1154, "DS", "AveragePulseWidth" },
    631     { 0x0018, 0x1155, "CS", "RadiationSetting" },
    632     { 0x0018, 0x1156, "CS", "Rectification Type" },
    633     { 0x0018, 0x115a, "CS", "RadiationMode" },
    634     { 0x0018, 0x115e, "DS", "ImageAreaDoseProduct" },
    635     { 0x0018, 0x1160, "SH", "Filter Type" },
    636     { 0x0018, 0x1161, "LO", "TypeOfFilters" },
    637     { 0x0018, 0x1162, "DS", "IntensifierSize" },
    638     { 0x0018, 0x1164, "DS", "ImagerPixelSpacing" },
    639     { 0x0018, 0x1166, "CS", "Grid" },
    640     { 0x0018, 0x1170, "IS", "Generator Power" },
    641     { 0x0018, 0x1180, "SH", "Collimator/Grid Name" },
    642     { 0x0018, 0x1181, "CS", "Collimator Type" },
    643     { 0x0018, 0x1182, "IS", "Focal Distance" },
    644     { 0x0018, 0x1183, "DS", "X Focus Center" },
    645     { 0x0018, 0x1184, "DS", "Y Focus Center" },
    646     { 0x0018, 0x1190, "DS", "Focal Spot(s)" },
    647     { 0x0018, 0x1191, "CS", "Anode Target Material" },
    648     { 0x0018, 0x11a0, "DS", "Body Part Thickness" },
    649     { 0x0018, 0x11a2, "DS", "Compression Force" },
    650     { 0x0018, 0x1200, "DA", "Date of Last Calibration" },
    651     { 0x0018, 0x1201, "TM", "Time of Last Calibration" },
    652     { 0x0018, 0x1210, "SH", "Convolution Kernel" },
    653     { 0x0018, 0x1240, "IS", "Upper/Lower Pixel Values" },
    654     { 0x0018, 0x1242, "IS", "Actual Frame Duration" },
    655     { 0x0018, 0x1243, "IS", "Count Rate" },
    656     { 0x0018, 0x1244, "US", "Preferred Playback Sequencing" },
    657     { 0x0018, 0x1250, "SH", "Receiving Coil" },
    658     { 0x0018, 0x1251, "SH", "Transmitting Coil" },
    659     { 0x0018, 0x1260, "SH", "Plate Type" },
    660     { 0x0018, 0x1261, "LO", "Phosphor Type" },
    661     { 0x0018, 0x1300, "DS", "Scan Velocity" },
    662     { 0x0018, 0x1301, "CS", "Whole Body Technique" },
    663     { 0x0018, 0x1302, "IS", "Scan Length" },
    664     { 0x0018, 0x1310, "US", "Acquisition Matrix" },
    665     { 0x0018, 0x1312, "CS", "Phase Encoding Direction" },
    666     { 0x0018, 0x1314, "DS", "Flip Angle" },
    667     { 0x0018, 0x1315, "CS", "Variable Flip Angle Flag" },
    668     { 0x0018, 0x1316, "DS", "SAR" },
    669     { 0x0018, 0x1318, "DS", "dB/dt" },
    670     { 0x0018, 0x1400, "LO", "Acquisition Device Processing Description" },
    671     { 0x0018, 0x1401, "LO", "Acquisition Device Processing Code" },
    672     { 0x0018, 0x1402, "CS", "Cassette Orientation" },
    673     { 0x0018, 0x1403, "CS", "Cassette Size" },
    674     { 0x0018, 0x1404, "US", "Exposures on Plate" },
    675     { 0x0018, 0x1405, "IS", "Relative X-ray Exposure" },
    676     { 0x0018, 0x1450, "DS", "Column Angulation" },
    677     { 0x0018, 0x1460, "DS", "Tomo Layer Height" },
    678     { 0x0018, 0x1470, "DS", "Tomo Angle" },
    679     { 0x0018, 0x1480, "DS", "Tomo Time" },
    680     { 0x0018, 0x1490, "CS", "Tomo Type" },
    681     { 0x0018, 0x1491, "CS", "Tomo Class" },
    682     { 0x0018, 0x1495, "IS", "Number of Tomosynthesis Source Images" },
    683     { 0x0018, 0x1500, "CS", "PositionerMotion" },
    684     { 0x0018, 0x1508, "CS", "Positioner Type" },
    685     { 0x0018, 0x1510, "DS", "PositionerPrimaryAngle" },
    686     { 0x0018, 0x1511, "DS", "PositionerSecondaryAngle" },
    687     { 0x0018, 0x1520, "DS", "PositionerPrimaryAngleIncrement" },
    688     { 0x0018, 0x1521, "DS", "PositionerSecondaryAngleIncrement" },
    689     { 0x0018, 0x1530, "DS", "DetectorPrimaryAngle" },
    690     { 0x0018, 0x1531, "DS", "DetectorSecondaryAngle" },
    691     { 0x0018, 0x1600, "CS", "Shutter Shape" },
    692     { 0x0018, 0x1602, "IS", "Shutter Left Vertical Edge" },
    693     { 0x0018, 0x1604, "IS", "Shutter Right Vertical Edge" },
    694     { 0x0018, 0x1606, "IS", "Shutter Upper Horizontal Edge" },
    695     { 0x0018, 0x1608, "IS", "Shutter Lower Horizonta lEdge" },
    696     { 0x0018, 0x1610, "IS", "Center of Circular Shutter" },
    697     { 0x0018, 0x1612, "IS", "Radius of Circular Shutter" },
    698     { 0x0018, 0x1620, "IS", "Vertices of Polygonal Shutter" },
    699     { 0x0018, 0x1622, "US", "Shutter Presentation Value" },
    700     { 0x0018, 0x1623, "US", "Shutter Overlay Group" },
    701     { 0x0018, 0x1700, "CS", "Collimator Shape" },
    702     { 0x0018, 0x1702, "IS", "Collimator Left Vertical Edge" },
    703     { 0x0018, 0x1704, "IS", "Collimator Right Vertical Edge" },
    704     { 0x0018, 0x1706, "IS", "Collimator Upper Horizontal Edge" },
    705     { 0x0018, 0x1708, "IS", "Collimator Lower Horizontal Edge" },
    706     { 0x0018, 0x1710, "IS", "Center of Circular Collimator" },
    707     { 0x0018, 0x1712, "IS", "Radius of Circular Collimator" },
    708     { 0x0018, 0x1720, "IS", "Vertices of Polygonal Collimator" },
    709     { 0x0018, 0x1800, "CS", "Acquisition Time Synchronized" },
    710     { 0x0018, 0x1801, "SH", "Time Source" },
    711     { 0x0018, 0x1802, "CS", "Time Distribution Protocol" },
    712     { 0x0018, 0x4000, "LT", "Acquisition Comments" },
    713     { 0x0018, 0x5000, "SH", "Output Power" },
    714     { 0x0018, 0x5010, "LO", "Transducer Data" },
    715     { 0x0018, 0x5012, "DS", "Focus Depth" },
    716     { 0x0018, 0x5020, "LO", "Processing Function" },
    717     { 0x0018, 0x5021, "LO", "Postprocessing Function" },
    718     { 0x0018, 0x5022, "DS", "Mechanical Index" },
    719     { 0x0018, 0x5024, "DS", "Thermal Index" },
    720     { 0x0018, 0x5026, "DS", "Cranial Thermal Index" },
    721     { 0x0018, 0x5027, "DS", "Soft Tissue Thermal Index" },
    722     { 0x0018, 0x5028, "DS", "Soft Tissue-Focus Thermal Index" },
    723     { 0x0018, 0x5029, "DS", "Soft Tissue-Surface Thermal Index" },
    724     { 0x0018, 0x5030, "DS", "Dynamic Range" },
    725     { 0x0018, 0x5040, "DS", "Total Gain" },
    726     { 0x0018, 0x5050, "IS", "Depth of Scan Field" },
    727     { 0x0018, 0x5100, "CS", "Patient Position" },
    728     { 0x0018, 0x5101, "CS", "View Position" },
    729     { 0x0018, 0x5104, "SQ", "Projection Eponymous Name Code Sequence" },
    730     { 0x0018, 0x5210, "DS", "Image Transformation Matrix" },
    731     { 0x0018, 0x5212, "DS", "Image Translation Vector" },
    732     { 0x0018, 0x6000, "DS", "Sensitivity" },
    733     { 0x0018, 0x6011, "IS", "Sequence of Ultrasound Regions" },
    734     { 0x0018, 0x6012, "US", "Region Spatial Format" },
    735     { 0x0018, 0x6014, "US", "Region Data Type" },
    736     { 0x0018, 0x6016, "UL", "Region Flags" },
    737     { 0x0018, 0x6018, "UL", "Region Location Min X0" },
    738     { 0x0018, 0x601a, "UL", "Region Location Min Y0" },
    739     { 0x0018, 0x601c, "UL", "Region Location Max X1" },
    740     { 0x0018, 0x601e, "UL", "Region Location Max Y1" },
    741     { 0x0018, 0x6020, "SL", "Reference Pixel X0" },
    742     { 0x0018, 0x6022, "SL", "Reference Pixel Y0" },
    743     { 0x0018, 0x6024, "US", "Physical Units X Direction" },
    744     { 0x0018, 0x6026, "US", "Physical Units Y Direction" },
    745     { 0x0018, 0x6028, "FD", "Reference Pixel Physical Value X" },
    746     { 0x0018, 0x602a, "US", "Reference Pixel Physical Value Y" },
    747     { 0x0018, 0x602c, "US", "Physical Delta X" },
    748     { 0x0018, 0x602e, "US", "Physical Delta Y" },
    749     { 0x0018, 0x6030, "UL", "Transducer Frequency" },
    750     { 0x0018, 0x6031, "CS", "Transducer Type" },
    751     { 0x0018, 0x6032, "UL", "Pulse Repetition Frequency" },
    752     { 0x0018, 0x6034, "FD", "Doppler Correction Angle" },
    753     { 0x0018, 0x6036, "FD", "Steering Angle" },
    754     { 0x0018, 0x6038, "UL", "Doppler Sample Volume X Position" },
    755     { 0x0018, 0x603a, "UL", "Doppler Sample Volume Y Position" },
    756     { 0x0018, 0x603c, "UL", "TM-Line Position X0" },
    757     { 0x0018, 0x603e, "UL", "TM-Line Position Y0" },
    758     { 0x0018, 0x6040, "UL", "TM-Line Position X1" },
    759     { 0x0018, 0x6042, "UL", "TM-Line Position Y1" },
    760     { 0x0018, 0x6044, "US", "Pixel Component Organization" },
    761     { 0x0018, 0x6046, "UL", "Pixel Component Mask" },
    762     { 0x0018, 0x6048, "UL", "Pixel Component Range Start" },
    763     { 0x0018, 0x604a, "UL", "Pixel Component Range Stop" },
    764     { 0x0018, 0x604c, "US", "Pixel Component Physical Units" },
    765     { 0x0018, 0x604e, "US", "Pixel Component Data Type" },
    766     { 0x0018, 0x6050, "UL", "Number of Table Break Points" },
    767     { 0x0018, 0x6052, "UL", "Table of X Break Points" },
    768     { 0x0018, 0x6054, "FD", "Table of Y Break Points" },
    769     { 0x0018, 0x6056, "UL", "Number of Table Entries" },
    770     { 0x0018, 0x6058, "UL", "Table of Pixel Values" },
    771     { 0x0018, 0x605a, "FL", "Table of Parameter Values" },
    772     { 0x0018, 0x7000, "CS", "Detector Conditions Nominal Flag" },
    773     { 0x0018, 0x7001, "DS", "Detector Temperature" },
    774     { 0x0018, 0x7004, "CS", "Detector Type" },
    775     { 0x0018, 0x7005, "CS", "Detector Configuration" },
    776     { 0x0018, 0x7006, "LT", "Detector Description" },
    777     { 0x0018, 0x7008, "LT", "Detector Mode" },
    778     { 0x0018, 0x700a, "SH", "Detector ID" },
    779     { 0x0018, 0x700c, "DA", "Date of Last Detector Calibration " },
    780     { 0x0018, 0x700e, "TM", "Time of Last Detector Calibration" },
    781     { 0x0018, 0x7010, "IS", "Exposures on Detector Since Last Calibration" },
    782     { 0x0018, 0x7011, "IS", "Exposures on Detector Since Manufactured" },
    783     { 0x0018, 0x7012, "DS", "Detector Time Since Last Exposure" },
    784     { 0x0018, 0x7014, "DS", "Detector Active Time" },
    785     { 0x0018, 0x7016, "DS", "Detector Activation Offset From Exposure" },
    786     { 0x0018, 0x701a, "DS", "Detector Binning" },
    787     { 0x0018, 0x7020, "DS", "Detector Element Physical Size" },
    788     { 0x0018, 0x7022, "DS", "Detector Element Spacing" },
    789     { 0x0018, 0x7024, "CS", "Detector Active Shape" },
    790     { 0x0018, 0x7026, "DS", "Detector Active Dimensions" },
    791     { 0x0018, 0x7028, "DS", "Detector Active Origin" },
    792     { 0x0018, 0x7030, "DS", "Field of View Origin" },
    793     { 0x0018, 0x7032, "DS", "Field of View Rotation" },
    794     { 0x0018, 0x7034, "CS", "Field of View Horizontal Flip" },
    795     { 0x0018, 0x7040, "LT", "Grid Absorbing Material" },
    796     { 0x0018, 0x7041, "LT", "Grid Spacing Material" },
    797     { 0x0018, 0x7042, "DS", "Grid Thickness" },
    798     { 0x0018, 0x7044, "DS", "Grid Pitch" },
    799     { 0x0018, 0x7046, "IS", "Grid Aspect Ratio" },
    800     { 0x0018, 0x7048, "DS", "Grid Period" },
    801     { 0x0018, 0x704c, "DS", "Grid Focal Distance" },
    802     { 0x0018, 0x7050, "LT", "Filter Material" },
    803     { 0x0018, 0x7052, "DS", "Filter Thickness Minimum" },
    804     { 0x0018, 0x7054, "DS", "Filter Thickness Maximum" },
    805     { 0x0018, 0x7060, "CS", "Exposure Control Mode" },
    806     { 0x0018, 0x7062, "LT", "Exposure Control Mode Description" },
    807     { 0x0018, 0x7064, "CS", "Exposure Status" },
    808     { 0x0018, 0x7065, "DS", "Phototimer Setting" },
    809     { 0x0019, 0x0000, "xs", "?" },
    810     { 0x0019, 0x0001, "xs", "?" },
    811     { 0x0019, 0x0002, "xs", "?" },
    812     { 0x0019, 0x0003, "xs", "?" },
    813     { 0x0019, 0x0004, "xs", "?" },
    814     { 0x0019, 0x0005, "xs", "?" },
    815     { 0x0019, 0x0006, "xs", "?" },
    816     { 0x0019, 0x0007, "xs", "?" },
    817     { 0x0019, 0x0008, "xs", "?" },
    818     { 0x0019, 0x0009, "xs", "?" },
    819     { 0x0019, 0x000a, "xs", "?" },
    820     { 0x0019, 0x000b, "DS", "?" },
    821     { 0x0019, 0x000c, "US", "?" },
    822     { 0x0019, 0x000d, "TM", "Time" },
    823     { 0x0019, 0x000e, "xs", "?" },
    824     { 0x0019, 0x000f, "DS", "Horizontal Frame Of Reference" },
    825     { 0x0019, 0x0010, "xs", "?" },
    826     { 0x0019, 0x0011, "xs", "?" },
    827     { 0x0019, 0x0012, "xs", "?" },
    828     { 0x0019, 0x0013, "xs", "?" },
    829     { 0x0019, 0x0014, "xs", "?" },
    830     { 0x0019, 0x0015, "xs", "?" },
    831     { 0x0019, 0x0016, "xs", "?" },
    832     { 0x0019, 0x0017, "xs", "?" },
    833     { 0x0019, 0x0018, "xs", "?" },
    834     { 0x0019, 0x0019, "xs", "?" },
    835     { 0x0019, 0x001a, "xs", "?" },
    836     { 0x0019, 0x001b, "xs", "?" },
    837     { 0x0019, 0x001c, "CS", "Dose" },
    838     { 0x0019, 0x001d, "IS", "Side Mark" },
    839     { 0x0019, 0x001e, "xs", "?" },
    840     { 0x0019, 0x001f, "DS", "Exposure Duration" },
    841     { 0x0019, 0x0020, "xs", "?" },
    842     { 0x0019, 0x0021, "xs", "?" },
    843     { 0x0019, 0x0022, "xs", "?" },
    844     { 0x0019, 0x0023, "xs", "?" },
    845     { 0x0019, 0x0024, "xs", "?" },
    846     { 0x0019, 0x0025, "xs", "?" },
    847     { 0x0019, 0x0026, "xs", "?" },
    848     { 0x0019, 0x0027, "xs", "?" },
    849     { 0x0019, 0x0028, "xs", "?" },
    850     { 0x0019, 0x0029, "IS", "?" },
    851     { 0x0019, 0x002a, "xs", "?" },
    852     { 0x0019, 0x002b, "DS", "Xray Off Position" },
    853     { 0x0019, 0x002c, "xs", "?" },
    854     { 0x0019, 0x002d, "US", "?" },
    855     { 0x0019, 0x002e, "xs", "?" },
    856     { 0x0019, 0x002f, "DS", "Trigger Frequency" },
    857     { 0x0019, 0x0030, "xs", "?" },
    858     { 0x0019, 0x0031, "xs", "?" },
    859     { 0x0019, 0x0032, "xs", "?" },
    860     { 0x0019, 0x0033, "UN", "ECG 2 Offset 2" },
    861     { 0x0019, 0x0034, "US", "?" },
    862     { 0x0019, 0x0036, "US", "?" },
    863     { 0x0019, 0x0038, "US", "?" },
    864     { 0x0019, 0x0039, "xs", "?" },
    865     { 0x0019, 0x003a, "xs", "?" },
    866     { 0x0019, 0x003b, "LT", "?" },
    867     { 0x0019, 0x003c, "xs", "?" },
    868     { 0x0019, 0x003e, "xs", "?" },
    869     { 0x0019, 0x003f, "UN", "?" },
    870     { 0x0019, 0x0040, "xs", "?" },
    871     { 0x0019, 0x0041, "xs", "?" },
    872     { 0x0019, 0x0042, "xs", "?" },
    873     { 0x0019, 0x0043, "xs", "?" },
    874     { 0x0019, 0x0044, "xs", "?" },
    875     { 0x0019, 0x0045, "xs", "?" },
    876     { 0x0019, 0x0046, "xs", "?" },
    877     { 0x0019, 0x0047, "xs", "?" },
    878     { 0x0019, 0x0048, "xs", "?" },
    879     { 0x0019, 0x0049, "US", "?" },
    880     { 0x0019, 0x004a, "xs", "?" },
    881     { 0x0019, 0x004b, "SL", "Data Size For Scan Data" },
    882     { 0x0019, 0x004c, "US", "?" },
    883     { 0x0019, 0x004e, "US", "?" },
    884     { 0x0019, 0x0050, "xs", "?" },
    885     { 0x0019, 0x0051, "xs", "?" },
    886     { 0x0019, 0x0052, "xs", "?" },
    887     { 0x0019, 0x0053, "LT", "Barcode" },
    888     { 0x0019, 0x0054, "xs", "?" },
    889     { 0x0019, 0x0055, "DS", "Receiver Reference Gain" },
    890     { 0x0019, 0x0056, "xs", "?" },
    891     { 0x0019, 0x0057, "SS", "CT Water Number" },
    892     { 0x0019, 0x0058, "xs", "?" },
    893     { 0x0019, 0x005a, "xs", "?" },
    894     { 0x0019, 0x005c, "xs", "?" },
    895     { 0x0019, 0x005d, "US", "?" },
    896     { 0x0019, 0x005e, "xs", "?" },
    897     { 0x0019, 0x005f, "SL", "Increment Between Channels" },
    898     { 0x0019, 0x0060, "xs", "?" },
    899     { 0x0019, 0x0061, "xs", "?" },
    900     { 0x0019, 0x0062, "xs", "?" },
    901     { 0x0019, 0x0063, "xs", "?" },
    902     { 0x0019, 0x0064, "xs", "?" },
    903     { 0x0019, 0x0065, "xs", "?" },
    904     { 0x0019, 0x0066, "xs", "?" },
    905     { 0x0019, 0x0067, "xs", "?" },
    906     { 0x0019, 0x0068, "xs", "?" },
    907     { 0x0019, 0x0069, "UL", "Convolution Mode" },
    908     { 0x0019, 0x006a, "xs", "?" },
    909     { 0x0019, 0x006b, "SS", "Field Of View In Detector Cells" },
    910     { 0x0019, 0x006c, "US", "?" },
    911     { 0x0019, 0x006e, "US", "?" },
    912     { 0x0019, 0x0070, "xs", "?" },
    913     { 0x0019, 0x0071, "xs", "?" },
    914     { 0x0019, 0x0072, "xs", "?" },
    915     { 0x0019, 0x0073, "xs", "?" },
    916     { 0x0019, 0x0074, "xs", "?" },
    917     { 0x0019, 0x0075, "xs", "?" },
    918     { 0x0019, 0x0076, "xs", "?" },
    919     { 0x0019, 0x0077, "US", "?" },
    920     { 0x0019, 0x0078, "US", "?" },
    921     { 0x0019, 0x007a, "US", "?" },
    922     { 0x0019, 0x007c, "US", "?" },
    923     { 0x0019, 0x007d, "DS", "Second Echo" },
    924     { 0x0019, 0x007e, "xs", "?" },
    925     { 0x0019, 0x007f, "DS", "Table Delta" },
    926     { 0x0019, 0x0080, "xs", "?" },
    927     { 0x0019, 0x0081, "xs", "?" },
    928     { 0x0019, 0x0082, "xs", "?" },
    929     { 0x0019, 0x0083, "xs", "?" },
    930     { 0x0019, 0x0084, "xs", "?" },
    931     { 0x0019, 0x0085, "xs", "?" },
    932     { 0x0019, 0x0086, "xs", "?" },
    933     { 0x0019, 0x0087, "xs", "?" },
    934     { 0x0019, 0x0088, "xs", "?" },
    935     { 0x0019, 0x008a, "xs", "?" },
    936     { 0x0019, 0x008b, "SS", "Actual Receive Gain Digital" },
    937     { 0x0019, 0x008c, "US", "?" },
    938     { 0x0019, 0x008d, "DS", "Delay After Trigger" },
    939     { 0x0019, 0x008e, "US", "?" },
    940     { 0x0019, 0x008f, "SS", "Swap Phase Frequency" },
    941     { 0x0019, 0x0090, "xs", "?" },
    942     { 0x0019, 0x0091, "xs", "?" },
    943     { 0x0019, 0x0092, "xs", "?" },
    944     { 0x0019, 0x0093, "xs", "?" },
    945     { 0x0019, 0x0094, "xs", "?" },
    946     { 0x0019, 0x0095, "SS", "Analog Receiver Gain" },
    947     { 0x0019, 0x0096, "xs", "?" },
    948     { 0x0019, 0x0097, "xs", "?" },
    949     { 0x0019, 0x0098, "xs", "?" },
    950     { 0x0019, 0x0099, "US", "?" },
    951     { 0x0019, 0x009a, "US", "?" },
    952     { 0x0019, 0x009b, "SS", "Pulse Sequence Mode" },
    953     { 0x0019, 0x009c, "xs", "?" },
    954     { 0x0019, 0x009d, "DT", "Pulse Sequence Date" },
    955     { 0x0019, 0x009e, "xs", "?" },
    956     { 0x0019, 0x009f, "xs", "?" },
    957     { 0x0019, 0x00a0, "xs", "?" },
    958     { 0x0019, 0x00a1, "xs", "?" },
    959     { 0x0019, 0x00a2, "xs", "?" },
    960     { 0x0019, 0x00a3, "xs", "?" },
    961     { 0x0019, 0x00a4, "xs", "?" },
    962     { 0x0019, 0x00a5, "xs", "?" },
    963     { 0x0019, 0x00a6, "xs", "?" },
    964     { 0x0019, 0x00a7, "xs", "?" },
    965     { 0x0019, 0x00a8, "xs", "?" },
    966     { 0x0019, 0x00a9, "xs", "?" },
    967     { 0x0019, 0x00aa, "xs", "?" },
    968     { 0x0019, 0x00ab, "xs", "?" },
    969     { 0x0019, 0x00ac, "xs", "?" },
    970     { 0x0019, 0x00ad, "xs", "?" },
    971     { 0x0019, 0x00ae, "xs", "?" },
    972     { 0x0019, 0x00af, "xs", "?" },
    973     { 0x0019, 0x00b0, "xs", "?" },
    974     { 0x0019, 0x00b1, "xs", "?" },
    975     { 0x0019, 0x00b2, "xs", "?" },
    976     { 0x0019, 0x00b3, "xs", "?" },
    977     { 0x0019, 0x00b4, "xs", "?" },
    978     { 0x0019, 0x00b5, "xs", "?" },
    979     { 0x0019, 0x00b6, "DS", "User Data" },
    980     { 0x0019, 0x00b7, "DS", "User Data" },
    981     { 0x0019, 0x00b8, "DS", "User Data" },
    982     { 0x0019, 0x00b9, "DS", "User Data" },
    983     { 0x0019, 0x00ba, "DS", "User Data" },
    984     { 0x0019, 0x00bb, "DS", "User Data" },
    985     { 0x0019, 0x00bc, "DS", "User Data" },
    986     { 0x0019, 0x00bd, "DS", "User Data" },
    987     { 0x0019, 0x00be, "DS", "Projection Angle" },
    988     { 0x0019, 0x00c0, "xs", "?" },
    989     { 0x0019, 0x00c1, "xs", "?" },
    990     { 0x0019, 0x00c2, "xs", "?" },
    991     { 0x0019, 0x00c3, "xs", "?" },
    992     { 0x0019, 0x00c4, "xs", "?" },
    993     { 0x0019, 0x00c5, "xs", "?" },
    994     { 0x0019, 0x00c6, "SS", "SAT Location H" },
    995     { 0x0019, 0x00c7, "SS", "SAT Location F" },
    996     { 0x0019, 0x00c8, "SS", "SAT Thickness R L" },
    997     { 0x0019, 0x00c9, "SS", "SAT Thickness A P" },
    998     { 0x0019, 0x00ca, "SS", "SAT Thickness H F" },
    999     { 0x0019, 0x00cb, "xs", "?" },
   1000     { 0x0019, 0x00cc, "xs", "?" },
   1001     { 0x0019, 0x00cd, "SS", "Thickness Disclaimer" },
   1002     { 0x0019, 0x00ce, "SS", "Prescan Type" },
   1003     { 0x0019, 0x00cf, "SS", "Prescan Status" },
   1004     { 0x0019, 0x00d0, "SH", "Raw Data Type" },
   1005     { 0x0019, 0x00d1, "DS", "Flow Sensitivity" },
   1006     { 0x0019, 0x00d2, "xs", "?" },
   1007     { 0x0019, 0x00d3, "xs", "?" },
   1008     { 0x0019, 0x00d4, "xs", "?" },
   1009     { 0x0019, 0x00d5, "xs", "?" },
   1010     { 0x0019, 0x00d6, "xs", "?" },
   1011     { 0x0019, 0x00d7, "xs", "?" },
   1012     { 0x0019, 0x00d8, "xs", "?" },
   1013     { 0x0019, 0x00d9, "xs", "?" },
   1014     { 0x0019, 0x00da, "xs", "?" },
   1015     { 0x0019, 0x00db, "DS", "Back Projector Coefficient" },
   1016     { 0x0019, 0x00dc, "SS", "Primary Speed Correction Used" },
   1017     { 0x0019, 0x00dd, "SS", "Overrange Correction Used" },
   1018     { 0x0019, 0x00de, "DS", "Dynamic Z Alpha Value" },
   1019     { 0x0019, 0x00df, "DS", "User Data" },
   1020     { 0x0019, 0x00e0, "DS", "User Data" },
   1021     { 0x0019, 0x00e1, "xs", "?" },
   1022     { 0x0019, 0x00e2, "xs", "?" },
   1023     { 0x0019, 0x00e3, "xs", "?" },
   1024     { 0x0019, 0x00e4, "LT", "?" },
   1025     { 0x0019, 0x00e5, "IS", "?" },
   1026     { 0x0019, 0x00e6, "US", "?" },
   1027     { 0x0019, 0x00e8, "DS", "?" },
   1028     { 0x0019, 0x00e9, "DS", "?" },
   1029     { 0x0019, 0x00eb, "DS", "?" },
   1030     { 0x0019, 0x00ec, "US", "?" },
   1031     { 0x0019, 0x00f0, "xs", "?" },
   1032     { 0x0019, 0x00f1, "xs", "?" },
   1033     { 0x0019, 0x00f2, "xs", "?" },
   1034     { 0x0019, 0x00f3, "xs", "?" },
   1035     { 0x0019, 0x00f4, "LT", "?" },
   1036     { 0x0019, 0x00f9, "DS", "Transmission Gain" },
   1037     { 0x0019, 0x1015, "UN", "?" },
   1038     { 0x0020, 0x0000, "UL", "Relationship Group Length" },
   1039     { 0x0020, 0x000d, "UI", "Study Instance UID" },
   1040     { 0x0020, 0x000e, "UI", "Series Instance UID" },
   1041     { 0x0020, 0x0010, "SH", "Study ID" },
   1042     { 0x0020, 0x0011, "IS", "Series Number" },
   1043     { 0x0020, 0x0012, "IS", "Acquisition Number" },
   1044     { 0x0020, 0x0013, "IS", "Instance (formerly Image) Number" },
   1045     { 0x0020, 0x0014, "IS", "Isotope Number" },
   1046     { 0x0020, 0x0015, "IS", "Phase Number" },
   1047     { 0x0020, 0x0016, "IS", "Interval Number" },
   1048     { 0x0020, 0x0017, "IS", "Time Slot Number" },
   1049     { 0x0020, 0x0018, "IS", "Angle Number" },
   1050     { 0x0020, 0x0020, "CS", "Patient Orientation" },
   1051     { 0x0020, 0x0022, "IS", "Overlay Number" },
   1052     { 0x0020, 0x0024, "IS", "Curve Number" },
   1053     { 0x0020, 0x0026, "IS", "LUT Number" },
   1054     { 0x0020, 0x0030, "DS", "Image Position" },
   1055     { 0x0020, 0x0032, "DS", "Image Position (Patient)" },
   1056     { 0x0020, 0x0035, "DS", "Image Orientation" },
   1057     { 0x0020, 0x0037, "DS", "Image Orientation (Patient)" },
   1058     { 0x0020, 0x0050, "DS", "Location" },
   1059     { 0x0020, 0x0052, "UI", "Frame of Reference UID" },
   1060     { 0x0020, 0x0060, "CS", "Laterality" },
   1061     { 0x0020, 0x0062, "CS", "Image Laterality" },
   1062     { 0x0020, 0x0070, "LT", "Image Geometry Type" },
   1063     { 0x0020, 0x0080, "LO", "Masking Image" },
   1064     { 0x0020, 0x0100, "IS", "Temporal Position Identifier" },
   1065     { 0x0020, 0x0105, "IS", "Number of Temporal Positions" },
   1066     { 0x0020, 0x0110, "DS", "Temporal Resolution" },
   1067     { 0x0020, 0x1000, "IS", "Series in Study" },
   1068     { 0x0020, 0x1001, "DS", "Acquisitions in Series" },
   1069     { 0x0020, 0x1002, "IS", "Images in Acquisition" },
   1070     { 0x0020, 0x1003, "IS", "Images in Series" },
   1071     { 0x0020, 0x1004, "IS", "Acquisitions in Study" },
   1072     { 0x0020, 0x1005, "IS", "Images in Study" },
   1073     { 0x0020, 0x1020, "LO", "Reference" },
   1074     { 0x0020, 0x1040, "LO", "Position Reference Indicator" },
   1075     { 0x0020, 0x1041, "DS", "Slice Location" },
   1076     { 0x0020, 0x1070, "IS", "Other Study Numbers" },
   1077     { 0x0020, 0x1200, "IS", "Number of Patient Related Studies" },
   1078     { 0x0020, 0x1202, "IS", "Number of Patient Related Series" },
   1079     { 0x0020, 0x1204, "IS", "Number of Patient Related Images" },
   1080     { 0x0020, 0x1206, "IS", "Number of Study Related Series" },
   1081     { 0x0020, 0x1208, "IS", "Number of Study Related Series" },
   1082     { 0x0020, 0x3100, "LO", "Source Image IDs" },
   1083     { 0x0020, 0x3401, "LO", "Modifying Device ID" },
   1084     { 0x0020, 0x3402, "LO", "Modified Image ID" },
   1085     { 0x0020, 0x3403, "xs", "Modified Image Date" },
   1086     { 0x0020, 0x3404, "LO", "Modifying Device Manufacturer" },
   1087     { 0x0020, 0x3405, "xs", "Modified Image Time" },
   1088     { 0x0020, 0x3406, "xs", "Modified Image Description" },
   1089     { 0x0020, 0x4000, "LT", "Image Comments" },
   1090     { 0x0020, 0x5000, "AT", "Original Image Identification" },
   1091     { 0x0020, 0x5002, "LO", "Original Image Identification Nomenclature" },
   1092     { 0x0021, 0x0000, "xs", "?" },
   1093     { 0x0021, 0x0001, "xs", "?" },
   1094     { 0x0021, 0x0002, "xs", "?" },
   1095     { 0x0021, 0x0003, "xs", "?" },
   1096     { 0x0021, 0x0004, "DS", "VOI Position" },
   1097     { 0x0021, 0x0005, "xs", "?" },
   1098     { 0x0021, 0x0006, "IS", "CSI Matrix Size Original" },
   1099     { 0x0021, 0x0007, "xs", "?" },
   1100     { 0x0021, 0x0008, "DS", "Spatial Grid Shift" },
   1101     { 0x0021, 0x0009, "DS", "Signal Limits Minimum" },
   1102     { 0x0021, 0x0010, "xs", "?" },
   1103     { 0x0021, 0x0011, "xs", "?" },
   1104     { 0x0021, 0x0012, "xs", "?" },
   1105     { 0x0021, 0x0013, "xs", "?" },
   1106     { 0x0021, 0x0014, "xs", "?" },
   1107     { 0x0021, 0x0015, "xs", "?" },
   1108     { 0x0021, 0x0016, "xs", "?" },
   1109     { 0x0021, 0x0017, "DS", "EPI Operation Mode Flag" },
   1110     { 0x0021, 0x0018, "xs", "?" },
   1111     { 0x0021, 0x0019, "xs", "?" },
   1112     { 0x0021, 0x0020, "xs", "?" },
   1113     { 0x0021, 0x0021, "xs", "?" },
   1114     { 0x0021, 0x0022, "xs", "?" },
   1115     { 0x0021, 0x0024, "xs", "?" },
   1116     { 0x0021, 0x0025, "US", "?" },
   1117     { 0x0021, 0x0026, "IS", "Image Pixel Offset" },
   1118     { 0x0021, 0x0030, "xs", "?" },
   1119     { 0x0021, 0x0031, "xs", "?" },
   1120     { 0x0021, 0x0032, "xs", "?" },
   1121     { 0x0021, 0x0034, "xs", "?" },
   1122     { 0x0021, 0x0035, "SS", "Series From Which Prescribed" },
   1123     { 0x0021, 0x0036, "xs", "?" },
   1124     { 0x0021, 0x0037, "SS", "Screen Format" },
   1125     { 0x0021, 0x0039, "DS", "Slab Thickness" },
   1126     { 0x0021, 0x0040, "xs", "?" },
   1127     { 0x0021, 0x0041, "xs", "?" },
   1128     { 0x0021, 0x0042, "xs", "?" },
   1129     { 0x0021, 0x0043, "xs", "?" },
   1130     { 0x0021, 0x0044, "xs", "?" },
   1131     { 0x0021, 0x0045, "xs", "?" },
   1132     { 0x0021, 0x0046, "xs", "?" },
   1133     { 0x0021, 0x0047, "xs", "?" },
   1134     { 0x0021, 0x0048, "xs", "?" },
   1135     { 0x0021, 0x0049, "xs", "?" },
   1136     { 0x0021, 0x004a, "xs", "?" },
   1137     { 0x0021, 0x004e, "US", "?" },
   1138     { 0x0021, 0x004f, "xs", "?" },
   1139     { 0x0021, 0x0050, "xs", "?" },
   1140     { 0x0021, 0x0051, "xs", "?" },
   1141     { 0x0021, 0x0052, "xs", "?" },
   1142     { 0x0021, 0x0053, "xs", "?" },
   1143     { 0x0021, 0x0054, "xs", "?" },
   1144     { 0x0021, 0x0055, "xs", "?" },
   1145     { 0x0021, 0x0056, "xs", "?" },
   1146     { 0x0021, 0x0057, "xs", "?" },
   1147     { 0x0021, 0x0058, "xs", "?" },
   1148     { 0x0021, 0x0059, "xs", "?" },
   1149     { 0x0021, 0x005a, "SL", "Integer Slop" },
   1150     { 0x0021, 0x005b, "DS", "Float Slop" },
   1151     { 0x0021, 0x005c, "DS", "Float Slop" },
   1152     { 0x0021, 0x005d, "DS", "Float Slop" },
   1153     { 0x0021, 0x005e, "DS", "Float Slop" },
   1154     { 0x0021, 0x005f, "DS", "Float Slop" },
   1155     { 0x0021, 0x0060, "xs", "?" },
   1156     { 0x0021, 0x0061, "DS", "Image Normal" },
   1157     { 0x0021, 0x0062, "IS", "Reference Type Code" },
   1158     { 0x0021, 0x0063, "DS", "Image Distance" },
   1159     { 0x0021, 0x0065, "US", "Image Positioning History Mask" },
   1160     { 0x0021, 0x006a, "DS", "Image Row" },
   1161     { 0x0021, 0x006b, "DS", "Image Column" },
   1162     { 0x0021, 0x0070, "xs", "?" },
   1163     { 0x0021, 0x0071, "xs", "?" },
   1164     { 0x0021, 0x0072, "xs", "?" },
   1165     { 0x0021, 0x0073, "DS", "Second Repetition Time" },
   1166     { 0x0021, 0x0075, "DS", "Light Brightness" },
   1167     { 0x0021, 0x0076, "DS", "Light Contrast" },
   1168     { 0x0021, 0x007a, "IS", "Overlay Threshold" },
   1169     { 0x0021, 0x007b, "IS", "Surface Threshold" },
   1170     { 0x0021, 0x007c, "IS", "Grey Scale Threshold" },
   1171     { 0x0021, 0x0080, "xs", "?" },
   1172     { 0x0021, 0x0081, "DS", "Auto Window Level Alpha" },
   1173     { 0x0021, 0x0082, "xs", "?" },
   1174     { 0x0021, 0x0083, "DS", "Auto Window Level Window" },
   1175     { 0x0021, 0x0084, "DS", "Auto Window Level Level" },
   1176     { 0x0021, 0x0090, "xs", "?" },
   1177     { 0x0021, 0x0091, "xs", "?" },
   1178     { 0x0021, 0x0092, "xs", "?" },
   1179     { 0x0021, 0x0093, "xs", "?" },
   1180     { 0x0021, 0x0094, "DS", "EPI Change Value of X Component" },
   1181     { 0x0021, 0x0095, "DS", "EPI Change Value of Y Component" },
   1182     { 0x0021, 0x0096, "DS", "EPI Change Value of Z Component" },
   1183     { 0x0021, 0x00a0, "xs", "?" },
   1184     { 0x0021, 0x00a1, "DS", "?" },
   1185     { 0x0021, 0x00a2, "xs", "?" },
   1186     { 0x0021, 0x00a3, "LT", "?" },
   1187     { 0x0021, 0x00a4, "LT", "?" },
   1188     { 0x0021, 0x00a7, "LT", "?" },
   1189     { 0x0021, 0x00b0, "IS", "?" },
   1190     { 0x0021, 0x00c0, "IS", "?" },
   1191     { 0x0023, 0x0000, "xs", "?" },
   1192     { 0x0023, 0x0001, "SL", "Number Of Series In Study" },
   1193     { 0x0023, 0x0002, "SL", "Number Of Unarchived Series" },
   1194     { 0x0023, 0x0010, "xs", "?" },
   1195     { 0x0023, 0x0020, "xs", "?" },
   1196     { 0x0023, 0x0030, "xs", "?" },
   1197     { 0x0023, 0x0040, "xs", "?" },
   1198     { 0x0023, 0x0050, "xs", "?" },
   1199     { 0x0023, 0x0060, "xs", "?" },
   1200     { 0x0023, 0x0070, "xs", "?" },
   1201     { 0x0023, 0x0074, "SL", "Number Of Updates To Info" },
   1202     { 0x0023, 0x007d, "SS", "Indicates If Study Has Complete Info" },
   1203     { 0x0023, 0x0080, "xs", "?" },
   1204     { 0x0023, 0x0090, "xs", "?" },
   1205     { 0x0023, 0x00ff, "US", "?" },
   1206     { 0x0025, 0x0000, "UL", "Group Length" },
   1207     { 0x0025, 0x0006, "SS", "Last Pulse Sequence Used" },
   1208     { 0x0025, 0x0007, "SL", "Images In Series" },
   1209     { 0x0025, 0x0010, "SS", "Landmark Counter" },
   1210     { 0x0025, 0x0011, "SS", "Number Of Acquisitions" },
   1211     { 0x0025, 0x0014, "SL", "Indicates Number Of Updates To Info" },
   1212     { 0x0025, 0x0017, "SL", "Series Complete Flag" },
   1213     { 0x0025, 0x0018, "SL", "Number Of Images Archived" },
   1214     { 0x0025, 0x0019, "SL", "Last Image Number Used" },
   1215     { 0x0025, 0x001a, "SH", "Primary Receiver Suite And Host" },
   1216     { 0x0027, 0x0000, "US", "?" },
   1217     { 0x0027, 0x0006, "SL", "Image Archive Flag" },
   1218     { 0x0027, 0x0010, "SS", "Scout Type" },
   1219     { 0x0027, 0x0011, "UN", "?" },
   1220     { 0x0027, 0x0012, "IS", "?" },
   1221     { 0x0027, 0x0013, "IS", "?" },
   1222     { 0x0027, 0x0014, "IS", "?" },
   1223     { 0x0027, 0x0015, "IS", "?" },
   1224     { 0x0027, 0x0016, "LT", "?" },
   1225     { 0x0027, 0x001c, "SL", "Vma Mamp" },
   1226     { 0x0027, 0x001d, "SS", "Vma Phase" },
   1227     { 0x0027, 0x001e, "SL", "Vma Mod" },
   1228     { 0x0027, 0x001f, "SL", "Vma Clip" },
   1229     { 0x0027, 0x0020, "SS", "Smart Scan On Off Flag" },
   1230     { 0x0027, 0x0030, "SH", "Foreign Image Revision" },
   1231     { 0x0027, 0x0031, "SS", "Imaging Mode" },
   1232     { 0x0027, 0x0032, "SS", "Pulse Sequence" },
   1233     { 0x0027, 0x0033, "SL", "Imaging Options" },
   1234     { 0x0027, 0x0035, "SS", "Plane Type" },
   1235     { 0x0027, 0x0036, "SL", "Oblique Plane" },
   1236     { 0x0027, 0x0040, "SH", "RAS Letter Of Image Location" },
   1237     { 0x0027, 0x0041, "FL", "Image Location" },
   1238     { 0x0027, 0x0042, "FL", "Center R Coord Of Plane Image" },
   1239     { 0x0027, 0x0043, "FL", "Center A Coord Of Plane Image" },
   1240     { 0x0027, 0x0044, "FL", "Center S Coord Of Plane Image" },
   1241     { 0x0027, 0x0045, "FL", "Normal R Coord" },
   1242     { 0x0027, 0x0046, "FL", "Normal A Coord" },
   1243     { 0x0027, 0x0047, "FL", "Normal S Coord" },
   1244     { 0x0027, 0x0048, "FL", "R Coord Of Top Right Corner" },
   1245     { 0x0027, 0x0049, "FL", "A Coord Of Top Right Corner" },
   1246     { 0x0027, 0x004a, "FL", "S Coord Of Top Right Corner" },
   1247     { 0x0027, 0x004b, "FL", "R Coord Of Bottom Right Corner" },
   1248     { 0x0027, 0x004c, "FL", "A Coord Of Bottom Right Corner" },
   1249     { 0x0027, 0x004d, "FL", "S Coord Of Bottom Right Corner" },
   1250     { 0x0027, 0x0050, "FL", "Table Start Location" },
   1251     { 0x0027, 0x0051, "FL", "Table End Location" },
   1252     { 0x0027, 0x0052, "SH", "RAS Letter For Side Of Image" },
   1253     { 0x0027, 0x0053, "SH", "RAS Letter For Anterior Posterior" },
   1254     { 0x0027, 0x0054, "SH", "RAS Letter For Scout Start Loc" },
   1255     { 0x0027, 0x0055, "SH", "RAS Letter For Scout End Loc" },
   1256     { 0x0027, 0x0060, "FL", "Image Dimension X" },
   1257     { 0x0027, 0x0061, "FL", "Image Dimension Y" },
   1258     { 0x0027, 0x0062, "FL", "Number Of Excitations" },
   1259     { 0x0028, 0x0000, "UL", "Image Presentation Group Length" },
   1260     { 0x0028, 0x0002, "US", "Samples per Pixel" },
   1261     { 0x0028, 0x0004, "CS", "Photometric Interpretation" },
   1262     { 0x0028, 0x0005, "US", "Image Dimensions" },
   1263     { 0x0028, 0x0006, "US", "Planar Configuration" },
   1264     { 0x0028, 0x0008, "IS", "Number of Frames" },
   1265     { 0x0028, 0x0009, "AT", "Frame Increment Pointer" },
   1266     { 0x0028, 0x0010, "US", "Rows" },
   1267     { 0x0028, 0x0011, "US", "Columns" },
   1268     { 0x0028, 0x0012, "US", "Planes" },
   1269     { 0x0028, 0x0014, "US", "Ultrasound Color Data Present" },
   1270     { 0x0028, 0x0030, "DS", "Pixel Spacing" },
   1271     { 0x0028, 0x0031, "DS", "Zoom Factor" },
   1272     { 0x0028, 0x0032, "DS", "Zoom Center" },
   1273     { 0x0028, 0x0034, "IS", "Pixel Aspect Ratio" },
   1274     { 0x0028, 0x0040, "LO", "Image Format" },
   1275     { 0x0028, 0x0050, "LT", "Manipulated Image" },
   1276     { 0x0028, 0x0051, "CS", "Corrected Image" },
   1277     { 0x0028, 0x005f, "LO", "Compression Recognition Code" },
   1278     { 0x0028, 0x0060, "LO", "Compression Code" },
   1279     { 0x0028, 0x0061, "SH", "Compression Originator" },
   1280     { 0x0028, 0x0062, "SH", "Compression Label" },
   1281     { 0x0028, 0x0063, "SH", "Compression Description" },
   1282     { 0x0028, 0x0065, "LO", "Compression Sequence" },
   1283     { 0x0028, 0x0066, "AT", "Compression Step Pointers" },
   1284     { 0x0028, 0x0068, "US", "Repeat Interval" },
   1285     { 0x0028, 0x0069, "US", "Bits Grouped" },
   1286     { 0x0028, 0x0070, "US", "Perimeter Table" },
   1287     { 0x0028, 0x0071, "xs", "Perimeter Value" },
   1288     { 0x0028, 0x0080, "US", "Predictor Rows" },
   1289     { 0x0028, 0x0081, "US", "Predictor Columns" },
   1290     { 0x0028, 0x0082, "US", "Predictor Constants" },
   1291     { 0x0028, 0x0090, "LO", "Blocked Pixels" },
   1292     { 0x0028, 0x0091, "US", "Block Rows" },
   1293     { 0x0028, 0x0092, "US", "Block Columns" },
   1294     { 0x0028, 0x0093, "US", "Row Overlap" },
   1295     { 0x0028, 0x0094, "US", "Column Overlap" },
   1296     { 0x0028, 0x0100, "US", "Bits Allocated" },
   1297     { 0x0028, 0x0101, "US", "Bits Stored" },
   1298     { 0x0028, 0x0102, "US", "High Bit" },
   1299     { 0x0028, 0x0103, "US", "Pixel Representation" },
   1300     { 0x0028, 0x0104, "xs", "Smallest Valid Pixel Value" },
   1301     { 0x0028, 0x0105, "xs", "Largest Valid Pixel Value" },
   1302     { 0x0028, 0x0106, "xs", "Smallest Image Pixel Value" },
   1303     { 0x0028, 0x0107, "xs", "Largest Image Pixel Value" },
   1304     { 0x0028, 0x0108, "xs", "Smallest Pixel Value in Series" },
   1305     { 0x0028, 0x0109, "xs", "Largest Pixel Value in Series" },
   1306     { 0x0028, 0x0110, "xs", "Smallest Pixel Value in Plane" },
   1307     { 0x0028, 0x0111, "xs", "Largest Pixel Value in Plane" },
   1308     { 0x0028, 0x0120, "xs", "Pixel Padding Value" },
   1309     { 0x0028, 0x0200, "xs", "Image Location" },
   1310     { 0x0028, 0x0300, "CS", "Quality Control Image" },
   1311     { 0x0028, 0x0301, "CS", "Burned In Annotation" },
   1312     { 0x0028, 0x0400, "xs", "?" },
   1313     { 0x0028, 0x0401, "xs", "?" },
   1314     { 0x0028, 0x0402, "xs", "?" },
   1315     { 0x0028, 0x0403, "xs", "?" },
   1316     { 0x0028, 0x0404, "AT", "Details of Coefficients" },
   1317     { 0x0028, 0x0700, "LO", "DCT Label" },
   1318     { 0x0028, 0x0701, "LO", "Data Block Description" },
   1319     { 0x0028, 0x0702, "AT", "Data Block" },
   1320     { 0x0028, 0x0710, "US", "Normalization Factor Format" },
   1321     { 0x0028, 0x0720, "US", "Zonal Map Number Format" },
   1322     { 0x0028, 0x0721, "AT", "Zonal Map Location" },
   1323     { 0x0028, 0x0722, "US", "Zonal Map Format" },
   1324     { 0x0028, 0x0730, "US", "Adaptive Map Format" },
   1325     { 0x0028, 0x0740, "US", "Code Number Format" },
   1326     { 0x0028, 0x0800, "LO", "Code Label" },
   1327     { 0x0028, 0x0802, "US", "Number of Tables" },
   1328     { 0x0028, 0x0803, "AT", "Code Table Location" },
   1329     { 0x0028, 0x0804, "US", "Bits For Code Word" },
   1330     { 0x0028, 0x0808, "AT", "Image Data Location" },
   1331     { 0x0028, 0x1040, "CS", "Pixel Intensity Relationship" },
   1332     { 0x0028, 0x1041, "SS", "Pixel Intensity Relationship Sign" },
   1333     { 0x0028, 0x1050, "DS", "Window Center" },
   1334     { 0x0028, 0x1051, "DS", "Window Width" },
   1335     { 0x0028, 0x1052, "DS", "Rescale Intercept" },
   1336     { 0x0028, 0x1053, "DS", "Rescale Slope" },
   1337     { 0x0028, 0x1054, "LO", "Rescale Type" },
   1338     { 0x0028, 0x1055, "LO", "Window Center & Width Explanation" },
   1339     { 0x0028, 0x1080, "LO", "Gray Scale" },
   1340     { 0x0028, 0x1090, "CS", "Recommended Viewing Mode" },
   1341     { 0x0028, 0x1100, "xs", "Gray Lookup Table Descriptor" },
   1342     { 0x0028, 0x1101, "xs", "Red Palette Color Lookup Table Descriptor" },
   1343     { 0x0028, 0x1102, "xs", "Green Palette Color Lookup Table Descriptor" },
   1344     { 0x0028, 0x1103, "xs", "Blue Palette Color Lookup Table Descriptor" },
   1345     { 0x0028, 0x1111, "OW", "Large Red Palette Color Lookup Table Descriptor" },
   1346     { 0x0028, 0x1112, "OW", "Large Green Palette Color Lookup Table Descriptor" },
   1347     { 0x0028, 0x1113, "OW", "Large Blue Palette Color Lookup Table Descriptor" },
   1348     { 0x0028, 0x1199, "UI", "Palette Color Lookup Table UID" },
   1349     { 0x0028, 0x1200, "xs", "Gray Lookup Table Data" },
   1350     { 0x0028, 0x1201, "OW", "Red Palette Color Lookup Table Data" },
   1351     { 0x0028, 0x1202, "OW", "Green Palette Color Lookup Table Data" },
   1352     { 0x0028, 0x1203, "OW", "Blue Palette Color Lookup Table Data" },
   1353     { 0x0028, 0x1211, "OW", "Large Red Palette Color Lookup Table Data" },
   1354     { 0x0028, 0x1212, "OW", "Large Green Palette Color Lookup Table Data" },
   1355     { 0x0028, 0x1213, "OW", "Large Blue Palette Color Lookup Table Data" },
   1356     { 0x0028, 0x1214, "UI", "Large Palette Color Lookup Table UID" },
   1357     { 0x0028, 0x1221, "OW", "Segmented Red Palette Color Lookup Table Data" },
   1358     { 0x0028, 0x1222, "OW", "Segmented Green Palette Color Lookup Table Data" },
   1359     { 0x0028, 0x1223, "OW", "Segmented Blue Palette Color Lookup Table Data" },
   1360     { 0x0028, 0x1300, "CS", "Implant Present" },
   1361     { 0x0028, 0x2110, "CS", "Lossy Image Compression" },
   1362     { 0x0028, 0x2112, "DS", "Lossy Image Compression Ratio" },
   1363     { 0x0028, 0x3000, "SQ", "Modality LUT Sequence" },
   1364     { 0x0028, 0x3002, "US", "LUT Descriptor" },
   1365     { 0x0028, 0x3003, "LO", "LUT Explanation" },
   1366     { 0x0028, 0x3004, "LO", "Modality LUT Type" },
   1367     { 0x0028, 0x3006, "US", "LUT Data" },
   1368     { 0x0028, 0x3010, "xs", "VOI LUT Sequence" },
   1369     { 0x0028, 0x4000, "LT", "Image Presentation Comments" },
   1370     { 0x0028, 0x5000, "SQ", "Biplane Acquisition Sequence" },
   1371     { 0x0028, 0x6010, "US", "Representative Frame Number" },
   1372     { 0x0028, 0x6020, "US", "Frame Numbers of Interest" },
   1373     { 0x0028, 0x6022, "LO", "Frame of Interest Description" },
   1374     { 0x0028, 0x6030, "US", "Mask Pointer" },
   1375     { 0x0028, 0x6040, "US", "R Wave Pointer" },
   1376     { 0x0028, 0x6100, "SQ", "Mask Subtraction Sequence" },
   1377     { 0x0028, 0x6101, "CS", "Mask Operation" },
   1378     { 0x0028, 0x6102, "US", "Applicable Frame Range" },
   1379     { 0x0028, 0x6110, "US", "Mask Frame Numbers" },
   1380     { 0x0028, 0x6112, "US", "Contrast Frame Averaging" },
   1381     { 0x0028, 0x6114, "FL", "Mask Sub-Pixel Shift" },
   1382     { 0x0028, 0x6120, "SS", "TID Offset" },
   1383     { 0x0028, 0x6190, "ST", "Mask Operation Explanation" },
   1384     { 0x0029, 0x0000, "xs", "?" },
   1385     { 0x0029, 0x0001, "xs", "?" },
   1386     { 0x0029, 0x0002, "xs", "?" },
   1387     { 0x0029, 0x0003, "xs", "?" },
   1388     { 0x0029, 0x0004, "xs", "?" },
   1389     { 0x0029, 0x0005, "xs", "?" },
   1390     { 0x0029, 0x0006, "xs", "?" },
   1391     { 0x0029, 0x0007, "SL", "Lower Range Of Pixels" },
   1392     { 0x0029, 0x0008, "SH", "Lower Range Of Pixels" },
   1393     { 0x0029, 0x0009, "SH", "Lower Range Of Pixels" },
   1394     { 0x0029, 0x000a, "SS", "Lower Range Of Pixels" },
   1395     { 0x0029, 0x000c, "xs", "?" },
   1396     { 0x0029, 0x000e, "CS", "Zoom Enable Status" },
   1397     { 0x0029, 0x000f, "CS", "Zoom Select Status" },
   1398     { 0x0029, 0x0010, "xs", "?" },
   1399     { 0x0029, 0x0011, "xs", "?" },
   1400     { 0x0029, 0x0013, "LT", "?" },
   1401     { 0x0029, 0x0015, "xs", "?" },
   1402     { 0x0029, 0x0016, "SL", "Lower Range Of Pixels" },
   1403     { 0x0029, 0x0017, "SL", "Lower Range Of Pixels" },
   1404     { 0x0029, 0x0018, "SL", "Upper Range Of Pixels" },
   1405     { 0x0029, 0x001a, "SL", "Length Of Total Info In Bytes" },
   1406     { 0x0029, 0x001e, "xs", "?" },
   1407     { 0x0029, 0x001f, "xs", "?" },
   1408     { 0x0029, 0x0020, "xs", "?" },
   1409     { 0x0029, 0x0022, "IS", "Pixel Quality Value" },
   1410     { 0x0029, 0x0025, "LT", "Processed Pixel Data Quality" },
   1411     { 0x0029, 0x0026, "SS", "Version Of Info Structure" },
   1412     { 0x0029, 0x0030, "xs", "?" },
   1413     { 0x0029, 0x0031, "xs", "?" },
   1414     { 0x0029, 0x0032, "xs", "?" },
   1415     { 0x0029, 0x0033, "xs", "?" },
   1416     { 0x0029, 0x0034, "xs", "?" },
   1417     { 0x0029, 0x0035, "SL", "Advantage Comp Underflow" },
   1418     { 0x0029, 0x0038, "US", "?" },
   1419     { 0x0029, 0x0040, "xs", "?" },
   1420     { 0x0029, 0x0041, "DS", "Magnifying Glass Rectangle" },
   1421     { 0x0029, 0x0043, "DS", "Magnifying Glass Factor" },
   1422     { 0x0029, 0x0044, "US", "Magnifying Glass Function" },
   1423     { 0x0029, 0x004e, "CS", "Magnifying Glass Enable Status" },
   1424     { 0x0029, 0x004f, "CS", "Magnifying Glass Select Status" },
   1425     { 0x0029, 0x0050, "xs", "?" },
   1426     { 0x0029, 0x0051, "LT", "Exposure Code" },
   1427     { 0x0029, 0x0052, "LT", "Sort Code" },
   1428     { 0x0029, 0x0053, "LT", "?" },
   1429     { 0x0029, 0x0060, "xs", "?" },
   1430     { 0x0029, 0x0061, "xs", "?" },
   1431     { 0x0029, 0x0067, "LT", "?" },
   1432     { 0x0029, 0x0070, "xs", "?" },
   1433     { 0x0029, 0x0071, "xs", "?" },
   1434     { 0x0029, 0x0072, "xs", "?" },
   1435     { 0x0029, 0x0077, "CS", "Window Select Status" },
   1436     { 0x0029, 0x0078, "LT", "ECG Display Printing ID" },
   1437     { 0x0029, 0x0079, "CS", "ECG Display Printing" },
   1438     { 0x0029, 0x007e, "CS", "ECG Display Printing Enable Status" },
   1439     { 0x0029, 0x007f, "CS", "ECG Display Printing Select Status" },
   1440     { 0x0029, 0x0080, "xs", "?" },
   1441     { 0x0029, 0x0081, "xs", "?" },
   1442     { 0x0029, 0x0082, "IS", "View Zoom" },
   1443     { 0x0029, 0x0083, "IS", "View Transform" },
   1444     { 0x0029, 0x008e, "CS", "Physiological Display Enable Status" },
   1445     { 0x0029, 0x008f, "CS", "Physiological Display Select Status" },
   1446     { 0x0029, 0x0090, "IS", "?" },
   1447     { 0x0029, 0x0099, "LT", "Shutter Type" },
   1448     { 0x0029, 0x00a0, "US", "Rows of Rectangular Shutter" },
   1449     { 0x0029, 0x00a1, "US", "Columns of Rectangular Shutter" },
   1450     { 0x0029, 0x00a2, "US", "Origin of Rectangular Shutter" },
   1451     { 0x0029, 0x00b0, "US", "Radius of Circular Shutter" },
   1452     { 0x0029, 0x00b2, "US", "Origin of Circular Shutter" },
   1453     { 0x0029, 0x00c0, "LT", "Functional Shutter ID" },
   1454     { 0x0029, 0x00c1, "xs", "?" },
   1455     { 0x0029, 0x00c3, "IS", "Scan Resolution" },
   1456     { 0x0029, 0x00c4, "IS", "Field of View" },
   1457     { 0x0029, 0x00c5, "LT", "Field Of Shutter Rectangle" },
   1458     { 0x0029, 0x00ce, "CS", "Shutter Enable Status" },
   1459     { 0x0029, 0x00cf, "CS", "Shutter Select Status" },
   1460     { 0x0029, 0x00d0, "IS", "?" },
   1461     { 0x0029, 0x00d1, "IS", "?" },
   1462     { 0x0029, 0x00d5, "LT", "Slice Thickness" },
   1463     { 0x0031, 0x0010, "LT", "Request UID" },
   1464     { 0x0031, 0x0012, "LT", "Examination Reason" },
   1465     { 0x0031, 0x0030, "DA", "Requested Date" },
   1466     { 0x0031, 0x0032, "TM", "Worklist Request Start Time" },
   1467     { 0x0031, 0x0033, "TM", "Worklist Request End Time" },
   1468     { 0x0031, 0x0045, "LT", "Requesting Physician" },
   1469     { 0x0031, 0x004a, "TM", "Requested Time" },
   1470     { 0x0031, 0x0050, "LT", "Requested Physician" },
   1471     { 0x0031, 0x0080, "LT", "Requested Location" },
   1472     { 0x0032, 0x0000, "UL", "Study Group Length" },
   1473     { 0x0032, 0x000a, "CS", "Study Status ID" },
   1474     { 0x0032, 0x000c, "CS", "Study Priority ID" },
   1475     { 0x0032, 0x0012, "LO", "Study ID Issuer" },
   1476     { 0x0032, 0x0032, "DA", "Study Verified Date" },
   1477     { 0x0032, 0x0033, "TM", "Study Verified Time" },
   1478     { 0x0032, 0x0034, "DA", "Study Read Date" },
   1479     { 0x0032, 0x0035, "TM", "Study Read Time" },
   1480     { 0x0032, 0x1000, "DA", "Scheduled Study Start Date" },
   1481     { 0x0032, 0x1001, "TM", "Scheduled Study Start Time" },
   1482     { 0x0032, 0x1010, "DA", "Scheduled Study Stop Date" },
   1483     { 0x0032, 0x1011, "TM", "Scheduled Study Stop Time" },
   1484     { 0x0032, 0x1020, "LO", "Scheduled Study Location" },
   1485     { 0x0032, 0x1021, "AE", "Scheduled Study Location AE Title(s)" },
   1486     { 0x0032, 0x1030, "LO", "Reason for Study" },
   1487     { 0x0032, 0x1032, "PN", "Requesting Physician" },
   1488     { 0x0032, 0x1033, "LO", "Requesting Service" },
   1489     { 0x0032, 0x1040, "DA", "Study Arrival Date" },
   1490     { 0x0032, 0x1041, "TM", "Study Arrival Time" },
   1491     { 0x0032, 0x1050, "DA", "Study Completion Date" },
   1492     { 0x0032, 0x1051, "TM", "Study Completion Time" },
   1493     { 0x0032, 0x1055, "CS", "Study Component Status ID" },
   1494     { 0x0032, 0x1060, "LO", "Requested Procedure Description" },
   1495     { 0x0032, 0x1064, "SQ", "Requested Procedure Code Sequence" },
   1496     { 0x0032, 0x1070, "LO", "Requested Contrast Agent" },
   1497     { 0x0032, 0x4000, "LT", "Study Comments" },
   1498     { 0x0033, 0x0001, "UN", "?" },
   1499     { 0x0033, 0x0002, "UN", "?" },
   1500     { 0x0033, 0x0005, "UN", "?" },
   1501     { 0x0033, 0x0006, "UN", "?" },
   1502     { 0x0033, 0x0010, "LT", "Patient Study UID" },
   1503     { 0x0037, 0x0010, "LO", "ReferringDepartment" },
   1504     { 0x0037, 0x0020, "US", "ScreenNumber" },
   1505     { 0x0037, 0x0040, "SH", "LeftOrientation" },
   1506     { 0x0037, 0x0042, "SH", "RightOrientation" },
   1507     { 0x0037, 0x0050, "CS", "Inversion" },
   1508     { 0x0037, 0x0060, "US", "DSA" },
   1509     { 0x0038, 0x0000, "UL", "Visit Group Length" },
   1510     { 0x0038, 0x0004, "SQ", "Referenced Patient Alias Sequence" },
   1511     { 0x0038, 0x0008, "CS", "Visit Status ID" },
   1512     { 0x0038, 0x0010, "LO", "Admission ID" },
   1513     { 0x0038, 0x0011, "LO", "Issuer of Admission ID" },
   1514     { 0x0038, 0x0016, "LO", "Route of Admissions" },
   1515     { 0x0038, 0x001a, "DA", "Scheduled Admission Date" },
   1516     { 0x0038, 0x001b, "TM", "Scheduled Admission Time" },
   1517     { 0x0038, 0x001c, "DA", "Scheduled Discharge Date" },
   1518     { 0x0038, 0x001d, "TM", "Scheduled Discharge Time" },
   1519     { 0x0038, 0x001e, "LO", "Scheduled Patient Institution Residence" },
   1520     { 0x0038, 0x0020, "DA", "Admitting Date" },
   1521     { 0x0038, 0x0021, "TM", "Admitting Time" },
   1522     { 0x0038, 0x0030, "DA", "Discharge Date" },
   1523     { 0x0038, 0x0032, "TM", "Discharge Time" },
   1524     { 0x0038, 0x0040, "LO", "Discharge Diagnosis Description" },
   1525     { 0x0038, 0x0044, "SQ", "Discharge Diagnosis Code Sequence" },
   1526     { 0x0038, 0x0050, "LO", "Special Needs" },
   1527     { 0x0038, 0x0300, "LO", "Current Patient Location" },
   1528     { 0x0038, 0x0400, "LO", "Patient's Institution Residence" },
   1529     { 0x0038, 0x0500, "LO", "Patient State" },
   1530     { 0x0038, 0x4000, "LT", "Visit Comments" },
   1531     { 0x0039, 0x0080, "IS", "Private Entity Number" },
   1532     { 0x0039, 0x0085, "DA", "Private Entity Date" },
   1533     { 0x0039, 0x0090, "TM", "Private Entity Time" },
   1534     { 0x0039, 0x0095, "LO", "Private Entity Launch Command" },
   1535     { 0x0039, 0x00aa, "CS", "Private Entity Type" },
   1536     { 0x003a, 0x0002, "SQ", "Waveform Sequence" },
   1537     { 0x003a, 0x0005, "US", "Waveform Number of Channels" },
   1538     { 0x003a, 0x0010, "UL", "Waveform Number of Samples" },
   1539     { 0x003a, 0x001a, "DS", "Sampling Frequency" },
   1540     { 0x003a, 0x0020, "SH", "Group Label" },
   1541     { 0x003a, 0x0103, "CS", "Waveform Sample Value Representation" },
   1542     { 0x003a, 0x0122, "OB", "Waveform Padding Value" },
   1543     { 0x003a, 0x0200, "SQ", "Channel Definition" },
   1544     { 0x003a, 0x0202, "IS", "Waveform Channel Number" },
   1545     { 0x003a, 0x0203, "SH", "Channel Label" },
   1546     { 0x003a, 0x0205, "CS", "Channel Status" },
   1547     { 0x003a, 0x0208, "SQ", "Channel Source" },
   1548     { 0x003a, 0x0209, "SQ", "Channel Source Modifiers" },
   1549     { 0x003a, 0x020a, "SQ", "Differential Channel Source" },
   1550     { 0x003a, 0x020b, "SQ", "Differential Channel Source Modifiers" },
   1551     { 0x003a, 0x0210, "DS", "Channel Sensitivity" },
   1552     { 0x003a, 0x0211, "SQ", "Channel Sensitivity Units" },
   1553     { 0x003a, 0x0212, "DS", "Channel Sensitivity Correction Factor" },
   1554     { 0x003a, 0x0213, "DS", "Channel Baseline" },
   1555     { 0x003a, 0x0214, "DS", "Channel Time Skew" },
   1556     { 0x003a, 0x0215, "DS", "Channel Sample Skew" },
   1557     { 0x003a, 0x0216, "OB", "Channel Minimum Value" },
   1558     { 0x003a, 0x0217, "OB", "Channel Maximum Value" },
   1559     { 0x003a, 0x0218, "DS", "Channel Offset" },
   1560     { 0x003a, 0x021a, "US", "Bits Per Sample" },
   1561     { 0x003a, 0x0220, "DS", "Filter Low Frequency" },
   1562     { 0x003a, 0x0221, "DS", "Filter High Frequency" },
   1563     { 0x003a, 0x0222, "DS", "Notch Filter Frequency" },
   1564     { 0x003a, 0x0223, "DS", "Notch Filter Bandwidth" },
   1565     { 0x003a, 0x1000, "OB", "Waveform Data" },
   1566     { 0x0040, 0x0001, "AE", "Scheduled Station AE Title" },
   1567     { 0x0040, 0x0002, "DA", "Scheduled Procedure Step Start Date" },
   1568     { 0x0040, 0x0003, "TM", "Scheduled Procedure Step Start Time" },
   1569     { 0x0040, 0x0004, "DA", "Scheduled Procedure Step End Date" },
   1570     { 0x0040, 0x0005, "TM", "Scheduled Procedure Step End Time" },
   1571     { 0x0040, 0x0006, "PN", "Scheduled Performing Physician Name" },
   1572     { 0x0040, 0x0007, "LO", "Scheduled Procedure Step Description" },
   1573     { 0x0040, 0x0008, "SQ", "Scheduled Action Item Code Sequence" },
   1574     { 0x0040, 0x0009, "SH", "Scheduled Procedure Step ID" },
   1575     { 0x0040, 0x0010, "SH", "Scheduled Station Name" },
   1576     { 0x0040, 0x0011, "SH", "Scheduled Procedure Step Location" },
   1577     { 0x0040, 0x0012, "LO", "Pre-Medication" },
   1578     { 0x0040, 0x0020, "CS", "Scheduled Procedure Step Status" },
   1579     { 0x0040, 0x0100, "SQ", "Scheduled Procedure Step Sequence" },
   1580     { 0x0040, 0x0302, "US", "Entrance Dose" },
   1581     { 0x0040, 0x0303, "US", "Exposed Area" },
   1582     { 0x0040, 0x0306, "DS", "Distance Source to Entrance" },
   1583     { 0x0040, 0x0307, "DS", "Distance Source to Support" },
   1584     { 0x0040, 0x0310, "ST", "Comments On Radiation Dose" },
   1585     { 0x0040, 0x0312, "DS", "X-Ray Output" },
   1586     { 0x0040, 0x0314, "DS", "Half Value Layer" },
   1587     { 0x0040, 0x0316, "DS", "Organ Dose" },
   1588     { 0x0040, 0x0318, "CS", "Organ Exposed" },
   1589     { 0x0040, 0x0400, "LT", "Comments On Scheduled Procedure Step" },
   1590     { 0x0040, 0x050a, "LO", "Specimen Accession Number" },
   1591     { 0x0040, 0x0550, "SQ", "Specimen Sequence" },
   1592     { 0x0040, 0x0551, "LO", "Specimen Identifier" },
   1593     { 0x0040, 0x0552, "SQ", "Specimen Description Sequence" },
   1594     { 0x0040, 0x0553, "ST", "Specimen Description" },
   1595     { 0x0040, 0x0555, "SQ", "Acquisition Context Sequence" },
   1596     { 0x0040, 0x0556, "ST", "Acquisition Context Description" },
   1597     { 0x0040, 0x059a, "SQ", "Specimen Type Code Sequence" },
   1598     { 0x0040, 0x06fa, "LO", "Slide Identifier" },
   1599     { 0x0040, 0x071a, "SQ", "Image Center Point Coordinates Sequence" },
   1600     { 0x0040, 0x072a, "DS", "X Offset In Slide Coordinate System" },
   1601     { 0x0040, 0x073a, "DS", "Y Offset In Slide Coordinate System" },
   1602     { 0x0040, 0x074a, "DS", "Z Offset In Slide Coordinate System" },
   1603     { 0x0040, 0x08d8, "SQ", "Pixel Spacing Sequence" },
   1604     { 0x0040, 0x08da, "SQ", "Coordinate System Axis Code Sequence" },
   1605     { 0x0040, 0x08ea, "SQ", "Measurement Units Code Sequence" },
   1606     { 0x0040, 0x09f8, "SQ", "Vital Stain Code Sequence" },
   1607     { 0x0040, 0x1001, "SH", "Requested Procedure ID" },
   1608     { 0x0040, 0x1002, "LO", "Reason For Requested Procedure" },
   1609     { 0x0040, 0x1003, "SH", "Requested Procedure Priority" },
   1610     { 0x0040, 0x1004, "LO", "Patient Transport Arrangements" },
   1611     { 0x0040, 0x1005, "LO", "Requested Procedure Location" },
   1612     { 0x0040, 0x1006, "SH", "Placer Order Number of Procedure" },
   1613     { 0x0040, 0x1007, "SH", "Filler Order Number of Procedure" },
   1614     { 0x0040, 0x1008, "LO", "Confidentiality Code" },
   1615     { 0x0040, 0x1009, "SH", "Reporting Priority" },
   1616     { 0x0040, 0x1010, "PN", "Names of Intended Recipients of Results" },
   1617     { 0x0040, 0x1400, "LT", "Requested Procedure Comments" },
   1618     { 0x0040, 0x2001, "LO", "Reason For Imaging Service Request" },
   1619     { 0x0040, 0x2004, "DA", "Issue Date of Imaging Service Request" },
   1620     { 0x0040, 0x2005, "TM", "Issue Time of Imaging Service Request" },
   1621     { 0x0040, 0x2006, "SH", "Placer Order Number of Imaging Service Request" },
   1622     { 0x0040, 0x2007, "SH", "Filler Order Number of Imaging Service Request" },
   1623     { 0x0040, 0x2008, "PN", "Order Entered By" },
   1624     { 0x0040, 0x2009, "SH", "Order Enterer Location" },
   1625     { 0x0040, 0x2010, "SH", "Order Callback Phone Number" },
   1626     { 0x0040, 0x2400, "LT", "Imaging Service Request Comments" },
   1627     { 0x0040, 0x3001, "LO", "Confidentiality Constraint On Patient Data" },
   1628     { 0x0040, 0xa007, "CS", "Findings Flag" },
   1629     { 0x0040, 0xa020, "SQ", "Findings Sequence" },
   1630     { 0x0040, 0xa021, "UI", "Findings Group UID" },
   1631     { 0x0040, 0xa022, "UI", "Referenced Findings Group UID" },
   1632     { 0x0040, 0xa023, "DA", "Findings Group Recording Date" },
   1633     { 0x0040, 0xa024, "TM", "Findings Group Recording Time" },
   1634     { 0x0040, 0xa026, "SQ", "Findings Source Category Code Sequence" },
   1635     { 0x0040, 0xa027, "LO", "Documenting Organization" },
   1636     { 0x0040, 0xa028, "SQ", "Documenting Organization Identifier Code Sequence" },
   1637     { 0x0040, 0xa032, "LO", "History Reliability Qualifier Description" },
   1638     { 0x0040, 0xa043, "SQ", "Concept Name Code Sequence" },
   1639     { 0x0040, 0xa047, "LO", "Measurement Precision Description" },
   1640     { 0x0040, 0xa057, "CS", "Urgency or Priority Alerts" },
   1641     { 0x0040, 0xa060, "LO", "Sequencing Indicator" },
   1642     { 0x0040, 0xa066, "SQ", "Document Identifier Code Sequence" },
   1643     { 0x0040, 0xa067, "PN", "Document Author" },
   1644     { 0x0040, 0xa068, "SQ", "Document Author Identifier Code Sequence" },
   1645     { 0x0040, 0xa070, "SQ", "Identifier Code Sequence" },
   1646     { 0x0040, 0xa073, "LO", "Object String Identifier" },
   1647     { 0x0040, 0xa074, "OB", "Object Binary Identifier" },
   1648     { 0x0040, 0xa075, "PN", "Documenting Observer" },
   1649     { 0x0040, 0xa076, "SQ", "Documenting Observer Identifier Code Sequence" },
   1650     { 0x0040, 0xa078, "SQ", "Observation Subject Identifier Code Sequence" },
   1651     { 0x0040, 0xa080, "SQ", "Person Identifier Code Sequence" },
   1652     { 0x0040, 0xa085, "SQ", "Procedure Identifier Code Sequence" },
   1653     { 0x0040, 0xa088, "LO", "Object Directory String Identifier" },
   1654     { 0x0040, 0xa089, "OB", "Object Directory Binary Identifier" },
   1655     { 0x0040, 0xa090, "CS", "History Reliability Qualifier" },
   1656     { 0x0040, 0xa0a0, "CS", "Referenced Type of Data" },
   1657     { 0x0040, 0xa0b0, "US", "Referenced Waveform Channels" },
   1658     { 0x0040, 0xa110, "DA", "Date of Document or Verbal Transaction" },
   1659     { 0x0040, 0xa112, "TM", "Time of Document Creation or Verbal Transaction" },
   1660     { 0x0040, 0xa121, "DA", "Date" },
   1661     { 0x0040, 0xa122, "TM", "Time" },
   1662     { 0x0040, 0xa123, "PN", "Person Name" },
   1663     { 0x0040, 0xa124, "SQ", "Referenced Person Sequence" },
   1664     { 0x0040, 0xa125, "CS", "Report Status ID" },
   1665     { 0x0040, 0xa130, "CS", "Temporal Range Type" },
   1666     { 0x0040, 0xa132, "UL", "Referenced Sample Offsets" },
   1667     { 0x0040, 0xa136, "US", "Referenced Frame Numbers" },
   1668     { 0x0040, 0xa138, "DS", "Referenced Time Offsets" },
   1669     { 0x0040, 0xa13a, "DT", "Referenced Datetime" },
   1670     { 0x0040, 0xa160, "UT", "Text Value" },
   1671     { 0x0040, 0xa167, "SQ", "Observation Category Code Sequence" },
   1672     { 0x0040, 0xa168, "SQ", "Concept Code Sequence" },
   1673     { 0x0040, 0xa16a, "ST", "Bibliographic Citation" },
   1674     { 0x0040, 0xa170, "CS", "Observation Class" },
   1675     { 0x0040, 0xa171, "UI", "Observation UID" },
   1676     { 0x0040, 0xa172, "UI", "Referenced Observation UID" },
   1677     { 0x0040, 0xa173, "CS", "Referenced Observation Class" },
   1678     { 0x0040, 0xa174, "CS", "Referenced Object Observation Class" },
   1679     { 0x0040, 0xa180, "US", "Annotation Group Number" },
   1680     { 0x0040, 0xa192, "DA", "Observation Date" },
   1681     { 0x0040, 0xa193, "TM", "Observation Time" },
   1682     { 0x0040, 0xa194, "CS", "Measurement Automation" },
   1683     { 0x0040, 0xa195, "SQ", "Concept Name Code Sequence Modifier" },
   1684     { 0x0040, 0xa224, "ST", "Identification Description" },
   1685     { 0x0040, 0xa290, "CS", "Coordinates Set Geometric Type" },
   1686     { 0x0040, 0xa296, "SQ", "Algorithm Code Sequence" },
   1687     { 0x0040, 0xa297, "ST", "Algorithm Description" },
   1688     { 0x0040, 0xa29a, "SL", "Pixel Coordinates Set" },
   1689     { 0x0040, 0xa300, "SQ", "Measured Value Sequence" },
   1690     { 0x0040, 0xa307, "PN", "Current Observer" },
   1691     { 0x0040, 0xa30a, "DS", "Numeric Value" },
   1692     { 0x0040, 0xa313, "SQ", "Referenced Accession Sequence" },
   1693     { 0x0040, 0xa33a, "ST", "Report Status Comment" },
   1694     { 0x0040, 0xa340, "SQ", "Procedure Context Sequence" },
   1695     { 0x0040, 0xa352, "PN", "Verbal Source" },
   1696     { 0x0040, 0xa353, "ST", "Address" },
   1697     { 0x0040, 0xa354, "LO", "Telephone Number" },
   1698     { 0x0040, 0xa358, "SQ", "Verbal Source Identifier Code Sequence" },
   1699     { 0x0040, 0xa380, "SQ", "Report Detail Sequence" },
   1700     { 0x0040, 0xa402, "UI", "Observation Subject UID" },
   1701     { 0x0040, 0xa403, "CS", "Observation Subject Class" },
   1702     { 0x0040, 0xa404, "SQ", "Observation Subject Type Code Sequence" },
   1703     { 0x0040, 0xa600, "CS", "Observation Subject Context Flag" },
   1704     { 0x0040, 0xa601, "CS", "Observer Context Flag" },
   1705     { 0x0040, 0xa603, "CS", "Procedure Context Flag" },
   1706     { 0x0040, 0xa730, "SQ", "Observations Sequence" },
   1707     { 0x0040, 0xa731, "SQ", "Relationship Sequence" },
   1708     { 0x0040, 0xa732, "SQ", "Relationship Type Code Sequence" },
   1709     { 0x0040, 0xa744, "SQ", "Language Code Sequence" },
   1710     { 0x0040, 0xa992, "ST", "Uniform Resource Locator" },
   1711     { 0x0040, 0xb020, "SQ", "Annotation Sequence" },
   1712     { 0x0040, 0xdb73, "SQ", "Relationship Type Code Sequence Modifier" },
   1713     { 0x0041, 0x0000, "LT", "Papyrus Comments" },
   1714     { 0x0041, 0x0010, "xs", "?" },
   1715     { 0x0041, 0x0011, "xs", "?" },
   1716     { 0x0041, 0x0012, "UL", "Pixel Offset" },
   1717     { 0x0041, 0x0013, "SQ", "Image Identifier Sequence" },
   1718     { 0x0041, 0x0014, "SQ", "External File Reference Sequence" },
   1719     { 0x0041, 0x0015, "US", "Number of Images" },
   1720     { 0x0041, 0x0020, "xs", "?" },
   1721     { 0x0041, 0x0021, "UI", "Referenced SOP Class UID" },
   1722     { 0x0041, 0x0022, "UI", "Referenced SOP Instance UID" },
   1723     { 0x0041, 0x0030, "xs", "?" },
   1724     { 0x0041, 0x0031, "xs", "?" },
   1725     { 0x0041, 0x0032, "xs", "?" },
   1726     { 0x0041, 0x0034, "DA", "Modified Date" },
   1727     { 0x0041, 0x0036, "TM", "Modified Time" },
   1728     { 0x0041, 0x0040, "LT", "Owner Name" },
   1729     { 0x0041, 0x0041, "UI", "Referenced Image SOP Class UID" },
   1730     { 0x0041, 0x0042, "UI", "Referenced Image SOP Instance UID" },
   1731     { 0x0041, 0x0050, "xs", "?" },
   1732     { 0x0041, 0x0060, "UL", "Number of Images" },
   1733     { 0x0041, 0x0062, "UL", "Number of Other" },
   1734     { 0x0041, 0x00a0, "LT", "External Folder Element DSID" },
   1735     { 0x0041, 0x00a1, "US", "External Folder Element Data Set Type" },
   1736     { 0x0041, 0x00a2, "LT", "External Folder Element File Location" },
   1737     { 0x0041, 0x00a3, "UL", "External Folder Element Length" },
   1738     { 0x0041, 0x00b0, "LT", "Internal Folder Element DSID" },
   1739     { 0x0041, 0x00b1, "US", "Internal Folder Element Data Set Type" },
   1740     { 0x0041, 0x00b2, "UL", "Internal Offset To Data Set" },
   1741     { 0x0041, 0x00b3, "UL", "Internal Offset To Image" },
   1742     { 0x0043, 0x0001, "SS", "Bitmap Of Prescan Options" },
   1743     { 0x0043, 0x0002, "SS", "Gradient Offset In X" },
   1744     { 0x0043, 0x0003, "SS", "Gradient Offset In Y" },
   1745     { 0x0043, 0x0004, "SS", "Gradient Offset In Z" },
   1746     { 0x0043, 0x0005, "SS", "Image Is Original Or Unoriginal" },
   1747     { 0x0043, 0x0006, "SS", "Number Of EPI Shots" },
   1748     { 0x0043, 0x0007, "SS", "Views Per Segment" },
   1749     { 0x0043, 0x0008, "SS", "Respiratory Rate In BPM" },
   1750     { 0x0043, 0x0009, "SS", "Respiratory Trigger Point" },
   1751     { 0x0043, 0x000a, "SS", "Type Of Receiver Used" },
   1752     { 0x0043, 0x000b, "DS", "Peak Rate Of Change Of Gradient Field" },
   1753     { 0x0043, 0x000c, "DS", "Limits In Units Of Percent" },
   1754     { 0x0043, 0x000d, "DS", "PSD Estimated Limit" },
   1755     { 0x0043, 0x000e, "DS", "PSD Estimated Limit In Tesla Per Second" },
   1756     { 0x0043, 0x000f, "DS", "SAR Avg Head" },
   1757     { 0x0043, 0x0010, "US", "Window Value" },
   1758     { 0x0043, 0x0011, "US", "Total Input Views" },
   1759     { 0x0043, 0x0012, "SS", "Xray Chain" },
   1760     { 0x0043, 0x0013, "SS", "Recon Kernel Parameters" },
   1761     { 0x0043, 0x0014, "SS", "Calibration Parameters" },
   1762     { 0x0043, 0x0015, "SS", "Total Output Views" },
   1763     { 0x0043, 0x0016, "SS", "Number Of Overranges" },
   1764     { 0x0043, 0x0017, "DS", "IBH Image Scale Factors" },
   1765     { 0x0043, 0x0018, "DS", "BBH Coefficients" },
   1766     { 0x0043, 0x0019, "SS", "Number Of BBH Chains To Blend" },
   1767     { 0x0043, 0x001a, "SL", "Starting Channel Number" },
   1768     { 0x0043, 0x001b, "SS", "PPScan Parameters" },
   1769     { 0x0043, 0x001c, "SS", "GE Image Integrity" },
   1770     { 0x0043, 0x001d, "SS", "Level Value" },
   1771     { 0x0043, 0x001e, "xs", "?" },
   1772     { 0x0043, 0x001f, "SL", "Max Overranges In A View" },
   1773     { 0x0043, 0x0020, "DS", "Avg Overranges All Views" },
   1774     { 0x0043, 0x0021, "SS", "Corrected Afterglow Terms" },
   1775     { 0x0043, 0x0025, "SS", "Reference Channels" },
   1776     { 0x0043, 0x0026, "US", "No Views Ref Channels Blocked" },
   1777     { 0x0043, 0x0027, "xs", "?" },
   1778     { 0x0043, 0x0028, "OB", "Unique Image Identifier" },
   1779     { 0x0043, 0x0029, "OB", "Histogram Tables" },
   1780     { 0x0043, 0x002a, "OB", "User Defined Data" },
   1781     { 0x0043, 0x002b, "SS", "Private Scan Options" },
   1782     { 0x0043, 0x002c, "SS", "Effective Echo Spacing" },
   1783     { 0x0043, 0x002d, "SH", "String Slop Field 1" },
   1784     { 0x0043, 0x002e, "SH", "String Slop Field 2" },
   1785     { 0x0043, 0x002f, "SS", "Raw Data Type" },
   1786     { 0x0043, 0x0030, "SS", "Raw Data Type" },
   1787     { 0x0043, 0x0031, "DS", "RA Coord Of Target Recon Centre" },
   1788     { 0x0043, 0x0032, "SS", "Raw Data Type" },
   1789     { 0x0043, 0x0033, "FL", "Neg Scan Spacing" },
   1790     { 0x0043, 0x0034, "IS", "Offset Frequency" },
   1791     { 0x0043, 0x0035, "UL", "User Usage Tag" },
   1792     { 0x0043, 0x0036, "UL", "User Fill Map MSW" },
   1793     { 0x0043, 0x0037, "UL", "User Fill Map LSW" },
   1794     { 0x0043, 0x0038, "FL", "User 25 To User 48" },
   1795     { 0x0043, 0x0039, "IS", "Slop Integer 6 To Slop Integer 9" },
   1796     { 0x0043, 0x0040, "FL", "Trigger On Position" },
   1797     { 0x0043, 0x0041, "FL", "Degree Of Rotation" },
   1798     { 0x0043, 0x0042, "SL", "DAS Trigger Source" },
   1799     { 0x0043, 0x0043, "SL", "DAS Fpa Gain" },
   1800     { 0x0043, 0x0044, "SL", "DAS Output Source" },
   1801     { 0x0043, 0x0045, "SL", "DAS Ad Input" },
   1802     { 0x0043, 0x0046, "SL", "DAS Cal Mode" },
   1803     { 0x0043, 0x0047, "SL", "DAS Cal Frequency" },
   1804     { 0x0043, 0x0048, "SL", "DAS Reg Xm" },
   1805     { 0x0043, 0x0049, "SL", "DAS Auto Zero" },
   1806     { 0x0043, 0x004a, "SS", "Starting Channel Of View" },
   1807     { 0x0043, 0x004b, "SL", "DAS Xm Pattern" },
   1808     { 0x0043, 0x004c, "SS", "TGGC Trigger Mode" },
   1809     { 0x0043, 0x004d, "FL", "Start Scan To Xray On Delay" },
   1810     { 0x0043, 0x004e, "FL", "Duration Of Xray On" },
   1811     { 0x0044, 0x0000, "UI", "?" },
   1812     { 0x0045, 0x0004, "CS", "AES" },
   1813     { 0x0045, 0x0006, "DS", "Angulation" },
   1814     { 0x0045, 0x0009, "DS", "Real Magnification Factor" },
   1815     { 0x0045, 0x000b, "CS", "Senograph Type" },
   1816     { 0x0045, 0x000c, "DS", "Integration Time" },
   1817     { 0x0045, 0x000d, "DS", "ROI Origin X and Y" },
   1818     { 0x0045, 0x0011, "DS", "Receptor Size cm X and Y" },
   1819     { 0x0045, 0x0012, "IS", "Receptor Size Pixels X and Y" },
   1820     { 0x0045, 0x0013, "ST", "Screen" },
   1821     { 0x0045, 0x0014, "DS", "Pixel Pitch Microns" },
   1822     { 0x0045, 0x0015, "IS", "Pixel Depth Bits" },
   1823     { 0x0045, 0x0016, "IS", "Binning Factor X and Y" },
   1824     { 0x0045, 0x001b, "CS", "Clinical View" },
   1825     { 0x0045, 0x001d, "DS", "Mean Of Raw Gray Levels" },
   1826     { 0x0045, 0x001e, "DS", "Mean Of Offset Gray Levels" },
   1827     { 0x0045, 0x001f, "DS", "Mean Of Corrected Gray Levels" },
   1828     { 0x0045, 0x0020, "DS", "Mean Of Region Gray Levels" },
   1829     { 0x0045, 0x0021, "DS", "Mean Of Log Region Gray Levels" },
   1830     { 0x0045, 0x0022, "DS", "Standard Deviation Of Raw Gray Levels" },
   1831     { 0x0045, 0x0023, "DS", "Standard Deviation Of Corrected Gray Levels" },
   1832     { 0x0045, 0x0024, "DS", "Standard Deviation Of Region Gray Levels" },
   1833     { 0x0045, 0x0025, "DS", "Standard Deviation Of Log Region Gray Levels" },
   1834     { 0x0045, 0x0026, "OB", "MAO Buffer" },
   1835     { 0x0045, 0x0027, "IS", "Set Number" },
   1836     { 0x0045, 0x0028, "CS", "WindowingType (LINEAR or GAMMA)" },
   1837     { 0x0045, 0x0029, "DS", "WindowingParameters" },
   1838     { 0x0045, 0x002a, "IS", "Crosshair Cursor X Coordinates" },
   1839     { 0x0045, 0x002b, "IS", "Crosshair Cursor Y Coordinates" },
   1840     { 0x0045, 0x0039, "US", "Vignette Rows" },
   1841     { 0x0045, 0x003a, "US", "Vignette Columns" },
   1842     { 0x0045, 0x003b, "US", "Vignette Bits Allocated" },
   1843     { 0x0045, 0x003c, "US", "Vignette Bits Stored" },
   1844     { 0x0045, 0x003d, "US", "Vignette High Bit" },
   1845     { 0x0045, 0x003e, "US", "Vignette Pixel Representation" },
   1846     { 0x0045, 0x003f, "OB", "Vignette Pixel Data" },
   1847     { 0x0047, 0x0001, "SQ", "Reconstruction Parameters Sequence" },
   1848     { 0x0047, 0x0050, "UL", "Volume Voxel Count" },
   1849     { 0x0047, 0x0051, "UL", "Volume Segment Count" },
   1850     { 0x0047, 0x0053, "US", "Volume Slice Size" },
   1851     { 0x0047, 0x0054, "US", "Volume Slice Count" },
   1852     { 0x0047, 0x0055, "SL", "Volume Threshold Value" },
   1853     { 0x0047, 0x0057, "DS", "Volume Voxel Ratio" },
   1854     { 0x0047, 0x0058, "DS", "Volume Voxel Size" },
   1855     { 0x0047, 0x0059, "US", "Volume Z Position Size" },
   1856     { 0x0047, 0x0060, "DS", "Volume Base Line" },
   1857     { 0x0047, 0x0061, "DS", "Volume Center Point" },
   1858     { 0x0047, 0x0063, "SL", "Volume Skew Base" },
   1859     { 0x0047, 0x0064, "DS", "Volume Registration Transform Rotation Matrix" },
   1860     { 0x0047, 0x0065, "DS", "Volume Registration Transform Translation Vector" },
   1861     { 0x0047, 0x0070, "DS", "KVP List" },
   1862     { 0x0047, 0x0071, "IS", "XRay Tube Current List" },
   1863     { 0x0047, 0x0072, "IS", "Exposure List" },
   1864     { 0x0047, 0x0080, "LO", "Acquisition DLX Identifier" },
   1865     { 0x0047, 0x0085, "SQ", "Acquisition DLX 2D Series Sequence" },
   1866     { 0x0047, 0x0089, "DS", "Contrast Agent Volume List" },
   1867     { 0x0047, 0x008a, "US", "Number Of Injections" },
   1868     { 0x0047, 0x008b, "US", "Frame Count" },
   1869     { 0x0047, 0x0096, "IS", "Used Frames" },
   1870     { 0x0047, 0x0091, "LO", "XA 3D Reconstruction Algorithm Name" },
   1871     { 0x0047, 0x0092, "CS", "XA 3D Reconstruction Algorithm Version" },
   1872     { 0x0047, 0x0093, "DA", "DLX Calibration Date" },
   1873     { 0x0047, 0x0094, "TM", "DLX Calibration Time" },
   1874     { 0x0047, 0x0095, "CS", "DLX Calibration Status" },
   1875     { 0x0047, 0x0098, "US", "Transform Count" },
   1876     { 0x0047, 0x0099, "SQ", "Transform Sequence" },
   1877     { 0x0047, 0x009a, "DS", "Transform Rotation Matrix" },
   1878     { 0x0047, 0x009b, "DS", "Transform Translation Vector" },
   1879     { 0x0047, 0x009c, "LO", "Transform Label" },
   1880     { 0x0047, 0x00b1, "US", "Wireframe Count" },
   1881     { 0x0047, 0x00b2, "US", "Location System" },
   1882     { 0x0047, 0x00b0, "SQ", "Wireframe List" },
   1883     { 0x0047, 0x00b5, "LO", "Wireframe Name" },
   1884     { 0x0047, 0x00b6, "LO", "Wireframe Group Name" },
   1885     { 0x0047, 0x00b7, "LO", "Wireframe Color" },
   1886     { 0x0047, 0x00b8, "SL", "Wireframe Attributes" },
   1887     { 0x0047, 0x00b9, "SL", "Wireframe Point Count" },
   1888     { 0x0047, 0x00ba, "SL", "Wireframe Timestamp" },
   1889     { 0x0047, 0x00bb, "SQ", "Wireframe Point List" },
   1890     { 0x0047, 0x00bc, "DS", "Wireframe Points Coordinates" },
   1891     { 0x0047, 0x00c0, "DS", "Volume Upper Left High Corner RAS" },
   1892     { 0x0047, 0x00c1, "DS", "Volume Slice To RAS Rotation Matrix" },
   1893     { 0x0047, 0x00c2, "DS", "Volume Upper Left High Corner TLOC" },
   1894     { 0x0047, 0x00d1, "OB", "Volume Segment List" },
   1895     { 0x0047, 0x00d2, "OB", "Volume Gradient List" },
   1896     { 0x0047, 0x00d3, "OB", "Volume Density List" },
   1897     { 0x0047, 0x00d4, "OB", "Volume Z Position List" },
   1898     { 0x0047, 0x00d5, "OB", "Volume Original Index List" },
   1899     { 0x0050, 0x0000, "UL", "Calibration Group Length" },
   1900     { 0x0050, 0x0004, "CS", "Calibration Object" },
   1901     { 0x0050, 0x0010, "SQ", "DeviceSequence" },
   1902     { 0x0050, 0x0014, "DS", "DeviceLength" },
   1903     { 0x0050, 0x0016, "DS", "DeviceDiameter" },
   1904     { 0x0050, 0x0017, "CS", "DeviceDiameterUnits" },
   1905     { 0x0050, 0x0018, "DS", "DeviceVolume" },
   1906     { 0x0050, 0x0019, "DS", "InterMarkerDistance" },
   1907     { 0x0050, 0x0020, "LO", "DeviceDescription" },
   1908     { 0x0050, 0x0030, "SQ", "CodedInterventionDeviceSequence" },
   1909     { 0x0051, 0x0010, "xs", "Image Text" },
   1910     { 0x0054, 0x0000, "UL", "Nuclear Acquisition Group Length" },
   1911     { 0x0054, 0x0010, "US", "Energy Window Vector" },
   1912     { 0x0054, 0x0011, "US", "Number of Energy Windows" },
   1913     { 0x0054, 0x0012, "SQ", "Energy Window Information Sequence" },
   1914     { 0x0054, 0x0013, "SQ", "Energy Window Range Sequence" },
   1915     { 0x0054, 0x0014, "DS", "Energy Window Lower Limit" },
   1916     { 0x0054, 0x0015, "DS", "Energy Window Upper Limit" },
   1917     { 0x0054, 0x0016, "SQ", "Radiopharmaceutical Information Sequence" },
   1918     { 0x0054, 0x0017, "IS", "Residual Syringe Counts" },
   1919     { 0x0054, 0x0018, "SH", "Energy Window Name" },
   1920     { 0x0054, 0x0020, "US", "Detector Vector" },
   1921     { 0x0054, 0x0021, "US", "Number of Detectors" },
   1922     { 0x0054, 0x0022, "SQ", "Detector Information Sequence" },
   1923     { 0x0054, 0x0030, "US", "Phase Vector" },
   1924     { 0x0054, 0x0031, "US", "Number of Phases" },
   1925     { 0x0054, 0x0032, "SQ", "Phase Information Sequence" },
   1926     { 0x0054, 0x0033, "US", "Number of Frames In Phase" },
   1927     { 0x0054, 0x0036, "IS", "Phase Delay" },
   1928     { 0x0054, 0x0038, "IS", "Pause Between Frames" },
   1929     { 0x0054, 0x0050, "US", "Rotation Vector" },
   1930     { 0x0054, 0x0051, "US", "Number of Rotations" },
   1931     { 0x0054, 0x0052, "SQ", "Rotation Information Sequence" },
   1932     { 0x0054, 0x0053, "US", "Number of Frames In Rotation" },
   1933     { 0x0054, 0x0060, "US", "R-R Interval Vector" },
   1934     { 0x0054, 0x0061, "US", "Number of R-R Intervals" },
   1935     { 0x0054, 0x0062, "SQ", "Gated Information Sequence" },
   1936     { 0x0054, 0x0063, "SQ", "Data Information Sequence" },
   1937     { 0x0054, 0x0070, "US", "Time Slot Vector" },
   1938     { 0x0054, 0x0071, "US", "Number of Time Slots" },
   1939     { 0x0054, 0x0072, "SQ", "Time Slot Information Sequence" },
   1940     { 0x0054, 0x0073, "DS", "Time Slot Time" },
   1941     { 0x0054, 0x0080, "US", "Slice Vector" },
   1942     { 0x0054, 0x0081, "US", "Number of Slices" },
   1943     { 0x0054, 0x0090, "US", "Angular View Vector" },
   1944     { 0x0054, 0x0100, "US", "Time Slice Vector" },
   1945     { 0x0054, 0x0101, "US", "Number Of Time Slices" },
   1946     { 0x0054, 0x0200, "DS", "Start Angle" },
   1947     { 0x0054, 0x0202, "CS", "Type of Detector Motion" },
   1948     { 0x0054, 0x0210, "IS", "Trigger Vector" },
   1949     { 0x0054, 0x0211, "US", "Number of Triggers in Phase" },
   1950     { 0x0054, 0x0220, "SQ", "View Code Sequence" },
   1951     { 0x0054, 0x0222, "SQ", "View Modifier Code Sequence" },
   1952     { 0x0054, 0x0300, "SQ", "Radionuclide Code Sequence" },
   1953     { 0x0054, 0x0302, "SQ", "Radiopharmaceutical Route Code Sequence" },
   1954     { 0x0054, 0x0304, "SQ", "Radiopharmaceutical Code Sequence" },
   1955     { 0x0054, 0x0306, "SQ", "Calibration Data Sequence" },
   1956     { 0x0054, 0x0308, "US", "Energy Window Number" },
   1957     { 0x0054, 0x0400, "SH", "Image ID" },
   1958     { 0x0054, 0x0410, "SQ", "Patient Orientation Code Sequence" },
   1959     { 0x0054, 0x0412, "SQ", "Patient Orientation Modifier Code Sequence" },
   1960     { 0x0054, 0x0414, "SQ", "Patient Gantry Relationship Code Sequence" },
   1961     { 0x0054, 0x1000, "CS", "Positron Emission Tomography Series Type" },
   1962     { 0x0054, 0x1001, "CS", "Positron Emission Tomography Units" },
   1963     { 0x0054, 0x1002, "CS", "Counts Source" },
   1964     { 0x0054, 0x1004, "CS", "Reprojection Method" },
   1965     { 0x0054, 0x1100, "CS", "Randoms Correction Method" },
   1966     { 0x0054, 0x1101, "LO", "Attenuation Correction Method" },
   1967     { 0x0054, 0x1102, "CS", "Decay Correction" },
   1968     { 0x0054, 0x1103, "LO", "Reconstruction Method" },
   1969     { 0x0054, 0x1104, "LO", "Detector Lines of Response Used" },
   1970     { 0x0054, 0x1105, "LO", "Scatter Correction Method" },
   1971     { 0x0054, 0x1200, "DS", "Axial Acceptance" },
   1972     { 0x0054, 0x1201, "IS", "Axial Mash" },
   1973     { 0x0054, 0x1202, "IS", "Transverse Mash" },
   1974     { 0x0054, 0x1203, "DS", "Detector Element Size" },
   1975     { 0x0054, 0x1210, "DS", "Coincidence Window Width" },
   1976     { 0x0054, 0x1220, "CS", "Secondary Counts Type" },
   1977     { 0x0054, 0x1300, "DS", "Frame Reference Time" },
   1978     { 0x0054, 0x1310, "IS", "Primary Prompts Counts Accumulated" },
   1979     { 0x0054, 0x1311, "IS", "Secondary Counts Accumulated" },
   1980     { 0x0054, 0x1320, "DS", "Slice Sensitivity Factor" },
   1981     { 0x0054, 0x1321, "DS", "Decay Factor" },
   1982     { 0x0054, 0x1322, "DS", "Dose Calibration Factor" },
   1983     { 0x0054, 0x1323, "DS", "Scatter Fraction Factor" },
   1984     { 0x0054, 0x1324, "DS", "Dead Time Factor" },
   1985     { 0x0054, 0x1330, "US", "Image Index" },
   1986     { 0x0054, 0x1400, "CS", "Counts Included" },
   1987     { 0x0054, 0x1401, "CS", "Dead Time Correction Flag" },
   1988     { 0x0055, 0x0046, "LT", "Current Ward" },
   1989     { 0x0058, 0x0000, "SQ", "?" },
   1990     { 0x0060, 0x3000, "SQ", "Histogram Sequence" },
   1991     { 0x0060, 0x3002, "US", "Histogram Number of Bins" },
   1992     { 0x0060, 0x3004, "xs", "Histogram First Bin Value" },
   1993     { 0x0060, 0x3006, "xs", "Histogram Last Bin Value" },
   1994     { 0x0060, 0x3008, "US", "Histogram Bin Width" },
   1995     { 0x0060, 0x3010, "LO", "Histogram Explanation" },
   1996     { 0x0060, 0x3020, "UL", "Histogram Data" },
   1997     { 0x0070, 0x0001, "SQ", "Graphic Annotation Sequence" },
   1998     { 0x0070, 0x0002, "CS", "Graphic Layer" },
   1999     { 0x0070, 0x0003, "CS", "Bounding Box Annotation Units" },
   2000     { 0x0070, 0x0004, "CS", "Anchor Point Annotation Units" },
   2001     { 0x0070, 0x0005, "CS", "Graphic Annotation Units" },
   2002     { 0x0070, 0x0006, "ST", "Unformatted Text Value" },
   2003     { 0x0070, 0x0008, "SQ", "Text Object Sequence" },
   2004     { 0x0070, 0x0009, "SQ", "Graphic Object Sequence" },
   2005     { 0x0070, 0x0010, "FL", "Bounding Box TLHC" },
   2006     { 0x0070, 0x0011, "FL", "Bounding Box BRHC" },
   2007     { 0x0070, 0x0014, "FL", "Anchor Point" },
   2008     { 0x0070, 0x0015, "CS", "Anchor Point Visibility" },
   2009     { 0x0070, 0x0020, "US", "Graphic Dimensions" },
   2010     { 0x0070, 0x0021, "US", "Number Of Graphic Points" },
   2011     { 0x0070, 0x0022, "FL", "Graphic Data" },
   2012     { 0x0070, 0x0023, "CS", "Graphic Type" },
   2013     { 0x0070, 0x0024, "CS", "Graphic Filled" },
   2014     { 0x0070, 0x0040, "IS", "Image Rotation" },
   2015     { 0x0070, 0x0041, "CS", "Image Horizontal Flip" },
   2016     { 0x0070, 0x0050, "US", "Displayed Area TLHC" },
   2017     { 0x0070, 0x0051, "US", "Displayed Area BRHC" },
   2018     { 0x0070, 0x0060, "SQ", "Graphic Layer Sequence" },
   2019     { 0x0070, 0x0062, "IS", "Graphic Layer Order" },
   2020     { 0x0070, 0x0066, "US", "Graphic Layer Recommended Display Value" },
   2021     { 0x0070, 0x0068, "LO", "Graphic Layer Description" },
   2022     { 0x0070, 0x0080, "CS", "Presentation Label" },
   2023     { 0x0070, 0x0081, "LO", "Presentation Description" },
   2024     { 0x0070, 0x0082, "DA", "Presentation Creation Date" },
   2025     { 0x0070, 0x0083, "TM", "Presentation Creation Time" },
   2026     { 0x0070, 0x0084, "PN", "Presentation Creator's Name" },
   2027     { 0x0070, 0x031a, "UI", "Fiducial UID" },
   2028     { 0x0087, 0x0010, "CS", "Media Type" },
   2029     { 0x0087, 0x0020, "CS", "Media Location" },
   2030     { 0x0087, 0x0050, "IS", "Estimated Retrieve Time" },
   2031     { 0x0088, 0x0000, "UL", "Storage Group Length" },
   2032     { 0x0088, 0x0130, "SH", "Storage Media FileSet ID" },
   2033     { 0x0088, 0x0140, "UI", "Storage Media FileSet UID" },
   2034     { 0x0088, 0x0200, "SQ", "Icon Image Sequence" },
   2035     { 0x0088, 0x0904, "LO", "Topic Title" },
   2036     { 0x0088, 0x0906, "ST", "Topic Subject" },
   2037     { 0x0088, 0x0910, "LO", "Topic Author" },
   2038     { 0x0088, 0x0912, "LO", "Topic Key Words" },
   2039     { 0x0095, 0x0001, "LT", "Examination Folder ID" },
   2040     { 0x0095, 0x0004, "UL", "Folder Reported Status" },
   2041     { 0x0095, 0x0005, "LT", "Folder Reporting Radiologist" },
   2042     { 0x0095, 0x0007, "LT", "SIENET ISA PLA" },
   2043     { 0x0099, 0x0002, "UL", "Data Object Attributes" },
   2044     { 0x00e1, 0x0001, "US", "Data Dictionary Version" },
   2045     { 0x00e1, 0x0014, "LT", "?" },
   2046     { 0x00e1, 0x0022, "DS", "?" },
   2047     { 0x00e1, 0x0023, "DS", "?" },
   2048     { 0x00e1, 0x0024, "LT", "?" },
   2049     { 0x00e1, 0x0025, "LT", "?" },
   2050     { 0x00e1, 0x0040, "SH", "Offset From CT MR Images" },
   2051     { 0x0193, 0x0002, "DS", "RIS Key" },
   2052     { 0x0307, 0x0001, "UN", "RIS Worklist IMGEF" },
   2053     { 0x0309, 0x0001, "UN", "RIS Report IMGEF" },
   2054     { 0x0601, 0x0000, "SH", "Implementation Version" },
   2055     { 0x0601, 0x0020, "DS", "Relative Table Position" },
   2056     { 0x0601, 0x0021, "DS", "Relative Table Height" },
   2057     { 0x0601, 0x0030, "SH", "Surview Direction" },
   2058     { 0x0601, 0x0031, "DS", "Surview Length" },
   2059     { 0x0601, 0x0050, "SH", "Image View Type" },
   2060     { 0x0601, 0x0070, "DS", "Batch Number" },
   2061     { 0x0601, 0x0071, "DS", "Batch Size" },
   2062     { 0x0601, 0x0072, "DS", "Batch Slice Number" },
   2063     { 0x1000, 0x0000, "xs", "?" },
   2064     { 0x1000, 0x0001, "US", "Run Length Triplet" },
   2065     { 0x1000, 0x0002, "US", "Huffman Table Size" },
   2066     { 0x1000, 0x0003, "US", "Huffman Table Triplet" },
   2067     { 0x1000, 0x0004, "US", "Shift Table Size" },
   2068     { 0x1000, 0x0005, "US", "Shift Table Triplet" },
   2069     { 0x1010, 0x0000, "xs", "?" },
   2070     { 0x1369, 0x0000, "US", "?" },
   2071     { 0x2000, 0x0000, "UL", "Film Session Group Length" },
   2072     { 0x2000, 0x0010, "IS", "Number of Copies" },
   2073     { 0x2000, 0x0020, "CS", "Print Priority" },
   2074     { 0x2000, 0x0030, "CS", "Medium Type" },
   2075     { 0x2000, 0x0040, "CS", "Film Destination" },
   2076     { 0x2000, 0x0050, "LO", "Film Session Label" },
   2077     { 0x2000, 0x0060, "IS", "Memory Allocation" },
   2078     { 0x2000, 0x0500, "SQ", "Referenced Film Box Sequence" },
   2079     { 0x2010, 0x0000, "UL", "Film Box Group Length" },
   2080     { 0x2010, 0x0010, "ST", "Image Display Format" },
   2081     { 0x2010, 0x0030, "CS", "Annotation Display Format ID" },
   2082     { 0x2010, 0x0040, "CS", "Film Orientation" },
   2083     { 0x2010, 0x0050, "CS", "Film Size ID" },
   2084     { 0x2010, 0x0060, "CS", "Magnification Type" },
   2085     { 0x2010, 0x0080, "CS", "Smoothing Type" },
   2086     { 0x2010, 0x0100, "CS", "Border Density" },
   2087     { 0x2010, 0x0110, "CS", "Empty Image Density" },
   2088     { 0x2010, 0x0120, "US", "Min Density" },
   2089     { 0x2010, 0x0130, "US", "Max Density" },
   2090     { 0x2010, 0x0140, "CS", "Trim" },
   2091     { 0x2010, 0x0150, "ST", "Configuration Information" },
   2092     { 0x2010, 0x0500, "SQ", "Referenced Film Session Sequence" },
   2093     { 0x2010, 0x0510, "SQ", "Referenced Image Box Sequence" },
   2094     { 0x2010, 0x0520, "SQ", "Referenced Basic Annotation Box Sequence" },
   2095     { 0x2020, 0x0000, "UL", "Image Box Group Length" },
   2096     { 0x2020, 0x0010, "US", "Image Box Position" },
   2097     { 0x2020, 0x0020, "CS", "Polarity" },
   2098     { 0x2020, 0x0030, "DS", "Requested Image Size" },
   2099     { 0x2020, 0x0110, "SQ", "Preformatted Grayscale Image Sequence" },
   2100     { 0x2020, 0x0111, "SQ", "Preformatted Color Image Sequence" },
   2101     { 0x2020, 0x0130, "SQ", "Referenced Image Overlay Box Sequence" },
   2102     { 0x2020, 0x0140, "SQ", "Referenced VOI LUT Box Sequence" },
   2103     { 0x2030, 0x0000, "UL", "Annotation Group Length" },
   2104     { 0x2030, 0x0010, "US", "Annotation Position" },
   2105     { 0x2030, 0x0020, "LO", "Text String" },
   2106     { 0x2040, 0x0000, "UL", "Overlay Box Group Length" },
   2107     { 0x2040, 0x0010, "SQ", "Referenced Overlay Plane Sequence" },
   2108     { 0x2040, 0x0011, "US", "Referenced Overlay Plane Groups" },
   2109     { 0x2040, 0x0060, "CS", "Overlay Magnification Type" },
   2110     { 0x2040, 0x0070, "CS", "Overlay Smoothing Type" },
   2111     { 0x2040, 0x0080, "CS", "Overlay Foreground Density" },
   2112     { 0x2040, 0x0090, "CS", "Overlay Mode" },
   2113     { 0x2040, 0x0100, "CS", "Threshold Density" },
   2114     { 0x2040, 0x0500, "SQ", "Referenced Overlay Image Box Sequence" },
   2115     { 0x2050, 0x0010, "SQ", "Presentation LUT Sequence" },
   2116     { 0x2050, 0x0020, "CS", "Presentation LUT Shape" },
   2117     { 0x2100, 0x0000, "UL", "Print Job Group Length" },
   2118     { 0x2100, 0x0020, "CS", "Execution Status" },
   2119     { 0x2100, 0x0030, "CS", "Execution Status Info" },
   2120     { 0x2100, 0x0040, "DA", "Creation Date" },
   2121     { 0x2100, 0x0050, "TM", "Creation Time" },
   2122     { 0x2100, 0x0070, "AE", "Originator" },
   2123     { 0x2100, 0x0500, "SQ", "Referenced Print Job Sequence" },
   2124     { 0x2110, 0x0000, "UL", "Printer Group Length" },
   2125     { 0x2110, 0x0010, "CS", "Printer Status" },
   2126     { 0x2110, 0x0020, "CS", "Printer Status Info" },
   2127     { 0x2110, 0x0030, "LO", "Printer Name" },
   2128     { 0x2110, 0x0099, "SH", "Print Queue ID" },
   2129     { 0x3002, 0x0002, "SH", "RT Image Label" },
   2130     { 0x3002, 0x0003, "LO", "RT Image Name" },
   2131     { 0x3002, 0x0004, "ST", "RT Image Description" },
   2132     { 0x3002, 0x000a, "CS", "Reported Values Origin" },
   2133     { 0x3002, 0x000c, "CS", "RT Image Plane" },
   2134     { 0x3002, 0x000e, "DS", "X-Ray Image Receptor Angle" },
   2135     { 0x3002, 0x0010, "DS", "RTImageOrientation" },
   2136     { 0x3002, 0x0011, "DS", "Image Plane Pixel Spacing" },
   2137     { 0x3002, 0x0012, "DS", "RT Image Position" },
   2138     { 0x3002, 0x0020, "SH", "Radiation Machine Name" },
   2139     { 0x3002, 0x0022, "DS", "Radiation Machine SAD" },
   2140     { 0x3002, 0x0024, "DS", "Radiation Machine SSD" },
   2141     { 0x3002, 0x0026, "DS", "RT Image SID" },
   2142     { 0x3002, 0x0028, "DS", "Source to Reference Object Distance" },
   2143     { 0x3002, 0x0029, "IS", "Fraction Number" },
   2144     { 0x3002, 0x0030, "SQ", "Exposure Sequence" },
   2145     { 0x3002, 0x0032, "DS", "Meterset Exposure" },
   2146     { 0x3004, 0x0001, "CS", "DVH Type" },
   2147     { 0x3004, 0x0002, "CS", "Dose Units" },
   2148     { 0x3004, 0x0004, "CS", "Dose Type" },
   2149     { 0x3004, 0x0006, "LO", "Dose Comment" },
   2150     { 0x3004, 0x0008, "DS", "Normalization Point" },
   2151     { 0x3004, 0x000a, "CS", "Dose Summation Type" },
   2152     { 0x3004, 0x000c, "DS", "GridFrame Offset Vector" },
   2153     { 0x3004, 0x000e, "DS", "Dose Grid Scaling" },
   2154     { 0x3004, 0x0010, "SQ", "RT Dose ROI Sequence" },
   2155     { 0x3004, 0x0012, "DS", "Dose Value" },
   2156     { 0x3004, 0x0040, "DS", "DVH Normalization Point" },
   2157     { 0x3004, 0x0042, "DS", "DVH Normalization Dose Value" },
   2158     { 0x3004, 0x0050, "SQ", "DVH Sequence" },
   2159     { 0x3004, 0x0052, "DS", "DVH Dose Scaling" },
   2160     { 0x3004, 0x0054, "CS", "DVH Volume Units" },
   2161     { 0x3004, 0x0056, "IS", "DVH Number of Bins" },
   2162     { 0x3004, 0x0058, "DS", "DVH Data" },
   2163     { 0x3004, 0x0060, "SQ", "DVH Referenced ROI Sequence" },
   2164     { 0x3004, 0x0062, "CS", "DVH ROI Contribution Type" },
   2165     { 0x3004, 0x0070, "DS", "DVH Minimum Dose" },
   2166     { 0x3004, 0x0072, "DS", "DVH Maximum Dose" },
   2167     { 0x3004, 0x0074, "DS", "DVH Mean Dose" },
   2168     { 0x3006, 0x0002, "SH", "Structure Set Label" },
   2169     { 0x3006, 0x0004, "LO", "Structure Set Name" },
   2170     { 0x3006, 0x0006, "ST", "Structure Set Description" },
   2171     { 0x3006, 0x0008, "DA", "Structure Set Date" },
   2172     { 0x3006, 0x0009, "TM", "Structure Set Time" },
   2173     { 0x3006, 0x0010, "SQ", "Referenced Frame of Reference Sequence" },
   2174     { 0x3006, 0x0012, "SQ", "RT Referenced Study Sequence" },
   2175     { 0x3006, 0x0014, "SQ", "RT Referenced Series Sequence" },
   2176     { 0x3006, 0x0016, "SQ", "Contour Image Sequence" },
   2177     { 0x3006, 0x0020, "SQ", "Structure Set ROI Sequence" },
   2178     { 0x3006, 0x0022, "IS", "ROI Number" },
   2179     { 0x3006, 0x0024, "UI", "Referenced Frame of Reference UID" },
   2180     { 0x3006, 0x0026, "LO", "ROI Name" },
   2181     { 0x3006, 0x0028, "ST", "ROI Description" },
   2182     { 0x3006, 0x002a, "IS", "ROI Display Color" },
   2183     { 0x3006, 0x002c, "DS", "ROI Volume" },
   2184     { 0x3006, 0x0030, "SQ", "RT Related ROI Sequence" },
   2185     { 0x3006, 0x0033, "CS", "RT ROI Relationship" },
   2186     { 0x3006, 0x0036, "CS", "ROI Generation Algorithm" },
   2187     { 0x3006, 0x0038, "LO", "ROI Generation Description" },
   2188     { 0x3006, 0x0039, "SQ", "ROI Contour Sequence" },
   2189     { 0x3006, 0x0040, "SQ", "Contour Sequence" },
   2190     { 0x3006, 0x0042, "CS", "Contour Geometric Type" },
   2191     { 0x3006, 0x0044, "DS", "Contour SlabT hickness" },
   2192     { 0x3006, 0x0045, "DS", "Contour Offset Vector" },
   2193     { 0x3006, 0x0046, "IS", "Number of Contour Points" },
   2194     { 0x3006, 0x0050, "DS", "Contour Data" },
   2195     { 0x3006, 0x0080, "SQ", "RT ROI Observations Sequence" },
   2196     { 0x3006, 0x0082, "IS", "Observation Number" },
   2197     { 0x3006, 0x0084, "IS", "Referenced ROI Number" },
   2198     { 0x3006, 0x0085, "SH", "ROI Observation Label" },
   2199     { 0x3006, 0x0086, "SQ", "RT ROI Identification Code Sequence" },
   2200     { 0x3006, 0x0088, "ST", "ROI Observation Description" },
   2201     { 0x3006, 0x00a0, "SQ", "Related RT ROI Observations Sequence" },
   2202     { 0x3006, 0x00a4, "CS", "RT ROI Interpreted Type" },
   2203     { 0x3006, 0x00a6, "PN", "ROI Interpreter" },
   2204     { 0x3006, 0x00b0, "SQ", "ROI Physical Properties Sequence" },
   2205     { 0x3006, 0x00b2, "CS", "ROI Physical Property" },
   2206     { 0x3006, 0x00b4, "DS", "ROI Physical Property Value" },
   2207     { 0x3006, 0x00c0, "SQ", "Frame of Reference Relationship Sequence" },
   2208     { 0x3006, 0x00c2, "UI", "Related Frame of Reference UID" },
   2209     { 0x3006, 0x00c4, "CS", "Frame of Reference Transformation Type" },
   2210     { 0x3006, 0x00c6, "DS", "Frame of Reference Transformation Matrix" },
   2211     { 0x3006, 0x00c8, "LO", "Frame of Reference Transformation Comment" },
   2212     { 0x300a, 0x0002, "SH", "RT Plan Label" },
   2213     { 0x300a, 0x0003, "LO", "RT Plan Name" },
   2214     { 0x300a, 0x0004, "ST", "RT Plan Description" },
   2215     { 0x300a, 0x0006, "DA", "RT Plan Date" },
   2216     { 0x300a, 0x0007, "TM", "RT Plan Time" },
   2217     { 0x300a, 0x0009, "LO", "Treatment Protocols" },
   2218     { 0x300a, 0x000a, "CS", "Treatment Intent" },
   2219     { 0x300a, 0x000b, "LO", "Treatment Sites" },
   2220     { 0x300a, 0x000c, "CS", "RT Plan Geometry" },
   2221     { 0x300a, 0x000e, "ST", "Prescription Description" },
   2222     { 0x300a, 0x0010, "SQ", "Dose ReferenceSequence" },
   2223     { 0x300a, 0x0012, "IS", "Dose ReferenceNumber" },
   2224     { 0x300a, 0x0014, "CS", "Dose Reference Structure Type" },
   2225     { 0x300a, 0x0016, "LO", "Dose ReferenceDescription" },
   2226     { 0x300a, 0x0018, "DS", "Dose Reference Point Coordinates" },
   2227     { 0x300a, 0x001a, "DS", "Nominal Prior Dose" },
   2228     { 0x300a, 0x0020, "CS", "Dose Reference Type" },
   2229     { 0x300a, 0x0021, "DS", "Constraint Weight" },
   2230     { 0x300a, 0x0022, "DS", "Delivery Warning Dose" },
   2231     { 0x300a, 0x0023, "DS", "Delivery Maximum Dose" },
   2232     { 0x300a, 0x0025, "DS", "Target Minimum Dose" },
   2233     { 0x300a, 0x0026, "DS", "Target Prescription Dose" },
   2234     { 0x300a, 0x0027, "DS", "Target Maximum Dose" },
   2235     { 0x300a, 0x0028, "DS", "Target Underdose Volume Fraction" },
   2236     { 0x300a, 0x002a, "DS", "Organ at Risk Full-volume Dose" },
   2237     { 0x300a, 0x002b, "DS", "Organ at Risk Limit Dose" },
   2238     { 0x300a, 0x002c, "DS", "Organ at Risk Maximum Dose" },
   2239     { 0x300a, 0x002d, "DS", "Organ at Risk Overdose Volume Fraction" },
   2240     { 0x300a, 0x0040, "SQ", "Tolerance Table Sequence" },
   2241     { 0x300a, 0x0042, "IS", "Tolerance Table Number" },
   2242     { 0x300a, 0x0043, "SH", "Tolerance Table Label" },
   2243     { 0x300a, 0x0044, "DS", "Gantry Angle Tolerance" },
   2244     { 0x300a, 0x0046, "DS", "Beam Limiting Device Angle Tolerance" },
   2245     { 0x300a, 0x0048, "SQ", "Beam Limiting Device Tolerance Sequence" },
   2246     { 0x300a, 0x004a, "DS", "Beam Limiting Device Position Tolerance" },
   2247     { 0x300a, 0x004c, "DS", "Patient Support Angle Tolerance" },
   2248     { 0x300a, 0x004e, "DS", "Table Top Eccentric Angle Tolerance" },
   2249     { 0x300a, 0x0051, "DS", "Table Top Vertical Position Tolerance" },
   2250     { 0x300a, 0x0052, "DS", "Table Top Longitudinal Position Tolerance" },
   2251     { 0x300a, 0x0053, "DS", "Table Top Lateral Position Tolerance" },
   2252     { 0x300a, 0x0055, "CS", "RT Plan Relationship" },
   2253     { 0x300a, 0x0070, "SQ", "Fraction Group Sequence" },
   2254     { 0x300a, 0x0071, "IS", "Fraction Group Number" },
   2255     { 0x300a, 0x0078, "IS", "Number of Fractions Planned" },
   2256     { 0x300a, 0x0079, "IS", "Number of Fractions Per Day" },
   2257     { 0x300a, 0x007a, "IS", "Repeat Fraction Cycle Length" },
   2258     { 0x300a, 0x007b, "LT", "Fraction Pattern" },
   2259     { 0x300a, 0x0080, "IS", "Number of Beams" },
   2260     { 0x300a, 0x0082, "DS", "Beam Dose Specification Point" },
   2261     { 0x300a, 0x0084, "DS", "Beam Dose" },
   2262     { 0x300a, 0x0086, "DS", "Beam Meterset" },
   2263     { 0x300a, 0x00a0, "IS", "Number of Brachy Application Setups" },
   2264     { 0x300a, 0x00a2, "DS", "Brachy Application Setup Dose Specification Point" },
   2265     { 0x300a, 0x00a4, "DS", "Brachy Application Setup Dose" },
   2266     { 0x300a, 0x00b0, "SQ", "Beam Sequence" },
   2267     { 0x300a, 0x00b2, "SH", "Treatment Machine Name " },
   2268     { 0x300a, 0x00b3, "CS", "Primary Dosimeter Unit" },
   2269     { 0x300a, 0x00b4, "DS", "Source-Axis Distance" },
   2270     { 0x300a, 0x00b6, "SQ", "Beam Limiting Device Sequence" },
   2271     { 0x300a, 0x00b8, "CS", "RT Beam Limiting Device Type" },
   2272     { 0x300a, 0x00ba, "DS", "Source to Beam Limiting Device Distance" },
   2273     { 0x300a, 0x00bc, "IS", "Number of Leaf/Jaw Pairs" },
   2274     { 0x300a, 0x00be, "DS", "Leaf Position Boundaries" },
   2275     { 0x300a, 0x00c0, "IS", "Beam Number" },
   2276     { 0x300a, 0x00c2, "LO", "Beam Name" },
   2277     { 0x300a, 0x00c3, "ST", "Beam Description" },
   2278     { 0x300a, 0x00c4, "CS", "Beam Type" },
   2279     { 0x300a, 0x00c6, "CS", "Radiation Type" },
   2280     { 0x300a, 0x00c8, "IS", "Reference Image Number" },
   2281     { 0x300a, 0x00ca, "SQ", "Planned Verification Image Sequence" },
   2282     { 0x300a, 0x00cc, "LO", "Imaging Device Specific Acquisition Parameters" },
   2283     { 0x300a, 0x00ce, "CS", "Treatment Delivery Type" },
   2284     { 0x300a, 0x00d0, "IS", "Number of Wedges" },
   2285     { 0x300a, 0x00d1, "SQ", "Wedge Sequence" },
   2286     { 0x300a, 0x00d2, "IS", "Wedge Number" },
   2287     { 0x300a, 0x00d3, "CS", "Wedge Type" },
   2288     { 0x300a, 0x00d4, "SH", "Wedge ID" },
   2289     { 0x300a, 0x00d5, "IS", "Wedge Angle" },
   2290     { 0x300a, 0x00d6, "DS", "Wedge Factor" },
   2291     { 0x300a, 0x00d8, "DS", "Wedge Orientation" },
   2292     { 0x300a, 0x00da, "DS", "Source to Wedge Tray Distance" },
   2293     { 0x300a, 0x00e0, "IS", "Number of Compensators" },
   2294     { 0x300a, 0x00e1, "SH", "Material ID" },
   2295     { 0x300a, 0x00e2, "DS", "Total Compensator Tray Factor" },
   2296     { 0x300a, 0x00e3, "SQ", "Compensator Sequence" },
   2297     { 0x300a, 0x00e4, "IS", "Compensator Number" },
   2298     { 0x300a, 0x00e5, "SH", "Compensator ID" },
   2299     { 0x300a, 0x00e6, "DS", "Source to Compensator Tray Distance" },
   2300     { 0x300a, 0x00e7, "IS", "Compensator Rows" },
   2301     { 0x300a, 0x00e8, "IS", "Compensator Columns" },
   2302     { 0x300a, 0x00e9, "DS", "Compensator Pixel Spacing" },
   2303     { 0x300a, 0x00ea, "DS", "Compensator Position" },
   2304     { 0x300a, 0x00eb, "DS", "Compensator Transmission Data" },
   2305     { 0x300a, 0x00ec, "DS", "Compensator Thickness Data" },
   2306     { 0x300a, 0x00ed, "IS", "Number of Boli" },
   2307     { 0x300a, 0x00f0, "IS", "Number of Blocks" },
   2308     { 0x300a, 0x00f2, "DS", "Total Block Tray Factor" },
   2309     { 0x300a, 0x00f4, "SQ", "Block Sequence" },
   2310     { 0x300a, 0x00f5, "SH", "Block Tray ID" },
   2311     { 0x300a, 0x00f6, "DS", "Source to Block Tray Distance" },
   2312     { 0x300a, 0x00f8, "CS", "Block Type" },
   2313     { 0x300a, 0x00fa, "CS", "Block Divergence" },
   2314     { 0x300a, 0x00fc, "IS", "Block Number" },
   2315     { 0x300a, 0x00fe, "LO", "Block Name" },
   2316     { 0x300a, 0x0100, "DS", "Block Thickness" },
   2317     { 0x300a, 0x0102, "DS", "Block Transmission" },
   2318     { 0x300a, 0x0104, "IS", "Block Number of Points" },
   2319     { 0x300a, 0x0106, "DS", "Block Data" },
   2320     { 0x300a, 0x0107, "SQ", "Applicator Sequence" },
   2321     { 0x300a, 0x0108, "SH", "Applicator ID" },
   2322     { 0x300a, 0x0109, "CS", "Applicator Type" },
   2323     { 0x300a, 0x010a, "LO", "Applicator Description" },
   2324     { 0x300a, 0x010c, "DS", "Cumulative Dose Reference Coefficient" },
   2325     { 0x300a, 0x010e, "DS", "Final Cumulative Meterset Weight" },
   2326     { 0x300a, 0x0110, "IS", "Number of Control Points" },
   2327     { 0x300a, 0x0111, "SQ", "Control Point Sequence" },
   2328     { 0x300a, 0x0112, "IS", "Control Point Index" },
   2329     { 0x300a, 0x0114, "DS", "Nominal Beam Energy" },
   2330     { 0x300a, 0x0115, "DS", "Dose Rate Set" },
   2331     { 0x300a, 0x0116, "SQ", "Wedge Position Sequence" },
   2332     { 0x300a, 0x0118, "CS", "Wedge Position" },
   2333     { 0x300a, 0x011a, "SQ", "Beam Limiting Device Position Sequence" },
   2334     { 0x300a, 0x011c, "DS", "Leaf Jaw Positions" },
   2335     { 0x300a, 0x011e, "DS", "Gantry Angle" },
   2336     { 0x300a, 0x011f, "CS", "Gantry Rotation Direction" },
   2337     { 0x300a, 0x0120, "DS", "Beam Limiting Device Angle" },
   2338     { 0x300a, 0x0121, "CS", "Beam Limiting Device Rotation Direction" },
   2339     { 0x300a, 0x0122, "DS", "Patient Support Angle" },
   2340     { 0x300a, 0x0123, "CS", "Patient Support Rotation Direction" },
   2341     { 0x300a, 0x0124, "DS", "Table Top Eccentric Axis Distance" },
   2342     { 0x300a, 0x0125, "DS", "Table Top Eccentric Angle" },
   2343     { 0x300a, 0x0126, "CS", "Table Top Eccentric Rotation Direction" },
   2344     { 0x300a, 0x0128, "DS", "Table Top Vertical Position" },
   2345     { 0x300a, 0x0129, "DS", "Table Top Longitudinal Position" },
   2346     { 0x300a, 0x012a, "DS", "Table Top Lateral Position" },
   2347     { 0x300a, 0x012c, "DS", "Isocenter Position" },
   2348     { 0x300a, 0x012e, "DS", "Surface Entry Point" },
   2349     { 0x300a, 0x0130, "DS", "Source to Surface Distance" },
   2350     { 0x300a, 0x0134, "DS", "Cumulative Meterset Weight" },
   2351     { 0x300a, 0x0180, "SQ", "Patient Setup Sequence" },
   2352     { 0x300a, 0x0182, "IS", "Patient Setup Number" },
   2353     { 0x300a, 0x0184, "LO", "Patient Additional Position" },
   2354     { 0x300a, 0x0190, "SQ", "Fixation Device Sequence" },
   2355     { 0x300a, 0x0192, "CS", "Fixation Device Type" },
   2356     { 0x300a, 0x0194, "SH", "Fixation Device Label" },
   2357     { 0x300a, 0x0196, "ST", "Fixation Device Description" },
   2358     { 0x300a, 0x0198, "SH", "Fixation Device Position" },
   2359     { 0x300a, 0x01a0, "SQ", "Shielding Device Sequence" },
   2360     { 0x300a, 0x01a2, "CS", "Shielding Device Type" },
   2361     { 0x300a, 0x01a4, "SH", "Shielding Device Label" },
   2362     { 0x300a, 0x01a6, "ST", "Shielding Device Description" },
   2363     { 0x300a, 0x01a8, "SH", "Shielding Device Position" },
   2364     { 0x300a, 0x01b0, "CS", "Setup Technique" },
   2365     { 0x300a, 0x01b2, "ST", "Setup TechniqueDescription" },
   2366     { 0x300a, 0x01b4, "SQ", "Setup Device Sequence" },
   2367     { 0x300a, 0x01b6, "CS", "Setup Device Type" },
   2368     { 0x300a, 0x01b8, "SH", "Setup Device Label" },
   2369     { 0x300a, 0x01ba, "ST", "Setup Device Description" },
   2370     { 0x300a, 0x01bc, "DS", "Setup Device Parameter" },
   2371     { 0x300a, 0x01d0, "ST", "Setup ReferenceDescription" },
   2372     { 0x300a, 0x01d2, "DS", "Table Top Vertical Setup Displacement" },
   2373     { 0x300a, 0x01d4, "DS", "Table Top Longitudinal Setup Displacement" },
   2374     { 0x300a, 0x01d6, "DS", "Table Top Lateral Setup Displacement" },
   2375     { 0x300a, 0x0200, "CS", "Brachy Treatment Technique" },
   2376     { 0x300a, 0x0202, "CS", "Brachy Treatment Type" },
   2377     { 0x300a, 0x0206, "SQ", "Treatment Machine Sequence" },
   2378     { 0x300a, 0x0210, "SQ", "Source Sequence" },
   2379     { 0x300a, 0x0212, "IS", "Source Number" },
   2380     { 0x300a, 0x0214, "CS", "Source Type" },
   2381     { 0x300a, 0x0216, "LO", "Source Manufacturer" },
   2382     { 0x300a, 0x0218, "DS", "Active Source Diameter" },
   2383     { 0x300a, 0x021a, "DS", "Active Source Length" },
   2384     { 0x300a, 0x0222, "DS", "Source Encapsulation Nominal Thickness" },
   2385     { 0x300a, 0x0224, "DS", "Source Encapsulation Nominal Transmission" },
   2386     { 0x300a, 0x0226, "LO", "Source IsotopeName" },
   2387     { 0x300a, 0x0228, "DS", "Source Isotope Half Life" },
   2388     { 0x300a, 0x022a, "DS", "Reference Air Kerma Rate" },
   2389     { 0x300a, 0x022c, "DA", "Air Kerma Rate Reference Date" },
   2390     { 0x300a, 0x022e, "TM", "Air Kerma Rate Reference Time" },
   2391     { 0x300a, 0x0230, "SQ", "Application Setup Sequence" },
   2392     { 0x300a, 0x0232, "CS", "Application Setup Type" },
   2393     { 0x300a, 0x0234, "IS", "Application Setup Number" },
   2394     { 0x300a, 0x0236, "LO", "Application Setup Name" },
   2395     { 0x300a, 0x0238, "LO", "Application Setup Manufacturer" },
   2396     { 0x300a, 0x0240, "IS", "Template Number" },
   2397     { 0x300a, 0x0242, "SH", "Template Type" },
   2398     { 0x300a, 0x0244, "LO", "Template Name" },
   2399     { 0x300a, 0x0250, "DS", "Total Reference Air Kerma" },
   2400     { 0x300a, 0x0260, "SQ", "Brachy Accessory Device Sequence" },
   2401     { 0x300a, 0x0262, "IS", "Brachy Accessory Device Number" },
   2402     { 0x300a, 0x0263, "SH", "Brachy Accessory Device ID" },
   2403     { 0x300a, 0x0264, "CS", "Brachy Accessory Device Type" },
   2404     { 0x300a, 0x0266, "LO", "Brachy Accessory Device Name" },
   2405     { 0x300a, 0x026a, "DS", "Brachy Accessory Device Nominal Thickness" },
   2406     { 0x300a, 0x026c, "DS", "Brachy Accessory Device Nominal Transmission" },
   2407     { 0x300a, 0x0280, "SQ", "Channel Sequence" },
   2408     { 0x300a, 0x0282, "IS", "Channel Number" },
   2409     { 0x300a, 0x0284, "DS", "Channel Length" },
   2410     { 0x300a, 0x0286, "DS", "Channel Total Time" },
   2411     { 0x300a, 0x0288, "CS", "Source Movement Type" },
   2412     { 0x300a, 0x028a, "IS", "Number of Pulses" },
   2413     { 0x300a, 0x028c, "DS", "Pulse Repetition Interval" },
   2414     { 0x300a, 0x0290, "IS", "Source Applicator Number" },
   2415     { 0x300a, 0x0291, "SH", "Source Applicator ID" },
   2416     { 0x300a, 0x0292, "CS", "Source Applicator Type" },
   2417     { 0x300a, 0x0294, "LO", "Source Applicator Name" },
   2418     { 0x300a, 0x0296, "DS", "Source Applicator Length" },
   2419     { 0x300a, 0x0298, "LO", "Source Applicator Manufacturer" },
   2420     { 0x300a, 0x029c, "DS", "Source Applicator Wall Nominal Thickness" },
   2421     { 0x300a, 0x029e, "DS", "Source Applicator Wall Nominal Transmission" },
   2422     { 0x300a, 0x02a0, "DS", "Source Applicator Step Size" },
   2423     { 0x300a, 0x02a2, "IS", "Transfer Tube Number" },
   2424     { 0x300a, 0x02a4, "DS", "Transfer Tube Length" },
   2425     { 0x300a, 0x02b0, "SQ", "Channel Shield Sequence" },
   2426     { 0x300a, 0x02b2, "IS", "Channel Shield Number" },
   2427     { 0x300a, 0x02b3, "SH", "Channel Shield ID" },
   2428     { 0x300a, 0x02b4, "LO", "Channel Shield Name" },
   2429     { 0x300a, 0x02b8, "DS", "Channel Shield Nominal Thickness" },
   2430     { 0x300a, 0x02ba, "DS", "Channel Shield Nominal Transmission" },
   2431     { 0x300a, 0x02c8, "DS", "Final Cumulative Time Weight" },
   2432     { 0x300a, 0x02d0, "SQ", "Brachy Control Point Sequence" },
   2433     { 0x300a, 0x02d2, "DS", "Control Point Relative Position" },
   2434     { 0x300a, 0x02d4, "DS", "Control Point 3D Position" },
   2435     { 0x300a, 0x02d6, "DS", "Cumulative Time Weight" },
   2436     { 0x300c, 0x0002, "SQ", "Referenced RT Plan Sequence" },
   2437     { 0x300c, 0x0004, "SQ", "Referenced Beam Sequence" },
   2438     { 0x300c, 0x0006, "IS", "Referenced Beam Number" },
   2439     { 0x300c, 0x0007, "IS", "Referenced Reference Image Number" },
   2440     { 0x300c, 0x0008, "DS", "Start Cumulative Meterset Weight" },
   2441     { 0x300c, 0x0009, "DS", "End Cumulative Meterset Weight" },
   2442     { 0x300c, 0x000a, "SQ", "Referenced Brachy Application Setup Sequence" },
   2443     { 0x300c, 0x000c, "IS", "Referenced Brachy Application Setup Number" },
   2444     { 0x300c, 0x000e, "IS", "Referenced Source Number" },
   2445     { 0x300c, 0x0020, "SQ", "Referenced Fraction Group Sequence" },
   2446     { 0x300c, 0x0022, "IS", "Referenced Fraction Group Number" },
   2447     { 0x300c, 0x0040, "SQ", "Referenced Verification Image Sequence" },
   2448     { 0x300c, 0x0042, "SQ", "Referenced Reference Image Sequence" },
   2449     { 0x300c, 0x0050, "SQ", "Referenced Dose Reference Sequence" },
   2450     { 0x300c, 0x0051, "IS", "Referenced Dose Reference Number" },
   2451     { 0x300c, 0x0055, "SQ", "Brachy Referenced Dose Reference Sequence" },
   2452     { 0x300c, 0x0060, "SQ", "Referenced Structure Set Sequence" },
   2453     { 0x300c, 0x006a, "IS", "Referenced Patient Setup Number" },
   2454     { 0x300c, 0x0080, "SQ", "Referenced Dose Sequence" },
   2455     { 0x300c, 0x00a0, "IS", "Referenced Tolerance Table Number" },
   2456     { 0x300c, 0x00b0, "SQ", "Referenced Bolus Sequence" },
   2457     { 0x300c, 0x00c0, "IS", "Referenced Wedge Number" },
   2458     { 0x300c, 0x00d0, "IS", "Referenced Compensato rNumber" },
   2459     { 0x300c, 0x00e0, "IS", "Referenced Block Number" },
   2460     { 0x300c, 0x00f0, "IS", "Referenced Control Point" },
   2461     { 0x300e, 0x0002, "CS", "Approval Status" },
   2462     { 0x300e, 0x0004, "DA", "Review Date" },
   2463     { 0x300e, 0x0005, "TM", "Review Time" },
   2464     { 0x300e, 0x0008, "PN", "Reviewer Name" },
   2465     { 0x4000, 0x0000, "UL", "Text Group Length" },
   2466     { 0x4000, 0x0010, "LT", "Text Arbitrary" },
   2467     { 0x4000, 0x4000, "LT", "Text Comments" },
   2468     { 0x4008, 0x0000, "UL", "Results Group Length" },
   2469     { 0x4008, 0x0040, "SH", "Results ID" },
   2470     { 0x4008, 0x0042, "LO", "Results ID Issuer" },
   2471     { 0x4008, 0x0050, "SQ", "Referenced Interpretation Sequence" },
   2472     { 0x4008, 0x00ff, "CS", "Report Production Status" },
   2473     { 0x4008, 0x0100, "DA", "Interpretation Recorded Date" },
   2474     { 0x4008, 0x0101, "TM", "Interpretation Recorded Time" },
   2475     { 0x4008, 0x0102, "PN", "Interpretation Recorder" },
   2476     { 0x4008, 0x0103, "LO", "Reference to Recorded Sound" },
   2477     { 0x4008, 0x0108, "DA", "Interpretation Transcription Date" },
   2478     { 0x4008, 0x0109, "TM", "Interpretation Transcription Time" },
   2479     { 0x4008, 0x010a, "PN", "Interpretation Transcriber" },
   2480     { 0x4008, 0x010b, "ST", "Interpretation Text" },
   2481     { 0x4008, 0x010c, "PN", "Interpretation Author" },
   2482     { 0x4008, 0x0111, "SQ", "Interpretation Approver Sequence" },
   2483     { 0x4008, 0x0112, "DA", "Interpretation Approval Date" },
   2484     { 0x4008, 0x0113, "TM", "Interpretation Approval Time" },
   2485     { 0x4008, 0x0114, "PN", "Physician Approving Interpretation" },
   2486     { 0x4008, 0x0115, "LT", "Interpretation Diagnosis Description" },
   2487     { 0x4008, 0x0117, "SQ", "InterpretationDiagnosis Code Sequence" },
   2488     { 0x4008, 0x0118, "SQ", "Results Distribution List Sequence" },
   2489     { 0x4008, 0x0119, "PN", "Distribution Name" },
   2490     { 0x4008, 0x011a, "LO", "Distribution Address" },
   2491     { 0x4008, 0x0200, "SH", "Interpretation ID" },
   2492     { 0x4008, 0x0202, "LO", "Interpretation ID Issuer" },
   2493     { 0x4008, 0x0210, "CS", "Interpretation Type ID" },
   2494     { 0x4008, 0x0212, "CS", "Interpretation Status ID" },
   2495     { 0x4008, 0x0300, "ST", "Impressions" },
   2496     { 0x4008, 0x4000, "ST", "Results Comments" },
   2497     { 0x4009, 0x0001, "LT", "Report ID" },
   2498     { 0x4009, 0x0020, "LT", "Report Status" },
   2499     { 0x4009, 0x0030, "DA", "Report Creation Date" },
   2500     { 0x4009, 0x0070, "LT", "Report Approving Physician" },
   2501     { 0x4009, 0x00e0, "LT", "Report Text" },
   2502     { 0x4009, 0x00e1, "LT", "Report Author" },
   2503     { 0x4009, 0x00e3, "LT", "Reporting Radiologist" },
   2504     { 0x5000, 0x0000, "UL", "Curve Group Length" },
   2505     { 0x5000, 0x0005, "US", "Curve Dimensions" },
   2506     { 0x5000, 0x0010, "US", "Number of Points" },
   2507     { 0x5000, 0x0020, "CS", "Type of Data" },
   2508     { 0x5000, 0x0022, "LO", "Curve Description" },
   2509     { 0x5000, 0x0030, "SH", "Axis Units" },
   2510     { 0x5000, 0x0040, "SH", "Axis Labels" },
   2511     { 0x5000, 0x0103, "US", "Data Value Representation" },
   2512     { 0x5000, 0x0104, "US", "Minimum Coordinate Value" },
   2513     { 0x5000, 0x0105, "US", "Maximum Coordinate Value" },
   2514     { 0x5000, 0x0106, "SH", "Curve Range" },
   2515     { 0x5000, 0x0110, "US", "Curve Data Descriptor" },
   2516     { 0x5000, 0x0112, "US", "Coordinate Start Value" },
   2517     { 0x5000, 0x0114, "US", "Coordinate Step Value" },
   2518     { 0x5000, 0x1001, "CS", "Curve Activation Layer" },
   2519     { 0x5000, 0x2000, "US", "Audio Type" },
   2520     { 0x5000, 0x2002, "US", "Audio Sample Format" },
   2521     { 0x5000, 0x2004, "US", "Number of Channels" },
   2522     { 0x5000, 0x2006, "UL", "Number of Samples" },
   2523     { 0x5000, 0x2008, "UL", "Sample Rate" },
   2524     { 0x5000, 0x200a, "UL", "Total Time" },
   2525     { 0x5000, 0x200c, "xs", "Audio Sample Data" },
   2526     { 0x5000, 0x200e, "LT", "Audio Comments" },
   2527     { 0x5000, 0x2500, "LO", "Curve Label" },
   2528     { 0x5000, 0x2600, "SQ", "CurveReferenced Overlay Sequence" },
   2529     { 0x5000, 0x2610, "US", "CurveReferenced Overlay Group" },
   2530     { 0x5000, 0x3000, "OW", "Curve Data" },
   2531     { 0x6000, 0x0000, "UL", "Overlay Group Length" },
   2532     { 0x6000, 0x0001, "US", "Gray Palette Color Lookup Table Descriptor" },
   2533     { 0x6000, 0x0002, "US", "Gray Palette Color Lookup Table Data" },
   2534     { 0x6000, 0x0010, "US", "Overlay Rows" },
   2535     { 0x6000, 0x0011, "US", "Overlay Columns" },
   2536     { 0x6000, 0x0012, "US", "Overlay Planes" },
   2537     { 0x6000, 0x0015, "IS", "Number of Frames in Overlay" },
   2538     { 0x6000, 0x0022, "LO", "Overlay Description" },
   2539     { 0x6000, 0x0040, "CS", "Overlay Type" },
   2540     { 0x6000, 0x0045, "CS", "Overlay Subtype" },
   2541     { 0x6000, 0x0050, "SS", "Overlay Origin" },
   2542     { 0x6000, 0x0051, "US", "Image Frame Origin" },
   2543     { 0x6000, 0x0052, "US", "Plane Origin" },
   2544     { 0x6000, 0x0060, "LO", "Overlay Compression Code" },
   2545     { 0x6000, 0x0061, "SH", "Overlay Compression Originator" },
   2546     { 0x6000, 0x0062, "SH", "Overlay Compression Label" },
   2547     { 0x6000, 0x0063, "SH", "Overlay Compression Description" },
   2548     { 0x6000, 0x0066, "AT", "Overlay Compression Step Pointers" },
   2549     { 0x6000, 0x0068, "US", "Overlay Repeat Interval" },
   2550     { 0x6000, 0x0069, "US", "Overlay Bits Grouped" },
   2551     { 0x6000, 0x0100, "US", "Overlay Bits Allocated" },
   2552     { 0x6000, 0x0102, "US", "Overlay Bit Position" },
   2553     { 0x6000, 0x0110, "LO", "Overlay Format" },
   2554     { 0x6000, 0x0200, "xs", "Overlay Location" },
   2555     { 0x6000, 0x0800, "LO", "Overlay Code Label" },
   2556     { 0x6000, 0x0802, "US", "Overlay Number of Tables" },
   2557     { 0x6000, 0x0803, "AT", "Overlay Code Table Location" },
   2558     { 0x6000, 0x0804, "US", "Overlay Bits For Code Word" },
   2559     { 0x6000, 0x1001, "CS", "Overlay Activation Layer" },
   2560     { 0x6000, 0x1100, "US", "Overlay Descriptor - Gray" },
   2561     { 0x6000, 0x1101, "US", "Overlay Descriptor - Red" },
   2562     { 0x6000, 0x1102, "US", "Overlay Descriptor - Green" },
   2563     { 0x6000, 0x1103, "US", "Overlay Descriptor - Blue" },
   2564     { 0x6000, 0x1200, "US", "Overlays - Gray" },
   2565     { 0x6000, 0x1201, "US", "Overlays - Red" },
   2566     { 0x6000, 0x1202, "US", "Overlays - Green" },
   2567     { 0x6000, 0x1203, "US", "Overlays - Blue" },
   2568     { 0x6000, 0x1301, "IS", "ROI Area" },
   2569     { 0x6000, 0x1302, "DS", "ROI Mean" },
   2570     { 0x6000, 0x1303, "DS", "ROI Standard Deviation" },
   2571     { 0x6000, 0x1500, "LO", "Overlay Label" },
   2572     { 0x6000, 0x3000, "OW", "Overlay Data" },
   2573     { 0x6000, 0x4000, "LT", "Overlay Comments" },
   2574     { 0x6001, 0x0000, "UN", "?" },
   2575     { 0x6001, 0x0010, "LO", "?" },
   2576     { 0x6001, 0x1010, "xs", "?" },
   2577     { 0x6001, 0x1030, "xs", "?" },
   2578     { 0x6021, 0x0000, "xs", "?" },
   2579     { 0x6021, 0x0010, "xs", "?" },
   2580     { 0x7001, 0x0010, "LT", "Dummy" },
   2581     { 0x7003, 0x0010, "LT", "Info" },
   2582     { 0x7005, 0x0010, "LT", "Dummy" },
   2583     { 0x7000, 0x0004, "ST", "TextAnnotation" },
   2584     { 0x7000, 0x0005, "IS", "Box" },
   2585     { 0x7000, 0x0007, "IS", "ArrowEnd" },
   2586     { 0x7001, 0x0001, "SL", "Private Group Length To End" },
   2587     { 0x7001, 0x0002, "OB", "Unknown" },
   2588     { 0x7001, 0x0011, "SL", "Private Creator" },
   2589     { 0x7001, 0x0021, "SL", "Private Creator" },
   2590     { 0x7001, 0x0022, "SQ", "Private Creator" },
   2591     { 0x7001, 0x0041, "SL", "Private Creator" },
   2592     { 0x7001, 0x0042, "SL", "Private Creator" },
   2593     { 0x7001, 0x0051, "SL", "Private Creator" },
   2594     { 0x7001, 0x0052, "SL", "Private Creator" },
   2595     { 0x7001, 0x0075, "SL", "Private Creator" },
   2596     { 0x7001, 0x0076, "SL", "Private Creator" },
   2597     { 0x7001, 0x0077, "OB", "Private Creator" },
   2598     { 0x7001, 0x0101, "SL", "Unknown" },
   2599     { 0x7001, 0x0121, "SL", "Unknown" },
   2600     { 0x7001, 0x0122, "SQ", "Unknown" },
   2601     { 0x7fe0, 0x0000, "UL", "Pixel Data Group Length" },
   2602     { 0x7fe0, 0x0010, "xs", "Pixel Data" },
   2603     { 0x7fe0, 0x0020, "OW", "Coefficients SDVN" },
   2604     { 0x7fe0, 0x0030, "OW", "Coefficients SDHN" },
   2605     { 0x7fe0, 0x0040, "OW", "Coefficients SDDN" },
   2606     { 0x7fe1, 0x0010, "xs", "Pixel Data" },
   2607     { 0x7f00, 0x0000, "UL", "Variable Pixel Data Group Length" },
   2608     { 0x7f00, 0x0010, "xs", "Variable Pixel Data" },
   2609     { 0x7f00, 0x0011, "US", "Variable Next Data Group" },
   2610     { 0x7f00, 0x0020, "OW", "Variable Coefficients SDVN" },
   2611     { 0x7f00, 0x0030, "OW", "Variable Coefficients SDHN" },
   2612     { 0x7f00, 0x0040, "OW", "Variable Coefficients SDDN" },
   2613     { 0x7fe1, 0x0000, "OB", "Binary Data" },
   2614     { 0x7fe3, 0x0000, "LT", "Image Graphics Format Code" },
   2615     { 0x7fe3, 0x0010, "OB", "Image Graphics" },
   2616     { 0x7fe3, 0x0020, "OB", "Image Graphics Dummy" },
   2617     { 0x7ff1, 0x0001, "US", "?" },
   2618     { 0x7ff1, 0x0002, "US", "?" },
   2619     { 0x7ff1, 0x0003, "xs", "?" },
   2620     { 0x7ff1, 0x0004, "IS", "?" },
   2621     { 0x7ff1, 0x0005, "US", "?" },
   2622     { 0x7ff1, 0x0007, "US", "?" },
   2623     { 0x7ff1, 0x0008, "US", "?" },
   2624     { 0x7ff1, 0x0009, "US", "?" },
   2625     { 0x7ff1, 0x000a, "LT", "?" },
   2626     { 0x7ff1, 0x000b, "US", "?" },
   2627     { 0x7ff1, 0x000c, "US", "?" },
   2628     { 0x7ff1, 0x000d, "US", "?" },
   2629     { 0x7ff1, 0x0010, "US", "?" },
   2630     { 0xfffc, 0xfffc, "OB", "Data Set Trailing Padding" },
   2631     { 0xfffe, 0xe000, "!!", "Item" },
   2632     { 0xfffe, 0xe00d, "!!", "Item Delimitation Item" },
   2633     { 0xfffe, 0xe0dd, "!!", "Sequence Delimitation Item" },
   2634     { 0xffff, 0xffff, "xs", (char *) NULL }
   2635   };
   2636 
   2637 /*
   2639 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2640 %                                                                             %
   2641 %                                                                             %
   2642 %                                                                             %
   2643 %   I s D C M                                                                 %
   2644 %                                                                             %
   2645 %                                                                             %
   2646 %                                                                             %
   2647 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2648 %
   2649 %  IsDCM() returns MagickTrue if the image format type, identified by the
   2650 %  magick string, is DCM.
   2651 %
   2652 %  The format of the IsDCM method is:
   2653 %
   2654 %      MagickBooleanType IsDCM(const unsigned char *magick,const size_t length)
   2655 %
   2656 %  A description of each parameter follows:
   2657 %
   2658 %    o magick: compare image format pattern against these bytes.
   2659 %
   2660 %    o length: Specifies the length of the magick string.
   2661 %
   2662 */
   2663 static MagickBooleanType IsDCM(const unsigned char *magick,const size_t length)
   2664 {
   2665   if (length < 132)
   2666     return(MagickFalse);
   2667   if (LocaleNCompare((char *) (magick+128),"DICM",4) == 0)
   2668     return(MagickTrue);
   2669   return(MagickFalse);
   2670 }
   2671 
   2672 /*
   2674 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2675 %                                                                             %
   2676 %                                                                             %
   2677 %                                                                             %
   2678 %   R e a d D C M I m a g e                                                   %
   2679 %                                                                             %
   2680 %                                                                             %
   2681 %                                                                             %
   2682 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   2683 %
   2684 %  ReadDCMImage() reads a Digital Imaging and Communications in Medicine
   2685 %  (DICOM) file and returns it.  It allocates the memory necessary for the
   2686 %  new Image structure and returns a pointer to the new image.
   2687 %
   2688 %  The format of the ReadDCMImage method is:
   2689 %
   2690 %      Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception)
   2691 %
   2692 %  A description of each parameter follows:
   2693 %
   2694 %    o image_info: the image info.
   2695 %
   2696 %    o exception: return any errors or warnings in this structure.
   2697 %
   2698 */
   2699 typedef struct _DCMInfo
   2700 {
   2701   MagickBooleanType
   2702     polarity;
   2703 
   2704   Quantum
   2705     *scale;
   2706 
   2707   size_t
   2708     bits_allocated,
   2709     bytes_per_pixel,
   2710     depth,
   2711     mask,
   2712     max_value,
   2713     samples_per_pixel,
   2714     signed_data,
   2715     significant_bits;
   2716 
   2717   MagickBooleanType
   2718     rescale;
   2719 
   2720   double
   2721     rescale_intercept,
   2722     rescale_slope,
   2723     window_center,
   2724     window_width;
   2725 } DCMInfo;
   2726 
   2727 typedef struct _DCMStreamInfo
   2728 {
   2729   size_t
   2730     remaining,
   2731     segment_count;
   2732 
   2733   ssize_t
   2734     segments[15];
   2735 
   2736   size_t
   2737     offset_count;
   2738 
   2739   ssize_t
   2740     *offsets;
   2741 
   2742   ssize_t
   2743     count;
   2744 
   2745   int
   2746     byte;
   2747 } DCMStreamInfo;
   2748 
   2749 static int ReadDCMByte(DCMStreamInfo *stream_info,Image *image)
   2750 {
   2751   if (image->compression != RLECompression)
   2752     return(ReadBlobByte(image));
   2753   if (stream_info->count == 0)
   2754     {
   2755       int
   2756         byte;
   2757 
   2758       ssize_t
   2759         count;
   2760 
   2761       if (stream_info->remaining <= 2)
   2762         stream_info->remaining=0;
   2763       else
   2764         stream_info->remaining-=2;
   2765       count=(ssize_t) ReadBlobByte(image);
   2766       byte=ReadBlobByte(image);
   2767       if (count == 128)
   2768         return(0);
   2769       else
   2770         if (count < 128)
   2771           {
   2772             /*
   2773               Literal bytes.
   2774             */
   2775             stream_info->count=count;
   2776             stream_info->byte=(-1);
   2777             return(byte);
   2778           }
   2779         else
   2780           {
   2781             /*
   2782               Repeated bytes.
   2783             */
   2784             stream_info->count=256-count;
   2785             stream_info->byte=byte;
   2786             return(byte);
   2787           }
   2788     }
   2789   stream_info->count--;
   2790   if (stream_info->byte >= 0)
   2791     return(stream_info->byte);
   2792   if (stream_info->remaining > 0)
   2793     stream_info->remaining--;
   2794   return(ReadBlobByte(image));
   2795 }
   2796 
   2797 static unsigned short ReadDCMShort(DCMStreamInfo *stream_info,Image *image)
   2798 {
   2799   int
   2800     shift,
   2801     byte;
   2802 
   2803   unsigned short
   2804     value;
   2805 
   2806   if (image->compression != RLECompression)
   2807     return(ReadBlobLSBShort(image));
   2808   shift=image->depth < 16 ? 4 : 8;
   2809   value=(unsigned short) ReadDCMByte(stream_info,image);
   2810   byte=ReadDCMByte(stream_info,image);
   2811   if (byte < 0)
   2812     return(0);
   2813   value|=(unsigned short) (byte << shift);
   2814   return(value);
   2815 }
   2816 
   2817 static signed short ReadDCMSignedShort(DCMStreamInfo *stream_info,Image *image)
   2818 {
   2819   union
   2820   {
   2821     unsigned short
   2822       unsigned_value;
   2823 
   2824     signed short
   2825       signed_value;
   2826   } quantum;
   2827 
   2828   quantum.unsigned_value=ReadDCMShort(stream_info,image);
   2829   return(quantum.signed_value);
   2830 }
   2831 
   2832 static MagickBooleanType ReadDCMPixels(Image *image,DCMInfo *info,
   2833   DCMStreamInfo *stream_info,MagickBooleanType first_segment,
   2834   ExceptionInfo *exception)
   2835 {
   2836   int
   2837     byte,
   2838     index;
   2839 
   2840   MagickBooleanType
   2841     status;
   2842 
   2843   PixelPacket
   2844     pixel;
   2845 
   2846   register ssize_t
   2847     i,
   2848     x;
   2849 
   2850   register Quantum
   2851     *q;
   2852 
   2853   ssize_t
   2854     y;
   2855 
   2856   /*
   2857     Convert DCM Medical image to pixel packets.
   2858   */
   2859   byte=0;
   2860   i=0;
   2861   status=MagickTrue;
   2862   (void) memset(&pixel,0,sizeof(pixel));
   2863   for (y=0; y < (ssize_t) image->rows; y++)
   2864   {
   2865     q=QueueAuthenticPixels(image,0,y,image->columns,1,exception);
   2866     if (q == (Quantum *) NULL)
   2867       break;
   2868     for (x=0; x < (ssize_t) image->columns; x++)
   2869     {
   2870       if (info->samples_per_pixel == 1)
   2871         {
   2872           int
   2873             pixel_value;
   2874 
   2875           if (info->bytes_per_pixel == 1)
   2876             pixel_value=info->polarity != MagickFalse ?
   2877               ((int) info->max_value-ReadDCMByte(stream_info,image)) :
   2878               ReadDCMByte(stream_info,image);
   2879           else
   2880             if ((info->bits_allocated != 12) || (info->significant_bits != 12))
   2881               {
   2882                 if (info->signed_data != 0)
   2883                   pixel_value=ReadDCMSignedShort(stream_info,image);
   2884                 else
   2885                   pixel_value=(int) ReadDCMShort(stream_info,image);
   2886                 if (info->polarity != MagickFalse)
   2887                   pixel_value=(int)info->max_value-pixel_value;
   2888               }
   2889             else
   2890               {
   2891                 if ((i & 0x01) != 0)
   2892                   {
   2893                     pixel_value=byte;
   2894                     byte=ReadDCMByte(stream_info,image);
   2895                     if (byte >= 0)
   2896                       pixel_value|=(byte << 8);
   2897                   }
   2898                 else
   2899                   {
   2900                     pixel_value=ReadDCMSignedShort(stream_info,image);
   2901                     byte=(int) (pixel_value & 0x0f);
   2902                     pixel_value>>=4;
   2903                   }
   2904                 i++;
   2905               }
   2906           if (info->signed_data == 1)
   2907             pixel_value-=32767;
   2908           index=pixel_value;
   2909           if (info->rescale != MagickFalse)
   2910             {
   2911               double
   2912                 scaled_value;
   2913 
   2914               scaled_value=pixel_value*info->rescale_slope+
   2915                 info->rescale_intercept;
   2916               index=(int) scaled_value;
   2917               if (info->window_width != 0)
   2918                 {
   2919                   double
   2920                     window_max,
   2921                     window_min;
   2922 
   2923                   window_min=ceil(info->window_center-
   2924                     (info->window_width-1.0)/2.0-0.5);
   2925                   window_max=floor(info->window_center+
   2926                     (info->window_width-1.0)/2.0+0.5);
   2927                   if (scaled_value <= window_min)
   2928                     index=0;
   2929                   else
   2930                     if (scaled_value > window_max)
   2931                       index=(int) info->max_value;
   2932                     else
   2933                       index=(int) (info->max_value*(((scaled_value-
   2934                         info->window_center-0.5)/(info->window_width-1))+0.5));
   2935                 }
   2936             }
   2937           index&=info->mask;
   2938           index=(int) ConstrainColormapIndex(image,(ssize_t) index,exception);
   2939           if (first_segment)
   2940             SetPixelIndex(image,(Quantum) index,q);
   2941           else
   2942             SetPixelIndex(image,(Quantum) (((size_t) index) |
   2943               (((size_t) GetPixelIndex(image,q)) << 8)),q);
   2944           pixel.red=(unsigned int) image->colormap[index].red;
   2945           pixel.green=(unsigned int) image->colormap[index].green;
   2946           pixel.blue=(unsigned int) image->colormap[index].blue;
   2947         }
   2948       else
   2949         {
   2950           if (info->bytes_per_pixel == 1)
   2951             {
   2952               pixel.red=(unsigned int) ReadDCMByte(stream_info,image);
   2953               pixel.green=(unsigned int) ReadDCMByte(stream_info,image);
   2954               pixel.blue=(unsigned int) ReadDCMByte(stream_info,image);
   2955             }
   2956           else
   2957             {
   2958               pixel.red=ReadDCMShort(stream_info,image);
   2959               pixel.green=ReadDCMShort(stream_info,image);
   2960               pixel.blue=ReadDCMShort(stream_info,image);
   2961             }
   2962           pixel.red&=info->mask;
   2963           pixel.green&=info->mask;
   2964           pixel.blue&=info->mask;
   2965           if (info->scale != (Quantum *) NULL)
   2966             {
   2967               if ((MagickSizeType) pixel.red <= GetQuantumRange(info->depth))
   2968                 pixel.red=(unsigned int) info->scale[pixel.red];
   2969               if ((MagickSizeType) pixel.green <= GetQuantumRange(info->depth))
   2970                 pixel.green=(unsigned int) info->scale[pixel.green];
   2971               if ((MagickSizeType) pixel.blue <= GetQuantumRange(info->depth))
   2972                 pixel.blue=(unsigned int) info->scale[pixel.blue];
   2973             }
   2974         }
   2975       if (first_segment != MagickFalse)
   2976         {
   2977           SetPixelRed(image,(Quantum) pixel.red,q);
   2978           SetPixelGreen(image,(Quantum) pixel.green,q);
   2979           SetPixelBlue(image,(Quantum) pixel.blue,q);
   2980         }
   2981       else
   2982         {
   2983           SetPixelRed(image,(Quantum) (((size_t) pixel.red) |
   2984             (((size_t) GetPixelRed(image,q)) << 8)),q);
   2985           SetPixelGreen(image,(Quantum) (((size_t) pixel.green) |
   2986             (((size_t) GetPixelGreen(image,q)) << 8)),q);
   2987           SetPixelBlue(image,(Quantum) (((size_t) pixel.blue) |
   2988             (((size_t) GetPixelBlue(image,q)) << 8)),q);
   2989         }
   2990       q+=GetPixelChannels(image);
   2991     }
   2992     if (SyncAuthenticPixels(image,exception) == MagickFalse)
   2993       break;
   2994     if (image->previous == (Image *) NULL)
   2995       {
   2996         status=SetImageProgress(image,LoadImageTag,(MagickOffsetType) y,
   2997           image->rows);
   2998         if (status == MagickFalse)
   2999           break;
   3000       }
   3001   }
   3002   return(status);
   3003 }
   3004 
   3005 static Image *ReadDCMImage(const ImageInfo *image_info,ExceptionInfo *exception)
   3006 {
   3007 #define ThrowDCMException(exception,message) \
   3008 { \
   3009   if (info.scale != (Quantum *) NULL) \
   3010     info.scale=(Quantum *) RelinquishMagickMemory(info.scale); \
   3011   if (data != (unsigned char *) NULL) \
   3012     data=(unsigned char *) RelinquishMagickMemory(data); \
   3013   if (graymap != (int *) NULL) \
   3014     graymap=(int *) RelinquishMagickMemory(graymap); \
   3015   if (bluemap != (int *) NULL) \
   3016     bluemap=(int *) RelinquishMagickMemory(bluemap); \
   3017   if (greenmap != (int *) NULL) \
   3018     greenmap=(int *) RelinquishMagickMemory(greenmap); \
   3019   if (redmap != (int *) NULL) \
   3020     redmap=(int *) RelinquishMagickMemory(redmap); \
   3021   if (stream_info->offsets != (ssize_t *) NULL) \
   3022     stream_info->offsets=(ssize_t *) RelinquishMagickMemory( \
   3023       stream_info->offsets); \
   3024   if (stream_info != (DCMStreamInfo *) NULL) \
   3025     stream_info=(DCMStreamInfo *) RelinquishMagickMemory(stream_info); \
   3026   ThrowReaderException((exception),(message)); \
   3027 }
   3028 
   3029   char
   3030     explicit_vr[MagickPathExtent],
   3031     implicit_vr[MagickPathExtent],
   3032     magick[MagickPathExtent],
   3033     photometric[MagickPathExtent];
   3034 
   3035   DCMInfo
   3036     info;
   3037 
   3038   DCMStreamInfo
   3039     *stream_info;
   3040 
   3041   Image
   3042     *image;
   3043 
   3044   int
   3045     *bluemap,
   3046     datum,
   3047     *greenmap,
   3048     *graymap,
   3049     *redmap;
   3050 
   3051   MagickBooleanType
   3052     explicit_file,
   3053     explicit_retry,
   3054     use_explicit;
   3055 
   3056   MagickOffsetType
   3057     offset;
   3058 
   3059   register unsigned char
   3060     *p;
   3061 
   3062   register ssize_t
   3063     i;
   3064 
   3065   size_t
   3066     colors,
   3067     height,
   3068     length,
   3069     number_scenes,
   3070     quantum,
   3071     status,
   3072     width;
   3073 
   3074   ssize_t
   3075     count,
   3076     scene;
   3077 
   3078   unsigned char
   3079     *data;
   3080 
   3081   unsigned short
   3082     group,
   3083     element;
   3084 
   3085   /*
   3086     Open image file.
   3087   */
   3088   assert(image_info != (const ImageInfo *) NULL);
   3089   assert(image_info->signature == MagickCoreSignature);
   3090   if (image_info->debug != MagickFalse)
   3091     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
   3092       image_info->filename);
   3093   assert(exception != (ExceptionInfo *) NULL);
   3094   assert(exception->signature == MagickCoreSignature);
   3095   image=AcquireImage(image_info,exception);
   3096   status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
   3097   if (status == MagickFalse)
   3098     {
   3099       image=DestroyImageList(image);
   3100       return((Image *) NULL);
   3101     }
   3102   image->depth=8UL;
   3103   image->endian=LSBEndian;
   3104   /*
   3105     Read DCM preamble.
   3106   */
   3107   (void) memset(&info,0,sizeof(info));
   3108   data=(unsigned char *) NULL;
   3109   graymap=(int *) NULL;
   3110   redmap=(int *) NULL;
   3111   greenmap=(int *) NULL;
   3112   bluemap=(int *) NULL;
   3113   stream_info=(DCMStreamInfo *) AcquireMagickMemory(sizeof(*stream_info));
   3114   if (stream_info == (DCMStreamInfo *) NULL)
   3115     ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3116   (void) memset(stream_info,0,sizeof(*stream_info));
   3117   count=ReadBlob(image,128,(unsigned char *) magick);
   3118   if (count != 128)
   3119     ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3120   count=ReadBlob(image,4,(unsigned char *) magick);
   3121   if ((count != 4) || (LocaleNCompare(magick,"DICM",4) != 0))
   3122     {
   3123       offset=SeekBlob(image,0L,SEEK_SET);
   3124       if (offset < 0)
   3125         ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3126     }
   3127   /*
   3128     Read DCM Medical image.
   3129   */
   3130   (void) CopyMagickString(photometric,"MONOCHROME1 ",MagickPathExtent);
   3131   info.bits_allocated=8;
   3132   info.bytes_per_pixel=1;
   3133   info.depth=8;
   3134   info.mask=0xffff;
   3135   info.max_value=255UL;
   3136   info.samples_per_pixel=1;
   3137   info.signed_data=(~0UL);
   3138   info.rescale_slope=1.0;
   3139   data=(unsigned char *) NULL;
   3140   element=0;
   3141   explicit_vr[2]='\0';
   3142   explicit_file=MagickFalse;
   3143   colors=0;
   3144   redmap=(int *) NULL;
   3145   greenmap=(int *) NULL;
   3146   bluemap=(int *) NULL;
   3147   graymap=(int *) NULL;
   3148   height=0;
   3149   number_scenes=1;
   3150   use_explicit=MagickFalse;
   3151   explicit_retry = MagickFalse;
   3152   width=0;
   3153   while (TellBlob(image) < (MagickOffsetType) GetBlobSize(image))
   3154   {
   3155     for (group=0; (group != 0x7FE0) || (element != 0x0010) ; )
   3156     {
   3157       /*
   3158         Read a group.
   3159       */
   3160       image->offset=(ssize_t) TellBlob(image);
   3161       group=ReadBlobLSBShort(image);
   3162       element=ReadBlobLSBShort(image);
   3163       if ((group == 0xfffc) && (element == 0xfffc))
   3164         break;
   3165       if ((group != 0x0002) && (image->endian == MSBEndian))
   3166         {
   3167           group=(unsigned short) ((group << 8) | ((group >> 8) & 0xFF));
   3168           element=(unsigned short) ((element << 8) | ((element >> 8) & 0xFF));
   3169         }
   3170       quantum=0;
   3171       /*
   3172         Find corresponding VR for this group and element.
   3173       */
   3174       for (i=0; dicom_info[i].group < 0xffff; i++)
   3175         if ((group == dicom_info[i].group) &&
   3176             (element == dicom_info[i].element))
   3177           break;
   3178       (void) CopyMagickString(implicit_vr,dicom_info[i].vr,MagickPathExtent);
   3179       count=ReadBlob(image,2,(unsigned char *) explicit_vr);
   3180       if (count != 2)
   3181         ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3182       /*
   3183         Check for "explicitness", but meta-file headers always explicit.
   3184       */
   3185       if ((explicit_file == MagickFalse) && (group != 0x0002))
   3186         explicit_file=(isupper((unsigned char) *explicit_vr) != MagickFalse) &&
   3187           (isupper((unsigned char) *(explicit_vr+1)) != MagickFalse) ?
   3188           MagickTrue : MagickFalse;
   3189       use_explicit=((group == 0x0002) && (explicit_retry == MagickFalse)) ||
   3190         (explicit_file != MagickFalse) ? MagickTrue : MagickFalse;
   3191       if ((use_explicit != MagickFalse) && (strncmp(implicit_vr,"xs",2) == 0))
   3192         (void) CopyMagickString(implicit_vr,explicit_vr,MagickPathExtent);
   3193       if ((use_explicit == MagickFalse) || (strncmp(implicit_vr,"!!",2) == 0))
   3194         {
   3195           offset=SeekBlob(image,(MagickOffsetType) -2,SEEK_CUR);
   3196           if (offset < 0)
   3197             ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3198           quantum=4;
   3199         }
   3200       else
   3201         {
   3202           /*
   3203             Assume explicit type.
   3204           */
   3205           quantum=2;
   3206           if ((strcmp(explicit_vr,"OB") == 0) ||
   3207               (strcmp(explicit_vr,"OW") == 0) ||
   3208               (strcmp(explicit_vr,"OF") == 0) ||
   3209               (strcmp(explicit_vr,"SQ") == 0) ||
   3210               (strcmp(explicit_vr,"UN") == 0) ||
   3211               (strcmp(explicit_vr,"UT") == 0))
   3212             {
   3213               (void) ReadBlobLSBShort(image);
   3214               quantum=4;
   3215             }
   3216         }
   3217       datum=0;
   3218       if (quantum == 4)
   3219         {
   3220           if (group == 0x0002)
   3221             datum=ReadBlobLSBSignedLong(image);
   3222           else
   3223             datum=ReadBlobSignedLong(image);
   3224         }
   3225       else
   3226         if (quantum == 2)
   3227           {
   3228             if (group == 0x0002)
   3229               datum=ReadBlobLSBSignedShort(image);
   3230             else
   3231               datum=ReadBlobSignedShort(image);
   3232           }
   3233       quantum=0;
   3234       length=1;
   3235       if (datum != 0)
   3236         {
   3237           if ((strncmp(implicit_vr,"OW",2) == 0) ||
   3238               (strncmp(implicit_vr,"SS",2) == 0) ||
   3239               (strncmp(implicit_vr,"US",2) == 0))
   3240             quantum=2;
   3241           else
   3242             if ((strncmp(implicit_vr,"FL",2) == 0) ||
   3243                 (strncmp(implicit_vr,"OF",2) == 0) ||
   3244                 (strncmp(implicit_vr,"SL",2) == 0) ||
   3245                 (strncmp(implicit_vr,"UL",2) == 0))
   3246               quantum=4;
   3247             else
   3248               if (strncmp(implicit_vr,"FD",2) == 0)
   3249                 quantum=8;
   3250               else
   3251                 quantum=1;
   3252           if (datum != ~0)
   3253             length=(size_t) datum/quantum;
   3254           else
   3255             {
   3256               /*
   3257                 Sequence and item of undefined length.
   3258               */
   3259               quantum=0;
   3260               length=0;
   3261             }
   3262         }
   3263       if (image_info->verbose != MagickFalse)
   3264         {
   3265           /*
   3266             Display Dicom info.
   3267           */
   3268           if (use_explicit == MagickFalse)
   3269             explicit_vr[0]='\0';
   3270           for (i=0; dicom_info[i].description != (char *) NULL; i++)
   3271             if ((group == dicom_info[i].group) &&
   3272                 (element == dicom_info[i].element))
   3273               break;
   3274           (void) FormatLocaleFile(stdout,"0x%04lX %4ld %s-%s (0x%04lx,0x%04lx)",
   3275             (unsigned long) image->offset,(long) length,implicit_vr,explicit_vr,
   3276             (unsigned long) group,(unsigned long) element);
   3277           if (dicom_info[i].description != (char *) NULL)
   3278             (void) FormatLocaleFile(stdout," %s",dicom_info[i].description);
   3279           (void) FormatLocaleFile(stdout,": ");
   3280         }
   3281       if ((group == 0x7FE0) && (element == 0x0010))
   3282         {
   3283           if (image_info->verbose != MagickFalse)
   3284             (void) FormatLocaleFile(stdout,"\n");
   3285           break;
   3286         }
   3287       /*
   3288         Allocate space and read an array.
   3289       */
   3290       data=(unsigned char *) NULL;
   3291       if ((length == 1) && (quantum == 1))
   3292         datum=ReadBlobByte(image);
   3293       else
   3294         if ((length == 1) && (quantum == 2))
   3295           {
   3296             if (group == 0x0002)
   3297               datum=ReadBlobLSBSignedShort(image);
   3298             else
   3299               datum=ReadBlobSignedShort(image);
   3300           }
   3301         else
   3302           if ((length == 1) && (quantum == 4))
   3303             {
   3304               if (group == 0x0002)
   3305                 datum=ReadBlobLSBSignedLong(image);
   3306               else
   3307                 datum=ReadBlobSignedLong(image);
   3308             }
   3309           else
   3310             if ((quantum != 0) && (length != 0))
   3311               {
   3312                 if (length > (size_t) GetBlobSize(image))
   3313                   ThrowDCMException(CorruptImageError,
   3314                     "InsufficientImageDataInFile");
   3315                 if (~length >= 1)
   3316                   data=(unsigned char *) AcquireQuantumMemory(length+1,quantum*
   3317                     sizeof(*data));
   3318                 if (data == (unsigned char *) NULL)
   3319                   ThrowDCMException(ResourceLimitError,
   3320                     "MemoryAllocationFailed");
   3321                 count=ReadBlob(image,(size_t) quantum*length,data);
   3322                 if (count != (ssize_t) (quantum*length))
   3323                   {
   3324                     if (image_info->verbose != MagickFalse)
   3325                       (void) FormatLocaleFile(stdout,"count=%d quantum=%d "
   3326                         "length=%d group=%d\n",(int) count,(int) quantum,(int)
   3327                         length,(int) group);
   3328                      ThrowDCMException(CorruptImageError,
   3329                        "InsufficientImageDataInFile");
   3330                   }
   3331                 data[length*quantum]='\0';
   3332               }
   3333       if ((((unsigned int) group << 16) | element) == 0xFFFEE0DD)
   3334         {
   3335           if (data != (unsigned char *) NULL)
   3336             data=(unsigned char *) RelinquishMagickMemory(data);
   3337           continue;
   3338         }
   3339       switch (group)
   3340       {
   3341         case 0x0002:
   3342         {
   3343           switch (element)
   3344           {
   3345             case 0x0010:
   3346             {
   3347               char
   3348                 transfer_syntax[MagickPathExtent];
   3349 
   3350               /*
   3351                 Transfer Syntax.
   3352               */
   3353               if ((datum == 0) && (explicit_retry == MagickFalse))
   3354                 {
   3355                   explicit_retry=MagickTrue;
   3356                   (void) SeekBlob(image,(MagickOffsetType) 0,SEEK_SET);
   3357                   group=0;
   3358                   element=0;
   3359                   if (image_info->verbose != MagickFalse)
   3360                     (void) FormatLocaleFile(stdout,
   3361                       "Corrupted image - trying explicit format\n");
   3362                   break;
   3363                 }
   3364               *transfer_syntax='\0';
   3365               if (data != (unsigned char *) NULL)
   3366                 (void) CopyMagickString(transfer_syntax,(char *) data,
   3367                   MagickPathExtent);
   3368               if (image_info->verbose != MagickFalse)
   3369                 (void) FormatLocaleFile(stdout,"transfer_syntax=%s\n",
   3370                   (const char *) transfer_syntax);
   3371               if (strncmp(transfer_syntax,"1.2.840.10008.1.2",17) == 0)
   3372                 {
   3373                   int
   3374                     subtype,
   3375                     type;
   3376 
   3377                   type=1;
   3378                   subtype=0;
   3379                   if (strlen(transfer_syntax) > 17)
   3380                     {
   3381                       count=(ssize_t) sscanf(transfer_syntax+17,".%d.%d",&type,
   3382                         &subtype);
   3383                       if (count < 1)
   3384                         ThrowDCMException(CorruptImageError,
   3385                           "ImproperImageHeader");
   3386                     }
   3387                   switch (type)
   3388                   {
   3389                     case 1:
   3390                     {
   3391                       image->endian=LSBEndian;
   3392                       break;
   3393                     }
   3394                     case 2:
   3395                     {
   3396                       image->endian=MSBEndian;
   3397                       break;
   3398                     }
   3399                     case 4:
   3400                     {
   3401                       if ((subtype >= 80) && (subtype <= 81))
   3402                         image->compression=JPEGCompression;
   3403                       else
   3404                         if ((subtype >= 90) && (subtype <= 93))
   3405                           image->compression=JPEG2000Compression;
   3406                         else
   3407                           image->compression=JPEGCompression;
   3408                       break;
   3409                     }
   3410                     case 5:
   3411                     {
   3412                       image->compression=RLECompression;
   3413                       break;
   3414                     }
   3415                   }
   3416                 }
   3417               break;
   3418             }
   3419             default:
   3420               break;
   3421           }
   3422           break;
   3423         }
   3424         case 0x0028:
   3425         {
   3426           switch (element)
   3427           {
   3428             case 0x0002:
   3429             {
   3430               /*
   3431                 Samples per pixel.
   3432               */
   3433               info.samples_per_pixel=(size_t) datum;
   3434               if ((info.samples_per_pixel == 0) || (info.samples_per_pixel > 4))
   3435                 ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3436               break;
   3437             }
   3438             case 0x0004:
   3439             {
   3440               /*
   3441                 Photometric interpretation.
   3442               */
   3443               if (data == (unsigned char *) NULL)
   3444                 break;
   3445               for (i=0; i < (ssize_t) MagickMin(length,MagickPathExtent-1); i++)
   3446                 photometric[i]=(char) data[i];
   3447               photometric[i]='\0';
   3448               info.polarity=LocaleCompare(photometric,"MONOCHROME1 ") == 0 ?
   3449                 MagickTrue : MagickFalse;
   3450               break;
   3451             }
   3452             case 0x0006:
   3453             {
   3454               /*
   3455                 Planar configuration.
   3456               */
   3457               if (datum == 1)
   3458                 image->interlace=PlaneInterlace;
   3459               break;
   3460             }
   3461             case 0x0008:
   3462             {
   3463               /*
   3464                 Number of frames.
   3465               */
   3466               if (data == (unsigned char *) NULL)
   3467                 break;
   3468               number_scenes=StringToUnsignedLong((char *) data);
   3469               break;
   3470             }
   3471             case 0x0010:
   3472             {
   3473               /*
   3474                 Image rows.
   3475               */
   3476               height=(size_t) datum;
   3477               break;
   3478             }
   3479             case 0x0011:
   3480             {
   3481               /*
   3482                 Image columns.
   3483               */
   3484               width=(size_t) datum;
   3485               break;
   3486             }
   3487             case 0x0100:
   3488             {
   3489               /*
   3490                 Bits allocated.
   3491               */
   3492               info.bits_allocated=(size_t) datum;
   3493               info.bytes_per_pixel=1;
   3494               if (datum > 8)
   3495                 info.bytes_per_pixel=2;
   3496               info.depth=info.bits_allocated;
   3497               if ((info.depth == 0) || (info.depth > 32))
   3498                 ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3499               info.max_value=(1UL << info.bits_allocated)-1;
   3500               image->depth=info.depth;
   3501               break;
   3502             }
   3503             case 0x0101:
   3504             {
   3505               /*
   3506                 Bits stored.
   3507               */
   3508               info.significant_bits=(size_t) datum;
   3509               info.bytes_per_pixel=1;
   3510               if (info.significant_bits > 8)
   3511                 info.bytes_per_pixel=2;
   3512               info.depth=info.significant_bits;
   3513               if ((info.depth == 0) || (info.depth > 16))
   3514                 ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3515               info.max_value=(1UL << info.significant_bits)-1;
   3516               info.mask=(size_t) GetQuantumRange(info.significant_bits);
   3517               image->depth=info.depth;
   3518               break;
   3519             }
   3520             case 0x0102:
   3521             {
   3522               /*
   3523                 High bit.
   3524               */
   3525               break;
   3526             }
   3527             case 0x0103:
   3528             {
   3529               /*
   3530                 Pixel representation.
   3531               */
   3532               info.signed_data=(size_t) datum;
   3533               break;
   3534             }
   3535             case 0x1050:
   3536             {
   3537               /*
   3538                 Visible pixel range: center.
   3539               */
   3540               if (data != (unsigned char *) NULL)
   3541                 info.window_center=StringToDouble((char *) data,(char **) NULL);
   3542               break;
   3543             }
   3544             case 0x1051:
   3545             {
   3546               /*
   3547                 Visible pixel range: width.
   3548               */
   3549               if (data != (unsigned char *) NULL)
   3550                 info.window_width=StringToDouble((char *) data,(char **) NULL);
   3551               break;
   3552             }
   3553             case 0x1052:
   3554             {
   3555               /*
   3556                 Rescale intercept
   3557               */
   3558               if (data != (unsigned char *) NULL)
   3559                 info.rescale_intercept=StringToDouble((char *) data,
   3560                   (char **) NULL);
   3561               break;
   3562             }
   3563             case 0x1053:
   3564             {
   3565               /*
   3566                 Rescale slope
   3567               */
   3568               if (data != (unsigned char *) NULL)
   3569                 info.rescale_slope=StringToDouble((char *) data,(char **) NULL);
   3570               break;
   3571             }
   3572             case 0x1200:
   3573             case 0x3006:
   3574             {
   3575               /*
   3576                 Populate graymap.
   3577               */
   3578               if (data == (unsigned char *) NULL)
   3579                 break;
   3580               colors=(size_t) (length/info.bytes_per_pixel);
   3581               datum=(int) colors;
   3582               if (graymap != (int *) NULL)
   3583                 graymap=(int *) RelinquishMagickMemory(graymap);
   3584               graymap=(int *) AcquireQuantumMemory(MagickMax(colors,65536),
   3585                 sizeof(*graymap));
   3586               if (graymap == (int *) NULL)
   3587                 ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3588               (void) memset(graymap,0,MagickMax(colors,65536)*
   3589                 sizeof(*graymap));
   3590               for (i=0; i < (ssize_t) colors; i++)
   3591                 if (info.bytes_per_pixel == 1)
   3592                   graymap[i]=(int) data[i];
   3593                 else
   3594                   graymap[i]=(int) ((short *) data)[i];
   3595               break;
   3596             }
   3597             case 0x1201:
   3598             {
   3599               unsigned short
   3600                 index;
   3601 
   3602               /*
   3603                 Populate redmap.
   3604               */
   3605               if (data == (unsigned char *) NULL)
   3606                 break;
   3607               colors=(size_t) (length/2);
   3608               datum=(int) colors;
   3609               if (redmap != (int *) NULL)
   3610                 redmap=(int *) RelinquishMagickMemory(redmap);
   3611               redmap=(int *) AcquireQuantumMemory(MagickMax(colors,65536),
   3612                 sizeof(*redmap));
   3613               if (redmap == (int *) NULL)
   3614                 ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3615               (void) memset(redmap,0,MagickMax(colors,65536)*
   3616                 sizeof(*redmap));
   3617               p=data;
   3618               for (i=0; i < (ssize_t) colors; i++)
   3619               {
   3620                 if (image->endian == MSBEndian)
   3621                   index=(unsigned short) ((*p << 8) | *(p+1));
   3622                 else
   3623                   index=(unsigned short) (*p | (*(p+1) << 8));
   3624                 redmap[i]=(int) index;
   3625                 p+=2;
   3626               }
   3627               break;
   3628             }
   3629             case 0x1202:
   3630             {
   3631               unsigned short
   3632                 index;
   3633 
   3634               /*
   3635                 Populate greenmap.
   3636               */
   3637               if (data == (unsigned char *) NULL)
   3638                 break;
   3639               colors=(size_t) (length/2);
   3640               datum=(int) colors;
   3641               if (greenmap != (int *) NULL)
   3642                 greenmap=(int *) RelinquishMagickMemory(greenmap);
   3643               greenmap=(int *) AcquireQuantumMemory(MagickMax(colors,65536),
   3644                 sizeof(*greenmap));
   3645               if (greenmap == (int *) NULL)
   3646                 ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3647               (void) memset(greenmap,0,MagickMax(colors,65536)*
   3648                 sizeof(*greenmap));
   3649               p=data;
   3650               for (i=0; i < (ssize_t) colors; i++)
   3651               {
   3652                 if (image->endian == MSBEndian)
   3653                   index=(unsigned short) ((*p << 8) | *(p+1));
   3654                 else
   3655                   index=(unsigned short) (*p | (*(p+1) << 8));
   3656                 greenmap[i]=(int) index;
   3657                 p+=2;
   3658               }
   3659               break;
   3660             }
   3661             case 0x1203:
   3662             {
   3663               unsigned short
   3664                 index;
   3665 
   3666               /*
   3667                 Populate bluemap.
   3668               */
   3669               if (data == (unsigned char *) NULL)
   3670                 break;
   3671               colors=(size_t) (length/2);
   3672               datum=(int) colors;
   3673               if (bluemap != (int *) NULL)
   3674                 bluemap=(int *) RelinquishMagickMemory(bluemap);
   3675               bluemap=(int *) AcquireQuantumMemory(MagickMax(colors,65536),
   3676                 sizeof(*bluemap));
   3677               if (bluemap == (int *) NULL)
   3678                 ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3679               (void) memset(bluemap,0,MagickMax(colors,65536)*
   3680                 sizeof(*bluemap));
   3681               p=data;
   3682               for (i=0; i < (ssize_t) colors; i++)
   3683               {
   3684                 if (image->endian == MSBEndian)
   3685                   index=(unsigned short) ((*p << 8) | *(p+1));
   3686                 else
   3687                   index=(unsigned short) (*p | (*(p+1) << 8));
   3688                 bluemap[i]=(int) index;
   3689                 p+=2;
   3690               }
   3691               break;
   3692             }
   3693             default:
   3694               break;
   3695           }
   3696           break;
   3697         }
   3698         case 0x2050:
   3699         {
   3700           switch (element)
   3701           {
   3702             case 0x0020:
   3703             {
   3704               if ((data != (unsigned char *) NULL) &&
   3705                   (strncmp((char *) data,"INVERSE",7) == 0))
   3706                 info.polarity=MagickTrue;
   3707               break;
   3708             }
   3709             default:
   3710               break;
   3711           }
   3712           break;
   3713         }
   3714         default:
   3715           break;
   3716       }
   3717       if (data != (unsigned char *) NULL)
   3718         {
   3719           char
   3720             *attribute;
   3721 
   3722           for (i=0; dicom_info[i].description != (char *) NULL; i++)
   3723             if ((group == dicom_info[i].group) &&
   3724                 (element == dicom_info[i].element))
   3725               break;
   3726           if (dicom_info[i].description != (char *) NULL)
   3727             {
   3728               attribute=AcquireString("dcm:");
   3729               (void) ConcatenateString(&attribute,dicom_info[i].description);
   3730               for (i=0; i < (ssize_t) MagickMax(length,4); i++)
   3731                 if (isprint((int) data[i]) == MagickFalse)
   3732                   break;
   3733               if ((i == (ssize_t) length) || (length > 4))
   3734                 {
   3735                   (void) SubstituteString(&attribute," ","");
   3736                   (void) SetImageProperty(image,attribute,(char *) data,
   3737                     exception);
   3738                 }
   3739               attribute=DestroyString(attribute);
   3740             }
   3741         }
   3742       if (image_info->verbose != MagickFalse)
   3743         {
   3744           if (data == (unsigned char *) NULL)
   3745             (void) FormatLocaleFile(stdout,"%d\n",datum);
   3746           else
   3747             {
   3748               /*
   3749                 Display group data.
   3750               */
   3751               for (i=0; i < (ssize_t) MagickMax(length,4); i++)
   3752                 if (isprint((int) data[i]) == MagickFalse)
   3753                   break;
   3754               if ((i != (ssize_t) length) && (length <= 4))
   3755                 {
   3756                   ssize_t
   3757                     j;
   3758 
   3759                   datum=0;
   3760                   for (j=(ssize_t) length-1; j >= 0; j--)
   3761                     datum=(256*datum+data[j]);
   3762                   (void) FormatLocaleFile(stdout,"%d",datum);
   3763                 }
   3764               else
   3765                 for (i=0; i < (ssize_t) length; i++)
   3766                   if (isprint((int) data[i]) != MagickFalse)
   3767                     (void) FormatLocaleFile(stdout,"%c",data[i]);
   3768                   else
   3769                     (void) FormatLocaleFile(stdout,"%c",'.');
   3770               (void) FormatLocaleFile(stdout,"\n");
   3771             }
   3772         }
   3773       if (data != (unsigned char *) NULL)
   3774         data=(unsigned char *) RelinquishMagickMemory(data);
   3775       if (EOFBlob(image) != MagickFalse)
   3776         {
   3777           ThrowFileException(exception,CorruptImageError,"UnexpectedEndOfFile",
   3778             image->filename);
   3779           break;
   3780         }
   3781     }
   3782     if ((group == 0xfffc) && (element == 0xfffc))
   3783       {
   3784         Image
   3785           *last;
   3786 
   3787         last=RemoveLastImageFromList(&image);
   3788         if (last != (Image *) NULL)
   3789           last=DestroyImage(last);
   3790         break;
   3791       }
   3792     if ((width == 0) || (height == 0))
   3793       ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3794     image->columns=(size_t) width;
   3795     image->rows=(size_t) height;
   3796     if (info.signed_data == 0xffff)
   3797       info.signed_data=(size_t) (info.significant_bits == 16 ? 1 : 0);
   3798     if ((image->compression == JPEGCompression) ||
   3799         (image->compression == JPEG2000Compression))
   3800       {
   3801         Image
   3802           *images;
   3803 
   3804         ImageInfo
   3805           *read_info;
   3806 
   3807         int
   3808           c;
   3809 
   3810         /*
   3811           Read offset table.
   3812         */
   3813         for (i=0; i < (ssize_t) stream_info->remaining; i++)
   3814           if (ReadBlobByte(image) == EOF)
   3815             break;
   3816         (void) (((ssize_t) ReadBlobLSBShort(image) << 16) |
   3817           ReadBlobLSBShort(image));
   3818         length=(size_t) ReadBlobLSBLong(image);
   3819         if (length > (size_t) GetBlobSize(image))
   3820           ThrowDCMException(CorruptImageError,"InsufficientImageDataInFile");
   3821         stream_info->offset_count=length >> 2;
   3822         if (stream_info->offset_count != 0)
   3823           {
   3824             if (stream_info->offsets != (ssize_t *) NULL)
   3825               stream_info->offsets=(ssize_t *) RelinquishMagickMemory(
   3826                 stream_info->offsets);
   3827             stream_info->offsets=(ssize_t *) AcquireQuantumMemory(
   3828               stream_info->offset_count,sizeof(*stream_info->offsets));
   3829             if (stream_info->offsets == (ssize_t *) NULL)
   3830               ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3831             for (i=0; i < (ssize_t) stream_info->offset_count; i++)
   3832               stream_info->offsets[i]=(ssize_t) ReadBlobLSBSignedLong(image);
   3833             offset=TellBlob(image);
   3834             for (i=0; i < (ssize_t) stream_info->offset_count; i++)
   3835               stream_info->offsets[i]+=offset;
   3836           }
   3837         /*
   3838           Handle non-native image formats.
   3839         */
   3840         read_info=CloneImageInfo(image_info);
   3841         SetImageInfoBlob(read_info,(void *) NULL,0);
   3842         images=NewImageList();
   3843         for (scene=0; scene < (ssize_t) number_scenes; scene++)
   3844         {
   3845           char
   3846             filename[MagickPathExtent];
   3847 
   3848           const char
   3849             *property;
   3850 
   3851           FILE
   3852             *file;
   3853 
   3854           Image
   3855             *jpeg_image;
   3856 
   3857           int
   3858             unique_file;
   3859 
   3860           unsigned int
   3861             tag;
   3862 
   3863           tag=((unsigned int) ReadBlobLSBShort(image) << 16) |
   3864             ReadBlobLSBShort(image);
   3865           length=(size_t) ReadBlobLSBLong(image);
   3866           if (length > (size_t) GetBlobSize(image))
   3867             {
   3868               read_info=DestroyImageInfo(read_info);
   3869               ThrowDCMException(CorruptImageError,
   3870                 "InsufficientImageDataInFile");
   3871             }
   3872           if (tag == 0xFFFEE0DD)
   3873             break; /* sequence delimiter tag */
   3874           if (tag != 0xFFFEE000)
   3875             {
   3876               read_info=DestroyImageInfo(read_info);
   3877               ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   3878             }
   3879           file=(FILE *) NULL;
   3880           unique_file=AcquireUniqueFileResource(filename);
   3881           if (unique_file != -1)
   3882             file=fdopen(unique_file,"wb");
   3883           if (file == (FILE *) NULL)
   3884             {
   3885               (void) RelinquishUniqueFileResource(filename);
   3886               ThrowFileException(exception,FileOpenError,
   3887                 "UnableToCreateTemporaryFile",filename);
   3888               break;
   3889             }
   3890           for (c=EOF; length != 0; length--)
   3891           {
   3892             c=ReadBlobByte(image);
   3893             if (c == EOF)
   3894               {
   3895                 ThrowFileException(exception,CorruptImageError,
   3896                   "UnexpectedEndOfFile",image->filename);
   3897                 break;
   3898               }
   3899             if (fputc(c,file) != c)
   3900               break;
   3901           }
   3902           (void) fclose(file);
   3903           if (c == EOF)
   3904             break;
   3905           (void) FormatLocaleString(read_info->filename,MagickPathExtent,
   3906             "jpeg:%s",filename);
   3907           if (image->compression == JPEG2000Compression)
   3908             (void) FormatLocaleString(read_info->filename,MagickPathExtent,
   3909               "j2k:%s",filename);
   3910           jpeg_image=ReadImage(read_info,exception);
   3911           if (jpeg_image != (Image *) NULL)
   3912             {
   3913               ResetImagePropertyIterator(image);
   3914               property=GetNextImageProperty(image);
   3915               while (property != (const char *) NULL)
   3916               {
   3917                 (void) SetImageProperty(jpeg_image,property,
   3918                   GetImageProperty(image,property,exception),exception);
   3919                 property=GetNextImageProperty(image);
   3920               }
   3921               AppendImageToList(&images,jpeg_image);
   3922             }
   3923           (void) RelinquishUniqueFileResource(filename);
   3924         }
   3925         read_info=DestroyImageInfo(read_info);
   3926         if (stream_info->offsets != (ssize_t *) NULL)
   3927           stream_info->offsets=(ssize_t *)
   3928             RelinquishMagickMemory(stream_info->offsets);
   3929         stream_info=(DCMStreamInfo *) RelinquishMagickMemory(stream_info);
   3930         if (info.scale != (Quantum *) NULL)
   3931           info.scale=(Quantum *) RelinquishMagickMemory(info.scale);
   3932         if (graymap != (int *) NULL)
   3933           graymap=(int *) RelinquishMagickMemory(graymap);
   3934         if (bluemap != (int *) NULL)
   3935           bluemap=(int *) RelinquishMagickMemory(bluemap);
   3936         if (greenmap != (int *) NULL)
   3937           greenmap=(int *) RelinquishMagickMemory(greenmap);
   3938         if (redmap != (int *) NULL)
   3939           redmap=(int *) RelinquishMagickMemory(redmap);
   3940         image=DestroyImageList(image);
   3941         return(GetFirstImageInList(images));
   3942       }
   3943     if (info.depth != (1UL*MAGICKCORE_QUANTUM_DEPTH))
   3944       {
   3945         QuantumAny
   3946           range;
   3947 
   3948         /*
   3949           Compute pixel scaling table.
   3950         */
   3951         length=(size_t) (GetQuantumRange(info.depth)+1);
   3952         if (length > (size_t) GetBlobSize(image))
   3953           ThrowDCMException(CorruptImageError,"InsufficientImageDataInFile");
   3954         if (info.scale != (Quantum *) NULL)
   3955           info.scale=(Quantum *) RelinquishMagickMemory(info.scale);
   3956         info.scale=(Quantum *) AcquireQuantumMemory(MagickMax(length,MaxMap)+1,
   3957           sizeof(*info.scale));
   3958         if (info.scale == (Quantum *) NULL)
   3959           ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3960         (void) memset(info.scale,0,(MagickMax(length,MaxMap)+1)*
   3961           sizeof(*info.scale));
   3962         range=GetQuantumRange(info.depth);
   3963         for (i=0; i <= (ssize_t) GetQuantumRange(info.depth); i++)
   3964           info.scale[i]=ScaleAnyToQuantum((size_t) i,range);
   3965       }
   3966     if (image->compression == RLECompression)
   3967       {
   3968         unsigned int
   3969           tag;
   3970 
   3971         /*
   3972           Read RLE offset table.
   3973         */
   3974         for (i=0; i < (ssize_t) stream_info->remaining; i++)
   3975         {
   3976           int
   3977             c;
   3978 
   3979           c=ReadBlobByte(image);
   3980           if (c == EOF)
   3981             break;
   3982         }
   3983         tag=((unsigned int) ReadBlobLSBShort(image) << 16) |
   3984           ReadBlobLSBShort(image);
   3985         (void) tag;
   3986         length=(size_t) ReadBlobLSBLong(image);
   3987         if (length > (size_t) GetBlobSize(image))
   3988           ThrowDCMException(CorruptImageError,"InsufficientImageDataInFile");
   3989         stream_info->offset_count=length >> 2;
   3990         if (stream_info->offset_count != 0)
   3991           {
   3992             if (stream_info->offsets != (ssize_t *) NULL)
   3993               stream_info->offsets=(ssize_t *)
   3994                 RelinquishMagickMemory(stream_info->offsets);
   3995             stream_info->offsets=(ssize_t *) AcquireQuantumMemory(
   3996               stream_info->offset_count,sizeof(*stream_info->offsets));
   3997             if (stream_info->offsets == (ssize_t *) NULL)
   3998               ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   3999             for (i=0; i < (ssize_t) stream_info->offset_count; i++)
   4000             {
   4001               MagickOffsetType
   4002                 offset;
   4003 
   4004               offset=(MagickOffsetType) ReadBlobLSBSignedLong(image);
   4005               if (offset > (MagickOffsetType) GetBlobSize(image))
   4006                 ThrowDCMException(CorruptImageError,
   4007                   "InsufficientImageDataInFile");
   4008               stream_info->offsets[i]=(ssize_t) offset;
   4009               if (EOFBlob(image) != MagickFalse)
   4010                 break;
   4011             }
   4012             offset=TellBlob(image)+8;
   4013             for (i=0; i < (ssize_t) stream_info->offset_count; i++)
   4014               stream_info->offsets[i]+=offset;
   4015           }
   4016       }
   4017     for (scene=0; scene < (ssize_t) number_scenes; scene++)
   4018     {
   4019       image->columns=(size_t) width;
   4020       image->rows=(size_t) height;
   4021       image->depth=info.depth;
   4022       status=SetImageExtent(image,image->columns,image->rows,exception);
   4023       if (status == MagickFalse)
   4024         break;
   4025       image->colorspace=RGBColorspace;
   4026       (void) SetImageBackgroundColor(image,exception);
   4027       if ((image->colormap == (PixelInfo *) NULL) &&
   4028           (info.samples_per_pixel == 1))
   4029         {
   4030           int
   4031             index;
   4032 
   4033           size_t
   4034             one;
   4035 
   4036           one=1;
   4037           if (colors == 0)
   4038             colors=one << info.depth;
   4039           if (AcquireImageColormap(image,colors,exception) == MagickFalse)
   4040             ThrowDCMException(ResourceLimitError,"MemoryAllocationFailed");
   4041           if (redmap != (int *) NULL)
   4042             for (i=0; i < (ssize_t) colors; i++)
   4043             {
   4044               index=redmap[i];
   4045               if ((info.scale != (Quantum *) NULL) && (index >= 0) &&
   4046                   (index <= (int) info.max_value))
   4047                 index=(int) info.scale[index];
   4048               image->colormap[i].red=(MagickRealType) index;
   4049             }
   4050           if (greenmap != (int *) NULL)
   4051             for (i=0; i < (ssize_t) colors; i++)
   4052             {
   4053               index=greenmap[i];
   4054               if ((info.scale != (Quantum *) NULL) && (index >= 0) &&
   4055                   (index <= (int) info.max_value))
   4056                 index=(int) info.scale[index];
   4057               image->colormap[i].green=(MagickRealType) index;
   4058             }
   4059           if (bluemap != (int *) NULL)
   4060             for (i=0; i < (ssize_t) colors; i++)
   4061             {
   4062               index=bluemap[i];
   4063               if ((info.scale != (Quantum *) NULL) && (index >= 0) &&
   4064                   (index <= (int) info.max_value))
   4065                 index=(int) info.scale[index];
   4066               image->colormap[i].blue=(MagickRealType) index;
   4067             }
   4068           if (graymap != (int *) NULL)
   4069             for (i=0; i < (ssize_t) colors; i++)
   4070             {
   4071               index=graymap[i];
   4072               if ((info.scale != (Quantum *) NULL) && (index >= 0) &&
   4073                   (index <= (int) info.max_value))
   4074                 index=(int) info.scale[index];
   4075               image->colormap[i].red=(MagickRealType) index;
   4076               image->colormap[i].green=(MagickRealType) index;
   4077               image->colormap[i].blue=(MagickRealType) index;
   4078             }
   4079         }
   4080       if (image->compression == RLECompression)
   4081         {
   4082           unsigned int
   4083             tag;
   4084 
   4085           /*
   4086             Read RLE segment table.
   4087           */
   4088           for (i=0; i < (ssize_t) stream_info->remaining; i++)
   4089           {
   4090             int
   4091               c;
   4092 
   4093             c=ReadBlobByte(image);
   4094             if (c == EOF)
   4095               break;
   4096           }
   4097           tag=((unsigned int) ReadBlobLSBShort(image) << 16) |
   4098             ReadBlobLSBShort(image);
   4099           stream_info->remaining=(size_t) ReadBlobLSBLong(image);
   4100           if ((tag != 0xFFFEE000) || (stream_info->remaining <= 64) ||
   4101               (EOFBlob(image) != MagickFalse))
   4102             {
   4103               if (stream_info->offsets != (ssize_t *) NULL)
   4104                 stream_info->offsets=(ssize_t *)
   4105                   RelinquishMagickMemory(stream_info->offsets);
   4106               ThrowDCMException(CorruptImageError,"ImproperImageHeader");
   4107             }
   4108           stream_info->count=0;
   4109           stream_info->segment_count=ReadBlobLSBLong(image);
   4110           for (i=0; i < 15; i++)
   4111             stream_info->segments[i]=(ssize_t) ReadBlobLSBSignedLong(image);
   4112           stream_info->remaining-=64;
   4113           if (stream_info->segment_count > 1)
   4114             {
   4115               info.bytes_per_pixel=1;
   4116               info.depth=8;
   4117               if (stream_info->offset_count > 0)
   4118                 (void) SeekBlob(image,(MagickOffsetType)
   4119                   stream_info->offsets[0]+stream_info->segments[0],SEEK_SET);
   4120             }
   4121         }
   4122       if ((info.samples_per_pixel > 1) && (image->interlace == PlaneInterlace))
   4123         {
   4124           register ssize_t
   4125             x;
   4126 
   4127           register Quantum
   4128             *q;
   4129 
   4130           ssize_t
   4131             y;
   4132 
   4133           /*
   4134             Convert Planar RGB DCM Medical image to pixel packets.
   4135           */
   4136           for (i=0; i < (ssize_t) info.samples_per_pixel; i++)
   4137           {
   4138             for (y=0; y < (ssize_t) image->rows; y++)
   4139             {
   4140               q=GetAuthenticPixels(image,0,y,image->columns,1,exception);
   4141               if (q == (Quantum *) NULL)
   4142                 break;
   4143               for (x=0; x < (ssize_t) image->columns; x++)
   4144               {
   4145                 switch ((int) i)
   4146                 {
   4147                   case 0:
   4148                   {
   4149                     SetPixelRed(image,ScaleCharToQuantum((unsigned char)
   4150                       ReadDCMByte(stream_info,image)),q);
   4151                     break;
   4152                   }
   4153                   case 1:
   4154                   {
   4155                     SetPixelGreen(image,ScaleCharToQuantum((unsigned char)
   4156                       ReadDCMByte(stream_info,image)),q);
   4157                     break;
   4158                   }
   4159                   case 2:
   4160                   {
   4161                     SetPixelBlue(image,ScaleCharToQuantum((unsigned char)
   4162                       ReadDCMByte(stream_info,image)),q);
   4163                     break;
   4164                   }
   4165                   case 3:
   4166                   {
   4167                     SetPixelAlpha(image,ScaleCharToQuantum((unsigned char)
   4168                       ReadDCMByte(stream_info,image)),q);
   4169                     break;
   4170                   }
   4171                   default:
   4172                     break;
   4173                 }
   4174                 q+=GetPixelChannels(image);
   4175               }
   4176               if (SyncAuthenticPixels(image,exception) == MagickFalse)
   4177                 break;
   4178               if (image->previous == (Image *) NULL)
   4179                 {
   4180                   status=SetImageProgress(image,LoadImageTag,(MagickOffsetType)
   4181                     y,image->rows);
   4182                   if (status == MagickFalse)
   4183                     break;
   4184                 }
   4185             }
   4186           }
   4187         }
   4188       else
   4189         {
   4190           const char
   4191             *option;
   4192 
   4193           /*
   4194             Convert DCM Medical image to pixel packets.
   4195           */
   4196           option=GetImageOption(image_info,"dcm:display-range");
   4197           if (option != (const char *) NULL)
   4198             {
   4199               if (LocaleCompare(option,"reset") == 0)
   4200                 info.window_width=0;
   4201             }
   4202           option=GetImageOption(image_info,"dcm:window");
   4203           if (option != (char *) NULL)
   4204             {
   4205               GeometryInfo
   4206                 geometry_info;
   4207 
   4208               MagickStatusType
   4209                 flags;
   4210 
   4211               flags=ParseGeometry(option,&geometry_info);
   4212               if (flags & RhoValue)
   4213                 info.window_center=geometry_info.rho;
   4214               if (flags & SigmaValue)
   4215                 info.window_width=geometry_info.sigma;
   4216               info.rescale=MagickTrue;
   4217             }
   4218           option=GetImageOption(image_info,"dcm:rescale");
   4219           if (option != (char *) NULL)
   4220             info.rescale=IsStringTrue(option);
   4221           if ((info.window_center != 0) && (info.window_width == 0))
   4222             info.window_width=info.window_center;
   4223           status=ReadDCMPixels(image,&info,stream_info,MagickTrue,exception);
   4224           if ((status != MagickFalse) && (stream_info->segment_count > 1))
   4225             {
   4226               if (stream_info->offset_count > 0)
   4227                 (void) SeekBlob(image,(MagickOffsetType)
   4228                   stream_info->offsets[0]+stream_info->segments[1],SEEK_SET);
   4229               (void) ReadDCMPixels(image,&info,stream_info,MagickFalse,
   4230                 exception);
   4231             }
   4232         }
   4233       if (SetImageGray(image,exception) != MagickFalse)
   4234         (void) SetImageColorspace(image,GRAYColorspace,exception);
   4235       if (EOFBlob(image) != MagickFalse)
   4236         {
   4237           ThrowFileException(exception,CorruptImageError,"UnexpectedEndOfFile",
   4238             image->filename);
   4239           break;
   4240         }
   4241       /*
   4242         Proceed to next image.
   4243       */
   4244       if (image_info->number_scenes != 0)
   4245         if (image->scene >= (image_info->scene+image_info->number_scenes-1))
   4246           break;
   4247       if (scene < (ssize_t) (number_scenes-1))
   4248         {
   4249           /*
   4250             Allocate next image structure.
   4251           */
   4252           AcquireNextImage(image_info,image,exception);
   4253           if (GetNextImageInList(image) == (Image *) NULL)
   4254             {
   4255               status=MagickFalse;
   4256               break;
   4257             }
   4258           image=SyncNextImageInList(image);
   4259           status=SetImageProgress(image,LoadImagesTag,TellBlob(image),
   4260             GetBlobSize(image));
   4261           if (status == MagickFalse)
   4262             break;
   4263         }
   4264     }
   4265     if (TellBlob(image) < (MagickOffsetType) GetBlobSize(image))
   4266       {
   4267         /*
   4268           Allocate next image structure.
   4269         */
   4270         AcquireNextImage(image_info,image,exception);
   4271         if (GetNextImageInList(image) == (Image *) NULL)
   4272           {
   4273             status=MagickFalse;
   4274             break;
   4275           }
   4276         image=SyncNextImageInList(image);
   4277         status=SetImageProgress(image,LoadImagesTag,TellBlob(image),
   4278           GetBlobSize(image));
   4279         if (status == MagickFalse)
   4280           break;
   4281      }
   4282   }
   4283   /*
   4284     Free resources.
   4285   */
   4286   if (stream_info->offsets != (ssize_t *) NULL)
   4287     stream_info->offsets=(ssize_t *)
   4288       RelinquishMagickMemory(stream_info->offsets);
   4289   stream_info=(DCMStreamInfo *) RelinquishMagickMemory(stream_info);
   4290   if (info.scale != (Quantum *) NULL)
   4291     info.scale=(Quantum *) RelinquishMagickMemory(info.scale);
   4292   if (graymap != (int *) NULL)
   4293     graymap=(int *) RelinquishMagickMemory(graymap);
   4294   if (bluemap != (int *) NULL)
   4295     bluemap=(int *) RelinquishMagickMemory(bluemap);
   4296   if (greenmap != (int *) NULL)
   4297     greenmap=(int *) RelinquishMagickMemory(greenmap);
   4298   if (redmap != (int *) NULL)
   4299     redmap=(int *) RelinquishMagickMemory(redmap);
   4300   if (image == (Image *) NULL)
   4301     return(image);
   4302   (void) CloseBlob(image);
   4303   if (status == MagickFalse)
   4304     return(DestroyImageList(image));
   4305   return(GetFirstImageInList(image));
   4306 }
   4307 
   4308 /*
   4310 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   4311 %                                                                             %
   4312 %                                                                             %
   4313 %                                                                             %
   4314 %   R e g i s t e r D C M I m a g e                                           %
   4315 %                                                                             %
   4316 %                                                                             %
   4317 %                                                                             %
   4318 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   4319 %
   4320 %  RegisterDCMImage() adds attributes for the DCM image format to
   4321 %  the list of supported formats.  The attributes include the image format
   4322 %  tag, a method to read and/or write the format, whether the format
   4323 %  supports the saving of more than one frame to the same file or blob,
   4324 %  whether the format supports native in-memory I/O, and a brief
   4325 %  description of the format.
   4326 %
   4327 %  The format of the RegisterDCMImage method is:
   4328 %
   4329 %      size_t RegisterDCMImage(void)
   4330 %
   4331 */
   4332 ModuleExport size_t RegisterDCMImage(void)
   4333 {
   4334   MagickInfo
   4335     *entry;
   4336 
   4337   static const char
   4338     *DCMNote=
   4339     {
   4340       "DICOM is used by the medical community for images like X-rays.  The\n"
   4341       "specification, \"Digital Imaging and Communications in Medicine\n"
   4342       "(DICOM)\", is available at http://medical.nema.org/.  In particular,\n"
   4343       "see part 5 which describes the image encoding (RLE, JPEG, JPEG-LS),\n"
   4344       "and supplement 61 which adds JPEG-2000 encoding."
   4345     };
   4346 
   4347   entry=AcquireMagickInfo("DCM","DCM",
   4348     "Digital Imaging and Communications in Medicine image");
   4349   entry->decoder=(DecodeImageHandler *) ReadDCMImage;
   4350   entry->magick=(IsImageFormatHandler *) IsDCM;
   4351   entry->flags^=CoderAdjoinFlag;
   4352   entry->flags|=CoderDecoderSeekableStreamFlag;
   4353   entry->note=ConstantString(DCMNote);
   4354   (void) RegisterMagickInfo(entry);
   4355   return(MagickImageCoderSignature);
   4356 }
   4357 
   4358 /*
   4360 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   4361 %                                                                             %
   4362 %                                                                             %
   4363 %                                                                             %
   4364 %   U n r e g i s t e r D C M I m a g e                                       %
   4365 %                                                                             %
   4366 %                                                                             %
   4367 %                                                                             %
   4368 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   4369 %
   4370 %  UnregisterDCMImage() removes format registrations made by the
   4371 %  DCM module from the list of supported formats.
   4372 %
   4373 %  The format of the UnregisterDCMImage method is:
   4374 %
   4375 %      UnregisterDCMImage(void)
   4376 %
   4377 */
   4378 ModuleExport void UnregisterDCMImage(void)
   4379 {
   4380   (void) UnregisterMagickInfo("DCM");
   4381 }
   4382