// Combinatorial PDFs void makeCombinatorialPdf( RooWorkspace *w ) { // one in each cat RooCategory *cat = (RooCategory*)w->cat("DataCat"); for ( int i=0; i < cat->numTypes(); i++ ) { cat->setIndex(i); w->factory( Form("Exponential::bkg_pdf_%s( B_s0_DTF_B_s0_M, bkg_exp_p1_%s[-0.002,-0.005,0.] )", cat->getLabel(), cat->getLabel() ) ); defineParamSet( w, Form("bkg_pdf_%s",cat->getLabel()) ); } }
// total PDF void makeTotalPdf( RooWorkspace *w ) { // constrain the bs->phikst / bd->phikst ratio w->factory( "yield_ratio_bs2phikst_o_bd2phikst[0.,1.]" ); w->factory( "Gaussian::yield_ratio_bs2phikst_o_bd2phikst_constraint( yield_ratio_bs2phikst_o_bd2phikst, 0.113, 0.0287 )" ); // constrain the bd->rhokst / bd->phikst ratio w->factory("yield_ratio_bd2rhokst_o_bd2phikst[0.,1.]" ); w->factory( "Gaussian::yield_ratio_bd2rhokst_o_bd2phikst_constraint( yield_ratio_bd2rhokst_o_bd2phikst, 0.390, 0.130 )" ); // PDG err is 0.130 (relax this for eff) // make a yield for each category RooCategory *cat = (RooCategory*)w->cat("DataCat"); for ( int i=0; i < cat->numTypes(); i++ ) { cat->setIndex(i); w->factory( Form("bkg_y_%s[200,400e3]", cat->getLabel())); w->factory( Form("part_reco_y_%s[100,200e3]", cat->getLabel())); w->factory( Form("bs2kstkst_y_%s[0,20e3]", cat->getLabel())); w->factory( Form("bd2kstkst_y_%s[0,3000]", cat->getLabel())); w->factory( Form("bd2phikst_y_%s[10,5000]", cat->getLabel())); // add bs2phikst yield as constrained ratio w->factory( Form("prod::bs2phikst_y_%s( yield_ratio_bs2phikst_o_bd2phikst, bd2phikst_y_%s )", cat->getLabel(), cat->getLabel()) ); //w->factory( Form("bs2phikst_y_%s[10,5000]", cat->getLabel())); // add bd2rhokst yield as constrained ratio w->factory( Form("prod::bd2rhokst_y_%s( yield_ratio_bd2rhokst_o_bd2phikst, bd2phikst_y_%s )", cat->getLabel(), cat->getLabel()) ); //w->factory( Form("bd2rhokst_y_%s[5,250]", cat->getLabel())); w->factory( Form("lb2pkpipi_y_%s[0,4000]", cat->getLabel())); w->factory( Form("lb2ppipipi_y_%s[0,4000]", cat->getLabel())); } // construct the pdf for each category for ( int i=0; i < cat->numTypes(); i++ ) { cat->setIndex(i); RooArgList *yields = new RooArgList(); yields->add(*w->var( Form("bkg_y_%s" , cat->getLabel()) )); yields->add(*w->var( Form("part_reco_y_%s", cat->getLabel()) )); yields->add(*w->var( Form("bs2kstkst_y_%s", cat->getLabel()) )); yields->add(*w->var( Form("bd2kstkst_y_%s", cat->getLabel()) )); yields->add(*w->var( Form("bd2phikst_y_%s", cat->getLabel()) )); yields->add(*w->function( Form("bs2phikst_y_%s", cat->getLabel()) )); //yields->add(*w->var( Form("bs2phikst_y_%s", cat->getLabel()) )); yields->add(*w->function( Form("bd2rhokst_y_%s", cat->getLabel()) )); //yields->add(*w->var( Form("bd2rhokst_y_%s", cat->getLabel()) )); yields->add(*w->var( Form("lb2pkpipi_y_%s", cat->getLabel()) )); //yields->add(*w->var( Form("lb2ppipipi_y_%s", cat->getLabel()) )); // this guy we scrap RooArgList *pdfs = new RooArgList(); pdfs->add(*w->pdf( Form("bkg_pdf_%s", cat->getLabel()) )); pdfs->add(*w->pdf("part_reco_pdf" )); pdfs->add(*w->pdf("bs2kstkst_mc_pdf" )); pdfs->add(*w->pdf("bd2kstkst_mc_pdf" )); pdfs->add(*w->pdf("bd2phikst_mc_pdf" )); pdfs->add(*w->pdf("bs2phikst_mc_pdf" )); pdfs->add(*w->pdf("bd2rhokst_mc_pdf" )); pdfs->add(*w->pdf("lb2pkpipi_mc_pdf" )); //pdfs->add(*w->pdf("lb2ppipipi_mc_pdf")); // this guy we scrap RooAddPdf *pdf = new RooAddPdf( Form("pdf_%s",cat->getLabel()), "pdf" , *pdfs, *yields); w->import(*pdf); delete pdf; // then make the constrained pdf RooArgSet *prodpdfs = new RooArgSet(); prodpdfs->add( *w->pdf(Form("pdf_%s",cat->getLabel())) ); prodpdfs->add( *w->pdf("yield_ratio_bs2phikst_o_bd2phikst_constraint") ); prodpdfs->add( *w->pdf("yield_ratio_bd2rhokst_o_bd2phikst_constraint") ); RooProdPdf *cpdf = new RooProdPdf( Form("constrained_pdf_%s",cat->getLabel()), "constrained_pdf", *prodpdfs ); w->import(*cpdf); delete cpdf; w->defineSet(Form("pdf_%s_yield_params",cat->getLabel()), *yields); w->defineSet(Form("constrained_pdf_%s_yield_params",cat->getLabel()), *yields); } // now make simultaneous pdf RooSimultaneous *cpdf = new RooSimultaneous( "constrained_pdf", "constrained_pdf", *w->cat("DataCat") ); RooSimultaneous *pdf = new RooSimultaneous( "pdf", "pdf", *w->cat("DataCat") ); for ( int i=0; i < cat->numTypes(); i++ ) { cat->setIndex(i); cpdf->addPdf( *w->pdf( Form("constrained_pdf_%s", cat->getLabel() )), cat->getLabel() ); pdf->addPdf( *w->pdf( Form("pdf_%s", cat->getLabel() )), cat->getLabel() ); } w->import(*cpdf); w->import(*pdf); delete pdf; delete cpdf; }