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 }

◆ 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: