X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmDicomDir.cxx;h=f1fd2561784fa24e016817f60594168d37a82ffc;hb=76ac46b16fd92d0fb444f786d4946424d9029315;hp=3bb587188b2833903582e8c809f0412fb0ded67f;hpb=1d3512a4d7c5923dfda2499815655833c6b91b83;p=gdcm.git diff --git a/src/gdcmDicomDir.cxx b/src/gdcmDicomDir.cxx index 3bb58718..f1fd2561 100644 --- a/src/gdcmDicomDir.cxx +++ b/src/gdcmDicomDir.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDicomDir.cxx,v $ Language: C++ - Date: $Date: 2007/04/12 10:43:42 $ - Version: $Revision: 1.191 $ + Date: $Date: 2010/04/09 15:23:40 $ + Version: $Revision: 1.198 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -102,6 +102,64 @@ // PRIVATE // ENCAP DOC // + +/* + +// see also : ftp://medical.nema.org/medical/dicom/final/cp343_ft.doc + +RELATIONSHIP BETWEEN DIRECTORY RECORDS + +Directory Record Type Directory Record Types which may be included + in the next lower-level directory Entity + +(Root Directory Entity) PATIENT, TOPIC, PRIVATE + +PATIENT STUDY, PRIVATE + +STUDY SERIES, VISIT, RESULTS, STUDY COMPONENT, PRIVATE + +SERIES IMAGE, OVERLAY, MODALITY LUT, VOI LUT, CURVE, + STORED PRINT, RT DOSE, RT STRUCTURE SET, RT PLAN, + RT TREAT RECORD, PRESENTATION, WAVEFORM, SR DOCUMENT, + KEY OBJECT DOC, SPECTROSCOPY, RAW DATA, PRIVATE + +IMAGE PRIVATE +OVERLAY PRIVATE +MODALITY LUT PRIVATE +VOI LUT PRIVATE +CURVE PRIVATE +STORED PRINT PRIVATE +RT DOSE PRIVATE +RT STRUCTURE SET PRIVATE +RT PLAN PRIVATE +RT TREAT RECORD PRIVATE +PRESENTATION PRIVATE +WAVEFORM PRIVATE +SR DOCUMENT PRIVATE +KEY OBJECT DOC PRIVATE +SPECTROSCOPY PRIVATE +RAW DATA PRIVATE + +TOPIC STUDY, SERIES, IMAGE, OVERLAY, MODALITY LUT, VOI LUT, + CURVE, STORED PRINT, RT DOSE, RT STRUCTURE SET, + RT PLAN, RT TREAT RECORD, PRESENTATION, WAVEFORM, + SR DOCUMENT, KEY OBJECT DOC, SPECTROSCOPY, RAW DATA, + PRIVATE + +VISIT PRIVATE + +RESULTS INTERPRETATION, PRIVATE + +INTERPRETATION PRIVATE +STUDY COMPONENT PRIVATE +PRIVATE PRIVATE, (any of the above as privately defined) +MRDR (Not applicable) + +Note : Directory Record Types PRINT QUEUE, FILM SESSION, FILM BOX, and + IMAGE BOX were previously defined in DICOM. They have been retired. + See PS 3.3-1998. +*/ + // ---------------------- // The current gdcm version only deals with : // @@ -116,7 +174,7 @@ // Treelike structure management will have to be upgraded // ---------------------------------------------------------------------------- -namespace gdcm +namespace GDCM_NAME_SPACE { //----------------------------------------------------------------------------- // Constructor / Destructor @@ -127,7 +185,7 @@ DicomDir::DicomDir() { Initialize(); // sets all private fields to NULL ParseDir = false; - // NewMeta(); + NewMeta(); } //#ifndef GDCM_LEGACY_REMOVE @@ -252,7 +310,6 @@ bool DicomDir::DoTheLoadingJob( ) } else { - NewMeta(); CreateDicomDir(); } } @@ -423,7 +480,7 @@ bool DicomDir::Write(std::string const &fileName) std::ofstream *fp = new std::ofstream(fileName.c_str(), std::ios::out | std::ios::binary); - if ( !fp ) + if ( !fp ) { gdcmWarningMacro("Failed to open(write) File: " << fileName.c_str()); return false; @@ -435,7 +492,7 @@ bool DicomDir::Write(std::string const &fileName) binary_write( *fp, "DICM"); DicomDirMeta *ptrMeta = GetMeta(); - ptrMeta->WriteContent(fp, ExplicitVR); + ptrMeta->WriteContent(fp, ExplicitVR, true, false); // force writing 0004|1220 [SQ ], that CANNOT exist within DicomDirMeta for(i=0;i<6;++i) @@ -447,7 +504,7 @@ bool DicomDir::Write(std::string const &fileName) cc != Patients.end(); ++cc ) { - (*cc)->WriteContent( fp, ExplicitVR ); + (*cc)->WriteContent( fp, ExplicitVR, false, true ); } // force writing Sequence Delimitation Item @@ -610,6 +667,7 @@ void DicomDir::CreateDicomDir() { // The SeqEntries of "Directory Record Sequence" are parsed. // When a DicomDir tag ("PATIENT", "STUDY", "SERIE", "IMAGE") is found : + // N.B. : VISIT, PRIVATE not fully dealt with // 1 - we save the beginning iterator // 2 - we continue to parse // 3 - we find an other tag @@ -706,7 +764,7 @@ void DicomDir::CreateDicomDir() gdcmErrorMacro( "Add PatientToEnd failed"); } } - /// \to do : deal with PRIVATE (not so easy, since PRIVATE appears + /// \todo : deal with PRIVATE (not so easy, since PRIVATE appears /// at different levels ?!? ) else if ( v == "PRIVATE " ) // for SIEMENS 'CSA Non Image' @@ -727,7 +785,7 @@ void DicomDir::CreateDicomDir() // It was neither a 'PATIENT', nor a 'STUDY', nor a 'SERIE', // nor an 'IMAGE' SQItem. Skip to next item. gdcmWarningMacro( " -------------------------------------------" - << "a non PATIENT/STUDY/SERIE/IMAGE SQItem was found : " + << "a non PATIENT/STUDY/SERIE/IMAGE /VISIT/PRIVATE SQItem was found : " << v); // FIXME : deal with other item types ! @@ -886,6 +944,8 @@ void DicomDir::SetElements(std::string const &path, VectDocument const &list) { // get the current file characteristics patCurName = (*it)->GetEntryString(0x0010,0x0010); + if (patCurName == "") // to prevent further troubles when wild anonymization was performed + patCurName = "gdcm^Patient"; patCurID = (*it)->GetEntryString(0x0010,0x0011); studCurInstanceUID = (*it)->GetEntryString(0x0020,0x000d); studCurID = (*it)->GetEntryString(0x0020,0x0010);