00001 #ifndef _INC_SU2_CMP_H
00002 #define _INC_SU2_CMP_H
00003
00004 #include <complex>
00005
00006 #include "matrix.h"
00007 #include "su2.h"
00008
00009 typedef std::complex<double> cdouble;
00010
00012
00014 class su2_equiv
00015 {
00016 public:
00018 double epsilon, gamma;
00019
00022 su2_equiv(double e) : epsilon(e*e), gamma((2.0-e)*(2.0-e)) {}
00023
00025 bool operator()(const Matrix<cdouble>& A, const Matrix<cdouble>& B) const
00026 {
00027 double a[] ={real(A(0,0)),-1.0*imag(A(0,1)),real(A(1,0)),imag(A(1,1))};
00028 double b[] ={real(B(0,0)),-1.0*imag(B(0,1)),real(B(1,0)),imag(B(1,1))};
00029
00030 a[0] -= b[0];
00031 a[1] -= b[1];
00032 a[2] -= b[2];
00033 a[3] -= b[3];
00034
00035 double dist = a[0]*a[0] + a[1]*a[1] + a[2]*a[2] + a[3]*a[3];
00036 if (dist < epsilon || dist > gamma)
00037 return true;
00038 else
00039 return false;
00040
00041 }
00042 };
00043
00044 #endif