Exemplo n.º 1
0
//=============================================================================
// 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)));
  }
}
Exemplo n.º 2
0
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);
    }
}