Public Member Functions | Static Public Attributes | Protected Slots | Protected Member Functions | Protected Attributes | Friends

QmitkTensorReconstructionView Class Reference

QmitkTensorReconstructionView. More...

#include <QmitkTensorReconstructionView.h>

Inheritance diagram for QmitkTensorReconstructionView:
Inheritance graph
[legend]
Collaboration diagram for QmitkTensorReconstructionView:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 QmitkTensorReconstructionView ()
virtual ~QmitkTensorReconstructionView ()
virtual void CreateQtPartControl (QWidget *parent)
virtual void CreateConnections ()
 Creation of the connections of main and control widget.
virtual void Activated ()
 Called when the functionality is activated.
virtual void Deactivated ()
virtual void StdMultiWidgetAvailable (QmitkStdMultiWidget &stdMultiWidget)
virtual void StdMultiWidgetNotAvailable ()

Static Public Attributes

static const std::string VIEW_ID = "org.mitk.views.tensorreconstruction"
static const int nrconvkernels

Protected Slots

void TensorsToDWI ()
void DoTensorsToDWI (mitk::DataStorage::SetOfObjects::Pointer inImages)
void TeemCheckboxClicked ()
void Advanced1CheckboxClicked ()
void Advanced2CheckboxClicked ()
void ManualThresholdClicked ()
void MethodChoosen (int method)
void Reconstruct (int method)
void TeemReconstruction ()
void ItkReconstruction ()
void ItkTensorReconstruction (mitk::DataStorage::SetOfObjects::Pointer inImages)
void TeemTensorReconstruction (mitk::DataStorage::SetOfObjects::Pointer inImages)

Protected Member Functions

template<int ndirs>
std::vector< itk::Vector
< double, 3 > > 
MakeGradientList ()
template<int L>
void TemplatedAnalyticalTensorReconstruction (mitk::DiffusionImage< DiffusionPixelType > *vols, float lambda, std::string nodename, std::vector< mitk::DataNode::Pointer > *nodes, int normalization)
void SetDefaultNodeProperties (mitk::DataNode::Pointer node, std::string name)

Protected Attributes

Ui::QmitkTensorReconstructionViewControlsm_Controls
QmitkStdMultiWidgetm_MultiWidget
berry::ISelectionListener::Pointer m_SelListener
berry::IStructuredSelection::ConstPointer m_CurrentSelection

Friends

struct TrSelListener

Detailed Description

QmitkTensorReconstructionView.

Document your class here.

See also:
QmitkFunctionality

Definition at line 47 of file QmitkTensorReconstructionView.h.


Constructor & Destructor Documentation

QmitkTensorReconstructionView::QmitkTensorReconstructionView (  )

Definition at line 136 of file QmitkTensorReconstructionView.cpp.

QmitkTensorReconstructionView::~QmitkTensorReconstructionView (  ) [virtual]

Definition at line 143 of file QmitkTensorReconstructionView.cpp.

References berry::WorkbenchPart::GetSite(), and m_SelListener.

{
  this->GetSite()->GetWorkbenchWindow()->GetSelectionService()->RemovePostSelectionListener(/*"org.mitk.views.datamanager",*/ m_SelListener);
}

Member Function Documentation

void QmitkTensorReconstructionView::Activated (  ) [virtual]

Called when the functionality is activated.

Reimplemented from QmitkFunctionality.

Definition at line 256 of file QmitkTensorReconstructionView.cpp.

void QmitkTensorReconstructionView::Advanced1CheckboxClicked (  ) [protected, slot]

Definition at line 234 of file QmitkTensorReconstructionView.cpp.

References Ui_QmitkTensorReconstructionViewControls::frame, and m_Controls.

Referenced by CreateConnections(), and CreateQtPartControl().

{
  bool check = m_Controls->
    m_Advanced1->isChecked();

  m_Controls->frame->setVisible(check);
}
void QmitkTensorReconstructionView::Advanced2CheckboxClicked (  ) [protected, slot]

Definition at line 242 of file QmitkTensorReconstructionView.cpp.

References Ui_QmitkTensorReconstructionViewControls::frame_2, and m_Controls.

