11 #include "EvtGenBase/EvtParticle.hh"
12 #include "EvtGenBase/EvtPDL.hh"
13 #include "EvtGenBase/EvtId.hh"
14 #include "EvtGenBase/EvtAmp.hh"
16 #include "framework/logging/Logger.h"
17 #include "generators/evtgen/models/EvtBSemiTauonicScalarMesonAmplitude.h"
18 #include "generators/evtgen/models/EvtBSemiTauonicHelicityAmplitudeCalculator.h"
29 EvtBSemiTauonicHelicityAmplitudeCalculator* CalcHelAmp)
32 static EvtId EM = EvtPDL::getId(
"e-");
33 static EvtId MUM = EvtPDL::getId(
"mu-");
34 static EvtId TAUM = EvtPDL::getId(
"tau-");
41 EvtVector4R p4d = p->getDaug(0)->getP4();
42 EvtVector4R p4l = p->getDaug(1)->getP4();
43 EvtVector4R p4n = p->getDaug(2)->getP4();
44 EvtVector4R p4ln(p4l + p4n);
46 EvtVector4R p4dln = boostTo(p4d, p4ln,
true);
47 EvtVector4R p4lln = boostTo(p4l, p4ln,
true);
49 const double gmB = p->getP4().mass();
50 const double gmd = p4d.mass();
51 const double gr = gmd / gmB;
53 const double q2 = (p4l + p4n).mass2();
54 const double w = (1. + gr * gr - q2 / gmB / gmB) / 2. / gr;
56 const double costau = p4dln.dot(p4lln) / p4dln.d3mag() / p4lln.d3mag();
57 const double ml = p4l.mass();
61 helamp[0] = CalcHelAmp->helAmp(ml, 1, 2, w, costau);
62 helamp[1] = CalcHelAmp->helAmp(ml, -1, 2, w, costau);
80 EvtComplex l_SpFromHel[2][2];
81 EvtId l_num = p->getDaug(1)->getId();
83 l_SpFromHel[0][0] = conj(l_HelFromSp.get(0, 0));
84 l_SpFromHel[0][1] = conj(l_HelFromSp.get(1, 0));
85 l_SpFromHel[1][0] = conj(l_HelFromSp.get(0, 1));
86 l_SpFromHel[1][1] = conj(l_HelFromSp.get(1, 1));
95 EvtComplex spinamp[2];
97 for (
int lsp = 0; lsp < 2; lsp++) {
98 for (
int lhel = 0; lhel < 2; lhel++) {
100 if (l_num == EM || l_num == MUM || l_num == TAUM) {
101 spinamp[lsp] += l_SpFromHel[lsp][lhel] * helamp[lhel];
105 spinamp[lsp] += l_SpFromHel[lsp][lhel] * (lhel == 0 ? +1 : -1) * conj(helamp[1 - lhel]);
110 amp.vertex(0, spinamp[0]);
111 amp.vertex(1, spinamp[1]);
114 double helprob = abs2(helamp[0]) + abs2(helamp[1]);
115 double spinprob = abs2(spinamp[0]) + abs2(spinamp[1]);
116 if (fabs(helprob - spinprob) / helprob > 1E-6 || !finite(helprob) || !finite(spinprob)) {
117 B2ERROR(
"EvtBSemiTauonicScalarMesonAmplitude total helicity prob does not match with total spin prob.");
118 B2ERROR(
"helprob: " << helprob <<
" spinprob: " << spinprob);
119 B2ERROR(
"w: " << w <<
" costau: " << costau <<
" hel probs: " << abs2(helamp[0])
120 <<
"\t" << abs2(helamp[1])
121 <<
"\t" << abs2(helamp[0]) + abs2(helamp[1]));
123 B2ERROR(
"w: " << w <<
" costau: " << costau <<
" spin probs: " << abs2(spinamp[0])
124 <<
"\t" << abs2(spinamp[1])
125 <<
"\t" << abs2(spinamp[0]) + abs2(spinamp[1]));