a Code for the Combination of Indirect and Direct Constraints on High Energy Physics Models Logo
gslpp::vector< complex > Class Template Reference

A class for constructing and defining operations on complex vectors. More...

#include <gslpp_vector_complex.h>

Detailed Description

template<>
class gslpp::vector< complex >

A class for constructing and defining operations on complex vectors.

Author
HEPfit Collaboration

This class defines some common operations on complex vectors using the GSL.

Definition at line 33 of file gslpp_vector_complex.h.

Public Member Functions

gsl_vector_complex & as_gsl_type ()
 
const gsl_vector_complex & as_gsl_type () const
 
gsl_vector_complex * as_gsl_type_ptr () const
 
void assign (const size_t &i, const complex &z)
 
void assign (const size_t &i, const double &a)
 
vector< complexconjugate () const
 
vector< double > imag () const
 
double mod () const
 
bool operator!= (const vector< complex > &a) const
 
const complex operator() (const size_t &i) const
 
vector< complexoperator* (const complex &z) const
 
vector< complexoperator* (const double &a) const
 
complex operator* (const vector< complex > &v) const
 
vector< complex > & operator*= (const complex &z)
 
vector< complex > & operator*= (const double &a)
 
vector< complexoperator+ (const complex &z)
 
vector< complexoperator+ (const double &a)
 
vector< complexoperator+ (const vector< complex > &v) const
 
vector< complex > & operator+= (const complex &z)
 
vector< complex > & operator+= (const double &a)
 
vector< complex > & operator+= (const vector< complex > &v)
 
vector< complexoperator- () const
 
vector< complexoperator- (const complex &z)
 
vector< complexoperator- (const double &a)
 
vector< complexoperator- (const vector< complex > &v) const
 
vector< complex > & operator-= (const complex &z)
 
vector< complex > & operator-= (const double &a)
 
vector< complex > & operator-= (const vector< complex > &v)
 
vector< complexoperator/ (const complex &z) const
 
vector< complexoperator/ (const double &a) const
 
vector< complex > & operator/= (const complex &z)
 
vector< complex > & operator/= (const double &a)
 
vector< complex > & operator= (const vector< complex > &v)
 
vector< complex > & operator= (double a)
 
bool operator== (const vector< complex > &a) const
 
vector< double > real () const
 
void reset ()
 
size_t size () const
 
 vector (const gsl_vector_complex &v)
 
 vector (const gsl_vector_complex *v)
 
 vector (const size_t &size, const complex &z)
 
 vector (const size_t &size, const double &a)
 
 vector (const vector< complex > &v)
 
 vector (const vector< double > &v)
 
 ~vector ()
 

Private Attributes

gsl_vector_complex * _vector
 

Friends

std::ostream & operator<< (std::ostream &output, const vector< complex > &v)
 
Operations on vector<complex>
vector< complexoperator+ (const complex &z, vector< complex > v)
 
vector< complexoperator- (const complex &z, vector< complex > v)
 
vector< complexoperator* (const complex &z, vector< complex > v)
 
vector< complexoperator+ (const double &a, vector< complex > v)
 
vector< complexoperator- (const double &a, vector< complex > v)
 
vector< complexoperator* (const double &a, vector< complex > v)
 

Constructor & Destructor Documentation

◆ vector() [1/6]

gslpp::vector< complex >::vector ( const size_t &  size,
const complex z 
)

Constructor

Definition at line 23 of file gslpp_vector_complex.cpp.

24  {
25  _vector = gsl_vector_complex_alloc(size);
26  gsl_vector_complex_set_all(_vector, z.as_gsl_type());
27  }

◆ vector() [2/6]

gslpp::vector< complex >::vector ( const size_t &  size,
const double &  a 
)

Definition at line 29 of file gslpp_vector_complex.cpp.

30  {
31  complex z(a);
32  _vector = gsl_vector_complex_alloc(size);
33  gsl_vector_complex_set_all(_vector, z.as_gsl_type());
34  }

◆ vector() [3/6]

gslpp::vector< complex >::vector ( const vector< complex > &  v)

Copy constructor

Copy constructor

Definition at line 37 of file gslpp_vector_complex.cpp.

38  {
39  _vector = gsl_vector_complex_alloc(v.size());
40  gsl_vector_complex_memcpy(_vector, v.as_gsl_type_ptr());
41  }

◆ vector() [4/6]

gslpp::vector< complex >::vector ( const vector< double > &  v)

Definition at line 43 of file gslpp_vector_complex.cpp.