Referenced by CreateConnections(), and CreateQtPartControl().

{
  bool check = m_Controls->
    m_Advanced2->isChecked();

  m_Controls->frame_2->setVisible(check);
}
void QmitkTensorReconstructionView::CreateConnections (  ) [virtual]

Creation of the connections of main and control widget.

Definition at line 213 of file QmitkTensorReconstructionView.cpp.

References Advanced1CheckboxClicked(), Advanced2CheckboxClicked(), ItkReconstruction(), Ui_QmitkTensorReconstructionViewControls::m_Advanced1, Ui_QmitkTensorReconstructionViewControls::m_Advanced2, m_Controls, Ui_QmitkTensorReconstructionViewControls::m_ItkReconstruction, Ui_QmitkTensorReconstructionViewControls::m_TeemReconstruction, Ui_QmitkTensorReconstructionViewControls::m_TeemToggle, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationManualThreashold, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemEstimationMethodCombo, Ui_QmitkTensorReconstructionViewControls::m_TensorsToDWIButton, ManualThresholdClicked(), MethodChoosen(), TeemCheckboxClicked(), TeemReconstruction(), and TensorsToDWI().

Referenced by CreateQtPartControl().

{
  if ( m_Controls )
  {
    connect( (QObject*)(m_Controls->m_TeemToggle), SIGNAL(clicked()), this, SLOT(TeemCheckboxClicked()) );
    connect( (QObject*)(m_Controls->m_ItkReconstruction), SIGNAL(clicked()), this, SLOT(ItkReconstruction()) );
    connect( (QObject*)(m_Controls->m_TeemReconstruction), SIGNAL(clicked()), this, SLOT(TeemReconstruction()) );
    connect( (QObject*)(m_Controls->m_TensorEstimationTeemEstimationMethodCombo), SIGNAL(currentIndexChanged(int)), this, SLOT(MethodChoosen(int)) );
    connect( (QObject*)(m_Controls->m_Advanced1), SIGNAL(clicked()), this, SLOT(Advanced1CheckboxClicked()) );
    connect( (QObject*)(m_Controls->m_Advanced2), SIGNAL(clicked()), this, SLOT(Advanced2CheckboxClicked()) );
    connect( (QObject*)(m_Controls->m_TensorEstimationManualThreashold), SIGNAL(clicked()), this, SLOT(ManualThresholdClicked()) );
    connect( (QObject*)(m_Controls->m_TensorsToDWIButton), SIGNAL(clicked()), this, SLOT(TensorsToDWI()) );
  }
}
void QmitkTensorReconstructionView::CreateQtPartControl ( QWidget *  parent ) [virtual]

Implements berry::QtViewPart.

Definition at line 148 of file QmitkTensorReconstructionView.cpp.

References Advanced1CheckboxClicked(), Advanced2CheckboxClicked(), berry::SmartPointer< TObjectType >::Cast(), CreateConnections(), berry::WorkbenchPart::GetSite(), m_Controls, m_CurrentSelection, m_SelListener, Ui_QmitkTensorReconstructionViewControls::m_TeemToggle, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationManualThreashold, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemEstimationMethodCombo, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemFuzzyEdit, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemMinValEdit, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemNumItsLabel_2, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemNumItsSpin, Ui_QmitkTensorReconstructionViewControls::m_TensorEstimationTeemSigmaEdit, Ui_QmitkTensorReconstructionViewControls::m_TensorReconstructionNumberThreadsSpinbox, Ui_QmitkTensorReconstructionViewControls::m_TensorsToDWIBValueEdit, Ui_QmitkTensorReconstructionViewControls::setupUi(), TeemCheckboxClicked(), and TrSelListener.

