Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:31:56

0001 #ifndef ATOOLS_Math_Term_H
0002 #define ATOOLS_Math_Term_H
0003 
0004 #include <string>
0005 
0006 namespace ATOOLS {
0007 
0008   class Term {
0009   private:
0010 
0011     char m_type;
0012 
0013     std::string m_tag;
0014     size_t      m_id;
0015 
0016   public:
0017 
0018     inline Term(const char type): m_type(type) {}
0019 
0020     virtual ~Term();
0021 
0022     template <class TType> static Term *New(const TType &val);
0023 
0024     static Term *NewTerm(const std::string &tag);
0025 
0026     virtual void Delete() = 0;
0027 
0028     inline char Type() const { return m_type; }
0029 
0030     template <class TType> const TType &Get() const;
0031     template <class TType> void Set(const TType &val);
0032 
0033     void SetTerm(const std::string &val);
0034 
0035     void Print(std::ostream &ostr) const;
0036 
0037     Term *operator-() const;
0038     Term *operator!() const;
0039 
0040     Term *operator+(const Term &ref) const;
0041     Term *operator-(const Term &ref) const;
0042     Term *operator*(const Term &ref) const;
0043     Term *operator/(const Term &ref) const;
0044 
0045     Term *operator==(const Term &ref) const;
0046     Term *operator!=(const Term &ref) const;
0047 
0048     Term *operator<(const Term &ref) const;
0049     Term *operator>(const Term &ref) const;
0050     Term *operator<=(const Term &ref) const;
0051     Term *operator>=(const Term &ref) const;
0052 
0053     Term *operator%(const Term &ref) const;
0054     Term *operator<<(const Term &ref) const;
0055     Term *operator>>(const Term &ref) const;
0056     Term *operator&&(const Term &ref) const;
0057     Term *operator||(const Term &ref) const;
0058     Term *operator&(const Term &ref) const;
0059     Term *operator^(const Term &ref) const;
0060     Term *operator|(const Term &ref) const;
0061 
0062     Term *Real() const;
0063     Term *Imag() const;
0064     Term *Conj() const;
0065     Term *Comp(const Term &i) const;
0066 
0067     Term *Perp() const;
0068     Term *Plus() const;
0069     Term *Minus() const;
0070 
0071     Term *PPlus() const;
0072     Term *PMinus() const;
0073     Term *Abs2() const;
0074     Term *Mass() const;
0075     Term *PSpat() const;
0076     Term *PPerp() const;
0077     Term *PPerp2() const;
0078     Term *MPerp() const;
0079     Term *MPerp2() const;
0080     Term *Theta() const;
0081     Term *Eta() const;
0082     Term *Y() const;
0083     Term *Phi() const;
0084 
0085     Term *PPerp(const Term &ref) const;
0086     Term *Theta(const Term &ref) const;
0087     Term *DEta(const Term &ref) const;
0088     Term *DY(const Term &ref) const;
0089     Term *DPhi(const Term &ref) const;
0090     Term *DR(const Term &ref) const;
0091 
0092     inline void SetTag(const std::string &tag) { m_tag=tag; }
0093     inline void SetId(const size_t &id)        { m_id=id;   }
0094 
0095     inline const std::string &Tag() const { return m_tag; }
0096     inline const size_t      &Id() const  { return m_id;  }
0097 
0098   };// end of class Term
0099 
0100   std::ostream &operator<<(std::ostream &ostr,const Term &t);
0101 
0102   Term *TVec4D(const Term &t0,const Term &t1,
0103            const Term &t2,const Term &t3);
0104 
0105   Term *TExp(const Term &t);
0106   Term *TLog(const Term &t);
0107   Term *TLog10(const Term &t);
0108   Term *TAbs(const Term &t);
0109   Term *TSgn(const Term &t);
0110   Term *TTheta(const Term &t1);
0111   Term *TSqr(const Term &t);
0112   Term *TSqrt(const Term &t);
0113   Term *TSin(const Term &t);
0114   Term *TCos(const Term &t);
0115   Term *TTan(const Term &t);
0116   Term *TSinh(const Term &t);
0117   Term *TCosh(const Term &t);
0118   Term *TTanh(const Term &t);
0119   Term *TASin(const Term &t);
0120   Term *TACos(const Term &t);
0121   Term *TATan(const Term &t);
0122 
0123   Term *TPow(const Term &t1,const Term &t2);
0124   Term *TMin(const Term &t1,const Term &t2);
0125   Term *TMax(const Term &t1,const Term &t2);
0126 
0127 }// end of namespace ATOOLS
0128 
0129 #endif