--- /dev/null
+//--------------------------------------------------------------------------
+//
+// 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
+
+