LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenBase - EvtRaritaSchwingerParticle.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 107 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 11 0.0 %

          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             : 

Generated by: LCOV version 1.11