LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenModels - EvtPVVCPLH.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 62 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) 1999      Caltech, UCSB
      10             : //
      11             : // Module: EvtPVVCPLH.cc
      12             : //
      13             : // Description: The decay of a scalar to two vector particles are 
      14             : //              performed with CP violation and different widths for
      15             : //              the CP-even and CP-odd states. E.g. Bs->J/psi phi.
      16             : //
      17             : // Modification history:
      18             : //
      19             : //    RYD       November 5, 1999       Module EvtSVVCPLH created
      20             : //
      21             : //    DUPREE    October 10, 2006       Large modification: EvtSVVCPLH->EvtPVVCPLH
      22             : //                                     Time-dependence correctly
      23             : //
      24             : //    COWAN     June 10, 2009          Modified to use the new EvtCPUtils class.
      25             : //                                     EvtIncoherentMixing removed.
      26             : //
      27             : //------------------------------------------------------------------------
      28             : //
      29             : #include <stdlib.h>
      30             : #include "EvtGenBase/EvtParticle.hh"
      31             : #include "EvtGenBase/EvtGenKine.hh"
      32             : #include "EvtGenBase/EvtCPUtil.hh"
      33             : #include "EvtGenBase/EvtPDL.hh"
      34             : #include "EvtGenModels/EvtSVVHelAmp.hh"
      35             : #include "EvtGenBase/EvtReport.hh"
      36             : #include "EvtGenModels/EvtPVVCPLH.hh"
      37             : #include "EvtGenBase/EvtId.hh"
      38             : #include <string>
      39             : #include "EvtGenBase/EvtConst.hh"
      40             : #include "EvtGenBase/EvtRandom.hh"
      41             : 
      42           0 : EvtPVVCPLH::~EvtPVVCPLH() {}
      43             : 
      44             : std::string EvtPVVCPLH::getName() {
      45           0 :   return "PVV_CPLH";     
      46             : }
      47             : 
      48             : 
      49             : EvtDecayBase* EvtPVVCPLH::clone(){
      50             : 
      51           0 :   return new EvtPVVCPLH;
      52             : 
      53           0 : }
      54             : 
      55             : void EvtPVVCPLH::init(){
      56             : 
      57             :   // check that there are 8 arguments (deltaMs no argument anymore)
      58           0 :   checkNArg(8);
      59           0 :   checkNDaug(2);
      60             : 
      61           0 :   checkSpinParent(EvtSpinType::SCALAR);
      62             : 
      63           0 :   checkSpinDaughter(0,EvtSpinType::VECTOR);
      64           0 :   checkSpinDaughter(1,EvtSpinType::VECTOR);
      65             : 
      66           0 : }
      67             : 
      68             : void EvtPVVCPLH::initProbMax(){
      69             : 
      70             :   //This is probably not quite right, but it should do as a start...
      71             :   //Anders
      72             : 
      73           0 :   setProbMax(2*(getArg(2)*getArg(2)+getArg(4)*getArg(4)+getArg(6)*getArg(6)));
      74             : 
      75           0 : }
      76             : 
      77             : void EvtPVVCPLH::decay( EvtParticle *p){
      78             : 
      79             :   //added by Lange Jan4,2000
      80           0 :   static EvtId BS0=EvtPDL::getId("B_s0");
      81           0 :   static EvtId BSB=EvtPDL::getId("anti-B_s0");
      82             : 
      83             :   //This is only to get tag-ID
      84             :   //Mixing is not relevant
      85             :   //Lifetime is made correctly later
      86             :   //Tristan
      87           0 :   EvtId other_b;
      88           0 :   double t;
      89             : 
      90             : // To generate integrated CP asymmetry, EvtGen uses the "flipping".
      91             : // CP-asymmetry in this channel very small, since:
      92             : // deltaMs large ..and..
      93             : // CPV-phase small
      94           0 :   EvtCPUtil::getInstance()->OtherB(p,t,other_b);
      95             : 
      96             :   //Here we're gonna generate and set the "envelope" lifetime
      97             :   //So we take the longest living component (for positive deltaGamma: tauH)
      98             :   //The double exponent will be taken care of later, by the amplitudes
      99             :   //Tristan
     100             :   
     101           0 :   static double Gamma = EvtConst::c/(EvtPDL::getctau(BS0));
     102           0 :   static double deltaGamma = EvtCPUtil::getInstance()->getDeltaGamma(BS0);
     103           0 :   static double ctauLong = EvtConst::c/(Gamma-fabs(deltaGamma)/2);
     104             :   // if dG>0: tauLong=tauH(CP-odd) is then largest
     105             : 
     106             :   //This overrules the lifetimes made in OtherB
     107           0 :   t=-log(EvtRandom::Flat())*(ctauLong);//ctauLong has same dimensions as t
     108           0 :   if(isBsMixed(p)){
     109           0 :     p->getParent()->setLifetime(t);
     110           0 :   }else{
     111           0 :     p->setLifetime(t);
     112             :   }
     113             : 
     114             :   //These should be filled with the transversity amplitudes at t=0 //Tristan
     115           0 :   EvtComplex G0P,G1P,G1M;  
     116           0 :   G1P=EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
     117           0 :   G0P=EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
     118           0 :   G1M=EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
     119             : 
     120           0 :   EvtComplex lambda_km=EvtComplex(cos(2*getArg(0)),sin(2*getArg(0)));//was een min in oude versie
     121             : 
     122             :   //deltaMs is no argument anymore
     123             :   //Tristan
     124             :   
     125           0 :   static double deltaMs = EvtCPUtil::getInstance()->getDeltaM(BS0);
     126             : 
     127           0 :   EvtComplex cG0P,cG1P,cG1M;
     128             : 
     129           0 :   double mt = exp(-std::max(0.,deltaGamma)*t/(2*EvtConst::c));
     130           0 :   double pt = exp(+std::min(0.,deltaGamma)*t/(2*EvtConst::c));
     131             : 
     132           0 :   EvtComplex gplus  = ( mt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin( deltaMs*t/(2*EvtConst::c)))
     133           0 :                       +pt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin(-deltaMs*t/(2*EvtConst::c))) )/2;
     134           0 :   EvtComplex gminus = ( mt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin( deltaMs*t/(2*EvtConst::c)))
     135           0 :                       -pt*EvtComplex(cos(deltaMs*t/(2*EvtConst::c)),sin(-deltaMs*t/(2*EvtConst::c))) )/2;;
     136             : 
     137           0 :   if (other_b==BSB){
     138             :     //These are the right equations for the transversity formalism
     139             :     //cGOP is de 0-component, CP-even, so lives shorter: mainly lifetime tauL
     140             :     //cG1P is the //-component, also CP-even, also mainly smaller exponent
     141             :     //cG1M is the transverse component, CP-odd, so has mainly longer lifetime tauH
     142             :     //Tristan
     143           0 :     cG0P = G0P*( gplus + lambda_km*gminus );
     144           0 :     cG1P = G1P*( gplus + lambda_km*gminus );
     145           0 :     cG1M = G1M*( gplus - lambda_km*gminus );
     146           0 :   } else if (other_b==BS0){
     147             :     //The equations for BsBar
     148             :     //Note the minus-sign difference
     149             :     //Tristan
     150           0 :     cG0P = G0P*( gplus + (1.0/lambda_km)*gminus );
     151           0 :     cG1P = G1P*( gplus + (1.0/lambda_km)*gminus );
     152           0 :     cG1M =-G1M*( gplus - (1.0/lambda_km)*gminus );
     153             : 
     154             :   } else{
     155           0 :     report(Severity::Error,"EvtGen") << "other_b was not BSB or BS0!"<<std::endl;
     156           0 :     ::abort();
     157             :   }
     158             : 
     159           0 :   EvtComplex A0,AP,AM;
     160             :   //Converting the transversity amplitudes
     161             :   //to helicity amplitudes
     162             :   //(to plug them into SVVHelAmp)
     163           0 :   A0=cG0P;
     164           0 :   AP=(cG1P+cG1M)/sqrt(2.0);
     165           0 :   AM=(cG1P-cG1M)/sqrt(2.0);
     166             :   
     167           0 :   EvtSVVHelAmp::SVVHel(p,_amp2,getDaug(0),getDaug(1),AP,A0,AM);
     168             : 
     169             :   return ;
     170           0 : }
     171             : 
     172             : bool EvtPVVCPLH::isBsMixed ( EvtParticle * p ) {
     173           0 :   if ( ! ( p->getParent() ) ) return false ;
     174             : 
     175           0 :   static EvtId BS0=EvtPDL::getId("B_s0");
     176           0 :   static EvtId BSB=EvtPDL::getId("anti-B_s0");
     177             : 
     178           0 :   if ( ( p->getId() != BS0 ) && ( p->getId() != BSB ) ) return false ;
     179             : 
     180           0 :   if ( ( p->getParent()->getId() == BS0 ) ||
     181           0 :        ( p->getParent()->getId() == BSB ) ) return true ;
     182             : 
     183           0 :   return false ;
     184           0 : }
     185             : 
     186             : 

Generated by: LCOV version 1.11