5 #ifndef PHYSICS_DYNAMICS_RELATIVISTICBREITWIGNER_HPP_ 6 #define PHYSICS_DYNAMICS_RELATIVISTICBREITWIGNER_HPP_ 23 std::pair<std::shared_ptr<ComPWA::FunctionTree::Value<std::vector<double>>>,
24 std::shared_ptr<ComPWA::FunctionTree::Value<std::vector<double>>>>
27 std::shared_ptr<ComPWA::FunctionTree::FitParameter>
Mass;
30 std::shared_ptr<ComPWA::FunctionTree::FitParameter>
MesonRadius;
35 namespace RelativisticBreitWigner {
38 double, double, double, double, double,
unsigned int, double,
39 std::shared_ptr<FormFactor>)>;
43 std::shared_ptr<ComPWA::FunctionTree::FitParameter>
Width;
76 inline std::complex<double>
78 double width,
unsigned int L,
double mesonRadius,
81 double sqrtS = std::sqrt(mSq);
84 auto phspFactorSqrtS =
phspFactor(sqrtS, ma, mb);
88 if (phspFactorSqrtS == std::complex<double>(0, 0))
89 return std::complex<double>(0, 0);
94 double qRatio = (phspFactorSqrtS / phspFactormR);
97 FormFactorFunctor->operator()(
qSquared(mR * mR, ma, mb),
L, mesonRadius);
99 FormFactorFunctor->operator()(
qSquared(mSq, ma, mb),
L, mesonRadius);
100 double barrierTermSq = qRatio * (ff * ff) / (ffR * ffR);
102 std::complex<double> denom(mR * mR - mSq,
103 -1. * sqrtS * width * barrierTermSq);
105 std::complex<double> result = mR * width / denom;
107 assert((!std::isnan(result.real()) || !std::isinf(result.real())) &&
108 "RelativisticBreitWigner::standardRelBW() | Result is NaN or Inf!");
109 assert((!std::isnan(result.imag()) || !std::isinf(result.imag())) &&
110 "RelativisticBreitWigner::standardRelBW() | Result is NaN or Inf!");
146 double mSq,
double mR,
double ma,
double mb,
double width,
unsigned int L,
149 std::complex<double> i(0, 1);
150 double sqrtS = std::sqrt(mSq);
157 if (phspFactorSqrtS == std::complex<double>(0, 0))
158 return std::complex<double>(0, 0);
163 std::complex<double> qRatio = (phspFactorSqrtS / phspFactormR);
165 double ffR = FormFactorFunctor->operator()(
166 std::pow(std::abs(
qValueAC(mR, ma, mb)), 2),
L, mesonRadius);
167 double ff = FormFactorFunctor->operator()(
168 std::pow(std::abs(
qValueAC(sqrtS, ma, mb)), 2),
L, mesonRadius);
169 std::complex<double> barrierTermSq = qRatio * (ff * ff) / (ffR * ffR);
173 std::complex<double> gammaA(1, 0);
175 std::complex<double> qR = std::pow(
qValueAC(mR, ma, mb), L);
180 std::complex<double> g_final =
183 std::complex<double> denom(mR * mR - mSq, 0);
184 denom += (-1.0) * i * sqrtS * (width * barrierTermSq);
186 std::complex<double> result = g_final / denom;
188 assert((!std::isnan(result.real()) || !std::isinf(result.real())) &&
189 "RelativisticBreitWigner::relativisticBreitWignerAnalyticCont() | " 190 "Result is NaN or Inf!");
191 assert((!std::isnan(result.imag()) || !std::isinf(result.imag())) &&
192 "RelativisticBreitWigner::relativisticBreitWignerAnalyticCont() | " 193 "Result is NaN or Inf!");
210 "RelativisticBreitWigner"),
214 std::shared_ptr<ComPWA::FunctionTree::Parameter> &out);
BreitWignerStrategy(std::shared_ptr< FormFactor > FF, RelativisticBreitWigner::BreitWignerFunction BWFunction_)
double phspFactor(double sqrtS, double ma, double mb)
RelativisticBreitWigner::BreitWignerFunction BWFunction
std::complex< double > phspFactorAC(double sqrtS, double ma, double mb)
Two body phsp factor.
std::function< std::complex< double >(double, double, double, double, double, unsigned int, double, std::shared_ptr< FormFactor >)> BreitWignerFunction
double qSquared(double S, double sqrtSA, double sqrtSB)
Calculate Break-up momentum squared.
std::shared_ptr< FormFactor > FormFactorFunctor
std::complex< double > relativisticBreitWigner(double mSq, double mR, double ma, double mb, double width, unsigned int L, double mesonRadius, std::shared_ptr< FormFactor > FormFactorFunctor)
Relativistic Breit-Wigner model with barrier factors.
std::complex< double > relativisticBreitWignerAnalyticCont(double mSq, double mR, double ma, double mb, double width, unsigned int L, double mesonRadius, std::shared_ptr< FormFactor > FormFactorFunctor)
Relativistic Breit-Wigner model with barrier factors.
std::complex< double > widthToCoupling(double mR, double width, std::complex< double > gamma, std::complex< double > phspFactor)
Convert width to complex coupling.
std::shared_ptr< ComPWA::FunctionTree::TreeNode > createFunctionTree(std::shared_ptr< ComPWA::FunctionTree::Value< std::vector< double >>> InvMassSquaredDaughter1, std::shared_ptr< ComPWA::FunctionTree::Value< std::vector< double >>> InvMassSquaredDaughter2, std::shared_ptr< ComPWA::FunctionTree::FitParameter > MesonRadius, unsigned int L, std::shared_ptr< FormFactor > FormFactorFunctor, std::shared_ptr< ComPWA::FunctionTree::Value< std::vector< double >>> InvMassSquared)
std::complex< double > qValueAC(double sqrtS, double ma, double mb)
Calculate Break-up momentum.
ParType
Enums for the type of the parameter, should be extended if an new parameter type is added...
Virtual base class for operations of FunctionTree nodes.
This class provides a list of parameters and values of different types.