58 if (sources.empty()) {
59 Warning(
"TKDEFGT::BuildModel",
"Bad input - zero size vector");
64 Warning(
"TKDEFGT::BuildModel",
"Number of dimensions is zero");
69 Warning(
"TKDEFGT::BuildModel",
"Order of truncation is zero, 8 will be used");
108 Warning(
"TKDEFGT::BuildModel",
"Bad input - zero size vector");
115 Warning(
"TKDEFGT::BuildModel",
"Order of truncation is zero, 8 will be used");
172 for (
UInt_t j = 0; j < nP; x_j +=
fDim, ++j) {
173 fDistC[j] = (j == ind) ? 0. : DDist(x_j , x_ind ,
fDim);
181 x_ind = &
x[0] + ind *
fDim;
182 for (
UInt_t j = 0; j < nP; x_j +=
fDim, ++j) {
183 const Double_t temp = (j==ind) ? 0.0 : DDist(x_j, x_ind,
fDim);
191 for (
UInt_t i = 0, nd = 0 ; i < nP; i++, nd +=
fDim) {
195 fXC[j + ibase] +=
x[j + nd];
198 for (
UInt_t i = 0, ibase = 0; i <
fK ; ++i, ibase +=
fDim) {
201 fXC[j + ibase] *= temp;
222 for (
UInt_t j = 0; j < nP; ++j) {
226 fDistC[j] = (j == 1) ? 0. : DDist(x_j, y_j, z_j, x_ind, y_ind, z_ind);
239 for (
UInt_t j = 0; j < nP; ++j) {
244 const Double_t temp = (j==ind) ? 0.0 : DDist(x_j, y_j, z_j, x_ind, y_ind, z_ind);
252 for (
UInt_t i = 0, nd = 0 ; i < nP; i++, nd +=
fDim) {
255 fXC[ibase] += sources->
V1(i);
256 fXC[ibase + 1] += sources->
V2(i);
257 fXC[ibase + 2] += sources->
V3(i);
260 for (
UInt_t i = 0, ibase = 0; i <
fK ; ++i, ibase +=
fDim) {
263 fXC[j + ibase] *= temp;
276 for (
UInt_t k = 1, t = 1, tail = 1; k <
fP; ++k, tail = t) {
280 for (
UInt_t j = head; j < tail; ++j, ++t) {
306 fDx[i] = (
x[i + nbase] -
fXC[i + ix2cbase]) * ctesigma;
313 for (
UInt_t k = 1, t = 1, tail = 1; k <
fP; ++k, tail = t) {
318 for (
UInt_t j = head; j < tail; ++j, ++t)
344 UInt_t ix2cbase = ix2c * 3;
349 fDx[0] = (sources->
V1(
n) -
fXC[ix2cbase]) * ctesigma;
350 fDx[1] = (sources->
V2(
n) -
fXC[ix2cbase + 1]) * ctesigma;
351 fDx[2] = (sources->
V3(
n) -
fXC[ix2cbase + 2]) * ctesigma;
358 for (
UInt_t k = 1, t = 1, tail = 1; k <
fP; ++k, tail = t) {
359 for (
UInt_t i = 0; i < 3; ++i) {
363 for (
UInt_t j = head; j < tail; ++j, ++t)
391 Error(
"TKDEFGT::Predict",
"Call BuildModel first!");
396 Warning(
"TKDEFGT::Predict",
"Empty targets vector.");
400 v.assign(ts.size() /
fDim, 0.);
414 for (
UInt_t kn = 0 ; kn <
fK ; ++kn) {
419 fDx[i] = (ts[i + mbase] -
fXC[i + xbase]) * ctesigma;
424 if (sum2 > eval)
continue;
428 for (
UInt_t k = 1, t = 1, tail = 1; k <
p; ++k, tail = t) {
433 for (
UInt_t j = head; j < tail; ++j, ++t)
446 for (
UInt_t i = 1; i < nP; ++i) {
451 const Double_t dRange = dMax - dMin;
452 for (
UInt_t i = 0; i < nP; ++i)
453 v[i] = (
v[i] - dMin) / dRange;
455 dMin =
v[0], dMax = dMin;
456 for (
UInt_t i = 1; i < nP; ++i) {
475 for (
UInt_t i = 1; i <= n_k; ++i) {
487 return (
x1 -
x2) * (
x1 -
x2) + (
y1 -
y2) * (
y1 -
y2) + (z1 - z2) * (z1 - z2);
496 for (
Int_t i = 0 ; i <
d ; i++) {
510 for (
UInt_t i = 0; i <
n; ++i) {
525 for (
UInt_t i = 2 ; i <=
d ; ++i)
528 const UInt_t cte = cnk * cted;
534 while (ctep != cte) {
535 ctep = ((
p +
d) * ctep) /
p;
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char y1
UInt_t SelectedSize() const
Size of selected sub-range.
Double_t V1(UInt_t ind) const
V1 from sub-range, converted to unit cube.
Double_t V2(UInt_t ind) const
V2 from sub-range, converted to unit cube.
Double_t V3(UInt_t ind) const
V3 from sub-range, converted to unit cube.
std::vector< UInt_t > fHeads
void Compute_C_k()
Coefficients C_K.
std::vector< UInt_t > fIndxc
virtual ~TKDEFGT()
Destructor.
void Predict(const std::vector< Double_t > &targets, std::vector< Double_t > &densities, Double_t e) const
Calculate densities.
std::vector< UInt_t > fCinds
std::vector< UInt_t > fXhead
std::vector< Double_t > fC_K
std::vector< Double_t > fDistC
void Kcenter(const std::vector< double > &x)
Solve kcenter task.
std::vector< Double_t > fXC
std::vector< Double_t > fProds
std::vector< UInt_t > fIndx
std::vector< Double_t > fDx
void Compute_A_k(const std::vector< Double_t > &x)
Coefficients A_K.
std::vector< UInt_t > fXboxsz
std::vector< Double_t > fA_K
std::vector< Double_t > fWeights
void BuildModel(const std::vector< Double_t > &sources, Double_t sigma=1., UInt_t dim=3, UInt_t p=8, UInt_t k=0)
Calculate coefficients for FGT.
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Exp(Double_t x)
Returns the base-e exponential function of x, which is e raised to the power x.
Double_t Sqrt(Double_t x)
Returns the square root of x.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
static uint64_t sum(uint64_t i)