X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=Testing%2FTestBuildUpDicomDir.cxx;fp=Testing%2FTestBuildUpDicomDir.cxx;h=f191a9c8d08bb84f46532a26ddfac286aab005ba;hb=b19adc9e0168b80e420811c89a93dc114493033c;hp=0000000000000000000000000000000000000000;hpb=e61e66c768a00608c2b8dd7603f4b280d745f6bc;p=gdcm.git diff --git a/Testing/TestBuildUpDicomDir.cxx b/Testing/TestBuildUpDicomDir.cxx new file mode 100644 index 00000000..f191a9c8 --- /dev/null +++ b/Testing/TestBuildUpDicomDir.cxx @@ -0,0 +1,379 @@ +/*========================================================================= + + Program: gdcm + Module: $RCSfile: TestBuildUpDicomDir.cxx,v $ + Language: C++ + Date: $Date: 2005/02/02 10:41:10 $ + Version: $Revision: 1.1 $ + + Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de + l'Image). All rights reserved. See Doc/License.txt or + http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "gdcmDocEntry.h" +#include "gdcmDicomDir.h" +#include "gdcmDicomDirPatient.h" +#include "gdcmDicomDirStudy.h" +#include "gdcmDicomDirSerie.h" +#include "gdcmDicomDirImage.h" +#include "gdcmDirList.h" +#include "gdcmDebug.h" +#include "gdcmUtil.h" + +// =============================================================== + +/** + * \brief Builds up ex-nihilo a DICOMDIR file + * adding Patient, Study, Serie, Image descriptions + * to an empty gdcmDicomDir occurence + * and writes a file named NewDICOMDIR. + */ +int TestBuildUpDicomDir(int argc, char *argv[]) +{ + if (argc) + { + std::cerr << "Usage: " << argv[0] << " dummy "; + } + + gdcm::DicomDir *dcmdir; + std::string dirName; + + dcmdir = new gdcm::DicomDir(); + + gdcm::DicomDirPatient *p1; + // --- Forget these 4 lines : + // just to improve test coverage. + p1=dcmdir->GetFirstPatient(); + if (!p1) + std::cout << "BEFORE any Patient creation, a DicomDir has no Patient. Pffff" + << std::endl; + // --- end forget + + // Create patient ONE + // ------------------ + p1 = dcmdir->NewPatient(); + p1->SetValEntry("patientONE",0x0010, 0x0010); + // fill here other patient characteristics + + gdcm::DicomDirStudy *s11; + // --- Forget these 4 lines : + // just to improve test coverage. + s11=p1->GetFirstStudy(); + if (!s11) + std::cout << "BEFORE any Study creation, a Patient has no Study. Pffff" + << std::endl; + // --- end forget + + // Let's create and add a Study for this Patient + s11 = p1->NewStudy(); + s11->SetValEntry("StudyDescrOne.One_",0x0008, 0x1030); + // we know entry (0008,1060) is not yet created + s11->InsertValEntry("Dr Mabuse", 0x0008, 0x1060); + // fill here other Study characteristics + + gdcm::DicomDirStudy *s12 = p1->NewStudy(); + s12->SetValEntry("StudyDescrOne.Two",0x0008, 0x1030); + s12->InsertValEntry("Dr Zorglub", 0x0008, 0x1060); + // fill here other Study characteristics + + gdcm::DicomDirStudy *s13 = p1->NewStudy(); + s13->SetValEntry("StudyDescrOne.Tree",0x0008, 0x1030); + s13->InsertValEntry("Dr Follamour", 0x0008, 0x1060); + // fill here other Study characteristics + + gdcm::DicomDirSerie *s111; + // --- Forget these 4 lines : + // just to improve test coverage. + s111=s11->GetFirstSerie(); + if (!s111) + std::cout << "BEFORE any Serie creation, a Study has no Serie. Pffff" + << std::endl; + // --- end forget + + // Let's create and add a Serie for this Study + s111 = s11->NewSerie(); + s111->SetValEntry("01-01-111", 0x0008, 0x0021); + // fill here other Serie characteristics + + gdcm::DicomDirImage *s1111; + + // --- Forget these 4 lines : + // just to improve test coverage. + s1111=s111->GetFirstImage(); + if (!s1111) + std::cout << "BEFORE any Image creation, a Serie has no Image. Pffff" + << std::endl; + // --- end forget + + // Let's create and add a Image for this Serie + s1111 = s111->NewImage(); + s1111->SetValEntry("imageFileName1111",0x0004,0x1500); + + gdcm::DicomDirImage *s1112 = s111->NewImage(); + s1112->SetValEntry("imageFileName1112",0x0004,0x1500); + + // Create patient TWO + // ------------------ + gdcm::DicomDirPatient *p2 = dcmdir->NewPatient(); + p2->SetValEntry("patientTWO",0x0010, 0x0010); + // fill here other patient characteristics + + gdcm::DicomDirStudy *s21 = p2->NewStudy(); + s21->SetValEntry("StudyDescrTwo.One",0x0008, 0x1030); + // fill here other Study characteristics + + gdcm::DicomDirSerie *s211 = s21->NewSerie(); + s111->SetValEntry("01-01-211", 0x0008, 0x0021); + // fill here other Serie characteristics + + gdcm::DicomDirImage *s2111 = s211->NewImage(); + s2111->SetValEntry("imageFileName2111",0x0004,0x1500); + // fill here other Image characteristics + + gdcm::DicomDirImage *s2112 = s211->NewImage(); + s2112->SetValEntry("imageFileName1122",0x0004,0x1500); + // fill here other Image characteristics + + // Create patient TREE + // ------------------- + gdcm::DicomDirPatient *p3 = dcmdir->NewPatient(); + p3->SetValEntry("patientTHREE",0x0010, 0x0010); + // fill here other Patient characteristics + + // Add a new Serie/Image for a Patient's Study created a long time ago + // ------------------------------------------------------------------- + gdcm::DicomDirSerie *s131 = s13->NewSerie(); + s111->SetValEntry("01-01-131", 0x0008, 0x0021); + // fill here other Serie characteristics + + gdcm::DicomDirImage *s1311 = s131->NewImage(); + s1311->SetValEntry("imageFileName1311",0x0004,0x1500); + // fill here other Image characteristics + + // Print + std::cout << "Test/BuildUpDicomDir: Test Print of patients\n"; + p1->Print(); + std::cout << "Test/BuildUpDicomDir: -------------------\n"; + p2->Print(); + std::cout << "Test/BuildUpDicomDir: -------------------\n"; + p3->Print(); + std::cout << "Test/BuildUpDicomDir: Test Print of patients ended\n"; + + if( !dcmdir->IsReadable() ) + { + std::cout<<" Created DicomDir " + <<" is not readable"<SetPrintLevel(-1); + dcmdir->Print(); + + // Write it on disc + dcmdir->WriteDicomDir("NewDICOMDIR"); + delete dcmdir; + + // Read the newly written DicomDir + gdcm::DicomDir *newDicomDir = new gdcm::DicomDir("NewDICOMDIR"); + if( !newDicomDir->IsReadable() ) + { + std::cout<<" Written DicomDir 'NewDICOMDIR'" + <<" is not readable"<GetFirstPatient(); + p2 = newDicomDir->GetNextPatient(); + p3 = newDicomDir->GetNextPatient(); + + if (!p1 || !p2 || !p3) + { + std::cout << "A patient is missing in written DicomDir" + << std::endl; + delete newDicomDir; + return 1; + } + + std::cout <GetEntryValue(0x0010, 0x0010) != "patientONE" ) + { + std::cout << "0x0010,0x0010 [" + << p1->GetEntryValue(0x0010, 0x0010) + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Patient : [" + << p1->GetEntryValue(0x0010, 0x0010) + << "]" << std::endl; + + if ( !(s11 = p1->GetFirstStudy()) ) + { + std::cout << "missing first Study Patient One" << std::endl; + errorFound = true; + break; + } + valueStuff = s11->GetEntryValue(0x0008, 0x1030); + if ( valueStuff.find("StudyDescrOne.One_") >= valueStuff.length() ) + { + std::cout << "1 : 0x0008,0x1030 [" + << valueStuff + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Study : [" + << valueStuff + << "]" << std::endl; + + valueStuff = s11->GetEntryValue(0x0008, 0x1060); + if (!gdcm::Util::DicomStringEqual(valueStuff, "Dr Mabuse") ) + { + std::cout << "2 : 0x0008,0x1060 [" + << s11->GetEntryValue(0x0008,0x1060) + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Pysician : [" + << valueStuff + << "]" << std::endl; + if ( !(s12 = p1->GetNextStudy()) ) + { + errorFound = true; + break; + } + if ( gdcm::Util::DicomStringEqual(s12->GetEntryValue(0x0008, + 0x1030),"StudyDescrOne.Two " )) + { + std::cout << "3 0x0008,0x1030 [" + << s12->GetEntryValue(0x0008,0x1030) + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Study Descr : [" + << s12->GetEntryValue(0x0008,0x1030) + << "]" << std::endl; + + if ( gdcm::Util::DicomStringEqual(s12->GetEntryValue(0x0008, + 0x1060),"Dr Zorglub " )) + { + std::cout << "4 0x0008,0x1060 [" + << s12->GetEntryValue(0x0008,0x1060) + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Pysician : [" + << s12->GetEntryValue(0x0008,0x1060) + << "]" << std::endl; + + if ( !(s13 = p1->GetNextStudy()) ) + { + std::cout << "Study StudyDescrOne.Tree missing" << std::endl; + break; + } + if ( s13->GetEntryValue(0x0008, 0x1030) != "StudyDescrOne.Tree" ) + { + errorFound = true; + break; + } + std::cout << "Study : [" + << valueStuff + << "]" << std::endl; + + valueStuff = s13->GetEntryValue(0x0008, 0x1060); + if (!gdcm::Util::DicomStringEqual(valueStuff, "Dr Follamour") ) + { + std::cout << "5 0x0008,0x1060 [" + << valueStuff + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Pysician : [" + << valueStuff + << "]" << std::endl; + + if (!(s111 = s11->GetFirstSerie()) ) + { + std::cout << "Serie 01-01-111 missing" << std::endl; + errorFound = true; + break; + } + + valueStuff = s111->GetEntryValue(0x0008, 0x0021); + if (!gdcm::Util::DicomStringEqual(valueStuff, "01-01-131") ) + { + std::cout << "6 0x0008,0x0021 [" + << valueStuff + << "]" << std::endl; + errorFound = true; + break; + } + std::cout << "Serie : [" + << valueStuff + << "]" << std::endl; + + if ( !(s1111 = s111->GetFirstImage()) ) + { + std::cout << "missing image S1111" << std::endl; + errorFound = true; + break; + } +/* + if ( s1111->GetEntryValue(0x0004,0x1500) != "imageFileName1111 " ) + { + errorFound = true; + break; + } +*/ + if ( !(s1112 = s111->GetNextImage()) ) + { + std::cout << "missing image S1112" << std::endl; + errorFound = true; + break; + } +/* + if ( s1112->GetEntryValue(0x0004,0x1500) != "imageFileName1112 " ) + { + errorFound = true; + break; + } + */ + break; // No error found. Stop looping + } + + delete newDicomDir; + if ( errorFound ) + { + std::cout << "MissWritting / MissReading " << std::endl; + std::cout<