44  {
45  size_t i, n;
46  n = v.size();
47  _vector = gsl_vector_complex_alloc(n);
48  for (i = 0; i < n; i++)
49  gsl_vector_complex_set(_vector, i, v(i) + 0. * complex::i());
50  }

◆ vector() [5/6]

gslpp::vector< complex >::vector ( const gsl_vector_complex &  v)

Definition at line 52 of file gslpp_vector_complex.cpp.

53  {
54  _vector = gsl_vector_complex_alloc(v.size);
55  gsl_vector_complex_memcpy(_vector, &v);
56  }

◆ vector() [6/6]

gslpp::vector< complex >::vector ( const gsl_vector_complex *  v)

Definition at line 58 of file gslpp_vector_complex.cpp.

59  {
60  _vector = gsl_vector_complex_alloc(v->size);
61  gsl_vector_complex_memcpy(_vector, v);
62  }

◆ ~vector()

Destructor

Definition at line 65 of file gslpp_vector_complex.cpp.

66  {
67  gsl_vector_complex_free(_vector);
68  }

Member Function Documentation

◆ as_gsl_type() [1/2]

gsl_vector_complex & gslpp::vector< complex >::as_gsl_type ( )

Definition at line 160 of file gslpp_vector_complex.cpp.

161  {
162  return const_cast<gsl_vector_complex&> (*_vector);
163  }

◆ as_gsl_type() [2/2]

const gsl_vector_complex & gslpp::vector< complex >::as_gsl_type ( ) const

Definition at line 165 of file gslpp_vector_complex.cpp.

166  {
167  return const_cast<gsl_vector_complex&> (*_vector);
168  }

◆ as_gsl_type_ptr()

gsl_vector_complex * gslpp::vector< complex >::as_gsl_type_ptr ( ) const

Conversion

Conversion

Definition at line 155 of file gslpp_vector_complex.cpp.

156  {
157  return _vector;
158  }

◆ assign() [1/2]

void gslpp::vector< complex >::assign ( const size_t &  i,
const complex z 
)

Definition at line 104 of file gslpp_vector_complex.cpp.

105  {
106  gsl_complex *x = gsl_vector_complex_ptr(_vector, i);
107  *x = z.as_gsl_type();
108  }

◆ assign() [2/2]

void gslpp::vector< complex >::assign ( const size_t &  i,
const double &  a 
)

Definition at line 110 of file gslpp_vector_complex.cpp.

111  {
112  gsl_complex *x = gsl_vector_complex_ptr(_vector, i);
113  *x = complex(a).as_gsl_type();
114  }

◆ conjugate()

vector< complex > gslpp::vector< complex >::conjugate ( ) const

Get complex conjugate vector

Get conjugate vector

Definition at line 129 of file gslpp_vector_complex.cpp.

130  {
131  vector<complex> v1(*this);
132  for (unsigned int i = 0; i < v1.size(); i++)
133  v1.assign(i, v1(i).conjugate());
134 
135  return v1;
136  }

◆ imag()

vector< double > gslpp::vector< complex >::imag ( ) const

Get vector of imaginary parts

Definition at line 147 of file gslpp_vector_complex.cpp.

148  {
149  gsl_vector_view r = gsl_vector_complex_imag(_vector);
150  vector<double> re((&r.vector));
151  return re;
152  }

◆ mod()

double gslpp::vector< complex >::mod ( ) const

Get Euclidean norm

Definition at line 123 of file gslpp_vector_complex.cpp.

124  {
125  return gsl_blas_dznrm2(_vector);
126  }

◆ operator!=()

bool gslpp::vector< complex >::operator!= ( const vector< complex > &  a) const
inline

Definition at line 121 of file gslpp_vector_complex.h.

122  {
123  return(!(*this == a));
124  }

◆ operator()()

const complex gslpp::vector< complex >::operator() ( const size_t &  i) const

Get i-th element

Definition at line 71 of file gslpp_vector_complex.cpp.

72  {
73  const gsl_complex *x = gsl_vector_complex_const_ptr(_vector, i);
74  return complex(x);
75  }

◆ operator*() [1/3]

vector< complex > gslpp::vector< complex >::operator* ( const complex z) const

Multiplication operator

Multiplication operator (complex)

Definition at line 279 of file gslpp_vector_complex.cpp.

280  {
281  vector<complex> v1(_vector);
282  gsl_blas_zscal(z.as_gsl_type(), v1.as_gsl_type_ptr());
283  return v1;
284  }

◆ operator*() [2/3]

vector< complex > gslpp::vector< complex >::operator* ( const double &  a) const

Multiplication operator

Multiplication operator (double)

