diff --git a/Core/Code/Testing/CMakeLists.txt b/Core/Code/Testing/CMakeLists.txt index 19897d57e1..926bca8168 100644 --- a/Core/Code/Testing/CMakeLists.txt +++ b/Core/Code/Testing/CMakeLists.txt @@ -1,32 +1,34 @@ MITK_CREATE_MODULE_TESTS(LABELS MITK-Core) # MITK_INSTALL_TARGETS(EXECUTABLES MitkTestDriver) mitkAddCustomModuleTest(mitkPicFileReaderTest_emptyFile mitkPicFileReaderTest ${CMAKE_CURRENT_SOURCE_DIR}/Data/emptyFile.pic) mitkAddCustomModuleTest(mitkPicFileReaderTest_emptyGzipFile mitkPicFileReaderTest ${CMAKE_CURRENT_SOURCE_DIR}/Data/emptyFile.pic.gz) mitkAddCustomModuleTest(mitkDICOMLocaleTest_spacingOk_CT mitkDICOMLocaleTest ${MITK_DATA_DIR}/spacing-ok-ct.dcm) mitkAddCustomModuleTest(mitkDICOMLocaleTest_spacingOk_MR mitkDICOMLocaleTest ${MITK_DATA_DIR}/spacing-ok-mr.dcm) mitkAddCustomModuleTest(mitkDICOMLocaleTest_spacingOk_SC mitkDICOMLocaleTest ${MITK_DATA_DIR}/spacing-ok-sc.dcm) mitkAddCustomModuleTest(mitkEventMapperTest_Test1And2 mitkEventMapperTest ${MITK_DATA_DIR}/TestStateMachine1.xml ${MITK_DATA_DIR}/TestStateMachine2.xml) mitkAddCustomModuleTest(mitkNodeDependentPointSetInteractorTest mitkNodeDependentPointSetInteractorTest ${MITK_DATA_DIR}/Pic3D.pic.gz ${MITK_DATA_DIR}/BallBinary30x30x30.pic.gz) mitkAddCustomModuleTest(mitkDataStorageTest_US4DCyl mitkDataStorageTest ${MITK_DATA_DIR}/US4DCyl.pic.gz) mitkAddCustomModuleTest(mitkStateMachineFactoryTest_TestStateMachine1_2 mitkStateMachineFactoryTest ${MITK_DATA_DIR}/TestStateMachine1.xml ${MITK_DATA_DIR}/TestStateMachine2.xml) +mitkAddCustomModuleTest(mitkDicomSeriesReaderTest_CTImage mitkDicomSeriesReaderTest ${MITK_DATA_DIR}/TinyCTAbdomen) + ADD_TEST(mitkPointSetLocaleTest ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} mitkPointSetLocaleTest ${MITK_DATA_DIR}/pointSet.mps) SET_PROPERTY(TEST mitkPointSetLocaleTest PROPERTY LABELS MITK-Core) ADD_TEST(mitkPicFileReaderTest_emptyGzipFile ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} mitkPicFileReaderTest ${CMAKE_CURRENT_SOURCE_DIR}/Data/emptyFile.pic.gz) SET_PROPERTY(TEST mitkPicFileReaderTest_emptyGzipFile PROPERTY LABELS MITK-Core) ADD_TEST(mitkImageTest_brainImage ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} mitkImageTest ${MITK_DATA_DIR}/brain.mhd) SET_PROPERTY(TEST mitkImageTest_brainImage PROPERTY LABELS MITK-Core) ADD_TEST(mitkImageWriterTest_nrrdImage ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} mitkImageWriterTest ${MITK_DATA_DIR}/NrrdWritingTestImage.jpg) SET_PROPERTY(TEST mitkImageWriterTest_nrrdImage PROPERTY LABELS MITK-Core) add_subdirectory(DICOMTesting) diff --git a/Core/Code/Testing/mitkDicomSeriesReaderTest.cpp b/Core/Code/Testing/mitkDicomSeriesReaderTest.cpp index 04c6994b4d..e99e33575f 100644 --- a/Core/Code/Testing/mitkDicomSeriesReaderTest.cpp +++ b/Core/Code/Testing/mitkDicomSeriesReaderTest.cpp @@ -1,44 +1,128 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date: 2008-02-25 17:27:17 +0100 (Mo, 25 Feb 2008) $ Version: $Revision: 7837 $ Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. See MITKCopyright.txt or http://www.mitk.org/copyright.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 "mitkTestingMacros.h" #include #include "mitkDicomSeriesReader.h" +#include "mitkProperties.h" +static std::set GetTagInformationFromFile(mitk::DicomSeriesReader::StringContainer files) +{ + gdcm::Scanner scanner; + std::set tagInformations; + + const gdcm::Tag tagSliceLocation(0x0020, 0x1041); // slice location + scanner.AddTag( tagSliceLocation ); + + const gdcm::Tag tagInstanceNumber(0x0020, 0x0013); // (image) instance number + scanner.AddTag( tagInstanceNumber ); + + const gdcm::Tag tagSOPInstanceNumber(0x0008, 0x0018); // SOP instance number + scanner.AddTag( tagSOPInstanceNumber ); + + unsigned int slice(0); + for(std::vector::const_iterator fIter = files.begin(); + fIter != files.end(); + ++fIter, ++slice) + { + scanner.Scan(files); // make available image position for each file + + gdcm::Scanner::MappingType& tagValueMappings = const_cast(scanner.GetMappings()); + tagInformations.insert(tagValueMappings[fIter->c_str()][tagSliceLocation]); + tagInformations.insert(tagValueMappings[fIter->c_str()][tagInstanceNumber]); + tagInformations.insert(tagValueMappings[fIter->c_str()][tagSOPInstanceNumber]); + } + + return tagInformations; +} + int mitkDicomSeriesReaderTest(int argc, char* argv[]) { // always start with this! MITK_TEST_BEGIN("DicomSeriesReader") - mitk::DicomSeriesReader::StringContainer files; - - for (int i = 1 ; i < argc ; i++ ) + if(argc < 1) { - files.push_back(std::string(argv[i])); + MITK_ERROR << "No directory given!"; + return -1; } - if (! files.empty() ) + + char* dir; + dir = argv[1]; + + //check if DICOMTags have been set as property for mitk::Image + mitk::DicomSeriesReader::UidFileNamesMap seriesInFiles = mitk::DicomSeriesReader::GetSeries( dir ); + std::list images; + std::map fileMap; + std::set tagInformations; + // TODO sort series UIDs, implementation of map iterator might differ on different platforms (or verify this is a standard topic??) + for (mitk::DicomSeriesReader::UidFileNamesMap::const_iterator seriesIter = seriesInFiles.begin(); + seriesIter != seriesInFiles.end(); + ++seriesIter) { - for (int i = 0 ; i < 10 ; i++ ) { - mitk::DataNode::Pointer node = mitk::DicomSeriesReader::LoadDicomSeries(files); - MITK_TEST_CONDITION_REQUIRED(node.IsNotNull(),"Testing node") + mitk::DicomSeriesReader::StringContainer files = seriesIter->second; + + mitk::DataNode::Pointer node = mitk::DicomSeriesReader::LoadDicomSeries( files ); + MITK_TEST_CONDITION_REQUIRED(node.IsNotNull(),"Testing node") + + if (node.IsNotNull()) + { + mitk::Image::Pointer image = dynamic_cast( node->GetData() ); + + images.push_back( image ); + fileMap.insert( std::pair(image,files)); + } } + for ( std::list::const_iterator imageIter = images.begin(); + imageIter != images.end(); + ++imageIter ) + { + const mitk::Image::Pointer image = *imageIter; + tagInformations = GetTagInformationFromFile((*fileMap.find(image)).second); + mitk::StringLookupTableProperty* sliceLocation = dynamic_cast(image->GetProperty("dicom.image.0020.1041").GetPointer()); + MITK_TEST_CONDITION(sliceLocation != NULL, "Test if tag for slice location has been set to mitk image"); + if(sliceLocation != NULL) + { + for(int i = 0; i < sliceLocation->GetValue().GetLookupTable().size(); i++) + { + MITK_TEST_CONDITION(tagInformations.find(sliceLocation->GetValue().GetTableValue(i)) != tagInformations.end(), "Test if value for slice location is in list"); + } + } + mitk::StringLookupTableProperty* instanceNumber = dynamic_cast(image->GetProperty("dicom.image.0020.0013").GetPointer()); + MITK_TEST_CONDITION(instanceNumber != NULL, "Test if tag for image instance number has been set to mitk image"); + if(instanceNumber != NULL) + { + for(int i = 0; i < instanceNumber->GetValue().GetLookupTable().size(); i++) + { + MITK_TEST_CONDITION(tagInformations.find(instanceNumber->GetValue().GetTableValue(i)) != tagInformations.end(), "Test if value for image instance number is in list"); + } + } + mitk::StringLookupTableProperty* SOPInstnaceNumber = dynamic_cast(image->GetProperty("dicom.image.0008.0018").GetPointer()); + MITK_TEST_CONDITION(SOPInstnaceNumber != NULL, "Test if tag for SOP instance number has been set to mitk image"); + if(SOPInstnaceNumber != NULL) + { + for(int i = 0; i < SOPInstnaceNumber->GetValue().GetLookupTable().size(); i++) + { + MITK_TEST_CONDITION(tagInformations.find(SOPInstnaceNumber->GetValue().GetTableValue(i)) != tagInformations.end(), "Test if value for SOP instance number is in list"); + } + } } MITK_TEST_END() }