Hi,
I’m stuck on a problem with RooFit workspaces. I’m trying to read a RooDataSet previously imported in a RooWorkspace. RooWorkspace does have a .data()
which give access to RooAbsData object through a pointer, but there is no similar method for RooDataSet (neither some Get<T>
method like TDirectory).
I’ve seen some solution based on raw c-like pointer cast, but it doesn’t sound like a solution for me.
Exemple:
[...includes...]
RooWorkspace generate() {
RooWorkspace wksp {"MinimalExemple", false};
RooRealVar x {"x", "x", 0, 100};
RooRealVar y {"y", "y", -1, 100};
RooDataSet dataSet {"foo", "foo", RooArgSet {x, y}};
for (int i = 0; i < 100; i++) {
dataSet.add(RooArgSet(i, i + gRandom->Rndm()));
}
wksp.import(dataSet);
return wksp;
}
void test() {
auto wksp = generate();
[...?...]
}
Last thing that I’ve tried is to use WSDir nested class to get access to Get<RooDataSet>
method.
void test() {
auto wksp = generate();
auto wkspDir = RooWorkspace::WSDir("dir", "dir", &wksp);
std::unique_ptr<RooDataSet> dataSet {wkspDir.Get<RooDataSet>("foo")};
if (!dataSet) {
std::cout << ":(" << std::endl;
} else {
dataSet->write("xy_data.dat");
}
}
But it just does not work, I always get a null ptr (tested with cling/gcc).
root [0]
Processing test.C...
RooFit v3.60 -- Developed by Wouter Verkerke and David Kirkby
Copyright (C) 2000-2013 NIKHEF, University of California & Stanford University
All rights reserved, please read http://roofit.sourceforge.net/license.txt
[#1] INFO:ObjectHandling -- RooWorkspace::import(MinimalExemple) importing dataset foo
[#1] INFO:ObjectHandling -- RooWorkspace::import(MinimalExemple) importing RooRealVar::x
[#1] INFO:ObjectHandling -- RooWorkspace::import(MinimalExemple) importing RooRealVar::y
:(
Any hint on what I’ve done wrong will be helpful
Thanks for taking the time to read this message,
Cheers.
Yann.
_ROOT Version: 6.26/10
_Platform: Linux Mint 21 x86_64
_Compiler: gcc 11.3.0 / cling