Thanks a lot. I tested it with the code below [1], which generates a 2D data and creates a RooNDKeys pdf. Everything works find except “workspace->Print().”, which gives a segfault [2]. Could you fix this?
[1] Test code:
> #include "RooGlobalFunc.h"
> #endif
> #include "RooRealVar.h"
> #include "RooDataSet.h"
> #include "RooGaussian.h"
> #include "RooConstVar.h"
> #include "RooPolynomial.h"
> #include "RooKeysPdf.h"
> #include "RooNDKeysPdf.h"
> #include "RooProdPdf.h"
> #include "TCanvas.h"
> #include "TAxis.h"
> #include "TH1.h"
> #include "RooPlot.h"
> #include "RooWorkspace.h"
> #include "TFile.h"
> using namespace RooFit ;
>
>
> void writeNDKeys(){
> // Construct a 2D toy pdf for sampleing
> RooRealVar x("x","x",0,20) ;
> RooRealVar y("y","y",0,20) ;
> RooPolynomial p("p","p",x,RooArgList(RooConst(0.01),RooConst(-0.01),RooConst(0.0004))) ;
> RooPolynomial py("py","py",y,RooArgList(RooConst(0.01),RooConst(0.01),RooConst(-0.0004))) ;
> RooProdPdf pxy("pxy","pxy",RooArgSet(p,py)) ;
> RooDataSet* data = pxy.generate(RooArgSet(x,y),1000) ;
> // Create 2D adaptive kernel estimation pdf with mirroring
> RooNDKeysPdf kdeTest("kdeTest","kdeTest",RooArgSet(x,y),*data,"am") ;
>
> RooWorkspace workspace("workspace","workspace");
> workspace.import(kdeTest) ;
> workspace.import(*data) ;
> workspace.Print() ;
> workspace.writeToFile("outFile.root") ;
>
> cout<<"Wrote file"<<endl;
> };
>
> void readNDkeys(){
> // Open input file with workspace (generated by writeNDKeys)
> TFile *f = new TFile("outFile.root") ;
>
> // Retrieve workspace from file
> RooWorkspace* workspace = (RooWorkspace*) f->Get("workspace") ;
>
> workspace->Print() ;
>
> // Retrieve x,model and data from workspace
> RooRealVar* x = workspace->var("x");
> RooRealVar* y = workspace->var("y");
> RooAbsPdf* kdeTest = workspace->pdf("kdeTest");
>
> // Create histogram of the 2d kernel estimation pdf
> TH1* hh_pdf = kdeTest->createHistogram("hh_pdf",*x,Binning(25),YVar(*y,Binning(25))) ;
>
> TCanvas* c = new TCanvas("readNDkeys","readNDkeys",800,800) ;
> c->Draw();
> c->cd();
> gPad->SetLeftMargin(0.15) ;
> hh_pdf->Draw("lego");
>
> // f->Close();
> };
[2] Error:
>
> RooWorkspace(workspace) workspace contents
>
> variables
> ---------
> (x,y)
>
> p.d.f.s
> -------
>
> *** Break *** segmentation violation
> RooNDKeysPdf::kdeTest[ varList=(x,y) rhoList=() ] =
>
> ===========================================================
> There was a crash.
> This is the entire stack trace of all threads:
> ===========================================================
> #0 0x000000344eaac89e in waitpid () from /lib64/libc.so.6
> #1 0x000000344ea3e4e9 in do_system () from /lib64/libc.so.6
> #2 0x00007fc7bde1ceda in TUnixSystem::StackTrace() () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-
> gcc8-opt/lib/libCore.so
> #3 0x00007fc7bde1f734 in TUnixSystem::DispatchSignals(ESignals) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD
> /x86_64-slc6-gcc8-opt/lib/libCore.so
> #4 <signal handler called>
> #5 0x00007fc7a6e8c048 in RooNDKeysPdf::gauss(std::vector<double, std::allocator<double> >&, std::vector<std::vector<double, std::allo
> cator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nigh
> tlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRooFit.so
> #6 0x00007fc7a6e8d7e6 in RooNDKeysPdf::evaluate() const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-
> slc6-gcc8-opt/lib/libRooFit.so
> #7 0x00007fc7a9159eb4 in RooAbsPdf::getValV(RooArgSet const*) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/
> HEAD/x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #8 0x00007fc7a915696e in RooAbsPdf::printValue(std::basic_ostream<char, std::char_traits<char> >&) const () from /cvmfs/sft-nightlies
> .cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #9 0x00007fc7a92b39f0 in RooPrintable::printStream(std::basic_ostream<char, std::char_traits<char> >&, int, RooPrintable::StyleOption
> , TString) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #10 0x00007fc7a911840b in RooAbsArg::Print(char const*) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x8
> 6_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #11 0x00007fc7a933fe78 in RooWorkspace::Print(char const*) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD
> /x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #12 0x00007fc7a6ac5d70 in readNDkeys() () from /home/wadud/aNTGC/antgcpreselector/macros/jet2pho/fitEstimate/batch/testKDEnumeratorDat
> a/testNDKeys_C.so
> #13 0x00007fc7b7ebe066 in ?? ()
> #14 0x0000000103442f70 in ?? ()
> #15 0x0000000001e723e0 in ?? ()
> #16 0x00007fc7b98de820 in ?? () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.s
> o
> #17 0x00007ffee1d17590 in ?? ()
> #18 0x00007fc7b7ebe000 in ?? ()
> #19 0x00007fc7b98b80d9 in cling::IncrementalExecutor::executeWrapper(llvm::StringRef, cling::Value*) const () from /cvmfs/sft-nightlie
> s.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #20 0x00007fc7b984c753 in cling::Interpreter::RunFunction(clang::FunctionDecl const*, cling::Value*) () from /cvmfs/sft-nightlies.cern
> .ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #21 0x00007fc7b9851d52 in cling::Interpreter::EvaluateInternal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator
> <char> > const&, cling::CompilationOptions, cling::Value*, cling::Transaction**, unsigned long) () from /cvmfs/sft-nightlies.cern.ch/l
> cg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #22 0x00007fc7b9852319 in cling::Interpreter::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
> const&, cling::Value*, cling::Transaction**, bool) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-g
> cc8-opt/lib/libCling.so
> #23 0x00007fc7b9906e3d in cling::MetaProcessor::process(llvm::StringRef, cling::Interpreter::CompilationResult&, cling::Value*, bool)
> () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #24 0x00007fc7b97c6a6c in HandleInterpreterException(cling::MetaProcessor*, char const*, cling::Interpreter::CompilationResult&, cling
> ::Value*) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #25 0x00007fc7b97d9522 in TCling::ProcessLine(char const*, TInterpreter::EErrorCode*) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightli
> es/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #26 0x00007fc7bdce18a2 in TApplication::ProcessLine(char const*, bool, int*) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/F
> ri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCore.so
> #27 0x00007fc7be256082 in TRint::ProcessLineNr(char const*, char const*, int*) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3
> /Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRint.so
> #28 0x00007fc7be2563f3 in TRint::HandleTermInput() () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-g
> cc8-opt/lib/libRint.so
> #29 0x00007fc7bde1ea4b in TUnixSystem::CheckDescriptors() () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64
> -slc6-gcc8-opt/lib/libCore.so
> #30 0x00007fc7bde203c8 in TUnixSystem::DispatchOneEvent(bool) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x8
> 6_64-slc6-gcc8-opt/lib/libCore.so
> #31 0x00007fc7bdd43d81 in TSystem::Run() () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/li
> b/libCore.so
> #32 0x00007fc7bdcdea1f in TApplication::Run(bool) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gc
> c8-opt/lib/libCore.so
> #33 0x00007fc7be2578f6 in TRint::Run(bool) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/
> lib/libRint.so
> #34 0x00000000004009aa in main ()
> ===========================================================
>
> The lines below might hint at the cause of the crash.
> You may get help by asking at the ROOT forum http://root.cern.ch/forum
> Only if you are really convinced it is a bug in ROOT then please submit a
> report at http://root.cern.ch/bugs Please post the ENTIRE stack trace
> from above as an attachment in addition to anything else
> that might help us fixing this issue.
> ===========================================================
> #5 0x00007fc7a6e8c048 in RooNDKeysPdf::gauss(std::vector<double, std::allocator<double> >&, std::vector<std::vector<double, std::allo
> cator<double> >, std::allocator<std::vector<double, std::allocator<double> > > >&) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nigh
> tlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRooFit.so
> #6 0x00007fc7a6e8d7e6 in RooNDKeysPdf::evaluate() const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-
> slc6-gcc8-opt/lib/libRooFit.so
> #7 0x00007fc7a9159eb4 in RooAbsPdf::getValV(RooArgSet const*) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/
> HEAD/x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #8 0x00007fc7a915696e in RooAbsPdf::printValue(std::basic_ostream<char, std::char_traits<char> >&) const () from /cvmfs/sft-nightlies
> .cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #9 0x00007fc7a92b39f0 in RooPrintable::printStream(std::basic_ostream<char, std::char_traits<char> >&, int, RooPrintable::StyleOption
> , TString) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #10 0x00007fc7a911840b in RooAbsArg::Print(char const*) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x8
> 6_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #11 0x00007fc7a933fe78 in RooWorkspace::Print(char const*) const () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD
> /x86_64-slc6-gcc8-opt/lib/libRooFitCore.so
> #12 0x00007fc7a6ac5d70 in readNDkeys() () from /home/wadud/aNTGC/antgcpreselector/macros/jet2pho/fitEstimate/batch/testKDEnumeratorDat
> a/testNDKeys_C.so
> #13 0x00007fc7b7ebe066 in ?? ()
> #14 0x0000000103442f70 in ?? ()
> #15 0x0000000001e723e0 in ?? ()
> #16 0x00007fc7b98de820 in ?? () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.s
> o
> #17 0x00007ffee1d17590 in ?? ()
> #18 0x00007fc7b7ebe000 in ?? ()
> #19 0x00007fc7b98b80d9 in cling::IncrementalExecutor::executeWrapper(llvm::StringRef, cling::Value*) const () from /cvmfs/sft-nightlie
> s.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #20 0x00007fc7b984c753 in cling::Interpreter::RunFunction(clang::FunctionDecl const*, cling::Value*) () from /cvmfs/sft-nightlies.cern
> .ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #21 0x00007fc7b9851d52 in cling::Interpreter::EvaluateInternal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator
> <char> > const&, cling::CompilationOptions, cling::Value*, cling::Transaction**, unsigned long) () from /cvmfs/sft-nightlies.cern.ch/l
> cg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #22 0x00007fc7b9852319 in cling::Interpreter::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
> const&, cling::Value*, cling::Transaction**, bool) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-g
> cc8-opt/lib/libCling.so
> #23 0x00007fc7b9906e3d in cling::MetaProcessor::process(llvm::StringRef, cling::Interpreter::CompilationResult&, cling::Value*, bool)
> () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> #24 0x00007fc7b97c6a6c in HandleInterpreterException(cling::MetaProcessor*, char const*, cling::Interpreter::CompilationResult&, cling
> ::Value*) () from /cvmfs/sft-nightlies.cern.ch/lcg/nightlies/dev3/Fri/ROOT/HEAD/x86_64-slc6-gcc8-opt/lib/libCling.so
> ===========================================================```