Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

mitk::NrrdDiffusionImageReader< TPixelType > Class Template Reference

#include <mitkNrrdDiffusionImageReader.h>

Inheritance diagram for mitk::NrrdDiffusionImageReader< TPixelType >:
Inheritance graph
[legend]
Collaboration diagram for mitk::NrrdDiffusionImageReader< TPixelType >:
Collaboration graph
[legend]

List of all members.

Public Types

typedef mitk::DiffusionImage
< TPixelType > 
OutputType
typedef itk::VectorImage
< TPixelType, 3 > 
ImageType
typedef DiffusionImageSource
< TPixelType > 
DiffVolSourceType
typedef vnl_vector_fixed
< double, 3 > 
GradientDirectionType
typedef itk::VectorContainer
< unsigned int,
GradientDirectionType
GradientDirectionContainerType
typedef NrrdDiffusionImageReader Self
typedef DiffVolSourceType Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
const char * GetFileName () const
 Get the specified the file to load.
void SetFileName (const char *aFileName)
 Specify the file to load.
const char * GetFilePrefix () const
 Get the specified file prefix for the file(s) to load.
void SetFilePrefix (const char *aFilePrefix)
 Specify file prefix for the file(s) to load.
const char * GetFilePattern () const
 Get the specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number.
void SetFilePattern (const char *aFilePattern)
 Specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number.

Static Public Member Functions

static Pointer New ()
 Method for creation through the object factory.
static bool CanReadFile (const std::string filename, const std::string filePrefix, const std::string filePattern)

Protected Member Functions

virtual void GenerateData ()
virtual void GenerateOutputInformation ()

Protected Attributes

std::string m_FileName
std::string m_FilePrefix
std::string m_FilePattern
OutputType::Pointer m_OutputCache
itk::TimeStamp m_CacheTime
GradientDirectionContainerType::Pointer m_DiffusionVectors
float m_B_Value

Detailed Description

template<class TPixelType>
class mitk::NrrdDiffusionImageReader< TPixelType >

Definition at line 35 of file mitkNrrdDiffusionImageReader.h.


Member Typedef Documentation

template<class TPixelType >
typedef itk::SmartPointer<const Self> mitk::NrrdDiffusionImageReader< TPixelType >::ConstPointer

Reimplemented from mitk::DiffusionImageSource< TPixelType >.

Definition at line 46 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef DiffusionImageSource<TPixelType> mitk::NrrdDiffusionImageReader< TPixelType >::DiffVolSourceType

Definition at line 41 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef itk::VectorContainer< unsigned int, GradientDirectionType > mitk::NrrdDiffusionImageReader< TPixelType >::GradientDirectionContainerType

Definition at line 44 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef vnl_vector_fixed< double, 3 > mitk::NrrdDiffusionImageReader< TPixelType >::GradientDirectionType

Definition at line 42 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef itk::VectorImage<TPixelType,3> mitk::NrrdDiffusionImageReader< TPixelType >::ImageType

Definition at line 40 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef mitk::DiffusionImage<TPixelType> mitk::NrrdDiffusionImageReader< TPixelType >::OutputType

Reimplemented from mitk::DiffusionImageSource< TPixelType >.

Definition at line 39 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef itk::SmartPointer<Self> mitk::NrrdDiffusionImageReader< TPixelType >::Pointer

Reimplemented from mitk::DiffusionImageSource< TPixelType >.

Definition at line 46 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef NrrdDiffusionImageReader mitk::NrrdDiffusionImageReader< TPixelType >::Self

Reimplemented from mitk::DiffusionImageSource< TPixelType >.

Definition at line 46 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
typedef DiffVolSourceType mitk::NrrdDiffusionImageReader< TPixelType >::Superclass

Reimplemented from mitk::DiffusionImageSource< TPixelType >.

Definition at line 46 of file mitkNrrdDiffusionImageReader.h.


Member Function Documentation

template<class TPixelType >
bool mitk::NrrdDiffusionImageReader< TPixelType >::CanReadFile ( const std::string  filename,
const std::string  filePrefix,
const std::string  filePattern 
) [static]