{
  if (!m_Controls)
  {
    // create GUI widgets
    m_Controls = new Ui::QmitkTensorReconstructionViewControls;
    m_Controls->setupUi(parent);
    this->CreateConnections();

    m_Controls->m_TensorReconstructionNumberThreadsSpinbox->setValue(8);

    QStringList items;
    items << "LLS (Linear Least Squares)"
      << "MLE (Maximum Likelihood)"
      << "NLS (Nonlinear Least Squares)"
      << "WLS (Weighted Least Squares)";
    m_Controls->m_TensorEstimationTeemEstimationMethodCombo->addItems(items);
    m_Controls->m_TensorEstimationTeemEstimationMethodCombo->setCurrentIndex(0);

    m_Controls->m_TensorEstimationManualThreashold->setChecked(false);
    m_Controls->m_TensorEstimationTeemSigmaEdit->setText("NaN");
    m_Controls->m_TensorEstimationTeemNumItsSpin->setValue(1);
    m_Controls->m_TensorEstimationTeemFuzzyEdit->setText("0.0");
    m_Controls->m_TensorEstimationTeemMinValEdit->setText("1.0");

    m_Controls->m_TensorEstimationTeemNumItsLabel_2->setEnabled(true);
    m_Controls->m_TensorEstimationTeemNumItsSpin->setEnabled(true);

    m_Controls->m_TensorsToDWIBValueEdit->setText("1000");

    Advanced1CheckboxClicked();
    Advanced2CheckboxClicked();
    TeemCheckboxClicked();

#ifndef DIFFUSION_IMAGING_EXTENDED
    m_Controls->m_TeemToggle->setVisible(false);
#endif

    // define data type for combobox
    //m_Controls->m_ImageSelector->SetDataStorage( this->GetDefaultDataStorage() );
    //m_Controls->m_ImageSelector->SetPredicate( mitk::NodePredicateDataType::New("DiffusionImage") );
  }

  m_SelListener = berry::ISelectionListener::Pointer(new TrSelListener(this));
  this->GetSite()->GetWorkbenchWindow()->GetSelectionService()->AddPostSelectionListener(/*"org.mitk.views.datamanager",*/ m_SelListener);
  berry::ISelection::ConstPointer sel(
    this->GetSite()->GetWorkbenchWindow()->GetSelectionService()->GetSelection("org.mitk.views.datamanager"));
  m_CurrentSelection = sel.Cast<const IStructuredSelection>();
  m_SelListener.Cast<TrSelListener>()->DoSelectionChanged(sel);
}
void QmitkTensorReconstructionView::Deactivated (  ) [virtual]

Only called when IsExclusiveFunctionality() returns true.

See also:
IsExclusiveFunctionality()

Reimplemented from QmitkFunctionality.

Definition at line 261 of file QmitkTensorReconstructionView.cpp.

void QmitkTensorReconstructionView::DoTensorsToDWI ( mitk::DataStorage::SetOfObjects::Pointer  inImages ) [protected, slot]

Definition at line 600 of file QmitkTensorReconstructionView.cpp.

References mitk::StatusBar::GetInstance(), mitk::ProgressBar::GetInstance(), mitk::DiffusionImage< TPixelType >::InitializeFromVectorImage(), MBI_DEBUG, MBI_INFO, mitk::DataNode::New(), mitk::DiffusionImage< TPixelType >::New(), mitk::DiffusionImage< TPixelType >::SetB_Value(), mitk::DiffusionImageMapper< TPixelType >::SetDefaultProperties(), mitk::DiffusionImage< TPixelType >::SetDirections(), and mitk::DiffusionImage< TPixelType >::SetVectorImage().

Referenced by TensorsToDWI().

