18 Double_t
interpolation(
const int nstat,
const int ndim,
const int first);
39 f=
new TF1(
"f1",
"gaus(0);x;f(x)", -5., 5.);
40 f->SetParameter(0, 1.);
41 f->SetParameter(1, 0.);
42 f->SetParameter(2, 1.);
43 f->SetParameter(0, 1./
f->Integral(-5., 5.));
46 f=
new TF2(
"f2",
"[0]*exp(-0.5*((x-[1])/[2])**2)*exp(-0.5*((y-[3])/[4])**2)", -5., 5., -5., 5.);
47 f->SetParameter(0, 1.);
48 f->SetParameter(1, 0.);
49 f->SetParameter(2, 1.);
50 f->SetParameter(3, 0.);
51 f->SetParameter(4, 1.);
52 f->SetParameter(0, 1./
f->Integral(-5., 5., -5., 5.));
57 f=
new TF3(
"f3",
"[0]*exp(-0.5*((x-[1])/[2])**2)*exp(-0.5*((y-[3])/[4])**2)*exp(-0.5*((z-[5])/[6])**2)", -5., 5., -5., 5., -5., 5.);
58 f->SetParameter(0, 1.);
59 f->SetParameter(1, 0.);
60 f->SetParameter(2, 1.);
61 f->SetParameter(3, 0.);
62 f->SetParameter(4, 1.);
63 f->SetParameter(5, 0.);
64 f->SetParameter(6, 1.);
65 f->SetParameter(0, 1./
f->Integral(-5., 5., -5., 5., -5., 5.));
66 if(ndim>3)
printf(
"Warning : chi2 results are unreliable !\n");
69 printf(
"%dD not supported in this macro.\n", ndim);
74 const Int_t nchi2 = 18;
75 const Int_t nfirst = 1;
78 TGraph *gChi2 =
new TGraph(nchi2);
79 gChi2->SetMarkerStyle(24);
80 Int_t ip = 0, nstat, first;
81 for(
int ifirst=0; ifirst<nfirst; ifirst++){
83 for(
int i=2; i<10; i++){
86 gChi2->SetPoint(ip++, TMath::Log10(
float(nstat)), chi2);
89 for(
int i=1; i<10; i++){
92 gChi2->SetPoint(ip++, TMath::Log10(
float(nstat)), chi2);
102 TClonesArray ar(
"TKDNodeInfo", 10);
117 const Bool_t kCHI2 = kFALSE;
118 const Bool_t kINT = kFALSE;
121 TString fn(
"5D_Gauss.root");
122 if(!gSystem->FindFile(
".", fn))
build(5, 1000000);
124 TTree *t = (TTree*)gFile->Get(
"db");
127 TString var =
"x0";
for(
int idim=1; idim<ndim; idim++) var += Form(
":x%d", idim);
128 TKDPDF pdf(t, var.Data(),
"", bs, nstat, first);
129 printf(
"\n\nFINISH BUILDING PDF\n\n");
149 Double_t x[2], r, e,
chi2;
150 TH2 *h2 =
new TH2F(
"h2",
"", 50, -4., 4., 50, -4., 4.);
151 TAxis *ax = h2->GetXaxis(), *ay = h2->GetYaxis();
152 for(
int ix=1; ix<=ax->GetNbins(); ix++){
153 x[0] = ax->GetBinCenter(ix);
154 for(
int iy=1; iy<=ay->GetNbins(); iy++){
155 x[1] = ay->GetBinCenter(iy);
157 chi2 = pdf.Eval(x, r, e);
158 printf(
"x[%2d] x[%2d] r[%f] e[%f] chi2[%f]\n", ix, iy, r, e, chi2);
159 h2->SetBinContent(ix, iy, r);
167 Double_t dx[5] = {4., 4., 4., 4., 4.};
168 Double_t
chi2, theor, result, err;
169 for(
int idim=0; idim<ndim; idim++){
170 dx[idim] = (ndim<<2)/
float(npoints);
171 x[idim] = -2.+dx[idim]/2.;
177 for(
int ip=0; ip<in.GetNTNodes(); ip++){
178 in.GetCOGPoint(ip, c, v, ve);
179 for(
int idim=0; idim<ndim; idim++) x[idim] = (Double_t)c[idim];
180 in.Eval(x, result, err);
182 printf(
"\nInterpolating %d data points in %dD ...\n", nstat, ndim);
183 printf(
"\tbucket size %d\n", bs);
184 printf(
"\tstarting interpolation ...\n");
189 for(
int idim=0; idim<ndim; idim++) x[idim] = 0.;
190 in.Eval(x, result, err);
191 Double_t threshold = err/result;
194 chi2 = 0.; Int_t nsample = 0;
205 in.Eval(x, result, err);
206 if(err/TMath::Abs(result) < 1.1*threshold){
207 theor =
f->Eval(x[0], x[1], x[2]);
208 Double_t tmp = result - theor; tmp *= tmp;
209 chi2 += tmp/(kCHI2 ? err*err : theor);
212 }
while((x[0] += dx[0]) < 2.);
213 }
while((x[1] += dx[1]) < 2.);
214 }
while((x[2] += dx[2]) < 2.);
215 }
while((x[3] += dx[3]) < 2.);
216 }
while((x[4] += dx[4]) < 2.);
217 chi2 /= float(nsample);
218 printf(
"\tinterpolation quality (chi2) %f\n", chi2);
220 return kCHI2 ? chi2 : TMath::Sqrt(chi2);
227 printf(
"Building DB ...\n");
229 TFile::Open(Form(
"%dD_Gauss.root", ndim),
"RECREATE");
230 TTree *t =
new TTree(
"db", Form(
"%dD data base for kD statistics", ndim));
231 for(
int idim=0; idim<ndim; idim++) t->Branch(Form(
"x%d", idim), &data[idim], Form(
"x%d/F", idim));
233 for (Int_t ip=0; ip<
npoints; ip++){
234 for (Int_t
id=0;
id<ndim;
id++) data[
id]= gRandom->Gaus();
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
TFile * Open(const char *filename, Long64_t &nevents)
void interpolTest(const Int_t ndim=1)
Double_t interpolation(const int nstat, const int ndim, const int first)
void build(const int ndim, const int npoints)