Why Private Data Element

Implementations may require communication of information that cannot be contained in Standard Data Elements. Private Data Elements are intended to be used to contain such information.

Private Data Elements have the same structure as Standard Data Elements (i.e., Group, Element, VR, Length and Value). To distinguish private data element from Standard ones, the group number used in the Element Tag of Private Data Elements MUST be an odd number.

Structure of Private Data Element

It is possible that multiple implementers may define Private Elements with the same (odd) group number. To avoid conflicts, Private Elements shall be assigned Private Data Element Tags according to the following rules.

  • Private Creator Data Elements numbered (gggg, 0010-00FF) (gggg is odd) shall be used to reserve a block of Elements with Group Number gggg for use by an individual implementer. The implementer shall insert an identification code in the first unused (unassigned) Element in this series to reserve a block of Private Elements. The VR of the private identification code shall be LO (Long String) and the VM shall be equal to 1.

  • Private Creator Data Element (gggg, 0010), is a Type 1 Data Element that identifies the implementer reserving element (gggg, 1000-10FF), Private Creator Data Element (gggg, 0011) identifies the implementer reserving elements (gggg, 1100-11FF), and so on, until Private Creator Data Element (gggg, 00FF) identifies the implementer reserving elements (gggg, FF00 -FFFF). The total number of blocks that can be reserved and later used within one group is thus 0XFF - 0X10 = 240.

The following table shows the structure of Private Data Elements.

How DicomObjects Handles Private Data Elements

There are 4 different situations where Private Data Elements may be handled differently in DicomObjects:

  • If Private Data Elements are in explicit VR form, DicomObjects is then able to know the VR (value representation) and thus able to tell what type of data they are (i.e. the VR), but of course it still does not know what they “mean”.
  • If Private Data Elements are in implicit VR form, DicomObjects (or any DICOM Toolkit in the world) will not be able to tell what it is and in DicomObjects those elements will be treated as “Unknown Elements”.
  • You can add Private Data Elements to the internal Dictionary held by DicomObjects, by using AddDictionaryElement COM version/.NET version. If the added data element already exists in the dictionary then the existing one will be overridden otherwise the new element will be added in and before the termination of your program DicomObjects knows what it is.
  • When you create a private element to a dataset, then DicomObjects needs to know what VR to use. These are the possible ways to let it know:
    • By using AddDictionaryElement COM version/.NET version as above before adding the attribute
    • In COM, use the AddExplicit method
    • In .NET, use the over-ride for Add with four parameters, including the VR

Note: A valid list of DICOM VR strings can be found here