Definition at line 201 of file mitkNrrdDiffusionImageReader.cpp.

  {
    // First check the extension
    if(  filename == "" )
    {
      return false;
    }
    std::string ext = itksys::SystemTools::GetFilenameLastExtension(filename);
    ext = itksys::SystemTools::LowerCase(ext);

    if (ext == ".hdwi" || ext == ".dwi")
    {
      itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New();

      typedef itk::ImageFileReader<ImageType> FileReaderType;
      typename FileReaderType::Pointer reader = FileReaderType::New();
      reader->SetImageIO(io);
      reader->SetFileName(filename);
      reader->Update();
      typename ImageType::Pointer img = reader->GetOutput();
      itk::MetaDataDictionary imgMetaDictionary = img->GetMetaDataDictionary();    
      std::vector<std::string> imgMetaKeys = imgMetaDictionary.GetKeys();
      std::vector<std::string>::const_iterator itKey = imgMetaKeys.begin();
      std::string metaString;

      for (; itKey != imgMetaKeys.end(); itKey ++)
      {
        itk::ExposeMetaData<std::string> (imgMetaDictionary, *itKey, metaString);
        if (itKey->find("modality") != std::string::npos)
        {
          if (metaString.find("DWMRI") != std::string::npos) 
          {
            return true;
          }
        }
      }
    }
    return false;
  }
template<class TPixelType >
void mitk::NrrdDiffusionImageReader< TPixelType >::GenerateData (  ) [protected, virtual]

Does the real work.

Reimplemented from mitk::ImageSource.

Definition at line 32 of file mitkNrrdDiffusionImageReader.cpp.

  {

    // Since everything is completely read in GenerateOutputInformation() it is stored
    // in a cache variable. A timestamp is associated.
    // If the timestamp of the cache variable is newer than the MTime, we only need to
    // assign the cache variable to the DataObject.
    // Otherwise, the tree must be read again from the file and OuputInformation must 
    // be updated!
    if ( ( ! m_OutputCache ) || ( this->GetMTime( ) > m_CacheTime.GetMTime( ) ) )
    {
      this->GenerateOutputInformation();
      itkWarningMacro("Cache regenerated!");    
    }

    if (!m_OutputCache)
    {
      itkWarningMacro("Tree cache is empty!");    
    }

    static_cast<OutputType*>(this->GetOutput())
      ->SetVectorImage(m_OutputCache->GetVectorImage());
    static_cast<OutputType*>(this->GetOutput())
      ->SetB_Value(m_OutputCache->GetB_Value());
    static_cast<OutputType*>(this->GetOutput())
      ->SetDirections(m_OutputCache->GetDirections());
    static_cast<OutputType*>(this->GetOutput())
      ->InitializeFromVectorImage();
  }
template<class TPixelType >
void mitk::NrrdDiffusionImageReader< TPixelType >::GenerateOutputInformation ( void   ) [protected, virtual]

Definition at line 63 of file mitkNrrdDiffusionImageReader.cpp.

  {
    typename OutputType::Pointer outputForCache = OutputType::New();
    if ( m_FileName == "") 
    {
      throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename to be read is empty!");
    }
    else
    {
      try
      {
        itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New();
        typedef itk::ImageFileReader<ImageType> FileReaderType;
        typename FileReaderType::Pointer reader = FileReaderType::New();
        reader->SetImageIO(io);
        reader->SetFileName(this->m_FileName);
        reader->Update();

        typename ImageType::Pointer img = reader->GetOutput();

        itk::MetaDataDictionary imgMetaDictionary = img->GetMetaDataDictionary();    
        std::vector<std::string> imgMetaKeys = imgMetaDictionary.GetKeys();
        std::vector<std::string>::const_iterator itKey = imgMetaKeys.begin();
        std::string metaString;

        GradientDirectionType vect3d;
        m_DiffusionVectors = GradientDirectionContainerType::New();

        int numberOfImages = 0;
        int numberOfGradientImages = 0;
        bool readb0 = false;

        for (; itKey != imgMetaKeys.end(); itKey ++)
        {
          double x,y,z;

          itk::ExposeMetaData<std::string> (imgMetaDictionary, *itKey, metaString);
          if (itKey->find("DWMRI_gradient") != std::string::npos)
          { 
            std::cout << *itKey << " ---> " << metaString << std::endl;      
            sscanf(metaString.c_str(), "%lf %lf %lf\n", &x, &y, &z);
            vect3d[0] = x; vect3d[1] = y; vect3d[2] = z;
            m_DiffusionVectors->InsertElement( numberOfImages, vect3d );
            ++numberOfImages;
            // If the direction is 0.0, this is a reference image
            if (vect3d[0] == 0.0 &&
              vect3d[1] == 0.0 &&
              vect3d[2] == 0.0)
            {
              continue;
            }
            ++numberOfGradientImages;;
          }
          else if (itKey->find("DWMRI_b-value") != std::string::npos)
          {
            std::cout << *itKey << " ---> " << metaString << std::endl;      
            readb0 = true;
            m_B_Value = atof(metaString.c_str());
          }
        }

        std::cout << "Number of gradient images: "
          << numberOfGradientImages
          << " and Number of reference images: "
          << numberOfImages - numberOfGradientImages
          << std::endl;

        if(!readb0)
        {
          std::cerr << "BValue not specified in header file" << std::endl;
        }

        // This call updates the output information of the associated VesselTreeData
        outputForCache->SetVectorImage(img);
        outputForCache->SetB_Value(m_B_Value);
        outputForCache->SetDirections(m_DiffusionVectors);

        // Since we have already read the tree, we can store it in a cache variable
        // so that it can be assigned to the DataObject in GenerateData();
        m_OutputCache = outputForCache;
        m_CacheTime.Modified();
      }
      catch(std::exception& e)
      {
        throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what());                    
      }
      catch(...)
      {
        throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested vessel tree file!");
      }
    }
  }
