BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Reconstruction/MdcPatRec/MdcRecoUtil/include/MdcRecoUtil/DifVector.h
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2// File and Version Information:
3// $Id: DifVector.h,v 1.3 2009/12/23 02:59:56 zhangy Exp $
4//
5// Description:
6// Class Header for |DifVector|
7// A 3-vector based on differential numbers
8//
9// Environment:
10// Software developed for the BaBar Detector at the SLAC B-Factory.
11//
12// Author List:
13// A. Snyder
14//
15// Copyright Information:
16// Copyright (C) 1996 SLAC
17//
18// History:
19// Migration for BESIII MDC
20//
21//------------------------------------------------------------------------
22
23#ifndef DifVector_H
24#define DifVector_H
25
26#include "CLHEP/Vector/ThreeVector.h"
27#include "MdcRecoUtil/DifNumber.h"
28#include <iosfwd>
29class DifRotation;
30using CLHEP::Hep3Vector;
31
32class DifVector {
33
34public:
35 // constructors
36 DifVector(); // null - default
37 DifVector // construct from components
38 ( const DifNumber& x, const DifNumber& y, const DifNumber& z );
39 DifVector( double x, double y, double z );
40 DifVector // construct from |Hep3Vector|
41 ( const Hep3Vector& v );
42 DifVector( const DifVector& v ); // copy
43
44 // destructor
45 ~DifVector() {} // destroy
46
47 // given error on parameters calculate error on vector
48 HepSymMatrix errorMatrix // caclulate error matrix
49 ( const HepSymMatrix& e ) const;
50
51 // give jacobian transformation matrix wrt independent parameters;
52 HepMatrix jacobian() const;
53
54 // operators
55 inline DifVector& operator+=( const DifVector& v );
56 inline DifVector& operator-=( const DifVector& v );
57 inline DifVector& operator*=( const DifNumber& n );
58 inline DifVector& operator*=( const double& n );
60 DifVector& operator/=( const double& n );
61 inline DifVector& operator=( const DifVector& v );
62 inline DifVector operator-() const;
63
64 inline friend DifVector operator+ // vector sum
65 ( const DifVector& a, const DifVector& b );
66 inline friend DifVector operator- // vector difference
67 ( const DifVector& a, const DifVector& b );
68 inline friend DifNumber operator* // scalar product
69 ( const DifVector& a, const DifVector& b );
70 inline friend DifVector operator* // vector*scalar
71 ( const DifVector& v, const DifNumber& n );
72 inline friend DifVector operator* // scalar*vector
73 ( const DifNumber& n, const DifVector& v );
74 inline friend DifVector operator/ // vector/scalar
75 ( const DifVector& v, const DifNumber& n );
76 inline friend DifVector operator* // vector*scalar
77 ( const DifVector& v, const double& n );
78 inline friend DifVector operator* // scalar*vector
79 ( const double& n, const DifVector& v );
80 inline friend DifVector operator/ // vector/scalar
81 ( const DifVector& v, const double& n );
82
83 // other operations
84 inline friend DifVector cross( const DifVector& a, const DifVector& b );
85
86 // access
87 inline int nPar() const; // return number of params
88
89 // i/o
90 void print() const; // print out
91
92 // manipulations
93
94 // misc
95 inline DifVector& flipsign(); // flip sign of all components
96 inline DifVector& normalize(); // norm to unit vector
97 inline DifVector& zeroDerivatives(); // zero derivatives
98
99 // rotations
100 inline DifVector& rotate( const DifVector& axis,
101 const DifNumber& angle ); // rotate around axis
102 inline DifVector& rotate( const DifVector& axis, const DifNumber& cosine,
103 const DifNumber& sine ); // rotate with cos and sine
104 DifVector& rotate( const DifNumber& alpha, const DifNumber& beta,
105 const DifNumber& gamma ); // euler angles
106 DifVector& rotate( const DifRotation& r ); // rotatation matrix
107 inline DifVector& rotateX( const DifNumber& angle ); // around x
108 inline DifVector& rotateX( const DifNumber& cosine, const DifNumber& sine );
109 inline DifVector& rotateY( const DifNumber& angle ); // around y
110 inline DifVector& rotateY( const DifNumber& cosine, const DifNumber& sine );
111 inline DifVector& rotateZ( const DifNumber& angle ); // around z
112 inline DifVector& rotateZ( const DifNumber& cosine, const DifNumber& sine );
113
114 inline DifVector& rotate( const DifVector& axis, const double& angle ); // rotate around axis
115 inline DifVector& rotate( const DifVector& axis, const double& cosine,
116 const double& sine ); // rotate with cos and sine
117 DifVector& rotate( const double& alpha, const double& beta,
118 const double& gamma ); // euler angles
119 inline DifVector& rotateX( const double& angle ); // around x
120 inline DifVector& rotateX( const double& cosine, const double& sine );
121 inline DifVector& rotateY( const double& angle ); // around y
122 inline DifVector& rotateY( const double& cosine, const double& sine );
123 inline DifVector& rotateZ( const double& angle ); // around z
124 inline DifVector& rotateZ( const double& cosine, const double& sine );
125
126 // algebra
127 inline DifVector transverse // part tranverse to |v|
128 ( const DifVector& v ) const;
129 inline DifNumber dot // scalr product
130 ( const DifVector& v ) const;
131 inline DifNumber length() const; // length of vector
132 inline DifNumber lengthSq() const; // length squared
133 inline DifVector unit() const; // direction
134 inline DifNumber perp() const; // perp comp
135 inline DifNumber perpSq() const; // perp squared
136
137 // polar corrdinates
138 DifNumber r() const; // length by any other name
139 DifNumber phi() const; // azimutal angle
140 DifNumber theta() const; // polar angle
141 DifNumber cosTheta() const; // cosine of polar angle
142
143 // data members - public .. yes, folks that's intentional!
144public:
145 // x,y,z components of 3-vector
146 DifNumber x;
147 DifNumber y;
148 DifNumber z;
149};
150/*SKIP
151//io
152inline std::ostream& operator<<(std::ostream& o,const DifVector& n) {
153 n.print(o);
154 return o;
155}
156*/
157#include "MdcRecoUtil/DifVector.icc"
158
159#endif
const Int_t n
double alpha
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35
DifVector & operator+=(const DifVector &v)
DifVector transverse(const DifVector &v) const
DifVector & rotateX(const DifNumber &angle)
DifVector & normalize()
DifVector & rotate(const DifNumber &alpha, const DifNumber &beta, const DifNumber &gamma)
DifVector & rotate(const DifVector &axis, const DifNumber &cosine, const DifNumber &sine)
DifVector(const DifVector &v)
DifVector & rotateZ(const double &cosine, const double &sine)
DifVector & flipsign()
DifVector & rotate(const DifRotation &r)
DifVector & rotateY(const double &cosine, const double &sine)
int nPar() const
DifVector & zeroDerivatives()
DifVector(double x, double y, double z)
DifNumber perpSq() const
DifVector unit() const
DifVector & rotateX(const double &angle)
DifNumber cosTheta() const
DifNumber phi() const
DifVector & rotateZ(const DifNumber &angle)
DifVector & rotateY(const DifNumber &cosine, const DifNumber &sine)
DifNumber r() const
DifVector & rotate(const DifVector &axis, const DifNumber &angle)
DifVector & rotateZ(const DifNumber &cosine, const DifNumber &sine)
DifVector & operator*=(const double &n)
DifVector & rotate(const DifVector &axis, const double &angle)
DifVector & rotateZ(const double &angle)
DifNumber dot(const DifVector &v) const
DifVector operator-() const
HepSymMatrix errorMatrix(const HepSymMatrix &e) const
Definition DifVector.cxx:43
DifVector & operator*=(const DifNumber &n)
DifNumber length() const
DifVector & rotate(const DifVector &axis, const double &cosine, const double &sine)
DifVector & operator-=(const DifVector &v)
DifVector & operator/=(const double &n)
DifVector & rotateY(const double &angle)
DifVector & operator/=(const DifNumber &n)
DifNumber perp() const
DifNumber theta() const
DifVector & operator=(const DifVector &v)
DifVector & rotate(const double &alpha, const double &beta, const double &gamma)
friend DifVector cross(const DifVector &a, const DifVector &b)
HepMatrix jacobian() const
DifVector & rotateY(const DifNumber &angle)
DifVector & rotateX(const DifNumber &cosine, const DifNumber &sine)
DifVector & rotateX(const double &cosine, const double &sine)
void print() const
DifNumber lengthSq() const