27 namespace MD = MultiDimensional;
29 FFLbtoLcBLRS::FFLbtoLcBLRS() {
31 vector<IndexType> dims = {12};
33 string name{
"FFLbtoLcBLRS"};
36 addProcessSignature(-PID::LAMBDAB, {PID::LAMBDACMINUS});
42 void FFLbtoLcBLRS::defineSettings() {
44 setPath(getFFErrPrefixGroup().
get());
48 addSetting<double>(
"as",0.26);
49 addSetting<double>(
"mb1S",4.7215);
50 addSetting<double>(
"dmbmc",3.400);
51 addSetting<double>(
"mLb",5.620);
52 addSetting<double>(
"mLc",2.286);
54 addSetting<double>(
"z1",-2.037);
55 addSetting<double>(
"z2",3.159);
56 addSetting<double>(
"b1",-0.459);
57 addSetting<double>(
"b2",-0.390);
70 const double Mb = pLbmes.
mass();
71 const double Mc = pLcmes.
mass();
73 const double Sqq = Mb*Mb + Mc*Mc - 2. * (pLbmes * pLcmes);
75 evalAtPSPoint({Sqq}, {Mb, Mc});
78 void FFLbtoLcBLRS::evalAtPSPoint(
const vector<double>& point,
const vector<double>& masses) {
79 Tensor& result = getTensor();
83 MSG_WARNING(
"Warning, Settings have not been defined!");
89 if(masses.size() >= 2) {
95 Mb = this->masses()[0];
96 Mc = this->masses()[1];
98 const double Mb2 = Mb*Mb;
99 const double Mc2 = Mc*Mc;
101 double Sqq = point[0];
104 double w = (Mb2 + Mc2 - Sqq)/(2.*Mb*Mc);
106 if(
isZero(w - 1.0)) w += 1e-6;
107 const double wSq = w*w;
110 const double aS = (*getSetting<double>(
"as"))/
pi;
111 const double mb1S = unitres*(*getSetting<double>(
"mb1S"));
112 const double dmbmc = unitres*(*getSetting<double>(
"dmbmc"));
113 const double mLb = unitres*(*getSetting<double>(
"mLb"));
114 const double mLc = unitres*(*getSetting<double>(
"mLc"));
115 const double mc1S = mb1S - dmbmc;
116 const double mc2 = pow(mc1S,2.);
121 const double la1S = (mb1S*(mLb - mb1S) - mc1S*(mLc - mc1S))/(mb1S - mc1S);
123 const double eB0 = la1S/(2.*mb1S);
124 const double eC0 = la1S/(2.*mc1S);
129 const double eps = 2.*pow(aS*
pi,2.)/9.;
130 const double eB = eB0 + eps*(dmbmc*mc1S - mb1S*mLb + mc1S*mLc)/(mb1S - mc1S)/(2.*mb1S);
131 const double eC = eC0 + eps*((mb1S*(dmbmc*mb1S - mb1S*mLb + mc1S*mLc))/(mc1S*(mb1S - mc1S)))/(2.*mc1S);
133 const double zBC = mc1S/mb1S;
136 const double z1 = (*getSetting<double>(
"z1"));
137 const double z2 = (*getSetting<double>(
"z2"));
138 const double b1 = unitres*unitres*(*getSetting<double>(
"b1"));
139 const double b2 = unitres*unitres*(*getSetting<double>(
"b2"));
143 const double zetaIW = 1. + z1*(w-1) + 0.5*z2*pow(w-1,2.);
146 const double Cs = CS(w, zBC);
147 const double Cps = CP(w, zBC);
148 const double Cv1 = CV1(w, zBC);
149 const double Cv2 = CV2(w, zBC);
150 const double Cv3 = CV3(w, zBC);
151 const double Ca1 = CA1(w, zBC);
152 const double Ca2 = CA2(w, zBC);
153 const double Ca3 = CA3(w, zBC);
154 const double Ct1 = CT1(w, zBC);
155 const double Ct2 = CT2(w, zBC);
156 const double Ct3 = CT3(w, zBC);
158 const double Csp = (CS(w + 1e-6, zBC) - Cs)/1e-6;
159 const double Cpsp = (CP(w + 1e-6, zBC) - Cps)/1e-6;
160 const double Cv1p = (CV1(w + 1e-6, zBC) - Cv1)/1e-6;
161 const double Cv2p = (CV2(w + 1e-6, zBC) - Cv2)/1e-6;
162 const double Cv3p = (CV3(w + 1e-6, zBC) - Cv3)/1e-6;
163 const double Ca1p = (CA1(w + 1e-6, zBC) - Ca1)/1e-6;
164 const double Ca2p = (CA2(w + 1e-6, zBC) - Ca2)/1e-6;
165 const double Ca3p = (CA3(w + 1e-6, zBC) - Ca3)/1e-6;
166 const double Ct1p = (CT1(w + 1e-6, zBC) - Ct1)/1e-6;
167 const double Ct2p = (CT2(w + 1e-6, zBC) - Ct2)/1e-6;
168 const double Ct3p = (CT3(w + 1e-6, zBC) - Ct3)/1e-6;
171 const double hs = 1 + b1/(4.*mc2) + (eB*(w - 1))/(1 + w) + (eC*(w - 1))/(1 + w) +
172 aS*(Cs + (eB0*(w - 1)*(Cs + 2.*Csp*(1 + w)))/(1 + w) + (eC0*(w - 1)*(Cs + 2.*Csp*(1 + w)))/(1 + w)) ;
173 const double hp = 1 + eB + eC + b1/(4.*mc2) - b2/(4.*mc2) + aS*(Cps + eB0*(Cps + 2.*Cpsp*(w - 1)) + eC0*(Cps + 2.*Cpsp*(w - 1))) ;
174 const double f1 = 1 + eB + eC + b1/(4.*mc2) - b2/(4.*mc2) + aS*(Cv1 + eB0*(Cv1 + 2.*Cv1p*(w - 1)) + eC0*(Cv1 + 2.*Cv1p*(w - 1))) ;
175 const double f2 = b2/(4.*mc2) - (2.*eC)/(1 + w) + aS*(Cv2 + (eC0*(-2.*Cv1 - Cv2 - 2.*Cv3 + Cv2*w
176 + 2.*Cv2p*(-1 + wSq)))/(1 + w) +
177 (eB0*(Cv2*(-1 + 3.*w) + 2.*Cv2p*(-1 + wSq)))/(1 + w)) ;
178 const double f3 = (-2.*eB)/(1 + w) + aS*(Cv3 + (eB0*(-2.*Cv1 - 2.*Cv2 - Cv3 + Cv3*w
179 + 2.*Cv3p*(-1 + wSq)))/(1 + w) +
180 (eC0*(Cv3*(-1 + 3.*w) + 2.*Cv3p*(-1 + wSq)))/(1 + w)) ;
181 const double g1 = 1 + b1/(4.*mc2) + (eB*(w - 1))/(1 + w) + (eC*(w - 1))/(1 + w) +
182 aS*(Ca1 + (eB0*(w - 1)*(Ca1 + 2.*Ca1p*(1 + w)))/(1 + w) + (eC0*(w - 1)*(Ca1 + 2.*Ca1p*(1 + w)))/(1 + w)) ;
183 const double g2 = b2/(4.*mc2) - (2.*eC)/(1 + w) + aS*(Ca2 + (eC0*(-2.*Ca1 + Ca2 - 2.*Ca3 + Ca2*w
184 + 2.*Ca2p*(-1 + wSq)))/(1 + w) +
185 (eB0*(Ca2 + 3.*Ca2*w + 2.*Ca2p*(-1 + wSq)))/(1 + w)) ;
186 const double g3 = (2.*eB)/(1 + w) + aS*(Ca3 + (eB0*(2.*Ca1 - 2.*Ca2 + Ca3 + Ca3*w
187 + 2.*Ca3p*(-1 + wSq)))/(1 + w) +
188 (eC0*(Ca3 + 3.*Ca3*w + 2.*Ca3p*(-1 + wSq)))/(1 + w)) ;
189 const double h1 = 1 + b1/(4.*mc2) + (eB*(w - 1))/(1 + w) + (eC*(w - 1))/(1 + w) +
190 aS*(Ct1 + (eB0*(w - 1)*(Ct1 + 2.*Ct1p*(1 + w)))/(1 + w) + (eC0*(w - 1)*(Ct1 + 2.*Ct1p*(1 + w)))/(1 + w)) ;
191 const double h2 = b2/(4.*mc2) - (2.*eC)/(1 + w) + aS*(Ct2 + (eC0*(-2.*Ct1 + Ct2 - 2.*Ct3 + Ct2*w
192 + 2.*Ct2p*(-1 + wSq)))/(1 + w) +
193 (eB0*(Ct2 + 3.*Ct2*w + 2.*Ct2p*(-1 + wSq)))/(1 + w)) ;
194 const double h3 = (2.*eB)/(1 + w) + aS*(Ct3 + (eB0*(2.*Ct1 - 2.*Ct2 + Ct3 + Ct3*w
195 + 2.*Ct3p*(-1 + wSq)))/(1 + w) +
196 (eC0*(Ct3 + 3.*Ct3*w + 2.*Ct3p*(-1 + wSq)))/(1 + w)) ;
197 const double h4 = aS*((-2.*Ct2*eB0)/(1 + w) + (2.*Ct3*eC0)/(1 + w)) ;
217 std::unique_ptr<FormFactorBase> FFLbtoLcBLRS::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.
static constexpr double pi