void SetConstants(RooWorkspace * pWs, RooStats::ModelConfig * pMc){ // // Fix all variables in the PDF except observables, POI and // nuisance parameters. Note that global observables are fixed. // If you need global observables floated, you have to set them // to float separately. // pMc->SetWorkspace(*pWs); RooAbsPdf * pPdf = pMc->GetPdf(); // we do not own this RooArgSet * pVars = pPdf->getVariables(); // we do own this RooArgSet * pFloated = new RooArgSet(*pMc->GetObservables()); pFloated->add(*pMc->GetParametersOfInterest()); pFloated->add(*pMc->GetNuisanceParameters()); TIterator * pIter = pVars->createIterator(); // we do own this for(TObject * pObj = pIter->Next(); pObj; pObj = pIter->Next() ){ std::string _name = pObj->GetName(); RooRealVar * pFloatedObj = (RooRealVar *)pFloated->find(_name.c_str()); if (pFloatedObj){ ((RooRealVar *)pObj)->setConstant(kFALSE); } else{ ((RooRealVar *)pObj)->setConstant(kTRUE); } //pObj->Print(); } delete pIter; delete pVars; delete pFloated; return; }
void eregmerge(bool doele) { TString dirname = "/afs/cern.ch/user/b/bendavid/CMSSWhgg/CMSSW_5_3_11_patch5/src/HiggsAnalysis/GBRLikelihoodEGTools/data/"; gSystem->mkdir(dirname,true); gSystem->cd(dirname); TString fnameeb; TString fnameee; if (doele) { fnameeb = "wereg_ele_eb.root"; fnameee = "wereg_ele_ee.root"; } else if (!doele) { fnameeb = "wereg_ph_eb.root"; fnameee = "wereg_ph_ee.root"; } TString infileeb = TString::Format("/afs/cern.ch/work/b/bendavid/bare/eregAug10RCalphafix/%s",fnameeb.Data()); TString infileee = TString::Format("/afs/cern.ch/work/b/bendavid/bare/eregAug10RCalphafix/%s",fnameee.Data()); TFile *fwseb = TFile::Open(infileeb); TFile *fwsee = TFile::Open(infileee); RooWorkspace *wseb = (RooWorkspace*)fwseb->Get("wereg"); RooWorkspace *wsee = (RooWorkspace*)fwsee->Get("wereg"); RooAbsPdf *sigpdfeborig = wseb->pdf("sigpdf"); RooAbsPdf *sigpdfeeorig = wsee->pdf("sigpdf"); RooAbsPdf *sigpdfeb = static_cast<RooAbsPdf*>(cloneRecursiveRename(sigpdfeborig,"EB")); RooAbsPdf *sigpdfee = static_cast<RooAbsPdf*>(cloneRecursiveRename(sigpdfeeorig,"EE")); RooWorkspace *wsout = new RooWorkspace("EGRegressionWorkspace"); wsout->import(*sigpdfeb); wsout->import(*sigpdfee); TString outname; if (doele) outname = "regweights_v4_ele.root"; else outname = "regweights_v4_ph.root"; wsout->writeToFile(outname); RooArgList pdfeblist; RooArgSet *pdfebcomps = sigpdfeb->getComponents(); RooArgSet *pdfebvars = sigpdfeb->getVariables(); pdfeblist.add(*pdfebcomps); pdfeblist.add(*pdfebvars); delete pdfebcomps; delete pdfebvars; RooArgList pdfeelist; RooArgSet *pdfeecomps = sigpdfee->getComponents(); RooArgSet *pdfeevars = sigpdfee->getVariables(); pdfeelist.add(*pdfeecomps); pdfeelist.add(*pdfeevars); delete pdfeecomps; delete pdfeevars; // RooArgList components(ws->components()); // for (int iarg=0; iarg<components.getSize(); ++iarg) { // components.at(iarg)->SetName(TString::Format("%s_1",components.at(iarg)->GetName())); // } RooGBRFunction *funceb = static_cast<RooGBRFunction*>(pdfeblist.find("func_EB")); RooGBRFunction *funcee = static_cast<RooGBRFunction*>(pdfeelist.find("func_EE")); // funceb->Vars().Print("V"); // funcee->Vars().Print("V"); for (int ivar=0; ivar<funceb->Vars().getSize(); ++ivar) { printf("%i: %s, %s\n",ivar,funceb->Vars().at(ivar)->GetName(),funceb->Vars().at(ivar)->GetTitle()); } for (int ivar=0; ivar<funcee->Vars().getSize(); ++ivar) { printf("%i: %s, %s\n",ivar,funcee->Vars().at(ivar)->GetName(),funcee->Vars().at(ivar)->GetTitle()); } TString outnameforest; if (doele) outnameforest = "regweights_v4_forest_ele.root"; else outnameforest = "regweights_v4_forest_ph.root"; TFile *fforest = new TFile(outnameforest,"RECREATE"); fforest->WriteObject(funceb->Forest(),"EGRegressionForest_EB"); fforest->WriteObject(funcee->Forest(),"EGRegressionForest_EE"); fforest->Close(); }