{
  try
  {
    itk::TimeProbe clock;

    int nrFiles = inImages->size();
    if (!nrFiles) return;

    QString status;
    mitk::ProgressBar::GetInstance()->AddStepsToDo(nrFiles);

    mitk::DataStorage::SetOfObjects::const_iterator itemiter( inImages->begin() ); 
    mitk::DataStorage::SetOfObjects::const_iterator itemiterend( inImages->end() ); 

    std::vector<mitk::DataNode::Pointer> nodes;
    while ( itemiter != itemiterend ) // for all items
    {

      std::string nodename;
      (*itemiter)->GetStringProperty("name", nodename);
      
      mitk::TensorImage* vol = 
        static_cast<mitk::TensorImage*>((*itemiter)->GetData());
      
      ++itemiter;

      typedef float                                       TTensorPixelType;
      typedef itk::DiffusionTensor3D< TTensorPixelType >  TensorPixelType;
      typedef itk::Image< TensorPixelType, 3 >            TensorImageType;

      
      TensorImageType::Pointer itkvol = TensorImageType::New();
      mitk::CastToItkImage<TensorImageType>(vol, itkvol);

      typedef itk::TensorImageToDiffusionImageFilter< 
        TTensorPixelType, DiffusionPixelType > FilterType;

      FilterType::GradientListType gradientList;

      switch(m_Controls->m_TensorsToDWINumDirsSelect->currentIndex())
      {
      case 0:
        gradientList = MakeGradientList<12>();
        break;
      case 1:
        gradientList = MakeGradientList<42>();
        break;
      case 2:
        gradientList = MakeGradientList<92>();
        break;
      case 3:
        gradientList = MakeGradientList<162>();
        break;
      case 4:
        gradientList = MakeGradientList<252>();
        break;
      case 5:
        gradientList = MakeGradientList<362>();
        break;
      case 6:
        gradientList = MakeGradientList<492>();
        break;
      case 7:
        gradientList = MakeGradientList<642>();
        break;
      case 8:
        gradientList = MakeGradientList<812>();
        break;
      case 9:
        gradientList = MakeGradientList<1002>();
        break;
      default:
        gradientList = MakeGradientList<92>();

      }

      double bVal = m_Controls->m_TensorsToDWIBValueEdit->text().toDouble();

      // DWI ESTIMATION
      clock.Start();
      MBI_INFO << "DWI Estimation ";
      mitk::StatusBar::GetInstance()->DisplayText(status.sprintf(
        "DWI Estimation for %s", nodename.c_str()).toAscii());
      FilterType::Pointer filter = FilterType::New();
      filter->SetInput( itkvol );
      filter->SetBValue(bVal);  
      filter->SetGradientList(gradientList);  
      filter->SetNumberOfThreads(1);
      filter->Update();
      clock.Stop();
      MBI_DEBUG << "took " << clock.GetMeanTime() << "s.";

      itk::Vector<double,3> v;
      v[0] = 0; v[1] = 0; v[2] = 0;
      gradientList.push_back(v);

      // TENSORS TO DATATREE
      mitk::DiffusionImage<DiffusionPixelType>::Pointer image = mitk::DiffusionImage<DiffusionPixelType>::New();
      image->SetVectorImage( filter->GetOutput() );
      image->SetB_Value(bVal);
      image->SetDirections(gradientList);
      image->InitializeFromVectorImage();
      mitk::DataNode::Pointer node=mitk::DataNode::New();
      node->SetData( image );

      mitk::DiffusionImageMapper<short>::SetDefaultProperties(node);

      QString newname;
      newname = newname.append(nodename.c_str());
      newname = newname.append("_dwi");
      node->SetName(newname.toAscii());

      nodes.push_back(node);

      mitk::ProgressBar::GetInstance()->Progress();

    }

    std::vector<mitk::DataNode::Pointer>::iterator nodeIt;
    for(nodeIt = nodes.begin(); nodeIt != nodes.end(); ++nodeIt)
      GetDefaultDataStorage()->Add(*nodeIt);

    mitk::StatusBar::GetInstance()->DisplayText(status.sprintf("Finished Processing %d Files", nrFiles).toAscii());
    m_MultiWidget->RequestUpdate();

  }
  catch (itk::ExceptionObject &ex)
  {
    MBI_INFO << ex ;
    return ;
  }
}
void QmitkTensorReconstructionView::ItkReconstruction (  ) [protected, slot]

Definition at line 272 of file QmitkTensorReconstructionView.cpp.

References Reconstruct().

Referenced by CreateConnections().

{
  Reconstruct(0);
}
void QmitkTensorReconstructionView::ItkTensorReconstruction ( mitk::DataStorage::SetOfObjects::Pointer  inImages ) [protected, slot]

Definition at line 319 of file QmitkTensorReconstructionView.cpp.

