Line data Source code
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 : //
21 : #include "EvtGenBase/EvtPatches.hh"
22 : #include <stdlib.h>
23 : #include <iostream>
24 : #include <math.h>
25 : #include "EvtGenBase/EvtComplex.hh"
26 : #include "EvtGenBase/EvtRaritaSchwingerParticle.hh"
27 : #include "EvtGenBase/EvtDiracSpinor.hh"
28 : #include "EvtGenBase/EvtVector4R.hh"
29 : #include "EvtGenBase/EvtPDL.hh"
30 : #include "EvtGenBase/EvtReport.hh"
31 : using std::endl;
32 :
33 0 : EvtRaritaSchwingerParticle::~EvtRaritaSchwingerParticle(){}
34 :
35 :
36 0 : EvtRaritaSchwingerParticle::EvtRaritaSchwingerParticle(){
37 :
38 0 : return;
39 :
40 0 : }
41 :
42 : void EvtRaritaSchwingerParticle::init(EvtId id,const EvtVector4R& p4){
43 :
44 0 : _validP4=true;
45 0 : setp(p4);
46 0 : setpart_num(id);
47 :
48 0 : if (EvtPDL::getStdHep(id)==0){
49 0 : report(Severity::Error,"EvtGen") << "Error in EvtRaritaSchwingerParticle::init, part_n="
50 0 : << id.getId()<<endl;
51 0 : ::abort();
52 : }
53 :
54 :
55 :
56 0 : double sqmt2=sqrt(2.0*(this->getP4().mass()));
57 :
58 0 : EvtDiracSpinor spplus;
59 0 : EvtDiracSpinor spminus;
60 :
61 0 : if (EvtPDL::getStdHep(getId())>0){
62 0 : spplus.set(sqmt2,0.0,0.0,0.0);
63 0 : spminus.set(0.0,sqmt2,0.0,0.0);
64 : } else {
65 0 : spplus.set(0.0,0.0,sqmt2,0.0);
66 0 : spminus.set(0.0,0.0,0.0,sqmt2);
67 : }
68 :
69 0 : static EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
70 0 : static EvtVector4C ezero(0.0,0.0,0.0,1.0);
71 0 : static EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
72 :
73 0 : _spinorRest[0]=dirProd(eplus,spplus);
74 0 : _spinorRest[1]=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
75 0 : dirProd(sqrt(1.0/3.0)*eplus,spminus);
76 0 : _spinorRest[2]=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
77 0 : dirProd(sqrt(1.0/3.0)*eminus,spplus);
78 0 : _spinorRest[3]=dirProd(eminus,spminus);
79 :
80 0 : _spinor[0]=boostTo(_spinorRest[0],p4);
81 0 : _spinor[1]=boostTo(_spinorRest[1],p4);
82 0 : _spinor[2]=boostTo(_spinorRest[2],p4);
83 0 : _spinor[3]=boostTo(_spinorRest[3],p4);
84 :
85 :
86 0 : setLifetime();
87 0 : }
88 :
89 :
90 : void EvtRaritaSchwingerParticle::init(EvtId id,const EvtVector4R& p4,
91 : const EvtRaritaSchwinger & prod1,
92 : const EvtRaritaSchwinger & prod2,
93 : const EvtRaritaSchwinger & prod3,
94 : const EvtRaritaSchwinger & prod4,
95 : const EvtRaritaSchwinger & rest1,
96 : const EvtRaritaSchwinger & rest2,
97 : const EvtRaritaSchwinger & rest3,
98 : const EvtRaritaSchwinger & rest4){
99 :
100 0 : _validP4=true;
101 0 : setp(p4);
102 0 : setpart_num(id);
103 :
104 0 : if (EvtPDL::getStdHep(id)==0){
105 0 : report(Severity::Error,"EvtGen") << "Error in EvtRaritaSchwingerParticle::init, part_n="
106 0 : << id.getId()<<std::endl;
107 0 : ::abort();
108 : }
109 0 : _spinorRest[0]=rest1;
110 0 : _spinorRest[1]=rest2;
111 0 : _spinorRest[2]=rest3;
112 0 : _spinorRest[3]=rest4;
113 :
114 0 : _spinor[0]=prod1;
115 0 : _spinor[1]=prod2;
116 0 : _spinor[2]=prod3;
117 0 : _spinor[3]=prod4;
118 :
119 0 : setLifetime();
120 0 : }
121 :
122 :
123 :
124 : EvtRaritaSchwinger EvtRaritaSchwingerParticle::spRSParent(int i) const {
125 :
126 0 : return _spinor[i];
127 :
128 : }
129 :
130 : EvtRaritaSchwinger EvtRaritaSchwingerParticle::spRS(int i) const {
131 :
132 0 : return _spinorRest[i];
133 :
134 : }
135 :
136 :
137 :
138 : EvtSpinDensity EvtRaritaSchwingerParticle::rotateToHelicityBasis() const{
139 :
140 0 : double sqmt2=sqrt(2.0*(this->getP4().mass()));
141 :
142 0 : EvtDiracSpinor spplus;
143 0 : EvtDiracSpinor spminus;
144 :
145 0 : if (EvtPDL::getStdHep(getId())>0){
146 0 : spplus.set(1.0,0.0,0.0,0.0);
147 0 : spminus.set(0.0,1.0,0.0,0.0);
148 : } else {
149 0 : spplus.set(0.0,0.0,1.0,0.0);
150 0 : spminus.set(0.0,0.0,0.0,1.0);
151 : }
152 :
153 0 : EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
154 0 : EvtVector4C ezero(0.0,0.0,0.0,1.0);
155 0 : EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
156 :
157 0 : EvtRaritaSchwinger sppp=dirProd(eplus,spplus);
158 0 : EvtRaritaSchwinger spp=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
159 0 : dirProd(sqrt(1.0/3.0)*eplus,spminus);
160 0 : EvtRaritaSchwinger spm=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
161 0 : dirProd(sqrt(1.0/3.0)*eminus,spplus);
162 0 : EvtRaritaSchwinger spmm=dirProd(eminus,spminus);
163 :
164 :
165 0 : EvtSpinDensity R;
166 0 : R.setDim(4);
167 :
168 :
169 0 : for ( int i=0; i<4; i++) {
170 0 : R.set(0,i,(sppp*_spinorRest[i])/sqmt2);
171 0 : R.set(1,i,(spp*_spinorRest[i])/sqmt2);
172 0 : R.set(2,i,(spm*_spinorRest[i])/sqmt2);
173 0 : R.set(3,i,(spmm*_spinorRest[i])/sqmt2);
174 : }
175 :
176 : return R;
177 :
178 0 : }
179 :
180 :
181 : EvtSpinDensity EvtRaritaSchwingerParticle::rotateToHelicityBasis(double alpha,
182 : double beta,
183 : double gamma) const{
184 :
185 0 : EvtDiracSpinor spplus;
186 0 : EvtDiracSpinor spminus;
187 :
188 0 : if (EvtPDL::getStdHep(getId())>0){
189 0 : spplus.set(1.0,0.0,0.0,0.0);
190 0 : spminus.set(0.0,1.0,0.0,0.0);
191 : } else {
192 0 : spplus.set(0.0,0.0,1.0,0.0);
193 0 : spminus.set(0.0,0.0,0.0,1.0);
194 : }
195 :
196 0 : EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
197 0 : EvtVector4C ezero(0.0,0.0,0.0,1.0);
198 0 : EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
199 :
200 0 : EvtRaritaSchwinger sppp=dirProd(eplus,spplus);
201 0 : EvtRaritaSchwinger spp=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
202 0 : dirProd(sqrt(1.0/3.0)*eplus,spminus);
203 0 : EvtRaritaSchwinger spm=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
204 0 : dirProd(sqrt(1.0/3.0)*eminus,spplus);
205 0 : EvtRaritaSchwinger spmm=dirProd(eminus,spminus);
206 :
207 :
208 0 : sppp.applyRotateEuler(alpha,beta,gamma);
209 0 : spp.applyRotateEuler(alpha,beta,gamma);
210 0 : spm.applyRotateEuler(alpha,beta,gamma);
211 0 : spmm.applyRotateEuler(alpha,beta,gamma);
212 :
213 0 : EvtSpinDensity R;
214 0 : R.setDim(4);
215 :
216 0 : double sqmt2=sqrt(2.0*(this->getP4().mass()));
217 :
218 0 : for ( int i=0; i<4; i++) {
219 0 : R.set(0,i,(sppp*_spinorRest[i])/sqmt2);
220 0 : R.set(1,i,(spp*_spinorRest[i])/sqmt2);
221 0 : R.set(2,i,(spm*_spinorRest[i])/sqmt2);
222 0 : R.set(3,i,(spmm*_spinorRest[i])/sqmt2);
223 : }
224 :
225 : return R;
226 :
227 0 : }
228 :
|