Specifying C FIND Rsp DICOM Elements

The LEADTOOLS Storage Server Manager DICOM listening service responds to received C-FIND Requests with one or more C-FIND Reponses. The C-FIND response contains DICOM attributes that are specified in the request.

To use a custom database schema, a configuration file must be defined so that the DICOM listening service to fill the C-FIND Response with the proper attributes, and set the attribute values with the corresponding data from the database.

The default configuration file that ships with LEAD Storage Server Manager is named QueryIOD.xml. The default configuration is defined to return attributes, and sequences of attributes for the shipping database. For the tutorial database, we do not return sequences of items.

The structure of QueryIOD.xml is as follows. It consists of <patientLevel>, <studyLevel>, <seriesLevel>, and <imageLevel> elements, each of which contain one or more <element> elements.

<query> 
<patientLevel> 
<element>...</element> 
<element>...</element> 
... 
</patientLevel> 
 
<studyLevel> 
<element>...</element> 
<element>...</element> 
... 
</ studyLevel > 
 
< seriesLevel > 
<element>...</element> 
<element>...</element> 
... 
</ seriesLevel > 
 
<imageLevel> 
<element>...</element> 
<element>...</element> 
... 
</ imageLevel > 
</query> 

Each <element> element corresponds to an attribute in the C-FIND Request, and provides a mapping a corresponding value in the database.

The following is an example <element> for the tutorial database. It maps the DICOM element PatientID (0010,0010) to the corresponding table name (MyPatientTable) and column (PatientName).

<element tag="(0010,0010)" 
 	   tagName="PatientName" 
         vr="PN" 
 	   minVM="1" 
 	   maxVM="1" 
 	   vmDivider="1" 
 	   keyType="Required" 
 	   matchingType="WildCard" 
tableName="MyPatientTable"  
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer" 
         columnsName="PatientName" /> 

Attribute

Explanation

tag

DICOM data element tag (group,element)

tagName

Named constant name (from class DicomTag)

vr

Value representation that indicates the type of the value stored in the data element

minVM

Minimum value multiplicity -minimum number of values that may be stored

maxVM

Maximum value multiplicity - maximum number of values that may be stored

vmDivider

Number of stored values must be a multiple of the vmDivider

keyType

matchingType

One of the following (defined in Part 4 of DICOM Specification)

  • NotApplicable
  • SingleValue
  • Range
  • WildCard
  • ListOfUID

tableName

DataSet Table name that contains the data

matchingEntity

Fully qualified class name, followed by assembly name defining the class

The fully qualified class is one that derives from class CatalogEntity

For the tutorial, it is one of the following:

  • class MyPatient : CatalogEntity
  • class MyStudy : CatalogEntity
  • class MySeries : CatalogEntity
  • class MyInstance : CatalogEntity

For the tutorial, the assembly name is

  • My.Medical.Storage.DataAccessLayer

columnsName

DataSet Column name that contains the data

The full text of the MyQueryIOD.xml is given below:

MyQueryIOD.xml