References mitk::DiffusionImage< TPixelType >::GetB_Value(), mitk::DiffusionImage< TPixelType >::GetDirections(), mitk::StatusBar::GetInstance(), mitk::ProgressBar::GetInstance(), mitk::DiffusionImage< TPixelType >::GetVectorImage(), MBI_DEBUG, MBI_INFO, mitk::DataNode::New(), and mitk::TensorImage::New().

Referenced by Reconstruct().

{
  try
  {
    itk::TimeProbe clock;

    int nrFiles = inImages->size();
    if (!nrFiles) return;

    QString status;
    mitk::ProgressBar::GetInstance()->AddStepsToDo(nrFiles);

    mitk::DataStorage::SetOfObjects::const_iterator itemiter( inImages->begin() ); 
    mitk::DataStorage::SetOfObjects::const_iterator itemiterend( inImages->end() ); 

    std::vector<mitk::DataNode::Pointer> nodes;
    while ( itemiter != itemiterend ) // for all items
    {

      mitk::DiffusionImage<DiffusionPixelType>* vols = 
        static_cast<mitk::DiffusionImage<DiffusionPixelType>*>(
        (*itemiter)->GetData());

      std::string nodename;
      (*itemiter)->GetStringProperty("name", nodename);
      ++itemiter;

      // TENSOR RECONSTRUCTION
      clock.Start();
      MBI_INFO << "Tensor reconstruction ";
      mitk::StatusBar::GetInstance()->DisplayText(status.sprintf(
        "Tensor reconstruction for %s", nodename.c_str()).toAscii());
      typedef itk::DiffusionTensor3DReconstructionImageFilter< 
        DiffusionPixelType, DiffusionPixelType, TTensorPixelType > TensorReconstructionImageFilterType;
      TensorReconstructionImageFilterType::Pointer tensorReconstructionFilter = 
        TensorReconstructionImageFilterType::New();
      tensorReconstructionFilter->SetGradientImage( vols->GetDirections(), vols->GetVectorImage() );
      tensorReconstructionFilter->SetNumberOfThreads( m_Controls->m_TensorReconstructionNumberThreadsSpinbox->value() );
      tensorReconstructionFilter->SetBValue(vols->GetB_Value());  
      tensorReconstructionFilter->SetThreshold( m_Controls->m_TensorReconstructionThreasholdEdit->text().toFloat() );
      tensorReconstructionFilter->Update();
      clock.Stop();
      MBI_DEBUG << "took " << clock.GetMeanTime() << "s.";

      // TENSORS TO DATATREE
      mitk::TensorImage::Pointer image = mitk::TensorImage::New();
      image->InitializeByItk( tensorReconstructionFilter->GetOutput() );
      image->SetVolume( tensorReconstructionFilter->GetOutput()->GetBufferPointer() );
      mitk::DataNode::Pointer node=mitk::DataNode::New();
      node->SetData( image );

      QString newname;
      newname = newname.append(nodename.c_str());
      newname = newname.append("_dti");

      SetDefaultNodeProperties(node, newname.toStdString());
      nodes.push_back(node);

      mitk::ProgressBar::GetInstance()->Progress();

    }

    std::vector<mitk::DataNode::Pointer>::iterator nodeIt;
    for(nodeIt = nodes.begin(); nodeIt != nodes.end(); ++nodeIt)
      GetDefaultDataStorage()->Add(*nodeIt);

    mitk::StatusBar::GetInstance()->DisplayText(status.sprintf("Finished Processing %d Files", nrFiles).toAscii());
    m_MultiWidget->RequestUpdate();

  }
  catch (itk::ExceptionObject &ex)
  {
    MBI_INFO << ex ;
    return ;
  }
}
template<int ndirs>
std::vector< itk::Vector< double, 3 > > QmitkTensorReconstructionView::MakeGradientList (  ) [protected]

Definition at line 584 of file QmitkTensorReconstructionView.cpp.

