void EvtPropSLPole::decay( EvtParticle *p ){ if(! _isProbMaxSet){ EvtId parnum,mesnum,lnum,nunum; parnum = getParentId(); mesnum = getDaug(0); lnum = getDaug(1); nunum = getDaug(2); double mymaxprob = calcMaxProb(parnum,mesnum, lnum,nunum,SLPoleffmodel); setProbMax(mymaxprob); _isProbMaxSet = true; } double minKstMass = EvtPDL::getMinMass(p->getDaug(0)->getId()); double maxKstMass = EvtPDL::getMaxMass(p->getDaug(0)->getId()); EvtIntervalFlatPdf flat(minKstMass, maxKstMass); EvtPdfGen<EvtPoint1D> gen(flat); EvtPoint1D point = gen(); double massKst = point.value(); p->getDaug(0)->setMass(massKst); p->initializePhaseSpace(getNDaug(),getDaugs()); // EvtVector4R p4meson = p->getDaug(0)->getP4(); calcamp->CalcAmp(p,_amp2,SLPoleffmodel); EvtParticle *mesonPart = p->getDaug(0); double meson_BWAmp = calBreitWigner(mesonPart, point); int list[2]; list[0]=0; list[1]=0; _amp2.vertex(0,0,_amp2.getAmp(list)*meson_BWAmp); list[0]=0; list[1]=1; _amp2.vertex(0,1,_amp2.getAmp(list)*meson_BWAmp); list[0]=1; list[1]=0; _amp2.vertex(1,0,_amp2.getAmp(list)*meson_BWAmp); list[0]=1; list[1]=1; _amp2.vertex(1,1,_amp2.getAmp(list)*meson_BWAmp); list[0]=2; list[1]=0; _amp2.vertex(2,0,_amp2.getAmp(list)*meson_BWAmp); list[0]=2; list[1]=1; _amp2.vertex(2,1,_amp2.getAmp(list)*meson_BWAmp); return; }
EvtComplex EvtMassAmp::amplitude(const EvtPoint1D& p) const { // Modified vertex double m = p.value(); // keep things from crashing.. if ( m< (_vd.mA()+_vd.mB()) ) return EvtComplex(0.,0.); EvtTwoBodyKine vd(_vd.mA(),_vd.mB(),m); // Compute mass-dependent width for relativistic propagator EvtPropBreitWignerRel bw(_prop.m0(),_prop.g0()*_vd.widthFactor(vd)); EvtComplex amp = bw.evaluate(m); // Birth vertex factors if(_useBirthFact) { assert(_vb); if ( (m+_vb->mB()) < _vb->mAB() ) { EvtTwoBodyKine vb(m,_vb->mB(),_vb->mAB()); amp *= _vb->phaseSpaceFactor(vb,EvtTwoBodyKine::AB); amp *= sqrt((vb.p() / _vb->pD())); if(_useBirthFactFF) { assert(_vb); amp *= _vb->formFactor(vb); } } else{ if ( _vb->L() != 0 ) amp=0.; } } // Decay vertex factors if(_useDeathFact) { amp *= _vd.phaseSpaceFactor(vd,EvtTwoBodyKine::AB); amp *= sqrt((vd.p() / _vd.pD())); } if(_useDeathFactFF) amp *= _vd.formFactor(vd); return amp; }
EvtComplex EvtPropBreitWigner::amplitude(const EvtPoint1D& x) const { double m = x.value(); EvtComplex value = sqrt(_g0/EvtConst::twoPi)/(m-_m0-EvtComplex(0.0,_g0/2.)); return value; }