Sunday, January 16, 2011

DICOM SR - Structured Reports Made Easy with RZDCX 2.0

A new year is the perfect time for a new product version.
2011 is the year for the new release of RDCX DICOM Toolkit version 2.0 with structured reporting.

The major feature of this release is the all new DCXSR interface for creating DICOM Structured Reports using the dynamic SR dictionary.

If you had the chance to play around with DICOM SR's, you'll probably agree with me about one thing: so many attributes for so little information, ha? Just look at all these nested sequences, oh my god!


Wouldn't it be nice if we could just write a little piece of code, like this one for example:

DCXSR SR = new DCXSR();
SR.CreateNewReport("1.2.840.10008.5.1.4.1.1.88.22"; /* Enhanced SR */, "209074");
SR.AddDictContainer("121070", SR_CONTINUITY.SR_SEPARATE);
SR.AddDictCodedValue("G-C0E3", "T-35300");
SR.AddDictNumericValue("G-0380", (float)12.34, null);

DCXOBJ obj = SR.Object;
obj.saveFile("sr1.dcm");

and get all these tags generated by the toolkit:

# Dicom-File-Format


# Dicom-Meta-Information-Header
# Used TransferSyntax: LittleEndianExplicit
(0002,0000) UL 192                                      #   4, 1 MetaElementGroupLength
(0002,0001) OB 00\01                                    #   2, 1 FileMetaInformationVersion
(0002,0002) UI =EnhancedSR                              #  30, 1 MediaStorageSOPClassUID
(0002,0003) UI [1.2.276.0.7230010.3.1.4.1506483292.1392.1294531941.7] #  52, 1 MediaStorageSOPInstanceUID
(0002,0010) UI =LittleEndianExplicit                    #  20, 1 TransferSyntaxUID
(0002,0012) UI [2.16.124.113543.6021.1]                 #  22, 1 ImplementationClassUID
(0002,0013) SH [RZDCX_2_0_0_0]                          #  14, 1 ImplementationVersionName