{
  std::vector<itk::Vector<double,3> > retval;
  vnl_matrix_fixed<double, 3, ndirs>* U =
    itk::PointShell<ndirs, vnl_matrix_fixed<double, 3, ndirs> >::DistributePointShell();

  for(int i=0; i<ndirs;i++) 
  {
    itk::Vector<double,3> v;
    v[0] = U->get(0,i); v[1] = U->get(1,i); v[2] = U->get(2,i);
    retval.push_back(v);
  }
  return retval;
}
void QmitkTensorReconstructionView::ManualThresholdClicked (  ) [protected, slot]
void QmitkTensorReconstructionView::MethodChoosen ( int  method ) [protected, slot]
void QmitkTensorReconstructionView::Reconstruct ( int  method ) [protected, slot]

Definition at line 282 of file QmitkTensorReconstructionView.cpp.

References berry::SmartPointer< TObjectType >::Cast(), ItkTensorReconstruction(), m_CurrentSelection, and TeemTensorReconstruction().

Referenced by ItkReconstruction(), and TeemReconstruction().

{
  if (m_CurrentSelection)
  {
    mitk::DataStorage::SetOfObjects::Pointer set =
      mitk::DataStorage::SetOfObjects::New();

    int at = 0;
    for (IStructuredSelection::iterator i = m_CurrentSelection->Begin(); 
      i != m_CurrentSelection->End(); 
      ++i)
    {

      if (mitk::DataNodeObject::Pointer nodeObj = i->Cast<mitk::DataNodeObject>())
      {
        mitk::DataNode::Pointer node = nodeObj->GetDataNode();
        if(QString("DiffusionImage").compare(node->GetData()->GetNameOfClass())==0)
        {
          set->InsertElement(at++, node);
        }
      }
    }

    if(method == 0)
    {
      ItkTensorReconstruction(set);
    }

    if(method == 1)
    {
      TeemTensorReconstruction(set);
    }

  }
}
void QmitkTensorReconstructionView::SetDefaultNodeProperties ( mitk::DataNode::Pointer  node,
std::string  name 
) [protected]

Definition at line 498 of file QmitkTensorReconstructionView.cpp.

References mitk::StringProperty::New(), mitk::BoolProperty::New(), mitk::OdfScaleByProperty::New(), mitk::OdfNormalizationMethodProperty::New(), mitk::FloatProperty::New(), and mitk::IntProperty::New().

{
  node->SetProperty( "ShowMaxNumber", mitk::IntProperty::New( 500 ) );
  node->SetProperty( "Scaling", mitk::FloatProperty::New( 1.0 ) );
  node->SetProperty( "Normalization", mitk::OdfNormalizationMethodProperty::New());
  node->SetProperty( "ScaleBy", mitk::OdfScaleByProperty::New());
  node->SetProperty( "IndexParam1", mitk::FloatProperty::New(2));
  node->SetProperty( "IndexParam2", mitk::FloatProperty::New(1));
  node->SetProperty( "visible", mitk::BoolProperty::New( true ) );
  node->SetProperty( "VisibleOdfs", mitk::BoolProperty::New( false ) );
  node->SetProperty ("layer", mitk::IntProperty::New(100));
  node->SetProperty( "DoRefresh", mitk::BoolProperty::New( true ) );
  //node->SetProperty( "opacity", mitk::FloatProperty::New(1.0f) );

  node->SetProperty( "name", mitk::StringProperty::New(name) );
}
void QmitkTensorReconstructionView::StdMultiWidgetAvailable ( QmitkStdMultiWidget stdMultiWidget ) [virtual]

Called when a StdMultiWidget is available. Should not be used anymore, see GetActiveStdMultiWidget()

See also:
GetActiveStdMultiWidget()

Reimplemented from QmitkFunctionality.

Definition at line 199 of file QmitkTensorReconstructionView.cpp.

References berry::SmartPointer< TObjectType >::Cast(), berry::WorkbenchPart::GetSite(), m_CurrentSelection, m_MultiWidget, and m_SelListener.

{
  berry::ISelection::ConstPointer sel(
    this->GetSite()->GetWorkbenchWindow()->GetSelectionService()->GetSelection("org.mitk.views.datamanager"));
  m_CurrentSelection = sel.Cast<const IStructuredSelection>();
  m_SelListener.Cast<TrSelListener>()->DoSelectionChanged(sel);
  m_MultiWidget = &stdMultiWidget;
}
void QmitkTensorReconstructionView::StdMultiWidgetNotAvailable (  ) [virtual]

