//============================================================================= // decay particle //============================================================================= void EvtBToDDalitzCPK::decay( EvtParticle * p ) { if ( _flag == 1 ) { // PHSP p -> initializePhaseSpace( getNDaug() , getDaugs() ) ; vertex ( 0. ) ; } else if ( _flag == 2 ) { // SVS p->initializePhaseSpace(getNDaug(),getDaugs()); EvtParticle *v; v = p->getDaug(0); double massv = v->mass(); EvtVector4R momv = v->getP4(); EvtVector4R moms = p->getDaug(1)->getP4(); double m_parent = p->mass(); EvtVector4R p4_parent = momv+moms; double norm=massv/(momv.d3mag()*m_parent); p4_parent = norm*p4_parent; vertex(0,p4_parent*(v->epsParent(0))); vertex(1,p4_parent*(v->epsParent(1))); vertex(2,p4_parent*(v->epsParent(2))); } }
void EvtSSD_DirectCP::decay( EvtParticle *p) { bool flip = false ; EvtId daugs[2]; // decide it is B or Bbar: if ( EvtRandom::Flat(0.,1.) < ( ( 1. - _acp ) / 2. ) ) { // it is a B if ( EvtPDL::getStdHep( getParentId() ) < 0 ) flip = true ; } else { // it is a Bbar if ( EvtPDL::getStdHep( getParentId() ) > 0 ) flip = true ; } if ( flip ) { if ( ( isB0Mixed( p ) ) || ( isBsMixed( p ) ) ) { p->getParent() ->setId( EvtPDL::chargeConj( p->getParent()->getId() ) ) ; p->setId( EvtPDL::chargeConj( p->getId() ) ) ; } else { p->setId( EvtPDL::chargeConj( p->getId() ) ) ; } } if (!flip) { daugs[0]=getDaug(0); daugs[1]=getDaug(1); } else { daugs[0]=EvtPDL::chargeConj(getDaug(0)); daugs[1]=EvtPDL::chargeConj(getDaug(1)); } EvtParticle *d; p->initializePhaseSpace(2, daugs); EvtVector4R p4_parent=p->getP4Restframe(); double m_parent=p4_parent.mass(); EvtSpinType::spintype d2type=EvtPDL::getSpinType(getDaug(1)); EvtVector4R momv; EvtVector4R moms; if (d2type==EvtSpinType::SCALAR) { d2type=EvtPDL::getSpinType(getDaug(0)); d= p->getDaug(0); momv = d->getP4(); moms = p->getDaug(1)->getP4(); } else { d= p->getDaug(1); momv = d->getP4(); moms = p->getDaug(0)->getP4(); } if (d2type==EvtSpinType::SCALAR) { vertex(1.); } if (d2type==EvtSpinType::VECTOR) { double norm=momv.mass()/(momv.d3mag()*p->mass()); vertex(0,norm*p4_parent*(d->epsParent(0))); vertex(1,norm*p4_parent*(d->epsParent(1))); vertex(2,norm*p4_parent*(d->epsParent(2))); } if (d2type==EvtSpinType::TENSOR) { double norm= d->mass()*d->mass()/(m_parent*d->getP4().d3mag()*d->getP4().d3mag()); vertex(0,norm*d->epsTensorParent(0).cont1(p4_parent)*p4_parent); vertex(1,norm*d->epsTensorParent(1).cont1(p4_parent)*p4_parent); vertex(2,norm*d->epsTensorParent(2).cont1(p4_parent)*p4_parent); vertex(3,norm*d->epsTensorParent(3).cont1(p4_parent)*p4_parent); vertex(4,norm*d->epsTensorParent(4).cont1(p4_parent)*p4_parent); } }