Definition at line 337 of file gslpp_vector_complex.cpp.

338  {
339  complex z(a);
340  return *this * z;
341  }

◆ operator*() [3/3]

complex gslpp::vector< complex >::operator* ( const vector< complex > &  v) const

Scalar product operator

Scalar product operator (vector)

Definition at line 205 of file gslpp_vector_complex.cpp.

206  {
207  complex z1(0., 0., false);
208  vector<complex> v1(_vector);
209  if (gsl_blas_zdotu(v1.as_gsl_type_ptr(), v.as_gsl_type_ptr(), z1.as_gsl_type_ptr())) {
210  std::cout << "\n Error in vector<complex> *" << std::endl;
211  exit(EXIT_FAILURE);
212  }
213  return z1;
214  }

◆ operator*=() [1/2]

vector< complex > & gslpp::vector< complex >::operator*= ( const complex z)

Multiplication assignment

Multiplication assignment (complex)

Definition at line 309 of file gslpp_vector_complex.cpp.

310  {
311  *this = *this * z;
312  return *this;
313  }

◆ operator*=() [2/2]

vector< complex > & gslpp::vector< complex >::operator*= ( const double &  a)

Multiplication assignment

Multiplication assignment (double)

Definition at line 365 of file gslpp_vector_complex.cpp.

366  {
367  *this = *this * a;
368  return *this;
369  }

◆ operator+() [1/3]

vector< complex > gslpp::vector< complex >::operator+ ( const complex z)

Addition operator

Addition operator (complex)

Definition at line 245 of file gslpp_vector_complex.cpp.

246  {
247  vector<complex> v1(_vector);
248  gsl_complex z1;
249  gsl_vector_complex *v2;
250  GSL_SET_COMPLEX(&z1, 1., 0.);
251  v2 = gsl_vector_complex_alloc(v1.size());
252  gsl_vector_complex_set_all(v2, z1);
253  if (gsl_blas_zaxpy(z, v2, v1.as_gsl_type_ptr())) {
254  std::cout << "\n Error in vector<complex> + (double)" << std::endl;
255  exit(EXIT_FAILURE);
256  }
257  gsl_vector_complex_free(v2);
258  return v1;
259  }

◆ operator+() [2/3]

vector< complex > gslpp::vector< complex >::operator+ ( const double &  a)

Addition operator

Addition operator (double)

Definition at line 323 of file gslpp_vector_complex.cpp.

324  {
325  complex z(a);
326  return *this +z;
327  }

◆ operator+() [3/3]

vector< complex > gslpp::vector< complex >::operator+ ( const vector< complex > &  v) const

Addition operator

Addition operator (vector)

Definition at line 179 of file gslpp_vector_complex.cpp.

180  {
181  vector<complex> v1(_vector);
182  gsl_complex z1;
183  GSL_SET_COMPLEX(&z1, 1., 0.);
184  if (gsl_blas_zaxpy(z1, v.as_gsl_type_ptr(), v1.as_gsl_type_ptr())) {
185  std::cout << "\n Error in vector<complex> +" << std::endl;
186  exit(EXIT_FAILURE);
187  }
188  return v1;
189  }

◆ operator+=() [1/3]

vector< complex > & gslpp::vector< complex >::operator+= ( const complex z)

Addition assignment

Addition assignment (complex)

Definition at line 295 of file gslpp_vector_complex.cpp.

296  {
297  *this = *this +z;
298  return *this;
299  }

◆ operator+=() [2/3]

vector< complex > & gslpp::vector< complex >::operator+= ( const double &  a)

Addition assignment

Addition assignment (double)

Definition at line 351 of file gslpp_vector_complex.cpp.

352  {
353  *this = *this +a;
354  return *this;
355  }

◆ operator+=() [3/3]

vector< complex > & gslpp::vector< complex >::operator+= ( const vector< complex > &  v)

Vector product operator Addition assignment

Vector product operator (vector) Addition assignment (vector)

Definition at line 223 of file gslpp_vector_complex.cpp.

224  {
225  /* gsl_complex z1;
226  GSL_SET_COMPLEX(&z1,1.,0.);
227  if (gsl_blas_zaxpy(z1, v.as_gsl_type_ptr(), _vector))
228  {
229  std::cout << "\n Error in vector<complex> +=" << std::endl;
230  exit(EXIT_FAILURE);
231  }
232  return *this;*/
233  *this = *this +v;
234  return *this;
235  }

◆ operator-() [1/4]

vector< complex > gslpp::vector< complex >::operator- ( ) const

Unary minus

