FEDRA emulsion software from the OPERA Collaboration
MATRIX::VtVector Class Reference

#include <VtVector.hh>

Public Member Functions

— Constructors —
 VtVector (const unsigned int size)
 
 VtVector (double v1, double v2)
 
 VtVector (double v1, double v2, double v3)
 
 VtVector (double v1, double v2, double v3, double v4)
 
 VtVector (double v1, double v2, double v3, double v4, double v5)
 
 VtVector (double v1, double v2, double v3, double v4, double v5, double v6)
 
 VtVector (const VtVector &rhs)
 
 ~VtVector ()
 
— Operators —
double operator[] (unsigned int row) const
 
double & operator[] (const unsigned int row)
 
double operator() (unsigned int row) const
 
double & operator() (const unsigned int row)
 
const VtVectoroperator= (const VtVector &rhs)
 $\vec{v} = \vec{w}$ More...
 
const VtVectoroperator+= (const double rhs)
 $\vec{v} = (v_\mu + \alpha)$ More...
 
const VtVectoroperator-= (const double rhs)
 $\vec{v} = (v_\mu - \alpha)$ More...
 
const VtVectoroperator*= (const double rhs)
 $\vec{v} = (v_\mu \cdot \alpha)$ More...
 
const VtVectoroperator/= (const double rhs)
 $\vec{v} = (v_\mu / \alpha)$ More...
 
const VtVectoroperator+= (const VtVector &rhs)
 $\vec{v} = (v_\mu + w_\mu)$ More...
 
const VtVectoroperator-= (const VtVector &rhs)
 $\vec{v} = (v_\mu - w_\mu)$ More...
 
const VtVector operator+ (const VtVector &rhs) const
 $\vec{v} + \vec{w}$ More...
 
const VtVector operator- (const VtVector &rhs) const
 $\vec{v} - \vec{w}$ More...
 
const double operator* (const VtVector &rhs) const
 $\vec{v} * \vec{w} = \sum_\mu v_\mu \cdot w_\mu$ More...
 
VtVector operator* (const double rhs) const
 $\vec{v} = (v_\mu \cdot \alpha)$ More...
 
— Access methods —
unsigned int size () const
 vector dimension More...
 
unsigned int nrow () const
 vector dimension More...
 
double mag2 () const
 $\sum_i v_i^2$ More...
 
double mag () const
 $\sqrt{\sum_i v_i^2}$ vector length More...
 
VtVector unit () const
 return a unit vector More...
 

— Expert functions —

unsigned int v_size
 
double * v
 
void print (std::ostream &os) const
 called by cout More...
 
void place_at (const VtVector &rhs, const unsigned int row)
 copy a smaller vector at a certain place More...
 
void copy (const VtVector &rhs, const unsigned int offset)
 to be used if vector dimensions differ More...
 
void clear (void)
 set vector elements to 0 More...
 

Detailed Description

Vector class

Constructor & Destructor Documentation

◆ VtVector() [1/7]

MATRIX::VtVector::VtVector ( const unsigned int  size)
39  :
40  v_size(rows),
41  v(new double[size()]) {
42  memset(v, 0, size() * sizeof(double));
43  }
unsigned int size() const
vector dimension
unsigned int v_size
Definition: VtVector.hh:122
double * v
Definition: VtVector.hh:123

◆ VtVector() [2/7]

MATRIX::VtVector::VtVector ( double  v1,
double  v2 
)
45  :
46  v_size(2), v(new double[2]) {
47  v[0] = v1;
48  v[1] = v2;
49  }

◆ VtVector() [3/7]

MATRIX::VtVector::VtVector ( double  v1,
double  v2,
double  v3 
)
51  :
52  v_size(3), v(new double[3]) {
53  v[0] = v1;
54  v[1] = v2;
55  v[2] = v3;
56  }

◆ VtVector() [4/7]

MATRIX::VtVector::VtVector ( double  v1,
double  v2,
double  v3,
double  v4 
)
58  :
59  v_size(4), v(new double[4]) {
60  v[0] = v1;
61  v[1] = v2;
62  v[2] = v3;
63  v[3] = v4;
64  }

◆ VtVector() [5/7]

