/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenBase/EvtRaritaSchwingerParticle.cc

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 //
00003 // Environment:
00004 //      This software is part of the EvtGen package developed jointly
00005 //      for the BaBar and CLEO collaborations.  If you use all or part
00006 //      of it, please give an appropriate acknowledgement.
00007 //
00008 // Copyright Information: See EvtGen/COPYRIGHT
00009 //      Copyright (C) 1998      Caltech, UCSB
00010 //
00011 // Module: EvtRaritaSchwingerParticle.cc
00012 //
00013 // Description: Class to describe spin 1/2 particles.
00014 //
00015 // Modification history:
00016 //
00017 //   RYD     August 9, 2000         Module created
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/EvtRaritaSchwingerParticle.hh"
00027 #include "EvtGenBase/EvtDiracSpinor.hh"
00028 #include "EvtGenBase/EvtVector4R.hh"
00029 #include "EvtGenBase/EvtPDL.hh"
00030 #include "EvtGenBase/EvtReport.hh"
00031 #include "EvtGenBase/EvtSpinDensity.hh"
00032 using std::endl;
00033 
00034 EvtRaritaSchwingerParticle::~EvtRaritaSchwingerParticle(){
00035 }
00036 
00037 
00038 EvtRaritaSchwingerParticle::EvtRaritaSchwingerParticle(){
00039 
00040   return;
00041   
00042 }
00043 
00044 void EvtRaritaSchwingerParticle::init(EvtId id,const EvtVector4R& p4){
00045 
00046   _validP4=true;
00047   setp(p4);
00048   setpart_num(id);
00049 
00050   if (EvtPDL::getStdHep(id)==0){
00051     report(ERROR,"EvtGen") << "Error in EvtRaritaSchwingerParticle::init, part_n="
00052                            << id.getId()<<endl;
00053     ::abort();
00054   }
00055 
00056   static EvtVector4R e1(0.0,1.0,0.0,0.0);
00057   static EvtVector4R e2(0.0,0.0,1.0,0.0);
00058   static EvtVector4R e3(0.0,0.0,0.0,1.0);
00059   
00060 
00061   if (EvtPDL::getStdHep(id)>0){  
00062 
00063     EvtDiracSpinor u1,u2;
00064 
00065     u1.set(EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0),
00066            EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
00067     u2.set(EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0),
00068            EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
00069 
00070     
00071 
00072     _spinorRest[0]=dirProd(e3,u1+u2);
00073     _spinorRest[1]=dirProd(e1+EvtComplex(0.0,1.0)*e2,u1);
00074     _spinorRest[2]=dirProd(e1-EvtComplex(0.0,1.0)*e2,u2);
00075     _spinorRest[3]=dirProd(e1,(u1+u2))+dirProd(EvtComplex(0.0,1.0)*e2,(u1-u2));
00076     
00077     _spinor[0]=boostTo(_spinorRest[0],p4);
00078     _spinor[1]=boostTo(_spinorRest[1],p4);
00079     _spinor[2]=boostTo(_spinorRest[2],p4);
00080     _spinor[3]=boostTo(_spinorRest[3],p4);
00081 
00082   }
00083   else{
00084 
00085     EvtDiracSpinor u1,u2;
00086 
00087     u1.set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
00088            EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0));
00089     u2.set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
00090            EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0));
00091 
00092     
00093 
00094     _spinorRest[0]=dirProd(e3,(u1+u2));
00095     _spinorRest[1]=dirProd(e1+EvtComplex(0.0,1.0)*e2,u1);
00096     _spinorRest[2]=dirProd(e1-EvtComplex(0.0,1.0)*e2,u2);
00097     _spinorRest[3]=dirProd(e1,(u1+u2))+dirProd(EvtComplex(0.0,1.0)*e2,(u1-u2));
00098     
00099     _spinor[0]=boostTo(_spinorRest[0],p4);
00100     _spinor[1]=boostTo(_spinorRest[1],p4);
00101     _spinor[2]=boostTo(_spinorRest[2],p4);
00102     _spinor[3]=boostTo(_spinorRest[3],p4);
00103 
00104   }
00105 
00106   setLifetime();
00107 }
00108 
00109 
00110 EvtRaritaSchwinger EvtRaritaSchwingerParticle::spRSParent(int i) const {
00111 
00112   return _spinor[i];
00113 
00114 }
00115 
00116 EvtRaritaSchwinger EvtRaritaSchwingerParticle::spRS(int i) const {
00117 
00118   return _spinorRest[i];
00119 
00120 }
00121 
00122 
00123 
00124 EvtSpinDensity EvtRaritaSchwingerParticle::rotateToHelicityBasis() const{
00125 
00126   double sqmt2=sqrt(2.0*(this->getP4().mass()));
00127   
00128   EvtDiracSpinor spplus;
00129   EvtDiracSpinor spminus;
00130       
00131   if (EvtPDL::getStdHep(getId())>0){  
00132     spplus.set(1.0,0.0,0.0,0.0);
00133     spminus.set(0.0,1.0,0.0,0.0);
00134   } else {
00135     spplus.set(0.0,0.0,1.0,0.0);
00136     spminus.set(0.0,0.0,0.0,1.0);
00137   }
00138 
00139   EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00140   EvtVector4C ezero(0.0,0.0,0.0,1.0);
00141   EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00142 
00143   EvtRaritaSchwinger sppp=dirProd(eplus,spplus);
00144   EvtRaritaSchwinger spp=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
00145     dirProd(sqrt(1.0/3.0)*eplus,spminus);
00146   EvtRaritaSchwinger spm=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
00147     dirProd(sqrt(1.0/3.0)*eminus,spplus);
00148   EvtRaritaSchwinger spmm=dirProd(eminus,spminus);
00149 
00150   //
00151 
00152   EvtSpinDensity R;
00153   R.SetDim(4);
00154 
00155 
00156   for ( int i=0; i<4; i++) {
00157     R.Set(0,i,(sppp*_spinorRest[i])/sqmt2);
00158     R.Set(1,i,(spp*_spinorRest[i])/sqmt2);
00159     R.Set(2,i,(spm*_spinorRest[i])/sqmt2);
00160     R.Set(3,i,(spmm*_spinorRest[i])/sqmt2);
00161   }
00162 
00163   return R;
00164 
00165 }
00166 
00167 
00168 EvtSpinDensity EvtRaritaSchwingerParticle::rotateToHelicityBasis(double alpha,
00169                                                                  double beta,
00170                                                                  double gamma) const{
00171 
00172   EvtDiracSpinor spplus;
00173   EvtDiracSpinor spminus;
00174       
00175   if (EvtPDL::getStdHep(getId())>0){  
00176     spplus.set(1.0,0.0,0.0,0.0);
00177     spminus.set(0.0,1.0,0.0,0.0);
00178   } else {
00179     spplus.set(0.0,0.0,1.0,0.0);
00180     spminus.set(0.0,0.0,0.0,1.0);
00181   }
00182 
00183   EvtVector4C eplus(0.0,-1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00184   EvtVector4C ezero(0.0,0.0,0.0,1.0);
00185   EvtVector4C eminus(0.0,1.0/sqrt(2.0),EvtComplex(0.0,-1.0/sqrt(2.0)),0.0);
00186 
00187   EvtRaritaSchwinger sppp=dirProd(eplus,spplus);
00188   EvtRaritaSchwinger spp=dirProd(sqrt(2.0/3.0)*ezero,spplus)+
00189     dirProd(sqrt(1.0/3.0)*eplus,spminus);
00190   EvtRaritaSchwinger spm=dirProd(sqrt(2.0/3.0)*ezero,spminus)+
00191     dirProd(sqrt(1.0/3.0)*eminus,spplus);
00192   EvtRaritaSchwinger spmm=dirProd(eminus,spminus);
00193   //
00194 
00195   sppp.applyRotateEuler(alpha,beta,gamma);
00196   spp.applyRotateEuler(alpha,beta,gamma);
00197   spm.applyRotateEuler(alpha,beta,gamma);
00198   spmm.applyRotateEuler(alpha,beta,gamma);
00199 
00200   EvtSpinDensity R;
00201   R.SetDim(4);
00202 
00203   double sqmt2=sqrt(2.0*(this->getP4().mass()));
00204 
00205   for ( int i=0; i<4; i++) {
00206     R.Set(0,i,(sppp*_spinorRest[i])/sqmt2);
00207     R.Set(1,i,(spp*_spinorRest[i])/sqmt2);
00208     R.Set(2,i,(spm*_spinorRest[i])/sqmt2);
00209     R.Set(3,i,(spmm*_spinorRest[i])/sqmt2);
00210   }
00211 
00212   return R;
00213 
00214 }
00215 

Generated on Tue Nov 29 23:12:15 2016 for BOSS_7.0.2 by  doxygen 1.4.7