RooDataSet*GenericPDFModel::GenerateDataSet(RooAbsPdf& parDist, const RooArgList* params) { // Generate dataset for the observables using the given parameter probability distribution // If optional parameter list params is given, it is used instead of the default // defined parameter list of the model Info("GenerateDataSet","Generating %d datapoints with parameter distribution %s", GetNumGen(), parDist.GetName()); RooProdPdf Multimodel("Multimodel","observables for parameter distributions", parDist, Conditional(*theModel,GetObservables())); // get marginalized distributions model for observables if(!params) params = &GetParameters(); RooAbsPdf* margin = Multimodel.createProjection(*params); RooDataSet* data = margin->generate(GetObservables(),fNGen); delete margin; return data; }
void GenericModel::ConstructPseudoPDF(Bool_t) { // Build a parameterised pseudo-PDF from all the imported model datasets. // Each dataset is transformed into a RooNDKeysPdf kernel estimation p.d.f. // This p.d.f. models the distribution of an arbitrary input dataset as a // superposition of Gaussian kernels, one for each data point, each // contributing 1/N to the total integral of the p.d.f. // // If debug=kTRUE, each dataset and kernel PDF will be displayed in a canvas. // This can help to decide if the kernel smoothing parameter needs attention. if (!GetNumberOfDataSets()) { Error("ConstructPseudoPDF", "import model datasets with ImportModelData() first"); return; } if (fModelPseudoPDF) { delete fModelPseudoPDF; fModelPseudoPDF = 0; fNDKeys.Delete(); fFractions.removeAll(); } //generate kernels RooArgList kernels; Double_t initialWeight = 1. / GetNumberOfDataSets(); for (int i = 0; i < GetNumberOfDataSets(); i++) { Info("ConstructPseudoPDF", "Kernel estimation of dataset#%d...", i); RooNDKeysPdf* p = new RooNDKeysPdf(Form("NDK%d", i), Form("Kernel estimation of dataset#%d", i), GetObservables(), *((RooDataSet*)fDataSets[i]), "am", fSmoothing); fNDKeys.Add(p); kernels.add(*p); if (i < (GetNumberOfDataSets() - 1)) fFractions.addClone(RooRealVar(Form("W%d", i), Form("fractional weight of kernel-PDF #%d", i), initialWeight, 0., 1.)); } fModelPseudoPDF = new RooAddPdf("Model", "Pseudo-PDF constructed from kernels for model datasets", kernels, fFractions, kTRUE); }