template<class TPixelType >
virtual const char* mitk::NrrdDiffusionImageReader< TPixelType >::GetClassName (  ) const [virtual]
template<class TPixelType >
const char * mitk::NrrdDiffusionImageReader< TPixelType >::GetFileName (  ) const [virtual]

Get the specified the file to load.

Either the FileName or FilePrefix plus FilePattern are used to read.

Implements mitk::FileReader.

Definition at line 159 of file mitkNrrdDiffusionImageReader.cpp.

  {
    return m_FileName.c_str();
  }
template<class TPixelType >
const char * mitk::NrrdDiffusionImageReader< TPixelType >::GetFilePattern (  ) const [virtual]

Get the specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number.

You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.

Implements mitk::FileReader.

Definition at line 187 of file mitkNrrdDiffusionImageReader.cpp.

  {
    return m_FilePattern.c_str();
  }
template<class TPixelType >
const char * mitk::NrrdDiffusionImageReader< TPixelType >::GetFilePrefix (  ) const [virtual]

Get the specified file prefix for the file(s) to load.

You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.

Implements mitk::FileReader.

Definition at line 173 of file mitkNrrdDiffusionImageReader.cpp.

  {
    return m_FilePrefix.c_str();
  }
template<class TPixelType >
static Pointer mitk::NrrdDiffusionImageReader< TPixelType >::New (  ) [static]

Method for creation through the object factory.

Reimplemented from mitk::DiffusionImageSource< TPixelType >.

template<class TPixelType >
void mitk::NrrdDiffusionImageReader< TPixelType >::SetFileName ( const char *  aFileName ) [virtual]

Specify the file to load.

Either the FileName or FilePrefix plus FilePattern are used to read.

Implements mitk::FileReader.

Definition at line 166 of file mitkNrrdDiffusionImageReader.cpp.

  {
    m_FileName = aFileName;
  }
template<class TPixelType >
void mitk::NrrdDiffusionImageReader< TPixelType >::SetFilePattern ( const char *  aFilePattern ) [virtual]

Specified file pattern for the file(s) to load. The sprintf format used to build filename from FilePrefix and number.

You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.

Implements mitk::FileReader.

Definition at line 194 of file mitkNrrdDiffusionImageReader.cpp.

  {
    m_FilePattern = aFilePattern;
  }
template<class TPixelType >
void mitk::NrrdDiffusionImageReader< TPixelType >::SetFilePrefix ( const char *  aFilePrefix ) [virtual]

Specify file prefix for the file(s) to load.

You should specify either a FileName or FilePrefix. Use FilePrefix if the data is stored in multiple files.

Implements mitk::FileReader.

Definition at line 180 of file mitkNrrdDiffusionImageReader.cpp.

  {
    m_FilePrefix = aFilePrefix;
  }

Member Data Documentation

template<class TPixelType >
float mitk::NrrdDiffusionImageReader< TPixelType >::m_B_Value [protected]

Definition at line 72 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
itk::TimeStamp mitk::NrrdDiffusionImageReader< TPixelType >::m_CacheTime [protected]

Definition at line 69 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
GradientDirectionContainerType::Pointer mitk::NrrdDiffusionImageReader< TPixelType >::m_DiffusionVectors [protected]

Definition at line 71 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
std::string mitk::NrrdDiffusionImageReader< TPixelType >::m_FileName [protected]

Definition at line 64 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
std::string mitk::NrrdDiffusionImageReader< TPixelType >::m_FilePattern [protected]

Definition at line 66 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
std::string mitk::NrrdDiffusionImageReader< TPixelType >::m_FilePrefix [protected]

Definition at line 65 of file mitkNrrdDiffusionImageReader.h.

template<class TPixelType >
OutputType::Pointer mitk::NrrdDiffusionImageReader< TPixelType >::m_OutputCache [protected]

Definition at line 68 of file mitkNrrdDiffusionImageReader.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines