/// \file /// \ingroup tutorial_FOAM /// \notebook -nodraw /// This simple macro demonstrates persistency of FOAM object. /// First run macro foam_demo.C to create file foam_demo.root with FOAM object. /// /// Next type `root -l foam_demopers.C` from shell command line /// /// \macro_code /// /// \author Stascek Jadach #include "Riostream.h" #include "TFile.h" #include "TFoam.h" #include "TROOT.h" #include "TSystem.h" #include "TFoamIntegrand.h" Int_t foam_demopers() { // need to load the foam_demo tutorial for the definition of the function TString macroName = gROOT->GetTutorialDir(); macroName.Append("/foam/foam_demo.C"); gROOT->ProcessLine(TString::Format(".L %s+",macroName.Data())); //****************************************** cout<<"====================== TestVector ================================"<Print(); cout<<"------------------------------------------------------------------"<PrintCells(); FoamX->CheckAll(1); //N.B. the integrand functions need to be reset // because cannot be made persistent TFoamIntegrand * rho = (TFoamIntegrand*) gROOT->ProcessLine("return new TFDISTR();"); FoamX->SetRho(rho); Double_t MCvect[2]; // 2-dim vector generated in the MC run for(long loop=0; loop<50000; loop++){ FoamX->MakeEvent(); // generate MC event FoamX->GetMCvect( MCvect); // get generated vector (x,y) Double_t x=MCvect[0]; Double_t y=MCvect[1]; if(loop<10) cout<<"(x,y) = ( "<< x <<", "<< y <<" )"<Finalize( IntNorm, Errel); // final printout Double_t MCresult, MCerror; FoamX->GetIntegMC( MCresult, MCerror); // get MC integral, should be one cout << " MCresult= " << MCresult << " +- " << MCerror <