Called when no StdMultiWidget is available anymore. Should not be used anymore, see GetActiveStdMultiWidget()

See also:
GetActiveStdMultiWidget()

Reimplemented from QmitkFunctionality.

Definition at line 208 of file QmitkTensorReconstructionView.cpp.

References m_MultiWidget.

{
  m_MultiWidget = NULL;
}
void QmitkTensorReconstructionView::TeemCheckboxClicked (  ) [protected, slot]

Definition at line 228 of file QmitkTensorReconstructionView.cpp.

References Ui_QmitkTensorReconstructionViewControls::groupBox_3, and m_Controls.

Referenced by CreateConnections(), and CreateQtPartControl().

{
  m_Controls->groupBox_3->setVisible(m_Controls->
    m_TeemToggle->isChecked());  
}
void QmitkTensorReconstructionView::TeemReconstruction (  ) [protected, slot]

Definition at line 277 of file QmitkTensorReconstructionView.cpp.

References Reconstruct().

Referenced by CreateConnections().

{
  Reconstruct(1);
}
void QmitkTensorReconstructionView::TeemTensorReconstruction ( mitk::DataStorage::SetOfObjects::Pointer  inImages ) [protected, slot]

Definition at line 399 of file QmitkTensorReconstructionView.cpp.

References mitk::StatusBar::GetInstance(), mitk::ProgressBar::GetInstance(), MBI_DEBUG, MBI_INFO, mitk::DataNode::New(), mitk::TeemTensorEstimationMethodsLLS, mitk::TeemTensorEstimationMethodsMLE, mitk::TeemTensorEstimationMethodsNLS, and mitk::TeemTensorEstimationMethodsWLS.

Referenced by Reconstruct().

