From fd5fda74cbb6e25cdf13c614f6cdc5db2662f0e5 Mon Sep 17 00:00:00 2001
From: Guillaume Pasero <guillaume.pasero@c-s.fr>
Date: Tue, 10 Jan 2017 15:37:29 +0100
Subject: [PATCH] STYLE: fix indentation, remove tabs, clear trailing spaces

---
 .../app/otbDomainTransform.cxx                | 788 +++++++++---------
 1 file changed, 392 insertions(+), 396 deletions(-)

diff --git a/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx b/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
index f80fad0926..8aafff65e7 100644
--- a/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
+++ b/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
@@ -30,428 +30,424 @@
 
 namespace otb
 {
-  namespace Wrapper
-  {
+namespace Wrapper
+{
+
+template< class TInput, class TOutput>
+class FromComplexPixel
+{
+public:
+  FromComplexPixel ( ) {  };
 
-    template< class TInput, class TOutput>
-    class FromComplexPixel
+  ~FromComplexPixel( ) {  };
+
+  bool operator!=( const FromComplexPixel & ) const
     {
-    public:
-      FromComplexPixel ( ) {  };
-			
-      ~FromComplexPixel( ) {  };
-			
-      bool operator!=( const FromComplexPixel & ) const
-      {
-	return false;
-      }
-		   
-      bool operator==( const FromComplexPixel & other ) const
+    return false;
+    }
+  bool operator==( const FromComplexPixel & other ) const
+    {
+    return !(*this != other);
+    }
+  inline TOutput operator( )( const TInput & A ) const
+    {
+    TOutput out;
+    out.SetSize(2);
+    out[0] = A.real();
+    out[1] = A.imag();
+    return out;
+    }
+};
+
+template< class TInput, class TOutput>
+class ToComplexPixel
+{
+public:
+  ToComplexPixel ( ) { };
+
+  ~ToComplexPixel( ) { };
+
+  bool operator!=( const ToComplexPixel & ) const
+    {
+    return false;
+    }
+  bool operator==( const ToComplexPixel & other ) const
+    {
+    return !(*this != other);
+    }
+  inline TOutput operator( )( const TInput & A ) const
+    {
+    TOutput out(A[0], A[1]);
+    return out;
+    }
+};
+
+class DomainTransform : public Application
+{
+public:
+  /** Standard class typedefs. */
+  typedef DomainTransform     Self;
+  typedef Application                   Superclass;
+  typedef itk::SmartPointer<Self>       Pointer;
+
+  typedef itk::SmartPointer<const Self> ConstPointer;
+  typedef float TInputPixel;
+  typedef float TOutputPixel;
+
+  /** Standard macro */
+  itkNewMacro(Self);
+
+  itkTypeMacro(Self, otb::Application);
+
+private:
+  void DoInit() ITK_OVERRIDE
+    {
+    SetName("DomainTransform");
+    SetDescription("Domain Transform application for wavelet and fourier");
+
+    // Documentation
+    SetDocName("DomainTransform");
+    SetDocLongDescription("Domain Transform application for wavelet and fourier");
+    SetDocLimitations("None");
+    SetDocAuthors("OTB-Team");
+    SetDocSeeAlso("otbWaveletImageFilter, otbWaveletInverseImageFilter, otbWaveletTransform");
+    AddDocTag(Tags::Filter);
+
+    AddParameter(ParameterType_InputImage, "in",  "Input Image");
+    SetParameterDescription("in", "This will take an input image to be transformed"
+      " image. For FFT inverse transform, it expects a complex image as two-band"
+      " image in which first band represent real part and second band represent"
+      " imaginary part.");
+
+    AddRAMParameter();
+
+    AddParameter(ParameterType_Choice, "mode", "mode");
+    SetParameterDescription("mode", "This parameter allows one to select between"
+      " fft(fourier) and wavelet");
+    AddChoice("mode.fft", "FFT transform");
+    SetParameterDescription("mode.fft", "FFT transform");
+    AddParameter(ParameterType_Empty, "mode.fft.shift", "false");
+    SetParameterDescription("mode.fft.shift", "Shift transform of fft filter");
+    AddChoice("mode.wavelet", "wavelet");
+    SetParameterDescription("mode.wavelet", "Wavelet transform");
+    AddParameter(ParameterType_Choice, "mode.wavelet.form", "Select wavelet form");
+
+    AddChoice("mode.wavelet.form.haar", "HAAR");
+    AddChoice("mode.wavelet.form.db4", "DAUBECHIES4");
+    AddChoice("mode.wavelet.form.db6", "DAUBECHIES6");
+    AddChoice("mode.wavelet.form.db8", "DAUBECHIES8");
+    AddChoice("mode.wavelet.form.db12", "DAUBECHIES12");
+    AddChoice("mode.wavelet.form.db20", "DAUBECHIES20");
+    AddChoice("mode.wavelet.form.sb24", "SPLINE_BIORTHOGONAL_2_4");
+    AddChoice("mode.wavelet.form.sb44", "SPLINE_BIORTHOGONAL_4_4");
+    AddChoice("mode.wavelet.form.sym8", "SYMLET8");
+
+    //Default value
+    SetParameterString("mode", "wavelet");
+    SetParameterString("mode.wavelet.form", "haar");
+
+    AddParameter(ParameterType_Int,"mode.wavelet.nlevels","Number of decomposition levels");
+    SetParameterDescription("mode.wavelet.nlevels","Number of decomposition levels");
+    SetDefaultParameterInt("mode.wavelet.nlevels",2);
+    SetMinimumParameterIntValue("mode.wavelet.nlevels",2);
+
+    AddParameter(ParameterType_Choice,"dir", "Direction");
+
+    AddChoice("dir.fwd", "Forward");
+    AddChoice("dir.inv", "Inverse");
+
+    AddParameter(ParameterType_OutputImage, "out", "Output Image");
+    SetParameterDescription("out", "This parameter holds the output file name to"
+      " which transformed image will be written. This has a slightly different"
+      " behaviour depending on transform type. \n For Wavelet, output is a"
+      " single band image for both forward and inverse transform. \n For FFT"
+      " forward transform, output is two band image where first band represents"
+      " real part and second band represents imaginary part of a complex image.");
+
+    SetDocExampleParameterValue("in", "input.tif");
+    SetDocExampleParameterValue("mode.wavelet.form", "haar");
+    SetDocExampleParameterValue("out", "output_wavelet_haar.tif");
+    }
+
+  void DoUpdateParameters() ITK_OVERRIDE
+    {
+    // wavelet and fourier are mutually exclusive parameters.
+    // check it here
+#if 0
+    if (HasUserValue("mode.wavelet.form") &&
+        GetParameterString("mode") == "fft")
       {
-	return !(*this != other);
+      std::stringstream oss;
+      oss << std::endl
+        << this->GetNameOfClass() << "::DoUpdateParameters() "
+        << "Cannot use 'mode.wavelet.form' and '-mode fft' at same time"
+        << std::endl;
+      throw std::runtime_error( oss.str() );
       }
-      inline TOutput operator( )( const TInput & A ) const
+#endif
+    }
+
+  void DoExecute() ITK_OVERRIDE
+    {
+    int dir = GetParameterInt("dir");
+    int mode = GetParameterInt("mode");
+
+    if( dir != 0 && dir != 1)
       {
-	TOutput out;
-	out.SetSize(2);
-	out[0] = A.real();
-	out[1] = A.imag();	
-	return out;
+      itkExceptionMacro(<< "-dir is '"
+         << dir << "'."
+         << "It must be either 'fwd' or 'inv'");
       }
-    };
 
-    template< class TInput, class TOutput>
-    class ToComplexPixel
-    {
-    public:
-      ToComplexPixel ( ) { };
-			
-      ~ToComplexPixel( ) { };
-			
-      bool operator!=( const ToComplexPixel & ) const
+    if( mode != 0 && mode != 1)
       {
-	return false;
+      itkExceptionMacro( << "mode is '"
+         << mode << "'."
+         << "It must must be either 'fft' or 'wavelet'");
       }
-      bool operator==( const ToComplexPixel & other ) const
+
+    if ( mode == 1)
       {
-	return !(*this != other);
+      int wavelet_type = GetParameterInt("mode.wavelet.form");
+      unsigned int nlevels = GetParameterInt("mode.wavelet.nlevels");
+      switch (wavelet_type)
+        {
+        case 0:
+          {
+          DoWaveletTransform<otb::Wavelet::HAAR>(dir, nlevels);
+          break;
+          }
+        case 1:
+          {
+          DoWaveletTransform<otb::Wavelet::DB4>(dir, nlevels);
+          break;
+          }
+        case 2:
+          {
+          DoWaveletTransform<otb::Wavelet::DB4>(dir, nlevels);
+          break;
+          }
+        case 3:
+          {
+          DoWaveletTransform<otb::Wavelet::DB6>(dir, nlevels);
+          break;
+          }
+        case 4:
+          {
+          DoWaveletTransform<otb::Wavelet::DB8>(dir, nlevels);
+          break;
+          }
+        case 5:
+          {
+          DoWaveletTransform<otb::Wavelet::DB12>(dir, nlevels);
+          break;
+          }
+        case 6:
+          {
+          DoWaveletTransform<otb::Wavelet::DB20>(dir, nlevels);
+          break;
+          }
+        case 7:
+          {
+          DoWaveletTransform<otb::Wavelet::SPLINE_BIORTHOGONAL_2_4 >(dir, nlevels);
+          break;
+          }
+        case 8:
+          {
+          DoWaveletTransform<otb::Wavelet::SPLINE_BIORTHOGONAL_4_4>(dir, nlevels);
+          break;
+          }
+        case 9:
+          {
+          DoWaveletTransform<otb::Wavelet::SYMLET8>(dir, nlevels);
+          break;
+          }
+        default:
+          {
+          itkExceptionMacro( << "Invalid wavelet type: '" <<  wavelet_type << "'");
+          break;
+          }
+        }
       }
-      inline TOutput operator( )( const TInput & A ) const
+    else
       {
-	TOutput out(A[0], A[1]);				
-	return out;
+      // fft ttransform
+      bool shift = IsParameterEnabled( "mode.fft.shift");
+
+      if (dir == 0 )
+        {
+        //forward fft
+        typedef otb::Image<TInputPixel>          TInputImage;
+        typedef TInputImage::Pointer TInputImagePointer;
+
+        //get input paramter as otb::Image<TInputPixel>
+        TInputImagePointer inImage = GetParameterImage<TInputImage>("in");
+        inImage->UpdateOutputInformation();
+        //typedef itk::::ForwardFFTImageFilter over otbImage< TInputPixel >
+        typedef itk::ForwardFFTImageFilter < TInputImage> FFTFilter;
+        FFTFilter::Pointer fwdFilter = FFTFilter::New();
+        fwdFilter->SetInput( inImage );
+
+        //typedef VectorImage for output of UnaryFunctorImageFilter
+        typedef otb::VectorImage<TOutputPixel>          TOutputImage;
+
+        //UnaryFunctorImageFilter for Complex to VectorImage
+        typedef itk::UnaryFunctorImageFilter<
+          typename FFTFilter::OutputImageType,
+          TOutputImage,
+          FromComplexPixel<
+            typename FFTFilter::OutputImageType::PixelType,
+            TOutputImage::PixelType> > UnaryFunctorImageFilter;
+
+        //convert complex pixel to variable length vector
+        //with unaryfunctor image filter
+        UnaryFunctorImageFilter::Pointer unaryFunctorImageFilter
+          = UnaryFunctorImageFilter::New();
+
+        if( shift)
+          {
+          otbAppLogINFO( << "Applying Shift image filter" );
+          typedef itk::FFTShiftImageFilter<
+            typename FFTFilter::OutputImageType,
+            typename FFTFilter::OutputImageType > FFTShiftFilterType;
+
+          FFTShiftFilterType::Pointer
+            fftShiftFilter = FFTShiftFilterType::New();
+
+          fftShiftFilter->SetInput( fwdFilter->GetOutput() );
+          fftShiftFilter->Update();
+          unaryFunctorImageFilter->SetInput(fftShiftFilter->GetOutput() );
+          }
+        else
+          {
+          unaryFunctorImageFilter->SetInput(fwdFilter->GetOutput());
+          }
+
+        unaryFunctorImageFilter->Update();
+
+        //set output image
+        SetParameterOutputImage<TOutputImage>("out",
+          unaryFunctorImageFilter->GetOutput());
+        }
+      else
+        {
+        //inverse fft
+        typedef otb::VectorImage<TInputPixel>          TInputImage;
+        typedef TInputImage::Pointer TInputImagePointer;
+
+        TInputImagePointer inImage = GetParameterImage("in");
+
+        inImage->UpdateOutputInformation();
+
+        // typedef TComplexImage for InverseFFTImageFilter input
+        // This a image type of std::complex<TInputPixel>
+        typedef otb::Image<
+          std::complex<TInputPixel>, 2 > TComplexImage;
+        //typedef TOutputImage for InverseFFTImageFilter output
+        typedef otb::Image< TOutputPixel >  TOutputImage;
+
+        // a unary functor to convert vectorimage to complex image
+        typedef itk::UnaryFunctorImageFilter
+          <TInputImage,
+           TComplexImage,
+           ToComplexPixel
+           <TInputImage::PixelType,
+            TComplexImage::PixelType> > UnaryFunctorImageFilter;
+
+        UnaryFunctorImageFilter::Pointer
+          unaryFunctorImageFilter = UnaryFunctorImageFilter::New();
+
+        if( shift)
+          {
+          typedef itk::FFTShiftImageFilter<
+            TInputImage,
+            TInputImage > FFTShiftFilterType;
+
+          FFTShiftFilterType::Pointer
+            fftShiftFilter = FFTShiftFilterType::New();
+          fftShiftFilter->SetInput( inImage );
+
+          fftShiftFilter->Update();
+
+          unaryFunctorImageFilter->SetInput(fftShiftFilter->GetOutput() );
+          }
+        else
+          {
+          unaryFunctorImageFilter->SetInput(inImage);
+          }
+
+        unaryFunctorImageFilter->Update();
+
+        //typedef itk::::InverseFFTImageFilter over TComplexImage
+        typedef itk::InverseFFTImageFilter
+          < TComplexImage,
+            TOutputImage > FFTFilter;
+        FFTFilter::Pointer invFilter = FFTFilter::New();
+        invFilter->SetInput( unaryFunctorImageFilter->GetOutput() );
+        invFilter->Update();
+
+        //set output image
+        SetParameterOutputImage<TOutputImage>("out", invFilter->GetOutput());
+        }
       }
-    };
+    }
 
-		
-    class DomainTransform : public Application
+  template<otb::Wavelet::Wavelet TWaveletOperator>
+  void DoWaveletTransform(const int dir,
+                          const unsigned int nlevels,
+                          const std::string inkey = "in",
+                          const std::string outkey = "out")
     {
-    public:
-      /** Standard class typedefs. */
-      typedef DomainTransform     Self;
-      typedef Application                   Superclass;
-      typedef itk::SmartPointer<Self>       Pointer;
-
-      typedef itk::SmartPointer<const Self> ConstPointer;
-      typedef float TInputPixel;
-      typedef float TOutputPixel;
-
-      /** Standard macro */
-      itkNewMacro(Self);
+    typedef otb::Image< TInputPixel >  TInputImage;
+    typedef otb::Image< TOutputPixel >  TOutputImage;
+    typedef typename TInputImage::Pointer TInputImagePointer;
 
-      itkTypeMacro(Self, otb::Application);
+    TInputImagePointer inImage = GetParameterImage<TInputImage>(inkey);
 
-    private:
+    inImage->UpdateOutputInformation();
 
-      void DoInit() ITK_OVERRIDE
+    if( dir == 0)
       {
-	SetName("DomainTransform");
-	
-	SetDescription("Domain Transform application for wavelet and fourier");
-
-	// Documentation
-	SetDocName("DomainTransform");
-	SetDocLongDescription("Domain Transform application for wavelet and fourier");
-	SetDocLimitations("None");
-	SetDocAuthors("OTB-Team");
-	SetDocSeeAlso("otbWaveletImageFilter, otbWaveletInverseImageFilter, otbWaveletTransform");
-	AddDocTag(Tags::Filter);
-
-	AddParameter(ParameterType_InputImage, "in",  "Input Image");
-	SetParameterDescription("in", "This will take an input image to be transformed image. For FFT inverse transform, it expects a complex image as two-band image in which first band represent real part and second band represent imaginary part.");
-
-	AddRAMParameter();
-
-	AddParameter(ParameterType_Choice, "mode", "mode");
-	SetParameterDescription("mode", "This parameter allows one to select between fft(fourier) and wavelet");
-	AddChoice("mode.fft", "FFT transform");
-	SetParameterDescription("mode.fft", "FFT transform");
-	AddParameter(ParameterType_Empty, "mode.fft.shift", "false");
-	SetParameterDescription("mode.fft.shift",
-				"shift transform of fft filter");
-	AddChoice("mode.wavelet", "wavelet");
-	SetParameterDescription("mode.wavelet", "Wavelet transform");
-	AddParameter(ParameterType_Choice,
-		     "mode.wavelet.form",
-		     "Select wavelet form. default is HAAR");
-
-	AddChoice("mode.wavelet.form.haar", "HAAR");
-	AddChoice("mode.wavelet.form.db4", "DAUBECHIES4");
-	AddChoice("mode.wavelet.form.db6", "DAUBECHIES6");
-	AddChoice("mode.wavelet.form.db8", "DAUBECHIES8");
-	AddChoice("mode.wavelet.form.db12", "DAUBECHIES12");
-	AddChoice("mode.wavelet.form.db20", "DAUBECHIES20");
-	AddChoice("mode.wavelet.form.sb24", "SPLINE_BIORTHOGONAL_2_4");
-	AddChoice("mode.wavelet.form.sb44", "SPLINE_BIORTHOGONAL_4_4");
-	AddChoice("mode.wavelet.form.sym8", "SYMLET8");
-				
-	//Default value  
-	SetParameterString("mode", "wavelet");
-	SetParameterString("mode.wavelet.form", "haar");
-
-        AddParameter(ParameterType_Int,"mode.wavelet.nlevels","Number of decomposition levels");
-        SetParameterDescription("mode.wavelet.nlevels","Number of decomposition levels");
-        SetDefaultParameterInt("mode.wavelet.nlevels",2);
-        SetMinimumParameterIntValue("mode.wavelet.nlevels",2);
-
-	AddParameter(ParameterType_Choice,
-		     "dir",
-		     "dir: forward/inverse");
-				
-	AddChoice("dir.fwd", "fwd");
-	AddChoice("dir.inv", "inv");
-
-	AddParameter(ParameterType_OutputImage, "out", "Output Image");
-	SetParameterDescription("out", "This parameter holds the output file name to which transformed image will be written. This has a slightly different behaviour depending on transform type. \n For Wavelet, output is a single band image for both forward and inverse transform. \n For FFT forward transform, output is two band image where first band represents real part and second band represents imaginary part of a complex image.");
-
-
-	SetDocExampleParameterValue("in", "input.tif");
-	SetDocExampleParameterValue("mode.wavelet.form", "haar");
-	SetDocExampleParameterValue("out", "output_wavelet_haar.tif");
+      typedef otb::WaveletImageFilter<
+        TInputImage,
+        TOutputImage,
+        TWaveletOperator> TWaveletImageFilter;
+
+      typedef typename
+        TWaveletImageFilter::Pointer
+        TWaveletImageFilterPointer;
+      TWaveletImageFilterPointer waveletImageFilter =
+        TWaveletImageFilter::New();
+
+      waveletImageFilter->SetInput(inImage);
+      waveletImageFilter->SetNumberOfDecompositions(nlevels);
+      waveletImageFilter->Update();
+      SetParameterOutputImage<TOutputImage>(outkey, waveletImageFilter->GetOutput() );
       }
-
-      void DoUpdateParameters() ITK_OVERRIDE
+    else
       {
-	// wavelet and fourier are mutually exclusive parameters.
-	// check it here
-#if 0
-	if ( HasUserValue("mode.wavelet.form") &&
-	     GetParameterString("mode") == "fft"
-	     )
-	  {
-	    std::stringstream oss;
-	    oss << std::endl
-		<< this->GetNameOfClass() << "::DoUpdateParameters() "
-		<< "Cannot use 'mode.wavelet.form' and '-mode fft' at same time"
-		<< std::endl;
-      
-	    throw std::runtime_error( oss.str() );
-	  }
-#endif  
-      }
+      typedef otb::WaveletInverseImageFilter<
+        TInputImage,
+        TOutputImage,
+        TWaveletOperator > TWaveletImageFilter;
 
+      typedef typename
+        TWaveletImageFilter::Pointer
+        TWaveletImageFilterPointer;
 
+      TWaveletImageFilterPointer waveletImageFilter =
+        TWaveletImageFilter::New();
 
-      void DoExecute() ITK_OVERRIDE
-      {
-				
-	int dir = GetParameterInt("dir");
-
-	int mode = GetParameterInt("mode");
-
-	if( dir != 0 && dir != 1)
-	  {
-	    itkExceptionMacro( << "-dir is '" 
-			       << dir << "'."
-			       << "It must be either 'fwd' or 'inv'");
-	  }
-				
-	if( mode != 0 && mode != 1)
-	  {
-	    itkExceptionMacro( << "mode is '" 
-			       << mode << "'."
-			       << "It must must be either 'fft' or 'wavelet'");
-	  }
-
-				
-	if ( mode == 1)
-	  {
-	    int wavelet_type = GetParameterInt("mode.wavelet.form");
-	    unsigned int nlevels = GetParameterInt("mode.wavelet.nlevels");
-	    switch (wavelet_type)
-	      {
-	      case 0:
-		DoWaveletTransform<otb::Wavelet::HAAR> ( dir, nlevels );
-		break;					
-	      case 1:
-		DoWaveletTransform< otb::Wavelet::DB4 > ( dir, nlevels );
-		break;
-	      case 2:
-		DoWaveletTransform<otb::Wavelet::DB4> ( dir, nlevels );
-		break;
-	      case 3:
-		DoWaveletTransform<otb::Wavelet::DB6> ( dir, nlevels );
-		break;
-	      case 4:
-		DoWaveletTransform<otb::Wavelet::DB8> ( dir, nlevels );
-		break;
-	      case 5:
-		DoWaveletTransform<otb::Wavelet::DB12> ( dir, nlevels );
-		break;
-	      case 6:
-		DoWaveletTransform<otb::Wavelet::DB20> ( dir, nlevels );
-		break;
-	      case 7:
-		DoWaveletTransform<otb::Wavelet::SPLINE_BIORTHOGONAL_2_4 > ( dir, nlevels );
-		break;
-	      case 8:
-		DoWaveletTransform<otb::Wavelet::SPLINE_BIORTHOGONAL_4_4> ( dir, nlevels );
-		break;
-	      case 9:
-		DoWaveletTransform<otb::Wavelet::SYMLET8> ( dir, nlevels );
-		break;        					
-	      default:
-		itkExceptionMacro( << "Invalid wavelet type: '" <<  wavelet_type << "'");
-		break;
-	      }
-
-	  }
-	// fft ttransform
-	else
-	  {
-	    bool shift = IsParameterEnabled( "mode.fft.shift");
-	    //forward fft
-	    if (dir == 0 )
-	      {
-
-		typedef otb::Image<TInputPixel>          TInputImage;
-		typedef TInputImage::Pointer TInputImagePointer;
-
-		//get input paramter as otb::Image<TInputPixel>
-		TInputImagePointer inImage = GetParameterImage<TInputImage>("in");
-		inImage->UpdateOutputInformation();
-		//typedef itk::::ForwardFFTImageFilter over otbImage< TInputPixel >
-		typedef itk::ForwardFFTImageFilter < TInputImage> FFTFilter;
-		FFTFilter::Pointer fwdFilter = FFTFilter::New();
-		fwdFilter->SetInput( inImage );
-
-		//typedef VectorImage for output of UnaryFunctorImageFilter
-		typedef otb::VectorImage<TOutputPixel>          TOutputImage;
-
-		//UnaryFunctorImageFilter for Complex to VectorImage
-		typedef itk::UnaryFunctorImageFilter<
-		  typename FFTFilter::OutputImageType,
-		  TOutputImage,
-		  FromComplexPixel<
-		    typename FFTFilter::OutputImageType::PixelType,
-		    TOutputImage::PixelType> > UnaryFunctorImageFilter;
-
-
-		//convert complex pixel to variable length vector
-		//with unaryfunctor image filter
-		UnaryFunctorImageFilter::Pointer unaryFunctorImageFilter
-		  = UnaryFunctorImageFilter::New();
-						
-		if( shift)
-		  {
-		    otbAppLogINFO( << "Applying Shift image filter" );
-		    typedef itk::FFTShiftImageFilter<
-		      typename FFTFilter::OutputImageType,
-		      typename FFTFilter::OutputImageType > FFTShiftFilterType;
-
-		    FFTShiftFilterType::Pointer
-		      fftShiftFilter = FFTShiftFilterType::New();
-
-		    fftShiftFilter->SetInput( fwdFilter->GetOutput() );
-		    fftShiftFilter->Update();
-		    unaryFunctorImageFilter->SetInput(fftShiftFilter->GetOutput() );
-		  }
-		else
-		  {
-		    unaryFunctorImageFilter->SetInput(fwdFilter->GetOutput());
-		  }
-
-		unaryFunctorImageFilter->Update();
-
-		//set output image
-		SetParameterOutputImage<TOutputImage>
-		  ( "out", unaryFunctorImageFilter->GetOutput() );
-	      }
-	    //inverse fft
-	    else
-	      {
-		typedef otb::VectorImage<TInputPixel>          TInputImage;
-		typedef TInputImage::Pointer TInputImagePointer;
-						
-		TInputImagePointer inImage = GetParameterImage("in");
-    
-		inImage->UpdateOutputInformation();
-
-		// typedef TComplexImage for InverseFFTImageFilter input
-		// This a image type of std::complex<TInputPixel>
-		typedef otb::Image<
-		  std::complex<TInputPixel>, 2 > TComplexImage;
-		//typedef TOutputImage for InverseFFTImageFilter output 
-		typedef otb::Image< TOutputPixel >  TOutputImage;
-						
-		// a unary functor to convert vectorimage to complex image
-		typedef itk::UnaryFunctorImageFilter
-		  <TInputImage,
-		   TComplexImage,
-		   ToComplexPixel
-		   <TInputImage::PixelType,
-		    TComplexImage::PixelType> > UnaryFunctorImageFilter;
-
-		UnaryFunctorImageFilter::Pointer
-		  unaryFunctorImageFilter = UnaryFunctorImageFilter::New();
-
-
-		if( shift)
-		  {
-		    typedef itk::FFTShiftImageFilter<
-		      TInputImage,
-		      TInputImage > FFTShiftFilterType;
-
-		    FFTShiftFilterType::Pointer
-		      fftShiftFilter = FFTShiftFilterType::New();
-		    fftShiftFilter->SetInput( inImage );
-
-		    fftShiftFilter->Update();
-							
-		    unaryFunctorImageFilter->SetInput(fftShiftFilter->GetOutput() );
-						
-		  }
-		else
-		  {
-		    unaryFunctorImageFilter->SetInput(inImage);
-		  }
-
-		unaryFunctorImageFilter->Update();
-
-						
-		//typedef itk::::InverseFFTImageFilter over TComplexImage
-		typedef itk::InverseFFTImageFilter
-		  < TComplexImage,
-		    TOutputImage > FFTFilter;
-		FFTFilter::Pointer invFilter = FFTFilter::New();
-		invFilter->SetInput( unaryFunctorImageFilter->GetOutput() );
-		invFilter->Update();
-						
-		//set output image
-		SetParameterOutputImage<
-		  TOutputImage >
-		  ( "out", invFilter->GetOutput() );
-	      }
-
-	  }
+      waveletImageFilter->SetInput(inImage);
+      waveletImageFilter->SetNumberOfDecompositions(nlevels);
+      waveletImageFilter->Update();
 
+      SetParameterOutputImage<TOutputImage>( outkey, waveletImageFilter->GetOutput() );
       }
+    }
+};
 
-
-
-      template<otb::Wavelet::Wavelet TWaveletOperator>
-      void DoWaveletTransform(const int dir,
-                              const unsigned int nlevels,
-			      const std::string inkey = "in",
-			      const std::string outkey = "out")
-      {
-
-	typedef otb::Image< TInputPixel >  TInputImage;
-	typedef otb::Image< TOutputPixel >  TOutputImage;
-	typedef typename TInputImage::Pointer TInputImagePointer;
-     
-	TInputImagePointer inImage = GetParameterImage<TInputImage>(inkey);
-    
-	inImage->UpdateOutputInformation();
-
-
-	if( dir == 0)
-	  {
-		
-	    typedef otb::WaveletImageFilter<
-	      TInputImage,
-	      TOutputImage,
-	      TWaveletOperator> TWaveletImageFilter;
-        
-	    typedef typename
-	      TWaveletImageFilter::Pointer
-	      TWaveletImageFilterPointer;
-	    TWaveletImageFilterPointer waveletImageFilter =
-	      TWaveletImageFilter::New();
-					
-	    waveletImageFilter->SetInput(inImage);
-	    waveletImageFilter->SetNumberOfDecompositions(nlevels);
-	    waveletImageFilter->Update();
-	    SetParameterOutputImage<TOutputImage>(outkey, waveletImageFilter->GetOutput() );
-					
-	  }
-    
-	else
-	  {
-	    typedef otb::WaveletInverseImageFilter<
-	      TInputImage,
-	      TOutputImage,
-	      TWaveletOperator > TWaveletImageFilter;
-        
-	    typedef typename
-	      TWaveletImageFilter::Pointer
-	      TWaveletImageFilterPointer;
-					
-	    TWaveletImageFilterPointer waveletImageFilter =
-	      TWaveletImageFilter::New();
-					
-	    waveletImageFilter->SetInput(inImage);
-	    waveletImageFilter->SetNumberOfDecompositions(nlevels);
-	    waveletImageFilter->Update();
-
-	    SetParameterOutputImage<TOutputImage>( outkey, waveletImageFilter->GetOutput() );
-					
-	  }
-    
-      }
-			
-    };
-  }
-}
+} // end of namespace Wrapper
+} // end of namespace otb
 
 OTB_APPLICATION_EXPORT(otb::Wrapper::DomainTransform)
-- 
GitLab