27 namespace MD = MultiDimensional;
29 FFLbtoLcPCR::FFLbtoLcPCR() {
31 vector<IndexType> dims = {12};
32 string name{
"FFLbtoLcPCR"};
35 addProcessSignature(-PID::LAMBDAB, {PID::LAMBDACMINUS});
41 void FFLbtoLcPCR::defineSettings() {
43 setPath(getFFErrPrefixGroup().
get());
46 addSetting<double>(
"mQ",5.28);
47 addSetting<double>(
"mq",1.89);
48 addSetting<double>(
"md",0.40);
49 addSetting<double>(
"aL",0.59);
50 addSetting<double>(
"aLp",0.55);
51 addSetting<double>(
"k2",1.0);
64 const double Mb = pLbmes.
mass();
65 const double Mc = pLcmes.
mass();
66 const double Sqq = Mb*Mb + Mc*Mc - 2. * (pLbmes * pLcmes);
68 evalAtPSPoint({Sqq}, {Mb, Mc});
71 void FFLbtoLcPCR::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
72 Tensor& result = getTensor();
76 MSG_WARNING(
"Warning, Settings have not been defined!");
82 if(masses.size() >= 2) {
88 Mb = this->masses()[0];
89 Mc = this->masses()[1];
91 const double Mb2 = Mb*Mb;
92 const double Mc2 = Mc*Mc;
94 double Sqq = point[0];
97 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
99 if(
isZero(w - 1.0)) w += 1e-6;
102 const double mQ = (*getSetting<double>(
"mQ"));
103 const double mq = (*getSetting<double>(
"mq"));
104 const double md = (*getSetting<double>(
"md"));
105 const double aL = (*getSetting<double>(
"aL"));
106 const double aLp = (*getSetting<double>(
"aLp"));
107 const double k2 = (*getSetting<double>(
"k2"));
109 const double aL2 = aL*aL;
110 const double aLp2 = aLp*aLp;
111 const double aLLp2 = 0.5*(aL2+aLp2);
112 const double rho2 = 3.*md*md/(2.*k2*aLLp2);
114 const double IH = pow(aL*aLp/aLLp2, 1.5)*exp(-rho2*(w*w-1.));
117 result.
element({2}) = 1. + (md/aLLp2)*((aLp2/mq)+(aL2/mQ));
118 result.
element({3}) = -((md/mq)*(aLp2/aLLp2) - aL2*aLp2/(4.*aLLp2*mq*mQ));
119 result.
element({4}) = -md*aL2/(mQ*aLLp2);
120 result.
element({5}) = 1. - (aL2*aLp2)/(12.*aLLp2*mq*mQ);
121 result.
element({6}) = -(md*aLp2/(mq*aLLp2) + (aL2*aLp2)/(12.*aLLp2*mq*mQ)*(1.+12.*md*md/aLLp2));
122 result.
element({7}) = md*aL2/(mQ*aLLp2) + md*md*aL2*aLp2/(mq*mQ*aLLp2*aLLp2);
128 std::unique_ptr<FormFactorBase> FFLbtoLcPCR::clone(
const std::string& label) {
TensorData makeEmptySparse(const IndexList &dimensions, const LabelsList &labels)
std::complex< double > & element(const IndexList &indices={})
access an element given its indices
Tensor indices label definitions.
double mass() const
returns the invariant mass if the invariant mass squared is negative returns
std::vector< Particle > ParticleList
Sparse tensor data container.
Multidimensional tensor class with complex numbers as elements.
bool isZero(const std::complex< double > val)
void clearData()
sets all the elements to 0
const FourMomentum & momentum() const
Various numerical constants.
Hammer particle data class.