{
  try
  {
    itk::TimeProbe clock;

    int nrFiles = inImages->size();
    if (!nrFiles) return;

    QString status;
    mitk::ProgressBar::GetInstance()->AddStepsToDo(nrFiles);

    mitk::DataStorage::SetOfObjects::const_iterator itemiter( inImages->begin() ); 
    mitk::DataStorage::SetOfObjects::const_iterator itemiterend( inImages->end() ); 

    std::vector<mitk::DataNode::Pointer> nodes;
    while ( itemiter != itemiterend ) // for all items
    {

      mitk::DiffusionImage<DiffusionPixelType>* vols = 
        static_cast<mitk::DiffusionImage<DiffusionPixelType>*>(
        (*itemiter)->GetData());

      std::string nodename;
      (*itemiter)->GetStringProperty("name", nodename);
      ++itemiter;

      // TENSOR RECONSTRUCTION
      clock.Start();
      MBI_INFO << "Teem Tensor reconstruction ";
      mitk::StatusBar::GetInstance()->DisplayText(status.sprintf(
        "Teem Tensor reconstruction for %s", nodename.c_str()).toAscii());
      typedef mitk::TeemDiffusionTensor3DReconstructionImageFilter< 
        DiffusionPixelType, TTensorPixelType > TensorReconstructionImageFilterType;
      TensorReconstructionImageFilterType::Pointer tensorReconstructionFilter = 
        TensorReconstructionImageFilterType::New();
      tensorReconstructionFilter->SetInput( vols );
      if(!m_Controls->m_TensorEstimationTeemSigmaEdit->text().contains(QString("NaN")))
        tensorReconstructionFilter->SetSigma( m_Controls->m_TensorEstimationTeemSigmaEdit->text().toFloat() );
      switch(m_Controls->m_TensorEstimationTeemEstimationMethodCombo->currentIndex())
      {
        //  items << "LLS (Linear Least Squares)"
        //<< "MLE (Maximum Likelihood)"
        //<< "NLS (Nonlinear Least Squares)"
        //<< "WLS (Weighted Least Squares)";
      case 0:
        tensorReconstructionFilter->SetEstimationMethod(mitk::TeemTensorEstimationMethodsLLS);
        break;
      case 1:
        tensorReconstructionFilter->SetEstimationMethod(mitk::TeemTensorEstimationMethodsMLE);
        break;
      case 2:
        tensorReconstructionFilter->SetEstimationMethod(mitk::TeemTensorEstimationMethodsNLS);
        break;
      case 3:
        tensorReconstructionFilter->SetEstimationMethod(mitk::TeemTensorEstimationMethodsWLS);
        break;
      default:
        tensorReconstructionFilter->SetEstimationMethod(mitk::TeemTensorEstimationMethodsLLS);
      }
      tensorReconstructionFilter->SetNumIterations( m_Controls->m_TensorEstimationTeemNumItsSpin->value() );
      if(m_Controls->m_TensorEstimationManualThreashold->isChecked())
        tensorReconstructionFilter->SetConfidenceThreshold( m_Controls->m_TensorReconstructionThreasholdEdit_2->text().toDouble() );
      tensorReconstructionFilter->SetConfidenceFuzzyness( m_Controls->m_TensorEstimationTeemFuzzyEdit->text().toFloat() );
      tensorReconstructionFilter->SetMinPlausibleValue( m_Controls->m_TensorEstimationTeemMinValEdit->text().toDouble() );
      tensorReconstructionFilter->Update();
      clock.Stop();
      MBI_DEBUG << "took " << clock.GetMeanTime() << "s." ;

      // TENSORS TO DATATREE
      mitk::DataNode::Pointer node2=mitk::DataNode::New();
      node2->SetData( tensorReconstructionFilter->GetOutputItk() );

      QString newname;
      newname = newname.append(nodename.c_str());
      newname = newname.append("_dtix");

      SetDefaultNodeProperties(node2, newname.toStdString());
      nodes.push_back(node2);

      mitk::ProgressBar::GetInstance()->Progress();

    }

    std::vector<mitk::DataNode::Pointer>::iterator nodeIt;
    for(nodeIt = nodes.begin(); nodeIt != nodes.end(); ++nodeIt)
      GetDefaultDataStorage()->Add(*nodeIt);

    mitk::StatusBar::GetInstance()->DisplayText(status.sprintf("Finished Processing %d Files", nrFiles).toAscii());
    m_MultiWidget->RequestUpdate();

  }
  catch (itk::ExceptionObject &ex)
  {
    MBI_INFO << ex ;
    return ;
  }
}
template<int L>
void QmitkTensorReconstructionView::TemplatedAnalyticalTensorReconstruction ( mitk::DiffusionImage< DiffusionPixelType > *  vols,
float  lambda,
std::string  nodename,
std::vector< mitk::DataNode::Pointer > *  nodes,
int  normalization 
) [protected]
void QmitkTensorReconstructionView::TensorsToDWI (  ) [protected, slot]

Definition at line 556 of file QmitkTensorReconstructionView.cpp.

References berry::SmartPointer< TObjectType >::Cast(), DoTensorsToDWI(), and m_CurrentSelection.

Referenced by CreateConnections().

{
  if (m_CurrentSelection)
  {
    mitk::DataStorage::SetOfObjects::Pointer set =
      mitk::DataStorage::SetOfObjects::New();

    int at = 0;
    for (IStructuredSelection::iterator i = m_CurrentSelection->Begin(); 
      i != m_CurrentSelection->End(); 
      ++i)
    {

      if (mitk::DataNodeObject::Pointer nodeObj = i->Cast<mitk::DataNodeObject>())
      {
        mitk::DataNode::Pointer node = nodeObj->GetDataNode();
        if(QString("TensorImage").compare(node->GetData()->GetNameOfClass())==0)
        {
          set->InsertElement(at++, node);
        }
      }
    }

    DoTensorsToDWI(set);
  }
}

Friends And Related Function Documentation

friend struct TrSelListener [friend]

Definition at line 50 of file QmitkTensorReconstructionView.h.

Referenced by CreateQtPartControl().


Member Data Documentation

Definition at line 75 of file QmitkTensorReconstructionView.h.

const std::string QmitkTensorReconstructionView::VIEW_ID = "org.mitk.views.tensorreconstruction" [static]

Definition at line 57 of file QmitkTensorReconstructionView.h.


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