Home
Install
Use
Develop
Support
News
Credits
hosted by
|
15#include "Quaternion.h"
25 Basis<double>& basis();
28 Jones<double> matrix ( unsigned i);
36 return Jones<T> (q.s0+q.s1, q.s2-ci(q.s3),
37 q.s2+ci(q.s3), q.s0-q.s1);
44 return Jones<T> (q.s0+ci(q.s1), q.s3+ci(q.s2),
45 -q.s3+ci(q.s2), q.s0-ci(q.s1));
52 return Jones<T> (std::complex<T>(q.s0+q.s1,0.0), std::complex<T>(q.s2,-q.s3),
53 std::complex<T>(q.s2,q.s3), std::complex<T>(q.s0-q.s1,0.0));
60 return Jones<T> (q.s0+ci(q.s1), q.s3+ci(q.s2),
61 -q.s3+ci(q.s2), q.s0-ci(q.s1));
66const Jones<T> convert ( const Stokes< std::complex<T> >& stokes)
71 q. set_vector (Pauli::basis().get_out(stokes.get_vector()));
73 std::complex<T> half (0.5, 0.0);
74 return convert (half*q);
79const Jones<T> convert ( const Stokes<T>& stokes)
82 Pauli::basis().get_out(stokes.get_vector()));
83 return convert (T(0.5)*q);
88const Jones<T> convert ( const std::vector<T>& c)
91 throw std::runtime_error ( "Jones<T> convert (std::vector<T>) vector.size() != 4");
93 return Jones<T> (c[0], std::complex<T> (c[2], -c[3]),
94 std::complex<T> (c[2], c[3]), c[1]);
102 (stokes.get_scalar(), Pauli::basis().get_out(stokes.get_vector()));
117 ( T(0.5) * (j.j00 + j.j11),
118 T(0.5) * (j.j00 - j.j11),
119 T(0.5) * (j.j01 + j.j10),
120 T(0.5) * ci (j.j01 - j.j10) );
128 ( T(0.5) * (j.j00 + j.j11),
129 T(-0.5) * ci (j.j00 - j.j11),
130 T(-0.5) * ci (j.j01 + j.j10),
131 T(0.5) * (j.j01 - j.j10) );
136const Stokes<T> coherency ( const Jones<T>& j)
139 return real_coherency (h);
144const Stokes< std::complex<T> > complex_coherency ( const Jones<T>& j)
147 return coherency (h);
152const Stokes<T> real_coherency ( const Quaternion<std::complex<T>,Hermitian>& q)
156 T nr = norm(realpart);
157 T ni = norm(imaginary);
158 if (ni > 1e8*std::numeric_limits<T>::epsilon() && ni*1e5 > nr)
160 const char* msg = "Stokes<T> coherency (Quaternion<complex<T>,Hermitian>) "
161 "non-zero imaginary component";
164 "\n norm(imag(q))=" << ni << " norm=" << nr << std::endl;
166 throw std::runtime_error (msg);
169 return coherency (realpart);
177 T(2.0) * Pauli::basis().get_in(q. get_vector()) );
181template< typename T, typename U>
182const Stokes<T> transform ( const Stokes<T>& input, const Jones<U>& jones)
184 return coherency (jones * convert(input) * herm(jones));
188template< typename T, typename U>
189const Stokes< std::complex<T> >
190transform ( const Stokes< std::complex<T> >& input, const Jones<U>& jones)
192 return complex_coherency (jones * convert(input) * herm(jones));
196template< typename T, typename U>
199 Stokes< std::complex<T> > s = M * complex_coherency(rho);
213 h = sqrt( real( convert( j*herm(j) ) ) );
216 j = inv(convert(h)) * j;
219 u = real ( unitary (j) );
224template< typename T, typename U, QBasis B>
227 return j * convert(q);
231template< typename T, typename U, QBasis B>
234 return convert(q) * j;
238template< typename T, typename U, QBasis A, QBasis B>
241 return convert(q) * convert(u);
250 for ( unsigned row=0; row < 4; row++) {
253 result[row] = coherency(herm(J) * convert(basis) * J);
265 for ( unsigned row=0; row < 4; row++) {
269 result[row] = coherency(herm(Jgrad) * rho * J + herm(J) * rho * Jgrad);
Vector< 3, T > get_vector() const
void set_vector(const Vector< 3, U > &v)
Generated using doxygen 1.14.0
|