MATRIX::VtVector::VtVector ( double  v1,
double  v2,
double  v3,
double  v4,
double  v5 
)
66  :
67  v_size(5), v(new double[5]) {
68  v[0] = v1;
69  v[1] = v2;
70  v[2] = v3;
71  v[3] = v4;
72  v[4] = v5;
73  }

◆ VtVector() [6/7]

MATRIX::VtVector::VtVector ( double  v1,
double  v2,
double  v3,
double  v4,
double  v5,
double  v6 
)
76  :
77  v_size(6), v(new double[6]) {
78  v[0] = v1;
79  v[1] = v2;
80  v[2] = v3;
81  v[3] = v4;
82  v[4] = v5;
83  v[5] = v6;
84  }

◆ VtVector() [7/7]

MATRIX::VtVector::VtVector ( const VtVector rhs)
86  :
87  v_size(rhs.size()),
88  v(new double[size()]) {
89  memcpy(v, rhs.v, size() * sizeof(double));
90  }

◆ ~VtVector()

MATRIX::VtVector::~VtVector ( )
92  {
93  // pthread_mutex_lock(&VTmutex);
94  delete[] v;
95  // pthread_mutex_unlock(&VTmutex);
96  }

Member Function Documentation

◆ clear()

void MATRIX::VtVector::clear ( void  )

set vector elements to 0

282  {
283  memset(v, 0, v_size * sizeof(double));
284  return;
285  }

◆ copy()

void MATRIX::VtVector::copy ( const VtVector rhs,
const unsigned int  offset 
)

to be used if vector dimensions differ

290  {
291 
292 #ifndef VtFAST
293  assert(offset <= rhs.nrow());
294 #endif
295 
296  const unsigned int rows = rhs.nrow() - offset;
297  const unsigned int nrow = (v_size < rows) ? v_size : rows;
298 
299  memcpy(v, rhs.v+offset, nrow * sizeof(double));
300 
301  return;
302  }
unsigned int nrow() const
vector dimension

◆ mag()

double MATRIX::VtVector::mag ( ) const

$\sqrt{\sum_i v_i^2}$ vector length

◆ mag2()

double MATRIX::VtVector::mag2 ( ) const

$\sum_i v_i^2$

102  {
103  double sum=0;
104  for(unsigned int i=0; i<size(); ++i)
105  sum += v[i] * v[i];
106  return sum;
107  }

◆ nrow()

unsigned int MATRIX::VtVector::nrow ( ) const

vector dimension

◆ operator()() [1/2]

double& MATRIX::VtVector::operator() ( const unsigned int  row)

◆ operator()() [2/2]

double MATRIX::VtVector::operator() ( unsigned int  row) const

◆ operator*() [1/2]

VtVector MATRIX::VtVector::operator* ( const double  rhs) const

$\vec{v} = (v_\mu \cdot \alpha)$

240  {
241  VtVector tmp(*this);
242  return tmp *= rhs;
243  }
VtVector(const unsigned int size)
Definition: VtVector.C:39

◆ operator*() [2/2]

const double MATRIX::VtVector::operator* ( const VtVector rhs) const

$\vec{v} * \vec{w} = \sum_\mu v_\mu \cdot w_\mu$

225  {
226 
227  assert(size() == rhs.size());
228 
229  double sum = 0.;
230  for(unsigned int i=0; i<size(); ++i) {
231  sum += *(v+i) * rhs[i];
232  }
233 
234  return sum;
235  }

◆ operator*=()

const VtVector & MATRIX::VtVector::operator*= ( const double  rhs)

$\vec{v} = (v_\mu \cdot \alpha)$

171  {
172  for(unsigned int i=0; i<size(); ++i) v[i] *= rhs;
173  return *this;
174  }

◆ operator+()

const VtVector MATRIX::VtVector::operator+ ( const VtVector rhs) const

$\vec{v} + \vec{w}$

187  {
188 
189 #ifndef VtFAST
190  assert(size() == rhs.size());
191 #endif
192 
193 // VtVector tmp(size());
194 
195 // for(unsigned int i=0; i<size(); ++i) {
196 // tmp[i] = *(v+i) + rhs[i];
197 // }
198 
199  VtVector tmp(*this);
200  return tmp += rhs;
201  }

◆ operator+=() [1/2]

const VtVector & MATRIX::VtVector::operator+= ( const double  rhs)

