Basic Film Session
A Basic Film Session is a Normalised Instance which represents the whole session of Printing as requested by the SCU. Its properties control aspects such as the number of copies of each page to print.
DicomObjects.NET The values in this object are controlled by setting values into the DicomDataset provided by the Session property of the DicomPrint object, before printing any images.
DicomObjects.COM The values in this object are controlled by setting values into the DicomDataset provided by the Session property of the DicomPrint object, before printing any images.
Why might C-MOVE not work in practice? It is very common for users new to DICOM and DicomObjects to find that they can get queries (C-FIND) working, but fail when they try to retrieve images using C-MOVE (Using either MoveImages or GetUsingMove). There are a number of possible reasons for this, but by far the commonest is the first - failing to set up the server. Before looking at the possibilities in detail, it is worth looking at the difference between C-MOVE and other DICOM protocols, as this explains most of the issues.
Calculate windowing width and level from Image pixel data
Calculating windowing width and level from Image pixel data can be done via accessing the raw pixel data and applying your own algorithm or via the DicomObjects method SetDefaultWindows of the DicomImage object. The problem with this, however, is that there will be no correct values as the best values depend on which area of the image contains the anatomical region the user is interested in looking at (which is why viewer applications always have the tools to change them).
Calculating SUV from PET images
If a PET image has field [54,1001] set to BQML, then the PET image can be displayed in SUV. Before you can do this you will need to do a conversion from activity concentration to SUV.
Examples of SUV types:
SUV Body Weight (SUV-bw) SUV Body Surface Area (SUV-bsa) SUV Lean Body Mass (SUV-lbm) SUVbw and SUVbsa equations are taken from Kim et al. Journal of Nuclear Medicine. Volume 35, No.
Catch non-zero final status with DicomAssociation
In DicomObjects, we don’t throw exceptions when non-zero final status is received during the DICOM associations. The non-zero final status get passed by us and it should be the developers’ responsibility to check and, if needed, alert the user for any warnings or failures.
To catch the final status and also the related warning/error fields, you can take a look at the following code (VB6 for COM version and vb.
This article explains how to get the fastest performance for cine images such as cardiac angiograms
For multi-frame images, DicomObjects has several mechanisms to make best use of the facilities available in any PC, but fast display of cine images is a challenging task, and the optimum method will differ from one PC to another depending on the amount of RAM, the speed of the disk, the type of display card, and the nature, compression and size of the images themselves.
Comparison of MoveImages MoveSync GetUsingMove and Move
The DicomObjects.COM version of DicomObjects provides 4 different mechanisms for initiating C-MOVE operations, and we are often asked about the differences and relative benefits. This page is therefore a summary of the differences.
Why is C-MOVE so difficult? The C-MOVE protocol itself is described here
There are several features of C-MOVE itself which are mode difficult to handle than most other operations, many of which related to the network problems associated with the need for a reverse association back from the server to the client - these are detailed in the page C-MOVE Problems.
A Composite Instance is the official DICOM term for a persistent storable object. Whilst most composite instances are Images (with pixel data), DICOM has plenty of other Composite Instance types, such as:
Structured Reports Key Image Notes Presentation States Radiotherapy Objects Every object in DICOM, whether a permanent Composite Instance or merely a transient Normalised Object as used in Printing has a unique UID called its Instance UID. This is different from the SOP class UID which is shared with all other objects of the same type.
This is a new licensing model to deal with environments such as AWS where the hosted servers where they constantly change their machine ID (which is tied to the licence) and as a result the licence activated becomes invalid; which has becomes a problem for developers to re-activate the licence on their customers’ system.
To try to avoid such nightmare and reduce the amount of admin and paper work, we have set up a new way of how licence and licence activation is controlled and invoiced.
Concurrent License (RAM) Relay Server
DicomObjects’ concurrent licensing model allows users to set up an internal relay server using Asp.net (as a web service) which acts as a gateway for clients that do not have any Internet access. Each time a client machine sends a request out, that request is sent directly to the relay server, which in turn polls the live DicomObjects licensing server. As soon as a response is recieved by the relay server, it then sends that response back to the original client.
A config file may be used to over-ride some aspects of DicomObjects.NET behaviour without the need to recompile. This is broadly equivalent to the registry as used in the COM version, but has the advantage of being application-specific, avoiding any side-effects for other applications.
The config file is a simple text file called DicomObjects.Config in the same directory as the copy of the DicomObjects dll being used (which is normally the same as the application using it).
A conformance statement is a detailed description, in a specific format (as defined in Part 2 of DICOM) of the DICOM-specific features of a particular product.
Amongst other things, it describes:
The SOP classes and transfer syntaxes supported What “real-world” activity triggers or is triggered by what network operations Character sets supported Most of the content of a conformance statement relates to which parts of DICOM an application chooses to support, and how these are activated in the “real-world”, so conformance statements can only apply to complete applications, not toolkits, as a generic conformance statement written for “DicomObjects” would not be appropriate for any products written using it.
Conversion from the COM version of DicomObjects to the .NET version
Conversion of a DicomObjects ActiveX/COM project to .NET looks initially daunting, but in fact is quite simple, and for those using any of the complicated ActionComplete/ActionUpdate mechanisms and asynchronous DicomConnection objects will find that the resulting code is lot simpler and easier to maintain after conversion. As ever, we are happy to help with any conversion issues.
Threading Model The .NET version is free-threaded so all the events fire on their own threads, rather than being marshalled back onto the main thread.
Converting from DicomQuery to DicomConnection for Q/R
Note: This page applies only to the COM version of DicomObjects - the threading model of the equivalent DicomAssociation object in the .NET version is very different
All the DicomQuery-based operations can also be performed using a DicomConnection object, and doing so has several benefits:
It allows finer control over the exact presentation contexts offered Multiple operations can occur on one association Perhaps most importantly, if the DicomConnection is asynchronous, then it provides the best solution to using C-MOVE in DicomObjects, avoiding the problems of deadlocking or lack of return status which affect some of the alternatives.