Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:49

0001 #ifndef ATOOLS_Math_Kabbala_H
0002 #define ATOOLS_Math_Kabbala_H
0003 
0004 #include "ATOOLS/Math/MyComplex.H"
0005 #include "ATOOLS/Math/MathTools.H" 
0006 #include "ATOOLS/Org/MyStrStream.H"
0007 
0008 namespace ATOOLS {
0009   class Kabbala {
0010     std::string  shem;
0011     Complex rishbon;
0012   public:
0013     Kabbala(const std::string str = std::string(""),const Complex C = Complex(0.,0.)) {
0014       shem    = str;
0015       rishbon = C;
0016     } 
0017     Kabbala(const Kabbala& k) {
0018       shem    = k.String();
0019       rishbon = k.Value();
0020     }
0021     Kabbala& operator=(const Kabbala& k) {
0022       if (this!=&k) {
0023     shem    = k.String();
0024     rishbon = k.Value();
0025       } 
0026       return *this;
0027     }
0028     Kabbala& operator+=(const Kabbala& k);
0029     Kabbala& operator-=(const Kabbala& k);
0030     
0031     Kabbala operator-();
0032     Kabbala operator+();
0033 
0034     Kabbala& operator*=(const int& i);
0035     Kabbala& operator*=(const Kabbala& k);
0036     Kabbala& operator*=(const double& d);
0037     Kabbala& operator*=(const Complex& c);
0038     Kabbala& operator/=(const Kabbala& k);
0039     
0040     const Complex &Value() const {return rishbon;} 
0041     const std::string &String() const {return shem;}
0042    
0043     void SetValue(Complex val) {rishbon = val;}
0044     void SetString(std::string str) {shem    = str;} 
0045 
0046     friend int IsZero(const Kabbala& a);
0047     friend int IsEqual(const Kabbala& a,const Complex& b);
0048   };
0049   
0050   inline int IsZero(const Kabbala& a) {
0051     return ATOOLS::IsZero(a.Value());
0052   }
0053 
0054   inline int IsEqual(const Kabbala& a,const Complex& b) {
0055     return ATOOLS::IsEqual(a.Value(),b);
0056   }
0057 
0058   inline Kabbala operator+(const Kabbala& k1,const Kabbala& k2)
0059   {
0060     Kabbala k(k1);
0061     k += k2;
0062     return k;
0063   }
0064 
0065   inline Kabbala operator-(const Kabbala& k1,const Kabbala& k2)
0066   {
0067     Kabbala k(k1);
0068     k -= k2;
0069     return k;
0070   }
0071 
0072   inline Kabbala operator* (const Kabbala& k1, const Kabbala& k2) 
0073   {
0074     Kabbala k(k1);
0075     k *= k2;
0076     return k;
0077   }
0078 
0079   inline Kabbala operator* (const int& i1, const Kabbala& k2) 
0080   {
0081     Kabbala k(k2); 
0082     k *= i1;
0083     return k;
0084   }
0085 
0086   inline Kabbala operator* (const Kabbala& k1,const int& i2) 
0087   {
0088     return i2*k1;
0089   }
0090 
0091   
0092   inline Kabbala operator* (const double d1, const Kabbala& k2) 
0093   {
0094     Kabbala k(k2); 
0095     k *= d1;
0096     return k;
0097   }
0098   
0099   inline Kabbala operator* (const Kabbala& k1,const double d2) 
0100   {
0101     return d2*k1;
0102   }
0103   
0104     inline Kabbala operator* (const Complex c1, const Kabbala& k2) 
0105   {
0106     Kabbala k(k2); 
0107     k *= c1;
0108     return k;
0109   }
0110   
0111   inline Kabbala operator* (const Kabbala& k1,const Complex c2) 
0112   {
0113     Kabbala k(k1); 
0114     k *= c2;
0115     return k;
0116   }
0117   
0118   inline Kabbala operator/ (const Kabbala& k1, const Kabbala& k2) 
0119   {
0120     Kabbala k(k1);
0121     k /= k2;
0122     return k;
0123   }
0124 
0125   inline bool operator==(const Kabbala& k1,const Kabbala& k2) 
0126   {
0127     if (k1.Value()!=k2.Value())   return false;
0128     if (k1.String()!=k2.String()) return false;
0129     return true;
0130   }
0131 
0132   inline bool operator!=(const Kabbala& k1,const Kabbala& k2)
0133   {
0134     return !(k1==k2);
0135   }
0136 
0137   inline Kabbala exp(const Kabbala& k1)
0138   {
0139     Kabbala k(k1);
0140 
0141     k.SetValue(std::exp(k.Value()));
0142     k.SetString(std::string("exp(") + k.String() + std::string(")"));
0143 
0144     return k;
0145   }
0146 
0147   inline Kabbala sin(const Kabbala& k1)
0148   {
0149     Kabbala k(k1);
0150     return k;
0151   }
0152 }
0153 
0154 #endif
0155 
0156