9#include "CorrFit1DCFCumac.h"
18 CorrFit1DCFCumac::CorrFit1DCFCumac() : CorrFit1DCFCumac(2) {}
20 CorrFit1DCFCumac::CorrFit1DCFCumac(Int_t params) : CorrFit1DCF(params), fPis(TMath::Sqrt(TMath::Pi())), fHc(.1973), fZ(0) {}
22 CorrFit1DCFCumac::~CorrFit1DCFCumac() {}
24 Double_t CorrFit1DCFCumac::F1(Double_t z)
const {
28 Double_t CorrFit1DCFCumac::F2(Double_t z)
const {
return (1.0 - TMath::Exp(-z * z)) / z; }
30 Double_t CorrFit1DCFCumac::Ff1(Double_t x)
const {
return TMath::Exp(x * x - fZ * fZ) / fZ; }
32 Double_t CorrFit1DCFCumac::Integr()
const {
34 Double_t xx, de1, a1h, ddd, abs__, eps;
40 return Simps(zero, fZ, de1, ddd, eps, xx, a1h, abs__);
43 Double_t CorrFit1DCFCumac::Simps(Double_t a1,
50 Double_t aiabs)
const {
54 Double_t a, b, c__, f[7], h__;
56 Double_t p[5], s, x0, di1, di2, di3, eps, aeps, reps, delta;
75 reps = TMath::Abs(reps1);
76 aeps = TMath::Abs(aeps1);
77 for (k = 1; k <= 7; ++k) {
86 if ((x0 + h__ * 4 - b) * s <= 0.f) {
99 for (k = 2; k <= 7; ++k) {
106 di3 = TMath::Abs(f[0]);
107 for (k = 2; k <= 5; ++k) {
109 if ((x - b) * s >= 0.f) {
117 if (f[k - 1] - 1e17f != 0.f) {
123 f[k - 1] = Ff1(x) / 3.0;
125 di2 += p[k - 1] * f[k - 1];
127 di3 += p[k - 1] * (r__1 = f[k - 1], TMath::Abs(r__1));
129 di1 = (f[0] + f[2] * 4 + f[4]) * 2 * h__;
144 eps = (r__1 = (aiabs + di3) * reps, TMath::Abs(r__1));
145 if (eps - aeps >= 0.f) {
153 delta = (r__1 = di2 - di1, TMath::Abs(r__1));
154 if (delta - eps >= 0.f) {
160 if (delta - eps / 8 >= 0.f) {
170 for (k = 4; k <= 7; ++k) {
184 di1 = di2 + (di2 - di1) / 15;
210 Double_t CorrFit1DCFCumac::Sign(Double_t a, Double_t b)
const {
211 if (b >= 0)
return TMath::Abs(a);
212 return -TMath::Abs(a);
216 CorrFIt1DCFCumacLamLam::CorrFIt1DCFCumacLamLam() : CorrFit1DCFCumac(8) {}
219 Double_t d0, f0, r0, ai, ak, al, an, ex, f0m, r0m, zs, den, fim, fre, fsi, r_s__, r_t__, fsq, pol, r0res, alres;
220 Double_t ret_val, r__1;
222 case Femto::EKinematics::kPRF: ak = x[0];
break;
223 case Femto::EKinematics::kLCMS: ak = x[0] * 0.5;
break;
224 default: ak = 0.0;
break;
229 f0 = -params[ScatteringLengthID()];
230 d0 = params[EffectiveRadiusID()];
231 pol = params[LambdaPolarizationID()];
232 alres = params[ResidualAmplitudeID()];
233 r0res = params[ResidualGaussWidhtID()];
236 if (f0 != 0.0) { f0m = .1973 / f0 + d0 * .5 * ak * ak / .1973; }
237 if (r0 != 0.0) { r0m = .1973 / r0; }
238 den = f0m * f0m + ak * ak;
241 fsq = fre * fre + fim * fim;
242 fZ = (ak * 2.0) / r0m;
244 ex = TMath::Exp(-zs);
249 fsi = fsq * (r0m * r0m) * (1 - d0 / (r0 * 3.5449077020000002f)) + fre * 4 * r0m * ai / 1.772453851f;
250 fsi -= fim * 2 * r0m * (1 - ex) / fZ;
252 r_t__ = (pol * pol + 3) * .25f * (1 - al * ex);
253 r_s__ = (1 - pol * pol) * .25f * (al * (ex + fsi) + 1);
254 r__1 = ak * 2.0 * r0res / .1973f;
255 ret_val = an * (r_s__ + r_t__ + alres * exp(-(r__1 * r__1)));
259 CorrFIt1DCFCumacLamLam::~CorrFIt1DCFCumacLamLam() {}
261 CorrFit1DCFCumacPLam::CorrFit1DCFCumacPLam() : CorrFit1DCFCumac(8) {
274 CorrFit1DCFCumacPLam::~CorrFit1DCFCumacPLam() {}
279 case Femto::EKinematics::kPRF: ak = x[0];
break;
280 case Femto::EKinematics::kLCMS: ak = x[0] * 0.5;
break;
281 default: ak = 0.0;
break;
287 Double_t f0_s = params[SingletScatteringLengthID()];
288 Double_t d0_s = params[SingletEffectiveRadiusID()];
289 Double_t f0_t = params[TripletScatteringLenghtID()];
290 Double_t d0_t = params[TripletEffectiveRadiusID()];
291 Double_t POL = params[LambdaPolarizationID()];
293 Double_t r0m = fHc / r0;
294 Double_t f0m_s = (fHc / f0_s + 0.5 * ak * ak * d0_s / fHc);
295 Double_t den_s = TMath::Power(f0m_s, 2) + TMath::Power(ak, 2);
296 Double_t fre_s = f0m_s / den_s;
297 Double_t fim_s = ak / den_s;
298 Double_t fsq_s = TMath::Power(fre_s, 2) + TMath::Power(fim_s, 2);
300 Double_t f0m_t = (fHc / f0_t + 0.5 * ak * ak * d0_t / fHc);
301 Double_t den_t = TMath::Power(f0m_t, 2) + TMath::Power(ak, 2);
302 Double_t fre_t = f0m_t / den_t;
303 Double_t fim_t = ak / den_t;
304 Double_t fsq_t = TMath::Power(fre_t, 2) + TMath::Power(fim_t, 2);
307 Double_t zs = fZ * fZ;
308 Double_t ex = TMath::Exp(-zs);
309 Double_t ai = Integr();
310 Double_t fsi_s = 0.5 * (fsq_s * TMath::Power(r0m, 2) * (1. - d0_s / (2. * fPis * r0)) + 4. * fre_s * r0m * ai / fPis);
311 fsi_s = fsi_s - fim_s * r0m * (1. - ex) / fZ;
312 Double_t fsi_t = 0.5 * (fsq_t * TMath::Power(r0m, 2) * (1. - d0_t / (2. * fPis * r0)) + 4. * fre_t * r0m * ai / fPis);
313 fsi_t = fsi_t - fim_t * r0m * (1. - ex) / fZ;
314 Double_t R_t = .25 * (3. + TMath::Power(POL, 2)) * (1. + al * fsi_t);
315 Double_t R_s = .25 * (1. - TMath::Power(POL, 2)) * (1. + al * fsi_s);
316 return params[
NormID()] * (R_t + R_s);
322 case Femto::EKinematics::kPRF: ak = x[0];
break;
323 case Femto::EKinematics::kLCMS: ak = x[0] * 0.5;
break;
324 default: ak = 0.0;
break;
326 const Double_t mK2 = Const::KaonZeroMass() * Const::KaonZeroMass();
327 const Double_t mpi2 = Const::PionPlusMass() * Const::PionPlusMass();
328 const Double_t meta2 = 0.547862 * 0.547862;
329 const Double_t ak2 = ak * ak;
330 Double_t s = 4. * (ak2 + mK2);
331 Double_t U = TMath::Sqrt(s);
332 Double_t k1prim = TMath::Sqrt(ak * ak + mK2 - mpi2);
333 Double_t e = TMath::Sqrt(ak2 + mK2) * 2.0;
338 Double_t k2prim = TMath::Sqrt(mpi2 * mpi2 + meta2 * meta2 + s * s - 2.0 * (mpi2 * meta2 + mpi2 * s + meta2 * s)) / (2.0 * U);
340 TComplex num1(params[Mf0ID()] * params[Mf0ID()] - s, -params[Gamma_f0KKID()] * ak - params[Gamma_f0pipiID()] * k1prim);
341 TComplex num2(params[Ma0ID()] * params[Ma0ID()] - s, -params[Gamma_a0KKID()] * ak - params[Gamma_a0PiEtaID()] * k2prim);
343 TComplex f_1(params[Gamma_f0KKID()], 0);
344 TComplex f_2(params[Gamma_a0KKID()], 0);
347 TComplex fk = 0.5 * (f_1 + f_2);
348 Double_t r = params[
RadiusID()] * Femto::FmToGeV();
349 Double_t qr = ak * r * 2.;
350 Double_t fkM = (fk / r).Rho();
353 params[
AssymetryID()] * (fkM * fkM + 4. * fk.Re() / (fPis * r) * F1(qr) - 2.0 * fk.Im() * F2(qr) / (r));
354 return params[
NormID()] * (1 + params[
LambdaID()] * (TMath::Exp(-qr * qr) + strong));
369 Double_t params[5][6] = {{0.978, 0.792, 0.199, 0.974, 0.333, 0.222},
370 {0.973, 2.763, 0.5283, 0.985, 0.4038, 0.3711},
371 {0.996, 1.305, 0.2684, 0.992, 0.5555, 0.4401},
372 {0.996, 1.305, 0.2684, 1.003, 0.8365, 0.4580},
374 for (
int i = 0; i < 6; i++) {
376 for (
int j = 0; j < 4; j++)
378 params[4][i] = val / 4.0;
381 if (opt > 4) opt = 4;
395 case Femto::EKinematics::kPRF: ak = x[0];
break;
396 case Femto::EKinematics::kLCMS: ak = x[0] * 0.5;
break;
397 default: ak = 0.0;
break;
399 const Double_t mK2 = Const::KaonZeroMass() * Const::KaonZeroMass();
400 const Double_t mpi2 = Const::PionPlusMass() * Const::PionPlusMass();
401 const Double_t meta2 = 0.547862 * 0.547862;
402 const Double_t ak2 = ak * ak;
403 Double_t s = 4. * (ak2 + mK2);
404 Double_t U = TMath::Sqrt(s);
405 Double_t k1prim = TMath::Sqrt(ak * ak + mK2 - mpi2);
406 Double_t e = TMath::Sqrt(ak2 + mK2) * 2.0;
408 TMath::Sqrt(mpi2 * mpi2 - 2.0 * mpi2 * meta2 - 2.0 * e * e * mpi2 + meta2 * meta2 - 2.0 * e * e * meta2 + e * e * e * e)
411 Double_t k2prim = TMath::Sqrt(mpi2 * mpi2 + meta2 * meta2 + s * s - 2.0 * (mpi2 * meta2 + mpi2 * s + meta2 * s)) / (2.0 * U);
412 double k2prim_old = k2prim;
414 std::cout <<
"k- " << k2prim_old <<
" " << k2prim << std::endl;
415 TComplex num(params[Ma0ID()] * params[Ma0ID()] - s, -params[Gamma_a0KKID()] * ak - params[Gamma_a0PiEtaID()] * k2prim);
416 TComplex f(params[Gamma_a0KKID()], 0);
419 Double_t r = params[
RadiusID()] * Femto::FmToGeV();
420 Double_t qr = ak * r * 2.;
421 Double_t fkM = (fk / r).Rho();
423 Double_t strong = 0.25 * (fkM * fkM + 4.0 * fk.Re() / (fPis * r) * F1(qr) - 2.0 * fk.Im() * F2(qr) / (r));
425 double val = params[
NormID()] * (1 + params[
LambdaID()] * strong);
426 std::cout << ak <<
" fk " << fk.Re() <<
" " << fk.Im() <<
" " << F1(qr) << std::endl;
439 Double_t params[5][3] = {
440 {0.985, 0.4038, 0.3711}, {0.992, 0.5555, 0.4401}, {1.003, 0.8365, 0.4580}, {0.974, 0.3330, 0.2220}, {}};
443 for (
int i = 0; i < 3; i++) {
445 for (
int j = 0; j < 4; j++)
447 params[4][i] = val / 4.0;
450 if (opt > 4) opt = 4;
451 fGammaCalc.
ReInit(Const::KaonZeroMass(), Const::KaonZeroMass(), Const::PionPlusMass(), 0.547862);
463 case Femto::EKinematics::kPRF: ak = x[0];
break;
464 case Femto::EKinematics::kLCMS: ak = x[0] * 0.5;
break;
465 default: ak = 0.0;
break;
468 Double_t f0_d = params[DoubletScatteringLengthID()];
469 Double_t d0_d = params[DoubletEffectiveRadiusID()];
470 Double_t f0_q = params[QuartetScatteringLenghtID()];
471 Double_t d0_q = params[QuartetEffectiveRadiusID()];
472 Double_t r0 = Femto::FmToGeV(params[
RadiusID()]);
473 Double_t q = 2.0 * ak;
474 auto component = [&](
double f0,
double d0) {
475 f0 = Femto::FmToGeV(f0);
476 d0 = Femto::FmToGeV(d0);
478 TComplex tmp = TComplex(d0 * ak * ak * 0.5, -ak) + 1.0 / f0;
479 auto fk = TComplex(1.0, 0) / tmp;
480 return (fk * fk).Rho() * F(d0, r0) / (2.0 * r0 * r0) + 2.0 * fk.Re() / (fPis * r0) * F1(q * r0) - fk.Im() / r0 * F2(q * r0);
483 Double_t strong = (component(f0_d, d0_d) + 2.0 * component(f0_q, d0_q)) / 3.0;
498 Double_t CorrFit1DCFCumacDLam::F(Double_t d, Double_t r0)
const {
return 1.0 - d / (2.0 * fPis * r0); }
virtual Double_t CalculateCF(const Double_t *x, const Double_t *params) const
virtual Double_t CalculateCF(const Double_t *x, const Double_t *params) const
virtual Double_t CalculateCF(const Double_t *x, const Double_t *params) const
void SetDefParams(Int_t opt)
Int_t AssymetryID() const
void SetDefParams(Int_t opt)
virtual Double_t CalculateCF(const Double_t *x, const Double_t *params) const
virtual Double_t CalculateCF(const Double_t *x, const Double_t *params) const
virtual Double_t Get(Double_t q, Double_t r)
virtual Double_t CalculateCF(const Double_t *, const Double_t *) const
Femto::EKinematics fKinematics
Int_t GetParametersNo() const
Double_t GetParameter(Int_t par) const
Double_t * fTempParamsEval
void FixParameter(Int_t par, Double_t val)
void SetParameterName(Int_t par, TString name)
std::vector< FitParam > fParameters
void ReInit(Double_t a, Double_t b, Double_t c, Double_t d)
Double_t Calculate(Double_t kstar) const