Dear all,
I am using the RooSimPdfBuilder class to generate a large number of very similar pdfs to fit subsets of my data. The code below works great. However, I am struggling to add a small extension…
I would like to have one prototype pdf for one subset of the data (00_data) and another prototype pdf for another subset of the data (10_data).
I know this is possible and the answer seems to be on page 11 of the tutorial here:
roofit.sourceforge.net/docs/tuto … ptools.pdf
However, I do not seem to be able to add the correct couple of lines to the code below to get things to work
If anyone could help RE those lines, I would be incredibly grateful!
Cheers!
S
[code] // Data categories
RooCategory Data_Category(“Data_Category”,“Data_Category”);
Data_Category.defineType(“00_data”);
Data_Category.defineType(“10_data”);
// Cut to get the datasets
RooDataSet* RDS_00_data = new RooDataSet("RDS_00_data", "RDS_00_data", data, varList, "ft_hs==0 && ft_as==0");
RooDataSet* RDS_10_data = new RooDataSet(“RDS_10_data”, “RDS_10_data”, data, varList, “ft_hs==1 && ft_as==0”);
// Create RooDataHists
RooDataHist* RDH_00_data_hist = new RooDataHist(“RDH_00_data_hist” ,“RDH_00_data_hist”, RooArgList(ft_hs,ft_as), RDS_00_data) ;
RooDataHist RDH_10_data_hist = new RooDataHist(“RDH_10_data_hist” ,“RDH_10_data_hist”, RooArgList(ft_hs,ft_as), *RDS_10_data) ;
mapstd::string,RooDataHist* myMap;
myMap.insert( pairstd::string,RooDataHist*(“00_data”,RDH_00_data_hist) );
myMap.insert( pairstd::string,RooDataHist*(“10_data”,RDH_10_data_hist) );
RooSimultaneous simPdf(“simPdf”,“simultaneous pdf”,Data_Category) ;
RooDataHist combData(“combData”,“combined data”, RooArgList(ft_hs,ft_as), Data_Category, myMap);
//--------- PDF builder method
// Code up the simplified DC model
RooRealVar h_att_param(“h_att_param”,“h_att_param”,0.5,0,1);
RooRealVar h_def_param(“h_def_param”,“h_def_param”,0.5,0,1);
RooRealVar a_att_param(“a_att_param”,“a_att_param”,0.5,0,1);
RooRealVar a_def_param(“a_def_param”,“a_def_param”,0.5,0,1);
RooRealVar gamma(“gamma”,“gamma”,0.5,0,1);
RooFormulaVar home_rate(“home_rate”, “h_att_parama_def_paramgamma”, RooArgList(h_att_param, a_def_param, gamma));
RooFormulaVar away_rate(“away_rate”, “a_att_param*h_def_param”, RooArgList(a_att_param, h_def_param));
RooPoisson home_goals_poisson(“home_goals_poisson”, “home_goals_poisson”, ft_hs, home_rate);
RooPoisson away_goals_poisson(“away_goals_poisson”, “away_goals_poisson”, ft_as, away_rate);
// Multiply the components
RooProdPdf DC(“DC”, “DC”, home_goals_poisson, away_goals_poisson);
// Define a category with labels only
RooCategory Category(“Category”,“Category”);
RooCategory hid(“hid”,“hid”) ;
hid.defineType(“France”) ;
hid.defineType(“Uruguay”) ;
RooCategory aid(“aid”,“aid”) ;
aid.defineType(“Denmark”) ;
aid.defineType(“Senegal”) ;
// Make dummy data set for use by simpdf builder later on
RooDataSet data_dummy(“data_dummy”,“data_dummy”,RooArgList(home_rate, away_rate, ft_hs,ft_as,hid,aid)) ;
// Instantiate a builder
RooSimPdfBuilder mgr(DC) ;
// Create an empty configuration object suitable for configuring
// A configuration object is a RooArgSet with RooStringVar objects
RooArgSet* config = mgr.createProtoBuildConfig() ;
// Enter configuration data
config->setStringValue(“physModels”,“DC”) ; // We wil only use prototype ‘sum’
config->setStringValue(“splitCats” ,“hid aid”) ; // We will use ‘tagCat’ and ‘runBlock’ to split parameters
config->setStringValue(“DC”, "hid : h_att_param " // Split parameter ‘gfrac’ of ‘sum’ using ‘tagCat’
"aid : a_def_param "
"hid : h_def_param "
"aid : a_att_param "
) ;
// Build the PDF
RooSimultaneous* simSum = mgr.buildPdf(*config,&data_dummy) ;
simSum->Print(“v”) ;
simSum->getParameters(&data_dummy)->Print(“v”) ;
[/code]