Thursday, December 15, 2011

Introduction to DICOM - Chapter 5 – Solving a DICOM Communication Problem

Today we are going to diagnose a communication problem between two DICOM applications and hopefully find the reason for the problem and solve it. I know, we didn’t even start talking about the DICOM network protocol, but hey, we’re not going to read all this 3,000 pages standard together before getting our hands dirty, right?
In this post we'll discuss:
  1. Application Entities (AE’s) – the nodes in the DICOM network and their name – AE Title
  2. Association – a network peer-to-peer session between two DICOM applications
  3. Association Negotiation – The first part of the association in which the two AE’s agree on what can and can’t be done during the Association
  4. The Verification Service using the C-ECHO command – a DICOM Service Class that is used to verify a connection, sort of application level ‘ping’.
  5. The Storage Service using the C-STORE command – a DICOM Service that allows one AE to send a DICOM object to another AE
The C in C-ECHO and C-STORE commands stands for Composite. If you remember, in chapter 4 when discussing the DICOM Data Model, we said that DICOM applications exchange composite objects (the DICOM images that we already know) that are composites of modules from different IE's where IE's are the information entities of the Normalized DICOM data model.

Here's the story:
Complaint 20123

Burt Simpson from Springfield Memorial Hospital reports that he can’t send the screen capture to the PACS. He kept clicking the green “Send” button but he always gets the same error: “Operation Failed!”. The log file Burt copied from the system is attached.
You may ask yourself, what’s the point in analyzing a log of an application that we are never going to use? Well, the truth is that all DICOM logs look alike. Actually, most DICOM applications are quite similar because DICOM software implementations have common ancient ancestors. If it’s a C library it may be the DICOM test node, CTN. If it’s Java than it might be dcm4che. Even if it's PHP or other newer languages, the libraries were transcribed and ported from the old C implementations so all DICOM logs are similar.

Thursday, December 1, 2011

Introduction to DICOM - Chapter 4 - DICOM Objects

Chapter 4 – DICOM Objects
In chapter 3 we’ve learned about DICOM elements. Every element is one piece of typed data with a pre defined, well specified meaning. There are thousands of DICOM elements (See chapter 6 of the standard) from the very basic attributes of patient name and birth date to the most esoteric uses of 3D surface vortices. In this chapter we’re going to collect elements into image object that is called Secondary Capture Image. 

The guys at DICOM did a lot of very good work and created well defined classes for a very detailed Data Model. This is why I always advise to dig in the DICOM standard before designing your imaging device software because there’s a very good chance that the DICOM technical committees already did the work for you and you can save a lot of expansive design time this way. 

In a way DICOM objects definitions are similar to object oriented programming. I prefer though the analog to interfaces specifications. The motivation to adhere to a standard is to enable interoperability. By detailing information object definitions (IOD’s) DICOM enables us to exchange virtual objects between applications without knowing in advance anything about the application we are going to interface with. 

In this chapter I'm going to complete chapter’s 3 examples by adding elements to the object until it’s a valid Secondary Capture Image according to the DICOM standard. Secondary Capture Image is the simplest DICOM image object. Secondary Captures is not related to any specific device. It has the very basic set of elements that a DICOM application needs in order to display and archive a DICOM image properly.

Monday, November 28, 2011

Introduction to DICOM - Chapter 3 - DICOM Elements

Chapter 3 – DICOM Elements

Let’s start with a useful example. Suppose you are a dermatologist and that you use your Smartphone digital camera to record and track patients’ skin condition. You practice a simple procedure that is basically this:

1. Take a photo

2. Send it to yourself by email

3. Open the email on your laptop and save the picture in a folder having the patient name.

As programmers, we don’t have to talk much about the flows of this practice but for a small, one doctor clinic, this might just work.

In this lesson, we’ll take the JPEG image and DICOMIZE it. When we DICOMIZE an Image we wrap the image in a DICOM envelope and add important data that is required by the DICOM standard in order to enable all DICOM enabled applications to read and display the image correctly. It’s true that non DICOM application can display the JPEG image just as it is now without DICOMIZING but that’s another story.

Thursday, November 17, 2011

Special offer for the new HL7Kit Pro 1.5

The new version 1.5 of HL7Kit Pro - HL7 to Database Integration Engine was released today. To celebrate the new release, the new version is offered at only $249 and includes all 4 applications in a single installation package. We've come to realize that our users prefer having the entire product installed on the production server including the HL7 Sender, HL7 Receiver and the HL7 Mapping Tool.

The main new feature of the new release is the support of multiple protocol versions and multiple mapping rules for a single runtime service. The runtime service can be configured to use different message definition files and different mapping XML for every remote application. This feature was requested long ago by many customers and a workaround to allow this was introduced in version 1.2. Now this feature is fully integrated into the product. The new release can be downloaded here.

