From 509f0152a79f7f9574bfa8e27056dc6a696cc6d8 Mon Sep 17 00:00:00 2001
From: Guillaume Borrut <guillaume.borrut@c-s.fr>
Date: Mon, 18 Aug 2008 16:38:17 +0000
Subject: [PATCH] SARPolarimetrie : Passage de DTOR en variable locale

---
 ...MultiChannelsPolarimetricSynthesisFilter.h |  5 +-
 ...ltiChannelsPolarimetricSynthesisFilter.txx | 21 +++++----
 .../otbPolarimetricSynthesisFilter.h          | 17 ++++---
 .../otbPolarimetricSynthesisFilter.txx        | 47 +++++++++++++++----
 4 files changed, 61 insertions(+), 29 deletions(-)

diff --git a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h
index 7eefc8d05a..9b8222298c 100755
--- a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h
+++ b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.h
@@ -182,10 +182,7 @@ private :
   ComplexArrayType m_Ei;
   /** Champs Electromagnetic Reflechi */
   ComplexArrayType m_Er;  
-  
-  /** Conversion coefficient Degre To Radian */
-  static const double m_DTOR=M_PI/180;
-  
+   
   /** Architecture Type */
   int m_ArchitectureType;
 
diff --git a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx
index 15bad8b813..fe4de50f90 100755
--- a/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx
+++ b/Code/SARPolarimetry/otbMultiChannelsPolarimetricSynthesisFilter.txx
@@ -259,17 +259,20 @@ MultiChannelsPolarimetricSynthesisFilter<TInputImage,TOutputImage,TFunction>
   ComplexType Ei0,Ei1,Er0,Er1;
   ComplexArrayType AEi, AEr;
   
-  Ei0.real() = vcl_cos(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI);
-  Ei0.imag() = -vcl_sin(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI);
+  /** Conversion coefficient Degre To Radian */
+  double DTOR=M_PI/180;  
+  
+  Ei0.real() = vcl_cos(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI);
+  Ei0.imag() = -vcl_sin(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI);
 
-  Ei1.real() = vcl_sin(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI);
-  Ei1.imag() = vcl_cos(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI);
+  Ei1.real() = vcl_sin(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI);
+  Ei1.imag() = vcl_cos(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI);
 
-  Er0.real() = vcl_cos(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR);
-  Er0.imag() = -vcl_sin(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR);
+  Er0.real() = vcl_cos(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR);
+  Er0.imag() = -vcl_sin(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR);
 
-  Er1.real() = vcl_sin(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR);
-  Er1.imag() = vcl_cos(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR);
+  Er1.real() = vcl_sin(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR);
+  Er1.imag() = vcl_cos(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR);
   
   AEi[0]=Ei0;
   AEi[1]=Ei1;
@@ -294,7 +297,7 @@ MultiChannelsPolarimetricSynthesisFilter<TInputImage,TOutputImage,TFunction>
   std::cout<<"Er1 im: "<<m_Er[1].imag()<<std::endl;
   std::cout<<"Er1 re: "<<m_Er[1].real()<<std::endl;
     
-  std::cout<<"DTOR: "<<m_DTOR<<std::endl;       
+  std::cout<<"DTOR: "<<DTOR<<std::endl;       
 }
 
 /**
diff --git a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h
index f0667a927a..728506bce1 100755
--- a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h
+++ b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.h
@@ -99,7 +99,11 @@ public:
        this->GetFunctor().SetEr(er);
        this->Modified();
   }   
-
+  
+  void ForceCoPolar();  
+  
+  void ForceCrossPolar();
+  
 protected:
   PolarimetricSynthesisFilter();
   virtual ~PolarimetricSynthesisFilter() {};
@@ -115,7 +119,7 @@ protected:
 
   /** Verify and force the inputs, if only  2 or 3 channels are present */
   void VerifyAndForceInputs();
-
+  
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
@@ -131,15 +135,16 @@ private:
   double m_PsiR;
   /** Tau Reflected */
   double m_TauR;
+  
+  /** Emission mode */
+  bool m_EmissionH;
+  bool m_EmissionV;  
 
   /** Champs Electromagnetic Incident */
   ComplexArrayType m_Ei;
   /** Champs Electromagnetic Reflechi */
   ComplexArrayType m_Er;  
