void plot2(RooRealVar *mass, RooAbsPdf *pdf, RooAbsPdf *pdf1, RooAbsPdf *pdf2, float frac, RooDataSet *data, string name, int bins, int mhLow, int mhHigh){ RooPlot *plot = mass->frame(); mass->setRange("unblindReg_1",85,95); mass->setRange("unblindReg_2",110,120); if (BLIND) { data->plotOn(plot,Binning(bins),CutRange("unblindReg_1")); data->plotOn(plot,Binning(bins),CutRange("unblindReg_2")); data->plotOn(plot,Binning(bins),Invisible()); } else data->plotOn(plot,Binning(bins)); TCanvas *canv = new TCanvas(); pdf->plotOn(plot); pdf->plotOn(plot,Components(*pdf1),LineColor(kRed),LineStyle(2)) ; pdf->plotOn(plot,Components(*pdf2),LineColor(kGreen),LineStyle(2)) ; //,RooFit::NormRange("fitdata_1,fitdata_2")); //pdf->paramOn(plot,RooFit::Layout(0.35,0.89,0.89),RooFit::Format("NEA",AutoPrecision(1))); //plot->getAttText()->SetTextSize(0.01); //plot->SetMaximum(plot->GetMaximum()*2); if (BLIND) plot->SetMinimum(0.0001); plot->SetTitle(""); plot->SetYTitle(Form("Events / %.2fGeV",float(mhHigh-mhLow)/float(bins))); //plot->GetYaxis()->SetLabelSize(0.05); plot->SetTitleSize(0.045, "Y"); plot->SetTitleOffset(1.,"Y"); //plot->GetXaxis()->SetLabelSize(0.15); //plot->GetYaxis()->SetLabelSize(0.15); plot->SetXTitle("m_{#gamma#gamma}(GeV)"); plot->SetTitleSize(0.15, "X"); plot->Draw(); TLatex *lat = new TLatex(); lat->SetNDC(); lat->SetTextFont(42); lat->DrawLatex(0.68,0.93,"19.7fb^{-1}(8TeV)"); lat->DrawLatex(0.12,0.85,"CMS Preliminary"); lat->DrawLatex(0.7,0.7,Form("Frac = %.3f",frac)); string nameTemp = name; int catNum = nameTemp.find("cat"); string catNameOLD = nameTemp.replace(0, catNum, ""); string catName = catNameOLD.replace(catNameOLD.length()-4, 4, ""); lat->DrawLatex(0.1,0.92, Form("%s", catName.c_str())); TLegend *leg = new TLegend(0.12,0.7,0.32,0.8); leg->SetFillColor(0); leg->SetLineColor(1); leg->AddEntry(data,"Data","lep"); leg->Draw("same"); canv->SaveAs(Form("%s.png",name.c_str())); canv->SaveAs(Form("%s.pdf",name.c_str())); delete canv; delete lat; }
void crossfeeds_nondiag(TString title, TString bkgfile, TString epsfile, TString txtfile, Double_t alpha_, Double_t mass_, Double_t n_, Double_t sigma_ ) { RooRealVar mbc("mbc", "m_{BC}", 1.83, 1.89, "GeV"); RooRealVar ebeam("ebeam", "Ebeam", 0., 100., "GeV"); RooRealVar chg("chg", "Charge", -2, 2); RooCategory passed("passed", "Event should be used for plot"); passed.defineType("yes", 1); passed.defineType("no", 0); RooRealVar arg_cutoff ("arg_cutoff", "Argus cutoff", 1.8865, 1.885, 1.8875,"GeV"); RooRealVar arg_slope ("arg_slope", "Argus slope", -13, -100, 40); RooRealVar mbc_float ("mbc_float", "Floating D mass", mass_, "GeV"); RooRealVar sigma ("sigma", "CB width", sigma_, "GeV"); RooRealVar alpha("alpha", "CB shape cutoff", alpha_); RooRealVar n("n", "CB tail parameter", n_); RooCBShape cb_float ("cb_float", "Floating Crystal Barrel", mbc, mbc_float, sigma, alpha, n); RooArgusBG argus("argus", "Argus BG", mbc, arg_cutoff, arg_slope); RooRealVar yld("yield", "D yield", 0, -30, 100000); RooRealVar bkg("bkg", "Background", 20, 0, 40000); // Build pdf RooAddPdf sumpdf_float("sumpdf_float", "Generic D sum pdf", RooArgList(cb_float, argus), RooArgList(yld, bkg)); RooDataSet* dset = RooDataSet::read(bkgfile, RooArgList(mbc, ebeam, passed), "", ""); RooPlot* xframe = mbc.frame(); RooDataSet* dset2 = dset->reduce("passed==1"); dset2->plotOn(xframe); // RooFitResult* rv = sumpdf_float.fitTo(*dset2, Extended(kTRUE), Save(kTRUE), // Hesse(kTRUE), Verbose(kTRUE)); RooFitResult* rv = sumpdf_float.fitTo(*dset2, "ermh"); sumpdf_float.paramOn(xframe, dset2); if ((yld.getVal() < 0) && (-yld.getVal()/bkg.getVal() > 0.5)){ yld.setVal(0); bkg.setVal(1); } sumpdf_float.plotOn(xframe); sumpdf_float.plotOn(xframe, Components(RooArgSet(argus)), LineColor(kRed), LineStyle(kDashed)); TCanvas* c1 = new TCanvas("c1","Canvas", 2); xframe->SetTitleOffset(2.2, "Y"); xframe->SetTitleOffset(1.1, "X"); xframe->SetTitle(title); c1->SetLeftMargin(0.17); xframe->Draw(); if ( rv && rv->covQual() != 3){ // fit has failed TText *txt = new TText(); txt->SetTextSize(.08); txt->SetTextAlign(22); txt->SetTextAngle(30); txt->DrawTextNDC(0.5, 0.5, "FAILED"); } c1->Update(); c1->Print(epsfile); c1->Clear(); FILE* table = fopen(txtfile.Data(), "w+"); fprintf(table, "Name\t|| Value\t|| Error\n"); // fprintf(table, "yldsigma\t| %.10f\t| \n", yld.getVal()/yld.getError()); fprintf(table, "entries\t| %.10f\t| \n", dset->numEntries()); fprintf(table, "yld\t| %.10f\t| %.10f\n", yld.getVal(), yld.getError()); // fprintf(table, "ratio\t| %.10f\t| \n", yld.getVal()/dset->numEntries()); // fprintf(table, "ratioerr\t| %.10f\t| \n", yld.getError()/dset->numEntries()); fclose(table); cout << "Saved output as: " << txtfile << endl; rv->Delete(); }
int main(){ RooRealVar zero("zero","",0,0,150); //input parameters for the distribution double alpha_double = 2.38; double beta_double = 0.092; double lambda_double = 2.21; double theta_double = 1.12; double c_frac = 0.5; //RooRealVar fsig("fsig","signal fraction",0.3) ; string epsname = "plots/gamma_pion20"; hit_info multi_shower("fullsim/example_pi20Gev.root"); //hit_info multi_shower("fullsim/example_ele_20GeV.root"); double beta_gflash_factor = 1.49; double theta_gflash_factor = 16.42; beta_double = beta_double/beta_gflash_factor; theta_double = theta_double/theta_gflash_factor; // --- Observable --- RooRealVar depth("depth","depth [cm]",0,800); depth.removeMax(); // set infinite range // --- Weight --- RooRealVar* weight = new RooRealVar("weight","1/E dE/dr", 0.0, 1.0); // --- Gamma pdf --- //if one of the Values is set to const you can not ask for it in RooFitModel, otherwise the program will crash //RooRealVar alpha("alpha","alpha",alpha_double,0.0,4); RooRealVar alpha("alpha","alpha",0.0,20.); //alpha.removeMax(); // set infinite range //RooRealVar beta("beta","beta",1./beta_double,0.0,100.); RooRealVar beta("beta","beta",0.1,.1,3.5); //beta.removeMax(); // set infinite range RooRealVar mu("mu","mu",0); // no ranges means variable is fixed in fit RooRealVar nu("nu","nu",0); // no ranges means variable is fixed in fit //RooRealVar lambda("lambda","lambda",lambda_double,0.0,6.); RooRealVar lambda("lambda","lambda",0.0,40.); //lambda.removeMax(); // set infinite range //RooRealVar theta("theta","theta",1./theta_double,0.0,100.) ; RooRealVar theta("theta","theta",1.,47) ; //theta.removeMax(); // set infinite range RooGamma gamma_one("gamma_one","gamma_one pdf",depth,alpha,beta,mu) ; RooGamma gamma_two("gamma_two","gamma_two pdf",depth,lambda,theta,nu) ; RooRealVar fsig("fsig","signal fraction",c_frac,0.0,1.); //RooRealVar fsig("fsig","signal fraction",c_frac); RooAddPdf model("model","model",RooArgList(gamma_two,gamma_one),fsig) ; RooDataSet mean("mean","mean",RooArgSet(depth,weight),"weight"); TH1F* mean_fithist = new TH1F("mean_fithist"," mean fit hist",50,0,150); TH1F* log_alpha1 = new TH1F("log_alpha1"," log(#alpha_{1})",20,-1,3); TH1F* log_beta1 = new TH1F("log_beta1"," log(#beta_{1})",20,-1,3); TH2F* log_corr1 = new TH2F("log_corr1"," correlation #alpha_{1} #beta_{1}",20,-1,3,20,-1,3); TH1F* log_alpha2 = new TH1F("log_alpha2"," log(#alpha_{2})",20,-1,3); TH1F* log_beta2 = new TH1F("log_beta2"," log(#beta_{2})",20,-1,3); TH2F* log_corr2 = new TH2F("log_corr2"," correlation #alpha_{2} #beta_{2}",20,-1,3,20,-1,3); TH2F* mean_hist = new TH2F("mean_hist"," mean hist",100,0,150,100.,0.,.0015); TCanvas * can = new TCanvas("can", "can", 600, 500); can->cd(); set_style(); //can->Print(epsname+"["); double c_tot =0; unsigned int n_part =100; for(unsigned int p = 0; p<n_part ; ++p){ TLegend * legend = new TLegend(0.5,0.65,.88,0.88); legend->SetTextFont(72); legend->SetTextSize(0.04); legend->SetFillColor(kWhite); legend->SetBorderSize(0); one_shower shower = multi_shower.all_shower.at(p); //DataSet I am looking at RooDataSet full_sim_data("full_sim_data","full_sim_data",RooArgSet(depth,weight),"weight"); TH1F* datahisto = new TH1F("datahist","datahist",15,0,120); double sumHCAL=0; double deltar =-1; for(unsigned int i = 0; i < shower.mytype.size(); ++i){ sumHCAL += shower.myenergy.at(i); double x_val = shower.myz.at(i); double y_val = shower.myy.at(i); double z_val = shower.myz.at(i); z_val = z_val - shower.interactPoint; double distance=-1; if(sqrt(x_val*x_val+y_val*y_val+z_val*z_val)/10 < 200) distance = sqrt(x_val*x_val+y_val*y_val+z_val*z_val)/10; if(deltar < distance) deltar = z_val; } deltar=deltar/shower.mytype.size(); c_tot += shower.ePi0first_energy/n_part; fsig.setVal(shower.ePi0first_energy); fsig.setRange(shower.ePi0first_energy-0.05 > 0 ? shower.ePi0first_energy-0.05: 0,shower.ePi0first_energy+0.05<1?shower.ePi0first_energy+0.05:1); //fsig.setRange(1-shower.ePi0first_energy-0.05 > 0 ? 1-shower.ePi0first_energy-0.05: 0,1-shower.ePi0first_energy+0.05<1 ? 1-shower.ePi0first_energy+0.05:1); for(unsigned int i = 0; i < shower.mytype.size(); ++i){ double x_val = shower.myx.at(i); double y_val = shower.myy.at(i); double z_val = shower.myz.at(i); // if(shower.mytype.at(i) !=2)continue; z_val = z_val - shower.interactPoint; //if(z_val<=0) continue; depth.setVal(sqrt(x_val*x_val+y_val*y_val+z_val*z_val)/10); //depth.setVal(z_val); //cout <<depth.getVal()<<endl; datahisto->Fill(depth.getVal(),shower.myenergy.at(i)/sumHCAL/deltar); mean_fithist->Fill(depth.getVal(),shower.myenergy.at(i)/sumHCAL/deltar/n_part); mean_hist->Fill(depth.getVal(),shower.myenergy.at(i)/sumHCAL/deltar); full_sim_data.add(depth,shower.myenergy.at(i)/sumHCAL/deltar,0); mean.add(depth,shower.myenergy.at(i)/sumHCAL/deltar,0); } RooDataHist roodatahist("roodatahist","roodatahist",depth,Import(*datahisto)) ; //model.fitTo(roodatahist, Strategy(2) ); model.fitTo(full_sim_data); RooDataHist* full_sim_binned = full_sim_data.binnedClone("full_sim_binned","full sim binned"); //prepare to plot fits RooPlot * depthFrame = depth.frame(0,120,100); depthFrame->SetTitle(""); depthFrame->SetTitleOffset(1.2,"Y"); depthFrame->SetLabelSize(0.02,"Y"); depthFrame->SetYTitle("1/E dE/dr"); //zero.plotOn(depthFrame,LineStyle(kDashed),LineColor(kBlack)); //full_sim_data.plotOn(depthFrame); roodatahist.plotOn(depthFrame); //full_sim_binned->plotOn(depthFrame); model.plotOn(depthFrame,Components(gamma_one),LineStyle(kDashed),LineColor(kGreen),Name("gamma_one")); model.plotOn(depthFrame,Components(gamma_two),LineStyle(kDashed),LineColor(kRed),Name("gamma_two")); model.plotOn(depthFrame,Name("model")); stringstream gamma_one_text; gamma_one_text.precision(3); gamma_one_text << "#Gamma_{1} ("<<alpha.getVal()<<","<<(1/beta.getVal()*beta_gflash_factor)<<")"<<endl; stringstream gamma_two_text; gamma_two_text.precision(3); gamma_two_text << "#Gamma_{2} (" <<lambda.getVal()<<","<<(1/theta.getVal()*theta_gflash_factor)<< ")"<<endl; stringstream gamma_text; gamma_text.precision(2); gamma_text << "#Gamma_{1/2} c=" <<fsig.getVal() <<"("<<shower.ePi0first_energy<<")"<<endl; stringstream chi2; chi2.precision(2); chi2 << "#chi^{2} prob. = " << TMath::Prob(depthFrame->chiSquare(),14) <<endl; legend->AddEntry(depthFrame->findObject("gamma_one"),gamma_one_text.str().c_str(),"L"); legend->AddEntry(depthFrame->findObject("gamma_two"),gamma_two_text.str().c_str(),"L"); legend->AddEntry(depthFrame->findObject("model"),gamma_text.str().c_str(),"L"); legend->AddEntry((TObject*)0, chi2.str().c_str(), ""); cout << "alpha, beta "<< alpha.getVal() << " " << 1/beta.getVal()*beta_gflash_factor << std::endl; cout << "lambda, theta "<<lambda.getVal() << " " << 1/theta.getVal()*theta_gflash_factor << std::endl; cout <<"c, chi2 "<< fsig.getVal() << " "<<depthFrame->chiSquare()<< std::endl; cout <<"starting , interacting Points "<<shower.startingPoint<<" "<<shower.interactPoint <<endl; cout<< "pi0first, pi0tot "<<shower.ePi0first_energy <<" "<<shower.ePi0tot_energy<<endl; /* log_alpha1->Fill(log10(alpha.getVal())); log_alpha2->Fill(log10(lambda.getVal())); //cout<<log(1/beta.getVal()*beta_gflash_factor)<<endl; log_beta1 ->Fill(log10(1/beta.getVal()*beta_gflash_factor)); log_beta2 ->Fill(log10(1/theta.getVal()*theta_gflash_factor)); log_corr1 ->Fill(log10(alpha.getVal()),log10(1/beta.getVal()*beta_gflash_factor)); log_corr2 ->Fill(log10(lambda.getVal()),log10(1/theta.getVal()*theta_gflash_factor)); */ if(fsig.getVal()>0.1)log_alpha1->Fill(log(alpha.getVal())); if(fsig.getVal()<0.9)log_alpha2->Fill(log(lambda.getVal())); //cout<<log(1/beta.getVal()*beta_gflash_factor)<<endl; if(fsig.getVal()>0.1)log_beta1 ->Fill(log(1/beta.getVal()*beta_gflash_factor)); if(fsig.getVal()<0.9)log_beta2 ->Fill(log(1/theta.getVal()*theta_gflash_factor)); if(fsig.getVal()>0.1)log_corr1 ->Fill(log(alpha.getVal()),log(1/beta.getVal()*beta_gflash_factor)); if(fsig.getVal()<0.9)log_corr2 ->Fill(log(lambda.getVal()),log(1/theta.getVal()*theta_gflash_factor)); //prepare to dump all the plots in the ps file // one data sample and its fit is drawn /* datahisto->Draw(); datahisto0->SetLineColor(kRed); datahisto0->Draw("same"); datahisto1->SetLineColor(kGreen); datahisto1->Draw("same"); datahisto2->SetLineColor(kBlue); datahisto2->Draw("same"); can->Print(epsname); */ //if(depthFrame->chiSquare()>5) continue; depthFrame->Draw("HIST p"); legend->Draw(); stringstream particle_number; particle_number.precision(1); particle_number << p <<endl; can->Print((epsname+"_"+particle_number.str()+".pdf").c_str()); } RooDataHist roomeandatahist("roomeandatahist","roomeandatahist",depth,Import(*mean_fithist)) ; fsig.setVal(c_tot); alpha.removeMax(); // set infinite range beta.removeMax(); // set infinite range lambda.removeMax(); // set infinite range theta.removeMax(); // set infinite range //model.fitTo(roomeandatahist); //model.fitTo(mean,SumW2Error(kTRUE)); TLegend * mean_legend = new TLegend(0.5,0.65,.9,0.9); mean_legend->SetTextFont(72); mean_legend->SetTextSize(0.04); mean_legend->SetFillColor(kWhite); mean_legend->SetBorderSize(0); stringstream mean_gamma_one_text; mean_gamma_one_text.precision(3); mean_gamma_one_text << "#Gamma_{1} ("<<alpha.getVal()<<","<<(1/beta.getVal()*beta_gflash_factor)<<")"<<endl; stringstream mean_gamma_two_text; mean_gamma_two_text.precision(3); mean_gamma_two_text << "#Gamma_{2} (" <<lambda.getVal()<<","<<(1/theta.getVal()*theta_gflash_factor)<< ")"<<endl; stringstream mean_gamma_text; mean_gamma_text.precision(2); mean_gamma_text << "#Gamma_{1/2} c=" <<fsig.getVal() <<"("<< c_tot<<")"<<endl; stringstream mean_chi2; mean_chi2.precision(2); //mean_chi2 << "#chi^{2} " <<depthFrame->chiSquare() <<endl; RooPlot * meanFrame = depth.frame(0,120,200); //meanFrame->SetMaximum(1); meanFrame->SetTitle("Mean Fit"); meanFrame->SetYTitle("1/E dE/dr"); model.plotOn(meanFrame,Components(gamma_one),LineStyle(kDashed),LineColor(kGreen),Name("gamma_one")); model.plotOn(meanFrame,Components(gamma_two),LineStyle(kDashed),LineColor(kRed),Name("gamma_two")); model.plotOn(meanFrame,Name("model")); //mean.plotOn(meanFrame); //roomeandatahist.plotOn(meanFrame); mean_legend->AddEntry(meanFrame->findObject("gamma_one"),mean_gamma_one_text.str().c_str(),"L"); mean_legend->AddEntry(meanFrame->findObject("gamma_two"),mean_gamma_two_text.str().c_str(),"L"); mean_legend->AddEntry(meanFrame->findObject("model"),mean_gamma_text.str().c_str(),"L"); meanFrame->Draw(); mean_legend->Draw(); //datahisto->Draw(); //can->Print(epsname); //mean_hist->Draw("box"); //can->Print(epsname); can->Print((epsname+"_mean.pdf").c_str()); log_alpha1->Draw(); can->Print((epsname+"_alpha1_log.pdf").c_str()); log_beta1->Draw(); can->Print((epsname+"_beta1_log.pdf").c_str()); log_corr1->Draw("colz"); can->Print((epsname+"corr1_log.pdf").c_str()); log_alpha2->Draw(); can->Print((epsname+"apha2_log.pdf").c_str()); log_beta2->Draw(); can->Print((epsname+"beta2_log.pdf").c_str()); log_corr2->Draw("colz"); can->Print((epsname+"corr2_log.pdf").c_str()); ///can->Print(epsname+"]"); return 0; }
void testChebychev() { TCanvas* cnv = new TCanvas("cnv","",800,600); Int_t xNbins = (Int_t)((xFullMax-xFullMin)/xBinSize); RooRealVar* x = new RooRealVar("x","x [units]",xFullMin,xFullMax); x->setBins(xNbins); x->setRange("range_x", xFullMin,xFullMax); x->setRange("range_left", xFullMin,xBlindMin); x->setRange("range_right", xBlindMax,xFullMax); x->setRange("range_blind", xBlindMin,xBlindMax); x->setRange("range_signal", xSignalmin,xSignalmax); TString fitrange = "range_left,range_right"; // "range_x" // RooRealVar* a0 = new RooRealVar("a0","a0", -1.42803e-01, -1.0, 1.0); // RooRealVar* a1 = new RooRealVar("a1","a1", +2.87161e-02, -1.0, 1.0); // RooRealVar* a2 = new RooRealVar("a2","a2", -1.45196e-03, -1.0, 1.0); // RooRealVar* a3 = new RooRealVar("a3","a3", -6.00993e-04, -1.0, 1.0); RooRealVar* a0 = new RooRealVar("a0","a0", -0.3497, -1.0, 1.0); RooRealVar* a1 = new RooRealVar("a1","a1", -0.1187, -1.0, 1.0); RooRealVar* a2 = new RooRealVar("a2","a2", -0.0885, -1.0, 1.0); RooRealVar* a3 = new RooRealVar("a3","a3", -0.0040, -1.0, 1.0); RooChebychev* pdfCheb = new RooChebychev("pdfCheb","pdfCheb",*x,RooArgSet(*a0,*a1,*a2,*a3)); RooAbsData* xData = pdfCheb->generate(*x,1000,Range(fitrange)); RooRealVar* b0 = new RooRealVar("b0","b0",1.,0.,100.); RooRealVar* b1 = new RooRealVar("b1","b1",1.,0.,100.); RooRealVar* b2 = new RooRealVar("b2","b2",1.,0.,100.); RooRealVar* b3 = new RooRealVar("b3","b3",1.,0.,100.); RooRealVar* b4 = new RooRealVar("b4","b4",1.,0.,100.); RooRealVar* b5 = new RooRealVar("b5","b5",1.,0.,100.); RooRealVar* b6 = new RooRealVar("b6","b6",1.,0.,100.); RooBernstein* pdfBern = new RooBernstein("pdfBern","pdfBern",*x,RooArgSet(*b0,*b1,*b2,*b3,*b4,*b5,*b6)); // RooChebychev* pdf = pdfCheb; RooBernstein* pdf = pdfBern; RooFitResult* fitresult = pdf->fitTo(*xData,Minos(kTRUE),Range(fitrange),Strategy(2),Save(kTRUE),Timer(kTRUE)); TString stat = gMinuit->fCstatu; cout << "Minuit: " << stat << endl; fitresult->Print("v"); RooPlot* xFrame = x->frame(Name("xFrame"),Title("Chebychev sideband fit test")); xData->plotOn(xFrame,Name("x"),MarkerSize(1),Binning(xNbins)); pdf->plotOn(xFrame,LineWidth(2),LineColor(kBlue),Range(fitrange),NormRange(fitrange)); pdf->plotOn(xFrame,LineWidth(2),LineColor(kRed),LineStyle(kDashed),Range("range_blind"),NormRange(fitrange)); pdf->paramOn(xFrame,Layout(0.62,0.88,0.4), Format("NEU", AutoPrecision(3))); xFrame->getAttText()->SetTextSize(0.03); cnv->SetLeftMargin(0.2); xFrame->SetTitleOffset(2,"Y"); xFrame->Draw(); cnv->SaveAs("testChebychev.pdf"); RooAbsReal* integralFull = pdf->createIntegral(*x,Range("range_x")); RooAbsReal* integralSR = pdf->createIntegral(*x,Range("range_signal")); RooAbsReal* integralSBleft = pdf->createIntegral(*x,Range("range_left")); RooAbsReal* integralSBright = pdf->createIntegral(*x,Range("range_right")); float nSB0 = integralSBleft->getVal()+integralSBright->getVal(); float nSR0 = integralSR->getVal(); float nAll = integralFull->getVal(); cout << "nAll=" << nAll << endl; cout << "nSB0=" << nSB0 << endl; cout << "nSR0=" << nSR0 << endl; }