21 #ifndef yap_AmplitudeBasis_h
22 #define yap_AmplitudeBasis_h
24 #include "fwd/AmplitudeBasis.h"
36 namespace amplitude_basis {
40 using covariance_matrix = SquareMatrix<complex_basis::covariance_matrix<T>, 3>;
53 covariance_matrix<T> cov = covariance_matrix<T>()) :
58 explicit basis(
const basis<T>& other,
const SquareMatrix<T, 3>& jacobian) :
92 explicit canonical(
const std::complex<T>& c1,
const std::complex<T>& c2,
const std::complex<T>& c3,
93 covariance_matrix<T> cov = covariance_matrix<T>()) :
94 basis<T>(
Vector<std::complex<T>, 3>({c1, c2, c3}), cov)
101 covariance_matrix<T> cov = covariance_matrix<T>()) :
107 explicit canonical(
const covariance_matrix<T>& cov) :
108 basis<T>(Vector<std::complex<T>, 3>({0, 0, 0}), cov)
115 canonical(
const complex_basis::cartesian<T>& c1,
const complex_basis::cartesian<T>& c2,
const complex_basis::cartesian<T>& c3) :
116 basis<T>(Vector<std::complex<T>, 3>({c1, c2, c3}),
117 diagonalMatrix<complex_basis::covariance_matrix<T>, 3>({c1.covariance(), c2.covariance(), c3.covariance()}))
121 explicit constexpr
canonical(
const transversity<T>& t) :
122 basis<T>(t, jacobian_from_transversity)
126 explicit constexpr
canonical(
const helicity<T>& h) :
127 basis<T>(h, jacobian_from_helicity)
131 const std::complex<T> s()
const
135 const std::complex<T> p()
const
139 const std::complex<T> d()
const
144 const std::complex<T> operator[] (
size_t l)
const
154 throw exceptions::Exception(
"l must be 0, 1, or 2",
"canonical::operator[]");
161 static const SquareMatrix<T, 3> jacobian_from_transversity;
164 static const SquareMatrix<T, 3> jacobian_from_helicity;
170 template <
typename T>
179 explicit transversity(
const std::complex<T>& c1,
const std::complex<T>& c2,
const std::complex<T>& c3,
180 covariance_matrix<T> cov = covariance_matrix<T>()) :
181 basis<T>(
Vector<std::complex<T>, 3>({c1, c2, c3}), cov)
188 covariance_matrix<T> cov = covariance_matrix<T>()) :
194 explicit transversity(
const covariance_matrix<T>& cov) :
195 basis<T>(Vector<std::complex<T>, 3>({0, 0, 0}), cov)
202 transversity(
const complex_basis::cartesian<T>& c1,
const complex_basis::cartesian<T>& c2,
const complex_basis::cartesian<T>& c3) :
203 basis<T>(Vector<std::complex<T>, 3>({c1, c2, c3}),
204 diagonalMatrix<complex_basis::covariance_matrix<T>, 3>({c1.covariance(), c2.covariance(), c3.covariance()}))
208 explicit constexpr
transversity(
const canonical<T>& c) :
209 basis<T>(c, jacobian_from_canonical)
214 basis<T>(h, jacobian_from_helicity)
218 const std::complex<T> longitudinal()
const
222 const std::complex<T> parallel()
const
226 const std::complex<T> perpendicular()
const
232 static const SquareMatrix<T, 3> jacobian_from_canonical;
235 static const SquareMatrix<T, 3> jacobian_from_helicity;
242 template <
typename T>
251 explicit helicity(
const std::complex<T>& c1,
const std::complex<T>& c2,
const std::complex<T>& c3,
252 covariance_matrix<T> cov = covariance_matrix<T>()) :
253 basis<T>(
Vector<std::complex<T>, 3>({c1, c2, c3}), cov)
260 covariance_matrix<T> cov = covariance_matrix<T>()) :
266 explicit helicity(
const covariance_matrix<T>& cov) :
267 basis<T>(Vector<std::complex<T>, 3>({0, 0, 0}), cov)
274 helicity(
const complex_basis::cartesian<T>& c1,
const complex_basis::cartesian<T>& c2,
const complex_basis::cartesian<T>& c3) :
275 basis<T>(Vector<std::complex<T>, 3>({c1, c2, c3}),
276 diagonalMatrix<complex_basis::covariance_matrix<T>, 3>({c1.covariance(), c2.covariance(), c3.covariance()}))
280 explicit constexpr
helicity(
const canonical<T>& c) :
281 basis<T>(c, jacobian_from_canonical)
285 explicit constexpr
helicity(
const transversity<T>& t) :
286 basis<T>(t, jacobian_from_transversity)
290 const std::complex<T> zero()
const
294 const std::complex<T> plus()
const
298 const std::complex<T> minus()
const
304 static const SquareMatrix<T, 3> jacobian_from_canonical;
307 static const SquareMatrix<T, 3> jacobian_from_transversity;
313 template <
typename T>
314 const SquareMatrix<T, 3> canonical<T>::jacobian_from_transversity(
316 {-sqrt(1./3.), sqrt(2./3.), 0,
318 sqrt(2./3.), sqrt(1./3.), 0});
320 template <
typename T>
321 const SquareMatrix<T, 3> canonical<T>::jacobian_from_helicity(
323 {-sqrt(1./3.), sqrt(1./3.), sqrt(1./3.),
324 0, sqrt(0.5), -sqrt(0.5) ,
325 sqrt(2./3.), sqrt(1./6.), sqrt(1./6.)});
327 template <
typename T>
328 const SquareMatrix<T, 3> transversity<T>::jacobian_from_canonical(
330 {-sqrt(1. / 3.), 0, sqrt(2. / 3.),
331 sqrt(2. / 3.), 0, sqrt(1. / 3.),
334 template <
typename T>
335 const SquareMatrix<T, 3> transversity<T>::jacobian_from_helicity(
338 0, sqrt(0.5), sqrt(0.5),
339 0, sqrt(0.5), -sqrt(0.5)});
341 template <
typename T>
342 const SquareMatrix<T, 3> helicity<T>::jacobian_from_canonical(
344 {-sqrt(1./3.), 0, sqrt(2./3.),
345 sqrt(1./3.), sqrt(0.5), sqrt(1./6.),
346 sqrt(1./3.), -sqrt(0.5), sqrt(1./6.)});
348 template <
typename T>
349 const SquareMatrix<T, 3> helicity<T>::jacobian_from_transversity(
352 0, sqrt(0.5), sqrt(0.5),
353 0, sqrt(0.5), -sqrt(0.5)});
Definition: AmplitudeBasis.h:46
Definition: AmplitudeBasis.h:84
const Matrix< T, C, R > transpose(const Matrix< T, R, C > &M)
transpose a matrix
Definition: Matrix.h:148
helicity(const std::complex< T > &c1, const std::complex< T > &c2, const std::complex< T > &c3, covariance_matrix< T > cov=covariance_matrix< T >())
Definition: AmplitudeBasis.h:251
covariance_matrix< T > Covariance_
covariance matrix
Definition: AmplitudeBasis.h:76
const Vector< std::complex< T >, 3 > & coordinates() const
Definition: AmplitudeBasis.h:65
transversity(const std::complex< T > &c1, const std::complex< T > &c2, const std::complex< T > &c3, covariance_matrix< T > cov=covariance_matrix< T >())
Definition: AmplitudeBasis.h:179
const SquareMatrix< T, N > diagonalMatrix(std::array< T, N > d)
diagonal matrix
Definition: Matrix.h:114
Definition: AmplitudeBasis.h:243
Definition: AmplitudeBasis.h:171
const covariance_matrix< T > & covariance() const
Definition: AmplitudeBasis.h:69
canonical(const std::complex< T > &c1, const std::complex< T > &c2, const std::complex< T > &c3, covariance_matrix< T > cov=covariance_matrix< T >())
Definition: AmplitudeBasis.h:92
Vector< std::complex< T >, 3 > Amplitudes_
vector of amplitudes
Definition: AmplitudeBasis.h:74
basis(Vector< std::complex< T >, 3 > c, covariance_matrix< T > cov=covariance_matrix< T >())
Definition: AmplitudeBasis.h:52
N-dimensional column vector.
Definition: Vector.h:168