Friday, October 28, 2011

HL7Kit Video Tutorials

If one picture worth a thousand words, how much does a 20 minutes video tutorials worth?
The HL7Kit web site promise that "You are 20 minutes away from HL7 integration!" I checked that again, this time on film.
From download to runtime deployment, a series of five detailed videos showing step by step how to set up a ADT^A01 message interface using HL7Kit.
Here it is. Comments and questions are most welcome.

Tuesday, October 11, 2011

Introduction to DICOM - Chapter 1 - Introduction

Introduction to DICOM

Chapter 1: Introduction

DICOM is a software integration standard that is used in Medical Imaging. All modern medical imaging systems (AKA Imaging Modalities) Equipment like X-Rays, Ultrasounds, CT (Computed Tomography), and MRI (Magnetic Resonance Imaging) support DICOM and use it extensively.

In this tutorial I present a high level review of DICOM. We will look at DICOM from the user point of view trying to avoid the fine details when possible.

Introduction to DICOM - Chpater 2 - Why is it this way in DICOM?

Introduction to DICOM
Chpater 2 - Why is it this way in DICOM?
Many times when I explain features and aspects of DICOM I get questions like, “Why do you need DICOM if you have JPEG and XML?”; or, ”why is DICOM so complicated?”. Many variants of such questions continually come up over and over again. These types of questions can be very broad or very specific and relate to all kind of choices that the people who write the standard make and the options that they take.

Sunday, October 9, 2011

Converting Bitmap, JPEG and PDF to DICOM

Imagine you're a dermatologist taking pictures of patients' skin for treatment tracking using a digital camera. The pictures are JPEG's and have no patient info in them. If you could convert them to DICOM and send them to the clinic PACS, that would be a great advancement.

With the new RZDCX version and up (RZDCX DICOM Toolkit download page) implementing an application that does just that becomes very simple.

Sunday, September 25, 2011

Open Source HL7 Sender

HL7 Sender source code is now available for free download.
The full source code of the HL7 editor / HL7 sender application can be obtained from the product web site

Sunday, May 15, 2011

RZDCX DICOM Library Release

The new release of RZDCX - Fast Strike DICOM Toolkit addresses customers change requests and enhancements.
The change log is detailed in the following table.

253newfixedMar 23zroniRZDCXMar 23zroni53Limit log file sizeedit
254newfixedApr 20zroniRZDCX10:52zroni33Support Unicode filenamesedit

256newfixedMay 14zroniRZDCXMay 14zroni53Add Status Detail to Error Messageedit

All changes does not affect the default behavior of the DICOM Library.

Change #253 addresses the size of the log file. This change enables the user to set a size limit in terms of number of messages in the file. The change introduces new methods to the DCXAPP interface that control the log file size and filename. For more information please read the DICOM Library Documentation page dealing with DICOM Diagnostics and Logging.

Change #254 adds support for Unicode filenames. After this change, all method parameters that carry filenames (e.g. OnStoreSetup, OnStoreDone, SaveFile, openFile, Send, CommitFiles) may use Unicode filenames strings. For example, if your application requires to save DICOM files with names with Mandarin characters, this is now supported.

Change #256 adds more information to the error description that is provided when a DICOM command fails by dumping all optional command attributes that were provided by the peer application into the error description string. The status details attributes are optional elements that a SCP may provide when commands fail. These may be a list of offending elements or other information that can help diagnose the problem. See for example DICOM Stabdard part 7, Section describing N-CREATE Status Detail.

Sunday, February 27, 2011

RZDCX Release Adds DICOMIZER and Enhanced Logging

Update: a full featured DICOMIZER is available in the following link: The new release ( of RZDCX fast strike DICOM toolkit adds more functionality and enhanced features. As always, all new features emerge from specific user requests and address their requirements.

New example applications demonstrate the new features. Most notable is the C# DICOMIZER example that converts JPEG and Bitmap files to DICOM.

Tuesday, February 1, 2011

New HL7Kit Release 1.4 adds multiple destinations

We're happy to announce the new release 1.4 of HL7Kit, HL7 Integration Engine.
This release takes HL7Kit a major step forward with the new multiple-destinations feature.
With multiple destinations, HL7Kit can serve as a dispatcher for HL7 messages, sending the same message to multiple applications.
Every destination is monitored independently and has it's own retry counter, logging and error handling.
Users may select to send messages to all configured destinations or just to specific ones, depending on integration needs.
In addition, this release includes new message structure definitions for MDM messages.
A complete list of the features can be found in the updated user's manual available for download from the product support page at

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!