std::vector<STEMScannerGeometry*> TF_Datasource::parseProjectionStackProperties(const boost::property_tree::ptree& node, unsigned int imageCount) { if (!node.get_child_optional("convergent").is_initialized()) throw Exception("TF_Datasource can only read projection metadata of type TF_ProjectionMetaData"); std::string filename = node.get_child("image").get<std::string>("<xmlattr>.filename"); float tiltAngle = node.get_child("tiltAngle").get<float>("<xmlattr>.value"); float focalDistanceBase = node.get_child("focalDistanceBase").get<float>("<xmlattr>.value"); float focusAtImage = node.get_child("focusAtImage").get<float>("<xmlattr>.value"); float focalDistanceBetweenImages = node.get_child("focalDistanceBetweenImages").get<float>("<xmlattr>.value"); float beamOpeningAngle = node.get_child("beamOpeningAngle").get<float>("<xmlattr>.value"); boost::filesystem::path pathToImage( filename ); unsigned int imagesInStack = ImageDeserializer::getNumberOfImagesInStack( getAbsoluteImageLocation(pathToImage).string() ); std::vector<STEMScannerGeometry*> result; for (unsigned int i = 0; i < imagesInStack; i++) { ScannerGeometry* rotatedGeometry = satRotator.createRotatedScannerGeometry(tiltAngle, 0.0f); STEMScannerGeometry* stemGeometry = dynamic_cast<STEMScannerGeometry*>(rotatedGeometry); stemGeometry->setFocalDifferenceBetweenImages(focalDistanceBetweenImages); stemGeometry->setConfocalOpeningHalfAngle(beamOpeningAngle); float focusPosition = focalDistanceBase + (focalDistanceBetweenImages * (float) (imagesInStack-i) ); stemGeometry->setFocalDepth(focusPosition); stemGeometry->setTiltAngle(tiltAngle); result.push_back(stemGeometry); } return result; }
/// ctest entry point int mitkOverwriteSliceImageFilterTest(int argc, char* argv[]) { // one big variable to tell if anything went wrong unsigned int numberFailed(0); // need one parameter (image filename) if(argc==0) { std::cerr<<"No file specified [FAILED]"<<std::endl; return EXIT_FAILURE; } // load the image mitk::Image::Pointer image = NULL; try { MITK_INFO << "Testing with parameter '" << argv[1] << "'"; std::string pathToImage(argv[1]); image = mitk::IOUtil::LoadImage( pathToImage ); if(image.IsNull()) { MITK_INFO<<"File not an image - test will not be applied"; return EXIT_FAILURE; } } catch ( itk::ExceptionObject & ex ) { ++numberFailed; std::cerr << "Exception: " << ex << "[FAILED]" << std::endl; return EXIT_FAILURE; } std::cout << " (II) Could load image." << std::endl; std::cout << "Testing filter instantiation" << std::endl; // instantiation mitk::OverwriteSliceImageFilter::Pointer filter = mitk::OverwriteSliceImageFilter::New(); if (filter.IsNotNull()) { std::cout << " (II) Instantiation works." << std::endl; } else { ++numberFailed; std::cout << "Test failed, and it's the ugliest one!" << std::endl; return EXIT_FAILURE; } // some real work if ( image->GetDimension() == 2 ) { mitkOverwriteSliceImageFilterTestClass::Test2D( filter, image, numberFailed ); } else if ( image->GetDimension() == 3 ) { mitkOverwriteSliceImageFilterTestClass::Test3D( filter, image, numberFailed ); } else { mitkOverwriteSliceImageFilterTestClass::TestOtherD( filter, image, numberFailed ); } std::cout << "Testing filter destruction" << std::endl; // freeing filter = NULL; std::cout << " (II) Freeing works." << std::endl; if (numberFailed > 0) { std::cerr << numberFailed << " tests failed." << std::endl; return EXIT_FAILURE; } else { std::cout << "PASSED all tests." << std::endl; return EXIT_SUCCESS; } }