void AnalyzeToy::extract_signal() { calculate_yield(); MakeSpinSPlot splotter(toyData); splotter.addSpecies("signal",ws->pdf("model_signal_mass"),signalYield); splotter.addSpecies("background",ws->pdf("model_bkg_mass"),backgroundYield); splotter.addVariable(ws->var("mass")); splotter.calculate(); RooDataSet *sweights = splotter.getSWeightDataSet(); sweights->SetName("sweights"); RooRealVar weight("weight","",-5.,5.); RooArgSet event; event.add(*mass); event.add(*cosT); event.add(weight); extractedData = new RooDataSet("extractedData","",event,WeightVar("weight")); Long64_t nEntries = toyData->numEntries(); for(int i=0;i<nEntries;i++) { double weight_double=0; weight_double += sweights->get(i)->getRealValue("signal_sw"); // weight_double += sweights->get(i)->getRealValue("background_sw"); mass->setVal(toyData->get(i)->getRealValue("mass")); cosT->setVal(toyData->get(i)->getRealValue("cosT")); extractedData->add(event,weight_double); } delete toyData; }
void reweight_eta_1d(TH1F* weight_eta,TH1F* weight_etao,TH2F*weight_etan,TH2F* weight_eta2o,TH2F* weight_etanr,TH2F*weight_eta2,RooDataSet **dset, RooDataSet *dsetdestination, int numvar){ if (!(*dset)) return; TH1F *hnum = new TH1F("hnum","hnum",n_etabins_forreweighting,etabins_forreweighting); TH1F *hden = new TH1F("hden","hden",n_etabins_forreweighting,etabins_forreweighting); // TH1F *hnum = new TH1F("hnum","hnum",25,0.,2.5); // TH1F *hden = new TH1F("hden","hden",25,0.,2.5); hnum->Sumw2(); hden->Sumw2(); const char* etaname=Form("rooeta%d",numvar); for (int i=0; i<(*dset)->numEntries(); i++){ hden->Fill(fabs((*dset)->get(i)->getRealValue(etaname)),(*dset)->store()->weight(i)); } for (int i=0; i<dsetdestination->numEntries(); i++){ hnum->Fill(fabs(dsetdestination->get(i)->getRealValue(etaname)),dsetdestination->store()->weight(i)); } hnum->Scale(1.0/hnum->Integral()); hden->Scale(1.0/hden->Integral()); hnum->Divide(hden); TH1F *h = hnum; RooDataSet *newdset = new RooDataSet(**dset,Form("%s_etarew",(*dset)->GetName())); newdset->reset(); for (int i=0; i<(*dset)->numEntries(); i++){ RooArgSet args = *((*dset)->get(i)); float oldw = (*dset)->store()->weight(i); float eta = args.getRealValue(etaname); float neww = oldw*h->GetBinContent(h->FindBin(fabs(eta))); if(debug){ weight_eta->Fill(neww); weight_etao->Fill(oldw); weight_etan->Fill(h->FindBin(fabs(eta)),neww); weight_eta2o->Fill(h->FindBin(fabs(eta)),oldw); if(oldw!=0 && neww!=0)weight_etanr->Fill(h->FindBin(fabs(eta)),oldw/neww); else {weight_etanr->Fill(-10,1);} // weight_pt2->Fill(pt,neww/oldw); if(oldw!=0 && neww!=0)weight_eta2->Fill(fabs(eta),oldw/neww); else {weight_eta2->Fill(-10,1);} } newdset->add(args,neww); } newdset->SetName((*dset)->GetName()); newdset->SetTitle((*dset)->GetTitle()); delete hnum; delete hden; RooDataSet *old_dset = *dset; *dset=newdset; std::cout << "Eta 1d rew: norm from " << old_dset->sumEntries() << " to " << newdset->sumEntries() << std::endl; delete old_dset; };
void checkBestFitPoint(std::string workspace, std::string fitFile, bool splusb){ // Open the ws file... TFile *fd_=0; TFile *fw_=0; gSystem->Load("$CMSSW_BASE/lib/$SCRAM_ARCH/libHiggsAnalysisCombinedLimit.so"); gROOT->SetBatch(true); gStyle->SetOptFit(0); gStyle->SetOptStat(0); gStyle->SetPalette(1,0); fw_ = TFile::Open(workspace.c_str()); w = (RooWorkspace*) fw_->Get("w"); w->Print(); RooDataSet *data = (RooDataSet*) w->data("data_obs"); if (splusb) { mc_s = (RooStats::ModelConfig*)w->genobj("ModelConfig"); } else { mc_s = (RooStats::ModelConfig*)w->genobj("ModelConfig_bonly"); } std::cout << "make nll"<<std::endl; nll = mc_s->GetPdf()->createNLL( *data,RooFit::Constrain(*mc_s->GetNuisanceParameters()) ,RooFit::Extended(mc_s->GetPdf()->canBeExtended())); // Now get the best fit result fd_ = TFile::Open(fitFile.c_str()); RooFitResult *fit; if (splusb) { fit =(RooFitResult*)fd_->Get("fit_s"); } else { fit =(RooFitResult*)fd_->Get("fit_b"); } RooArgSet fitargs = fit->floatParsFinal(); std::cout << "Got the best fit values" <<std::endl; w->saveSnapshot("bestfitall",fitargs,true); TString filename; if (splusb) { filename = "minimum_s.pdf"; } else { filename = "minimum_b.pdf"; } // Now make the plots! TCanvas *c = new TCanvas("c","",600,600); c->SaveAs((filename+"[")); TIterator* iter(fitargs->createIterator()); for (TObject *a = iter->Next(); a != 0; a = iter->Next()) { RooRealVar *rrv = dynamic_cast<RooRealVar *>(a); std::string name = rrv->GetName(); TGraph *gr = graphLH(name,rrv->getError()); gr->Draw("ALP"); c->SaveAs((filename+"[")); } c->SaveAs((filename+"]")); }
/// /// Set all parameters to values found in /// a provided fit result. /// void PDF_Abs::loadExtParameters(RooFitResult *r) { RooArgSet *tmp = new RooArgSet(); tmp->add(r->floatParsFinal()); tmp->add(r->constPars()); setParameters(parameters, tmp); delete tmp; }
void makeDataset( TString fname, TString tname, TString outfname ) { RooWorkspace *w = new RooWorkspace("w","w"); w->factory( "Dst_M[1950.,2070.]" ); w->factory( "D0_M[1810.,1920.]" ); w->factory( "D0_LTIME_ps[0.00,5.]" ); RooArgSet *observables = new RooArgSet(); observables->add( *w->var("Dst_M") ); observables->add( *w->var("D0_M") ); observables->add( *w->var("D0_LTIME_ps") ); w->defineSet("observables", *observables); w->var("Dst_M")->setBins(240); w->var("D0_M")->setBins(220); w->var("D0_LTIME_ps")->setBins(200); double Dst_M = -999.; double D0_M = -999.; double D0_LTIME_ps = -999.; TFile *tf = TFile::Open(fname); TTree *tree = (TTree*)tf->Get(tname); tree->SetBranchAddress( "Dst_M", &Dst_M ); tree->SetBranchAddress( "D0_M" , &D0_M ); tree->SetBranchAddress( "D0_LTIME_ps", &D0_LTIME_ps ); RooDataSet *data = new RooDataSet("Data","Data",*observables); RooDataHist *dataH = new RooDataHist("DataHist","Data",*observables); for ( int ev=0; ev<tree->GetEntries(); ev++) { tree->GetEntry(ev); if ( ev%10000 == 0 ) cout << ev << " / " << tree->GetEntries() << endl; if ( Dst_M < w->var("Dst_M")->getMin() || Dst_M > w->var("Dst_M")->getMax() ) continue; if ( D0_M < w->var("D0_M")->getMin() || D0_M > w->var("D0_M")->getMax() ) continue; if ( D0_LTIME_ps < w->var("D0_LTIME_ps")->getMin() || D0_LTIME_ps > w->var("D0_LTIME_ps")->getMax() ) continue; w->var("Dst_M")->setVal(Dst_M); w->var("D0_M")->setVal(D0_M); w->var("D0_LTIME_ps")->setVal(D0_LTIME_ps); data->add( *observables ); dataH->add( *observables ); } tf->Close(); w->import(*data); w->import(*dataH); w->writeToFile(outfname); }
void printMassFrom2DParameters(RooWorkspace myws, TPad* Pad, bool isPbPb, string pdfName, bool isWeighted) { Pad->cd(); TLatex *t = new TLatex(); t->SetNDC(); t->SetTextSize(0.026); float dy = 0.025; RooArgSet* Parameters = (RooArgSet*)myws.pdf(pdfName.c_str())->getParameters(RooArgSet(*myws.var("invMass"), *myws.var("ctau"), *myws.var("ctauErr")))->selectByAttrib("Constant",kFALSE); TIterator* parIt = Parameters->createIterator(); for (RooRealVar* it = (RooRealVar*)parIt->Next(); it!=NULL; it = (RooRealVar*)parIt->Next() ) { stringstream ss(it->GetName()); string s1, s2, s3, label; getline(ss, s1, '_'); getline(ss, s2, '_'); getline(ss, s3, '_'); // Parse the parameter's labels if(s1=="invMass" || s1=="ctauErr" || s1=="ctau"){continue;} else if(s1=="MassRatio"){continue;} else if(s1=="One"){continue;} else if(s1=="mMin"){continue;} else if(s1=="mMax"){continue;} if(s1=="RFrac2Svs1S"){ s1="R_{#psi(2S)/J/#psi}"; } else if(s1=="rSigma21"){ s1="(#sigma_{2}/#sigma_{1})"; } else if(s1.find("sigma")!=std::string::npos || s1.find("lambda")!=std::string::npos || s1.find("alpha")!=std::string::npos){ s1=Form("#%s",s1.c_str()); } if(s2=="PbPbvsPP") { s2="PbPb/PP"; } else if(s2=="Jpsi") { s2="J/#psi"; } else if(s2=="Psi2S") { s2="#psi(2S)"; } else if(s2=="Bkg") { s2="bkg"; } else if(s2=="CtauRes") { continue; } else if(s2=="JpsiNoPR") { continue; } else if(s2=="JpsiPR") { continue; } else if(s2=="Psi2SNoPR"){ continue; } else if(s2=="Psi2SPR") { continue; } else if(s2=="BkgNoPR") { continue; } else if(s2=="BkgPR") { continue; } else if(s2=="Bkg" && (s1=="N" || s1=="b")) { continue; } else {continue;} if(s3!=""){ label=Form("%s_{%s}^{%s}", s1.c_str(), s2.c_str(), s3.c_str()); } else { label=Form("%s^{%s}", s1.c_str(), s2.c_str()); } // Print the parameter's results if(s1=="N"){ t->DrawLatex(0.20, 0.76-dy, Form((isWeighted?"%s = %.6f#pm%.6f ":"%s = %.0f#pm%.0f "), label.c_str(), it->getValV(), it->getError())); dy+=0.045; } else if(s1.find("#sigma_{2}/#sigma_{1}")!=std::string::npos){ t->DrawLatex(0.20, 0.76-dy, Form("%s = %.3f#pm%.3f ", label.c_str(), it->getValV(), it->getError())); dy+=0.045; } else if(s1.find("sigma")!=std::string::npos){ t->DrawLatex(0.20, 0.76-dy, Form("%s = %.2f#pm%.2f MeV/c^{2}", label.c_str(), it->getValV()*1000., it->getError()*1000.)); dy+=0.045; } else if(s1.find("lambda")!=std::string::npos){ t->DrawLatex(0.20, 0.76-dy, Form("%s = %.4f#pm%.4f", label.c_str(), it->getValV(), it->getError())); dy+=0.045; } else if(s1.find("m")!=std::string::npos){ t->DrawLatex(0.20, 0.76-dy, Form("%s = %.5f#pm%.5f GeV/c^{2}", label.c_str(), it->getValV(), it->getError())); dy+=0.045; } else { t->DrawLatex(0.20, 0.76-dy, Form("%s = %.4f#pm%.4f", label.c_str(), it->getValV(), it->getError())); dy+=0.045; } } };
void PDF_GLWADS_DK_hh_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooConstVar& rbp = RooConst(0); // assume rb(Dpi)=0 for DK only RooConstVar& dbp = RooConst(1); // then the phase and the RooConstVar& kbp = RooConst(1); // coherence factor values don't matter RooConstVar& kf = RooConst(1); RooRealVar& rf = *((RooRealVar*)p->find("rD_kpi")); RooConstVar& rfGLW = RooConst(1); RooRealVar& df = *((RooRealVar*)p->find("dD_kpi")); RooConstVar& dfGLW = RooConst(0); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& AcpDKK = *((RooRealVar*)p->find("AcpDKK")); RooRealVar& AcpDpp = *((RooRealVar*)p->find("AcpDpipi")); RooConstVar& AcpD = RooConst(0); theory->add(*(new RooGLWADSDmixRkpVar("rkp_kpi_th", "RooGLWADSDmixRkpVar", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar("rkp_pipi_th", "RooGLWADSDmixRkpVar", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar("rkp_kk_th", "RooGLWADSDmixRkpVar", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixAcpVar("afav_dk_kpi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar("acp_dk_kk_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDKK))); theory->add(*(new RooGLWADSDmixAcpVar("acp_dk_pipi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDpp))); theory->add(*(new RooGLWADSDmixRpmVar("rp_dk_kpi_th", "RooGLWADSDmixRpmVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, "+"))); theory->add(*(new RooGLWADSDmixRpmVar("rm_dk_kpi_th", "RooGLWADSDmixRpmVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, "-"))); }
void PDF_ADS_DKDpi_K3pi_Dmix_newVars::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_k3pi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_k3pi")); RooConstVar& rfGLW = RooConst(1); RooRealVar& df = *((RooRealVar*)p->find("dD_k3pi")); RooConstVar& dfGLW = RooConst(0); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& F4pi = *((RooRealVar*)p->find("F_pipipipi")); RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooConstVar& AcpD = RooConst(0); RooConstVar& AcpDpppp = RooConst(0); theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dk_k3pi_th", "RooGLWADSDmixAcpADSVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dpi_k3pi_th", "RooGLWADSDmixAcpADSVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar ("afav_dk_k3pi_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dk_k3pi_th", "RooGLWADSDmixRADSVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dpi_k3pi_th", "RooGLWADSDmixRADSVar" , rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRkpVar ("rkp_k3pi_th", "RooGLWADSDmixRkpVar" , Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); }
void PDF_GLWADS_DKDpi_KSKpi_DCPV_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_kskpi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_kskpi")); RooRealVar& df = *((RooRealVar*)p->find("dD_kskpi")); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooRealVar& AcpDfav = *((RooRealVar*)p->find("AcpDzKstpKm")); RooRealVar& AcpDsup = *((RooRealVar*)p->find("AcpDzKstmKp")); theory->add(*(new RooGLWADSDmixRADSVar( "rfavsup_dpi_kskpi_th", "RooGLWADSDmixRADSVar (inverse)", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "inverse"))); theory->add(*(new RooGLWADSDmixRkpVar( "rfav_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (fav)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar( "rsup_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (sup)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "sup"))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dk_kskpi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpDfav))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dk_kskpi_th", "RooGLWADSDmixAcpADSVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpDsup))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dpi_kskpi_th", "RooGLWADSDmixAcpVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpDfav))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dpi_kskpi_th", "RooGLWADSDmixAcpADSVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpDsup))); }
void PDF_GLW_DK_2var::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar &rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar &dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar &kbk = RooConst(1.); RooRealVar &g = *((RooRealVar*)p->find("g")); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooGLWAcpVar("acpp_dk_th", "Acp+ (DK)", rbk, dbk, kbk, g, "+"))); theory->add(*(new RooGLWRcpVar("rcpp_dk_th", "Rcp+ (DK)", rbk, dbk, kbk, g, "+"))); }
void PDF_GLW_DK_pipipi0_2var::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar &rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar &dbk = *((RooRealVar*)p->find("d_dk")); RooFormulaVar &kbk = *(new RooFormulaVar("dilutionpp_2var","dilutionpp_2var","2*F_pipipi0 - 1", *p)); RooRealVar &g = *((RooRealVar*)p->find("g")); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooGLWAcpVar("aglw_dk_pipipi0_th", "Aglw+ (DK_pipipi0)", rbk, dbk, kbk, g, "+"))); theory->add(*(new RooGLWRcpVar("rglw_dk_pipipi0_th", "Rglw+ (DK_pipipi0)", rbk, dbk, kbk, g, "+"))); }
void reweight_pt_1d(TH1F* weight_pt, TH1F* weight_pto,TH2F*weight_ptn,TH2F*weight_pt2o,TH2F* weight_ptnr, TH2F* weight_pt2,RooDataSet **dset, RooDataSet *dsetdestination, int numvar){ if (!(*dset)) return; ///numerator and denominator TH1F *hnum = new TH1F("hnum","hnum",n_ptbins_forreweighting,ptbins_forreweighting); TH1F *hden = new TH1F("hden","hden",n_ptbins_forreweighting,ptbins_forreweighting); hnum->Sumw2(); hden->Sumw2(); const char* ptname=Form("roopt%d",numvar); // RooAbsData->get*() Load a given row of data //getRealValue Get value of a RooAbsReal stored in set with given name. If none is found, value of defVal is returned. for (int i=0; i<(*dset)->numEntries(); i++){ hden->Fill(fabs((*dset)->get(i)->getRealValue(ptname)),(*dset)->store()->weight(i)); } for (int i=0; i<dsetdestination->numEntries(); i++){ hnum->Fill(fabs(dsetdestination->get(i)->getRealValue(ptname)),dsetdestination->store()->weight(i)); } //normalize to one hnum->Scale(1.0/hnum->Integral()); hden->Scale(1.0/hden->Integral()); hnum->Divide(hden); TH1F *h = hnum; RooDataSet *newdset = new RooDataSet(**dset,Form("%s_ptrew",(*dset)->GetName())); newdset->reset(); for (int i=0; i<(*dset)->numEntries(); i++){ RooArgSet args = *((*dset)->get(i)); float oldw = (*dset)->store()->weight(i); float pt = args.getRealValue(ptname); float neww = oldw*h->GetBinContent(h->FindBin(fabs(pt))); if(debug){ weight_pt->Fill(neww); weight_pto->Fill(oldw); weight_pt2o->Fill(h->FindBin(fabs(pt)),oldw); weight_ptn->Fill(h->FindBin(fabs(pt)),neww); if(oldw!=0 && neww!=0)weight_ptnr->Fill(h->FindBin(fabs(pt)),oldw/neww); else {weight_ptnr->Fill(-10,1);} if(oldw!=0 && neww!=0)weight_pt2->Fill(pt,oldw/neww); else {weight_pt2->Fill(-10,1);} } newdset->add(args,neww); } newdset->SetName((*dset)->GetName()); newdset->SetTitle((*dset)->GetTitle()); delete hnum; delete hden; RooDataSet *old_dset = *dset; *dset=newdset; std::cout << "Pt 1d rew: norm from " << old_dset->sumEntries() << " to " << newdset->sumEntries() << std::endl; delete old_dset; };
//2d reweighting of rho and its sigma void reweight_rhosigma(TH1F* weight_rho, TH1F* weight_rhoo,TH2F*weight_rhon,TH2F*weight_rho2o,TH2F* weight_rhonr, TH2F* weight_rho2,TH2F*weight_sigman,TH2F*weight_sigma2o,TH2F* weight_sigmanr, TH2F* weight_sigma2,RooDataSet **dset, RooDataSet *dsetdestination, bool deleteold){ if (!(*dset)) return; // TH2F *hnum = new TH2F("hnum","hnum",n_rhobins_forreweighting,rhobins_forreweighting,n_sigmabins_forreweighting,sigmabins_forreweighting); // TH2F *hden = new TH2F("hden","hden",n_rhobins_forreweighting,rhobins_forreweighting,n_sigmabins_forreweighting,sigmabins_forreweighting); TH2F *hnum = new TH2F("hnum","hnum",100,0,100,20,0,20); TH2F *hden = new TH2F("hden","hden",100,0,100,20,0,20); hnum->Sumw2(); hden->Sumw2(); for (int i=0; i<(*dset)->numEntries(); i++){ hden->Fill(fabs((*dset)->get(i)->getRealValue("roorho")),fabs((*dset)->get(i)->getRealValue("roosigma")),(*dset)->store()->weight(i)); } for (int i=0; i<dsetdestination->numEntries(); i++){ hnum->Fill(fabs(dsetdestination->get(i)->getRealValue("roorho")),fabs(dsetdestination->get(i)->getRealValue("roosigma")),dsetdestination->store()->weight(i)); } hnum->Scale(1.0/hnum->Integral()); hden->Scale(1.0/hden->Integral()); //data/MC hnum->Divide(hden); TH2F *h = hnum; RooDataSet *newdset = new RooDataSet(**dset,Form("%s_rhosigmarew",(*dset)->GetName())); newdset->reset(); for (int i=0; i<(*dset)->numEntries(); i++){ RooArgSet args = *((*dset)->get(i)); float oldw = (*dset)->store()->weight(i); float rho = args.getRealValue("roorho"); float sigma = args.getRealValue("roosigma"); float neww = oldw*h->GetBinContent(h->FindBin(rho,sigma)); if(debug){ weight_rho->Fill(neww); weight_rhoo->Fill(oldw); weight_rho2o->Fill(h->GetXaxis()->FindBin(rho),oldw); weight_rhon->Fill(h->GetXaxis()->FindBin(rho),neww); if(oldw!=0)weight_rhonr->Fill(h->GetXaxis()->FindBin(rho),oldw/neww); else {weight_rhonr->Fill(-10,1);}//cout << "dipho weight old 0" << endl;} if(oldw!=0)weight_rho2->Fill(rho,oldw/neww); weight_sigma2o->Fill(h->GetYaxis()->FindBin(sigma),oldw); weight_sigman->Fill(h->GetYaxis()->FindBin(sigma),neww); if(oldw!=0)weight_sigmanr->Fill(h->GetYaxis()->FindBin(sigma),oldw/neww); else {weight_sigmanr->Fill(-10,1);}//cout << "dipho weight old 0" << endl;} if(oldw!=0)weight_sigma2->Fill(sigma,oldw/neww); } newdset->add(args,neww); } newdset->SetName((*dset)->GetName()); newdset->SetTitle((*dset)->GetTitle()); delete hnum; delete hden; RooDataSet *old_dset = *dset; *dset=newdset; std::cout << "RhoSigma2D rew: norm from " << old_dset->sumEntries() << " to " << newdset->sumEntries() << std::endl; if (deleteold) delete old_dset; };
void PDF_ADS_DK_Kpi_2var::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar &rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar &dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar &kbk = RooConst(1.); RooRealVar &rd = *((RooRealVar*)p->find("rD_kpi")); RooRealVar &dd = *((RooRealVar*)p->find("dD_kpi")); RooConstVar &kd = RooConst(1.); RooRealVar &g = *((RooRealVar*)p->find("g")); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooADSAVar("aads_dk_th", "Aads (DK)", rbk, dbk, kbk, rd, dd, kd, g ))); theory->add(*(new RooADSRVar("rads_dk_th", "Rads (DK)", rbk, dbk, kbk, rd, dd, kd, g ))); }
RooMultiVarGaussian *MultiVarGaussian(RooDataSet *dataset){ RooArgSet *args = (RooArgSet *) dataset->get()->Clone(); // argSet.remove(*chain->GetNLLVar(), kFALSE, kTRUE); RooArgSet *mu = (RooArgSet *)args->Clone(); TMatrixDSym *matrix = dataset->covarianceMatrix(); RooMultiVarGaussian *g = new RooMultiVarGaussian("multi","",RooArgList(*args), RooArgList(*mu),*matrix); return g; return NULL; }
//____________________________________ void DoHypothesisTest(RooWorkspace* wks){ // Use a RooStats ProfileLikleihoodCalculator to do the hypothesis test. ModelConfig model; model.SetWorkspace(*wks); model.SetPdf("model"); //plc.SetData("data"); ProfileLikelihoodCalculator plc; plc.SetData( *(wks->data("data") )); // here we explicitly set the value of the parameters for the null. // We want no signal contribution, eg. mu = 0 RooRealVar* mu = wks->var("mu"); // RooArgSet* nullParams = new RooArgSet("nullParams"); // nullParams->addClone(*mu); RooArgSet poi(*mu); RooArgSet * nullParams = (RooArgSet*) poi.snapshot(); nullParams->setRealValue("mu",0); //plc.SetNullParameters(*nullParams); plc.SetModel(model); // NOTE: using snapshot will import nullparams // in the WS and merge with existing "mu" // model.SetSnapshot(*nullParams); //use instead setNuisanceParameters plc.SetNullParameters( *nullParams); // We get a HypoTestResult out of the calculator, and we can query it. HypoTestResult* htr = plc.GetHypoTest(); cout << "-------------------------------------------------" << endl; cout << "The p-value for the null is " << htr->NullPValue() << endl; cout << "Corresponding to a signifcance of " << htr->Significance() << endl; cout << "-------------------------------------------------\n\n" << endl; }
std::pair<float,float> ComputeLimitForADataset(float m0, RooDataSet* CurrentDataset, REGION region, REGION NonRegion, TString& modelName, RooWorkspace *ws, const char* tag) { ws->var("m0")->setVal(m0); ws->var("m0")->setConstant(1); m0 = float(ws->var("m0")->getVal()); RooRealVar *mu = ws->var(Concatenate("nSig",GetRegion(region))); RooArgSet *poi = new RooArgSet(*mu); RooArgSet *nullParams = (RooArgSet*) poi->snapshot(); nullParams->setRealValue(Concatenate("nSig",GetRegion(region)), 0); RooStats::ModelConfig *model = new RooStats::ModelConfig(); model->SetWorkspace(*ws); model->SetPdf(*ws->pdf(modelName)); model->SetParametersOfInterest(*mu); model->SetObservables(RooArgSet(*ws->var("inv"))); model->SetSnapshot(*mu); RooStats::ModelConfig *nullModel; nullModel = model->Clone(modelName+"BgOnly"); float oldval = ws->var(Concatenate("nSig",GetRegion(region)))->getVal(); ws->var(Concatenate("nSig",GetRegion(region)))->setVal(0); ws->var(Concatenate("nSig",GetRegion(region)))->setConstant(1); nullModel->SetSnapshot(RooArgSet(*ws->var(Concatenate("nSig",GetRegion(region))))); ws->var(Concatenate("nSig",GetRegion(region)))->setConstant(0); ws->var(Concatenate("nSig",GetRegion(region)))->setVal(oldval); nullModel->SetWorkspace(*ws); nullModel->SetParametersOfInterest(*nullParams); RooAbsData *data = CurrentDataset; float UpperLimit,Signif; ComputeUpperLimit(data,model,UpperLimit,Signif,mu,nullParams,ws,region,tag); delete poi; poi=0; delete model; model=0; return make_pair(UpperLimit,Signif); }
void PDF_GLWADS_DKDpi_hh_Dmix_newVars_uv::initRelations() { RooArgSet *p = (RooArgSet*)parameters; RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); //RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); //RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooRealVar& u = *((RooRealVar*)p->find("u_dpi")); RooRealVar& v = *((RooRealVar*)p->find("v_dpi")); RooFormulaVar *rbp = new RooFormulaVar("rbp","rbp", "TMath::Sqrt( u_dpi*u_dpi + v_dpi*v_dpi )", *p); RooFormulaVar *dbp = new RooFormulaVar("dbp","dbp", "TMath::ATan( v_dpi / u_dpi )", *p); RooConstVar& kbp = RooConst(1); RooConstVar& kf = RooConst(1); RooRealVar& rf = *((RooRealVar*)p->find("rD_kpi")); RooConstVar& rfGLW = RooConst(1); RooRealVar& df = *((RooRealVar*)p->find("dD_kpi")); RooConstVar& dfGLW = RooConst(0); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& AcpDKK = *((RooRealVar*)p->find("AcpDKK")); RooRealVar& AcpDpp = *((RooRealVar*)p->find("AcpDpipi")); RooConstVar& AcpD = RooConst(0); theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dk_kpi_th", "RooGLWADSDmixAcpADSVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar ("aads_dpi_kpi_th", "RooGLWADSDmixAcpADSVar" , *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dk_kk_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDKK))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dk_pipi_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDpp))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dpi_kk_th", "RooGLWADSDmixAcpVar" , *rbp, *dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDKK))); theory->add(*(new RooGLWADSDmixAcpVar ("acp_dpi_pipi_th", "RooGLWADSDmixAcpVar" , *rbp, *dbp, kbp, rfGLW, dfGLW, kf, g, xD, yD, _Mxy, AcpDpp))); theory->add(*(new RooGLWADSDmixAcpVar ("afav_dk_kpi_th", "RooGLWADSDmixAcpVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dk_kpi_th", "RooGLWADSDmixRADSVar" , rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRADSVar ("rads_dpi_kpi_th", "RooGLWADSDmixRADSVar" , *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, ""))); theory->add(*(new RooGLWADSDmixRcpRatioVar ("rcp_kk_th", "RooGLWADSDmixRcpRatioVar", rbk, dbk, kbk, *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy))); theory->add(*(new RooGLWADSDmixRcpRatioVar ("rcp_pipi_th", "RooGLWADSDmixRcpRatioVar", rbk, dbk, kbk, *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy))); theory->add(*(new RooGLWADSDmixRkpVar ("rkp_kpi_th", "RooGLWADSDmixRkpVar" , Rcab, rbk, dbk, kbk, *rbp, *dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); }
/// /// finds a variable within a RooArgSet with a specific name sub-string /// return all variables containing the sub-string in a std::vector /// std::vector<TString> Utils::getParsWithName(const TString& subString, const RooArgSet& set){ std::string vars = set.contentsString(); std::vector<std::string> _names; std::vector<TString> _results; boost::split(_names,vars,boost::is_any_of(",")); for( std::string str : _names){ std::size_t found = str.find(subString); if(found != std::string::npos){ _results.push_back(TString(str)); } } return _results; }
//#include <typeinfo.h> void addFlatNuisances(std::string fi){ gSystem->Load("libHiggsAnalysisCombinedLimit.so"); TFile *fin = TFile::Open(fi.c_str()); RooWorkspace *wspace = (RooWorkspace*)fin->Get("w_hmumu"); wspace->Print(""); RooStats::ModelConfig *mc = (RooStats::ModelConfig*)wspace->genobj("ModelConfig"); RooArgSet *nuis = (RooArgSet*) mc->GetNuisanceParameters(); std::cout << "Before...." << std::endl; nuis->Print(); RooRealVar *mgg = (RooRealVar*)wspace->var("mmm"); // Get all of the "flat" nuisances to be added to the nusiances: RooArgSet pdfs = (RooArgSet) wspace->allVars(); RooAbsReal *pdf; TIterator *it_pdf = pdfs.createIterator(); while ( (pdf=(RooAbsReal*)it_pdf->Next()) ){ if (!(std::string(pdf->GetName()).find("zmod") != std::string::npos )) { if (!(std::string(pdf->GetName()).find("__norm") != std::string::npos )) { continue; } } pdf->Print(); RooArgSet* pdfpars = (RooArgSet*)pdf->getParameters(RooArgSet(*mgg)); pdfpars->Print(); std::string newname_pdf = (std::string("unconst_")+std::string(pdf->GetName())); wspace->import(*pdf,RooFit::RenameVariable(pdf->GetName(),newname_pdf.c_str())); pdf->SetName(newname_pdf.c_str()); nuis->add(*pdf); } wspace->var("MH")->setVal(125.0); std::cout << "After..." << std::endl; nuis->Print(); mc->SetNuisanceParameters(*nuis); //RooWorkspace *wspace_new = wspace->Clone(); //mc->SetWorkspace(*wspace_new); //wspace_new->import(*mc,true); TFile *finew = new TFile((std::string(fin->GetName())+std::string("_unconst.root")).c_str(),"RECREATE"); //wspace_new->SetName("w"); finew->WriteTObject(wspace); finew->Close(); }
/// /// Fit a pdf to the minimum, but keep angular parameters in a range of /// [0,2pi]. If after an initial fit, a parameter has walked outside this /// interval, add multiples of 2pi to bring it back. Then, refit. /// All variables that have unit 'rad' are taken to be angles. /// RooFitResult* Utils::fitToMinBringBackAngles(RooAbsPdf *pdf, bool thorough, int printLevel) { countAllFitBringBackAngle++; RooFitResult* r = fitToMin(pdf, thorough, printLevel); bool refit = false; TIterator* it = r->floatParsFinal().createIterator(); while ( RooRealVar* p = (RooRealVar*)it->Next() ){ if ( ! isAngle(p) ) continue; if ( p->getVal()<0.0 || p->getVal()>2.*TMath::Pi() ){ RooArgSet *pdfPars = pdf->getParameters(RooArgSet()); RooRealVar *pdfPar = (RooRealVar*)pdfPars->find(p->GetName()); pdfPar->setVal(bringBackAngle(p->getVal())); refit = true; delete pdfPars; } } if ( refit ){ countFitBringBackAngle++; delete r; r = fitToMin(pdf, thorough, printLevel); } delete it; return r; }
void SHyFT::fit(bool verbose) { if ( verbose ) cout << "Fitting" << endl; RooArgSet nllset; for(unsigned int i=0;i<bins_.size();++i) { nllset.add(*bins_[i]->nll()); } RooAddition nllsum("nllsum","nllsum",nllset); RooMinuit m(nllsum); if ( verbose ) m.setVerbose(kTRUE); else { m.setVerbose(kFALSE); m.setPrintLevel(-1); } m.migrad(); m.hesse(); // m.minos(); if ( verbose ) { RooFitResult * f = m.save(); f->Print("v"); } }
void RA4WorkSpace::finalize () { // // check // if ( !hasEle_ && !hasMu_ ) { std::cout << "no channel has been defined" << std::endl; return; } // // combined model RooArgSet modelSet; if ( !constEff_ ) modelSet.add(*pdfMcEff_); if ( !constKappa_ ) modelSet.add(*pdfMcKappa_); if ( !constSCont_ ) modelSet.add(*pdfMcSCont_); // RooArgSet modelSet(*pdfMcEff_,*pdfMcKappa_,*pdfMcSCont_); if ( hasEle_ ) { for ( unsigned int i=0; i<4; ++i ) modelSet.add(*pdfReg_[i][0]); } if ( hasMu_ ) { for ( unsigned int i=0; i<4; ++i ) modelSet.add(*pdfReg_[i][1]); } RooProdPdf model("model","model",modelSet); wspace_->import(model); // // priors // wspace_->factory("Uniform::prior_poi({s})"); RooUniform priorNuis("prior_nuis","prior_nuis",*setNuis_); wspace_->import(priorNuis); wspace_->factory("PROD::prior(prior_poi,prior_nuis)"); wspace_->Print("v"); finalized_ = true; }
void dtfit_sigmc(){ TChain* tree = new TChain("TEvent"); tree->Add("/home/vitaly/B0toDh0/Tuples/b2dh_sigmc_s1.root"); tree->Add("/home/vitaly/B0toDh0/Tuples/b2dh_sigmc_s2.root"); RooArgSet argset; RooRealVar mbc("mbc","mbc",mbc_min,mbc_max,"GeV"); argset.add(mbc); RooRealVar de("de","#DeltaE",-0.15,0.3,"GeV"); argset.add(de); de.setRange("signal",de_min,de_max); RooRealVar md("md","md",DMass-md_cut,DMass+md_cut,"GeV"); argset.add(md); RooRealVar mk("mk","mk",KMass-mk_cut,KMass+mk_cut,"GeV"); argset.add(mk); RooRealVar mpi0("mpi0","mpi0",Pi0Mass-mpi0_cut,Pi0Mass+mpi0_cut,"GeV"); argset.add(mpi0); RooRealVar bdtgs("bdtgs","bdtgs",0.98,1.); argset.add(bdtgs); RooRealVar atckpi_max("atckpi_max","atckpi_max",0.,atckpi_cut); argset.add(atckpi_max); RooDataSet ds("ds","ds",tree,argset); ds.Print(); }
void PDF_GLWADS_DKDpi_KSKpi_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbk = *((RooRealVar*)p->find("r_dk")); RooRealVar& dbk = *((RooRealVar*)p->find("d_dk")); RooConstVar& kbk = RooConst(1); RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_kskpi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_kskpi")); RooRealVar& df = *((RooRealVar*)p->find("dD_kskpi")); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooRealVar& Rcab = *((RooRealVar*)p->find("RBRdkdpi")); RooConstVar& AcpD = RooConst(0); // theory->add(*(new RooFormulaVar("rfavsup_dpi_kskpi_th", "rfavsup_dpi_kskpi_th", "(1 + r_dpi^2*rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi-dD_kskpi))/(r_dpi^2 + rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi+dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("rfav_dkdpi_kskpi_th", "rfav_dkdpi_kskpi_th", "RBRdkdpi*(1 + r_dk^2*rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk -dD_kskpi))/(1 + r_dpi^2*rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi-dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("rsup_dkdpi_kskpi_th", "rsup_dkdpi_kskpi_th", "RBRdkdpi*(r_dk^2 + rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk +dD_kskpi))/(r_dpi^2 + rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi+dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("afav_dk_kskpi_th", "afav_dk_kskpi_th", "2*r_dk *rD_kskpi*kD_kskpi*sin(g)*sin(d_dk -dD_kskpi) / (1 + r_dk^2 * rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk -dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("asup_dk_kskpi_th", "asup_dk_kskpi_th", "2*r_dk *rD_kskpi*kD_kskpi*sin(g)*sin(d_dk +dD_kskpi) / (r_dk^2 + rD_kskpi^2 + 2*r_dk *rD_kskpi*kD_kskpi*cos(g)*cos(d_dk +dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("afav_dpi_kskpi_th", "afav_dpi_kskpi_th", "2*r_dpi*rD_kskpi*kD_kskpi*sin(g)*sin(d_dpi-dD_kskpi) / (1 + r_dpi^2 * rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi-dD_kskpi))", *p))); // theory->add(*(new RooFormulaVar("asup_dpi_kskpi_th", "asup_dpi_kskpi_th", "2*r_dpi*rD_kskpi*kD_kskpi*sin(g)*sin(d_dpi+dD_kskpi) / (r_dpi^2 + rD_kskpi^2 + 2*r_dpi*rD_kskpi*kD_kskpi*cos(g)*cos(d_dpi+dD_kskpi))", *p))); theory->add(*(new RooGLWADSDmixRADSVar( "rfavsup_dpi_kskpi_th", "RooGLWADSDmixRADSVar (inverse)", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "inverse"))); theory->add(*(new RooGLWADSDmixRkpVar( "rfav_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (fav)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "fav"))); theory->add(*(new RooGLWADSDmixRkpVar( "rsup_dkdpi_kskpi_th", "RooGLWADSDmixRkpVar (sup)", Rcab, rbk, dbk, kbk, rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "sup"))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dk_kskpi_th", "RooGLWADSDmixAcpVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dk_kskpi_th", "RooGLWADSDmixAcpADSVar", rbk, dbk, kbk, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpVar( "afav_dpi_kskpi_th", "RooGLWADSDmixAcpVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixAcpADSVar("asup_dpi_kskpi_th", "RooGLWADSDmixAcpADSVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); }
void defineDatasets( RooWorkspace *w ) { w->factory( "B_s0_DTF_B_s0_M [5000,5800]" ); w->factory( "eventNumber [0, 10e10]" ); w->factory( "DataCat[HadronTOS2011,GlobalTIS2011,HadronTOS2012,GlobalTIS2012]" ); w->var("B_s0_DTF_B_s0_M")->SetTitle("m(K^{+}#pi^{-}K^{-}#pi^{+})"); w->var("B_s0_DTF_B_s0_M")->setUnit("MeV"); RooArgSet *observables = new RooArgSet(); observables->add( *w->var("B_s0_DTF_B_s0_M") ); observables->add( *w->var("eventNumber") ); observables->add( *w->cat("DataCat") ); w->defineSet( "observables", *observables ); delete observables; RooArgSet *categories = new RooArgSet(); categories->add( *w->cat("DataCat") ); w->defineSet( "categories", *categories ); delete categories; vector<TString> dsets; dsets.push_back( "Data" ); dsets.push_back( "Data2011" ); dsets.push_back( "Data2012" ); dsets.push_back( "Data2011HadronTOS" ); dsets.push_back( "Data2011GlobalTIS" ); dsets.push_back( "Data2012HadronTOS" ); dsets.push_back( "Data2012GlobalTIS" ); dsets.push_back( "Bs2KstKst" ); dsets.push_back( "Bs2KstKst1430" ); dsets.push_back( "Bs2Kst1430Kst1430" ); dsets.push_back( "Bs2KpiKpiPhaseSpace" ); dsets.push_back( "Bd2KstKst" ); dsets.push_back( "Bd2PhiKst" ); dsets.push_back( "Bs2PhiKst" ); dsets.push_back( "Bd2RhoKst" ); dsets.push_back( "Lb2pKpipi" ); dsets.push_back( "Lb2ppipipi" ); for (int i=0; i<dsets.size(); i++) { RooDataSet *data = new RooDataSet( dsets[i], dsets[i], *w->set("observables") ); w->import( *data ); delete data; } }
void PDF_GLWADS_Dpi_K3pi_Dmix::initRelations() { RooArgSet *p = (RooArgSet*)parameters; delete theory; theory = new RooArgList("theory"); ///< the order of this list must match that of the COR matrix! RooRealVar& rbp = *((RooRealVar*)p->find("r_dpi")); RooRealVar& dbp = *((RooRealVar*)p->find("d_dpi")); RooConstVar& kbp = RooConst(1); RooRealVar& kf = *((RooRealVar*)p->find("kD_k3pi")); RooRealVar& rf = *((RooRealVar*)p->find("rD_k3pi")); RooRealVar& df = *((RooRealVar*)p->find("dD_k3pi")); RooRealVar& g = *((RooRealVar*)p->find("g")); RooRealVar& xD = *((RooRealVar*)p->find("xD")); RooRealVar& yD = *((RooRealVar*)p->find("yD")); RooConstVar& AcpD = RooConst(0); theory->add(*(new RooGLWADSDmixAcpVar("afav_dpi_k3pi_th", "RooGLWADSDmixAcpVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, AcpD))); theory->add(*(new RooGLWADSDmixRpmVar("rp_dpi_k3pi_th", "RooGLWADSDmixRpmVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "+"))); theory->add(*(new RooGLWADSDmixRpmVar("rm_dpi_k3pi_th", "RooGLWADSDmixRpmVar", rbp, dbp, kbp, rf, df, kf, g, xD, yD, _Mxy, "-"))); }
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; }
double ro_fit4( TH1F * h2, int p4,int p3,int p2,int p1 ){ TCanvas *chi=(TCanvas*)gROOT->GetListOfCanvases()->FindObject("c_hist"); if (chi!=NULL){ chi->cd(); } int npeaks=4; if (npeaks>NMAX){ printf("TOO MANY PEAKS\n",""); return 1;} TH1F *h2; double pk[NMAX]; double si[NMAX]; double ar[NMAX]; double al[NMAX]; double n1; double min=h2->GetXaxis()->GetFirst(), max=h2->GetXaxis()->GetLast(), smin=(max-min)/1000, smax=(max-min), amin=h2->Integral( min, max )/1000., amax=h2->Integral( min, max ), almin=0., almax=100., nmin=1.0, nmax=100.; pk[0]=p4; pk[1]=p3; pk[2]=p2; pk[3]=p1; for (int i=0;i<npeaks;i++){ // pk[i]=1.0*(i+1)/(1+npeaks)*(max-min) +min; si[i]=4.3.; ar[i]=1.0*(amax+amin)/npeaks/2; //area al[i]=1.3; } n1=5.1; smin=0.5* si[0]; smax=2.*si[0]; int tag=1; int i; printf("%d peaks : ", npeaks); for (i=0;i<npeaks;i++){ printf( "%8.2f ",pk[i] ); } printf("\n######### TAG %7d\n", tag++); //================ MAIN variable 1D ============== RooRealVar x("x", "x", min, max); /* * * CHEBYSHEV HERE */ char sbg="p1"; // Build Chebychev polynomial p.d.f. // RooRealVar a0("a0","a0", 0.) ; RooRealVar a0("a0","a0", 0., -10, 10) ; RooRealVar a1("a1","a1", 0., -10, 10) ; RooRealVar a2("a2","a2", 0., -10, 10) ; RooRealVar a3("a3","a3", 0., -10, 10) ; RooArgSet setcheb; if ( sbg=="pn" ){ setcheb.add(a0);a0=0.;a0.setConstant(kTRUE);bgarea=0.;bgarea.setConstant(kTRUE);} if ( sbg=="p0" ){ setcheb.add(a0); a0=0.; a0.setConstant(kTRUE); } if ( sbg=="p1" ){ setcheb.add(a0); } if ( sbg=="p2" ){ setcheb.add(a1);setcheb.add(a0); } if ( sbg=="p3" ){ setcheb.add(a2);setcheb.add(a1); setcheb.add(a0);} if ( sbg=="p4" ){ setcheb.add(a3);setcheb.add(a2); setcheb.add(a1); setcheb.add(a0); } RooChebychev bkg("bkg","Background",x, setcheb ) ; RooRealVar mean1("mean1", "mean_", pk[0], min,max); RooRealVar mean2("mean2", "mean_", pk[1], min,max); RooRealVar mean3("mean3", "mean_", pk[2], min,max); RooRealVar mean4("mean4", "mean_", pk[3], min,max); RooRealVar mean5("mean5", "mean_", pk[4], min,max); RooRealVar mean6("mean6", "mean_", pk[5], min,max); RooRealVar mean7("mean7", "mean_", pk[6], min,max); RooRealVar mean8("mean8", "mean_", pk[7], min,max); RooRealVar mean9("mean9", "mean_", pk[8], min,max); RooRealVar meana("meana", "mean_", pk[9], min,max); RooRealVar meanb("meanb", "mean_", pk[10], min,max); RooRealVar meanc("meanc", "mean_", pk[11], min,max); RooRealVar meand("meand", "mean_", pk[12], min,max); RooRealVar meane("meane", "mean_", pk[13], min,max); RooRealVar meanf("meanf", "mean_", pk[14], min,max); RooRealVar sigm1("sigm1", "sigma", si[0], smin, smax); RooRealVar sigm2("sigm2", "sigma", si[1], smin, smax); RooRealVar sigm3("sigm3", "sigma", si[2], smin, smax); RooRealVar sigm4("sigm4", "sigma", si[3], smin, smax); RooRealVar sigm5("sigm5", "sigma", si[4], smin, smax); RooRealVar sigm6("sigm6", "sigma", si[5], smin, smax); RooRealVar sigm7("sigm7", "sigma", si[6], smin, smax); RooRealVar sigm8("sigm8", "sigma", si[7], smin, smax); RooRealVar sigm9("sigm9", "sigma", si[8], smin, smax); RooRealVar sigma("sigma", "sigma", si[9], smin, smax); RooRealVar sigmb("sigmb", "sigma", si[10], smin, smax); RooRealVar sigmc("sigmc", "sigma", si[11], smin, smax); RooRealVar sigmd("sigmd", "sigma", si[12], smin, smax); RooRealVar sigme("sigme", "sigma", si[13], smin, smax); RooRealVar sigmf("sigmf", "sigma", si[14], smin, smax); RooRealVar fs2("fs2","fs2", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs3("fs3","fs3", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs4("fs4","fs4", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs5("fs5","fs5", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs6("fs6","fs6", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs7("fs7","fs7", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs8("fs8","fs8", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fs9("fs9","fs9", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsa("fsa","fsa", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsb("fsb","fsb", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsc("fsc","fsc", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsd("fsd","fsd", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fse("fse","fse", 0.0 ); // factor sigma = 1==free or 0==fix RooRealVar fsf("fsf","fsf", 0.0 ); // factor sigma = 1==free or 0==fix RooFormulaVar fsigm2( "fsigm2", " fs2*sigm2 + (1.0-fs2)*sigm1" , RooArgSet(sigm1,sigm2,fs2) ); RooFormulaVar fsigm3( "fsigm3", " fs3*sigm3 + (1.0-fs3)*sigm1" , RooArgSet(sigm1,sigm3,fs3) ); RooFormulaVar fsigm4( "fsigm4", " fs4*sigm4 + (1.0-fs4)*sigm1" , RooArgSet(sigm1,sigm4,fs4) ); RooFormulaVar fsigm5( "fsigm5", " fs5*sigm5 + (1.0-fs5)*sigm1" , RooArgSet(sigm1,sigm5,fs5) ); RooFormulaVar fsigm6( "fsigm6", " fs6*sigm6 + (1.0-fs6)*sigm1" , RooArgSet(sigm1,sigm6,fs6) ); RooFormulaVar fsigm7( "fsigm7", " fs7*sigm7 + (1.0-fs7)*sigm1" , RooArgSet(sigm1,sigm7,fs7) ); RooFormulaVar fsigm8( "fsigm8", " fs8*sigm8 + (1.0-fs8)*sigm1" , RooArgSet(sigm1,sigm8,fs8) ); RooFormulaVar fsigm9( "fsigm9", " fs9*sigm9 + (1.0-fs9)*sigm1" , RooArgSet(sigm1,sigm9,fs9) ); RooFormulaVar fsigma( "fsigma", " fsa*sigma + (1.0-fsa)*sigm1" , RooArgSet(sigm1,sigma,fsa) ); RooFormulaVar fsigmb( "fsigmb", " fsb*sigmb + (1.0-fsb)*sigm1" , RooArgSet(sigm1,sigmb,fsb) ); RooFormulaVar fsigmc( "fsigmc", " fsc*sigmc + (1.0-fsc)*sigm1" , RooArgSet(sigm1,sigmc,fsc) ); RooFormulaVar fsigmd( "fsigmd", " fsd*sigmd + (1.0-fsd)*sigm1" , RooArgSet(sigm1,sigmd,fsd) ); RooFormulaVar fsigme( "fsigme", " fse*sigme + (1.0-fse)*sigm1" , RooArgSet(sigm1,sigme,fse) ); RooFormulaVar fsigmf( "fsigmf", " fsf*sigmf + (1.0-fsf)*sigm1" , RooArgSet(sigm1,sigmf,fsf) ); // -------- fsx 0== FIX to sigm1; 1==free sigma fs2.setVal( 0.0 ); fs3.setVal( 0.0 ); fs4.setVal( 0.0 ); fs5.setVal( 1.0 ); fs6.setVal( 1.0 ); fs7.setVal( 1.0 ); fs8.setVal( 1.0 ); fs9.setVal( 1.0 ); fsa.setVal( 1.0 ); fsb.setVal( 1.0 ); fsc.setVal( 1.0 ); fsd.setVal( 1.0 ); fse.setVal( 1.0 ); fsf.setVal( 1.0 ); fs2.setConstant( kTRUE ); fs3.setConstant( kTRUE ); fs4.setConstant( kTRUE ); fs5.setConstant( kTRUE ); fs6.setConstant( kTRUE ); fs7.setConstant( kTRUE ); fs8.setConstant( kTRUE ); fs9.setConstant( kTRUE ); fsa.setConstant( kTRUE ); fsb.setConstant( kTRUE ); fsc.setConstant( kTRUE ); fsd.setConstant( kTRUE ); fse.setConstant( kTRUE ); fsf.setConstant( kTRUE ); if (fs2.getVal()==0.0){sigm2.setConstant( kTRUE );} if (fs3.getVal()==0.0){sigm3.setConstant( kTRUE );} if (fs4.getVal()==0.0){sigm4.setConstant( kTRUE );} if (fs5.getVal()==0.0){sigm5.setConstant( kTRUE );} if (fs6.getVal()==0.0){sigm6.setConstant( kTRUE );} if (fs7.getVal()==0.0){sigm7.setConstant( kTRUE );} if (fs8.getVal()==0.0){sigm8.setConstant( kTRUE );} if (fs9.getVal()==0.0){sigm9.setConstant( kTRUE );} if (fsa.getVal()==0.0){sigma.setConstant( kTRUE );} if (fsb.getVal()==0.0){sigmb.setConstant( kTRUE );} if (fsc.getVal()==0.0){sigmc.setConstant( kTRUE );} if (fsd.getVal()==0.0){sigmd.setConstant( kTRUE );} if (fse.getVal()==0.0){sigme.setConstant( kTRUE );} if (fsf.getVal()==0.0){sigmf.setConstant( kTRUE );} // extra thing that goes to RootSet RooRealVar area1("area1", "area_", ar[0], amin, amax); RooRealVar area2("area2", "area_", ar[1], amin, amax); RooRealVar area3("area3", "area_", ar[2], amin, amax); RooRealVar area4("area4", "area_", ar[3], amin, amax); RooRealVar area5("area5", "area_", ar[4], amin, amax); RooRealVar area6("area6", "area_", ar[5], amin, amax); RooRealVar area7("area7", "area_", ar[6], amin, amax); RooRealVar area8("area8", "area_", ar[7], amin, amax); RooRealVar area9("area9", "area_", ar[8], amin, amax); RooRealVar areaa("areaa", "area_", ar[9], amin, amax); RooRealVar areab("areab", "area_", ar[10], amin, amax); RooRealVar areac("areac", "area_", ar[11], amin, amax); RooRealVar aread("aread", "area_", ar[12], amin, amax); RooRealVar areae("areae", "area_", ar[13], amin, amax); RooRealVar areaf("areaf", "area_", ar[14], amin, amax); RooRealVar bgarea("bgarea", "bgarea", 1.0*(amin+amax)/2., 0, amax); //=================== only one instance =================== RooRealVar alph1("alph1", "alph1", al[0], almin, almax ); RooRealVar ncbs1("n1", "n1", n1, nmin, nmax ); RooCBShape cb1("cb1","CBS", x,mean1, sigm1,alph1,ncbs1); RooCBShape cb2("cb2","CBS", x,mean2,fsigm2,alph1,ncbs1); RooCBShape cb3("cb3","CBS", x,mean3,fsigm3,alph1,ncbs1); RooCBShape cb4("cb4","CBS", x,mean4,fsigm4,alph1,ncbs1); RooCBShape cb5("cb5","CBS", x,mean5,fsigm5,alph1,ncbs1); RooCBShape cb6("cb6","CBS", x,mean6,fsigm6,alph1,ncbs1); RooCBShape cb7("cb7","CBS", x,mean7,fsigm7,alph1,ncbs1); RooCBShape cb8("cb8","CBS", x,mean8,fsigm8,alph1,ncbs1); RooCBShape cb9("cb9","CBS", x,mean9,fsigm9,alph1,ncbs1); RooCBShape cba("cba","CBS", x,meana,fsigma,alph1,ncbs1); RooCBShape cbb("cbb","CBS", x,meanb,fsigmb,alph1,ncbs1); RooCBShape cbc("cbc","CBS", x,meanc,fsigmc,alph1,ncbs1); RooCBShape cbd("cbd","CBS", x,meand,fsigmd,alph1,ncbs1); RooCBShape cbe("cbe","CBS", x,meane,fsigme,alph1,ncbs1); RooCBShape cbf("cbf","CBS", x,meanf,fsigmf,alph1,ncbs1); RooExtendPdf ecb1("ecb1","ECBS", cb1, area1 ); RooExtendPdf ecb2("ecb2","ECBS", cb2, area2 ); RooExtendPdf ecb3("ecb3","ECBS", cb3, area3 ); RooExtendPdf ecb4("ecb4","ECBS", cb4, area4 ); RooExtendPdf ecb5("ecb5","ECBS", cb5, area5 ); RooExtendPdf ecb6("ecb6","ECBS", cb6, area6 ); RooExtendPdf ecb7("ecb7","ECBS", cb7, area7 ); RooExtendPdf ecb8("ecb8","ECBS", cb8, area8 ); RooExtendPdf ecb9("ecb9","ECBS", cb9, area9 ); RooExtendPdf ecba("ecba","ECBS", cba, areaa ); RooExtendPdf ecbb("ecbb","ECBS", cbb, areab ); RooExtendPdf ecbc("ecbc","ECBS", cbc, areac ); RooExtendPdf ecbd("ecbd","ECBS", cbd, aread ); RooExtendPdf ecbe("ecbe","ECBS", cbe, areae ); RooExtendPdf ecbf("ecbf","ECBS", cbf, areaf ); RooArgList erl; if (npeaks>0)erl.add( ecb1 ); if (npeaks>1)erl.add( ecb2 ); if (npeaks>2)erl.add( ecb3 ); if (npeaks>3)erl.add( ecb4 ); if (npeaks>4)erl.add( ecb5 ); if (npeaks>5)erl.add( ecb6 ); if (npeaks>6)erl.add( ecb7 ); if (npeaks>7)erl.add( ecb8 ); if (npeaks>8)erl.add( ecb9 ); if (npeaks>9)erl.add( ecba ); if (npeaks>10)erl.add( ecbb ); if (npeaks>11)erl.add( ecbc ); if (npeaks>12)erl.add( ecbd ); if (npeaks>13)erl.add( ecbe ); if (npeaks>14)erl.add( ecbf ); RooExtendPdf ebkg("ebkg","EBkg", bkg, bgarea ); erl.add( ebkg ); RooAddPdf emodelV("emodel","emultiplet", erl ); emodelV.Print("v"); RooDataHist datah("datah","datah with x",x,h2); RooPlot* xframe = x.frame(); datah.plotOn(xframe, DrawOption("logy") ); // RooPlot* xframe = x.frame(); /* bkg.plotOn( xframe, LineColor(kBlue) ); cb1.plotOn( xframe, LineColor(kRed) ); */ // xframe->Draw(); /* * Here I believe to put the parameters for fit???? * */ /* RooArgList rl; if (npeaks>0)rl.add( cb1 ); if (npeaks>1)rl.add( cb2 ); if (npeaks>2)rl.add( cb3 ); if (npeaks>3)rl.add( cb4 ); if (npeaks>4)rl.add( cb5 ); if (npeaks>5)rl.add( cb6 ); if (npeaks>6)rl.add( cb7 ); if (npeaks>7)rl.add( cb8 ); if (npeaks>8)rl.add( cb9 ); if (npeaks>9)rl.add( cba ); if (npeaks>10)rl.add( cbb ); if (npeaks>11)rl.add( cbc ); if (npeaks>12)rl.add( cbd ); if (npeaks>13)rl.add( cbe ); if (npeaks>14)rl.add( cbf ); rl.add( bkg ); // asi zastoupeni jednotlivych piku viz vyse------------ // RooArgSet rs; RooArgList rs; if (npeaks>0)rs.add( area1 ); if (npeaks>1)rs.add( area2 ); if (npeaks>2)rs.add( area3 ); if (npeaks>3)rs.add( area4 ); if (npeaks>4)rs.add( area5 ); if (npeaks>5)rs.add( area6 ); if (npeaks>6)rs.add( area7 ); if (npeaks>7)rs.add( area8 ); if (npeaks>8)rs.add( area9 ); if (npeaks>9)rs.add( areaa ); if (npeaks>10)rs.add( areab ); if (npeaks>11)rs.add( areac ); if (npeaks>12)rs.add( aread ); if (npeaks>13)rs.add( areae ); if (npeaks>14)rs.add( areaf ); rs.add( bgarea ); //if # coefficients(rs)+1=functions(rl) => coef.are interpreted as fractions RooAddPdf modelV("model","multiplet", rl, rs ); modelV.Print("v"); */ /* * WITH CUSTOMIZER - I can change parameters inside. But * - then all is a clone and I dont know how to reach it.->Iterations...difficlt I try something with RooFormulaVar */ fitresult = emodelV.fitTo( datah , Save() ); fitresult->Print("v") ; fitresult->floatParsFinal().Print("s") ; // model->Print(); // not interesting........ emodelV.plotOn(xframe, LineColor(kRed), DrawOption("l0z") ); emodelV.plotOn(xframe, Components(ecb1),LineColor(kGreen),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb1,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb2,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb3,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components(RooArgSet(ecb4,ebkg)),LineColor(kBlue),LineStyle(kDashed) ); emodelV.plotOn(xframe, Components( RooArgSet(ebkg) ), LineColor(kRed) ); xframe->Draw(); printf("FWHM = = %f chan\n", sigm1.getVal()*2.3548 ); printf("FWHM = = %f keV\n", sigm1.getVal()*2.3548 *5804.0/p1 ); return sigm1.getVal()*2.3548 *5804.0/p1 ; }//==================================ro_fit4 ======
void setup(ModelConfig* mcInWs) { RooAbsPdf* combPdf = mcInWs->GetPdf(); RooArgSet mc_obs = *mcInWs->GetObservables(); RooArgSet mc_globs = *mcInWs->GetGlobalObservables(); RooArgSet mc_nuis = *mcInWs->GetNuisanceParameters(); // pair the nuisance parameter to the global observable RooArgSet mc_nuis_tmp = mc_nuis; RooArgList nui_list; RooArgList glob_list; RooArgSet constraint_set_tmp(*combPdf->getAllConstraints(mc_obs, mc_nuis_tmp, false)); RooArgSet constraint_set; int counter_tmp = 0; unfoldConstraints(constraint_set_tmp, constraint_set, mc_obs, mc_nuis_tmp, counter_tmp); TIterator* cIter = constraint_set.createIterator(); RooAbsArg* arg; while ((arg = (RooAbsArg*)cIter->Next())) { RooAbsPdf* pdf = (RooAbsPdf*)arg; if (!pdf) continue; // pdf->Print(); TIterator* nIter = mc_nuis.createIterator(); RooRealVar* thisNui = NULL; RooAbsArg* nui_arg; while ((nui_arg = (RooAbsArg*)nIter->Next())) { if (pdf->dependsOn(*nui_arg)) { thisNui = (RooRealVar*)nui_arg; break; } } delete nIter; // need this incase the observable isn't fundamental. // in this case, see which variable is dependent on the nuisance parameter and use that. RooArgSet* components = pdf->getComponents(); // components->Print(); components->remove(*pdf); if (components->getSize()) { TIterator* itr1 = components->createIterator(); RooAbsArg* arg1; while ((arg1 = (RooAbsArg*)itr1->Next())) { TIterator* itr2 = components->createIterator(); RooAbsArg* arg2; while ((arg2 = (RooAbsArg*)itr2->Next())) { if (arg1 == arg2) continue; if (arg2->dependsOn(*arg1)) { components->remove(*arg1); } } delete itr2; } delete itr1; } if (components->getSize() > 1) { cout << "ERROR::Couldn't isolate proper nuisance parameter" << endl; return; } else if (components->getSize() == 1) { thisNui = (RooRealVar*)components->first(); } TIterator* gIter = mc_globs.createIterator(); RooRealVar* thisGlob = NULL; RooAbsArg* glob_arg; while ((glob_arg = (RooAbsArg*)gIter->Next())) { if (pdf->dependsOn(*glob_arg)) { thisGlob = (RooRealVar*)glob_arg; break; } } delete gIter; if (!thisNui || !thisGlob) { cout << "WARNING::Couldn't find nui or glob for constraint: " << pdf->GetName() << endl; //return; continue; } // cout << "Pairing nui: " << thisNui->GetName() << ", with glob: " << thisGlob->GetName() << ", from constraint: " << pdf->GetName() << endl; nui_list.add(*thisNui); glob_list.add(*thisGlob); if (string(pdf->ClassName()) == "RooPoisson") { double minVal = max(0.0, thisGlob->getVal() - 8*sqrt(thisGlob->getVal())); double maxVal = max(10.0, thisGlob->getVal() + 8*sqrt(thisGlob->getVal())); thisNui->setRange(minVal, maxVal); thisGlob->setRange(minVal, maxVal); } else if (string(pdf->ClassName()) == "RooGaussian") { thisNui->setRange(-7, 7); thisGlob->setRange(-10, 10); } // thisNui->Print(); // thisGlob->Print(); } delete cIter; }