/*!

\page mod_dcmdata dcmdata: a data encoding/decoding library and utility apps

This module contains classes to manage DICOM data structures and files. It
also provides support for DICOMDIR files as required for DICOM storage media.

The main interface classes are:
\li \b DcmFileFormat
\li \b DcmDataset
\li \b DcmItem
\li \b DcmElement

Here are some further classes that are of interest:
\li \b DcmTag
\li \b DcmTagKey
\li \b DicomDirInterface

\section Tools

This module contains the following command line tools:
\li \ref dcm2json
\li \ref dcm2pdf
\li \ref dcm2xml
\li \ref dcmconv
\li \ref dcmcrle
\li \ref dcmdrle
\li \ref dcmdump
\li \ref dcmftest
\li \ref dcmgpdir
\li \ref dcmodify
\li \ref dump2dcm
\li \ref img2dcm
\li \ref pdf2dcm
\li \ref xml2dcm

\section Files

The following file provides further documentation:
\li \ref file_datadict

\section Examples

The following example shows how to load a DICOM file and output the patient's name:

\code
DcmFileFormat fileformat;
OFCondition status = fileformat.loadFile("test.dcm");
if (status.good())
{
  OFString patientName;
  if (fileformat.getDataset()->findAndGetOFString(DCM_PatientName, patientName).good())
  {
    cout << "Patient's Name: " << patientName << endl;
  } else
    cerr << "Error: cannot access Patient's Name!" << endl;
} else
  cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;
\endcode

The following example shows how to create a DICOM dataset and save it to a file:

\code
char uid[100];
DcmFileFormat fileformat;
DcmDataset *dataset = fileformat.getDataset();
dataset->putAndInsertString(DCM_SOPClassUID, UID_SecondaryCaptureImageStorage);
dataset->putAndInsertString(DCM_SOPInstanceUID, dcmGenerateUniqueIdentifier(uid, SITE_INSTANCE_UID_ROOT));
dataset->putAndInsertString(DCM_PatientName, "Doe^John");
/* ... */
dataset->putAndInsertUint8Array(DCM_PixelData, pixelData, pixelLength);
OFCondition status = fileformat.saveFile("test.dcm", EXS_LittleEndianExplicit);
if (status.bad())
  cerr << "Error: cannot write DICOM file (" << status.text() << ")" << endl;
\endcode

The following example shows how to create a general purpose DICOMDIR from multiple files:

\code
DicomDirInterface dicomdir;
OFCondition status = dicomdir.createNewDicomDir();
if (status.good())
{
  while ( /* there are files */ )
    dicomdir.addDicomFile( /* current filename */ );
  status = dicomdir.writeDicomDir();
  if (status.bad())
    cerr << "Error: cannot write DICOMDIR (" << status.text() << ")" << endl;
} else
  cerr << "Error: cannot create DICOMDIR (" << status.text() << ")" << endl;
\endcode

*/

/*!
    \page file_datadict datadict.txt file
    \verbinclude datadict.txt
*/
