LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenModels - EvtWnPi.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 49 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: EvtTVP.cc
      12             : //
      13             : // Description: Routine to calculate W -> (n pi) current
      14             : //                      according to [Kuhn, Was, Acta.Phys.Polon B39 (2008) 147]
      15             : //
      16             : // Modification history:
      17             : //      AVL     6 July, 2012    Module created
      18             : //
      19             : //------------------------------------------------------------------------
      20             : // 
      21             : #include "EvtGenBase/EvtPatches.hh"
      22             : #include <iostream>
      23             : #include <iomanip>
      24             : #include <fstream>
      25             : #include <ctype.h>
      26             : #include <stdlib.h>
      27             : #include <string.h>
      28             : #include "EvtGenBase/EvtParticle.hh"
      29             : #include "EvtGenBase/EvtPDL.hh"
      30             : #include "EvtGenBase/EvtGenKine.hh"
      31             : #include "EvtGenModels/EvtTauHadnu.hh"
      32             : #include "EvtGenBase/EvtDiracSpinor.hh"
      33             : #include "EvtGenBase/EvtReport.hh"
      34             : #include "EvtGenBase/EvtVector4C.hh"
      35             : #include "EvtGenBase/EvtTensor4C.hh"
      36             : #include "EvtGenBase/EvtIdSet.hh"
      37             : #include "EvtGenBase/EvtParser.hh"
      38             : 
      39             : #include "EvtGenModels/EvtWnPi.hh"
      40             : 
      41             : using namespace std;
      42             : 
      43             : // W+ -> pi_ current
      44             : EvtVector4C EvtWnPi::WCurrent(EvtVector4R q1) { 
      45           0 :   return q1;
      46             : }
      47             : 
      48             : // W+ -> pi+ pi0 current
      49             : EvtVector4C EvtWnPi::WCurrent(EvtVector4R q1, EvtVector4R q2) { 
      50           0 :   return BWr(q1+q2)*(q1-q2);
      51             : }
      52             : 
      53             : // W+ -> pi+ pi+ pi- current
      54             : EvtVector4C EvtWnPi::WCurrent(EvtVector4R q1, EvtVector4R q2, EvtVector4R q3) {
      55           0 :  EvtVector4R Q=q1+q2+q3;
      56           0 :  double Q2=Q.mass2();
      57           0 :  return BWa(Q)*( (q1-q3) - (Q*(Q*(q1-q3))/Q2)*BWr(q2+q3) +
      58           0 :               (q2-q3) - (Q*(Q*(q2-q3))/Q2)*BWr(q1+q3) ); 
      59           0 : }
      60             : 
      61             : // W+ -> pi+ pi+ pi- pi- pi+ current with symmetrization
      62             : EvtVector4C EvtWnPi::WCurrent(EvtVector4R q1, EvtVector4R q2, EvtVector4R q3, EvtVector4R q4, EvtVector4R q5) {
      63             : //  double Q2 = Qtot*Qtot;
      64             : //  return q1-Qtot*(q1*Qtot)/Q2;
      65           0 :   EvtVector4C V = JB(q1, q2, q3, q4, q5) + JB(q5, q2, q3, q4, q1) + JB(q1, q5, q3, q4, q2) +
      66           0 :                   JB(q1,q2,q4,q3,q5)+JB(q5,q2,q4,q3,q1)+JB(q1,q5,q4,q3,q2); 
      67             : //  cout<<"BC2: Qtot="<<Qtot<<", V="<<V<<endl;
      68             :   return V;
      69           0 : }
      70             : 
      71             : 
      72             : // a1 -> pi+ pi+ pi- BW
      73             : EvtComplex EvtWnPi::BWa(EvtVector4R q) {
      74             :   double const _mA1=1.26, _GA1=0.4;
      75           0 :   EvtComplex I(0,1);
      76           0 :   double Q2 = q.mass2();
      77           0 :   double GA1=_GA1*pi3G(Q2)/pi3G(_mA1*_mA1);
      78           0 :   EvtComplex denBA1(_mA1*_mA1 - Q2,-1.*_mA1*GA1);
      79           0 :   return _mA1*_mA1 / denBA1; 
      80           0 : }
      81             : 
      82             : 
      83             : EvtComplex EvtWnPi::BWf(EvtVector4R q) {
      84             :   double const mf=0.8, Gf=0.6;
      85           0 :   EvtComplex I(0,1);
      86           0 :   double Q2 = q.mass2();
      87           0 :   return mf*mf/(mf*mf-Q2-I*mf*Gf); 
      88           0 : }
      89             : 
      90             : EvtComplex EvtWnPi::BWr(EvtVector4R q) {
      91             :         double _mRho = 0.775, _gammaRho=0.149, _mRhopr=1.364,  _gammaRhopr=0.400, _beta=-0.108;
      92           0 :         double m1=EvtPDL::getMeanMass(EvtPDL::getId("pi+")), m2=EvtPDL::getMeanMass(EvtPDL::getId("pi+"));
      93           0 :         double mQ2=q.mass2();
      94             :         
      95             :         // momenta in the rho->pipi decay
      96           0 :         double dRho= _mRho*_mRho - m1*m1 - m2*m2;
      97           0 :         double pPiRho = (1.0/_mRho)*sqrt((dRho*dRho)/4.0 - m1*m1*m2*m2);
      98             :         
      99           0 :         double dRhopr= _mRhopr*_mRhopr - m1*m1 - m2*m2;
     100           0 :         double pPiRhopr = (1.0/_mRhopr)*sqrt((dRhopr*dRhopr)/4.0 - m1*m1*m2*m2);
     101             :         
     102           0 :         double dQ= mQ2 - m1*m1 - m2*m2;
     103           0 :         double pPiQ = (1.0/sqrt(mQ2))*sqrt((dQ*dQ)/4.0 - m1*m1*m2*m2);
     104             :         
     105             :         
     106           0 :         double gammaRho = _gammaRho*_mRho/sqrt(mQ2)*pow((pPiQ/pPiRho),3);
     107           0 :         EvtComplex BRhoDem(_mRho*_mRho - mQ2,-1.0*_mRho*gammaRho);
     108           0 :         EvtComplex BRho= _mRho*_mRho / BRhoDem;
     109             :         
     110           0 :         double gammaRhopr = _gammaRhopr*_mRhopr/sqrt(mQ2)*pow((pPiQ/pPiRhopr),3);
     111           0 :         EvtComplex BRhoprDem(_mRhopr*_mRhopr - mQ2,-1.0*_mRho*gammaRhopr);
     112           0 :         EvtComplex BRhopr= _mRhopr*_mRhopr / BRhoprDem;
     113             :         
     114           0 :         return (BRho + _beta*BRhopr)/(1+_beta);
     115           0 : }
     116             : 
     117             : double EvtWnPi::pi3G(double m2) {
     118           0 :  double mPi = EvtPDL::getMeanMass(EvtPDL::getId("pi+"));
     119             :  double _mRho = 0.775;
     120           0 :   if ( m2 > (_mRho+mPi) ) {
     121           0 :     return m2*(1.623 + 10.38/m2 - 9.32/(m2*m2) + 0.65/(m2*m2*m2));
     122             :   }
     123             :   else {
     124           0 :     double t1=m2-9.0*mPi*mPi;
     125           0 :     return 4.1*pow(t1,3.0)*(1.0 - 3.3*t1+5.8*t1*t1);
     126             :   };
     127           0 : }
     128             : 
     129             : EvtVector4C EvtWnPi::JB( EvtVector4R p1, EvtVector4R p2, EvtVector4R p3, EvtVector4R p4, EvtVector4R p5) {
     130           0 :   EvtVector4R Qtot = p1+p2+p3+p4+p5, Qa=p1+p2+p3;
     131           0 :   EvtTensor4C T= (1/Qtot.mass2())*EvtGenFunctions::directProd(Qtot,Qtot) - EvtTensor4C::g();
     132           0 :   EvtVector4R V13 = Qa*( p2*(p1-p3) )/Qa.mass2() - (p1-p3);
     133           0 :   EvtVector4R V23 = Qa*( p1*(p2-p3) )/Qa.mass2() - (p2-p3);
     134           0 :   return BWa(Qtot)*BWa(Qa)*BWf(p4+p5)*(
     135           0 :     T.cont1(V13)*BWr(p1+p3) + T.cont1(V23)*BWr(p2+p3)
     136             :   );
     137           0 : }

Generated by: LCOV version 1.11