<?xml version="1.0" encoding="utf-8" ?> 
<query> 
   <patientLevel> 
      <element tag="(0010,0010)" 
               tagName="PatientName" 
               vr="PN" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="WildCard" 
               tableName="MyPatientTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer" 
               columnsName="PatientName" /> 
      <element tag="(0010,0020)" 
               tagName="PatientID" 
               vr="LO" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Unique" 
               matchingType="SingleValue" 
               tableName="MyPatientTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer" 
               columnsName="PatientIdentification" /> 
      <element tag="(0010,0030)" 
               tagName="PatientBirthDate" 
               vr="DA" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="Range" 
               tableName="MyPatientTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer" 
               columnsName="PatientBirthday" /> 
      <element tag="(0010,0040)" 
               tagName="PatientSex" 
               vr="CS" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="SingleValue" 
               tableName="MyPatientTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer" 
               columnsName="PatientSex" /> 
      <element tag="(0010,4000)" 
               tagName="PatientComments" 
               vr="LT" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="NotApplicable" 
               tableName="MyPatientTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer" 
               columnsName="PatientComments" /> 
   </patientLevel> 
   <studyLevel> 
      <element tag="(0008,0020)" 
               tagName="StudyDate" 
               vr="DA" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="Range" 
               tableName="MyStudyTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer" 
               columnsName="StudyStudyDate" /> 
      <element tag="(0008,0050)" 
               tagName="AccessionNumber" 
               vr="SH" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="SingleValue" 
               tableName="MyStudyTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer" 
               columnsName="StudyAccessionNumber" /> 
      <element tag="(0008,0061)" 
               tagName="ModalitiesInStudy" 
               vr="CS" 
               minVM="1" 
               maxVM="-1" 
               vmDivider="1" 
               vmDistinct="true" 
               keyType="Optional" 
               matchingType="SingleValue" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesModality" /> 
      <element tag="(0008,0062)" 
               tagName="SOPClassesInStudy" 
               vr="UI" 
               minVM="1" 
               maxVM="-1" 
               vmDivider="1" 
               vmDistinct="true" 
               keyType="Optional" 
               matchingType="ListOfUID" 
               tableName="MyInstanceTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.Image,My.Medical.Storage.DataAccessLayer" 
               columnsName="ImageUniqueSOPClassUID" /> 
      <element tag="(0008,0090)" 
               tagName="ReferringPhysiciansName" 
               vr="PN" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="SingleValue" 
               tableName="MyStudyTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer" 
               columnsName="StudyReferringPhysiciansName" /> 
      <element tag="(0008,1030)" 
               tagName="StudyDescription" 
               vr="LO" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="NotApplicable" 
               tableName="MyStudyTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer" 
               columnsName="StudyStudyDescription" /> 
     <element tag="(0020,0010)" 
               tagName="StudyID" 
               vr="SH" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="SingleValue" 
               tableName="MyStudyTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer" 
               columnsName="StudyStudyId" /> 
      <element tag="(0020,000D)" 
               tagName="StudyInstanceUID" 
               vr="UI" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Unique" 
               matchingType="ListOfUID" 
               tableName="MyStudyTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer" 
               columnsName="StudyStudyInstanceUID" /> 
   </studyLevel> 
   <seriesLevel> 
      <element tag="(0008,0060)" 
               tagName="Modality" 
               vr="CS" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="SingleValue" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesModality" /> 
      <element tag="(0008,103E)" 
               tagName="SeriesDescription" 
               vr="LO" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="SingleValue" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesSeriesDescription" /> 
      <element tag="(0008,0021)" 
               tagName="SeriesDate" 
               vr="DA" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="Range" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesSeriesDate" /> 
      <element tag="(0018,0015)" 
               tagName="BodyPartExamined" 
               vr="CS" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="Range" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesBodyPartExamined" /> 
      <element tag="(0020,0011)" 
               tagName="SeriesNumber" 
               vr="IS" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="SingleValue" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesSeriesNumber" /> 
      <element tag="(0020,000E)" 
               tagName="SeriesInstanceUID" 
               vr="UI" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="ListOfUID" 
               tableName="MySeriesTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer" 
               columnsName="SeriesSeriesInstanceUID" /> 
   </seriesLevel> 
   <imageLevel> 
      <element tag="(0020,0013)" 
               tagName="InstanceNumber" 
               vr="IS" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="SingleValue" 
               tableName="MyInstanceTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyInstance,My.Medical.Storage.DataAccessLayer" 
               columnsName="ImageImageNumber" /> 
      <element tag="(0008,0016)" 
               tagName="SOPClassUID" 
               vr="UI" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="ListOfUID" 
               tableName="MyInstanceTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyInstance,My.Medical.Storage.DataAccessLayer" 
               columnsName="ImageUniqueSOPClassUID" /> 
      <element tag="(0008,0018)" 
               tagName="SOPInstanceUID" 
               vr="UI" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Required" 
               matchingType="ListOfUID" 
               tableName="MyInstanceTable" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyInstance,My.Medical.Storage.DataAccessLayer" 
               columnsName="SOPInstanceUID" /> 
      <element tag="(0028,0010)" 
               tagName="Rows" 
               vr="US" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="NotApplicable" 
               tableName="ImageInstance" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.ImageInstance,My.Medical.Storage.DataAccessLayer" 
               columnsName="ImageRows" /> 
      <element tag="(0028,0011)" 
               tagName="Columns" 
               vr="US" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="NotApplicable" 
               tableName="ImageInstance" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.ImageInstance,My.Medical.Storage.DataAccessLayer" 
               columnsName="ImageColumns" /> 
      <element tag="(0028,0100)" 
               tagName="BitsAllocated" 
               vr="US" 
               minVM="1" 
               maxVM="1" 
               vmDivider="1" 
               keyType="Optional" 
               matchingType="NotApplicable" 
               tableName="ImageInstance" 
               matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.ImageInstance,My.Medical.Storage.DataAccessLayer" 
               columnsName="ImageBitsAllocated" /> 
   </imageLevel> 
</query> 

Help Version 21.0.2021.11.1
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2021 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Imaging, Medical, and Document
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2021 LEAD Technologies, Inc. All Rights Reserved.