BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Reconstruction/MdcPatRec/MdcRecoUtil/include/MdcRecoUtil/DifComplex.h
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2// File and Version Information:
3// $Id: DifComplex.h,v 1.2 2009/12/23 02:59:56 zhangy Exp $
4//
5// Description:
6// Class Header for |DifComplex|
7// Represent a complex diffential number
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) 1997 SLAC
17//
18// History:
19// Migration for BESIII MDC
20//
21//------------------------------------------------------------------------Dif
22
23#ifndef DifComplex_H
24#define DifComplex_H
25
26#include "MdcRecoUtil/DifNumber.h"
27#include <assert.h>
28#include <stdlib.h>
29
30class ostream;
31
32class DifComplex {
33
34public:
35 // constructors
36 inline DifComplex();
37 inline DifComplex( const DifNumber& r );
38 inline DifComplex( double r );
39 inline DifComplex( const DifNumber& r, const DifNumber& i );
40 inline DifComplex( double r, double i );
41 inline DifComplex( const DifComplex& c );
42
43 // access
44 inline const DifNumber& real() const { return _r; }
45 inline DifNumber& gimeReal() { return _r; }
46 inline const DifNumber& imag() const { return _i; }
47 inline DifNumber& gimeImag() { return _i; }
48
49 // set
50 void setReal( const DifNumber& r ) { _r = r; }
51 void setImag( const DifNumber& i ) { _i = i; }
52
53 // operators and such
54 inline DifComplex& operator+=( const DifComplex& a );
55 inline DifComplex& operator-=( const DifComplex& a );
56 inline DifComplex& operator*=( const DifComplex& a );
57 inline DifComplex& operator/=( const DifComplex& a );
58 inline DifComplex& operator/=( const DifNumber& a );
59 inline DifComplex& operator=( const DifComplex& a );
60 inline DifComplex operator-() const;
61
62 // manupulate *this guy - reverse polish style
63 inline DifComplex& conjugate(); // take complex conjugate
64 inline DifComplex& inverse(); // invert
65 inline DifComplex& flipsign(); // flip sign
66 inline DifComplex& takeLog(); // take log
67 inline DifComplex& power( const DifNumber& p ); // raise to a power
68 inline DifComplex& power( const DifComplex& p ); // raise to a power
69
70 // complex specfic function
71 inline DifNumber mag() const; // magnitude
72 inline DifNumber magsq() const; // magnitude squared
73 inline DifNumber arg() const; // phase
74 inline DifNumber phase() const { return arg(); } // a rose by ...
75
76 // io
77 inline void print() const;
78
79 // friends
80 inline friend DifComplex operator+( const DifComplex& a, const DifComplex& b );
81 inline friend DifComplex operator-( const DifComplex& a, const DifComplex& b );
82 inline friend DifComplex operator*( const DifComplex& a, const DifComplex& b );
83 inline friend DifComplex operator/( const DifComplex& a, const DifComplex& b );
84 inline friend bool operator==( const DifComplex& a, const DifComplex& b );
85 inline friend bool operator!=( const DifComplex& a, const DifComplex& b );
86 inline friend DifComplex sin( const DifComplex& a );
87 inline friend DifComplex cos( const DifComplex& a );
88 inline friend DifComplex tan( const DifComplex& a );
89 inline friend DifComplex sec( const DifComplex& a );
90 inline friend DifComplex asin( const DifComplex& a );
91 inline friend DifComplex acos( const DifComplex& a );
92 inline friend DifComplex atan( const DifComplex& a );
93 inline friend DifComplex atan2( const DifComplex& a, const DifComplex& b );
94 inline friend DifComplex exp( const DifComplex& a );
95 inline friend DifComplex cosh( const DifComplex& a );
96 inline friend DifComplex sinh( const DifComplex& a );
97 inline friend DifComplex tanh( const DifComplex& a );
98 inline friend DifComplex sqrt( const DifComplex& a );
99 inline friend DifComplex log( const DifComplex& a );
100 inline friend DifComplex pow( const DifComplex& a, const DifComplex& p );
101 inline friend DifComplex pow( const DifComplex& a, const DifNumber& p );
102 inline friend DifComplex cc( const DifComplex& a );
103 inline friend DifComplex fromPolar( const DifNumber& mag, const DifNumber& phase );
104
105 // destructor
106 inline virtual ~DifComplex(){};
107
108private:
109 // data
110 DifNumber _r;
111 DifNumber _i;
112
113 // functions
114 inline DifNumber& gimeR() { return _r; }
115 inline DifNumber& gimeI() { return _i; }
116 inline const DifNumber& R() const { return _r; }
117 inline const DifNumber& I() const { return _i; }
118};
119
120#include "MdcRecoUtil/DifComplex.icc"
121/*del**
122inline ostream& operator<<(ostream& o,const DifComplex& c){
123 c.print(o);
124 return o;
125}
126 */
127#endif
const DifComplex I
friend DifComplex sinh(const DifComplex &a)
DifComplex & power(const DifComplex &p)
friend DifComplex asin(const DifComplex &a)
DifComplex & conjugate()
friend DifComplex operator+(const DifComplex &a, const DifComplex &b)
friend DifComplex sin(const DifComplex &a)
friend DifComplex exp(const DifComplex &a)
DifNumber magsq() const
DifComplex & operator/=(const DifNumber &a)
friend DifComplex atan(const DifComplex &a)
friend DifComplex acos(const DifComplex &a)
friend bool operator==(const DifComplex &a, const DifComplex &b)
DifComplex(const DifComplex &c)
DifComplex & power(const DifNumber &p)
friend DifComplex cc(const DifComplex &a)
friend DifComplex atan2(const DifComplex &a, const DifComplex &b)
friend DifComplex operator/(const DifComplex &a, const DifComplex &b)
DifNumber mag() const
friend DifComplex operator-(const DifComplex &a, const DifComplex &b)
friend DifComplex fromPolar(const DifNumber &mag, const DifNumber &phase)
friend DifComplex pow(const DifComplex &a, const DifNumber &p)
friend bool operator!=(const DifComplex &a, const DifComplex &b)
friend DifComplex cosh(const DifComplex &a)
friend DifComplex sqrt(const DifComplex &a)
DifComplex & operator+=(const DifComplex &a)
DifComplex & operator=(const DifComplex &a)
DifComplex & operator/=(const DifComplex &a)
DifNumber arg() const
friend DifComplex tanh(const DifComplex &a)
friend DifComplex pow(const DifComplex &a, const DifComplex &p)
friend DifComplex log(const DifComplex &a)
DifComplex & inverse()
friend DifComplex cos(const DifComplex &a)
DifComplex operator-() const
DifComplex & operator-=(const DifComplex &a)
friend DifComplex operator*(const DifComplex &a, const DifComplex &b)
void print() const
friend DifComplex tan(const DifComplex &a)
friend DifComplex sec(const DifComplex &a)
DifComplex & operator*=(const DifComplex &a)
DifComplex(const DifNumber &r)
DifComplex(const DifNumber &r, const DifNumber &i)
DifComplex(double r)
DifComplex & flipsign()
DifComplex & takeLog()
DifComplex(double r, double i)