diff --git a/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.cpp b/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.cpp index 35a91ed396..10fc62d6a7 100644 --- a/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.cpp +++ b/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.cpp @@ -1,65 +1,89 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision: 16011 $ 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 "mitkNavigationDataEvaluationFilter.h" mitk::NavigationDataEvaluationFilter::NavigationDataEvaluationFilter() : mitk::NavigationDataToNavigationDataFilter() { } mitk::NavigationDataEvaluationFilter::~NavigationDataEvaluationFilter() { } void mitk::NavigationDataEvaluationFilter::GenerateData() { this->CreateOutputsForAllInputs(); // make sure that we have the same number of outputs as inputs + this->CreateMembersForAllInputs(); /* update outputs with tracking data from tools */ for (unsigned int i = 0; i < this->GetNumberOfOutputs() ; ++i) { + //first copy outputs to inputs mitk::NavigationData* output = this->GetOutput(i); assert(output); const mitk::NavigationData* input = this->GetInput(i); assert(input); - - if (input->IsDataValid() == false) - { - output->SetDataValid(false); - continue; - } - - - - output->Graft(input); - - + if (input->IsDataValid() == false) {output->SetDataValid(false);} + else {output->Graft(input);} + + //then save statistics + if(input->IsDataValid()) + { + m_LoggedPositions[i].push_back(input->GetPosition()); + m_LoggedQuaternions[i].push_back(input->GetOrientation()); + } + else + { + m_InavildSamples[i]++; + } } +} +void mitk::NavigationDataEvaluationFilter::CreateMembersForAllInputs() +{ + while(this->m_LoggedPositions.size() < this->GetNumberOfInputs()) + { + std::pair> newElement(m_LoggedPositions.size(),std::vector()); + m_LoggedPositions.insert(newElement); + } + while(this->m_LoggedQuaternions.size() < this->GetNumberOfInputs()) + { + std::pair> newElement(m_LoggedQuaternions.size(),std::vector()); + m_LoggedQuaternions.insert(newElement); + } + while(this->m_InavildSamples.size() < this->GetNumberOfInputs()) + { + std::pair newElement(m_LoggedQuaternions.size(),0); + m_InavildSamples.insert(newElement); + } + + } void mitk::NavigationDataEvaluationFilter::ResetStatistic() { -m_SumPositions.Fill(0); -m_NumberAnalysedNavigationDatas = 0; +for (int i = 0; i < m_LoggedPositions.size(); i++) m_LoggedPositions[i] = std::vector(); +for (int i = 0; i < m_LoggedQuaternions.size(); i++) m_LoggedQuaternions[i] = std::vector(); +for (int i = 0; i < m_InavildSamples.size(); i++) m_InavildSamples[i] = 0; } diff --git a/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.h b/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.h index e4fe27fa03..15aa169d17 100644 --- a/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.h +++ b/Modules/IGT/IGTFilters/mitkNavigationDataEvaluationFilter.h @@ -1,69 +1,93 @@ /*========================================================================= Program: Medical Imaging & Interaction Toolkit Language: C++ Date: $Date$ Version: $Revision: 16011 $ 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. =========================================================================*/ #ifndef MITKNavigationDataEvaluationFilter_H_HEADER_INCLUDED_ #define MITKNavigationDataEvaluationFilter_H_HEADER_INCLUDED_ #include #include #include namespace mitk { /**Documentation * \brief NavigationDataEvaluationFilter calculates statistical data (mean value, mean error, etc.) on the input navigation data. * Input navigation data are set 1:1 on output navigation data. * * \ingroup IGT */ class MitkIGT_EXPORT NavigationDataEvaluationFilter : public NavigationDataToNavigationDataFilter { public: mitkClassMacro(NavigationDataEvaluationFilter, NavigationDataToNavigationDataFilter); itkNewMacro(Self); /** @brief Resets all statistics and starts again. */ void ResetStatistic(); - /** @brief Resets the number of analysed navigation datas. */ - itkGetMacro(NumberAnalysedNavigationDatas,int); - + /** @return returns the number of analysed navigation datas for the specified input. */ + int GetNumberOfAnalysedNavigationData(int input); + + + double GetPositionMean(int input); + double GetPositionStandardDerivation(int input); + + double GetQuaternionMean(int input); + double GetQuaternionStandardDerivation(int input); + + + /** @return Returns the mean distance to the mean postion. */ + double GetPositionErrorMean(int input); + double GetPositionErrorStandardDerication(int input); + double GetPositionErrorRMS(int input); + double GetPositionErrorMedian(int input); + + double GetQuaternionErrorMean(int input); + double GetQuaternionErrorStandardDerication(int input); + double GetQuaternionErrorRMS(int input); + double GetQuaternionErrorMedian(int input); + + protected: NavigationDataEvaluationFilter(); virtual ~NavigationDataEvaluationFilter(); /**Documentation * \brief filter execute method * * transforms navigation data */ virtual void GenerateData(); - mitk::Point3D m_SumPositions; //todo: make a map here, to have one sum for every navigation data - int m_NumberAnalysedNavigationDatas; + /** @brief Creates the member variables which store all the statistical data for every input. */ + void CreateMembersForAllInputs(); + + std::map> m_LoggedPositions; //a map here, to have one list for every navigation data + std::map> m_LoggedQuaternions; + std::map m_InavildSamples; }; } // namespace mitk #endif /* MITKNavigationDataEvaluationFilter_H_HEADER_INCLUDED_ */ \ No newline at end of file