Specifying C FIND Rsp DICOM Elements (original) (raw)

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 , , , and elements, each of which contain one or more 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 corresponds to an attribute in the C-FIND Request, and provides a mapping a corresponding value in the database.

The following is an example 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>