#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 ex & metr, const exvector & v, bool discardable = false);
+ clifford(unsigned char rl, const ex & metr, std::auto_ptr<exvector> vp);
// functions overriding virtual functions from base classes
protected:
// non-virtual functions in this class
public:
- unsigned char get_representation_label() const {return representation_label;}
+ 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 (should be of class tensmetric or a derived class, or a symmetric matrix)
+ * @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: makes 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, coincides 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 (should be of class tensmetric or a derived class, or a symmetric matrix)
+ * @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__