LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenModels - EvtBTo4piCP.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 129 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 9 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: EvtBTo4piCP.cc
      12             : //
      13             : // Description: Routine to decay B->pi+ pi- pi+ pi-.
      14             : //
      15             : // Modification history:
      16             : //
      17             : //    RYD     March 2, 1997         Module created
      18             : //
      19             : //------------------------------------------------------------------------
      20             : //
      21             : #include "EvtGenBase/EvtPatches.hh"
      22             : #include <stdlib.h>
      23             : #include "EvtGenBase/EvtParticle.hh"
      24             : #include "EvtGenBase/EvtGenKine.hh"
      25             : #include "EvtGenBase/EvtCPUtil.hh"
      26             : #include "EvtGenBase/EvtPDL.hh"
      27             : #include "EvtGenBase/EvtReport.hh"
      28             : #include "EvtGenModels/EvtBTo4piCP.hh"
      29             : #include "EvtGenBase/EvtId.hh"
      30             : #include "EvtGenBase/EvtConst.hh"
      31             : #include <string>
      32             : 
      33           0 : EvtBTo4piCP::~EvtBTo4piCP() {}
      34             : 
      35             : 
      36             : EvtComplex EvtAmpA2(const EvtVector4R& p4pi1,const EvtVector4R& p4pi2,
      37             :                     const EvtVector4R& p4pi3,const EvtVector4R& p4pi4){
      38             : 
      39             :   //added by Lange Jan4,2000
      40           0 :   static EvtId A2M=EvtPDL::getId("a_2-");
      41           0 :   static EvtId RHO0=EvtPDL::getId("rho0");
      42             : 
      43           0 :   EvtVector4R p4a2,p4rho,p4b;
      44             : 
      45           0 :   p4rho=p4pi1+p4pi2;
      46             : 
      47           0 :   p4a2=p4rho+p4pi3;
      48             : 
      49           0 :   p4b=p4a2+p4pi4;
      50             : 
      51           0 :   EvtVector4R p4b_a2,p4rho_a2,p4pi1_a2,p4a2_a2;
      52             : 
      53           0 :   p4b_a2=boostTo(p4b,p4a2);
      54           0 :   p4rho_a2=boostTo(p4rho,p4a2);
      55           0 :   p4pi1_a2=boostTo(p4pi1,p4a2);
      56           0 :   p4a2_a2=boostTo(p4a2,p4a2);
      57             : 
      58           0 :   EvtVector4R p4pi1_rho;
      59             : 
      60           0 :   p4pi1_rho=boostTo(p4pi1_a2,p4rho_a2);
      61             : 
      62           0 :   EvtVector4R vb,vrho,vpi,t;
      63             : 
      64           0 :   vb=p4b_a2/p4b_a2.d3mag();
      65           0 :   vrho=p4rho_a2/p4rho_a2.d3mag();
      66           0 :   vpi=p4pi1_rho/p4pi1_rho.d3mag();
      67             : 
      68           0 :   t.set(1.0,0.0,0.0,0.0);
      69             : 
      70             :   //  EvtComplex amp_a1,amp_a2;
      71           0 :   EvtComplex amp_a2;
      72             :  
      73             :   //  double bwm_a1=EvtPDL::getMeanMass(A1M);
      74             :   //  double gamma_a1=EvtPDL::getWidth(A1M);
      75           0 :   double bwm_a2=EvtPDL::getMeanMass(A2M);
      76           0 :   double gamma_a2=EvtPDL::getWidth(A2M);
      77           0 :   double bwm_rho=EvtPDL::getMeanMass(RHO0);
      78           0 :   double gamma_rho=EvtPDL::getWidth(RHO0);
      79             : 
      80           0 :   amp_a2=(sqrt(gamma_a2/EvtConst::twoPi)/
      81           0 :     ((p4a2).mass()-bwm_a2-EvtComplex(0.0,0.5*gamma_a2)))*
      82           0 :          (sqrt(gamma_rho/EvtConst::twoPi)/
      83           0 :     ((p4rho).mass()-bwm_rho-EvtComplex(0.0,0.5*gamma_rho)));
      84             : 
      85           0 :   return amp_a2*
      86           0 :     (vb.get(1)*vrho.get(1)+vb.get(2)*vrho.get(2)+vb.get(3)*vrho.get(3))*
      87             :     (
      88           0 :      vpi.get(1)*(vb.get(2)*vrho.get(3)-vb.get(3)*vrho.get(2))+
      89           0 :      vpi.get(2)*(vb.get(3)*vrho.get(1)-vb.get(1)*vrho.get(3))+
      90           0 :      vpi.get(3)*(vb.get(1)*vrho.get(2)-vb.get(2)*vrho.get(1))
      91             :      );
      92             : 
      93           0 : }
      94             : 
      95             : EvtComplex EvtAmpA1(const EvtVector4R& p4pi1,const EvtVector4R& p4pi2,
      96             :                     const EvtVector4R& p4pi3,const EvtVector4R& p4pi4){
      97             : 
      98             :   //added by Lange Jan4,2000
      99           0 :   static EvtId A1M=EvtPDL::getId("a_1-");
     100           0 :   static EvtId RHO0=EvtPDL::getId("rho0");
     101             : 
     102           0 :   EvtVector4R p4a1,p4rho,p4b;
     103             : 
     104           0 :   p4rho=p4pi1+p4pi2;
     105             : 
     106           0 :   p4a1=p4rho+p4pi3;
     107             : 
     108           0 :   p4b=p4a1+p4pi4;
     109             : 
     110           0 :   EvtVector4R p4b_a1,p4rho_a1,p4pi1_a1,p4a1_a1;
     111             : 
     112           0 :   p4b_a1=boostTo(p4b,p4a1);
     113           0 :   p4rho_a1=boostTo(p4rho,p4a1);
     114           0 :   p4pi1_a1=boostTo(p4pi1,p4a1);
     115           0 :   p4a1_a1=boostTo(p4a1,p4a1);
     116             : 
     117           0 :   EvtVector4R p4pi1_rho;
     118             : 
     119           0 :   p4pi1_rho=boostTo(p4pi1_a1,p4rho_a1);
     120             : 
     121           0 :   EvtVector4R vb,vrho,vpi,t;
     122             : 
     123           0 :   vb=p4b_a1/p4b_a1.d3mag();
     124           0 :   vrho=p4rho_a1/p4rho_a1.d3mag();
     125           0 :   vpi=p4pi1_rho/p4pi1_rho.d3mag();
     126             : 
     127           0 :   t.set(1.0,0.0,0.0,0.0);
     128             : 
     129           0 :   EvtComplex amp_a1;
     130             :  
     131           0 :   double bwm_a1=EvtPDL::getMeanMass(A1M);
     132           0 :   double gamma_a1=EvtPDL::getWidth(A1M);
     133             :   //  double bwm_a2=EvtPDL::getMeanMass(A2M);
     134             :   //  double gamma_a2=EvtPDL::getWidth(A2M);
     135           0 :   double bwm_rho=EvtPDL::getMeanMass(RHO0);
     136           0 :   double gamma_rho=EvtPDL::getWidth(RHO0);
     137             : 
     138           0 :   amp_a1=(sqrt(gamma_a1/EvtConst::twoPi)/
     139           0 :     ((p4a1).mass()-bwm_a1-EvtComplex(0.0,0.5*gamma_a1)))*
     140           0 :          (sqrt(gamma_rho/EvtConst::twoPi)/
     141           0 :     ((p4rho).mass()-bwm_rho-EvtComplex(0.0,0.5*gamma_rho)));
     142             : 
     143           0 :   return amp_a1*
     144           0 :     (vb.get(1)*vpi.get(1)+vb.get(2)*vpi.get(2)+vb.get(3)*vpi.get(3));
     145             : 
     146           0 : }
     147             : 
     148             : 
     149             : std::string EvtBTo4piCP::getName(){
     150             :  
     151           0 :   return "BTO4PI_CP";     
     152             : 
     153             : }
     154             : 
     155             : 
     156             : EvtDecayBase* EvtBTo4piCP::clone(){
     157             : 
     158           0 :   return new EvtBTo4piCP;
     159             : 
     160           0 : }
     161             : 
     162             : void EvtBTo4piCP::init(){
     163             : 
     164             :   // check that there are 18 arguments
     165           0 :   checkNArg(18);
     166           0 :   checkNDaug(4);
     167             : 
     168           0 :   checkSpinParent(EvtSpinType::SCALAR);
     169             : 
     170           0 :   checkSpinDaughter(0,EvtSpinType::SCALAR);
     171           0 :   checkSpinDaughter(1,EvtSpinType::SCALAR);
     172           0 :   checkSpinDaughter(2,EvtSpinType::SCALAR);
     173           0 :   checkSpinDaughter(3,EvtSpinType::SCALAR);
     174           0 : }
     175             : 
     176             : void EvtBTo4piCP::decay( EvtParticle *p){
     177             : 
     178             :   //added by Lange Jan4,2000
     179           0 :   static EvtId B0=EvtPDL::getId("B0");
     180           0 :   static EvtId B0B=EvtPDL::getId("anti-B0");
     181             : 
     182             : 
     183           0 :   double t;
     184           0 :   EvtId other_b;
     185             : 
     186           0 :   EvtCPUtil::getInstance()->OtherB(p,t,other_b,0.5);
     187             :   
     188           0 :   p->initializePhaseSpace(getNDaug(),getDaugs());
     189           0 :   EvtVector4R mom1 = p->getDaug(0)->getP4();
     190           0 :   EvtVector4R mom2 = p->getDaug(1)->getP4();
     191           0 :   EvtVector4R mom3 = p->getDaug(2)->getP4();
     192           0 :   EvtVector4R mom4 = p->getDaug(3)->getP4();
     193             : 
     194             :   //  double alpha=getArg(0);
     195             :   //double dm=getArg(1);
     196             : 
     197           0 :    EvtComplex amp;
     198             : 
     199           0 :    EvtComplex A,Abar;
     200             : 
     201             : 
     202           0 :    EvtComplex A_a1p,Abar_a1p,A_a2p,Abar_a2p;
     203           0 :    EvtComplex A_a1m,Abar_a1m,A_a2m,Abar_a2m;
     204             : 
     205           0 :    A_a1p=EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
     206           0 :    Abar_a1p=EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
     207             : 
     208           0 :    A_a2p=EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
     209           0 :    Abar_a2p=EvtComplex(getArg(8)*cos(getArg(9)),getArg(8)*sin(getArg(9)));
     210             : 
     211           0 :    A_a1m=EvtComplex(getArg(10)*cos(getArg(11)),getArg(10)*sin(getArg(11)));
     212           0 :    Abar_a1m=EvtComplex(getArg(12)*cos(getArg(13)),getArg(12)*sin(getArg(13)));
     213             : 
     214           0 :    A_a2m=EvtComplex(getArg(14)*cos(getArg(15)),getArg(14)*sin(getArg(15)));
     215           0 :    Abar_a2m=EvtComplex(getArg(16)*cos(getArg(17)),getArg(16)*sin(getArg(17)));
     216             : 
     217           0 :    EvtComplex a2p_amp=EvtAmpA2(mom1,mom2,mom3,mom4)+
     218           0 :                       EvtAmpA2(mom1,mom4,mom3,mom2)+
     219           0 :                       EvtAmpA2(mom3,mom2,mom1,mom4)+
     220           0 :                       EvtAmpA2(mom3,mom4,mom1,mom2);
     221             : 
     222           0 :    EvtComplex a2m_amp=EvtAmpA2(mom2,mom3,mom4,mom1)+
     223           0 :                       EvtAmpA2(mom2,mom1,mom4,mom3)+
     224           0 :                       EvtAmpA2(mom4,mom3,mom2,mom1)+
     225           0 :                       EvtAmpA2(mom4,mom1,mom2,mom3);
     226             : 
     227           0 :    EvtComplex a1p_amp=EvtAmpA1(mom1,mom2,mom3,mom4)+
     228           0 :                       EvtAmpA1(mom1,mom4,mom3,mom2)+
     229           0 :                       EvtAmpA1(mom3,mom2,mom1,mom4)+
     230           0 :                       EvtAmpA1(mom3,mom4,mom1,mom2);
     231             : 
     232           0 :    EvtComplex a1m_amp=EvtAmpA1(mom2,mom3,mom4,mom1)+
     233           0 :                       EvtAmpA1(mom2,mom1,mom4,mom3)+
     234           0 :                       EvtAmpA1(mom4,mom3,mom2,mom1)+
     235           0 :                       EvtAmpA1(mom4,mom1,mom2,mom3);
     236             : 
     237             : 
     238           0 :    A=A_a2p*a2p_amp+A_a1p*a1p_amp+
     239           0 :      A_a2m*a2m_amp+A_a1m*a1m_amp;
     240           0 :    Abar=Abar_a2p*a2p_amp+Abar_a1p*a1p_amp+
     241           0 :         Abar_a2m*a2m_amp+Abar_a1m*a1m_amp;
     242             : 
     243             : 
     244           0 :    if (other_b==B0B){
     245           0 :      amp=A*cos(getArg(1)*t/(2*EvtConst::c))+
     246           0 :        EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))*
     247           0 :        getArg(2)*EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c));
     248           0 :    }
     249           0 :    if (other_b==B0){
     250           0 :      amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))*
     251           0 :        EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+       
     252           0 :        getArg(2)*Abar*cos(getArg(1)*t/(2*EvtConst::c));
     253           0 :    }
     254             :  
     255           0 :    vertex(amp);
     256             : 
     257             :    return ;
     258           0 : }
     259             : 

Generated by: LCOV version 1.11