-  
-  /** Conversion coefficient Degre To Radian */
-  static const double m_DTOR=M_PI/180;
-  
+   
 };
 
 } // end namespace otb
diff --git a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx
index 8da4092d36..2033434957 100755
--- a/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx
+++ b/Code/SARPolarimetry/otbPolarimetricSynthesisFilter.txx
@@ -91,6 +91,30 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag
   Superclass::PrintSelf(os,indent);
 }
 
+/**
+ * Force Copolar mode
+ */
+template <class TInputImageHH,class TInputImageHV,class TInputImageVH,class TInputImageVV,class TOutputImage,class TFunction  >
+void
+PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImageVV,TOutputImage,TFunction>
+::ForceCoPolar()
+{
+        this->SetPsiR(m_PsiI);
+        this->SetTauR(m_TauI);        
+}
+
+/**
+ * Force Crosspolar mode
+ */
+template <class TInputImageHH,class TInputImageHV,class TInputImageVH,class TInputImageVV,class TOutputImage,class TFunction  >
+void
+PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImageVV,TOutputImage,TFunction>
+::ForceCrossPolar()
+{
+        this->SetPsiR(m_PsiI+90);
+        this->SetTauR(-m_TauI);        
+}
+
 /**
  * Computation of the electromagnetic fields Ei Er
  */
@@ -102,17 +126,20 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag
   ComplexType Ei0,Ei1,Er0,Er1;
   ComplexArrayType AEi, AEr;
   
-  Ei0.real() = vcl_cos(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI);
-  Ei0.imag() = -vcl_sin(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI);
+  /** Conversion coefficient Degre To Radian */
+  double DTOR=M_PI/180;  
+  
+  Ei0.real() = vcl_cos(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI);
+  Ei0.imag() = -vcl_sin(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI);
 
-  Ei1.real() = vcl_sin(m_DTOR*m_PsiI)*vcl_cos(m_DTOR*m_TauI);
-  Ei1.imag() = vcl_cos(m_DTOR*m_PsiI)*vcl_sin(m_DTOR*m_TauI);
+  Ei1.real() = vcl_sin(DTOR*m_PsiI)*vcl_cos(DTOR*m_TauI);
+  Ei1.imag() = vcl_cos(DTOR*m_PsiI)*vcl_sin(DTOR*m_TauI);
 
-  Er0.real() = vcl_cos(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR);
-  Er0.imag() = -vcl_sin(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR);
+  Er0.real() = vcl_cos(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR);
+  Er0.imag() = -vcl_sin(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR);
 
-  Er1.real() = vcl_sin(m_DTOR*m_PsiR)*vcl_cos(m_DTOR*m_TauR);
-  Er1.imag() = vcl_cos(m_DTOR*m_PsiR)*vcl_sin(m_DTOR*m_TauR);
+  Er1.real() = vcl_sin(DTOR*m_PsiR)*vcl_cos(DTOR*m_TauR);
+  Er1.imag() = vcl_cos(DTOR*m_PsiR)*vcl_sin(DTOR*m_TauR);
   
   AEi[0]=Ei0;
   AEi[1]=Ei1;
@@ -137,7 +164,7 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag
   std::cout<<"Er1 im: "<<m_Er[1].imag()<<std::endl;
   std::cout<<"Er1 re: "<<m_Er[1].real()<<std::endl;
     
-  std::cout<<"DTOR: "<<m_DTOR<<std::endl;       
+  std::cout<<"DTOR: "<<DTOR<<std::endl;       
 }
 
 /**
@@ -216,7 +243,7 @@ PolarimetricSynthesisFilter<TInputImageHH,TInputImageHV,TInputImageVH,TInputImag
   if ( ( this->GetInput(0)!=0 && this->GetInput(1)!=0 ) &&
        ( this->GetInput(2)==0 && this->GetInput(3)==0 ) )
     {
-        // Forcing HH and HV to zero 
+        // Forcing VH and VV to zero 
         typename VVInputImageType::Pointer inputVV = TInputImageVV::New();
         typename VHInputImageType::Pointer inputVH = TInputImageVH::New();        
         typename VHInputImageType::IndexType start;
-- 
GitLab