/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcPatRec/MdcRecoUtil/MdcRecoUtil-00-01-08/MdcRecoUtil/DifComplex.h

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: DifComplex.h,v 1.2 2009/12/23 02:59:56 zhangy Exp $
00004 //
00005 // Description:
00006 //      Class Header for |DifComplex|
00007 //      Represent a complex diffential number
00008 //
00009 // Environment:
00010 //      Software developed for the BaBar Detector at the SLAC B-Factory.
00011 //
00012 // Author List:
00013 //      A. Snyder
00014 //
00015 // Copyright Information:
00016 //      Copyright (C) 1997      SLAC
00017 // 
00018 // History:
00019 //      Migration for BESIII MDC
00020 //
00021 //------------------------------------------------------------------------Dif
00022 
00023 #ifndef DifComplex_H
00024 #define DifComplex_H
00025 
00026 #include <assert.h>
00027 #include <stdlib.h>
00028 #include "MdcRecoUtil/DifNumber.h"
00029 
00030 class ostream;
00031 
00032 class DifComplex {
00033 
00034 public:
00035 
00036   //constructors
00037   inline DifComplex();
00038   inline DifComplex(const DifNumber& r);
00039   inline DifComplex(double r);
00040   inline DifComplex(const DifNumber& r,const DifNumber& i);
00041   inline DifComplex(double r,double i);
00042   inline DifComplex(const DifComplex& c);
00043 
00044   //access 
00045   inline const DifNumber& real()const {return _r;}
00046   inline DifNumber& gimeReal(){return _r;}
00047   inline const DifNumber& imag()const {return _i;}
00048   inline DifNumber& gimeImag(){return _i;}
00049 
00050   //set
00051   void setReal(const DifNumber& r) {_r=r;}
00052   void setImag(const DifNumber& i) {_i=i;}
00053 
00054   //operators and such
00055   inline DifComplex& operator+=(const DifComplex& a);
00056   inline DifComplex& operator-=(const DifComplex& a);
00057   inline DifComplex& operator*=(const DifComplex& a);
00058   inline DifComplex& operator/=(const DifComplex& a);
00059   inline DifComplex& operator/=(const DifNumber& a);
00060   inline DifComplex& operator=(const DifComplex& a);
00061   inline DifComplex operator-()const;
00062 
00063   //manupulate *this guy - reverse polish style
00064   inline DifComplex& conjugate();               // take complex conjugate
00065   inline DifComplex& inverse();         // invert
00066   inline DifComplex& flipsign();                // flip sign
00067   inline DifComplex& takeLog();         // take log
00068   inline DifComplex& power(const DifNumber& p); // raise to a power
00069   inline DifComplex& power(const DifComplex& p); // raise to a power
00070 
00071   //complex specfic function
00072   inline DifNumber mag()const;          // magnitude
00073   inline DifNumber magsq()const;        // magnitude squared
00074   inline DifNumber arg()const;          // phase
00075   inline DifNumber phase()const {return arg();} // a rose by ...
00076 
00077   //io
00078   inline void print()const;
00079 
00080   //friends
00081   inline friend DifComplex operator+(const DifComplex& a,const DifComplex& b);
00082   inline friend DifComplex operator-(const DifComplex& a,const DifComplex& b);
00083   inline friend DifComplex operator*(const DifComplex& a,const DifComplex& b);
00084   inline friend DifComplex operator/(const DifComplex& a,const DifComplex& b);
00085   inline friend bool operator==(const DifComplex& a,const DifComplex& b);
00086   inline friend bool operator!=(const DifComplex& a,const DifComplex& b);
00087   inline friend DifComplex sin(const DifComplex& a);
00088   inline friend DifComplex cos(const DifComplex& a);
00089   inline friend DifComplex tan(const DifComplex &a);
00090   inline friend DifComplex sec(const DifComplex &a);
00091   inline friend DifComplex asin(const DifComplex &a);
00092   inline friend DifComplex acos(const DifComplex &a);
00093   inline friend DifComplex atan(const DifComplex &a);
00094   inline friend DifComplex atan2(const DifComplex& a,const DifComplex& b);
00095   inline friend DifComplex exp(const DifComplex& a);
00096   inline friend DifComplex cosh(const DifComplex& a);
00097   inline friend DifComplex sinh(const DifComplex& a);
00098   inline friend DifComplex tanh(const DifComplex& a);
00099   inline friend DifComplex sqrt(const DifComplex& a);
00100   inline friend DifComplex log(const DifComplex& a);
00101   inline friend DifComplex pow(const DifComplex& a,const DifComplex& p);
00102   inline friend DifComplex pow(const DifComplex& a,const DifNumber& p);
00103   inline friend DifComplex cc(const DifComplex& a);
00104   inline friend DifComplex fromPolar
00105   (const DifNumber& mag,const DifNumber& phase);
00106 
00107 
00108 
00109   //destructor
00110   inline virtual ~DifComplex(){};
00111 
00112 private:
00113 
00114   //data
00115   DifNumber _r;
00116   DifNumber _i;
00117 
00118   //functions
00119   inline DifNumber& gimeR() {return _r;}
00120   inline DifNumber& gimeI() {return _i;}
00121   inline const DifNumber& R()const {return _r;}
00122   inline const DifNumber& I()const {return _i;}
00123 };
00124 
00125 #include "MdcRecoUtil/DifComplex.icc"
00126 /*del**
00127 inline ostream& operator<<(ostream& o,const DifComplex& c){
00128   c.print(o);
00129   return o;
00130 }
00131  */
00132 #endif
00133 
00134 
00135 
00136 
00137 

Generated on Tue Nov 29 23:13:31 2016 for BOSS_7.0.2 by  doxygen 1.4.7