X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fclifford.h;h=50a0c70cdaa64b96fb68d7322b5b641c39a0a9ea;hp=69c9e23a6685a3b19f42fbfa17b9bed4113a4431;hb=a465898a5d582beb8bdf47e9684ddd931acebc75;hpb=6c9a7dfd6b92368b21a2fe5aaf3638bc849099ba diff --git a/ginac/clifford.h b/ginac/clifford.h index 69c9e23a..50a0c70c 100644 --- a/ginac/clifford.h +++ b/ginac/clifford.h @@ -48,7 +48,11 @@ public: clifford(unsigned char rl, exvector * vp); // vp will be deleted // functions overriding virtual functions from base classes +public: + void print(const print_context & c, unsigned level = 0) const; + protected: + bool match_same_type(const basic & other) const; ex simplify_ncmul(const exvector & v) const; ex thisexprseq(const exvector & v) const; ex thisexprseq(exvector * vp) const; @@ -70,7 +74,7 @@ class diracone : public tensor { GINAC_DECLARE_REGISTERED_CLASS(diracone, tensor) - // functions overriding virtual functions from bases classes + // functions overriding virtual functions from base classes public: void print(const print_context & c, unsigned level = 0) const; }; @@ -81,7 +85,7 @@ class diracgamma : public tensor { GINAC_DECLARE_REGISTERED_CLASS(diracgamma, tensor) - // functions overriding virtual functions from bases classes + // functions overriding virtual functions from base classes public: void print(const print_context & c, unsigned level = 0) const; bool contract_with(exvector::iterator self, exvector::iterator other, exvector & v) const; @@ -94,18 +98,26 @@ class diracgamma5 : public tensor { GINAC_DECLARE_REGISTERED_CLASS(diracgamma5, tensor) - // functions overriding virtual functions from bases classes + // functions overriding virtual functions from base classes public: void print(const print_context & c, unsigned level = 0) const; }; // global functions + +/** Return the clifford object handled by an ex. Deprecated: use ex_to(). + * This is unsafe: you need to check the type first. */ inline const clifford &ex_to_clifford(const ex &e) { return static_cast(*e.bp); } +/** Specialization of is_exactly_a(obj) for clifford objects. */ +template<> inline bool is_exactly_a(const basic & obj) +{ + return obj.tinfo()==TINFO_clifford; +} /** Create a Clifford unity object. * @@ -144,9 +156,15 @@ ex dirac_slash(const ex & e, const ex & dim, unsigned char rl = 0); * In particular, the functional is not always cyclic in D != 4 dimensions * when gamma5 is involved. * - * @param rl Representation label */ -ex dirac_trace(const ex & e, unsigned char rl = 0); + * @param e Expression to take the trace of + * @param rl Representation label + * @param trONE Expression to be returned as the trace of the unit matrix */ +ex dirac_trace(const ex & e, unsigned char rl = 0, const ex & trONE = 4); +/** Bring all products of clifford objects in an expression into a canonical + * order. This is not necessarily the most simple form but it will allow + * to check two expressions for equality. */ +ex canonicalize_clifford(const ex & e); } // namespace GiNaC