void Data_analysis_gui::init_display_area() { QVBoxLayout * vbox = new QVBoxLayout(); display_box_->setLayout(vbox); /* display_box_->setOrientation( Qt::Vertical ); display_box_->setColumns( 3 ); */ QwtText plotname(""); plot_ = new QwtPlot( plotname, display_box_); plot_->axisScaleEngine(QwtPlot::xBottom)->setAttribute(QwtScaleEngine::Floating); vbox->addWidget(plot_); vbox->addSpacing(12); QPen pen(QColor(150,150,150)); pen.setStyle(Qt::DashLine); curve_id_ = new QwtPlotCurve("curve_id_"); curve_id_->attach(plot_); curve_id_->setAxis(QwtPlot::xBottom, QwtPlot::yLeft); curve_grid_ = new QwtPlotGrid(); curve_grid_->setPen(pen); curve_grid_->enableX(true); curve_grid_->enableY(true); curve_grid_->attach(plot_); // Use a light gray for the grid //plot_->setGridPen( QPen( QColor(150,150,150), 0, Qt::DotLine ) ); // configure the plot axis // enabled by default //plot_->setAxisOptions( QwtPlot::xBottom, QwtAutoScale::Floating ); QFont font = plot_->axisFont( QwtPlot::xBottom ); font.setPointSize( 7 ); plot_->setAxisFont( QwtPlot::xBottom, font ); plot_->setAxisFont( QwtPlot::yLeft, font ); font.setPointSize( 10 ); }
TCanvas* plotRatios_wFit(std::vector<TH1D*> numeratorHistograms, TH1D* denominatorHist, TString title="", TString xTitle="", TString yTitle="", TH1D* pt_uncertainty_band=0) { int numberOfNumeratorHists = numeratorHistograms.size(); if (numberOfNumeratorHists>5) { cout << "Too many histograms for numerator (currently only supports up to 5)" << endl; exit; } if (!denominatorHist) { cout << "denominatorHist provided does not exist" << endl; exit; } //************************************************* // Variables bool topPlotLogY = 0; // 0 = no log; 1= log bool showHists = 0; TString yTitle2 = "|C_{X}/C_{base}-1|"; // bottom plot y axis title std::vector<int> histColors; histColors.push_back(kBlue); // change colors as you like histColors.push_back(kRed); histColors.push_back(kGreen-1); histColors.push_back(8); histColors.push_back(33); // histColors.push_back(kGreen-1); std::vector<int> fillStyles; fillStyles.push_back(3305); fillStyles.push_back(3350); fillStyles.push_back(3004); fillStyles.push_back(3005); fillStyles.push_back(3006); int histDenominatorColor = kBlack; float defaultRatioYmin = 1.02; float defaultRatioYmax = 0.60; // END of Variables //************************************************* TCanvas *c1 = new TCanvas("c1", "c1",0,0,600,500); c1->Range(0,0,1,1); std::vector<TH1D*> hists; for (int i=0; i<numberOfNumeratorHists; i++) { hists.push_back( (TH1D*)numeratorHistograms[i] ); } TH1D* denominatorHistogram = (TH1D*)denominatorHist->Clone(); TF1 *systematic_fit = new TF1("systematic_fit","[0]+[1]*TMath::CosH(x)+[2]*TMath::CosH(x)",0,10); TF1 *systematic_fit_2 = new TF1("systematic_fit_2","[0]+[1]*TMath::CosH(x)+[2]*TMath::CosH(x)",0,10); TF1 *kFSR_fit = new TF1("kFSR_fit","(x<2.9)*([0]+[1]*cosh(x)/(1+cosh(x)*[2]))+(x>2.9)*[3]",0,10); //was used before... kFSR_fit->SetParameters(0.9,0.014,0.26,0.01); kFSR_fit->SetParName(0,"const"); kFSR_fit->SetParName(1,"par1"); kFSR_fit->SetParName(2,"par2"); kFSR_fit->SetParName(3,"const2"); TF1 *kFSR_fit_2 = new TF1("kFSR_fit_2","(x<2.9)*([0]+[1]*cosh(x)/(1+cosh(x)*[2]))+(x>=2.9)*[3]",0,10); //was used before... kFSR_fit_2->SetParameters(0.9,0.014,0.26,0.01); TF1 *errorfct_fit = new TF1("errorfct_fit","0.5*[2]*(TMath::Erf([0]*(x-[1]))+1)",0,10); TF1 *errorfct_fit_2 = new TF1("errorfct_fit_2","0.5*[2]*(TMath::Erf([0]*(x-[1]))+1)",0,10); TF1 *pol5_fit = new TF1("pol5_fit","pol5",0,10); TF1 *pol5_fit_2 = new TF1("pol5_fit_2","pol5",0,10); TF1 *NOFIT = new TF1("NOFIT","[0]",0,10); NOFIT->SetParameters(0.0,0.0); std::vector<TString> fit_functions_names_; TString fit_name; // Create ratio histograms std::vector<TH1D*> hist_over_denomHist; for (int i=0; i<numberOfNumeratorHists; i++) { hist_over_denomHist.push_back( (TH1D*)numeratorHistograms[i]->Clone() ); hist_over_denomHist[i]->GetTitle(); hist_over_denomHist[i]->Divide(denominatorHistogram); for(int bin_i = 1; bin_i <= hist_over_denomHist[i]->GetNbinsX(); bin_i++) { //HACK!!! IN ORDER TO GET REASONABLE (AND CONSERVATIVE) FITS hist_over_denomHist[i]->SetBinContent(bin_i,TMath::Abs(hist_over_denomHist[i]->GetBinContent(bin_i)-1)); } TString plotname(hist_over_denomHist[i]->GetName()); if(plotname.Contains("JER-syst")){ fit_functions_names_.push_back("kFSR_fit"); fit_name=fit_functions_names_.back(); } else if(plotname.Contains("cons-triggers")){ fit_functions_names_.push_back("systematic_fit"); fit_name=fit_functions_names_.back(); } else if(plotname.Contains("Radiation")){ //fit_functions_names_.push_back("pol5_fit"); fit_functions_names_.push_back("kFSR_fit"); // fit_functions_names_.push_back("errorfct_fit"); fit_name=fit_functions_names_.back(); } else if(plotname.Contains("Time")){ fit_functions_names_.push_back("NOFIT"); fit_name=fit_functions_names_.back(); } else if(plotname.Contains("MPF")){ fit_functions_names_.push_back("pol5_fit"); // fit_functions_names_.push_back("kFSR_fit"); // fit_functions_names_.push_back("errorfct_fit"); fit_name=fit_functions_names_.back(); } else if(plotname.Contains("RR")){ // fit_functions_names_.push_back("NOFIT"); // fit_functions_names_.push_back("pol5_fit"); fit_functions_names_.push_back("kFSR_fit"); // fit_functions_names_.push_back("errorfct_fit"); fit_name=fit_functions_names_.back(); } else{ fit_functions_names_.push_back("kFSR_fit"); // fit_functions_names_.push_back("systematic_fit"); fit_name=fit_functions_names_.back(); } if(fit_name!="NOFIT"){ hist_over_denomHist[i]->Fit(fit_name,"","same"); hist_over_denomHist[i]->Fit(fit_name+"_2","+","same"); // hist_over_denomHist[i]->GetFunction(fit_name)->SetFillStyle(fillStyles.at(i)); // hist_over_denomHist[i]->GetFunction(fit_name)->SetFillColor(histColors.at(i)); hist_over_denomHist[i]->GetFunction(fit_name)->SetLineColor(histColors.at(i)); hist_over_denomHist[i]->GetFunction(fit_name)->SetLineWidth(2); // hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetFillStyle(fillStyles.at(i)); // hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetFillColor(histColors.at(i)); hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetLineColor(histColors.at(i)); hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetLineWidth(2); if(fit_name=="systematic_fit"){ hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetParameter(0,-hist_over_denomHist[i]->GetFunction(fit_name+"_2")->GetParameter(0)); hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetParameter(1,-hist_over_denomHist[i]->GetFunction(fit_name+"_2")->GetParameter(1)); hist_over_denomHist[i]->GetFunction(fit_name+"_2")->SetParameter(2,-hist_over_denomHist[i]->GetFunction(fit_name+"_2")->GetParameter(2)); } } else{ hist_over_denomHist[i]->SetFillStyle(fillStyles.at(i)); hist_over_denomHist[i]->SetFillColor(histColors.at(i)); } } std::vector<TF1*> fit_functions_; cout << "works here.." << endl; for (int i=0; i<numberOfNumeratorHists; i++) { if(hist_over_denomHist[i]->GetFunction(fit_functions_names_.at(i))){ fit_functions_.push_back(hist_over_denomHist[i]->GetFunction(fit_functions_names_.at(i))); } else{ fit_functions_.push_back(NOFIT); } } cout << "works here.." << fit_functions_.size() <<endl; TH1D* abs_uncertainty_band = get_absolute_uncertainty_band(hist_over_denomHist[0],fit_functions_,hist_over_denomHist); cout << "works here.." << endl; // abs_uncertainty_band->SetFillStyle(3001); abs_uncertainty_band->SetFillColor(kGray); abs_uncertainty_band->SetMarkerStyle(1); // std::vector<TF1*> fits_hist_over_denomHist_; // for (int i=0; i<numberOfNumeratorHists; i++) { // fits_hist_over_denomHist_.push_back(new TF1("fa1","sin(x)/x",0,10)); // // // // // } //************************************************* // Bottom plot // TPad *c1_1 = new TPad("c1_1", "newpad",0.01,0.01,0.99,0.32); // c1_1->Draw(); // c1_1->cd(); // c1_1->SetTopMargin(0.01); // c1_1->SetBottomMargin(0.3); // c1_1->SetRightMargin(0.1); // c1_1->SetFillStyle(0); // /*if(showHists)*/hist_over_denomHist[0]->Draw("hist"); // else hist_over_denomHist[0]->GetFunction(fit_functions_names_.at(0))->Draw(); // drawUncertainty(0.0, 0.02, hist_over_denomHist[0]->GetXaxis()->GetXmin() , hist_over_denomHist[0]->GetXaxis()->GetXmax()); // drawUncertainty(0.0, 0.005, hist_over_denomHist[0]->GetXaxis()->GetXmin() , hist_over_denomHist[0]->GetXaxis()->GetXmax(),41); abs_uncertainty_band->Draw("same E3"); if(pt_uncertainty_band){ cout << "found uncertainty band..." << endl; pt_uncertainty_band->Draw("same E3"); } cout << "it works..." << endl; if(fit_functions_names_.at(0)=="NOFIT"){hist_over_denomHist[0]->Draw("same hist"); abs_uncertainty_band->Draw("same E3"); } else if(showHists)hist_over_denomHist[0]->Draw("same"); else hist_over_denomHist[0]->GetFunction(fit_functions_names_.at(0))->Draw("same"); cout << "it works..." << endl; hist_over_denomHist[0]->SetLineWidth(1); hist_over_denomHist[0]->SetLineColor(histColors[0]); hist_over_denomHist[0]->SetMarkerColor(histColors[0]); hist_over_denomHist[0]->SetMinimum(defaultRatioYmin); hist_over_denomHist[0]->SetMaximum(defaultRatioYmax); // hist_over_denomHist[0]->GetYaxis()->SetNdivisions(5); hist_over_denomHist[0]->GetYaxis()->SetRangeUser(0.0,0.15); hist_over_denomHist[0]->SetTitle(";"+xTitle+";"+yTitle2); // hist_over_denomHist[0]->GetXaxis()->SetTitleSize(0.14); // hist_over_denomHist[0]->GetXaxis()->SetLabelSize(0.14); // hist_over_denomHist[0]->GetYaxis()->SetLabelSize(0.11); // hist_over_denomHist[0]->GetYaxis()->SetTitleSize(0.14); // hist_over_denomHist[0]->GetYaxis()->SetTitleOffset(0.48); for (int i=1; i<numberOfNumeratorHists; i++) { hist_over_denomHist[i]->SetLineWidth(1); hist_over_denomHist[i]->SetLineColor(histColors[i]); hist_over_denomHist[i]->SetMarkerColor(histColors[i]); if(showHists)hist_over_denomHist[i]->Draw("same"); else if(fit_functions_names_.at(i)=="NOFIT")hist_over_denomHist[i]->Draw("same hist"); else hist_over_denomHist[i]->GetFunction(fit_functions_names_.at(i))->Draw("same"); } TLine *line_eta = new TLine(hist_over_denomHist[0]->GetXaxis()->GetXmin(),0.,hist_over_denomHist[0]->GetXaxis()->GetXmax(),0.); line_eta->SetLineStyle(2); line_eta->SetLineColor(1); line_eta->Draw(); cout << "it works..." << endl; TFile *outf = new TFile(GetDateDir()+"/"+((TString)"Systematic_fit_funcs_rel_to_"+denominatorHist->GetName())+".root","RECREATE"); cout << "it works...3" << endl; for(unsigned int i=0; i< fit_functions_names_.size();i++){ cout << "it works...3" << endl; if(fit_functions_names_.at(i)!="NOFIT"){ TF1* tempptr= hist_over_denomHist[i]->GetFunction(fit_functions_names_.at(i)); cout << "it works...5" << fit_functions_names_.at(i) << endl; tempptr->SetName((TString)"Fit_func_"+hist_over_denomHist[i]->GetName()); tempptr->Write(); } hist_over_denomHist[i]->GetYaxis()->SetRangeUser(0.0,0.05); hist_over_denomHist[i]->Write(); abs_uncertainty_band->SetName(abs_uncertainty_band->GetName()+(TString)"_"+hist_over_denomHist[i]->GetName()); } cout << "it works...4" << endl; abs_uncertainty_band->Write(); outf->Close(); return c1; }