]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TEvtGen/EvtGen/EvtGenBase/EvtDiracSpinor.hh
Converting TEvtGen to native cmake
[u/mrichter/AliRoot.git] / TEvtGen / EvtGen / EvtGenBase / EvtDiracSpinor.hh
diff --git a/TEvtGen/EvtGen/EvtGenBase/EvtDiracSpinor.hh b/TEvtGen/EvtGen/EvtGenBase/EvtDiracSpinor.hh
new file mode 100644 (file)
index 0000000..251732e
--- /dev/null
@@ -0,0 +1,156 @@
+//--------------------------------------------------------------------------
+//
+// Environment:
+//      This software is part of the EvtGen package developed jointly
+//      for the BaBar and CLEO collaborations.  If you use all or part
+//      of it, please give an appropriate acknowledgement.
+//
+// Copyright Information: See EvtGen/COPYRIGHT
+//      Copyright (C) 1998      Caltech, UCSB
+//
+// Module: EvtGen/EvtDiracSpinor.hh
+//
+// Description:Class to manipulate dirac spinors
+//
+// Modification history:
+//
+//    DJL/RYD     September 25, 1996         Module created
+//
+//------------------------------------------------------------------------
+
+#ifndef EVTDIRACSPINOR_HH
+#define EVTDIRACSPINOR_HH
+
+#include "EvtGenBase/EvtComplex.hh"
+#include "EvtGenBase/EvtVector4R.hh"
+#include "EvtGenBase/EvtVector3R.hh"
+
+class EvtTensor4C;
+class EvtVector4C;
+class EvtDiracSpinor ;
+
+
+class EvtDiracSpinor {
+
+  friend EvtDiracSpinor rotateEuler(const EvtDiracSpinor& sp,
+                                double alpha,double beta,double gamma);
+  friend EvtDiracSpinor boostTo(const EvtDiracSpinor& sp,
+                            const EvtVector4R p4);
+  friend EvtDiracSpinor boostTo(const EvtDiracSpinor& sp,
+                            const EvtVector3R boost);  
+  friend EvtVector4C EvtLeptonVACurrent
+       (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
+  friend EvtVector4C EvtLeptonVCurrent 
+       (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
+  friend EvtVector4C EvtLeptonACurrent 
+       (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
+  friend EvtComplex  EvtLeptonSCurrent 
+       (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
+  friend EvtComplex  EvtLeptonPCurrent 
+       (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
+  friend EvtTensor4C  EvtLeptonTCurrent 
+       (const EvtDiracSpinor& d,const EvtDiracSpinor& dp);
+  friend EvtDiracSpinor operator+(const EvtDiracSpinor& u1,
+                                 const EvtDiracSpinor& u2); 
+  friend EvtDiracSpinor operator-(const EvtDiracSpinor& u1,
+                                 const EvtDiracSpinor& u2); 
+  friend EvtDiracSpinor operator*(const EvtComplex& c,
+                                 const EvtDiracSpinor& d);
+
+  friend EvtComplex operator*(const EvtDiracSpinor& d ,
+                              const EvtDiracSpinor& dp ) ;
+  friend std::ostream& operator<<(std::ostream& s, const EvtDiracSpinor& c);  
+
+public:
+
+  inline EvtDiracSpinor();
+  EvtDiracSpinor(const EvtComplex& sp0,const EvtComplex& sp1,
+                const EvtComplex& sp2,const EvtComplex& sp3);
+  virtual ~EvtDiracSpinor();
+  inline EvtDiracSpinor(const EvtDiracSpinor& dspinor);
+  inline EvtDiracSpinor& operator=(const EvtDiracSpinor& dspinor);
+
+  inline EvtDiracSpinor& operator+=(const EvtDiracSpinor& u2);
+  inline EvtDiracSpinor& operator-=(const EvtDiracSpinor& u2);
+
+  void set(const EvtComplex& sp0,const EvtComplex& sp1,
+          const EvtComplex& sp2,const EvtComplex& sp3);
+  void set_spinor(int i,const EvtComplex& sp);
+  const EvtComplex& get_spinor(int i) const; 
+  EvtDiracSpinor conj() const;
+  void applyRotateEuler(double alpha,double beta,double gamma);
+  void applyBoostTo(const EvtVector4R& p4);
+  void applyBoostTo(const EvtVector3R& boost);
+  EvtDiracSpinor adjoint() const;
+  
+private:
+
+  EvtComplex spinor[4];
+
+};
+
+EvtDiracSpinor::EvtDiracSpinor(){
+
+  spinor[0]=EvtComplex(); spinor[1]=EvtComplex();
+  spinor[2]=EvtComplex(); spinor[3]=EvtComplex();
+
+}
+
+EvtDiracSpinor::EvtDiracSpinor(const EvtDiracSpinor& dspinor){
+
+  spinor[0]=dspinor.spinor[0];
+  spinor[1]=dspinor.spinor[1];
+  spinor[2]=dspinor.spinor[2];
+  spinor[3]=dspinor.spinor[3];
+
+}
+
+EvtDiracSpinor& EvtDiracSpinor::operator=(const EvtDiracSpinor& dspinor){
+
+  spinor[0]=dspinor.spinor[0];
+  spinor[1]=dspinor.spinor[1];
+  spinor[2]=dspinor.spinor[2];
+  spinor[3]=dspinor.spinor[3];
+
+  return *this;
+
+}
+
+inline EvtDiracSpinor& EvtDiracSpinor::operator+=(const EvtDiracSpinor& u2){
+
+  spinor[0]+=u2.spinor[0];
+  spinor[1]+=u2.spinor[1];
+  spinor[2]+=u2.spinor[2];
+  spinor[3]+=u2.spinor[3];
+  
+  return *this; 
+}
+
+inline EvtDiracSpinor operator+(const EvtDiracSpinor& u1,
+                               const EvtDiracSpinor& u2){
+  
+  return EvtDiracSpinor(u1)+=u2;
+
+}
+
+inline EvtDiracSpinor& EvtDiracSpinor::operator-=(const EvtDiracSpinor& u2){
+
+  spinor[0]-=u2.spinor[0];
+  spinor[1]-=u2.spinor[1];
+  spinor[2]-=u2.spinor[2];
+  spinor[3]-=u2.spinor[3];
+  
+  return *this; 
+}
+
+inline EvtDiracSpinor operator-(const EvtDiracSpinor& u1,
+                               const EvtDiracSpinor& u2){
+  
+  return EvtDiracSpinor(u1)-=u2;
+
+}
+
+#endif
+
+