/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenBase/EvtDiracParticle.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: EvtDiracParticle.cc
00012 //
00013 // Description: Class to describe spin 1/2 particles.
00014 //
00015 // Modification history:
00016 //
00017 //    DJL/RYD     September 25, 1996         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/EvtDiracParticle.hh"
00027 #include "EvtGenBase/EvtVector4R.hh"
00028 #include "EvtGenBase/EvtPDL.hh"
00029 #include "EvtGenBase/EvtReport.hh"
00030 #include "EvtGenBase/EvtSpinDensity.hh"
00031 #include "EvtGenBase/EvtGammaMatrix.hh"
00032 
00033 using std::endl;
00034 
00035 EvtDiracParticle::~EvtDiracParticle(){}
00036 
00037 
00038 EvtDiracParticle::EvtDiracParticle(){
00039 
00040   return;
00041   
00042 }
00043 
00044 void EvtDiracParticle::init(EvtId part_n,const EvtVector4R& p4){
00045 
00046   _validP4=true; 
00047   setp(p4);
00048   setpart_num(part_n);
00049 
00050   if (EvtPDL::getStdHep(part_n)==0){
00051     report(ERROR,"EvtGen") << "Error in EvtDiracParticle::init, part_n="
00052                            << part_n.getId()<<endl;
00053     ::abort();
00054   }
00055 
00056   if (EvtPDL::getStdHep(part_n)>0){  
00057 
00058     _spinorRest[0].set(EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0),
00059                        EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
00060     _spinorRest[1].set(EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0),
00061                        EvtComplex(0.0,0.0),EvtComplex(0.0,0.0));
00062   
00063     _spinorParent[0]=boostTo(_spinorRest[0],p4);
00064     _spinorParent[1]=boostTo(_spinorRest[1],p4);
00065 
00066 
00067   }
00068   else{
00069 
00070     _spinorRest[0].set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
00071                      EvtComplex(sqrt(2.0*mass()),0.0),EvtComplex(0.0,0.0));
00072     _spinorRest[1].set(EvtComplex(0.0,0.0),EvtComplex(0.0,0.0),
00073                      EvtComplex(0.0,0.0),EvtComplex(sqrt(2.0*mass()),0.0));
00074   
00075     _spinorParent[0]=boostTo(_spinorRest[0],p4);
00076     _spinorParent[1]=boostTo(_spinorRest[1],p4);
00077 
00078 
00079 
00080   }
00081 
00082   setLifetime();
00083 }
00084 
00085 
00086 
00087 
00088 EvtSpinDensity EvtDiracParticle::rotateToHelicityBasis() const{
00089 
00090   EvtDiracSpinor spplus;
00091   EvtDiracSpinor spminus;
00092       
00093   double sqmt2=sqrt(2.*(getP4().mass()));
00094       
00095   if (EvtPDL::getStdHep(getId())>0){  
00096     spplus.set(1.0,0.0,0.0,0.0);
00097     spminus.set(0.0,1.0,0.0,0.0);
00098   } else {
00099     spplus.set(0.0,0.0,1.0,0.0);
00100     spminus.set(0.0,0.0,0.0,1.0);
00101   }
00102 
00103       
00104   EvtSpinDensity R;
00105   R.SetDim(2);
00106       
00107   for (int i=0; i<2; i++) {
00108     R.Set(0,i,(spplus*_spinorRest[i])/sqmt2);
00109     R.Set(1,i,(spminus*_spinorRest[i])/sqmt2);
00110   } 
00111 
00112   return R;
00113 
00114 }
00115 
00116 
00117 EvtSpinDensity EvtDiracParticle::rotateToHelicityBasis(double alpha,
00118                                                        double beta,
00119                                                        double gamma) const{
00120 
00121 
00122   EvtDiracSpinor spplus;
00123   EvtDiracSpinor spminus;
00124       
00125   double sqmt2=sqrt(2.*(getP4().mass()));
00126       
00127   if (EvtPDL::getStdHep(getId())>0){  
00128     spplus.set(1.0,0.0,0.0,0.0);
00129     spminus.set(0.0,1.0,0.0,0.0);
00130   } else {
00131     spplus.set(0.0,0.0,1.0,0.0);
00132     spminus.set(0.0,0.0,0.0,1.0);
00133   }
00134       
00135   spplus.applyRotateEuler(alpha,beta,gamma);
00136   spminus.applyRotateEuler(alpha,beta,gamma);
00137 
00138   EvtSpinDensity R;
00139   R.SetDim(2);
00140       
00141   for (int i=0; i<2; i++) {
00142     R.Set(0,i,(spplus*_spinorRest[i])/sqmt2);
00143     R.Set(1,i,(spminus*_spinorRest[i])/sqmt2);
00144   } 
00145 
00146   return R;
00147 
00148 }
00149 
00150 
00151 

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