BOSS 7.0.8
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtRaritaSchwingerParticle.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtRaritaSchwingerParticle.cc
12//
13// Description: Class to describe spin 1/2 particles.
14//
15// Modification history:
16//
17// RYD August 9, 2000 Module created
18//
19//------------------------------------------------------------------------
20//
22#include <stdlib.h>
23#include <iostream>
24#include <math.h>
29#include "EvtGenBase/EvtPDL.hh"
32using std::endl;
33
35}
36
37
39
40 return;
41
42}
43
45
46 _validP4=true;
47 setp(p4);
48 setpart_num(id);
49
50 if (EvtPDL::getStdHep(id)==0){
51 report(ERROR,"EvtGen") << "Error in EvtRaritaSchwingerParticle::init, part_n="
52 << id.getId()<<endl;
53 ::abort();
54 }
55
56 static EvtVector4R e1(0.0,1.0,0.0,0.0);
57 static EvtVector4R e2(0.0,0.0,1.0,0.0);
58 static EvtVector4R e3(0.0,0.0,0.0,1.0);
59
60
61 if (EvtPDL::getStdHep(id)>0){
62
63 EvtDiracSpinor u1,u2;
64
65 u1.set(EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0),
66 EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
67 u2.set(EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0),
68 EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
69
70
71
72 _spinorRest[0]=dirProd(e3,u1+u2);
73 _spinorRest[1]=dirProd(e1+EvtComplex(0.0,1.0)*e2,u1);
74 _spinorRest[2]=dirProd(e1-EvtComplex(0.0,1.0)*e2,u2);
75 _spinorRest[3]=dirProd(e1,(u1+u2))+dirProd(EvtComplex(0.0,1.0)*e2,(u1-u2));
76
77 _spinor[0]=boostTo(_spinorRest[0],p4);
78 _spinor[1]=boostTo(_spinorRest[1],p4);
79 _spinor[2]=boostTo(_spinorRest[2],p4);
80 _spinor[3]=boostTo(_spinorRest[3],p4);
81
82 }
83 else{
84
85 EvtDiracSpinor u1,u2;
86
87 u1.set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
88 EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0));
89 u2.set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
90 EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0));
91
92
93
94 _spinorRest[0]=dirProd(e3,(u1+u2));
95 _spinorRest[1]=dirProd(e1+EvtComplex(0.0,1.0)*e2,u1);
96 _spinorRest[2]=dirProd(e1-EvtComplex(0.0,1.0)*e2,u2);
97 _spinorRest[3]=dirProd(e1,(u1+u2))+dirProd(EvtComplex(0.0,1.0)*e2,(u1-u2));
98
99 _spinor[0]=boostTo(_spinorRest[0],p4);
100 _spinor[1]=boostTo(_spinorRest[1],p4);
101 _spinor[2]=boostTo(_spinorRest[2],p4);
102 _spinor[3]=boostTo(_spinorRest[3],p4);
103
104 }
105
106 setLifetime();
107}
108
109
111
112 return _spinor[i];
113
114}
115
117
118 return _spinorRest[i];
119
120}
121
122
123
125
126 double sqmt2=sqrt(2.0*(this->getP4().mass()));
127
128 EvtDiracSpinor spplus;
129 EvtDiracSpinor spminus;
130
131 if (EvtPDL::getStdHep(getId())>0){
132 spplus.set(1.0,0.0,0.0,0.0);
133 spminus.set(0.0,1.0,0.0,0.0);
134 } else {
135 spplus.set(0.0,0.0,1.0,0.0);
136 spminus.set(0.0,0.0,0.0,1.0);
137 }
138
139 EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
140 EvtVector4C ezero(0.0,0.0,0.0,1.0);
141 EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
142
143 EvtRaritaSchwinger sppp=dirProd(eplus,spplus);
144 EvtRaritaSchwinger spp=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
145 dirProd(sqrt(1.0/3.0)*eplus,spminus);
146 EvtRaritaSchwinger spm=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
147 dirProd(sqrt(1.0/3.0)*eminus,spplus);
148 EvtRaritaSchwinger spmm=dirProd(eminus,spminus);
149
150 //
151
153 R.SetDim(4);
154
155
156 for ( int i=0; i<4; i++) {
157 R.Set(0,i,(sppp*_spinorRest[i])/sqmt2);
158 R.Set(1,i,(spp*_spinorRest[i])/sqmt2);
159 R.Set(2,i,(spm*_spinorRest[i])/sqmt2);
160 R.Set(3,i,(spmm*_spinorRest[i])/sqmt2);
161 }
162
163 return R;
164
165}
166
167
169 double beta,
170 double gamma) const{
171
172 EvtDiracSpinor spplus;
173 EvtDiracSpinor spminus;
174
175 if (EvtPDL::getStdHep(getId())>0){
176 spplus.set(1.0,0.0,0.0,0.0);
177 spminus.set(0.0,1.0,0.0,0.0);
178 } else {
179 spplus.set(0.0,0.0,1.0,0.0);
180 spminus.set(0.0,0.0,0.0,1.0);
181 }
182
183 EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
184 EvtVector4C ezero(0.0,0.0,0.0,1.0);
185 EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
186
187 EvtRaritaSchwinger sppp=dirProd(eplus,spplus);
188 EvtRaritaSchwinger spp=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
189 dirProd(sqrt(1.0/3.0)*eplus,spminus);
190 EvtRaritaSchwinger spm=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
191 dirProd(sqrt(1.0/3.0)*eminus,spplus);
192 EvtRaritaSchwinger spmm=dirProd(eminus,spminus);
193 //
194
195 sppp.applyRotateEuler(alpha,beta,gamma);
196 spp.applyRotateEuler(alpha,beta,gamma);
197 spm.applyRotateEuler(alpha,beta,gamma);
198 spmm.applyRotateEuler(alpha,beta,gamma);
199
201 R.SetDim(4);
202
203 double sqmt2=sqrt(2.0*(this->getP4().mass()));
204
205 for ( int i=0; i<4; i++) {
206 R.Set(0,i,(sppp*_spinorRest[i])/sqmt2);
207 R.Set(1,i,(spp*_spinorRest[i])/sqmt2);
208 R.Set(2,i,(spm*_spinorRest[i])/sqmt2);
209 R.Set(3,i,(spmm*_spinorRest[i])/sqmt2);
210 }
211
212 return R;
213
214}
215
Double_t e1
Double_t e2
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
EvtRaritaSchwinger dirProd(EvtVector4R v, EvtDiracSpinor u)
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ ERROR
Definition: EvtReport.hh:49
const double alpha
void set(const EvtComplex &sp0, const EvtComplex &sp1, const EvtComplex &sp2, const EvtComplex &sp3)
Definition: EvtId.hh:27
static int getStdHep(EvtId id)
Definition: EvtPDL.hh:56
EvtId getId() const
Definition: EvtParticle.cc:113
void setLifetime()
Definition: EvtParticle.cc:93
const EvtVector4R & getP4() const
Definition: EvtParticle.cc:121
void setp(double e, double px, double py, double pz)
Definition: EvtParticle.hh:398
double mass() const
Definition: EvtParticle.cc:127
void setpart_num(EvtId particle_number)
Definition: EvtParticle.hh:400
EvtRaritaSchwinger spRS(int) const
EvtRaritaSchwinger spRSParent(int) const
void init(EvtId id, const EvtVector4R &p4)
EvtSpinDensity rotateToHelicityBasis() const
void applyRotateEuler(double alpha, double beta, double gamma)