#include "RooRealVar.h" #include "RooAddPdf.h" #include "RooGaussian.h" #include "RooExponential.h" #include "RooMultiVarGaussian.h" #include "RooDataSet.h" #include "RooFitResult.h" #include "RooStats/RooStatsUtils.h" int test() { RooRealVar * x = new RooRealVar("x","x",100.,0.,200.); RooRealVar * f = new RooRealVar("f","f",0.6,0.,1.); RooRealVar * f2 = new RooRealVar("f2","f2",0.1,0.,1.); RooRealVar * m = new RooRealVar("m","m",100.,0.,200.); RooRealVar * s = new RooRealVar("s","s",10.,0,100.); RooRealVar * s2 = new RooRealVar("s2","s2",0.2,0.,1.); RooRealVar * b = new RooRealVar("b","b",-0.1,-10.,0.); RooGaussian * gauss1 = new RooGaussian("gauss1","gauss1",*x,*m,*s); RooGaussian * gauss2 = new RooGaussian("gauss2","gauss2",*x,*m,*s2); RooExponential * exp = new RooExponential("exp","exp",*x,*b); RooAddPdf * totpdf = new RooAddPdf("totpdf","totpdf",RooArgSet(*gauss1,*gauss2,*exp),RooArgSet(*f,*f2)); RooDataSet * data = totpdf->generate(*x,500); // set s2 to be fixed parameter s2->setConstant(true); RooFitResult * res = totpdf->fitTo(*data,RooFit::Save(), RooFit::Minimizer("Minuit2")); printf("FIT COV MATRIX"); res->covarianceMatrix().Print(); RooArgSet * pars = totpdf->getParameters(RooDataSet("v","",*x)); // remove the constant parameters from the list RooStats::RemoveConstantParameters(pars); RooMultiVarGaussian * multigauss = new RooMultiVarGaussian("multigauss","multigauss",*pars,res->covarianceMatrix()); RooDataSet * variations = multigauss->generate(*pars,1000); variations->Print(); return 0; }