# Dicom-Data-Set
# Used TransferSyntax: LittleEndianExplicit
(0008,0012) DA [20110109]                               #   8, 1 InstanceCreationDate
(0008,0013) TM [021221]                                 #   6, 1 InstanceCreationTime
(0008,0014) UI [1.2.276.0.7230010.3.0.3.5.4]            #  28, 1 InstanceCreatorUID
(0008,0016) UI =EnhancedSR                              #  30, 1 SOPClassUID
(0008,0018) UI [1.2.276.0.7230010.3.1.4.1506483292.1392.1294531941.7] #  52, 1 SOPInstanceUID
(0008,0020) DA (no value available)                     #   0, 0 StudyDate
(0008,0023) DA [20110109]                               #   8, 1 ContentDate
(0008,0030) TM (no value available)                     #   0, 0 StudyTime
(0008,0033) TM [021221]                                 #   6, 1 ContentTime
(0008,0050) SH (no value available)                     #   0, 0 AccessionNumber
(0008,0060) CS [SR]                                     #   2, 1 Modality
(0008,0070) LO (no value available)                     #   0, 0 Manufacturer
(0008,0090) PN (no value available)                     #   0, 0 ReferringPhysiciansName
(0008,1111) SQ (Sequence with undefined length #=0)     # u/l, 1 ReferencedPerformedProcedureStepSequence
(fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
(0010,0010) PN (no value available)                     #   0, 0 PatientsName
(0010,0020) LO (no value available)                     #   0, 0 PatientID
(0010,0030) DA (no value available)                     #   0, 0 PatientsBirthDate
(0010,0040) CS (no value available)                     #   0, 0 PatientsSex
(0020,000d) UI [1.2.276.0.7230010.3.1.2.1506483292.1392.1294531941.8] #  52, 1 StudyInstanceUID
(0020,000e) UI [1.2.276.0.7230010.3.1.3.1506483292.1392.1294531941.9] #  52, 1 SeriesInstanceUID
(0020,0010) SH (no value available)                     #   0, 0 StudyID
(0020,0011) IS [1]                                      #   2, 1 SeriesNumber
(0020,0013) IS [1]                                      #   2, 1 InstanceNumber
(0040,a040) CS [CONTAINER]                              #  10, 1 ValueType
(0040,a043) SQ (Sequence with undefined length #=1)     # u/l, 1 ConceptNameCodeSequence
  (fffe,e000) na (Item with undefined length #=3)         # u/l, 1 Item
    (0008,0100) SH [209074]                                 #   6, 1 CodeValue
    (0008,0102) SH [99PMP]                                  #   6, 1 CodingSchemeDesignator
    (0008,0104) LO [Diagnostic Imaging Report]              #  26, 1 CodeMeaning
  (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
(0040,a050) CS [SEPARATE]                               #   8, 1 ContinuityOfContent
(0040,a372) SQ (Sequence with undefined length #=0)     # u/l, 1 PerformedProcedureCodeSequence
(fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
(0040,a491) CS [PARTIAL]                                #   8, 1 CompletionFlag
(0040,a493) CS [UNVERIFIED]                             #  10, 1 VerificationFlag
(0040,a730) SQ (Sequence with undefined length #=1)     # u/l, 1 ContentSequence
  (fffe,e000) na (Item with undefined length #=5)         # u/l, 1 Item
    (0040,a010) CS [CONTAINS]                               #   8, 1 RelationshipType
    (0040,a040) CS [CONTAINER]                              #  10, 1 ValueType
    (0040,a043) SQ (Sequence with undefined length #=1)     # u/l, 1 ConceptNameCodeSequence
      (fffe,e000) na (Item with undefined length #=3)         # u/l, 1 Item
        (0008,0100) SH [121070]                                 #   6, 1 CodeValue
        (0008,0102) SH [DCM]                                    #   4, 1 CodingSchemeDesignator
        (0008,0104) LO [Findings]                               #   8, 1 CodeMeaning
      (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
    (0040,a050) CS [SEPARATE]                               #   8, 1 ContinuityOfContent
    (0040,a730) SQ (Sequence with undefined length #=6)     # u/l, 1 ContentSequence
      (fffe,e000) na (Item with undefined length #=4)         # u/l, 1 Item
        (0040,a010) CS [HAS CONCEPT MOD]                        #  16, 1 RelationshipType
        (0040,a040) CS [CODE]                                   #   4, 1 ValueType
        (0040,a043) SQ (Sequence with undefined length #=1)     # u/l, 1 ConceptNameCodeSequence
          (fffe,e000) na (Item with undefined length #=3)         # u/l, 1 Item
            (0008,0100) SH [G-C0E3]                                 #   6, 1 CodeValue
            (0008,0102) SH [SRT]                                    #   4, 1 CodingSchemeDesignator
            (0008,0104) LO [Finding Site]                           #  12, 1 CodeMeaning
          (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
        (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
        (0040,a168) SQ (Sequence with undefined length #=1)     # u/l, 1 ConceptCodeSequence
          (fffe,e000) na (Item with undefined length #=3)         # u/l, 1 Item
            (0008,0100) SH [T-35300]                                #   8, 1 CodeValue
            (0008,0102) SH [SRT]                                    #   4, 1 CodingSchemeDesignator
            (0008,0104) LO [Mitral Valve]                           #  12, 1 CodeMeaning
          (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
        (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
      (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
      (fffe,e000) na (Item with undefined length #=4)         # u/l, 1 Item
        (0040,a010) CS [CONTAINS]                               #   8, 1 RelationshipType
        (0040,a040) CS [NUM]                                    #   4, 1 ValueType
        (0040,a043) SQ (Sequence with undefined length #=1)     # u/l, 1 ConceptNameCodeSequence
          (fffe,e000) na (Item with undefined length #=3)         # u/l, 1 Item
            (0008,0100) SH [G-0380]                                 #   6, 1 CodeValue
            (0008,0102) SH [SRT]                                    #   4, 1 CodingSchemeDesignator
            (0008,0104) LO [Right Ventricular Peak Systolic Pressure] #  40, 1 CodeMeaning
          (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
        (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
        (0040,a300) SQ (Sequence with undefined length #=1)     # u/l, 1 MeasuredValueSequence
          (fffe,e000) na (Item with undefined length #=2)         # u/l, 1 Item
            (0040,08ea) SQ (Sequence with undefined length #=1)     # u/l, 1 MeasurementUnitsCodeSequence
              (fffe,e000) na (Item with undefined length #=3)         # u/l, 1 Item
                (0008,0100) SH [mm[Hg]]                                 #   6, 1 CodeValue
                (0008,0102) SH [UCUM]                                   #   4, 1 CodingSchemeDesignator
                (0008,0104) LO [millimeter of mercury]                  #  22, 1 CodeMeaning
              (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
            (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
            (0040,a30a) DS [12.3400002]                             #  10, 1 NumericValue
          (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
        (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
      (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
    (fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem
  (fffe,e00d) na (ItemDelimitationItem)                   #   0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem)               #   0, 0 SequenceDelimitationItem

Isn't that amazing?! So much for so little ...

Well, we are not going to discuss the sense behind that because SR is a part of the standard and the demand for DICOM SR from the users is constantly increasing.

So how can you integrate DICOM SR's to your DICOM supporting product with RZDCX?

The trick is in a little file, structuredreport.txt that is now part of the DICOM Library distribution.
This file is a structured reporting elements dictionary that you can easily edit and configure for your specific reporting needs. The dictionary should be saved in the same directory as the DLL. Alternatively you can use the OpenDictionary API call to load it from a different location.

The new DICOM SR features in RZDCX is free for evaluation like all the other features but requires special license that is not included in the older 1.x.x.x licenses.

Don't forget to check the new DICOM Toolkit documentation pages and to look at the sample application for version 2.0.0.0 that are available in the DICOM Toolkit download page.

For licensing information of the new DICOM SR API please contact sales@roniza.com

1 comment:

  1. Hello,
    first of all thnx a lot for this blog, it's very usefull for beginner person like me.
    About SR I'm not able to find out special license for trial. Actually I've 2.0.3.2 toolkit and trying to run c# StructureReportExample, as soon as it try to call CreateNewReport "This method requires special license file" exception appear... how can I do to try it?

    ReplyDelete