Definition at line 171 of file gslpp_vector_complex.cpp.

172  {
173  vector<complex> v1(_vector);
174  gsl_blas_zdscal(-1., v1.as_gsl_type_ptr());
175  return v1;
176  }

◆ operator-() [2/4]

vector< complex > gslpp::vector< complex >::operator- ( const complex z)

Subtraction assignment

Subtraction assignment (complex)

Definition at line 262 of file gslpp_vector_complex.cpp.

263  {
264  vector<complex> v1(_vector);
265  gsl_complex z1;
266  gsl_vector_complex *v2;
267  GSL_SET_COMPLEX(&z1, -1., 0.);
268  v2 = gsl_vector_complex_alloc(v1.size());
269  gsl_vector_complex_set_all(v2, z1);
270  if (gsl_blas_zaxpy(z, v2, v1.as_gsl_type_ptr())) {
271  std::cout << "\n Error in vector<complex> - (double)" << std::endl;
272  exit(EXIT_FAILURE);
273  }
274  gsl_vector_complex_free(v2);
275  return v1;
276  }

◆ operator-() [3/4]

vector< complex > gslpp::vector< complex >::operator- ( const double &  a)

Subtraction assignment

Subtraction assignment (double)

Definition at line 330 of file gslpp_vector_complex.cpp.

331  {
332  complex z(a);
333  return *this -z;
334  }

◆ operator-() [4/4]

vector< complex > gslpp::vector< complex >::operator- ( const vector< complex > &  v) const

Subtraction operator

Subtraction operator (vector)

Definition at line 192 of file gslpp_vector_complex.cpp.

193  {
194  vector<complex> v1(_vector);
195  gsl_complex z1;
196  GSL_SET_COMPLEX(&z1, -1., 0.);
197  if (gsl_blas_zaxpy(z1, v.as_gsl_type_ptr(), v1.as_gsl_type_ptr())) {
198  std::cout << "\n Error in vector<complex> -" << std::endl;
199  exit(EXIT_FAILURE);
200  }
201  return v1;
202  }

◆ operator-=() [1/3]

vector< complex > & gslpp::vector< complex >::operator-= ( const complex z)

Subtraction assignment

Subtraction assignment (complex)

Definition at line 302 of file gslpp_vector_complex.cpp.

303  {
304  *this = *this -z;
305  return *this;
306  }

◆ operator-=() [2/3]

vector< complex > & gslpp::vector< complex >::operator-= ( const double &  a)

Subtraction assignment

Subtraction assignment (double)

Definition at line 358 of file gslpp_vector_complex.cpp.

359  {
360  *this = *this -a;
361  return *this;
362  }

◆ operator-=() [3/3]

vector< complex > & gslpp::vector< complex >::operator-= ( const vector< complex > &  v)

Subtraction assignment

Subtraction assignment (vector)

Definition at line 238 of file gslpp_vector_complex.cpp.

239  {
240  *this = *this -v;
241  return *this;
242  }

◆ operator/() [1/2]

vector< complex > gslpp::vector< complex >::operator/ ( const complex z) const

Division operator

Division operator (complex)

Definition at line 287 of file gslpp_vector_complex.cpp.

288  {
289  vector<complex> v1(_vector);
290  gsl_blas_zscal(z.inverse().as_gsl_type(), v1.as_gsl_type_ptr());
291  return v1;
292  }

◆ operator/() [2/2]

vector< complex > gslpp::vector< complex >::operator/ ( const double &  a) const

Division operator

Division operator (double)

Definition at line 344 of file gslpp_vector_complex.cpp.

345  {
346  complex z(a);
347  return *this / z;
348  }

◆ operator/=() [1/2]

vector< complex > & gslpp::vector< complex >::operator/= ( const complex z)

Division assignment

Division assignment (complex)

Definition at line 316 of file gslpp_vector_complex.cpp.

317  {
318  *this = *this / z;
319  return *this;
320  }

◆ operator/=() [2/2]

vector< complex > & gslpp::vector< complex >::operator/= ( const double &  a)

Division assignment

Division assignment (double)

Definition at line 372 of file gslpp_vector_complex.cpp.

373  {
374  *this = *this / a;
375  return *this;
376  }

◆ operator=() [1/2]

vector< complex > & gslpp::vector< complex >::operator= ( const vector< complex > &  v)

Set i-th element Assign

Definition at line 85 of file gslpp_vector_complex.cpp.

86  {
87  gsl_vector_complex_memcpy(_vector, v.as_gsl_type_ptr());
88  return *this;
89  }

◆ operator=() [2/2]