$\vec{v} = (v_\mu + \alpha)$

129  {
130  for(unsigned int i=0; i<size(); ++i) v[i] += rhs;
131  return *this;
132  }

◆ operator+=() [2/2]

const VtVector & MATRIX::VtVector::operator+= ( const VtVector rhs)

$\vec{v} = (v_\mu + w_\mu)$

137  {
138 
139 #ifndef VtFAST
140  assert(size() == rhs.size());
141 #endif
142 
143  for(unsigned int i=0; i<size(); ++i) v[i] += rhs.v[i];
144  return *this;
145  }

◆ operator-()

const VtVector MATRIX::VtVector::operator- ( const VtVector rhs) const

$\vec{v} - \vec{w}$

206  {
207 
208 #ifndef VtFAST
209  assert(size() == rhs.size());
210 #endif
211 
212 // VtVector tmp(size());
213 
214 // for(unsigned int i=0; i<size(); ++i) {
215 // tmp[i] = *(v+i) - rhs[i];
216 // }
217 
218  VtVector tmp(*this);
219  return tmp -= rhs;
220  }

◆ operator-=() [1/2]

const VtVector & MATRIX::VtVector::operator-= ( const double  rhs)

$\vec{v} = (v_\mu - \alpha)$

150  {
151  for(unsigned int i=0; i<size(); ++i) v[i] -= rhs;
152  return *this;
153  }

◆ operator-=() [2/2]

const VtVector & MATRIX::VtVector::operator-= ( const VtVector rhs)

$\vec{v} = (v_\mu - w_\mu)$

158  {
159 
160 #ifndef VtFAST
161  assert(size() == rhs.size());
162 #endif
163 
164  for(unsigned int i=0; i<size(); ++i) v[i] -= rhs.v[i];
165  return *this;
166  }

◆ operator/=()

const VtVector & MATRIX::VtVector::operator/= ( const double  rhs)

$\vec{v} = (v_\mu / \alpha)$

179  {
180  for(unsigned int i=0; i<size(); ++i) v[i] /= rhs;
181  return *this;
182  }

◆ operator=()

const VtVector & MATRIX::VtVector::operator= ( const VtVector rhs)

$\vec{v} = \vec{w}$

112  {
113  if(this == &rhs) return *this;
114 
115 #ifndef VtFAST
116  assert(size() == rhs.size());
117 #endif
118 
119  v_size = rhs.size();
120 
121  memcpy(v, rhs.v, size() * sizeof(double));
122 
123  return *this;
124  }

◆ operator[]() [1/2]

double& MATRIX::VtVector::operator[] ( const unsigned int  row)

◆ operator[]() [2/2]

double MATRIX::VtVector::operator[] ( unsigned int  row) const

◆ place_at()

void MATRIX::VtVector::place_at ( const VtVector rhs,
const unsigned int  row 
)

copy a smaller vector at a certain place

249  {
250 #ifndef VtFAST
251  assert(nrow() >= rhs.nrow()+row);
252 #endif
253 
254  for(unsigned int i=0; i<rhs.nrow(); ++i) {
255  operator()(i+row) = rhs(i);
256  }
257 
258  return;
259  }
double operator()(unsigned int row) const

◆ print()

void MATRIX::VtVector::print ( std::ostream &  os) const

called by cout

264  {
265  /* Fixed format needs 3 extra characters for field, while scientific needs 7 */
266  int width;
267  os << std::endl;
268  if(os.flags() & std::ios::fixed)
269  width = os.precision()+3;
270  else
271  width = os.precision()+7;
272  for(unsigned int row = 0; row < nrow(); ++row) {
273  os.width(width);
274  os << operator()(row) << std::endl;
275  }
276  return;
277  }
float width
Definition: emthickness.cpp:71

◆ size()

unsigned int MATRIX::VtVector::size ( ) const

vector dimension

◆ unit()

VtVector MATRIX::VtVector::unit ( ) const

return a unit vector

307  {
308  VtVector tmp(*this);
309  tmp /= tmp.mag();
310  return tmp;
311  }

Member Data Documentation

◆ v

double* MATRIX::VtVector::v
private

◆ v_size

unsigned int MATRIX::VtVector::v_size
private

The documentation for this class was generated from the following files: