00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2007-03-05 12:05:09 +0100 (Mo, 05 Mrz 2007) $ 00006 Version: $Revision: 9583 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 00019 #include "mitkGroupDiffusionHeadersFilter.h" 00020 00021 00022 mitk::GroupDiffusionHeadersFilter::GroupDiffusionHeadersFilter() 00023 { 00024 // Modify superclass default values, may be overridden by subclasses 00025 this->SetNumberOfRequiredInputs( 1 ); 00026 this->SetNumberOfRequiredOutputs( 4 ); 00027 } 00028 00029 00030 mitk::GroupDiffusionHeadersFilter::~GroupDiffusionHeadersFilter() 00031 {} 00032 00033 void mitk::GroupDiffusionHeadersFilter::GenerateOutputInformation() 00034 { 00035 } 00036 00037 void mitk::GroupDiffusionHeadersFilter::Update() 00038 { 00039 InputType input = static_cast<InputType>( this->GetInput( ) ); 00040 this->SetNthOutput(0, input); 00041 00042 InputType dwi; 00043 InputType zerodwi; 00044 InputType other; 00045 00046 bool foundDWI = false; 00047 00048 // check each series' first image 00049 unsigned int size = input.size(); 00050 HeaderPointer header; 00051 HeaderPointer dwiHeader; 00052 for ( unsigned int i = 0 ; i < size ; ++i ) 00053 { 00054 header = input[i]; 00055 00056 // list of files 00057 if( header->bValue > 0) 00058 { 00059 header->headerGroup = DHG_NonZeroDiffusionWeighted; 00060 if(!foundDWI) 00061 dwiHeader = header; 00062 foundDWI = true; 00063 } 00064 else 00065 { 00066 header->headerGroup = DHG_ZeroDiffusionWeighted; 00067 } 00068 } 00069 00070 if(foundDWI) 00071 { 00072 for ( unsigned int i = 0 ; i < size ; ++i ) 00073 { 00074 header = input[i]; 00075 00076 // list of files 00077 if( !header->isIdentical(dwiHeader)) 00078 { 00079 header->headerGroup = DHG_Other; 00080 } 00081 } 00082 } 00083 else 00084 { 00085 for ( unsigned int i = 0 ; i < size ; ++i ) 00086 { 00087 header = input[i]; 00088 header->headerGroup = DHG_Other; 00089 } 00090 } 00091 00092 for ( unsigned int i = 0 ; i < size ; ++i ) 00093 { 00094 header = input[i]; 00095 00096 switch (header->headerGroup) 00097 { 00098 case DHG_Other: 00099 other.push_back(header); 00100 break; 00101 case DHG_ZeroDiffusionWeighted: 00102 zerodwi.push_back(header); 00103 break; 00104 case DHG_NonZeroDiffusionWeighted: 00105 dwi.push_back(header); 00106 break; 00107 case DHG_NotYetGrouped: 00108 break; 00109 } 00110 } 00111 00112 this->SetNthOutput(1, dwi); 00113 this->SetNthOutput(2, zerodwi); 00114 this->SetNthOutput(3, other); 00115 00116 } 00117 00118 void mitk::GroupDiffusionHeadersFilter::SetInput( mitk::GroupDiffusionHeadersFilter::InputType input ) 00119 { 00120 // Process object is not const-correct so the const_cast is required here 00121 m_Input = input; 00122 } 00123 00124 00125 void mitk::GroupDiffusionHeadersFilter::SetInput( const unsigned int& /*idx*/, mitk::GroupDiffusionHeadersFilter::InputType input ) 00126 { 00127 this->SetInput( input ); 00128 } 00129 00130 00131 mitk::GroupDiffusionHeadersFilter::InputType mitk::GroupDiffusionHeadersFilter::GetInput( void ) 00132 { 00133 return m_Input; 00134 } 00135 00136 00137 mitk::GroupDiffusionHeadersFilter::InputType mitk::GroupDiffusionHeadersFilter::GetInput( const unsigned int& /*idx*/ ) 00138 { 00139 return this->GetInput(); 00140 } 00141 00142 mitk::GroupDiffusionHeadersFilter::OutputType 00143 mitk::GroupDiffusionHeadersFilter::GetOutput() 00144 { 00145 return m_Output; 00146 } 00147 00148 void mitk::GroupDiffusionHeadersFilter::SetNthOutput( const unsigned int& idx, InputType output ) 00149 { 00150 if(idx >= m_Output.size()) 00151 m_Output.resize(idx+1); 00152 m_Output[idx] = output; 00153 } 00154 00155 void mitk::GroupDiffusionHeadersFilter::operator=( const mitk::GroupDiffusionHeadersFilter::Self& ) 00156 {} 00157 00158