vector< complex > & gslpp::vector< complex >::operator= ( double  a)

Definition at line 91 of file gslpp_vector_complex.cpp.

92  {
93  complex z(a);
94  gsl_vector_complex_set_all(_vector, z.as_gsl_type());
95  return *this;
96  }

◆ operator==()

bool gslpp::vector< complex >::operator== ( const vector< complex > &  a) const

Comparison == (vector)

Definition at line 378 of file gslpp_vector_complex.cpp.

379  {
380  if (a.size() != size())
381  {
382  std::cout << "\n Error in vector<complex>::operator== (vector): cannot compare vectors of different size" << std::endl;
383  exit(EXIT_FAILURE);
384  }
385  for (size_t i = 0; i < size(); i++)
386  if (a(i) != (*this)(i)) return (false);
387  return (true);
388  }

◆ real()

vector< double > gslpp::vector< complex >::real ( ) const

Get vector of real parts

Definition at line 139 of file gslpp_vector_complex.cpp.

140  {
141  gsl_vector_view r = gsl_vector_complex_real(_vector);
142  vector<double> re((&r.vector));
143  return re;
144  }

◆ reset()

void gslpp::vector< complex >::reset ( )

Assign element

Definition at line 99 of file gslpp_vector_complex.cpp.

100  {
101  gsl_vector_complex_set_zero(_vector);
102  }

◆ size()

size_t gslpp::vector< complex >::size ( ) const

Get vector size

Definition at line 117 of file gslpp_vector_complex.cpp.

118  {
119  return _vector->size;
120  }

Friends And Related Function Documentation

◆ operator* [1/2]

vector<complex> operator* ( const complex z,
vector< complex v 
)
friend

Multiply a complex number by complex vector

Parameters
zComplex number
vComplex vector
Returns
\( z*v \)

Definition at line 411 of file gslpp_vector_complex.cpp.

412  {
413  return v*z;
414  }

◆ operator* [2/2]

vector<complex> operator* ( const double &  a,
vector< complex v 
)
friend

Multiply a real number by a complex vector

Parameters
aReal number
vComplex vector
Returns
\( z*v \)

Definition at line 426 of file gslpp_vector_complex.cpp.

427  {
428  return v*a;
429  }

◆ operator+ [1/2]

vector<complex> operator+ ( const complex z,
vector< complex v 
)
friend

Add a complex number to a complex vector

Parameters
zComplex number
vComplex vector
Returns
\( z + v \)

Definition at line 401 of file gslpp_vector_complex.cpp.

402  {
403  return v + z;
404  }

◆ operator+ [2/2]

vector<complex> operator+ ( const double &  a,
vector< complex v 
)
friend

Add a real number to a complex vector

Parameters
aReal number
vComplex vector
Returns
\( a + v \)

Definition at line 416 of file gslpp_vector_complex.cpp.

417  {
418  return v + a;
419  }

◆ operator- [1/2]

vector<complex> operator- ( const complex z,
vector< complex v 
)
friend

Subtract a complex number from a complex vector

Parameters
zComplex number
vComplex vector
Returns
\( z - v \)

Definition at line 406 of file gslpp_vector_complex.cpp.

407  {
408  return -v + z;
409  }

◆ operator- [2/2]

vector<complex> operator- ( const double &  a,
vector< complex v 
)
friend

Subtract a complex vector from a real number

Parameters
aReal number
vComplex vector
Returns
\( a - v \)

Definition at line 421 of file gslpp_vector_complex.cpp.

422  {
423  return -v + a;
424  }

◆ operator<<

std::ostream& operator<< ( std::ostream &  output,
const vector< complex > &  v 
)
friend

friend functions

Definition at line 391 of file gslpp_vector_complex.cpp.

392  {
393  size_t i;
394  output << "(";
395  for (i = 0; i < v.size() - 1; i++)
396  output << v(i) << ", ";
397  output << v(i) << ")";
398  return output;
399  }

Member Data Documentation

◆ _vector

gsl_vector_complex* gslpp::vector< complex >::_vector
private

Definition at line 35 of file gslpp_vector_complex.h.


The documentation for this class was generated from the following files:
gslpp::vector< complex >::_vector
gsl_vector_complex * _vector
Definition: gslpp_vector_complex.h:35
gslpp::complex::i
static const complex & i()
Definition: gslpp_complex.cpp:154
gslpp::vector< complex >::size
size_t size() const
Definition: gslpp_vector_complex.cpp:117
gslpp::vector< complex >::conjugate
vector< complex > conjugate() const
Definition: gslpp_vector_complex.cpp:129