BOSS 7.0.4
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDiracSpinor Class Reference

#include <EvtDiracSpinor.hh>

Public Member Functions

 EvtDiracSpinor ()
 
 EvtDiracSpinor (const EvtComplex &sp0, const EvtComplex &sp1, const EvtComplex &sp2, const EvtComplex &sp3)
 
virtual ~EvtDiracSpinor ()
 
 EvtDiracSpinor (const EvtDiracSpinor &dspinor)
 
EvtDiracSpinoroperator= (const EvtDiracSpinor &dspinor)
 
EvtDiracSpinoroperator+= (const EvtDiracSpinor &u2)
 
EvtDiracSpinoroperator-= (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 EvtComplexget_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
 

Friends

EvtDiracSpinor rotateEuler (const EvtDiracSpinor &sp, double alpha, double beta, double gamma)
 
EvtDiracSpinor boostTo (const EvtDiracSpinor &sp, const EvtVector4R p4)
 
EvtDiracSpinor boostTo (const EvtDiracSpinor &sp, const EvtVector3R boost)
 
EvtVector4C EvtLeptonVACurrent (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtVector4C EvtLeptonVCurrent (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtVector4C EvtLeptonACurrent (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtComplex EvtLeptonSCurrent (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtComplex EvtLeptonPCurrent (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtTensor4C EvtLeptonTCurrent (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtTensor4C EvtLeptonTg5Current (const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
 
EvtDiracSpinor operator+ (const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
 
EvtDiracSpinor operator- (const EvtDiracSpinor &u1, const EvtDiracSpinor &u2)
 
EvtDiracSpinor operator* (const EvtComplex &c, const EvtDiracSpinor &d)
 
std::ostream & operator<< (std::ostream &s, const EvtDiracSpinor &c)
 

Detailed Description

Definition at line 52 of file EvtDiracSpinor.hh.

Constructor & Destructor Documentation

◆ EvtDiracSpinor() [1/3]

EvtDiracSpinor::EvtDiracSpinor ( )
inline

Definition at line 111 of file EvtDiracSpinor.hh.

111 {
112
113 spinor[0]=EvtComplex(); spinor[1]=EvtComplex();
114 spinor[2]=EvtComplex(); spinor[3]=EvtComplex();
115
116}

◆ EvtDiracSpinor() [2/3]

EvtDiracSpinor::EvtDiracSpinor ( const EvtComplex sp0,
const EvtComplex sp1,
const EvtComplex sp2,
const EvtComplex sp3 
)

Definition at line 35 of file EvtDiracSpinor.cc.

36 {
37 set(sp0,sp1,sp2,sp3);
38}
void set(const EvtComplex &sp0, const EvtComplex &sp1, const EvtComplex &sp2, const EvtComplex &sp3)

◆ ~EvtDiracSpinor()

EvtDiracSpinor::~EvtDiracSpinor ( )
virtual

Definition at line 33 of file EvtDiracSpinor.cc.

33{}

◆ EvtDiracSpinor() [3/3]

EvtDiracSpinor::EvtDiracSpinor ( const EvtDiracSpinor dspinor)
inline

Definition at line 118 of file EvtDiracSpinor.hh.

118 {
119
120 spinor[0]=dspinor.spinor[0];
121 spinor[1]=dspinor.spinor[1];
122 spinor[2]=dspinor.spinor[2];
123 spinor[3]=dspinor.spinor[3];
124
125}

Member Function Documentation

◆ adjoint()

EvtDiracSpinor EvtDiracSpinor::adjoint ( ) const

Definition at line 387 of file EvtDiracSpinor.cc.

388{
389 EvtDiracSpinor d = this->conj(); // first conjugate, then multiply with gamma0
391 EvtDiracSpinor result; // automatically initialized to 0
392
393 for (int i=0; i<4; ++i)
394 for (int j=0; j<4; ++j)
395 result.spinor[i] += d.spinor[j] * g0.gamma[i][j];
396
397 return result;
398}
EvtDiracSpinor conj() const
static const EvtGammaMatrix & g0()

Referenced by EvtLambdaP_BarGamma::decay().

◆ applyBoostTo() [1/2]

void EvtDiracSpinor::applyBoostTo ( const EvtVector3R boost)

Definition at line 107 of file EvtDiracSpinor.cc.

107 {
108
109 double bx,by,bz,gamma,b2,f1,f2;
110 EvtComplex spinorp[4];
111
112 bx=boost.get(0);
113 by=boost.get(1);
114 bz=boost.get(2);
115 b2=bx*bx+by*by+bz*bz;
116
117 if (b2==0.0){
118 return;
119 }
120
121 assert(b2<1.0);
122
123 gamma=1.0/sqrt(1-b2);
124
125 f1=sqrt((gamma+1.0)/2.0);
126 f2=f1*gamma/(gamma+1.0);
127
128 spinorp[0]=f1*spinor[0]+f2*bz*spinor[2]+
129 f2*EvtComplex(bx,-by)*spinor[3];
130 spinorp[1]=f1*spinor[1]+f2*EvtComplex(bx,by)*spinor[2]-
131 f2*bz*spinor[3];
132 spinorp[2]=f2*bz*spinor[0]+f2*EvtComplex(bx,-by)*spinor[1]+
133 f1*spinor[2];
134 spinorp[3]=f2*EvtComplex(bx,by)*spinor[0]-
135 f2*bz*spinor[1]+f1*spinor[3];
136
137 spinor[0]=spinorp[0];
138 spinor[1]=spinorp[1];
139 spinor[2]=spinorp[2];
140 spinor[3]=spinorp[3];
141
142 return;
143}
TFile * f1
double get(int i) const
Definition: EvtVector3R.hh:126

◆ applyBoostTo() [2/2]

void EvtDiracSpinor::applyBoostTo ( const EvtVector4R p4)

Definition at line 93 of file EvtDiracSpinor.cc.

93 {
94
95 double e=p4.get(0);
96
97 EvtVector3R boost(p4.get(1)/e,p4.get(2)/e,p4.get(3)/e);
98
99 applyBoostTo(boost);
100
101 return;
102
103}
void applyBoostTo(const EvtVector4R &p4)
double get(int i) const
Definition: EvtVector4R.hh:179

Referenced by EvtRaritaSchwinger::applyBoostTo(), and applyBoostTo().

◆ applyRotateEuler()

void EvtDiracSpinor::applyRotateEuler ( double  alpha,
double  beta,
double  gamma 
)

Definition at line 145 of file EvtDiracSpinor.cc.

146 {
147
148 EvtComplex retVal[4];
149
150 double cb2=cos(0.5*beta);
151 double sb2=sin(0.5*beta);
152 double capg2=cos(0.5*(alpha+gamma));
153 double camg2=cos(0.5*(alpha-gamma));
154 double sapg2=sin(0.5*(alpha+gamma));
155 double samg2=sin(0.5*(alpha-gamma));
156
157 EvtComplex m11(cb2*capg2,-cb2*sapg2);
158 EvtComplex m12(-sb2*camg2,sb2*samg2);
159 EvtComplex m21(sb2*camg2,sb2*samg2);
160 EvtComplex m22(cb2*capg2,cb2*sapg2);
161
162 retVal[0]=m11*spinor[0]+m12*spinor[1];
163 retVal[1]=m21*spinor[0]+m22*spinor[1];
164 retVal[2]=m11*spinor[2]+m12*spinor[3];
165 retVal[3]=m21*spinor[2]+m22*spinor[3];
166
167 spinor[0]=retVal[0];
168 spinor[1]=retVal[1];
169 spinor[2]=retVal[2];
170 spinor[3]=retVal[3];
171
172 return;
173}
const double alpha
double sin(const BesAngle a)
double cos(const BesAngle a)

Referenced by operator*(), and EvtDiracParticle::rotateToHelicityBasis().

◆ conj()

EvtDiracSpinor EvtDiracSpinor::conj ( ) const

Definition at line 177 of file EvtDiracSpinor.cc.

177 {
178
180
181 for ( int i=0; i<4; i++)
182 sp.set_spinor(i,::conj(spinor[i]));
183
184 return sp;
185}
void set_spinor(int i, const EvtComplex &sp)

Referenced by adjoint(), and conj().

◆ get_spinor()

const EvtComplex & EvtDiracSpinor::get_spinor ( int  i) const

Definition at line 60 of file EvtDiracSpinor.cc.

60 {
61
62 return spinor[i];
63
64}

Referenced by EvtRaritaSchwinger::setSpinor().

◆ operator+=()

EvtDiracSpinor & EvtDiracSpinor::operator+= ( const EvtDiracSpinor u2)
inline

Definition at line 138 of file EvtDiracSpinor.hh.

138 {
139
140 spinor[0]+=u2.spinor[0];
141 spinor[1]+=u2.spinor[1];
142 spinor[2]+=u2.spinor[2];
143 spinor[3]+=u2.spinor[3];
144
145 return *this;
146}

◆ operator-=()

EvtDiracSpinor & EvtDiracSpinor::operator-= ( const EvtDiracSpinor u2)
inline

Definition at line 155 of file EvtDiracSpinor.hh.

155 {
156
157 spinor[0]-=u2.spinor[0];
158 spinor[1]-=u2.spinor[1];
159 spinor[2]-=u2.spinor[2];
160 spinor[3]-=u2.spinor[3];
161
162 return *this;
163}

◆ operator=()

EvtDiracSpinor & EvtDiracSpinor::operator= ( const EvtDiracSpinor dspinor)
inline

Definition at line 127 of file EvtDiracSpinor.hh.

127 {
128
129 spinor[0]=dspinor.spinor[0];
130 spinor[1]=dspinor.spinor[1];
131 spinor[2]=dspinor.spinor[2];
132 spinor[3]=dspinor.spinor[3];
133
134 return *this;
135
136}

◆ set()

void EvtDiracSpinor::set ( const EvtComplex sp0,
const EvtComplex sp1,
const EvtComplex sp2,
const EvtComplex sp3 
)

◆ set_spinor()

void EvtDiracSpinor::set_spinor ( int  i,
const EvtComplex sp 
)

Definition at line 46 of file EvtDiracSpinor.cc.

46 {
47
48 spinor[i]=sp;
49}

Referenced by conj().

Friends And Related Function Documentation

◆ boostTo [1/2]

EvtDiracSpinor boostTo ( const EvtDiracSpinor sp,
const EvtVector3R  boost 
)
friend

Definition at line 84 of file EvtDiracSpinor.cc.

85 {
86
87 EvtDiracSpinor tmp(sp);
88 tmp.applyBoostTo(boost);
89 return tmp;
90
91}

◆ boostTo [2/2]

EvtDiracSpinor boostTo ( const EvtDiracSpinor sp,
const EvtVector4R  p4 
)
friend

Definition at line 75 of file EvtDiracSpinor.cc.

76 {
77
78 EvtDiracSpinor tmp(sp);
79 tmp.applyBoostTo(p4);
80 return tmp;
81
82}

◆ EvtLeptonACurrent

EvtVector4C EvtLeptonACurrent ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 236 of file EvtDiracSpinor.cc.

236 {
237
238 EvtVector4C temp;
239
240 EvtGammaMatrix mat;
241
242 // no conjugate here; done in the multiplication
243 // yes this is stupid and fooled me to for a long time (ryd)
244
246 temp.set(0,d*(mat*dp));
247
249 temp.set(1,d*(mat*dp));
250
252 temp.set(2,d*(mat*dp));
253
255 temp.set(3,d*(mat*dp));
256
257 return temp;
258}
static const EvtGammaMatrix & va1()
static const EvtGammaMatrix & v0()
static const EvtGammaMatrix & va3()
static const EvtGammaMatrix & v2()
static const EvtGammaMatrix & va0()
static const EvtGammaMatrix & va2()
static const EvtGammaMatrix & v1()
static const EvtGammaMatrix & v3()
void set(int, const EvtComplex &)
Definition: EvtVector4C.hh:109

◆ EvtLeptonPCurrent

EvtComplex EvtLeptonPCurrent ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 272 of file EvtDiracSpinor.cc.

272 {
273
274 EvtComplex temp;
275
276 // no conjugate here; done in the multiplication
277 // yes this is stupid and fooled me to for a long time (ryd)
279 temp=d*(m*dp);
280
281 return temp;
282}
static const EvtGammaMatrix & g5()

◆ EvtLeptonSCurrent

EvtComplex EvtLeptonSCurrent ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 260 of file EvtDiracSpinor.cc.

260 {
261
262 EvtComplex temp;
263
264 // no conjugate here; done in the multiplication
265 // yes this is stupid and fooled me to for a long time (ryd)
266
267 temp=d*(EvtGammaMatrix::g0()*dp);
268
269 return temp;
270}

◆ EvtLeptonTCurrent

EvtTensor4C EvtLeptonTCurrent ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 284 of file EvtDiracSpinor.cc.

284 {
285
286 EvtTensor4C temp;
287 temp.zero();
288 EvtComplex i2(0,0.5);
289
290 static EvtGammaMatrix mat01=EvtGammaMatrix::g0()*
293 static EvtGammaMatrix mat02=EvtGammaMatrix::g0()*
296 static EvtGammaMatrix mat03=EvtGammaMatrix::g0()*
299 static EvtGammaMatrix mat12=EvtGammaMatrix::g0()*
302 static EvtGammaMatrix mat13=EvtGammaMatrix::g0()*
305 static EvtGammaMatrix mat23=EvtGammaMatrix::g0()*
308
309
310 temp.set(0,1,i2*(d*(mat01*dp)));
311 temp.set(1,0,-temp.get(0,1));
312
313 temp.set(0,2,i2*(d*(mat02*dp)));
314 temp.set(2,0,-temp.get(0,2));
315
316 temp.set(0,3,i2*(d*(mat03*dp)));
317 temp.set(3,0,-temp.get(0,3));
318
319 temp.set(1,2,i2*(d*(mat12*dp)));
320 temp.set(2,1,-temp.get(1,2));
321
322 temp.set(1,3,i2*(d*(mat13*dp)));
323 temp.set(3,1,-temp.get(1,3));
324
325 temp.set(2,3,i2*(d*(mat23*dp)));
326 temp.set(3,2,-temp.get(2,3));
327
328 return temp;
329}
static const EvtGammaMatrix & g2()
static const EvtGammaMatrix & g1()
static const EvtGammaMatrix & g3()
void set(int i, int j, const EvtComplex &c)
Definition: EvtTensor4C.hh:122
const EvtComplex & get(int i, int j) const
Definition: EvtTensor4C.hh:126

◆ EvtLeptonTg5Current

EvtTensor4C EvtLeptonTg5Current ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 331 of file EvtDiracSpinor.cc.

331 {//sigma^{mu,nu} gamma_5
332
333 EvtTensor4C temp;
334 temp.zero();
335 EvtComplex i2(0,0.5);
336
337 static EvtGammaMatrix mat01=EvtGammaMatrix::g0()*
340 static EvtGammaMatrix mat02=EvtGammaMatrix::g0()*
343 static EvtGammaMatrix mat03=EvtGammaMatrix::g0()*
346 static EvtGammaMatrix mat12=EvtGammaMatrix::g0()*
349 static EvtGammaMatrix mat13=EvtGammaMatrix::g0()*
352 static EvtGammaMatrix mat23=EvtGammaMatrix::g0()*
355
356
357 temp.set(0,1,i2*(d*(mat01*dp)));
358 temp.set(1,0,-temp.get(0,1));
359
360 temp.set(0,2,i2*(d*(mat02*dp)));
361 temp.set(2,0,-temp.get(0,2));
362
363 temp.set(0,3,i2*(d*(mat03*dp)));
364 temp.set(3,0,-temp.get(0,3));
365
366 temp.set(1,2,i2*(d*(mat12*dp)));
367 temp.set(2,1,-temp.get(1,2));
368
369 temp.set(1,3,i2*(d*(mat13*dp)));
370 temp.set(3,1,-temp.get(1,3));
371
372 temp.set(2,3,i2*(d*(mat23*dp)));
373 temp.set(3,2,-temp.get(2,3));
374
375 return temp;
376}

◆ EvtLeptonVACurrent

EvtVector4C EvtLeptonVACurrent ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 187 of file EvtDiracSpinor.cc.

187 {
188
189 //Old code; below is a new specialized code that does it more efficiently.
190 //EvtGammaMatrix mat;
191 //EvtVector4C temp;
192 //mat.va0();
193 //temp.set(0,d*(mat*dp));
194 //mat.va1();
195 //temp.set(1,d*(mat*dp));
196 //mat.va2();
197 //temp.set(2,d*(mat*dp));
198 //mat.va3();
199 //temp.set(3,d*(mat*dp));
200 //return temp;
201
202
203 EvtComplex u02=::conj(d.spinor[0]-d.spinor[2]);
204 EvtComplex u13=::conj(d.spinor[1]-d.spinor[3]);
205
206 EvtComplex v02=dp.spinor[0]-dp.spinor[2];
207 EvtComplex v13=dp.spinor[1]-dp.spinor[3];
208
209 EvtComplex a=u02*v02;
210 EvtComplex b=u13*v13;
211
212 EvtComplex c=u02*v13;
213 EvtComplex e=u13*v02;
214
215 return EvtVector4C(a+b,-(c+e),EvtComplex(0,1)*(c-e),b-a);
216
217
218}

◆ EvtLeptonVCurrent

EvtVector4C EvtLeptonVCurrent ( const EvtDiracSpinor d,
const EvtDiracSpinor dp 
)
friend

Definition at line 220 of file EvtDiracSpinor.cc.

220 {
221
222 EvtVector4C temp;
223
224 // no conjugate here; done in the multiplication
225 // yes this is stupid and fooled me to for a long time (ryd)
226
227 temp.set(0,d*(EvtGammaMatrix::v0()*dp));
228 temp.set(1,d*(EvtGammaMatrix::v1()*dp));
229 temp.set(2,d*(EvtGammaMatrix::v2()*dp));
230 temp.set(3,d*(EvtGammaMatrix::v3()*dp));
231
232 return temp;
233}

◆ operator*

EvtDiracSpinor operator* ( const EvtComplex c,
const EvtDiracSpinor d 
)
friend

Definition at line 378 of file EvtDiracSpinor.cc.

378 {
379 EvtDiracSpinor result;
380 result.spinor[0] = c*d.spinor[0];
381 result.spinor[1] = c*d.spinor[1];
382 result.spinor[2] = c*d.spinor[2];
383 result.spinor[3] = c*d.spinor[3];
384 return result;
385 }

◆ operator+

EvtDiracSpinor operator+ ( const EvtDiracSpinor u1,
const EvtDiracSpinor u2 
)
friend

Definition at line 148 of file EvtDiracSpinor.hh.

149 {
150
151 return EvtDiracSpinor(u1)+=u2;
152
153}

◆ operator-

EvtDiracSpinor operator- ( const EvtDiracSpinor u1,
const EvtDiracSpinor u2 
)
friend

Definition at line 165 of file EvtDiracSpinor.hh.

166 {
167
168 return EvtDiracSpinor(u1)-=u2;
169
170}

◆ operator<<

std::ostream & operator<< ( std::ostream &  s,
const EvtDiracSpinor c 
)
friend

◆ rotateEuler

EvtDiracSpinor rotateEuler ( const EvtDiracSpinor sp,
double  alpha,
double  beta,
double  gamma 
)
friend

Definition at line 66 of file EvtDiracSpinor.cc.

67 {
68
69 EvtDiracSpinor tmp(sp);
70 tmp.applyRotateEuler(alpha,beta,gamma);
71 return tmp;
72
73}

The documentation for this class was generated from the following files: