LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenModels - EvtSVVHelCPMix.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 122 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 10 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: EvtSVVHelCPMix.cc
      12             : //
      13             : // Description: Routine to decay scalar -> 2 vectors
      14             : //              by specifying the helicity amplitudes, taking appropriate
      15             : //              weak phases into account to get mixing and CP violation through
      16             : //              interference. Based on EvtSVVHelAmp. Particularly appropriate for
      17             : //              Bs->J/Psi+Phi
      18             : //
      19             : // Modification history:
      20             : //
      21             : //    RYD       November 24, 1996       EvtSVVHelAmp Module
      22             : //    CATMORE   March 2004              Modified to EvtSVVHelCPMix
      23             : //
      24             : // Model takes the following as user-specified arguments:
      25             : //      deltaM, averageM - mass diference and average of light and heavy mass eigenstates (real scalars)
      26             : //      gamma, deltagamma - average width and width difference of the l and h eigenstates (real scalars)
      27             : //      delta1, delta2 - strong phases (real scalars)
      28             : //      direct weak phase (real scalar) (for Bs->JPsiPhi this will be zero)  
      29             : //      weak mixing phase (real scalar) (this is equal to 2*arg(Vts Vtb) for Bs->JPsiPhi)
      30             : //      Magnitudes of helicity amplitudes as in SVV_HELAMP
      31             : // See Phys Rev D 34 p1404 - p1417 and chapters 5 and 7 of Physics Reports 370 p537-680 for more details
      32             : //------------------------------------------------------------------------
      33             : // 
      34             : #ifdef WIN32 
      35             :   #pragma warning( disable : 4786 ) 
      36             :   // Disable anoying warning about symbol size 
      37             : #endif 
      38             : #include <iostream>
      39             : #include <fstream>
      40             : #include <stdlib.h>
      41             : #include <ctype.h>
      42             : #include "EvtGenBase/EvtParticle.hh"
      43             : #include "EvtGenBase/EvtGenKine.hh"
      44             : #include "EvtGenBase/EvtPDL.hh"
      45             : #include "EvtGenBase/EvtVector4C.hh"
      46             : #include "EvtGenBase/EvtTensor4C.hh"
      47             : #include "EvtGenBase/EvtVector3C.hh"
      48             : #include "EvtGenBase/EvtVector3R.hh"
      49             : #include "EvtGenBase/EvtTensor3C.hh"
      50             : #include "EvtGenBase/EvtReport.hh"
      51             : #include "EvtGenModels/EvtSVVHelCPMix.hh"
      52             : #include "EvtGenBase/EvtId.hh"
      53             : #include <string>
      54             : 
      55           0 : EvtSVVHelCPMix::~EvtSVVHelCPMix() {}
      56             : 
      57             : std::string EvtSVVHelCPMix::getName(){
      58             : 
      59           0 :   return "SVVHELCPMIX";     
      60             : 
      61             : }
      62             : 
      63             : 
      64             : EvtDecayBase* EvtSVVHelCPMix::clone(){
      65             : 
      66           0 :   return new EvtSVVHelCPMix;
      67             : 
      68           0 : }
      69             : 
      70             : void EvtSVVHelCPMix::init(){
      71             : 
      72             :   // check that there are 12 arguments
      73           0 :   checkNArg(12);
      74           0 :   checkNDaug(2);
      75             : 
      76           0 :   checkSpinParent(EvtSpinType::SCALAR);
      77             : 
      78           0 :   checkSpinDaughter(0,EvtSpinType::VECTOR);
      79           0 :   checkSpinDaughter(1,EvtSpinType::VECTOR);
      80             : 
      81           0 :   hp = EvtComplex(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1)));
      82           0 :   h0 = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
      83           0 :   hm = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
      84           0 :   averageM = getArg(6);
      85           0 :   deltaM = getArg(7);
      86           0 :   gamma = getArg(8);
      87           0 :   deltagamma = getArg(9);
      88           0 :   weakmixingphase = EvtComplex(cos(getArg(10)),sin(getArg(10)));
      89           0 :   weakdirectphase = EvtComplex(cos(getArg(11)),sin(getArg(11)));
      90           0 : }
      91             : 
      92             : 
      93             : void EvtSVVHelCPMix::initProbMax(){
      94             : 
      95           0 :   setProbMax(getArg(0)*getArg(0)+getArg(2)*getArg(2)+getArg(4)*getArg(4));
      96             :   
      97           0 : }
      98             : 
      99             : 
     100             : void EvtSVVHelCPMix::decay( EvtParticle *p){
     101             : 
     102             :   EvtParticle* parent = p;
     103           0 :   EvtAmp& amp = _amp2;
     104           0 :   EvtId n_v1 = getDaug(0);
     105           0 :   EvtId n_v2 = getDaug(1);
     106             :         
     107             :   //  Routine to decay a vector into a vector and scalar.  Started
     108             :   //  by ryd on Oct 17, 1996.
     109             :   // Modified by J.Catmore to take account of CP-violation and mixing
     110             :     
     111             :   int tndaug = 2;
     112           0 :   EvtId tdaug[2];
     113           0 :   EvtId Bs=EvtPDL::getId("B_s0");
     114           0 :   EvtId antiBs=EvtPDL::getId("anti-B_s0");
     115           0 :   tdaug[0] = n_v1;
     116           0 :   tdaug[1] = n_v2;
     117             : 
     118             : // Phase space and kinematics
     119             : 
     120           0 :   parent->initializePhaseSpace(tndaug,tdaug);
     121             : 
     122             :   EvtParticle *v1,*v2;
     123           0 :   v1 = parent->getDaug(0);
     124           0 :   v2 = parent->getDaug(1);
     125             : 
     126           0 :   EvtVector4R momv1 = v1->getP4();
     127             : 
     128           0 :   EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3));
     129           0 :   v1dir=v1dir/v1dir.d3mag();
     130             : 
     131             :   // Definition of quantities used in construction of complex amplitudes:
     132             : 
     133           0 :   EvtTensor3C M;  // Tensor as defined in EvtGen manual, equ 117
     134           0 :   EvtComplex a,b,c; // Helicity amplitudes; EvtGen manual eqns 126-128, also see Phys Lett B 369 p144-150 eqn 15
     135             :   //EvtComplex deltamu = EvtComplex(deltaM, -0.5*deltagamma); // See Phys Rev D 34 p1404
     136             : 
     137             :   // conversion from times in mm/c to natural units [GeV]^-1
     138           0 :   double t = ((parent->getLifetime())/2.998e11)*6.58e-25; 
     139             : 
     140             :   // The following two quantities defined in Phys Rev D 34 p1404
     141           0 :   EvtComplex fplus =  EvtComplex(cos(averageM*t),-1.*sin(averageM*t))*exp(-(gamma/2.0)*t)*
     142           0 :     (cos(0.5*deltaM*t)*cosh(0.25*deltagamma*t)+EvtComplex(0.0,sin(0.5*deltaM*t)*sinh(0.25*deltagamma*t)));
     143           0 :   EvtComplex fminus = EvtComplex(cos(averageM*t), -1.*sin(averageM*t))*exp(-(gamma/2.0)*t)*EvtComplex(0.0,1.0)*
     144           0 :     (sin(0.5*deltaM*t)*cosh(0.25*deltagamma*t)-EvtComplex(0.0,1.0)*sinh(0.25*deltagamma*t)*cos(0.5*deltaM*t)); 
     145             : 
     146             : // See EvtGen manual pp 106-107
     147             : 
     148           0 :   a=-0.5*(hp+hm);
     149           0 :   b=EvtComplex(0.0,0.5)*(hp-hm);
     150           0 :   c=(h0+0.5*(hp+hm));
     151             :   
     152           0 :   M=a*EvtTensor3C::id()+
     153           0 :     b*EvtGenFunctions::eps(v1dir)+
     154           0 :     c*EvtGenFunctions::directProd(v1dir,v1dir);
     155             :                 
     156           0 :   EvtVector3C t0=M.cont1(v1->eps(0).vec().conj());
     157           0 :   EvtVector3C t1=M.cont1(v1->eps(1).vec().conj());
     158           0 :   EvtVector3C t2=M.cont1(v1->eps(2).vec().conj());
     159             : 
     160           0 :   EvtVector3C eps0=v2->eps(0).vec().conj();
     161           0 :   EvtVector3C eps1=v2->eps(1).vec().conj();
     162           0 :   EvtVector3C eps2=v2->eps(2).vec().conj();
     163             : 
     164             : // We need two sets of equations, one for mesons which were in the Bs state at t=0, and another
     165             : // for those which were in the antiBs state. Each equation consists of a sum of amplitudes - mod-squaring gives the interference terms.
     166             : 
     167           0 :         EvtComplex amplSum00, amplSum01, amplSum02;
     168           0 :         EvtComplex amplSum10, amplSum11, amplSum12;
     169           0 :         EvtComplex amplSum20, amplSum21, amplSum22;
     170             : 
     171             :   // First the Bs state:
     172             :   
     173           0 :   if (parent->getId()==Bs) {
     174             :         
     175           0 :         amplSum00 = (fplus*weakdirectphase*t0*eps0) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t0*eps0);
     176           0 :         amplSum01 = (fplus*weakdirectphase*t0*eps1) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t0*eps1);
     177           0 :         amplSum02 = (fplus*weakdirectphase*t0*eps2) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t0*eps2);
     178             : 
     179           0 :         amplSum10 = (fplus*weakdirectphase*t1*eps0) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t1*eps0);
     180           0 :         amplSum11 = (fplus*weakdirectphase*t1*eps1) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t1*eps1);
     181           0 :         amplSum12 = (fplus*weakdirectphase*t1*eps2) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t1*eps2);
     182             : 
     183           0 :         amplSum20 = (fplus*weakdirectphase*t2*eps0) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t2*eps0);
     184           0 :         amplSum21 = (fplus*weakdirectphase*t2*eps1) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t2*eps1);
     185           0 :         amplSum22 = (fplus*weakdirectphase*t2*eps2) + (fminus*(1.0/weakdirectphase)*weakmixingphase*t2*eps2);
     186           0 :   }
     187             : 
     188             :   // Now the anti-Bs state:
     189             : 
     190           0 :   if (parent->getId()==antiBs) {
     191             :   
     192           0 :         amplSum00 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t0*eps0) + (fplus*(1.0/weakdirectphase)*t0*eps0);
     193           0 :         amplSum01 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t0*eps1) + (fplus*(1.0/weakdirectphase)*t0*eps1);
     194           0 :         amplSum02 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t0*eps2) + (fplus*(1.0/weakdirectphase)*t0*eps2);
     195             : 
     196           0 :         amplSum10 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t1*eps0) + (fplus*(1.0/weakdirectphase)*t1*eps0);
     197           0 :         amplSum11 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t1*eps1) + (fplus*(1.0/weakdirectphase)*t1*eps1);
     198           0 :         amplSum12 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t1*eps2) + (fplus*(1.0/weakdirectphase)*t1*eps2);
     199             : 
     200           0 :         amplSum20 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t2*eps0) + (fplus*(1.0/weakdirectphase)*t2*eps0);
     201           0 :         amplSum21 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t2*eps1) + (fplus*(1.0/weakdirectphase)*t2*eps1);
     202           0 :         amplSum22 = (fminus*weakdirectphase*(1.0/weakmixingphase)*t2*eps2) + (fplus*(1.0/weakdirectphase)*t2*eps2);
     203             : 
     204           0 :   }
     205             : 
     206             :   // Now set the amplitude
     207             : 
     208           0 :   amp.vertex(0,0,amplSum00);
     209           0 :   report(Severity::Info,"EvtGen") << "00: " << amplSum00 << std::endl;  
     210           0 :   amp.vertex(0,1,amplSum01);
     211           0 :   report(Severity::Info,"EvtGen") << "01: " << amplSum01 << std::endl;
     212           0 :   amp.vertex(0,2,amplSum02);
     213           0 :   report(Severity::Info,"EvtGen") << "02: " << amplSum02 << std::endl;
     214             : 
     215           0 :   amp.vertex(1,0,amplSum10);
     216           0 :   report(Severity::Info,"EvtGen") << "10: " << amplSum10 << std::endl;
     217           0 :   amp.vertex(1,1,amplSum11);
     218           0 :   report(Severity::Info,"EvtGen") << "11: " << amplSum11 << std::endl;
     219           0 :   amp.vertex(1,2,amplSum12);
     220           0 :   report(Severity::Info,"EvtGen") << "12: " << amplSum12 << std::endl;
     221             : 
     222           0 :   amp.vertex(2,0,amplSum20);
     223           0 :   report(Severity::Info,"EvtGen") << "20: " << amplSum20 << std::endl;
     224           0 :   amp.vertex(2,1,amplSum21);
     225           0 :   report(Severity::Info,"EvtGen") << "21: " << amplSum21 << std::endl;
     226           0 :   amp.vertex(2,2,amplSum22);
     227           0 :   report(Severity::Info,"EvtGen") << "22: " << amplSum22 << std::endl;
     228             : 
     229             :   return ;
     230             : 
     231           0 : }
     232             : 
     233             : std::string EvtSVVHelCPMix::getParamName(int i) {
     234           0 :   switch(i) {
     235             :   case 0:
     236           0 :     return "plusHelAmp";
     237             :   case 1:
     238           0 :     return "plusHelAmpPhase";
     239             :   case 2:
     240           0 :     return "zeroHelAmp";
     241             :   case 3:
     242           0 :     return "zeroHelAmpPhase";
     243             :   case 4:
     244           0 :     return "minusHelAmp";
     245             :   case 5:
     246           0 :     return "minusHelAmpPhase";
     247             :   case 6:
     248           0 :     return "averageM";
     249             :   case 7:
     250           0 :     return "deltaM";
     251             :   case 8:
     252           0 :     return "gamma";
     253             :   case 9:
     254           0 :     return "deltaGamma";
     255             :   case 10:
     256           0 :     return "weakMixPhase";
     257             :   case 11:
     258           0 :     return "weakDirectPhase";
     259             :   default:
     260           0 :     return "";
     261             :   }
     262           0 : }
     263             : 
     264             : std::string EvtSVVHelCPMix::getParamDefault(int i) {
     265           0 :   switch(i) {
     266             :   case 0:
     267           0 :     return "1.0";
     268             :   case 1:
     269           0 :     return "0.0";
     270             :   case 2:
     271           0 :     return "1.0";
     272             :   case 3:
     273           0 :     return "0.0";
     274             :   case 4:
     275           0 :     return "1.0";
     276             :   case 5:
     277           0 :     return "0.0";
     278             :   default:
     279           0 :     return "";
     280             :   }
     281           0 : }

Generated by: LCOV version 1.11