TStopwatch timer; const Int_t nt = 100; //___________________________________________________________ void pdfIO(const Int_t method = 0) { // Test interpolator IO response for several data dimensions. // method = 0 : use COG interpolator // method = 1 : use INT interpolator Float_t tw, tr; TGraph *gw = new TGraph(5); gw->SetMarkerStyle(24);gw->SetMarkerColor(2); TGraph *gr = new TGraph(5); gr->SetMarkerStyle(25);gr->SetMarkerColor(4); for(int idim = 1; idim<6; idim++){ tw = interpolWrite(method, idim); gw->SetPoint(idim-1, idim, tw); tr = interpolRead(idim); gr->SetPoint(idim-1, idim, tr); } gw->Draw("apl"); gr->Draw("pl"); } //___________________________________________________________ Float_t interpolWrite(const Int_t method, const Int_t ndim) { if(!gSystem->FindFile(".", "5D_Gauss.root")) build(5, 1000000); TFile::Open("5D_Gauss.root"); printf("\nWriting %dD interpolator ...\n", ndim); TTree *db = (TTree*)gFile->Get("db"); TString var = "x0"; for(int idim=1; idimClose(); delete fi; delete [] p; return time; } //___________________________________________________________ Float_t interpolRead(const Int_t ndim) { printf("Reading %dD interpolator ...\n", ndim); TFile::Open(Form("%dD_Interpolator.root", ndim)); TKDPDF *pdf = (TKDPDF*)gFile->Get(Form("%dDgauss", ndim)); gFile->Close(); printf("\tDoing interpolation ...\n"); Float_t *c, v, ve; Double_t *p = new Double_t[ndim], r, re; timer.Start(kTRUE); for(int ip=0; ipGetNTNodes(); ip++){ pdf->GetCOGPoint(ip, c, v, ve); for(int idim=0; idimEval(p, r, re); } timer.Stop(); Float_t time = 1.E3*timer.CpuTime()/float(nt); printf("\tFinish interpolation in %6.2f [ms]\n", time); delete [] p; return time; } //___________________________________________________________ void build(const int ndim, const int npoints) { printf("Building DB ...\n"); Float_t data[ndim]; TFile::Open(Form("%dD_Gauss.root", ndim), "RECREATE"); TTree *t = new TTree("db", Form("%dD data base for kD statistics", ndim)); for(int idim=0; idimBranch(Form("x%d", idim), &data[idim], Form("x%d/F", idim)); for (Int_t ip=0; ipGaus(); t->Fill(); } t->Write(); gFile->Close(); delete gFile; }