00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "EvtGenBase/EvtPatches.hh"
00022 #include <stdlib.h>
00023 #include <iostream>
00024 #include <math.h>
00025 #include "EvtGenBase/EvtComplex.hh"
00026 #include "EvtGenBase/EvtVector4R.hh"
00027 #include "EvtGenBase/EvtTensor4C.hh"
00028 #include "EvtGenBase/EvtVector4C.hh"
00029 #include "EvtGenBase/EvtTensorParticle.hh"
00030 #include "EvtGenBase/EvtReport.hh"
00031
00032 EvtTensorParticle::~EvtTensorParticle(){}
00033
00034 void EvtTensorParticle::init(EvtId part_n,const EvtVector4R& p4){
00035
00036 init(part_n,p4.get(0),p4.get(1)
00037 ,p4.get(2),p4.get(3));
00038
00039 setLifetime();
00040
00041
00042 }
00043
00044 void EvtTensorParticle::init(EvtId part_n,double e,double px,double py,double pz){
00045
00046 _validP4=true;
00047 setp(e,px,py,pz);
00048 setpart_num(part_n);
00049
00050 eps[0].setdiag(0.0,-1.0/sqrt(6.0),-1.0/sqrt(6.0),
00051 2.0/sqrt(6.0));
00052 eps[1].setdiag(0.0,1.0/sqrt(2.0),-1.0/sqrt(2.0),0.0);
00053 eps[2].setdiag(0.0,0.0,0.0,0.0);
00054 eps[3].setdiag(0.0,0.0,0.0,0.0);
00055 eps[4].setdiag(0.0,0.0,0.0,0.0);
00056
00057 eps[2].set(1,2,EvtComplex(1.0/sqrt(2.0),0.0));
00058 eps[2].set(2,1,EvtComplex(1.0/sqrt(2.0),0.0));
00059 eps[3].set(1,3,EvtComplex(1.0/sqrt(2.0),0.0));
00060 eps[3].set(3,1,EvtComplex(1.0/sqrt(2.0),0.0));
00061 eps[4].set(2,3,EvtComplex(1.0/sqrt(2.0),0.0));
00062 eps[4].set(3,2,EvtComplex(1.0/sqrt(2.0),0.0));
00063
00064 setLifetime();
00065
00066 }
00067
00068 EvtTensor4C EvtTensorParticle::epsTensorParent(int i) const {
00069
00070 EvtTensor4C temp=eps[i];
00071
00072 temp.applyBoostTo(this->getP4());
00073 return temp;
00074
00075 }
00076
00077
00078 EvtTensor4C EvtTensorParticle::epsTensor(int i) const {
00079
00080 return eps[i];
00081
00082 }
00083
00084
00085
00086 EvtSpinDensity EvtTensorParticle::rotateToHelicityBasis() const{
00087
00088
00089 static EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00090 static EvtVector4C ezero(0.0,0.0,0.0,1.0);
00091 static EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00092
00093 static EvtTensor4C dPpp(directProd(eplus,eplus));
00094 static EvtTensor4C dPp0(directProd(eplus,ezero));
00095 static EvtTensor4C dP0p(directProd(ezero,eplus));
00096 static EvtTensor4C dPpm(directProd(eplus,eminus));
00097 static EvtTensor4C dP00(directProd(ezero,ezero));
00098 static EvtTensor4C dPmp(directProd(eminus,eplus));
00099 static EvtTensor4C dPmm(directProd(eminus,eminus));
00100 static EvtTensor4C dPm0(directProd(eminus,ezero));
00101 static EvtTensor4C dP0m(directProd(ezero,eminus));
00102
00103 static EvtTensor4C es0(conj(dPpp));
00104 static EvtTensor4C es1(conj((1/sqrt(2.0))*dPp0 +(1/sqrt(2.0))*dP0p));
00105 static EvtTensor4C es2(conj((1/sqrt(6.0))*dPpm +(2/sqrt(6.0))*dP00 +(1/sqrt(6.0))*dPmp));
00106 static EvtTensor4C es3(conj((1/sqrt(2.0))*dPm0 +(1/sqrt(2.0))*dP0m));
00107 static EvtTensor4C es4(conj(dPmm));
00108
00109
00110 EvtSpinDensity R;
00111 R.SetDim(5);
00112
00113 for (int j=0; j<5; j++) {
00114 R.Set(0,j,cont(es0,eps[j]));
00115 R.Set(1,j,cont(es1,eps[j]));
00116 R.Set(2,j,cont(es2,eps[j]));
00117 R.Set(3,j,cont(es3,eps[j]));
00118 R.Set(4,j,cont(es4,eps[j]));
00119 }
00120 return R;
00121
00122 }
00123
00124
00125 EvtSpinDensity EvtTensorParticle::rotateToHelicityBasis(double alpha,
00126 double beta,
00127 double gamma) const{
00128
00129 EvtTensor4C es[5];
00130
00131 static EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00132 static EvtVector4C ezero(0.0,0.0,0.0,1.0);
00133 static EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00134
00135 eplus.applyRotateEuler(alpha,beta,gamma);
00136 ezero.applyRotateEuler(alpha,beta,gamma);
00137 eminus.applyRotateEuler(alpha,beta,gamma);
00138
00139 for (int i=0; i<5; i++) es[i].zero();
00140
00141 es[0]=directProd(eplus,eplus);
00142 es[1] =(1/sqrt(2.0))*directProd(eplus,ezero)
00143 +(1/sqrt(2.0))*directProd(ezero,eplus);
00144 es[2] =(1/sqrt(6.0))*directProd(eplus,eminus)
00145 +(2/sqrt(6.0))*directProd(ezero,ezero)
00146 +(1/sqrt(6.0))*directProd(eminus,eplus);
00147 es[3] =(1/sqrt(2.0))*directProd(eminus,ezero)
00148 +(1/sqrt(2.0))*directProd(ezero,eminus);
00149 es[4]=directProd(eminus,eminus);
00150
00151 for (int i=0; i<5; i++) es[i]=conj(es[i]);
00152
00153 EvtSpinDensity R;
00154 R.SetDim(5);
00155
00156 for (int i=0; i<5; i++)
00157 for (int j=0; j<5; j++)
00158 R.Set(i,j,cont(es[i],eps[j]));
00159
00160 return R;
00161
00162 }
00163
00164
00165
00166
00167
00168
00169
00170