#include "indexed.h"
#include "tensor.h"
+#include "symbol.h"
+#include "idx.h"
namespace GiNaC {
// other constructors
public:
clifford(const ex & b, unsigned char rl = 0);
- clifford(const ex & b, const ex & mu, unsigned char rl = 0);
+ clifford(const ex & b, const ex & mu, const ex & metr, unsigned char rl = 0);
// internal constructors
- clifford(unsigned char rl, const exvector & v, bool discardable = false);
- clifford(unsigned char rl, std::auto_ptr<exvector> vp);
+ clifford(unsigned char rl, const exvector & v, bool discardable = false, const ex & metr = lorentz_g(varidx((new symbol)->setflag(status_flags::dynallocated), 4),varidx((new symbol)->setflag(status_flags::dynallocated), 4)));
+ clifford(unsigned char rl, std::auto_ptr<exvector> vp, const ex & metr = lorentz_g(varidx((new symbol)->setflag(status_flags::dynallocated),4),varidx((new symbol)->setflag(status_flags::dynallocated),4)));
// functions overriding virtual functions from base classes
protected:
// non-virtual functions in this class
public:
unsigned char get_representation_label() const {return representation_label;}
+ ex get_metric() const {return metric;}
+ ex get_metric(const ex & i, const ex & j) const;
+ bool same_metric(const ex & other) const;
protected:
void do_print_dflt(const print_dflt & c, unsigned level) const;
// member variables
private:
unsigned char representation_label; /**< Representation label to distinguish independent spin lines */
+ ex metric;
};
};
+/** This class represents the Clifford algebra generators (units). */
+class cliffordunit : public tensor
+{
+ GINAC_DECLARE_REGISTERED_CLASS(cliffordunit, tensor)
+
+ // other constructors
+protected:
+ cliffordunit(unsigned ti) : inherited(ti) {}
+
+ // functions overriding virtual functions from base classes
+public:
+ bool contract_with(exvector::iterator self, exvector::iterator other, exvector & v) const;
+ // non-virtual functions in this class
+protected:
+ void do_print(const print_context & c, unsigned level) const;
+ void do_print_latex(const print_latex & c, unsigned level) const;
+};
+
+
/** This class represents the Dirac gamma Lorentz vector. */
-class diracgamma : public tensor
+class diracgamma : public cliffordunit
{
- GINAC_DECLARE_REGISTERED_CLASS(diracgamma, tensor)
+ GINAC_DECLARE_REGISTERED_CLASS(diracgamma, cliffordunit)
// functions overriding virtual functions from base classes
public:
* @return newly constructed object */
ex dirac_ONE(unsigned char rl = 0);
+/** Create a Clifford unit object.
+ *
+ * @param mu Index (must be of class varidx or a derived class)
+ * @param metr Metric (must be of class tensor or a derived class)
+ * @param rl Representation label
+ * @return newly constructed Clifford unit object */
+ex clifford_unit(const ex & mu, const ex & metr, unsigned char rl = 0);
+
/** Create a Dirac gamma object.
*
* @param mu Index (must be of class varidx or a derived class)
* to check two expressions for equality. */
ex canonicalize_clifford(const ex & e);
+/** Automorphism of the Clifford algebra, simply changes signs of all
+ * clifford units. */
+ex clifford_prime (const ex &e) ;
+
+/** Main anti-automorphism of the Clifford algebra: make reversion
+ * and changes signs of all clifford units*/
+inline ex clifford_bar(const ex &e) { return clifford_prime(e.conjugate());};
+
+/** Reversion of the Clifford algebra, coinsides with the conjugate() */
+inline ex clifford_star(const ex &e) { return e.conjugate();};
+
+ex delete_ONE (const ex &e);
+
+/** Calculation of the norm in the Clifford algebra */
+ex clifford_norm(const ex &e) ;
+
+/** Calculation of the inverse in the Clifford algebra */
+ex clifford_inverse(const ex &e) ;
+
+/** List or vector conversion into the Clifford vector
+ * @param v List or vector of coordinates
+ * @param mu Index (must be of class varidx or a derived class)
+ * @param metr Metric (must be of class tensor or a derived class)
+ * @param rl Representation label
+ * @return Clifford vector with given components */
+ex lst_to_clifford(const ex &v, const ex &mu, const ex &metr, unsigned char rl = 0) ;
+
} // namespace GiNaC
#endif // ndef __GINAC_CLIFFORD_H__