⚠️ Ceci est un site de traduction non officiel, sans lien avec DCMTK / OFFIS. Pour des informations faisant autorité, consultez la page originale (https://support.dcmtk.org/docs/mod_dcmrt.html).

dcmrt: bibliothèque de radiothérapie et applications utilitaires

Ce module contient des classes permettant de lire, écrire, créer, modifier et accéder à divers objets DICOM de radiothérapie (RT). Ces classes sont générées automatiquement à partir de la version DocBook/XML officielle de la norme DICOM.

Les principales classes d'interface sont :

Pour faciliter l'utilisation de cette interface de bas niveau, certaines classes écrites à la main fournissent des fonctionnalités couramment nécessaires.

Ces classes sont :

Outils

Ce module contient les outils en ligne de commande suivants :

Exemples

L'exemple suivant montre comment charger un fichier RT Dose et afficher le nom du patient :

DcmFileFormat fileformat;

OFCondition status = fileformat.loadFile("rtdose.dcm");

if (status.good())

{

DRTDoseIOD rtdose;

status = rtdose.read(*fileformat.getDataset());

if (status.good())

{

OFString patientName;

status = rtdose.getPatientName(patientName);

if (status.good())

{

cout << "Patient's Name: " << patientName << endl;

} else

cerr << "Error: cannot access Patient's Name (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot read RT Dose object (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot load DICOM file (" << status.text() << ")" << endl;

L'exemple suivant montre comment charger un fichier RT Dose et accéder à l'image de dose mise à l'échelle :

DRTDose rtdose;

OFCondition status = rtdose.loadFile("rtdose.dcm");

if (status.good())

{

const unsigned int frame = 0;

OFVector doseImage;

status = rtdose.getDoseImage(doseImage, frame);

if (status.good())

{

OFVector::iterator it = doseImage.begin();

for (int y = 0; y < doseImage.getDoseImageHeight(); ++y)

{

for (int x = 0; x < doseImage.getDoseImageWidth(); ++x)

{

double value = *it++;

/ do something useful with the dose image pixel /

}

}

} else

cerr << "Error: cannot read RT Dose image (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot load RT Dose object (" << status.text() << ")" << endl;

L'exemple suivant montre comment charger un fichier RT Plan, modifier le nom du patient et l'enregistrer dans un nouveau fichier :

DcmFileFormat fileformat;

OFCondition status = fileformat.loadFile("rtplan.dcm");

if (status.good())

{

DRTPlanIOD rtplan;

status = rtplan.read(*fileformat.getDataset());

if (status.good())

{

status = rtplan.setPatientName("Doe^John");

if (status.good())

{

fileformat.clear();

status = rtplan.write(*fileformat.getDataset());

if (status.good())

{

status = fileformat.saveFile("rtplan_new.dcm");

if (status.bad())

cerr << "Error: cannot save DICOM file (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot write RT Plan object (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot change Patient's Name (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot read RT Plan object (" << status.text() << ")" << endl;

} else

cerr << "Error: cannot load DICOM file (" << status.text() << ")" << endl;

Problèmes connus

Comme la plupart des classes de ce module sont générées automatiquement à partir d'une version exploitable par machine de la norme DICOM et que les objets RT sont connus pour "réutiliser" les mêmes attributs de séquence avec un contenu différent à divers endroits, il peut subsister quelques problèmes liés à des définitions erronées dans certaines sous-séquences. Par exemple, la Referenced Beam Sequence (300C,0004) et la Referenced SOP Sequence (0008,1199) sont des candidates qui ne sont peut-être pas encore gérées à 100% correctement.