Functions

mitkPicFileReaderTest.cpp File Reference

#include "mitkImage.h"
#include "mitkPicFileReader.h"
#include "mitkPicHelper.h"
#include "mitkTimeSlicedGeometry.h"
#include "mitkSlicedGeometry3D.h"
#include <itksys/SystemTools.hxx>
#include <fstream>

Go to the source code of this file.

Functions

int mitkPicFileReaderTest (int argc, char *argv[])

Function Documentation

int mitkPicFileReaderTest ( int  argc,
char *  argv[] 
)

Definition at line 27 of file mitkPicFileReaderTest.cpp.

References QuadProgPP::abs(), QuadProgPP::dist(), EXIT_FAILURE, EXIT_SUCCESS, mitk::Geometry3D::GetExtent(), mitk::SlicedGeometry3D::GetGeometry2D(), mitk::TimeSlicedGeometry::GetGeometry3D(), mitk::Geometry3D::GetIndexToWorldTransform(), mitk::PicHelper::GetSpacing(), mitk::Geometry3D::GetSpacing(), mitk::Geometry3D::GetTimeBounds(), mitk::TimeSlicedGeometry::GetTimeSteps(), QuadProgPP::max(), mitkIpPicDescriptor, and mitk::PicFileReader::New().

{
  //independently read header of pic file
  mitkIpPicDescriptor *picheader=NULL;
  if(argc>=1)
  {
    if(itksys::SystemTools::LowerCase(itksys::SystemTools::GetFilenameExtension(argv[1])).find(".pic")!=std::string::npos)
      picheader = mitkIpPicGetHeader(argv[1], NULL);
  }
  if(picheader==NULL)
  {
    std::cout<<"file not found/not a pic-file - test not applied [PASSED]"<<std::endl;
    std::cout<<"[TEST DONE]"<<std::endl;
    return EXIT_SUCCESS;
  }
  mitkIpPicGetTags(argv[1], picheader);

  //Read pic-Image from file
  mitk::PicFileReader::Pointer reader = mitk::PicFileReader::New();
    reader->SetFileName(argv[1]);
    reader->Update();

  std::cout << "Testing IsInitialized(): ";
  if(reader->GetOutput()->IsInitialized()==false)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing IsSliceSet(): ";
  if(reader->GetOutput()->IsSliceSet(0)==false)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing availability of geometry: ";
  if(reader->GetOutput()->GetGeometry()==NULL)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing type of geometry (TimeSlicedGeometry expected): ";
  mitk::TimeSlicedGeometry* timegeometry;
  timegeometry = reader->GetOutput()->GetTimeSlicedGeometry();
  if(timegeometry==NULL)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing availability of first geometry contained in the TimeSlicedGeometry: ";
  if(timegeometry->GetGeometry3D(0)==NULL)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing type of first geometry contained in the TimeSlicedGeometry (SlicedGeometry3D expected): ";
  mitk::SlicedGeometry3D* slicedgeometry;
  slicedgeometry = dynamic_cast<mitk::SlicedGeometry3D*>(timegeometry->GetGeometry3D(0));
  if(slicedgeometry==NULL)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing availability of first geometry contained in the SlicedGeometry3D: ";
  mitk::Geometry2D* geometry2d = slicedgeometry->GetGeometry2D(0);
  if(geometry2d==NULL)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing extent in units of first geometry contained in the SlicedGeometry3D: ";
  if((fabs(geometry2d->GetExtent(0)-picheader->n[0])>mitk::eps) || (fabs(geometry2d->GetExtent(1)-picheader->n[1])>mitk::eps))
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing extent in units of image of SlicedGeometry3D: ";
  if((fabs(slicedgeometry->GetExtent(0)-picheader->n[0])>mitk::eps) || (fabs(slicedgeometry->GetExtent(1)-picheader->n[1])>mitk::eps)
    || (picheader->dim>2 && (fabs(slicedgeometry->GetExtent(2)-picheader->n[2])>mitk::eps))
    )
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing extent in units of image of TimeSlicedGeometry: ";
  if((fabs(timegeometry->GetExtent(0)-picheader->n[0])>mitk::eps) || (fabs(timegeometry->GetExtent(1)-picheader->n[1])>mitk::eps)
    || (picheader->dim>2 && (fabs(timegeometry->GetExtent(2)-picheader->n[2])>mitk::eps))
    || (picheader->dim>3 && (abs((mitkIpInt4_t) timegeometry->GetTimeSteps()- (mitkIpInt4_t) picheader->n[3])>0))
    )
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  std::cout << "Testing consistency of spacing from matrix and stored spacing in the first SlicedGeometry3D: ";
  mitk::Vector3D spacing;
  spacing[0] = slicedgeometry->GetIndexToWorldTransform()->GetMatrix().GetVnlMatrix().get_column(0).two_norm();
  spacing[1] = slicedgeometry->GetIndexToWorldTransform()->GetMatrix().GetVnlMatrix().get_column(1).two_norm();
  spacing[2] = slicedgeometry->GetIndexToWorldTransform()->GetMatrix().GetVnlMatrix().get_column(2).two_norm();
  mitk::Vector3D readspacing=slicedgeometry->GetSpacing();
  mitk::Vector3D dist = spacing-readspacing;
  if(dist.GetSquaredNorm()>mitk::eps)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  //independently read the overall spacing 
  spacing.Fill(1);
  mitk::PicHelper::GetSpacing(picheader, spacing);

  std::cout << "Testing correct reading of overall spacing stored in the first SlicedGeometry3D: ";
  dist = spacing-readspacing;
  if(dist.GetSquaredNorm()>mitk::eps)
  {
    std::cout<<"[FAILED]"<<std::endl;
    return EXIT_FAILURE;
  }
  std::cout<<"[PASSED]"<<std::endl;

  if(picheader->dim==4)
  {
    std::cout << "4D dataset: Testing that timebounds are not infinite: ";
    if((slicedgeometry->GetTimeBounds()[0] == mitk::ScalarTypeNumericTraits::NonpositiveMin()) && 
       (slicedgeometry->GetTimeBounds()[1] == mitk::ScalarTypeNumericTraits::max())
      )
    {
      std::cout<<"[FAILED]"<<std::endl;
      return EXIT_FAILURE;
    }
    std::cout<<"[PASSED]"<<std::endl;
  }

  mitkIpPicFree(picheader);

  std::cout<<"[TEST DONE]"<<std::endl;
  return EXIT_SUCCESS;
}
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines