1 const Float_t p[]={1.4, -.6}; //}{1.7, -.4};
2 void testKNN(const Float_t *p, const int kNN=20)
4 // Draw "kNN" nearest neighbours of point "p". The distance (in the L1
5 // metric) is encoded in the color code.
6 // To build the data refere to function build().
8 TFile::Open("2D_Gauss.root");
9 TKDInterpolator in(db, "x0:x1", "x0>-1.5&&x0<2.&&x1>-2.&&x1<2.", 300);
10 in.DrawNode(in.FindNode(p)-in.GetNNodes());
12 TMarker *mp = new TMarker(p[0], p[1], 3);
13 mp->SetMarkerColor(4);
17 Float_t d, d0, pknn[2];
18 in.FindNearestNeighbors(p, kNN, index, d0);
19 TMarker *ma = new TMarker[kNN];
20 for(int ip=0; ip<kNN; ip++){
21 in.GetDataPoint(index[ip], pknn);
22 d = TMath::Abs(p[0]-pknn[0]) + TMath::Abs(p[1]-pknn[1]);
23 ma[ip].SetMarkerStyle(4);
24 color = 101 - Int_t(50. * d/d0);
25 ma[ip].SetMarkerColor(color);
26 ma[ip].DrawMarker(pknn[0], pknn[1]);
30 void build(const Int_t ndim = 2, const Int_t nstat = 100000)
32 // Build "nstat" data points in "ndim" dimensions taken from an
33 // uncorrelated 2D Gauss distribution.
36 printf("build data ... \n");
37 Double_t pntTrain[ndim];
38 f = TFile::Open(Form("%dD_Gauss.root", ndim), "RECREATE");
39 t = new TTree("db", "gauss database");
40 for(int idim=0; idim<ndim; idim++) t->Branch(Form("x%d", idim), &pntTrain[idim], Form("x%d/D", idim));
42 for(int istat=0; istat<nstat; istat++){
43 for(int idim=0; idim<ndim; idim++) pntTrain[idim] = gRandom->Gaus();