int RampCorrellation_single(std::string file_name, TGraphErrors &graph, TGraphErrors &graph2, vector<double> &vec_errors) { TTree *t = new TTree(); const std::string file_path = "/home/jlab/github/MagCloak_Analysis/calibration/data-calib/DATA_MegaVIEW/"; // std::string file_name = "DataFile_2016-12-08_06-59-11.csv"; std::string file = file_path+file_name; t->ReadFile(file.c_str()); // t->Print(); TCanvas *c = new TCanvas(); t->Draw("TMath::Abs(B1/B2):time"); TGraph *gh = (TGraph*)c->GetListOfPrimitives()->FindObject("Graph"); double ratio_mean = gh->GetMean(2); double ratio_std = gh->GetRMS(2); t->Draw("Bnom:time"); TGraph *gh1 = (TGraph*)c->GetListOfPrimitives()->FindObject("Graph"); double nom_mean = gh1->GetMean(2); double nom_std = 0; // cout << "At " << nom_mean << " mT, B1/B2 is: " << ratio_mean << " +/- " << ratio_std << endl; c->Close(); int n = graph.GetN(); graph.SetPoint(n,nom_mean,ratio_mean); graph.SetPointError(n,nom_std,ratio_std); //------------------------------------------------------------------------------- TCanvas *c2 = new TCanvas(); t->Draw("B3:time"); TGraph *gh2 = (TGraph*)c2->GetListOfPrimitives()->FindObject("Graph"); double B3_mean = -1*(gh2->GetMean(2)); double B3_std = gh2->GetRMS(2); int n2 = graph2.GetN(); graph2.SetPoint(n2, nom_mean, B3_mean); graph2.SetPointError(n2, nom_std, B3_std); c2->Close(); if(nom_mean < 500) vec_errors.push_back(B3_std); return 0; }
void CalcQCDNormFactor() { //TFile *f = TFile::Open("results/Plotter_out_2016_05_29_22h19m32.root"); // 76X Silver JSON TFile *f = TFile::Open("results/Plotter_out_2016_06_21_15h27m59.root"); // 76X Golden JSON TCanvas *c = (TCanvas*)f->Get("NJet/PlotSamples_Pass5Cuts_PassHLT"); THStack *s = (THStack*)c->GetListOfPrimitives()->At(1); TH1D *data = (TH1D*)c->GetListOfPrimitives()->At(3); double MC_integral = 0; double QCD_count = 0; for (int i=s->GetHists()->GetEntries()-1; i>=0; --i) { TH1D* h = (TH1D*)s->GetHists()->At(i); if (i==s->GetHists()->GetEntries()-1) QCD_count = h->Integral(); std::cout<<h->GetName()<<" "<<h->Integral()<<std::endl; MC_integral += h->Integral(); } double data_QCD_estimate = data->Integral()- (MC_integral-QCD_count); double QCD_scale = data_QCD_estimate/QCD_count; std::cout<<"MC: "<<MC_integral<<std::endl; std::cout<<"Data: "<<data->Integral()<<std::endl; std::cout<<"MC (QCD only): "<<QCD_count<<std::endl; std::cout<<"Data (QCD only est): "<<data_QCD_estimate<<std::endl; std::cout<<"QCD Scale: "<<QCD_scale<<std::endl; TH1D* qcd = (TH1D*)s->GetHists()->At(s->GetHists()->GetEntries()-1); qcd->Scale(QCD_scale); c->Draw(); //TCanvas *c = (TCanvas*)f->Get("NJet/PlotSamples_Pass5Cuts_PassHLT_Ratio"); // //TH1D* ratio = (TH1D*)((TVirtualPad*)c->cd(2))->GetListOfPrimitives()->At(0); //TF1* fit = new TF1("fit","pol1", 400, 2000); //ratio->Fit("fit","RBQ0"); //fit->SetLineColor(2); //fit->SetLineWidth(1); //TF1* fit_up = (TF1*)fit->Clone("fit_up"); //TF1* fit_down = (TF1*)fit->Clone("fit_down"); //fit_up ->SetParameter(0,fit->GetParameter(0)+fit->GetParError(0)*1); //fit_down->SetParameter(0,fit->GetParameter(0)-fit->GetParError(0)*1); //fit_up ->SetParameter(1,fit->GetParameter(1)+fit->GetParError(1)*1); //fit_down->SetParameter(1,fit->GetParameter(1)-fit->GetParError(1)*1); //fit_up ->SetLineColor(4); fit_up ->Draw("SAME"); //fit_down->SetLineColor(4); fit_down->Draw("SAME"); //fit->Draw("SAME"); // //std::cout<<"Fit result:"<<std::endl; //std::cout<<"p0: "<<fit->GetParameter(0)<<" +- "<<fit->GetParError(0)*1<<std::endl; //std::cout<<"p1: "<<fit->GetParameter(1)<<" +- "<<fit->GetParError(1)*1<<std::endl; //f->Close(); }
TH1D* getSimplePlot(TString INPUTDIR_PREFIX, TString SCENARIO, TString dataMC, TString vartype, TString SCEN_TRIG, TString RR) { TString DENOM = "_Glb_pass_&_Tight2012_pass"; //"_&_Glb_pass_&_Tight2012_pass"; if (SCENARIO == "Glb_Tight2012") DENOM = ""; else if (SCENARIO == "Glb_Tight2012_IsolPFRelCombNoEGammaR03PU_"+SCEN_TRIG) DENOM = "_Glb_pass_&_IsolPFRelCombNoEGammaR03PU_pass_&_Tight2012_pass"; else if (SCENARIO == "Glb_Tight2012_IsolPFRelCombNoEGammaR03_"+SCEN_TRIG) DENOM = "_Glb_pass_&_IsolPFRelCombNoEGammaR03_pass_&_Tight2012_pass"; TString POSTFIX = ""; if (vartype == "vtx") POSTFIX = ""; //"_vtx"; else if (vartype == "run") POSTFIX = ""; //"_rrr"; else if (vartype == "rrr2") POSTFIX = "_rrr2"; else if (vartype == "rrr3") POSTFIX = "_rrr3"; if (dataMC == "datalike_mc") { RR = ""; } else { RR = "_"+RR; } TFile *thisf = new TFile(INPUTDIR_PREFIX+"TnP_2011_MuonID_item_"+dataMC+"_"+SCENARIO+POSTFIX+"_"+vartype+RR+".root"); cout << "HERE " << INPUTDIR_PREFIX+"TnP_2011_MuonID_item_"+dataMC+"_"+SCENARIO+POSTFIX+"_"+vartype+RR+".root" << endl; thisf->cd(); gDirectory->cd("tpTree/"+SCENARIO+"_"+vartype+"/fit_eff_plots"); cout << "tpTree/"+SCENARIO+"_"+vartype+"/fit_eff_plots" << endl; TCanvas* c = (TCanvas*)gDirectory->Get(getFolder(vartype)+DENOM); cout << getFolder(vartype)+DENOM << endl; c->GetListOfPrimitives(); RooHist* hpt = (RooHist*)c->GetPrimitive("hxy_fit_eff"); TH1D* test = rooHist_to_TH1D(hpt,vartype,SCENARIO); for (int ibin = 0; ibin < test->GetXaxis()->GetNbins();ibin++) { cout << "AFTER " << test->GetBinContent(ibin+1) << endl; } return rooHist_to_TH1D(hpt,vartype,SCENARIO); }
double AutoSetYRange(TCanvas& canv, double maxScale) { TList* list = canv.GetListOfPrimitives(); double maximum = 0; int firstHist = -1; // int isCanvasLogY = canv.GetLogy(); for (int iPrims = 0; iPrims <= list->LastIndex(); ++iPrims) { TH1* hist = dynamic_cast<TH1*>(list->At(iPrims)); if (hist) { //Remember histo to set maximum of, which is the first one drawn if (firstHist == -1) { firstHist = iPrims; } if (hist->GetMaximum() > maximum) { maximum = hist->GetMaximum(); } } } if (firstHist != -1) { dynamic_cast<TH1*>(list->At(firstHist))->SetMaximum(maximum * maxScale); return maximum * maxScale; } else { std::cout << __func__ << " No Histograms found" << std::endl; return -1; } }
//---------- Retrieve data histo ----------------- TH1F* GetData(TFile* fin, string region, string varname) { string cname = CHANNEL_NAME+string("/")+region+"/"+varname; TCanvas* c = (TCanvas*) fin->Get(cname.c_str()); TList* l = c->GetListOfPrimitives(); TPad* pad = (TPad*) l->At(0); string hname = "v:"+varname+"|r:"+region+string("|c:")+CHANNEL_NAME+string("|t:1DSumData"); TH1F* h = (TH1F*) pad->GetPrimitive(hname.c_str()); return (TH1F*) h->Clone(); }
TH1F* GetHisto(TFile* fin, string region, string process, string varname, float& norm, bool do_norm, float input_norm) { string cname = CHANNEL_NAME+string("/")+region+"/"+varname; TCanvas* c = (TCanvas*) fin->Get(cname.c_str()); string hname = "v:"+varname+"|p:"+process+"|r:"+region+string("|c:")+CHANNEL_NAME+string("|t:1DEntries"); TH1F* h = 0; if(VERBOSE>0){ cerr<<"cname :"<<cname<<endl; cerr<<"histo name: "<<hname<<endl; cerr<<"pointer: "<<c<<endl; } TList* l = c->GetListOfPrimitives(); TPad* pad = (TPad*) l->At(0); THStack* stack = (THStack*) pad->GetPrimitive(""); h = (TH1F*) stack->GetHists()->FindObject(hname.c_str()); if(do_norm) h->Scale(input_norm/h->Integral()); norm = h->Integral(); return (TH1F*) h->Clone(); }
OptRes Optimization(string var = "topness", string signal = "T2tt_850_100", string region = "baseline", string channel = "allChannels", string filename = "plots/plotsProducer/1DStack.root"){ OptRes res; //TFile* fplots = new TFile("plots/plotsProducer/1DStack.root","READ"); TFile* fplots = new TFile(filename.c_str(),"READ"); //string channel = "allChannels"; //string region = "baseline"; //string var = "topness"; //string var = "topness_m5"; //string signal = "T2tt_850_100"; //retrieve canvas string cname = channel+"/"+region+"/"+var; TCanvas* c = fplots->Get(cname.c_str()); //c->Draw(); //signal string splot_name = "v:"+var+"|p:"+signal+"|r:"+region+"|c:"+channel+"|t:1DEntries"; TH1F* h_sig = (TH1F*) c->GetPrimitive(splot_name.c_str()); //sig->Draw(); ////////////////////////////////////////////// // Search the Stack that contains all bkg ////////////////////////////////////////////// vector<TH1F*> h_bkgs; //c->GetListOfPrimitives()->Print(); TIter next(c->GetListOfPrimitives()); TObject* h; while ((h = (TH1F*) next())){ //obj->Draw(next.GetOption()); if(h->InheritsFrom("THStack")){ THStack* stack = (THStack*) h; for(int i=0;i<stack->GetStack()->GetEntries();i++){ TH1F* hist = (TH1F*) stack->GetStack()->At(i); //cout<<hist->IsA()->GetName()<<endl; //cout<<hist->GetName()<<" "<<hist->Integral()<<endl; //search tt_2l //if(string(hist->GetName()).find("W+jets")!=string::npos) continue; if(string(hist->GetName()).find("ttbar_2l")!=string::npos){ //cout<<"mean = "<<hist->GetMean()<<" rms = "<<hist->GetRMS()<<" kurtosis = "<<hist->GetKurtosis()<<" skewness = "<<hist->GetSkewness()<<endl; } //else continue; //conly save the last one because plots are cumulative !!! // that's cheat .... if(i==stack->GetStack()->GetEntries()-1) h_bkgs.push_back(hist); } //cout<<((THStack*)h)->GetStack()->GetEntries()<<endl; //TH1* h_bkg = ((TH1*)(h->GetStack()->Last())); } } //////////////////////////////////////////////// // Loop over all bins and compute eff/sig //////////////////////////////////////////////// res.h_eff_sig = (TH1F*) h_sig->Clone(); res.h_eff_bkg = (TH1F*) h_sig->Clone(); res.h_Zbi = (TH1F*) h_sig->Clone(); TH1F* h_ROC = new TH1F("h_ROC","ROC curve",10,0,1); //Compute the integral float integ_sig = res.h_eff_sig->Integral(0,res.h_eff_sig->GetNbinsX()+1); float integ_bkg = 0; for(unsigned ih=0;ih<h_bkgs.size();ih++){ integ_bkg+=h_bkgs[ih]->Integral(0,h_bkgs[ih]->GetNbinsX()+1); } /////////////////////// //-- efficiencoy for signal for(int i=1;i<res.h_eff_sig->GetNbinsX()+1;i++){ float eff = 0; if(integ_sig!=0) eff = res.h_eff_sig->Integral(i,res.h_eff_sig->GetNbinsX()+1)/integ_sig; res.h_eff_sig->SetBinContent(i,eff); res.h_eff_sig->SetBinError(i,0); } //-- efficiency for bkg for(int i=1;i<res.h_eff_sig->GetNbinsX()+1;i++){ float eff = 0; for(unsigned ih=0;ih<h_bkgs.size();ih++){ eff += h_bkgs[ih]->Integral(i,h_bkgs[ih]->GetNbinsX()+1); } if(integ_bkg!=0) eff /= integ_bkg; res.h_eff_bkg->SetBinContent(i,eff); res.h_eff_bkg->SetBinError(i,0); } //-- compute significance //vector<pair<float,float> > roc_v; float* roc_sig = new float[res.h_eff_sig->GetNbinsX()]; float* roc_bkg = new float[res.h_eff_sig->GetNbinsX()]; int imax = 0; for(int i=1;i<res.h_eff_sig->GetNbinsX()+1;i++){ float Ns = res.h_eff_sig->GetBinContent(i)*integ_sig; //float Ns = res.h_eff_sig->GetBinContent(i); //float Nb = res.h_eff_bkg->GetBinContent(i); float Nb = res.h_eff_bkg->GetBinContent(i)*integ_bkg; float signif = 0; if(Nb!=0) signif = Ns/sqrt(Nb); double zbi = Zbi(Ns, Nb); //res.h_Zbi->SetBinContent(i,signif); res.h_Zbi->SetBinContent(i,zbi); res.h_Zbi->SetBinError(i,0); //ROC curve //h_ROC->SetBinContent(h_ROC->FindBin(res.h_eff_sig->GetBinContent(i)),res.h_eff_bkg->GetBinContent(i)); //h_ROC->SetBinContent(h_ROC->FindBin(res.h_eff_bkg->GetBinContent(i)),res.h_eff_sig->GetBinContent(i)); //roc_v.push_back(pair<float,float>(res.h_eff_sig->GetBinContent(i),res.h_eff_bkg->GetBinContent(i)); roc_sig[imax] = res.h_eff_sig->GetBinContent(i); roc_bkg[imax] = 1-res.h_eff_bkg->GetBinContent(i); imax++; } res.gROC = new TGraph(imax,roc_sig,roc_bkg); res.h_Zbi->GetXaxis()->SetTitle(var.c_str()); res.h_Zbi->GetYaxis()->SetTitle("Zbi"); res.h_eff_bkg->SetTitle("Efficiency on background"); res.h_eff_bkg->GetXaxis()->SetTitle(var.c_str()); res.h_eff_bkg->GetYaxis()->SetTitle("#epsilon_{bkg}"); res.h_eff_sig->SetTitle("Efficiency on signal"); res.h_eff_sig->GetXaxis()->SetTitle(var.c_str()); res.h_eff_sig->GetYaxis()->SetTitle("#epsilon_{sig}"); res.gROC->SetTitle("ROC"); res.gROC->GetXaxis()->SetTitle("#epsilon_{signal}"); res.gROC->GetYaxis()->SetTitle("1-#epsilon_{bkg}"); res.gROC->SetLineWidth(2); res.cplots = new TCanvas(); res.cplots->Divide(2,2); res.h_eff_sig->GetYaxis()->SetRangeUser(0,1); res.cplots->cd(1); res.h_eff_sig->Draw(); res.h_eff_bkg->SetLineColor(kRed); res.cplots->cd(2); res.h_eff_bkg->Draw(""); res.cplots->cd(3); res.h_Zbi->Draw(); res.cplots->cd(4); //h_ROC->Draw(); res.gROC->Draw("ACP"); int mbin = res.h_Zbi->GetMaximumBin(); float maxZbi = -9999; for(int i=1;i<res.h_Zbi->GetNbinsX();i++){ if(res.h_Zbi->GetBinContent(i)>maxZbi && res.h_eff_sig->GetBinContent(i)>0.1){ maxZbi = res.h_Zbi->GetBinContent(i); mbin = i; } } cout<<"@max - Zbi = "<<res.h_Zbi->GetMaximum()<<" cut = "<<res.h_Zbi->GetBinLowEdge(mbin)<<" effs = "<<res.h_eff_sig->GetBinContent(mbin)<<" effb = "<<res.h_eff_bkg->GetBinContent(mbin)<<endl; cout<<"Ns = "<<res.h_eff_sig->GetBinContent(mbin)*integ_sig<<" Nb = "<<res.h_eff_bkg->GetBinContent(mbin)*integ_bkg<<endl; cout<<"ROC-integral: "<<res.gROC->Integral()<<endl; //looking for a bin with eff = XXX int mbin2 = 0; int mbin7 = 0; float eff_ref = 0.75; float d_eff_closest = 100; for(int i=1;i<res.h_eff_sig->GetNbinsX();i++){ if(res.h_eff_sig->GetBinLowEdge(i) == 7) mbin7 = i; float eff = res.h_eff_sig->GetBinContent(i); if(fabs(eff-eff_ref)<d_eff_closest){ d_eff_closest = fabs(eff-eff_ref); //cout<<eff<<" "<<d_eff_closest<<endl; mbin2 = i; } } cout<<"ref - Zbi = "<<res.h_Zbi->GetBinContent(mbin2)<<" cut = "<<res.h_Zbi->GetBinLowEdge(mbin2)<<" effs = "<<res.h_eff_sig->GetBinContent(mbin2)<<" effb = "<<res.h_eff_bkg->GetBinContent(mbin2)<<endl; cout<<"Ns = "<<res.h_eff_sig->GetBinContent(mbin2)*integ_sig<<" Nb = "<<res.h_eff_bkg->GetBinContent(mbin2)*integ_bkg<<endl; //cout<<"cut@7 - Zbi = "<<res.h_Zbi->GetBinContent(mbin7)<<" cut = "<<res.h_Zbi->GetBinLowEdge(mbin7)<<" effs = "<<res.h_eff_sig->GetBinContent(mbin7)<<" effb = "<<res.h_eff_bkg->GetBinContent(mbin7)<<endl; //cout<<"Ns = "<<res.h_eff_sig->GetBinContent(mbin7)*integ_sig<<" Nb = "<<res.h_eff_bkg->GetBinContent(mbin7)*integ_bkg<<endl; //cout<<"Ns_tot = "<<integ_sig<<" Nb_tot = "<<integ_bkg<<endl; /* THStack* stack = c->GetPrimitive(""); stack->Draw(); cout<<stack<<endl; //TH1* h_bkg = stack->GetHistogram(); //cout<<h_bkg<<endl; G//h_bkg->Draw(); TH1* h_bkg = ((TH1*)(stack->GetStack()->Last())); h_bkg->Draw(); cout<<h_bkg->GetNbinsX()<<endl; */ /* //Compute eff TH1* h_eff_bkg = (TH1*) h_bkg->Clone(""); cout<<h_eff_bkg->GetNbinsX()<<endl; for(int i=1;i<h_eff_bkg->GetNbinsX();i++){ float num = h_bkg->Integral(i,h_bkg->GetNbinsX()+1); float den = h_bkg->Integral(0,h_bkg->GetNbinsX()+1); float eff = 0; if(den!=0) eff== num/den; h_eff_bkg->SetBinContent(i,eff); } h_eff_bkg->Draw(); cout<<"max = "<<stack->GetHistogram()->GetMaximum()<<endl; cout<<c->GetPrimitive("::THStack")<<endl; cout<<h_bkg<<endl; */ return res; }
void Plot_searchBin_full_ICHEP_wQCD(string option="", int pull=0){ // string option="QCD" // Use option="QCD" to produce plots in QCD binning char tempname[200]; // Open root file sprintf(tempname,"LLPrediction_QCD.root"); // true: do closure test (MC prediction vs MC truth) // false: do data driven prediction and compare to MC truth bool doDataVsMC = false; // Add systematics in quadrature to stat. uncertainty on prediction // Non-closure systematic not included yet! bool showSystematics = false; bool doClosurewoIsoTrackVeto = false; /////////////////////////////////////////////////////////////////////////////////////////// ////Some cosmetic work for official documents. // // Set basic style // setTDRStyle(); gStyle->SetPalette(1) ; // for better color output // // Canvas size int W = 1200; int H = 740; int H_ref = 740; int W_ref = 800; float T = 0.10*H_ref; float B = 0.06*H_ref; float L = 0.16*W_ref; float R = 0.04*W_ref; // // Various vertical line coordinates float ymax_top = 40000.; float ymin_top = 0.015; float ymax2_top = 1000.; float ymax3_top = 200.; float ymax4_top = 30.; float ymax5_top = 5.; float ymax_bottom = 1.99; float ymin_bottom = 0.01; float ymax2_bottom = 2.15; float ymax3_bottom = 2.15; float ymax4_bottom = 2.15; // // Luminosity information for scaling double lumi = 7.6; // normaliza to this lumi (fb-1) double lumi_ref = 7.6; // normaliza to 3 (fb-1) /////////////////////////////////////////////////////////////////////////////////////////// // // More specific style set, opening input files etc gStyle->SetOptStat(0); ///to avoid the stat. on the plots //gStyle->SetErrorX(0); char xtitlename[200]; char ytitlename[200]; TFile * LLFile = new TFile(tempname,"R"); printf("Opened %s\n",tempname); // // Define legend // Float_t legendX1 = .655; //.50; Float_t legendX2 = .955; //.70; Float_t legendY1 = .53; //.65; Float_t legendY2 = .78; TLegend* catLeg1 = new TLegend(legendX1,legendY1,legendX2,legendY2); //catLeg1->SetTextSize(0.060); catLeg1->SetTextSize(0.044); catLeg1->SetTextFont(42); catLeg1->SetFillColor(0); catLeg1->SetLineColor(1); catLeg1->SetBorderSize(1); // // Define canvas // TCanvas *canvas = new TCanvas("canvas","canvas",10,10,W,H); canvas->SetFillColor(0); canvas->SetBorderMode(0); canvas->SetFrameFillStyle(0); canvas->SetFrameBorderMode(0); canvas->SetLeftMargin( L/W ); canvas->SetRightMargin( R/W ); canvas->SetTopMargin( T/H ); canvas->SetBottomMargin( B/H ); canvas->SetTickx(0); canvas->SetTicky(0); canvas->Divide(1, 2); // // Define pads // TPad* canvas_up = (TPad*) canvas->GetListOfPrimitives()->FindObject("canvas_1"); TPad* canvas_dw = (TPad*) canvas->GetListOfPrimitives()->FindObject("canvas_2"); // // define the size double up_height = 0.8; // please tune so that the upper figures size will meet your requirement double dw_correction = 1.30; // please tune so that the smaller canvas size will work in your environment double font_size_dw = 0.1; // please tune the font size parameter for bottom figure double dw_height = (1. - up_height) * dw_correction; double dw_height_offset = 0.04; // KH, added to put the bottom one closer to the top panel // // set pad size canvas_up->SetPad(0., 1 - up_height, 1., 1.00); canvas_dw->SetPad(0., 0., 1., dw_height+dw_height_offset); // canvas_up->SetFrameFillColor(0); canvas_up->SetFillColor(0); canvas_up->SetTopMargin(0.12); canvas_up->SetLeftMargin(0.1); // canvas_dw->SetFillColor(0); canvas_dw->SetFrameFillColor(0); canvas_dw->SetBottomMargin(0.35); canvas_dw->SetTopMargin(0); canvas_dw->SetLeftMargin(0.1); // // draw top figure canvas_up->cd(); TH1D * GenHist, * EstHist,* thist; TH1D * GenHistTemp, * EstHistTemp; TH1D * GenHistD, * EstHistD; TH1D * GenHistDTemp, * EstHistDTemp; TH1D * EstSystematics; TH1D * histTemplate; double HT_x_max=2500.; double HT_x_min=400.; double MHT_x_max=1000.; double NJet_x_max=15.; double NBtag_x_max=4.; double search_x_max=208.-0.5; if(option.find("QCD")!=string::npos)search_x_max=208.-0.5; double search_x_min=1.-0.5; TDirectory *dPre = 0; TDirectory *dExp = (TDirectory*)LLFile->Get("Expectation"); if(doDataVsMC){ dPre = (TDirectory*)LLFile->Get("Prediction_data"); }else{ dPre = (TDirectory*)LLFile->Get("Prediction_MC"); } if(doDataVsMC){ EstHistTemp=(TH1D*) dPre->Get("totalPred_LL")->Clone(); EstHistDTemp=(TH1D*) dPre->Get("totalPred_LL")->Clone(); }else{ if(doClosurewoIsoTrackVeto){ EstHistTemp=(TH1D*) dPre->Get("totalPred_woIsoTrack_LL_MC")->Clone(); EstHistDTemp=(TH1D*) dPre->Get("totalPred_woIsoTrack_LL_MC")->Clone(); }else{ EstHistTemp=(TH1D*) dPre->Get("totalPred_LL_MC")->Clone(); EstHistDTemp=(TH1D*) dPre->Get("totalPred_LL_MC")->Clone(); } } if(doClosurewoIsoTrackVeto){ GenHistTemp=(TH1D*) dExp->Get("totalExp_woIsoTrack_LL")->Clone(); GenHistDTemp=(TH1D*) dExp->Get("totalExp_woIsoTrack_LL")->Clone();; }else{ GenHistTemp=(TH1D*) dExp->Get("totalExp_LL")->Clone(); GenHistDTemp=(TH1D*) dExp->Get("totalExp_LL")->Clone(); } if(showSystematics){ TDirectory *dSys = (TDirectory*)LLFile->Get("AdditionalContent"); if(doDataVsMC){ EstSystematics=(TH1D*) dSys->Get("totalPropSysUp_LL")->Clone(); }else{ EstSystematics=(TH1D*) dSys->Get("totalPropSysUp_LL_MC")->Clone(); } } if(EstHistTemp->GetNbinsX() != GenHistTemp->GetNbinsX()) std::cout<<"NbinsX of Expectation and Prediction don't agree!"<<std::endl; EstHist = new TH1D("Exp", "Exp", EstHistTemp->GetNbinsX(), 0.5, EstHistTemp->GetNbinsX()+0.5); EstHistD = new TH1D("ExpD", "ExpD", EstHistDTemp->GetNbinsX(), 0.5, EstHistDTemp->GetNbinsX()+0.5); GenHist = new TH1D("Pred", "Pred", GenHistTemp->GetNbinsX(), 0.5, GenHistTemp->GetNbinsX()+0.5); GenHistD = new TH1D("PredD", "PredD", GenHistDTemp->GetNbinsX(), 0.5, GenHistDTemp->GetNbinsX()+0.5); for(int i = 0; i <= EstHistTemp->GetNbinsX()+1; i++){ EstHist->SetBinContent(i, EstHistTemp->GetBinContent(i)); EstHistD->SetBinContent(i, EstHistDTemp->GetBinContent(i)); if(showSystematics){ EstHist->SetBinError(i, std::sqrt(EstHistTemp->GetBinError(i)*EstHistTemp->GetBinError(i)+EstSystematics->GetBinContent(i)*EstSystematics->GetBinContent(i)*EstHistTemp->GetBinError(i)*EstHistTemp->GetBinError(i))); EstHistD->SetBinError(i, std::sqrt(EstHistDTemp->GetBinError(i)*EstHistDTemp->GetBinError(i)+EstSystematics->GetBinContent(i)*EstSystematics->GetBinContent(i)*EstHistDTemp->GetBinError(i)*EstHistDTemp->GetBinError(i))); }else{ EstHist->SetBinError(i, EstHistTemp->GetBinError(i)); EstHistD->SetBinError(i, EstHistDTemp->GetBinError(i)); } GenHist->SetBinContent(i, GenHistTemp->GetBinContent(i)); GenHist->SetBinError(i, GenHistTemp->GetBinError(i)); GenHistD->SetBinContent(i, GenHistDTemp->GetBinContent(i)); GenHistD->SetBinError(i, GenHistDTemp->GetBinError(i)); } GenHist->SetLineColor(4); EstHist->SetLineColor(4); //GenHist->GetXaxis()->SetLabelFont(42); //GenHist->GetXaxis()->SetLabelOffset(0.007); //GenHist->GetXaxis()->SetLabelSize(0.04); //GenHist->GetXaxis()->SetTitleSize(0.05); //GenHist->GetXaxis()->SetTitleOffset(0.9); //GenHist->GetXaxis()->SetTitleOffset(0.5); //GenHist->GetXaxis()->SetTitleFont(42); //GenHist->GetYaxis()->SetLabelFont(42); //GenHist->GetYaxis()->SetLabelOffset(0.007); //GenHist->GetYaxis()->SetLabelSize(0.04); GenHist->GetYaxis()->SetLabelSize(0.045*1.15); GenHist->GetYaxis()->SetTitleSize(0.06*1.15); GenHist->GetYaxis()->SetTitleOffset(0.6); GenHist->GetYaxis()->SetTitleFont(42); //EstHist->GetXaxis()->SetLabelFont(42); //EstHist->GetXaxis()->SetLabelOffset(0.007); //EstHist->GetXaxis()->SetLabelSize(0.04); //EstHist->GetXaxis()->SetTitleSize(0.05); //EstHist->GetXaxis()->SetTitleOffset(0.9); //EstHist->GetXaxis()->SetTitleFont(42); //EstHist->GetYaxis()->SetLabelFont(42); //EstHist->GetYaxis()->SetLabelOffset(0.007); //EstHist->GetYaxis()->SetLabelSize(0.04); //EstHist->GetYaxis()->SetTitleSize(0.08); //EstHist->GetYaxis()->SetTitleOffset(2.0); //EstHist->GetYaxis()->SetTitleFont(42); sprintf(xtitlename,"Search region bin number"); sprintf(ytitlename,"Events"); gPad->SetLogy(); GenHist->SetMaximum(ymax_top); GenHist->SetMinimum(ymin_top); GenHist->GetXaxis()->SetRangeUser(search_x_min,search_x_max); //GenHist->GetYaxis()->SetTickLength(0.015); //GenHist->GetXaxis()->SetTickLength(0.02); //gPad->SetGridx(1); TExec *ex1 = new TExec("ex1","gStyle->SetErrorX(0);"); TExec *ex2 = new TExec("ex2","gStyle->SetErrorX(0.5);"); GenHist->SetTitle(""); GenHist->SetMarkerStyle(20); GenHist->SetMarkerSize(1.2); GenHist->SetLineColor(1); GenHist->GetXaxis()->SetTitle(xtitlename); GenHist->GetYaxis()->SetTitle(ytitlename); GenHist->Scale(lumi/lumi_ref); EstHist->Scale(lumi/lumi_ref); TH1D * GenHist_Normalize = static_cast<TH1D*>(GenHist->Clone("GenHist_Normalize")); GenHist_Normalize->SetMaximum(ymax_top); GenHist_Normalize->SetMinimum(ymin_top); ex1->Draw(); //GenHist_Normalize->GetListOfFunctions()->Add(ex1); GenHist_Normalize->DrawCopy("e"); EstHist->SetFillStyle(3144); EstHist->SetFillColor(kRed-10); EstHist->SetMarkerStyle(20); EstHist->SetMarkerSize(0.0001); TH1D * EstHist_Normalize = static_cast<TH1D*>(EstHist->Clone("EstHist_Normalize")); ex2->Draw(); //EstHist_Normalize->GetListOfFunctions()->Add(ex2); EstHist_Normalize->DrawCopy("e2same"); //EstHist_Normalize->DrawCopy("esame"); TH1D *EstHist_Normalize_Clone = (TH1D*)EstHist_Normalize->Clone(); for(int i=1; i<208; i++) { EstHist_Normalize_Clone->SetBinError(i,0); } EstHist_Normalize_Clone->SetFillColor(kWhite); EstHist_Normalize_Clone->Draw("esame"); GenHist->Print("all"); EstHist->Print("all"); // // Re-draw to have "expectation" on top of "prediction" ex1->Draw(); GenHist_Normalize->DrawCopy("esame"); // TString line = ""; sprintf(tempname,"%8.1f",lumi); line+=tempname; line+=" fb^{-1} (13 TeV)"; int iPeriod = 0; // 1=7TeV, 2=8TeV, 3=7+8TeV, 7=7+8+13TeV, 0=free form (uses lumi_sqrtS) int iPos=0; writeExtraText = true; if(doDataVsMC) extraText = " Preliminary"; else extraText = " Simulation"; //float extraTextFont = 52; // default is helvetica-italics // text sizes and text offsets with respect to the top frame // in unit of the top margin size //lumiTextSize = 0.5; //float lumiTextOffset = 0.2; //cmsTextSize = 0.65; //float cmsTextOffset = 0.1; // only used in outOfFrame version //relPosX = 0.045; //relPosY = 0.035; //relExtraDY = 1.2; // ratio of "CMS" and extra text size //float extraOverCmsTextSize = 0.76; //TString lumi_13TeV = "20.1 fb^{-1}"; //TString lumi_8TeV = "19.7 fb^{-1}"; //TString lumi_7TeV = "5.1 fb^{-1}"; TString lumi_sqrtS = line; // if(option.find("QCD")==string::npos ){ //----------------------------------------------------------- // Putting lines and labels explaining search region definitions //----------------------------------------------------------- //TString CMSlabel = ""; //cmsText = "#bf{CMS} #it{Simulation}"; //CMSlabel += "#splitline{#bf{CMS}}{#scale[0.6]{#it{Simulation}}}"; /* double x0 = gStyle->GetPadLeftMargin(); double x1 = 1.-gStyle->GetPadRightMargin(); double y0 = 1.005-gStyle->GetPadTopMargin(); double y1 = 0.96; TPaveText *Lumitxt = new TPaveText(x0,y0,x1,y1,"NDC"); Lumitxt->SetBorderSize(0); Lumitxt->SetFillColor(0); Lumitxt->SetTextFont(42); Lumitxt->SetTextAlign(31); Lumitxt->SetTextSize(1.2*gStyle->GetPadTopMargin()); Lumitxt->SetMargin(0.); Lumitxt->AddText(line); //Lumitxt->Draw("same"); x0 = gStyle->GetPadLeftMargin()+0.03; x1 = gStyle->GetPadLeftMargin()+0.13; y0 = 0.905-gStyle->GetPadTopMargin(); y1 = 0.88; TPaveText *CMStxt = new TPaveText(x0,y0,x1,y1,"NDC"); CMStxt->SetBorderSize(0); CMStxt->SetFillColor(0); CMStxt->SetTextFont(42); CMStxt->SetTextAlign(11); CMStxt->SetTextSize(1.2*gStyle->GetPadTopMargin()); CMStxt->SetMargin(0.); CMStxt->AddText(CMSlabel); //CMStxt->Draw("same"); */ // Njet separation lines TLine *tl_njet = new TLine(); tl_njet->SetLineStyle(2); tl_njet->DrawLine(53.-0.5,ymin_top,53.-0.5,ymax_top); tl_njet->DrawLine(105.-0.5,ymin_top,105.-0.5,ymax_top); tl_njet->DrawLine(157.-0.5,ymin_top,157.-0.5,ymax_top); // Njet labels TLatex * ttext_njet = new TLatex(); ttext_njet->SetTextFont(42); ttext_njet->SetTextSize(0.04); ttext_njet->SetTextAlign(22); ttext_njet->DrawLatex(26.-0.5 , ymax_top/4. , "3 #leq N_{#scale[0.2]{ }jet} #leq 4"); ttext_njet->DrawLatex(78.-0.5 , ymax_top/4. , "5 #leq N_{#scale[0.2]{ }jet} #leq 6"); ttext_njet->DrawLatex(130.-0.5 , ymax_top/4. , "7 #leq N_{#scale[0.2]{ }jet} #leq 8"); ttext_njet->DrawLatex(182.-0.5 , ymax_top/4. , "N_{#scale[0.2]{ }jet} #geq 9"); // Nb separation lines TLine *tl_nb = new TLine(); tl_nb->SetLineStyle(3); tl_nb->DrawLine(14.-0.5,ymin_top,14.-0.5,ymax2_top); tl_nb->DrawLine(27.-0.5,ymin_top,27.-0.5,ymax2_top); tl_nb->DrawLine(40.-0.5,ymin_top,40.-0.5,ymax2_top); tl_nb->DrawLine(53.-0.5,ymin_top,53.-0.5,ymax2_top); tl_nb->DrawLine(66.-0.5,ymin_top,66.-0.5,ymax3_top); tl_nb->DrawLine(79.-0.5,ymin_top,79.-0.5,ymax3_top); tl_nb->DrawLine(92.-0.5,ymin_top,92.-0.5,ymax3_top); tl_nb->DrawLine(105.-0.5,ymin_top,105.-0.5,ymax3_top); tl_nb->DrawLine(118.-0.5,ymin_top,118.-0.5,ymax4_top); tl_nb->DrawLine(131.-0.5,ymin_top,131.-0.5,ymax4_top); tl_nb->DrawLine(144.-0.5,ymin_top,144.-0.5,ymax4_top); tl_nb->DrawLine(157.-0.5,ymin_top,157.-0.5,ymax4_top); tl_nb->DrawLine(170.-0.5,ymin_top,170.-0.5,ymax5_top); tl_nb->DrawLine(183.-0.5,ymin_top,183.-0.5,ymax5_top); tl_nb->DrawLine(196.-0.5,ymin_top,196.-0.5,ymax5_top); // Nb labels TLatex * ttext_nb = new TLatex(); ttext_nb->SetTextFont(42); ttext_nb->SetTextSize(0.04); ttext_nb->SetTextAlign(22); ttext_nb->DrawLatex(9.-0.5 , ymax_top/12. , "N_{#scale[0.2]{ }b-jet}"); ttext_nb->DrawLatex(8.-0.5 , ymax_top/40. , "0"); ttext_nb->DrawLatex(20.-0.5 , ymax_top/40. , "1"); ttext_nb->DrawLatex(33.-0.5 , ymax_top/40. , "2"); ttext_nb->DrawLatex(46.-0.5 , ymax_top/40. , "#geq 3"); // } else { //----------------------------------------------------------- // Putting lines and labels explaining search region definitions //----------------------------------------------------------- // Njet separation lines TLine *tl_njet = new TLine(); tl_njet->SetLineStyle(2); tl_njet->DrawLine( 45.,ymin_top, 45.,ymax_top); tl_njet->DrawLine( 89.,ymin_top, 89.,ymax_top); tl_njet->DrawLine(133.,ymin_top,133.,ymax_top); tl_njet->DrawLine(177.,ymin_top,177.,ymax_top); // Njet labels TLatex * ttext_njet = new TLatex(); ttext_njet->SetTextFont(42); ttext_njet->SetTextSize(0.04); ttext_njet->SetTextAlign(22); ttext_njet->DrawLatex(23. , ymax_top/4. , "N_{jets} = 4"); ttext_njet->DrawLatex(67. , ymax_top/4. , "N_{jets} = 5"); ttext_njet->DrawLatex(111., ymax_top/4. , "N_{jets} = 6"); ttext_njet->DrawLatex(155., ymax_top/4. , "7 #leq N_{jets} #leq 8"); ttext_njet->DrawLatex(199., ymax_top/4. , "N_{jets} #geq 9"); // Nb separation lines TLine *tl_nb = new TLine(); tl_nb->SetLineStyle(3); tl_nb->DrawLine(12.,ymin_top,12.,ymax2_top); tl_nb->DrawLine(23.,ymin_top,23.,ymax2_top); tl_nb->DrawLine(34.,ymin_top,34.,ymax2_top); tl_nb->DrawLine(56.,ymin_top,56.,ymax2_top); tl_nb->DrawLine(67.,ymin_top,67.,ymax2_top); tl_nb->DrawLine(78.,ymin_top,78.,ymax2_top); tl_nb->DrawLine(100.,ymin_top,100.,ymax2_top); tl_nb->DrawLine(111.,ymin_top,111.,ymax2_top); tl_nb->DrawLine(122.,ymin_top,122.,ymax2_top); tl_nb->DrawLine(144.,ymin_top,144.,ymax3_top); tl_nb->DrawLine(155.,ymin_top,155.,ymax3_top); tl_nb->DrawLine(166.,ymin_top,166.,ymax3_top); tl_nb->DrawLine(188.,ymin_top,188.,ymax4_top); tl_nb->DrawLine(199.,ymin_top,199.,ymax4_top); tl_nb->DrawLine(210.,ymin_top,210.,ymax4_top); // Nb labels TLatex * ttext_nb = new TLatex(); ttext_nb->SetTextFont(42); ttext_nb->SetTextSize(0.04); ttext_nb->SetTextAlign(22); ttext_nb->SetTextAngle(90); ttext_nb->DrawLatex( 6. , ymax_top/50. , "N_{b} = 0"); ttext_nb->DrawLatex(17. , ymax_top/50. , "N_{b} = 1"); ttext_nb->DrawLatex(28. , ymax_top/50. , "N_{b} = 2"); ttext_nb->DrawLatex(39. , ymax_top/50. , "N_{b} #geq 3"); TText * ttext = new TLatex(160. , ymax_top/50. , "Normalized to 10 fb^{-1}"); ttext->SetTextFont(42); ttext->SetTextSize(0.045); ttext->SetTextAlign(22); ttext->Draw(); } // Legend & texts sprintf(tempname,"Lost-lepton background"); catLeg1->SetHeader(tempname); //sprintf(tempname,"#tau_{hadronic} BG expectation (MC truth)"); sprintf(tempname,"Direct from simulation"); catLeg1->AddEntry(GenHist,tempname,"p"); //sprintf(tempname,"Prediction from MC"); if(doDataVsMC) sprintf(tempname,"Prediction from data"); else sprintf(tempname,"Treat simulation like data"); catLeg1->AddEntry(EstHist,tempname); catLeg1->Draw(); gPad->RedrawAxis(); // // Bottom ratio plot // // ---------- // // Preparing ratio histograms TH1D * numerator = static_cast<TH1D*>(GenHist->Clone("numerator")); TH1D * numerator_fullstaterr = static_cast<TH1D*>(GenHist->Clone("numerator_fullstaterr")); TH1D * denominator = static_cast<TH1D*>(EstHist->Clone("denominator")); TH1D * GenHist_Clone = static_cast<TH1D*>(GenHist->Clone("GenHist_Clone")); TH1D * EstHist_Clone = static_cast<TH1D*>(EstHist->Clone("EstHist_Clone")); TH1D * EstHist_NoError = static_cast<TH1D*>(EstHist->Clone("EstHist_NoError")); TH1D * One_NoError = static_cast<TH1D*>(EstHist->Clone("EstHist_NoError")); for (int ibin=0; ibin<EstHist_NoError->GetNbinsX()+2; ibin++){ // scan including underflow and overflow bins EstHist_NoError->SetBinError(ibin,0.); One_NoError->SetBinContent(ibin,1.); One_NoError->SetBinError(ibin,0.); } //EstHistD->Add(GenHistD,-1); numerator->Divide(GenHist_Clone,EstHist_NoError,1,1,""); denominator->Divide(EstHist_Clone,EstHist_NoError,1,1,""); numerator_fullstaterr->Divide(GenHist_Clone,EstHist_Clone,1,1,""); // Expectation/Prediction numerator_fullstaterr->Add(One_NoError,-1.); // Expectation/Prediction-1 // draw bottom figure canvas_dw->cd(); // font size numerator->GetXaxis()->SetLabelSize(font_size_dw); numerator->GetXaxis()->SetTitleSize(font_size_dw); numerator->GetYaxis()->SetLabelSize(font_size_dw); numerator->GetYaxis()->SetTitleSize(font_size_dw); // // Horizontal Lines TLine *tline = new TLine(search_x_min,1.,search_x_max,1.); TLine *tline0 = new TLine(search_x_min,0.,search_x_max,0.); // // Common to all bottom plots // //sprintf(ytitlename,"#frac{Estimate - #tau_{had} BG}{#tau_{had} BG} "); sprintf(ytitlename,"#frac{Direct}{Prediction} "); numerator->SetMaximum(ymax_bottom); numerator->SetMinimum(ymin_bottom); // // Specific to each bottom plot // // Setting style //numerator->SetMaximum(1.4); //numerator->GetXaxis()->SetLabelFont(42); //numerator->GetXaxis()->SetLabelOffset(0.007); numerator->GetXaxis()->SetLabelSize(0.18*0.045/0.06); numerator->GetXaxis()->SetTitleSize(0.18); numerator->GetXaxis()->SetTitleOffset(0.9); numerator->GetXaxis()->SetTitleFont(42); //numerator->GetYaxis()->SetLabelFont(42); //numerator->GetYaxis()->SetLabelOffset(0.007); numerator->GetYaxis()->SetLabelSize(0.18*0.045/0.06); numerator->GetYaxis()->SetTitleSize(0.18); //numerator->GetYaxis()->SetTitleOffset(0.5); numerator->GetYaxis()->SetTitleOffset(0.25); numerator->GetYaxis()->SetTitleFont(42); numerator->GetXaxis()->SetTitle(xtitlename); numerator->GetYaxis()->SetTitle(ytitlename); //gPad->SetGridx(1); if (pull==1){ sprintf(ytitlename,"#frac{Exp - Pre}{Stat Error} "); numerator->SetMaximum(8.); numerator->SetMinimum(-8.); // // Specific to each bottom plot // // Setting style for (int ibin=0; ibin<numerator_fullstaterr->GetNbinsX()+2; ibin++){ // scan including underflow and overflow bins numerator_fullstaterr->SetBinContent(ibin,numerator_fullstaterr->GetBinContent(ibin)/numerator_fullstaterr->GetBinError(ibin)); numerator_fullstaterr->SetBinError(ibin,0.); } numerator_fullstaterr->Print("all"); numerator_fullstaterr->GetXaxis()->SetLabelSize(font_size_dw); numerator_fullstaterr->GetXaxis()->SetTitleSize(font_size_dw); numerator_fullstaterr->GetYaxis()->SetLabelSize(font_size_dw); numerator_fullstaterr->GetYaxis()->SetTitleSize(font_size_dw); numerator_fullstaterr->GetXaxis()->SetTitleSize(0.12); numerator_fullstaterr->GetXaxis()->SetTitleOffset(0.9); numerator_fullstaterr->GetXaxis()->SetTitleFont(42); numerator_fullstaterr->GetYaxis()->SetTitleSize(0.13); numerator_fullstaterr->GetYaxis()->SetTitleOffset(0.5); numerator_fullstaterr->GetYaxis()->SetTitleFont(42); numerator_fullstaterr->GetXaxis()->SetTitle(xtitlename); numerator_fullstaterr->GetYaxis()->SetTitle(ytitlename); //numerator_fullstaterr->SetFillColor(kGreen-3); numerator_fullstaterr->SetFillColor(kRed-10); numerator_fullstaterr->DrawCopy(); // // Drawing lines tline0->SetLineStyle(2); //tline0->Draw(); } else { // // Plotting numerator->GetYaxis()->SetNdivisions(505); numerator->GetYaxis()->SetTickLength(0.015); numerator->GetXaxis()->SetTickLength(0.08); numerator->SetTitle(""); ex1->Draw(); numerator->DrawCopy(); ex2->Draw(); denominator->DrawCopy("e2same"); //denominator->DrawCopy("same"); TH1D *denominator_Clone = (TH1D*)denominator->Clone(); denominator_Clone->SetFillColor(kWhite); denominator_Clone->Draw("hist same"); ex1->Draw(); numerator->DrawCopy("same"); numerator->Print("all"); denominator->Print("all"); numerator_fullstaterr->Print("all"); // // Drawing lines tline->SetLineStyle(2); //tline->Draw(); } // if(option.find("QCD")==string::npos ){ // Njet separation lines TLine *tl_njet = new TLine(); tl_njet->SetLineStyle(2); tl_njet->DrawLine(53.-0.5,ymin_bottom,53.-0.5,ymax_bottom); tl_njet->DrawLine(105.-0.5,ymin_bottom,105.-0.5,ymax_bottom); tl_njet->DrawLine(157.-0.5,ymin_bottom,157.-0.5,ymax_bottom); // Nb separation lines TLine *tl_nb = new TLine(); tl_nb->SetLineStyle(3); tl_nb->DrawLine(14.-0.5,ymin_bottom,14.-0.5,ymax2_bottom); tl_nb->DrawLine(27.-0.5,ymin_bottom,27.-0.5,ymax2_bottom); tl_nb->DrawLine(40.-0.5,ymin_bottom,40.-0.5,ymax2_bottom); tl_nb->DrawLine(53.-0.5,ymin_bottom,53.-0.5,ymax2_bottom); tl_nb->DrawLine(66.-0.5,ymin_bottom,66.-0.5,ymax2_bottom); tl_nb->DrawLine(79.-0.5,ymin_bottom,79.-0.5,ymax2_bottom); tl_nb->DrawLine(92.-0.5,ymin_bottom,92.-0.5,ymax2_bottom); tl_nb->DrawLine(105.-0.5,ymin_bottom,105.-0.5,ymax2_bottom); tl_nb->DrawLine(118.-0.5,ymin_bottom,118.-0.5,ymax2_bottom); tl_nb->DrawLine(131.-0.5,ymin_bottom,131.-0.5,ymax2_bottom); tl_nb->DrawLine(144.-0.5,ymin_bottom,144.-0.5,ymax2_bottom); tl_nb->DrawLine(157.-0.5,ymin_bottom,157.-0.5,ymax2_bottom); tl_nb->DrawLine(170.-0.5,ymin_bottom,170.-0.5,ymax2_bottom); tl_nb->DrawLine(183.-0.5,ymin_bottom,183.-0.5,ymax2_bottom); tl_nb->DrawLine(196.-0.5,ymin_bottom,196.-0.5,ymax2_bottom); } else { // Njet separation lines TLine *tl_njet = new TLine(); tl_njet->SetLineStyle(2); tl_njet->DrawLine( 45.,ymin_bottom, 45.,ymax_bottom); tl_njet->DrawLine( 89.,ymin_bottom, 89.,ymax_bottom); tl_njet->DrawLine(133.,ymin_bottom,133.,ymax_bottom); tl_njet->DrawLine(177.,ymin_bottom,177.,ymax_bottom); // Nb separation lines TLine *tl_nb = new TLine(); tl_nb->SetLineStyle(3); tl_nb->DrawLine(12.,ymin_bottom,12.,ymax2_bottom); tl_nb->DrawLine(23.,ymin_bottom,23.,ymax2_bottom); tl_nb->DrawLine(34.,ymin_bottom,34.,ymax2_bottom); tl_nb->DrawLine(56.,ymin_bottom,56.,ymax2_bottom); tl_nb->DrawLine(67.,ymin_bottom,67.,ymax2_bottom); tl_nb->DrawLine(78.,ymin_bottom,78.,ymax2_bottom); tl_nb->DrawLine(100.,ymin_bottom,100.,ymax2_bottom); tl_nb->DrawLine(111.,ymin_bottom,111.,ymax2_bottom); tl_nb->DrawLine(122.,ymin_bottom,122.,ymax2_bottom); tl_nb->DrawLine(144.,ymin_bottom,144.,ymax2_bottom); tl_nb->DrawLine(155.,ymin_bottom,155.,ymax2_bottom); tl_nb->DrawLine(166.,ymin_bottom,166.,ymax2_bottom); tl_nb->DrawLine(188.,ymin_bottom,188.,ymax2_bottom); tl_nb->DrawLine(199.,ymin_bottom,199.,ymax2_bottom); tl_nb->DrawLine(210.,ymin_bottom,210.,ymax2_bottom); } gPad->RedrawAxis(); // // CMS_lumi(canvas, iPeriod, iPos, lumi_sqrtS); if(doDataVsMC){ sprintf(tempname,"DataMC_Full_Plot.pdf"); if (pull==1) sprintf(tempname,"DataMCPull_Full_Plot.pdf"); }else{ if(doClosurewoIsoTrackVeto){ if(option.find("QCD")!=string::npos) sprintf(tempname,"Closure_QCD_HDP_woIsoTrack_Full_Plot.pdf"); else sprintf(tempname,"Closure_woIsoTrack_Full_Plot.pdf"); if (pull==1) sprintf(tempname,"ClosurePull_woIsoTrack_Full_Plot.pdf"); }else{ if(option.find("QCD")!=string::npos) sprintf(tempname,"Closure_QCD_HDP_Full_Plot.pdf"); else sprintf(tempname,"Closure_Full_Plot.pdf"); if (pull==1) sprintf(tempname,"ClosurePull_Full_Plot.pdf"); } } canvas->Print(tempname); }
void recupThePlots(){ // TDirectory *theDr = (TDirectory*) myFile->Get("eleIDdir");///denom_pt/fit_eff_plots"); //theDr->ls(); cout << "coucou" << theOutFileName << endl; TFile *myOutFile = new TFile(theOutFileName,"RECREATE"); TSystemDirectory dir(thePath, thePath); TSystemFile *file; TString fname; TIter next(dir.GetListOfFiles()); while (((file=(TSystemFile*)next()))) { fname = file->GetName(); if ((fname.BeginsWith("TnP"))&&fname.Contains("data")) { cout << "--------------------"<< "\n"; cout << fname << "\n"; TFile *myFile = new TFile(fname); TIter nextkey(myFile->GetListOfKeys()); TKey *key; while ((key = (TKey*)nextkey())) { // cout << key << "\n"; TString theTypeClasse = key->GetClassName(); TString theNomClasse = key->GetTitle(); cout << "theTypeClasse: "<< theTypeClasse << " , " << theNomClasse << "\n"; if ( theTypeClasse == "TDirectoryFile" ){ // cout << "we are here 1" << "\n"; TDirectory *theDr = (TDirectory*) myFile->Get(theNomClasse); TIter nextkey2(theDr->GetListOfKeys()); TKey *key2; while ((key2 = (TKey*)nextkey2())) { TString theTypeClasse2 = key2->GetClassName(); TString theNomClasse2 = key2->GetTitle(); if ( theTypeClasse == "TDirectoryFile" || theTypeClasse == "TGraphAsymmErrors" ){ TDirectory *theDr2 = (TDirectory*) myFile->Get(theNomClasse+"/"+theNomClasse2+"/fit_eff_plots"); TIter nextkey3(theDr2->GetListOfKeys()); TKey *key3; while ((key3 = (TKey*)nextkey3())) { TString theTypeClasse3 = key3->GetClassName(); TString theNomClasse3 = key3->GetName(); cout << "type = " << theTypeClasse3 << " nom = " << theNomClasse3 << endl; TCanvas *theCanvas = (TCanvas*) myFile->Get(theNomClasse+"/"+theNomClasse2+"/fit_eff_plots/"+theNomClasse3); TIter nextObject(theCanvas->GetListOfPrimitives()); TObject *obj; while ((obj = (TObject*)nextObject())) { if (obj->InheritsFrom("TGraphAsymmErrors")) { cout << "histo: " << obj->GetName() << endl; myOutFile->cd(); obj->Write(theNomClasse2+"_"+theNomClasse3); myFile->cd(); } if (obj->InheritsFrom("TH2F")) { cout << "the TH2F = " << obj->GetName() << endl; myOutFile->cd(); obj->Write(theNomClasse2+"_"+theNomClasse3); myFile->cd(); } } } } } } } delete myFile; } } myOutFile->Close(); }
void drawSingleFit( DrawBase* db, const std::string& varName, int ptMin, int ptMax, int rhoBin ) { TFile* fitFile = db->get_mcFile(0).file; char canvasName[400]; sprintf( canvasName, "%s_pt_%d_%d_rho%d", varName.c_str(), ptMin, ptMax, rhoBin ); char gluonHistoName[400]; sprintf( gluonHistoName, "%s_gluon_pt%d_%d_rho%d", varName.c_str(), ptMin, ptMax, rhoBin ); char quarkHistoName[400]; sprintf( quarkHistoName, "%s_quark_pt%d_%d_rho%d", varName.c_str(), ptMin, ptMax, rhoBin ); TCanvas* thisCanvas = (TCanvas*)fitFile->Get(canvasName); thisCanvas->cd(); TList* list = thisCanvas->GetListOfPrimitives(); TH1D* h1_gluon = (TH1D*)list->FindObject(gluonHistoName); TH1D* h1_quark = (TH1D*)list->FindObject(quarkHistoName); int quarkColor = 46; int gluonColor = 38; h1_gluon->SetMarkerStyle(21); h1_gluon->SetMarkerColor(gluonColor); h1_gluon->SetLineColor(gluonColor); h1_gluon->SetLineWidth(2); h1_gluon->SetFillColor(gluonColor); h1_gluon->SetFillStyle(3004); h1_quark->SetMarkerStyle(20); h1_quark->SetLineColor(quarkColor); h1_quark->SetMarkerColor(quarkColor); h1_quark->SetLineWidth(2); h1_quark->SetFillColor(quarkColor); h1_quark->SetFillStyle(3005); std::string functionName = (varName=="ptD") ? "functionPtD" : "gamma"; std::string functionName_gluon = functionName + "_gluon"; std::string functionName_quark = functionName + "_quark"; TF1* f1_gluon = (TF1*)list->FindObject(functionName_gluon.c_str()); TF1* f1_quark = (TF1*)list->FindObject(functionName_quark.c_str()); f1_gluon->SetLineColor(gluonColor); f1_quark->SetLineColor(quarkColor); std::string axisName; if( varName=="nCharged" ) axisName = "Jet Charged Multiplicity"; else if( varName=="nNeutral" ) axisName = "Jet Neutral Multiplicity"; else if( varName=="ptD" ) axisName = "Jet p_{T}D"; float xMin = h1_quark->GetXaxis()->GetXmin(); float xMax = (varName=="ptD") ? h1_quark->GetXaxis()->GetXmax() : 50.; float yMax_gluon = h1_gluon->GetMaximum(); float yMax_quark = h1_quark->GetMaximum(); float yMax = (yMax_gluon>yMax_quark) ? yMax_gluon : yMax_quark; yMax *= 1.3; std::string yTitle = "Normalized to Unity"; TH2D* h2_axes = new TH2D("axes", "", 10, xMin, xMax, 10, 0., yMax); h2_axes->SetXTitle(axisName.c_str()); h2_axes->SetYTitle(yTitle.c_str()); TPaveText* label_cms = db->get_labelCMS(); TPaveText* label_sqrt = db->get_labelSqrt(); int rhoMin = rhoBin; int rhoMax = rhoBin+1; char ptText[400]; sprintf( ptText, "%d < p_{T} < %d GeV", ptMin, ptMax ); char rhoText[400]; sprintf( rhoText, "%d < #rho_{PF} < %d GeV", rhoMin, rhoMax ); TPaveText* pt_rho_label = new TPaveText( 0.25, 0.79, 0.45, 0.91, "brNDC" ); pt_rho_label->SetTextSize(0.035); pt_rho_label->SetFillColor(0); pt_rho_label->AddText( ptText ); pt_rho_label->AddText( rhoText ); char legendTitle[500]; sprintf( legendTitle, "%d < p_{T} < %d, %d < #rho < %d", ptMin, ptMax, rhoMin, rhoMax ); //TLegend* legend = new TLegend( 0.55, 0.65, 0.9, 0.9, legendTitle ); TLegend* legend = new TLegend( 0.65, 0.75, 0.9, 0.9 ); legend->SetFillColor(0); legend->SetTextSize(0.035); legend->AddEntry( h1_gluon, "Gluons", "PL" ); legend->AddEntry( h1_quark, "Quarks", "PL" ); TCanvas* c1 = new TCanvas("c1", "", 600, 600); c1->cd(); h2_axes->Draw(); legend->Draw("same"); h1_quark->Draw("SAME"); h1_gluon->Draw("SAME"); f1_quark->Draw("SAME"); f1_gluon->Draw("SAME"); label_sqrt->Draw("same"); label_cms->Draw("same"); pt_rho_label->Draw("same"); gPad->RedrawAxis(); char saveCanvasName_char[900]; sprintf( saveCanvasName_char, "%s/%s_pt%d_%d_rho%d", db->get_outputdir().c_str(), varName.c_str(), ptMin, ptMax, rhoBin ); std::string saveCanvasName(saveCanvasName_char); std::string saveCanvasName_eps = saveCanvasName + ".eps"; c1->SaveAs(saveCanvasName_eps.c_str()); TCanvas* c1_log = new TCanvas("c1_log", "", 600, 600); c1_log->cd(); c1_log->SetLogy(); float yMin_log = 0.000001; float yMax_log = 50.*yMax; TH2D* h2_axes_log = new TH2D("axes_log", "", 10, xMin, xMax, 10, yMin_log, yMax_log); h2_axes_log->SetXTitle(axisName.c_str()); h2_axes_log->SetYTitle(yTitle.c_str()); h2_axes_log->Draw(); legend->Draw("same"); h1_quark->Draw("SAME"); h1_gluon->Draw("SAME"); f1_quark->Draw("SAME"); f1_gluon->Draw("SAME"); label_sqrt->Draw("same"); label_cms->Draw("same"); pt_rho_label->Draw("same"); std::string saveCanvasName_log = saveCanvasName + "_log"; std::string saveCanvasName_log_eps = saveCanvasName_log + ".eps"; c1_log->SaveAs(saveCanvasName_log_eps.c_str()); gPad->RedrawAxis(); delete h2_axes; delete h2_axes_log; delete legend; delete c1; delete c1_log; }
void EstimateBg_76X(bool save=0, std::string in = "", std::string out = "/afs/cern.ch/user/j/jkarancs/public/NOTES/notes/AN-14-290/trunk/Plots/v1.0/", std::string ext="png") { gStyle->SetOptTitle(0); gStyle->SetOptStat(0); bool latex = save; bool ABCD_prime = 0; bool TT_only = 0; std::stringstream ss, ss2; ss<<DPHI_CUT; ss2<<R_CUT; std::string dphi_cut = ss.str().replace(ss.str().find("."),1,"p"); std::string r_cut = ss2.str().replace(ss2.str().find("."),1,"p"); std::string filename = in.size() ? in : //"results/Plotter_out_2016_05_31_08h48m57_replot.root"; "results/Plotter_out_2016_06_24_14h28m51.root"; std::vector<std::string> samples[4]; //samples[0].push_back("TTJetsMGHT"); //samples[0].push_back("TTJetsMG"); //samples[0].push_back("TTJetsNLOFXFX"); //samples[0].push_back("TTNLO"); //samples[0].push_back("TTNLOHerwig"); //samples[0].push_back("TTPowheg"); //samples[0].push_back("TTPowhegmpiOff"); //samples[0].push_back("TTPowhegnoCR"); //samples[0].push_back("TTPowhegHerwig"); //+data+ samples[1].push_back("SingleElectron"); //+data+ samples[1].push_back("SingleMuon"); if (TT_only) { samples[1].push_back("TTJetsMGHT"); samples[1].push_back("TTJetsMG"); samples[1].push_back("TTJetsNLOFXFX"); samples[1].push_back("TTNLO"); samples[1].push_back("TTNLOHerwig"); samples[1].push_back("TTPowheg"); samples[1].push_back("TTPowhegmpiOFF"); samples[1].push_back("TTPowhegnoCR"); samples[1].push_back("TTPowhegHerwig"); } else { samples[1].push_back("TTJetsMGHT"); //samples[1].push_back("TTJetsMG"); //samples[1].push_back("TTJetsNLOFXFX"); //samples[1].push_back("TTNLO"); //samples[1].push_back("TTNLOHerwig"); //samples[1].push_back("TTPowheg"); //samples[1].push_back("TTPowhegmpiOff"); //samples[1].push_back("TTPowhegnoCR"); //samples[1].push_back("TTPowhegHerwig"); samples[1].push_back("ZJets"); samples[1].push_back("TTX"); samples[1].push_back("WJets"); samples[1].push_back("Diboson"); samples[1].push_back("Top"); samples[1].push_back("QCD"); //ZERO samples[1].push_back("TZQ"); //ZERO samples[1].push_back("ZJetsToQQ"); // Also WJetsToQQ //ZERO samples[1].push_back("GJets"); } //samples[1].push_back("Data"); // NTop Sideband All background summed samples[2].push_back("All Bkg."); // Signal in NTop bins samples[3].push_back("T1tttt"); bool baderror = false; double weight[] = { 0.32686, 0.0505037, 0.00921411, 6.80717, 0.354934, 0.00484915 }; int rebin = /*(R_CUT*10-int(R_CUT*10))==0 ? 10 :*/ (R_CUT*20-int(R_CUT*20))==0 ? 5 : (R_CUT*50-int(R_CUT*50))==0 ? 2 : 1; double sideband_fit_low_range[] = { 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15 }; int i_h_side[] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int i_h_signal[] = { 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; double scale_factors[] = { 1, 1, 1, 1, 1, 1, 1}; // All normal //double scale_factors[] = { /* TT */ 1, /* W */ 1, /* Z */ 1, /* T */ 1, /* TTV */ 1, /* QCD */ 2, /* VV */ 1 }; // QCD high //double scale_factors[] = { /* TT */ 5, /* W */ 1, /* Z */ 1, /* T */ 1, /* TTV */ 5, /* QCD */ 1, /* VV */ 1 }; // TT/TTV high //double scale_factors[] = { /* TT */ 1, /* W */ 2, /* Z */ 2, /* T */ 2, /* TTV */ 1, /* QCD */ 1, /* VV */ 2 }; // T/V/VV high Double_t Rranges_ABCD[][4] = { { DPHI_CUT, 3.2, 0.0, DPHI_CUT }, { R_CUT_LOW-1e-10, R_CUT, R_CUT-1e-10, 1.20 }, { R_CUT_LOW-1e-10, R_CUT, R_CUT-1e-10, 1.20 }, { R_CUT_LOW-1e-10, R_CUT, R_CUT-1e-10, 1.20 } }; bool doFitting = false; double sum_a = 0, sum_b = 0, sum_c = 0, sum_d = 0, sum_d_abcd = 0, sum_d_nevt = 0; double sum_a_err = 0, sum_b_err = 0, sum_c_err = 0, sum_d_err = 0, sum_d_abcd_err = 0; double sum_b_fit = 0, sum_d_fit = 0, sum_d_fit_comb = 0; double sum_b_fit_err = 0, sum_d_fit_err = 0, sum_d_fit_comb_err = 0; double comb_d = 0, comb_d_err = 0, comb_d_abcd = 0, comb_d_abcd_err = 0; if (latex) { printf("\\begin{table*}[htbH]\n"); printf("\\small\n"); printf("\\begin{center}\n"); printf("\\topcaption{Estimated Standard Model background yields in ABCD regions. A, B is in the sideband, C and D is the signal band, D is the signal region.\\label{tab:SMBkgEstimate}}\n"); printf("\\begin{tabular}{lrrrrrrrr}\n"); } TFile *f = TFile::Open(filename.c_str()); for (size_t iMethod = 0; iMethod<4; ++iMethod) if (!(iMethod==0&&samples[0].size()==0)){ // Print Top row for each method if (latex) { if (iMethod==0) { printf("\\hline\n"); printf("Method 2 & A & B & C & D = B*C/A & D obs. & Ratio pred./obs. & Pull & KS test\\\\\n"); } else if (iMethod==1){ printf("\\hline\n"); printf("Method 1 & A & B & C & D = B*C/A & D obs. & Ratio pred./obs. & Pull & KS test\\\\\n"); } printf("\\hline\n"); } else { std::stringstream r_sb_cut; if (R_CUT_LOW==0) r_sb_cut<<"R<"<<R_CUT; else r_sb_cut<<R_CUT_LOW<<"<R<"<<R_CUT; const char* prime = ABCD_prime ? "'" : ""; //if (iMethod==0) printf("| *Sample* | *A (DPhi>2.8, SB)* | *B (DPhi<2.8, SB)* | *C (DPhi>2.8, Sig.B.)* | - | *D = B*C/A pred.* | *D (DPhi<2.8, Sig.B.) obs.* | *Ratio pred./obs.* |\n"); //else if (iMethod==1) printf("| *Sample* | *A (R<%1.1f, SB)* | *B (R>%1.1f, SB)* | *C (R<%1.1f, Sig.B.)* | *D = B (R fit, SB) * C/A pred.* | *D = B*C/A pred.* | *D (R>%1.1f, Sig.B.) obs.* | *Ratio pred./obs.* | \n", R_CUT, R_CUT, R_CUT, R_CUT); if (iMethod==0) printf("| *Sample* | *A (DPhi>%1.1f, %s)* | *B (DPhi<%1.1f, %s)* | *C (DPhi>%1.1f, R>0.4)* | *D = B*C/A pred.* | *D (DPhi<%1.1f, R>0.4) obs.* | *Ratio pred./obs.* | *Pull (pred-obs)/error* | *KS test* |\n", DPHI_CUT, r_sb_cut.str().c_str(), DPHI_CUT, r_sb_cut.str().c_str(), DPHI_CUT, DPHI_CUT); else if (iMethod==1) printf("| *Sample* | *A%s (%s, <2 tag)* | *B%s (R>%1.1f, <2 tag)* | *C%s (%s, 2 tag)* | *D%s = B%s*C%s/A%s pred.* | *D%s (R>%1.1f, 2 tag) obs.* | *Ratio pred./obs.* | *Pull (pred-obs)/error* | *KS test* |\n", prime, r_sb_cut.str().c_str(), prime, R_CUT, prime, r_sb_cut.str().c_str(), prime, prime, prime, prime, prime, R_CUT); } TH1D *h_side_sum, *h_signal_sum; for (size_t iSample = 0; iSample<samples[iMethod].size(); ++iSample) { std::string canname = iMethod==0 ? std::string("DPhiBins")+(ABCD_prime ? "/RBins_0To1HadTop_" : "/RBins_2HadTop_")+samples[iMethod][iSample] : iMethod==1 ? std::string("RFine/Tau32Cuts_")+(ABCD_prime ? "Fail" : "Pass")+"DPhiCut_"+samples[iMethod][iSample] : iMethod==2 ? std::string("RFine/Tau32Cuts_")+(ABCD_prime ? "Fail" : "Pass")+"DPhiCut_Background" : iMethod==3 ? std::string("RFine/Tau32Cuts_")+(ABCD_prime ? "Fail" : "Pass")+"DPhiCut_"+samples[iMethod][iSample] : ""; TCanvas *can = (TCanvas*)(f->Get(canname.c_str())); can = (TCanvas*)can->Clone(); can->Draw(); TH1D *h_side = (TH1D*)can->GetListOfPrimitives()->At(i_h_side[iMethod]); TH1D *h_signal = (TH1D*)can->GetListOfPrimitives()->At(i_h_signal[iMethod]); // Simulate different cross section by scaling a certain background if (iMethod==1) { TH1D *h_side_temp_scaled = (TH1D*)h_side->Clone(); h_side_temp_scaled->Scale(scale_factors[iSample]); TH1D *h_signal_temp_scaled = (TH1D*)h_signal->Clone(); h_signal_temp_scaled->Scale(scale_factors[iSample]); if (iSample==0) { h_side_sum = h_side_temp_scaled; h_signal_sum = h_signal_temp_scaled; } else { h_side_sum->Add(h_side_temp_scaled); h_signal_sum->Add(h_signal_temp_scaled); } } else if (iMethod==2) { h_side = h_side_sum; h_signal = h_signal_sum; } TH1D *h_pred =(TH1D*)h_side->Clone(); if (iMethod!=0&&rebin>1) { h_side->Rebin(rebin); h_signal->Rebin(rebin); h_pred->Rebin(rebin); } TLegend *leg = (TLegend*)can->GetListOfPrimitives()->At(can->GetListOfPrimitives()->GetEntries()-1); leg->SetX1(0.35); leg->SetX2(0.65); leg->SetY1(0.6); // Add ratio plot int y1 = 350; int y2 = 150; int mid2 = 10; can->Divide(1,2); // Pad 1 (80+500+20 x 40+500) TVirtualPad* p = can->cd(1); p->SetPad(0,(y2+60+mid2)/(y1+y2+100.0+mid2),1,1); p->SetTopMargin(40.0/(y1+40)); p->SetBottomMargin(0); p->SetRightMargin(0.05); p->SetLogy(1); h_side->GetYaxis()->SetRangeUser(1.00001e-4,1e4); h_side->Draw("HIST"); h_signal->Draw("SAMEHISTE1"); leg->Draw(); // Pad 2 (80+500+20 x 200+60) p = can->cd(2); p->SetGrid(0,1); p->SetPad(0,0,1,(y2+60+mid2)/(y1+y2+100.0+mid2)); p->SetTopMargin(((float)mid2)/(y2+60+mid2)); p->SetBottomMargin(60.0/(y2+60+mid2)); p->SetRightMargin(0.05); TH1D* ratio = (TH1D*)h_signal->Clone(); TH1D* div = (TH1D*)h_side->Clone(); //ratio->Scale(1/ratio->GetSumOfWeights()); double sum_bins_ratio = iMethod==0 ? ratio->Integral(): ratio->Integral(ratio->FindBin(R_CUT_LOW),ratio->FindBin(Rranges_ABCD[iMethod][3])); ratio->Scale(1/sum_bins_ratio); ratio->SetTitleSize(32.0/(y2+60+mid2),"xyz"); ratio->SetLabelSize(20.0/(y2+60+mid2),"xyz"); //ratio->Scale(1/div->GetSumOfWeights()); double sum_bins_div = iMethod==0 ? div->Integral(): div->Integral(div->FindBin(R_CUT_LOW),div->FindBin(Rranges_ABCD[iMethod][3])); div->Scale(1/sum_bins_div); ratio->Divide(div); //ratio->GetYaxis()->SetRangeUser(0,2); ratio->GetXaxis()->SetTitleOffset(0.7); ratio->GetYaxis()->SetNdivisions(305); ratio->GetYaxis()->SetTitle("Ratio (Norm.)"); ratio->GetYaxis()->SetTitleOffset(0.4); ratio->SetTitleSize(24.0/(y2+60+mid2),"y"); ratio->SetTitle(""); ratio->SetMarkerStyle(20); ratio->SetMarkerColor(1); ratio->SetLineColor(1); ratio->GetYaxis()->SetRangeUser(0,4); ratio->Draw("PE1"); TLine* l = new TLine(ratio->GetXaxis()->GetXmin(), 1, ratio->GetXaxis()->GetXmax(), 1); l->SetLineWidth(2); //l->SetLineColor(2); l->SetLineStyle(2); l->Draw(); gPad->Update(); // Fit ratio //TF1 *fit_ratio; //if (iMethod==1) { // fit_ratio = new TF1("fit_ratio","pol0", Rranges_ABCD[iMethod][0], Rranges_ABCD[iMethod][1]); // fit_ratio->SetLineColor(1); // ratio->Fit("fit_ratio","RE"); // fit_ratio->SetRange(Rranges_ABCD[iMethod][0], Rranges_ABCD[iMethod][2]); // fit_ratio->Draw("SAME"); //} p = can->cd(1); // calculate integrals double integral[2][2] = { { 0, 0 }, { 0, 0 } }; double integral_error[2][2] = { { 0, 0 }, { 0, 0 } }; double nevt[2][2] = { { 0, 0 }, { 0, 0 } }; //std::cout<<samples[iMethod][iSample]<<":"<<std::endl; for (int i=0; i<2; ++i) { for (int bin=1; bin<=h_side->GetNbinsX(); ++bin) { if (h_signal->GetXaxis()->GetBinLowEdge(bin)>=Rranges_ABCD[iMethod][i*2] && h_signal->GetXaxis()->GetBinUpEdge(bin)<=Rranges_ABCD[iMethod][i*2+1]) { //std::cout<<bin<<"="<<h_side->GetBinCenter(bin); //if (i==0) std::cout<<" in, "; //else std::cout<<" out, "; double c0 = h_side->GetBinContent(bin), c1 = h_signal->GetBinContent(bin); double e0 = h_side->GetBinError(bin), e1 = h_signal->GetBinError(bin); //std::cout<<h_signal->GetBinError(bin)<<" "<<sqrt(c1*weight[iSample])<<std::endl; if (baderror&&iMethod==1) { e0 = sqrt(c0*weight[iSample]); e1 = sqrt(c1*weight[iSample]); } nevt[0][i] += (int)(c0*c0/(e0*e0) + 0.5); nevt[1][i] += (int)(c1*c1/(e1*e1) + 0.5); integral[0][i] += c0; integral[1][i] += c1; //if (iMethod==1) { // weight bin by projected ratio (correction) // double bincent = h_signal->GetXaxis()->GetBinLowEdge(bin); // integral[0][1] *= fit_ratio->Eval(bincent); //} integral_error[0][i] += e0*e0; integral_error[1][i] += e1*e1; //if (iSample==0&&e1>0) std::cout<<bin<<" "<<c1<<" +- "<<e1*e1<<" nevt = "<<((int)(c1*c1/(e1*e1) + 0.5))<<std::endl; } } //if (iSample==1&&i==1) std::cout<<integral[1][i]<<" +- "<<integral_error[1][i]<<std::endl; integral_error[0][i] = sqrt(integral_error[0][i]); integral_error[1][i] = sqrt(integral_error[1][i]); } //std::cout<<nevt[1][1]<<std::endl; // predict yields using 2 methods (ABCD and constrained R-shape fit method combined) // ABCD method double a = integral[0][0], b = integral[0][1], c = integral[1][0], d = integral[1][1]; double a_err = integral_error[0][0], b_err = integral_error[0][1], c_err = integral_error[1][0], d_err = integral_error[1][1]; // Calculate error // z = x / y -> z_err = sqrt( (x*x*y_err*y_err + y*y*x_err*x_err)/(y*y*y*y) ) // z = x * y -> z_err = sqrt ( x*x*y_err*y_err + y*y*x_err*x_err ) double c_per_a_err = sqrt((c*c*a_err*a_err + a*a*c_err*c_err)/(a*a*a*a)); double d_abcd = b * (c/a), d_abcd_err = sqrt(b*b*c_per_a_err*c_per_a_err + (c/a)*(c/a)*b_err*b_err); double d_nevt = nevt[1][1]; double d_ratio = d_abcd / d; double d_ratio_err = sqrt((d_err/d)*(d_err/d) + (d_abcd_err/d_abcd)*(d_abcd_err/d_abcd))*d_ratio; double d_pull = (d_abcd-d)/sqrt(d_abcd_err*d_abcd_err + d_err*d_err); // Scaled plot h_pred->Scale(c/a); h_pred->SetLineColor(1); h_pred->SetLineStyle(2); h_pred->Draw("SAMEHIST"); leg->AddEntry(h_pred, "Prediction (ABCD)", "l"); double fit_integral[2][2], fit_integral_error[2][2], d_fit_comb = 0, d_fit_comb_err = 0; if (iMethod==1) { // Fit in the full range of NTop Sideband // Do fitting and calculate integrals TF1 *fit_side = new TF1("NTopSide_fit","exp([0]+[1]*x)", iMethod==2 ? 0.2 : sideband_fit_low_range[iSample], Rranges_ABCD[iMethod][3]); fit_side->SetLineColor(h_side->GetLineColor()); h_side->Fit("NTopSide_fit","QRE"); //fit_side->Draw("SAME"); double Rranges_ACfit[3] = { sideband_fit_low_range[iSample], Rranges_ABCD[iMethod][2], Rranges_ABCD[iMethod][3] }; for (int i=0; i<2; ++i) { fit_integral[0][i] = fit_side->Integral(Rranges_ACfit[i], Rranges_ACfit[i+1])/h_signal->GetXaxis()->GetBinWidth(1); fit_integral_error[0][i] = fit_side->IntegralError(Rranges_ACfit[i], Rranges_ACfit[i+1])/h_signal->GetXaxis()->GetBinWidth(1); } double par0 = fit_side->GetParameter(0), par0_error = fit_side->GetParError(0); double par1 = fit_side->GetParameter(1), par1_error = fit_side->GetParError(1); double par1min, par1max; fit_side->GetParLimits(1, par1min, par1max); // Fit in the Signal region // Fitting in sideband, get B area under curve and scale by C/A TF1 *fit_signal = new TF1("NTopSignal_RSide_fit","exp([0]+[1]*x)", Rranges_ACfit[0], Rranges_ABCD[iMethod][3]); fit_signal->SetLineColor(h_signal->GetLineColor()); //fit_signal->SetParameter(1, par1); //fit_signal->SetParLimits(1, par1min, par1max); h_signal->Fit("NTopSignal_RSide_fit","QREB"); //fit_signal->Draw("SAME"); for (int i=0; i<2; ++i) { fit_integral[1][i] = fit_signal->Integral(Rranges_ACfit[i], Rranges_ACfit[i+1])/h_signal->GetXaxis()->GetBinWidth(1); fit_integral_error[1][i] = fit_signal->IntegralError(Rranges_ACfit[i], Rranges_ACfit[i+1])/h_signal->GetXaxis()->GetBinWidth(1); } d_fit_comb = fit_integral[0][1] * (c/a); d_fit_comb_err = sqrt(fit_integral[0][1]*fit_integral[0][1]*c_per_a_err*c_per_a_err + (c/a)*(c/a)*fit_integral_error[0][1]*fit_integral_error[0][1]); TF1 *fit_pred = new TF1("Predicted_fit","exp([0]+[1]*x)", Rranges_ACfit[0], Rranges_ACfit[2]); fit_pred->SetLineColor(1); fit_pred->SetLineStyle(2); fit_pred->FixParameter(0, par0+std::log(c/a)); fit_pred->FixParameter(1, par1); h_signal->Fit("Predicted_fit","QREB+"); //fit_pred->Draw("SAME"); } // Save plot if (iMethod==3) samples[iMethod][iSample] = "T1tttt"; std::string name = samples[iMethod][iSample]; if (iMethod==2) name = "AllBkg"; if (save) can->SaveAs((out+"BkgEst/ABCD_closure_"+name+"."+ext).c_str()); // Check compatibility of prediction to observed distribution double ks_test = h_pred->KolmogorovTest(h_signal); if (iMethod==1) { sum_a += a; sum_b += b; sum_c += c; sum_d += d; sum_a_err += a_err*a_err; sum_b_err += b_err*b_err; sum_c_err += c_err*c_err; sum_d_err += d_err*d_err; sum_d_abcd += d_abcd; sum_d_abcd_err += d_abcd_err*d_abcd_err; sum_b_fit += fit_integral[0][1]; sum_b_fit_err += fit_integral_error[0][1]*fit_integral_error[0][1]; sum_d_fit += fit_integral[1][1]; sum_d_fit_err += fit_integral_error[1][1]*fit_integral_error[1][1]; sum_d_fit_comb += d_fit_comb; sum_d_fit_comb_err += d_fit_comb_err*d_fit_comb_err; sum_d_nevt += d_nevt; //printf(" %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f |\n", d_fit_comb, d_fit_comb_err, d_abcd, d_abcd_err, d, d_err, d_ratio, d_ratio_err); } if (latex) { printf("%s & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ &", samples[iMethod][iSample].c_str(), a, a_err, b, b_err, c, c_err); printf(" $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & %.2f & %.2f \\\\\n", d_abcd, d_abcd_err, d, d_err, d_ratio, d_ratio_err, d_pull, ks_test); } else { printf("| %s | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f |", samples[iMethod][iSample].c_str(), a, a_err, b, b_err, c, c_err); printf(" %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f | %.2f |\n", d_abcd, d_abcd_err, d, d_err, d_ratio, d_ratio_err, d_pull, ks_test); } // Combining best methods if ((iMethod==0&&iSample==0)||(iMethod==1&&iSample!=0)) { comb_d_abcd += d_abcd; comb_d += d; comb_d_abcd_err += d_abcd_err*d_abcd_err; comb_d_err += d_err*d_err; } } if (iMethod==1) { sum_a_err = sqrt(sum_a_err); sum_b_err = sqrt(sum_b_err); sum_c_err = sqrt(sum_c_err); sum_d_err = sqrt(sum_d_err); sum_b_fit_err = sqrt(sum_b_fit_err); sum_d_fit_err = sqrt(sum_d_fit_err); sum_d_fit_comb_err = sqrt(sum_d_fit_comb_err); double sum_d_ratio = sum_d_abcd / sum_d; double sum_d_ratio_err = sqrt((sum_d_err/sum_d)*(sum_d_err/sum_d) + (sum_d_abcd_err/sum_d_abcd)*(sum_d_abcd_err/sum_d_abcd))*sum_d_ratio; double sum_d_pull = (sum_d_abcd-sum_d)/sqrt(sum_d_abcd_err*sum_d_abcd_err + sum_d_err*sum_d_err); if (latex) { printf("\\hline\n"); printf("Sum Bkg. & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ &", sum_a, sum_a_err, sum_b, sum_b_err, sum_c, sum_c_err); printf(" $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & %.2f & \\\\\n", sum_d_abcd, sum_d_abcd_err, sum_d, sum_d_err, sum_d_ratio, sum_d_ratio_err, sum_d_pull); } else { //printf("| Sum Bkg.| %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f |", sum_a, sum_a_err, sum_b_fit, sum_b_fit_err, sum_b, sum_b_err, sum_c, sum_c_err); printf("| Sum Bkg.| %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f |", sum_a, sum_a_err, sum_b, sum_b_err, sum_c, sum_c_err); //printf(" %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f |\n", sum_d_fit_comb, sum_d_fit_comb_err, sum_d_abcd, sum_d_abcd_err, sum_d, sum_d_err, sum_d_ratio, sum_d_ratio_err); printf(" %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f | - |\n", sum_d_abcd, sum_d_abcd_err, sum_d, sum_d_err, sum_d_ratio, sum_d_ratio_err, sum_d_pull); } } else if (iMethod==2&&samples[0].size()) { double comb_d_ratio = comb_d_abcd / comb_d; double comb_d_ratio_err = sqrt((comb_d_err/comb_d)*(comb_d_err/comb_d) + (comb_d_abcd_err/comb_d_abcd)*(comb_d_abcd_err/comb_d_abcd))*comb_d_ratio; double comb_d_pull = (comb_d_abcd-comb_d)/sqrt(comb_d_abcd_err*comb_d_abcd_err + comb_d_err*comb_d_err); if (latex) { printf("\\hline\n"); printf("\\hline\n"); printf("Combined Bkg. & & & & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & $%.2f \\pm %.2f$ & %.2f & \\\\\n", comb_d_abcd, comb_d_abcd_err, comb_d, comb_d_err, comb_d_ratio, comb_d_ratio_err, comb_d_pull); printf("\\hline\n"); } else { printf("| Combined Bkg.| | | | %.2f +- %.2f | %.2f +- %.2f | %.2f +- %.2f | %.2f | - |\n", comb_d_abcd, comb_d_abcd_err, comb_d, comb_d_err, comb_d_ratio, comb_d_ratio_err, comb_d_pull); } } } if (latex) { printf("\\hline\n"); printf("\\end{tabular}\n"); printf("\\end{center}\n"); printf("\\end{table*}\n"); } if (save) gApplication->Terminate(); }
Plot_searchBin_Data(string sample="stacked",string histname="searchH",int choice=1){ /////////////////////////////////////////////////////////////////////////////////////////// ////Some cosmetic work for official documents. // // Set basic style // gROOT->LoadMacro("tdrstyle.C"); setTDRStyle(); gStyle->SetPalette(1) ; // for better color output gROOT->LoadMacro("CMS_lumi_v2.C"); int W = 600; int H = 600; int H_ref = 600; int W_ref = 800; float T = 0.08*H_ref; float B = 0.12*H_ref; float L = 0.12*W_ref; float R = 0.08*W_ref; /////////////////////////////////////////////////////////////////////////////////////////// // // More specific style set, opening input files etc gStyle->SetOptStat(0); ///to avoid the stat. on the plots char tempname[200]; char xtitlename[200]; char ytitlename[200]; if(sample.find("stack")==string::npos)sprintf(tempname,"TauHad/GenInfo_HadTauEstimation_%s.root",sample.c_str()); else sprintf(tempname,"TauHad/Stack/GenInfo_HadTauEstimation_%s.root",sample.c_str()); //cout << "warning:\n Warning \n \n using elog195 for pre and exp \n \n "; TFile * GenFile = new TFile(tempname,"R"); sprintf(tempname,"TauHad2/Elog378_HadTauEstimation_data_SingleMuon_v15cd_.root"); TFile * EstFile = new TFile(tempname,"R"); // // Define legend // Float_t legendX1 = .55; //.50; Float_t legendX2 = .85; //.70; Float_t legendY1 = .75; //.65; Float_t legendY2 = .90; TLegend* catLeg1 = new TLegend(legendX1,legendY1,legendX2,legendY2); catLeg1->SetTextSize(0.032); catLeg1->SetTextFont(42); catLeg1->SetTextSize(0.042); catLeg1->SetTextFont(42); catLeg1->SetFillColor(0); catLeg1->SetLineColor(0); catLeg1->SetBorderSize(0); // // Define canvas // TCanvas *canvas = new TCanvas("canvas","canvas",10,10,W,H); canvas->SetFillColor(0); canvas->SetBorderMode(0); canvas->SetFrameFillStyle(0); canvas->SetFrameBorderMode(0); canvas->SetLeftMargin( L/W ); canvas->SetRightMargin( R/W ); canvas->SetRightMargin( 0.2 ); canvas->SetTopMargin( T/H ); canvas->SetBottomMargin( B/H ); canvas->SetTickx(0); canvas->SetTicky(0); canvas->Divide(1, 2); // // Define pads // TPad* canvas_up = (TPad*) canvas->GetListOfPrimitives()->FindObject("canvas_1"); TPad* canvas_dw = (TPad*) canvas->GetListOfPrimitives()->FindObject("canvas_2"); // define the size double up_height = 0.8; // please tune so that the upper figures size will meet your requirement double dw_correction = 1.30; // please tune so that the smaller canvas size will work in your environment double font_size_dw = 0.1; // please tune the font size parameter for bottom figure double dw_height = (1. - up_height) * dw_correction; double dw_height_offset = 0.040; // KH, added to put the bottom one closer to the top panel // set pad size canvas_up->SetPad(0., 1 - up_height, 0.97, 1.); canvas_dw->SetPad(0., dw_height_offset, 0.97, dw_height+dw_height_offset); canvas_up->SetFrameFillColor(0); canvas_up->SetFillColor(0); canvas_dw->SetFillColor(0); canvas_dw->SetFrameFillColor(0); canvas_dw->SetBottomMargin(0.25); // set top margin 0 for bottom figure canvas_dw->SetTopMargin(0); // draw top figure canvas_up->cd(); TH1D * GenHist, * EstHist,* thist; TH1D * histTemplate; THStack * tempstack; double HT_x_max=2500.; double HT_x_min=400.; double MHT_x_max=1000.; double NJet_x_max=15.; double NBtag_x_max=4.; double search_x_max=19.; double search_x_min=1.; sprintf(tempname,"%s",histname.c_str()); if(sample.find("stacked")!=string::npos){ EstHist=(TH1D*)EstFile->Get(tempname)->Clone(); tempstack=(THStack*)GenFile->Get(tempname)->Clone(); GenHist=(TH1D*) tempstack->GetStack()->Last(); EstHistD=(TH1D*) EstFile->Get(tempname)->Clone(); tempstack=(THStack*)GenFile->Get(tempname)->Clone(); GenHistD=(TH1D*) tempstack->GetStack()->Last(); } else{ EstHist=(TH1D*) EstFile->Get(tempname)->Clone(); GenHist=(TH1D*) GenFile->Get(tempname)->Clone(); EstHistD=(TH1D*) EstFile->Get(tempname)->Clone(); GenHistD=(TH1D*) GenFile->Get(tempname)->Clone(); } GenHist->SetLineColor(2); EstHist->SetLineColor(4); //GenHist->GetXaxis()->SetLabelFont(42); //GenHist->GetXaxis()->SetLabelOffset(0.007); //GenHist->GetXaxis()->SetLabelSize(0.04); GenHist->GetXaxis()->SetTitleSize(0.05); GenHist->GetXaxis()->SetTitleOffset(0.9); GenHist->GetXaxis()->SetTitleFont(42); //GenHist->GetYaxis()->SetLabelFont(42); //GenHist->GetYaxis()->SetLabelOffset(0.007); //GenHist->GetYaxis()->SetLabelSize(0.04); GenHist->GetYaxis()->SetTitleSize(0.05); GenHist->GetYaxis()->SetTitleOffset(1.25); GenHist->GetYaxis()->SetTitleFont(42); //EstHist->GetXaxis()->SetLabelFont(42); //EstHist->GetXaxis()->SetLabelOffset(0.007); //EstHist->GetXaxis()->SetLabelSize(0.04); EstHist->GetXaxis()->SetTitleSize(0.05); EstHist->GetXaxis()->SetTitleOffset(0.9); EstHist->GetXaxis()->SetTitleFont(42); //EstHist->GetYaxis()->SetLabelFont(42); //EstHist->GetYaxis()->SetLabelOffset(0.007); //EstHist->GetYaxis()->SetLabelSize(0.04); EstHist->GetYaxis()->SetTitleSize(0.05); EstHist->GetYaxis()->SetTitleOffset(1.25); EstHist->GetYaxis()->SetTitleFont(42); sprintf(xtitlename,"search bins"); sprintf(ytitlename,"Events"); gPad->SetLogy(); GenHist->SetMaximum(200000); GenHist->SetMinimum(0.1); GenHist->GetXaxis()->SetRangeUser(search_x_min,search_x_max); GenHist->SetFillStyle(3004); GenHist->SetFillColor(kGreen-3); GenHist->SetTitle(""); GenHist->Draw("e2"); //KH GenHist->Draw("same"); EstHist->Draw("same"); TH1D * GenHist_Clone = static_cast<TH1D*>(GenHist->Clone("denominator")); sprintf(tempname,"#tau_{hadronic} BG"); catLeg1->AddEntry(GenHist,tempname,"l"); sprintf(tempname,"Data"); catLeg1->AddEntry(EstHist,tempname,"l"); GenHist->GetXaxis()->SetTitle(xtitlename); GenHist->GetYaxis()->SetTitle(ytitlename); catLeg1->Draw(); TText * ttext = new TText(10. , 1700. , "4 fb-1"); // ttext->Draw(); // // Bottom ratio plot // // ---------- if(choice==0){ //KH -- flip the numerator and denominator EstHistD->Divide(GenHistD); // draw bottom figure canvas_dw->cd(); // font size EstHistD->GetXaxis()->SetLabelSize(font_size_dw); EstHistD->GetXaxis()->SetTitleSize(font_size_dw); EstHistD->GetYaxis()->SetLabelSize(font_size_dw); EstHistD->GetYaxis()->SetTitleSize(font_size_dw); // // Common to all bottom plots // sprintf(ytitlename,"Estimate / #tau_{had} BG"); EstHistD->SetMaximum(2.65); EstHistD->SetMinimum(0.0); // // Specific to each bottom plot // sprintf(xtitlename,"search bin"); EstHistD->GetXaxis()->SetRangeUser(search_x_min,search_x_max); TLine *tline = new TLine(search_x_min,1.,search_x_max,1.); // Setting style //EstHistD->SetMaximum(1.4); //EstHistD->GetXaxis()->SetLabelFont(42); //EstHistD->GetXaxis()->SetLabelOffset(0.007); //EstHistD->GetXaxis()->SetLabelSize(0.04); EstHistD->GetXaxis()->SetTitleSize(0.12); EstHistD->GetXaxis()->SetTitleOffset(0.9); EstHistD->GetXaxis()->SetTitleFont(42); //EstHistD->GetYaxis()->SetLabelFont(42); //EstHistD->GetYaxis()->SetLabelOffset(0.007); //EstHistD->GetYaxis()->SetLabelSize(0.04); EstHistD->GetYaxis()->SetTitleSize(0.13); EstHistD->GetYaxis()->SetTitleOffset(0.5); EstHistD->GetYaxis()->SetTitleFont(42); EstHistD->GetXaxis()->SetTitle(xtitlename); EstHistD->GetYaxis()->SetTitle(ytitlename); EstHistD->SetTitle(""); EstHistD->Draw(); tline->SetLineStyle(2); tline->Draw(); } if(choice==1){ /* TH1D * denominator = static_cast<TH1D*>(EstHist->Clone("denominator")); EstHistD->Add(GenHistD,-1); denominator->Divide(EstHistD,GenHistD,1,1,""); */ TH1D * denominator = static_cast<TH1D*>(EstHist->Clone("denominator")); //EstHistD->Add(GenHistD,-1); denominator->Divide(GenHistD,EstHistD,1,1,""); // draw bottom figure canvas_dw->cd(); // font size denominator->GetXaxis()->SetLabelSize(font_size_dw); denominator->GetXaxis()->SetTitleSize(font_size_dw); denominator->GetYaxis()->SetLabelSize(font_size_dw); denominator->GetYaxis()->SetTitleSize(font_size_dw); TLine *tline = new TLine(search_x_min,1.,search_x_max,1.); // // Common to all bottom plots // //sprintf(ytitlename,"#frac{Estimate - #tau_{had} BG}{#tau_{had} BG} "); sprintf(ytitlename,"#frac{Expectation}{Prediction} "); denominator->SetMaximum(2.65); denominator->SetMinimum(0.0); // // Specific to each bottom plot // // Setting style //denominator->SetMaximum(1.4); //denominator->GetXaxis()->SetLabelFont(42); //denominator->GetXaxis()->SetLabelOffset(0.007); //denominator->GetXaxis()->SetLabelSize(0.04); denominator->GetXaxis()->SetTitleSize(0.12); denominator->GetXaxis()->SetTitleOffset(0.9); denominator->GetXaxis()->SetTitleFont(42); //denominator->GetYaxis()->SetLabelFont(42); //denominator->GetYaxis()->SetLabelOffset(0.007); //denominator->GetYaxis()->SetLabelSize(0.04); denominator->GetYaxis()->SetTitleSize(0.13); denominator->GetYaxis()->SetTitleOffset(0.5); denominator->GetYaxis()->SetTitleFont(42); denominator->GetXaxis()->SetTitle(xtitlename); denominator->GetYaxis()->SetTitle(ytitlename); denominator->SetTitle(""); denominator->Draw(); tline->SetLineStyle(2); tline->Draw(); } sprintf(tempname,"%s_SearchBin_Plot.png",sample.c_str()); canvas->Print(tempname); }
void kees_gen() { gROOT->SetStyle("HALLA"); TCanvas *cn = new TCanvas("cn"); cn->Draw(); cn->UseCurrentStyle(); TH1F *frm = new TH1F("frm","",100,0.,10.); frm->GetXaxis()->SetTitle("Q^{2} [GeV^{2}]"); frm->GetYaxis()->SetTitle("G_{E}^{n}"); frm->SetMinimum(-.02); frm->SetMaximum(0.1); frm->UseCurrentStyle(); frm->Draw(); frm->SetAxisRange(0.,5.,"X"); TF1 *genf = new TF1("genf",genff,1.,10.,1); genf->SetLineColor(2); genf->SetLineStyle(2); genf->SetParameter(0,1.); genf->SetParameter(1,.3); genf->SetParameter(0,-0.632); // match to Madey point just below 1.5 // genf->SetParameter(0,.0411/genf->Eval(1.45)); TMultiGraph* mgrDta = new TMultiGraph("Data","G_{E}^{n}"); TLegend *legDta = new TLegend(.54,.6,.875,.90,"","brNDC"); TMultiGraph* wgr = mgrDta; TLegend *wlg = legDta; // the data legDta->SetBorderSize(0); // turn off border legDta->SetFillStyle(0); datafile_t *f = datafiles; TGraph* gr=0; while ( f && f->filename ) { gr=OneGraph(f); if (gr) { if (f->lnpt) { mgrDta->Add(gr,f->lnpt); legDta->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { mgrDta->Add(gr,"p"); legDta->AddEntry(gr,f->label,"p"); } else { mgrDta->Add(gr,"l"); legDta->AddEntry(gr,f->label,"l"); } } f++; } mgrDta->Draw("p"); // legDta->Draw(); don't draw the data legend TMultiGraph* mgrThry = new TMultiGraph("Theory","G_{E}^{n}"); TLegend *legThry = new TLegend(.54,.6,.875,.9,"","brNDC"); wgr = mgrThry; wlg = legThry; // the theory wlg->SetBorderSize(0); // turn off border wlg->SetFillStyle(0); f = theoryfiles1; gr=0; while ( f && f->filename ) { gr=OneGraph(f); if (gr) { TGraphAsymmErrors *egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetN()>1 && egr->GetEYhigh() && egr->GetEYhigh()[1]>0) { gr = toerror_band(egr); gr->SetFillStyle(3000+f->style); } if (f->lnpt) { wgr->Add(gr,f->lnpt); wlg->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { wgr->Add(gr,"p"); wlg->AddEntry(gr,f->label,"p"); } else { wgr->Add(gr,"l"); wlg->AddEntry(gr,f->label,"l"); } } f++; } genf->Draw("same"); mgrThry->Draw("c"); legThry->AddEntry(genf,"F_{2}/F_{1} #propto ln^{2}(Q^{2}/#Lambda^{2})/Q^{2}","l"); legThry->Draw(); // draw a line at 1 cn->Modified(); cn->Update(); cn->SaveAs(Form("%s.eps",psfile)); cn->SaveAs(Form("%s.root",psfile)); gSystem->Exec(Form("./replace_symbols.pl %s.eps",psfile)); // now an overlay, hopefully matching dimensions // remove everything but the graph cn->Update(); TList *clist = cn->GetListOfPrimitives(); TFrame* frame = cn->GetFrame(); for (int i=0; i<clist->GetSize(); ) { if (clist->At(i) != frame) { clist->RemoveAt(i); } else i++; } // draw markers in the corners TMarker *mkr = new TMarker(frame->GetX1(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX1(),frame->GetY2(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY2(),2); mkr->Draw(); frame->SetLineColor(10); cn->Update(); datafile_t miller = { "figure_input/Miller/lattice.GEn.rtf","Miller", "[0]","[1]","[1]-[3]","[2]-[1]",0,0,1,3,"F" }; gr = OneGraph(&miller); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+miller.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("gen_Miller_Overlay.eps"); cn->SaveAs("gen_Miller_Overlay.root"); }
void q4gep_jan2009() { gROOT->SetStyle("HALLA"); TCanvas *cn = new TCanvas("cn"); cn->Draw(); TH1F *frm = new TH1F("frm","",100,0.,15.); #ifndef DIFF_LAB frm->GetXaxis()->SetTitle("Q^{2} [GeV^{2}]"); #endif #ifdef DIFF_LAB frm->GetXaxis()->SetTitle("Q^{2} in GeV^{2}"); #endif frm->GetXaxis()->CenterTitle(); #ifndef DIFF_LAB frm->GetYaxis()->SetTitle("Q^{4} G_{E}^{p}"); #endif #ifdef DIFF_LAB frm->GetYaxis()->SetTitle("#muG_{Ep}/G_{Mp}"); #endif frm->GetYaxis()->CenterTitle(); frm->SetMinimum(-0.1); frm->SetMaximum(0.4); frm->UseCurrentStyle(); frm->Draw(); TF1 *ff = new TF1("ff",fff,1.,10.,1.); ff->SetLineColor(2); ff->SetLineStyle(2); ff->SetParameter(0,1.); ff->SetParameter(1,.3); // match to Gayou point at 5.54 GeV^2 ff->SetParameter(0,.1035); TMultiGraph* mgrDta = new TMultiGraph("Data","#frac{#mu_{p}G_{E}^{p}}{G_{M}^{p}}"); //TLegend *legDta = new TLegend(.58,.565,.875,.9,"","brNDC"); TLegend *legDta = new TLegend(.648,.682,.945,.900,"","brNDC"); TMultiGraph* wgr = mgrDta; TLegend *wlg = legDta; // the data legDta->SetBorderSize(0); // turn off border legDta->SetFillStyle(0); datafile_t *f = datafiles; TGraph* gr=0; TGraph* ogr=0; while ( f && f->filename ) { ogr=OneGraph(f); if (ogr) { gr = fromGEpGMptoQ4GEp(ogr); gr->SetLineWidth(2); if (f->lnpt) { mgrDta->Add(gr,f->lnpt); legDta->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { mgrDta->Add(gr,"p"); legDta->AddEntry(gr,f->label,"p"); } else { mgrDta->Add(gr,"l"); legDta->AddEntry(gr,f->label,"l"); } } f++; } mgrDta->Draw("p"); legDta->Draw();// don't draw the data legend TMultiGraph* mgrThry = new TMultiGraph("Theory","#frac{#mu_{p}G_{E}^{p}}{G_{M}^{p}}"); // TLegend *legThry = new TLegend(.585,.6,.9,.9,"","brNDC"); TLegend *legThry = new TLegend(.335,.689,.649,.911,"","brNDC"); wgr = mgrThry; wlg = legThry; // the theory wlg->SetBorderSize(0); // turn off border wlg->SetFillStyle(0); f = theoryfiles1; ogr=0; while ( f && f->filename ) { ogr=OneGraph(f); if (ogr) { gr = fromGEpGMptoQ4GEp(ogr); TGraphAsymmErrors *egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[0]>0) { gr = toerror_band(egr); gr->SetFillStyle(3000+f->style); } gr->SetLineWidth(2); if (f->lnpt) { wgr->Add(gr,f->lnpt); if( f->label[0] != 'x' ){ wlg->AddEntry(gr,f->label,f->lnpt); } } else if (gr->GetMarkerStyle()>=20) { wgr->Add(gr,"p"); if( f->label[0] != 'x' ){ wlg->AddEntry(gr,f->label,"p"); } } else { wgr->Add(gr,"l"); if( f->label[0] != 'x' ){ wlg->AddEntry(gr,f->label,"l"); } } } f++; } mgrThry->Draw("c"); #ifdef PQCD ff->Draw("same"); legThry->AddEntry(ff,"F2/F1 #propto ln^{2}(Q^{2}/#Lambda^{2})/Q^{2}","l"); #endif// PQCD legThry->Draw(); cn->Modified(); cn->Update(); TFrame* frame = gPad->GetFrame(); // draw a line at 1 TLine *line1 = new TLine(frame->GetX1(),1.,frame->GetX2(),1.); line1->SetLineStyle(1); line1->Draw(); return; cn->Update(); cn->SaveAs(Form("%s.eps",psfile)); cn->SaveAs(Form("%s.root",psfile)); gSystem->Exec(Form("./replace_symbols.pl %s.eps",psfile)); // now an overlay, hopefully matching dimensions // remove everything except the frame cn->Update(); TList *clist = cn->GetListOfPrimitives(); frame = cn->GetFrame(); for (int i=0; i<clist->GetSize(); ) { if (clist->At(i) != frame) { clist->RemoveAt(i); } else i++; } // draw markers in the corners TMarker *mkr = new TMarker(frame->GetX1(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX1(),frame->GetY2(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY2(),2); mkr->Draw(); frame->SetLineColor(10); { datafile_t goeckeler = { "figure_input/Goeckeler/goeckeler.dat","Goeckeler", "[0]","[1]","[1]-[2]","[3]-[1]",0,0,1,4,"F" }; gr = OneGraph(&goeckeler); TGraphAsymmErrors *egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+goeckeler.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("mup_gep_gmp_goeckeler_Overlay.eps"); cn->SaveAs("mup_gep_gmp_goeckeler_Overlay.root"); // remove Goeckeler curve from plot clist->Remove(gr); } { datafile_t miller = { "figure_input/Miller/lattice.GEp_GMp.rtf","Miller", "[0]","[1]","[1]-[3]","[2]-[1]",0,0,1,3,"F" }; gr = OneGraph(&miller); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+miller.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("mup_gep_gmp_Miller_Overlay.eps"); cn->SaveAs("mup_gep_gmp_Miller_Overlay.root"); clist->Remove(gr); } { datafile_t zanotti = { "figure_input/Zanotti/zanotti_gepgmp.dat","Zanotti", "[0]","[1]","[1]-[2]","[3]-[1]",0,0,1,6,"F" }; gr = OneGraph(&zanotti); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+zanotti.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("mup_gep_gmp_Zanotti_Overlay.eps"); cn->SaveAs("mup_gep_gmp_Zanotti_Overlay.root"); clist->Remove(gr); } }
void slopetest(){ string dist = "maos210"; double nevts = 2*50000.0; string dim = "mt"; double p1=0, p2=0, p3=0; double dx = 0; double eps = 0.2; if( dim == "mt" ){ p1 = 172.0; p2 = 172.5, p3 = 173.0; //p1 = 172.5; p2 = 173, p3 = 173.5; //p1 = 166.0; p2 = 166.5, p3 = 167.0; //p1 = 178.0; p2 = 178.5, p3 = 179.0; } if( dim == "jes" ){ p1 = 0.999; p2 = 1.000, p3 = 1.001; } if( dist == "mbl" ){ dx = 2.8; } if( dist == "mt2_221" ){ dx = 1.9; } TFile *f = new TFile("../results/plotsTemplates.root"); TDirectory *d = (TDirectory*)f->Get((dim+"shape_"+dist+"_gp").c_str()); /* TCanvas *ctemp = (TCanvas*)f->Get(("c_"+dist+"_gp_signal_JSF1000").c_str()); TH1 *h = (TH1*)(ctemp->GetListOfPrimitives()->At(1)); dx = h->GetBinWidth(1); delete ctemp; */ dx = 10; TGraph *gslope = new TGraph(); TGraph *gint = new TGraph(); double sig = 0; double d2sig = 0; TIter nextkey(d->GetListOfKeys()); TKey *key; while( (key = (TKey*)nextkey()) ){ string name = key->GetName(); string classname = key->GetClassName(); TCanvas *c = (TCanvas*)d->Get(name.c_str()); TGraph *g = (TGraph*)(c->GetListOfPrimitives()->At(1)); double y1=0, y2=0; double ycent = 0; for(int i=0; i < g->GetN(); i++){ double x=0, y=0; g->GetPoint(i, x, y); if( x == p1 ) y1 = y; if( x == p2 ) ycent = y; if( x == p3 ) y2 = y; } double slope = y2-y1; string sbin = name; string ntemp = "c"+dist+"_gp"; sbin.erase(sbin.begin(), sbin.begin()+ntemp.length()); if( dist == "mt2_221" ) sbin.erase(sbin.end(), sbin.end()+1); double dbin = atof(sbin.c_str()); double integrand = slope*slope/ycent; gint->SetPoint(gint->GetN(), dbin, integrand); gslope->SetPoint(gslope->GetN(), dbin, slope); sig += slope*slope*eps*eps*-0.5*dx/ycent; d2sig += integrand*dx; } cout << "Projected S(" << eps << ") = " << sig-2.0*nevts << endl; cout << "Projected sigma = " << sqrt(1.0/(d2sig*nevts)) << endl; TCanvas *c1 = new TCanvas(); gslope->SetLineWidth(2); gslope->GetXaxis()->SetTitle("(GeV)"); gslope->GetXaxis()->SetTitleSize(0.05); gslope->GetXaxis()->SetTitleOffset(0.8); gslope->Draw("AC"); TCanvas *c2 = new TCanvas(); gint->SetLineWidth(2); gint->GetXaxis()->SetTitle("(GeV)"); gint->GetXaxis()->SetTitleSize(0.05); gint->GetXaxis()->SetTitleOffset(0.8); gint->Draw("AC"); return; }
void q4gmn_jan2009() { gROOT->SetStyle("HALLA"); TCanvas *cn = new TCanvas("cn"); cn->Draw(); // TH1F *frm = new TH1F("frm","",100,0.,5.5); TH1F *frm = new TH1F("frm","",100,0.,20.); frm->GetXaxis()->SetTitle("Q^{2} [GeV^{2}]"); frm->GetXaxis()->CenterTitle(); frm->GetYaxis()->SetTitle("Q^{4} G_{M}^{n}/#mu_{n}"); frm->GetYaxis()->CenterTitle(); frm->SetMinimum(0.0); frm->SetMaximum(0.6); frm->UseCurrentStyle(); frm->Draw(); TMultiGraph* mgrDta = new TMultiGraph("Data","G_{M}^{n}/#mu_{n}G_{D}"); TLegend *legDta = new TLegend(0.5029,.2076,.9095,.3877,"","brNDC"); TMultiGraph* wgr = mgrDta; TLegend *wlg = legDta; // the data legDta->SetBorderSize(0); // turn off border legDta->SetFillStyle(0); datafile_t *f = datafiles; TGraph* gr=0; TGraph* ogr=0; while ( f && f->filename ) { ogr=OneGraph(f); if (ogr) { gr = fromGMnGDtoQ4GMn(ogr); if (f->lnpt) { mgrDta->Add(gr,f->lnpt); legDta->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { mgrDta->Add(gr,"p"); legDta->AddEntry(gr,f->label,"p"); } else { mgrDta->Add(gr,"l"); legDta->AddEntry(gr,f->label,"l"); } } f++; } mgrDta->Draw("p"); legDta->Draw(); // don't draw the data legend TMultiGraph* mgrThry = new TMultiGraph("Theory",""); TLegend *legThry = new TLegend(0.1868,.1949,.5287,.3432,"","brNDC"); wgr = mgrThry; wlg = legThry; // the theory wlg->SetBorderSize(0); // turn off border wlg->SetFillStyle(0); f = theoryfiles1; ogr=0; while ( f && f->filename ) { ogr=OneGraph(f); if (ogr) { gr = fromGMnGDtoQ4GMn(ogr); TGraphAsymmErrors *egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[0]>0) { gr = toerror_band(egr); gr->SetFillStyle(3000+f->style); } gr->SetLineWidth(2); if (f->lnpt) { wgr->Add(gr,f->lnpt); wlg->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { wgr->Add(gr,"p"); wlg->AddEntry(gr,f->label,"p"); } else { wgr->Add(gr,"l"); wlg->AddEntry(gr,f->label,"l"); } } f++; } mgrThry->Draw("c"); legThry->Draw(); // draw a line at 1 cn->Modified(); cn->Update(); TFrame* frame = gPad->GetFrame(); TLine *line1 = new TLine(frame->GetX1(),1.,frame->GetX2(),1.); line1->SetLineStyle(1); line1->Draw(); cn->Update(); cn->SaveAs(Form("%s.eps",psfile)); cn->SaveAs(Form("%s.root",psfile)); gSystem->Exec(Form("./replace_symbols.pl %s.eps",psfile)); return; // remove everything but the graph cn->Update(); TList *clist = cn->GetListOfPrimitives(); frame = cn->GetFrame(); for (int i=0; i<clist->GetSize(); ) { if (clist->At(i) != frame) { clist->RemoveAt(i); } else i++; } // draw markers in the corners TMarker *mkr = new TMarker(frame->GetX1(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX1(),frame->GetY2(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY2(),2); mkr->Draw(); frame->SetLineColor(10); cn->Update(); { datafile_t miller = { "figure_input/Miller/lattice.GMn.rtf","Miller", "[0]","[1]/(-1.91)*(1+[0]/.71)*(1+[0]/.71)", "([3]-[1])/(-1.91)*(1+[0]/.71)*(1+[0]/.71)", "([1]-[2])/(-1.91)*(1+[0]/.71)*(1+[0]/.71)", 0,0,1,3,"F" }; gr = OneGraph(&miller); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+miller.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("gmngd_Miller_Overlay.eps"); cn->SaveAs("gmngd_Miller_Overlay.root"); clist->Remove(gr); } { datafile_t miller_spl = { "figure_input/Miller/lattice.GMn.spl3","Miller", "[0]","[1]/(-1.91)*(1+[0]/.71)*(1+[0]/.71)", "([3]-[1])/(-1.91)*(1+[0]/.71)*(1+[0]/.71)", "([1]-[2])/(-1.91)*(1+[0]/.71)*(1+[0]/.71)", 0,0,1,3,"F" }; gr = OneGraph(&miller_spl); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+miller_spl.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("gmngd_Miller_Overlay_spl.eps"); cn->SaveAs("gmngd_Miller_Overlay_spl.root"); clist->Remove(gr); } }
void geugd_riordan() { gROOT->SetStyle("HALLA"); TCanvas *cn = new TCanvas("cn"); cn->Draw(); cn->UseCurrentStyle(); TH1F *frm = new TH1F("frm","",100,0.,12.); frm->GetXaxis()->SetTitle("Q^{2} [GeV^{2}]"); frm->GetXaxis()->CenterTitle(); frm->GetYaxis()->SetTitle("G_{E}^{u}/G_{D}"); frm->GetYaxis()->CenterTitle(); frm->SetMinimum(.40); frm->SetMaximum(2.4); //frm->SetMaximum(0.3); frm->UseCurrentStyle(); frm->Draw(); frm->SetAxisRange(0.10,12.,"X"); TF1* galster = new TF1("galster", "x/(4.*0.938*.938)*1.91/(1.+x/.71)^2/(1.+5.6*x/(4.*.938*.938))", 0.,4.); galster->SetLineColor(kBlack); galster->SetLineStyle(kBlack); galster->SetLineWidth(2); TF1* gen0 = new TF1("gen0", f1dugen0, 0.,12.); gen0->SetLineColor(kBlack); gen0->SetLineStyle(kBlack); gen0->SetLineWidth(1); TF1 *genf = new TF1("genf",genff,1.,10.,1); genf->SetLineColor(kBlue); genf->SetLineStyle(1); genf->SetParameter(0,1.); // match to Madey point just below 1.5 // genf->SetParameter(0,.0411/genf->Eval(1.45)); // genf->SetParameter(0,-0.558645); genf->SetParameter(0,-0.182645); TF1 *roberts_curve = new TF1("roberts",roberts_gen,0.035,12.344,1); roberts_curve->SetLineColor(kRed); roberts_curve->SetLineStyle(9); TF1 *ourfit = new TF1("ourfit",gen_ourfit,0.,10.,0); ourfit->SetLineColor(kBlue); ourfit->SetLineStyle(0); /* TF1 *bbba05 = new TF1("BBBA05",gen_bbba05,0.,10.,0); bbba05->SetLineColor(kGreen); bbba05->SetLineStyle(3); */ // TF1 *lomon = new TF1("Lomon",Lomon_GEn,0.,10.,0); // lomon->SetLineColor(7); // lomon->SetLineStyle(4); TMultiGraph* mgrDta = new TMultiGraph("Data","G_{E}^{n}"); //TLegend *legDta = new TLegend(.3448,.6123,.6810,.9110,"","brNDC"); TLegend *legDta = new TLegend(.6020,.4004,.9382,.9089,"","brNDC"); TMultiGraph* wgr = mgrDta; TLegend *wlg = legDta; // the data legDta->SetBorderSize(0); // turn off border legDta->SetFillStyle(0); datafile_t *f = datafiles; TGraph* gr=0; TGraph* ogr=0; while ( f && f->filename ) { ogr=OneGraph(f); if (ogr) { gr = fromGEntransform(ogr); gr->SetLineStyle(0); if (f->lnpt) { mgrDta->Add(gr,f->lnpt); if( f->label[0] != 'x' ) legDta->AddEntry(gr,f->label,f->lnpt); } mgrDta->Add(gr,"p"); if( f->label[0] != 'x' ) legDta->AddEntry(gr,f->label,"p"); /* else if (gr->GetMarkerStyle()>=20) { mgrDta->Add(gr,"p"); if( f->label[0] != 'x' ) legDta->AddEntry(gr,f->label,"p"); } else { mgrDta->Add(gr,"l"); if( f->label[0] != 'x' ) legDta->AddEntry(gr,f->label,"l"); } */ } f++; } mgrDta->Draw("p"); legDta->Draw(); TMultiGraph* mgrThry = new TMultiGraph("Theory","G_{E}^{n}"); // TLegend *legThry = new TLegend(.546,.6208,.8822,.9195,"","brNDC"); // TLegend *legThry = new TLegend(.2055,.7013,.6020,.8893,"","brNDC"); TLegend *legThry = new TLegend(.4267,.8453,.6236,.8962,"","brNDC"); wgr = mgrThry; wlg = legThry; // the theory wlg->SetBorderSize(0); // turn off border wlg->SetFillStyle(0); f = theoryfiles1; gr=0; Bool_t isfill; while ( f && f->filename ) { gr=OneGraph(f); gr->SetLineWidth(2); isfill = kFALSE; if (gr) { TGraphAsymmErrors *egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetN()>1 && egr->GetEYhigh() && egr->GetEYhigh()[1]>0) { gr = toerror_band(egr); gr->SetFillStyle(3000+f->style); gr->SetFillStyle(1); gr->SetFillColor(gr->GetLineColor()); isfill = kTRUE; } if (f->lnpt) { wgr->Add(gr,f->lnpt); if( f->label[0] != 'x' ) wlg->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { wgr->Add(gr,"p"); if( f->label[0] != 'x' ) wlg->AddEntry(gr,f->label,"p"); } else { if( isfill ){ gr->SetLineStyle(0); wgr->Add(gr,"f"); // wgr->Add( new TGraph(*egr),"l"); if( f->label[0] != 'x' ) wlg->AddEntry(gr,f->label,"lf"); } else { wgr->Add(gr,"l"); if( f->label[0] != 'x' ) wlg->AddEntry(gr,f->label,"l"); } } } f++; } TPaveLabel *prelim = new TPaveLabel( 0.3204, 0.1886, 0.9310, 0.4643, "PRELIMINARY", "NDC" ); prelim->SetTextAngle(0); TColor *pink = new TColor(300, 1.0, 0.7, 0.7, "pink"); prelim->SetTextColor(300); prelim->SetFillStyle(0); prelim->SetBorderSize(0); #ifdef FAKE_SCHIAVILLA TGraph *schiagraph = draw_schiavilla(); schiagraph->Draw("F"); schiagraph = draw_schiavilla(1); schiagraph->Draw("C"); legThry->AddEntry(schiagraph, "d(e,e'd) T_{20} - Schiavilla & Sick", "LF"); #endif #ifdef PRELIMINARY prelim->Draw("same"); #endif TPaveLabel *nofsilab = new TPaveLabel( 0.4569, 0.1674, 0.7514, 0.2415, "No FSI Corrections", "NDC" ); nofsilab->SetFillStyle(0); nofsilab->SetBorderSize(0); nofsilab->SetTextColor(kRed); #ifdef NOFSI // nofsilab->Draw("same"); #endif #ifdef PQCD genf->Draw("same"); #endif mgrThry->Draw("c"); #ifdef GALSTER galster->Draw("same"); #endif // gen0->Draw("same"); #ifdef NEW_ROBERTS roberts_curve->Draw("same"); #endif // ourfit->Draw("same"); // bbba05->Draw("same"); //lomon->Draw("same"); // bandi->Draw("same"); #ifdef PQCD legThry->AddEntry(genf,"F_{2}/F_{1} #propto ln^{2}(Q^{2}/#Lambda^{2})/Q^{2}","l"); #endif #ifdef GALSTER legThry->AddEntry(galster,"Galster fit (1971)","l"); #endif // legThry->AddEntry(gen0,"G_{E}^{n} = 0","l"); #ifdef NEW_ROBERTS legThry->AddEntry(roberts_curve,"q(qq) Faddeev - I. Cloet, ANL","l"); #endif // legThry->AddEntry(bbba05,"BBBA05","l"); // legThry->AddEntry(lomon, "Lomon", "l"); // legThry->AddEntry(ourfit, "Our Fit", "l"); legThry->Draw(); legDta->Draw(); mgrDta->Draw("p"); legDta->Draw(); TEllipse *cir1 = new TEllipse(1.31, 0.0, 0.17, 0.0065); TEllipse *cir2 = new TEllipse(2.4, 0.0, 0.17, 0.0065); cir1->SetFillStyle(0); cir2->SetFillStyle(0); #ifdef PLOTKIN1 cir1->Draw("same"); // cir2->Draw("same"); // TPaveLabel *exacc = new TPaveLabel( 0.3779, 0.2691, 0.5963, 0.3114, "Expected Accuracy", "NDC"); TPaveLabel *exacc = new TPaveLabel( 0.2716, 0.2733, 0.4899, 0.3136, "Expected Accuracy", "NDC"); exacc->SetFillStyle(0); exacc->SetBorderSize(0); exacc->Draw("same"); #endif // draw a line at 1 cn->Modified(); cn->Update(); cn->SaveAs(Form("%s.pdf",psfile)); cn->SaveAs(Form("%s.eps",psfile)); // cn->SaveAs(Form("%s.root",psfile)); // gSystem->Exec(Form("./replace_symbols.pl %s.eps",psfile)); // cn->SaveAs("bogdan_gen.eps"); return; // LEAVING HERE // now an overlay, hopefully matching dimensions // remove everything but the graph cn->Update(); TList *clist = cn->GetListOfPrimitives(); TFrame* frame = cn->GetFrame(); for (int i=0; i<clist->GetSize(); ) { if (clist->At(i) != frame) { clist->RemoveAt(i); } else i++; } // draw markers in the corners TMarker *mkr = new TMarker(frame->GetX1(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX1(),frame->GetY2(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY2(),2); mkr->Draw(); frame->SetLineColor(10); cn->Update(); datafile_t miller = { "figure_input/Miller/lattice.GEn.rtf","Miller", "[0]","[1]","[1]-[3]","[2]-[1]",0,0,1,3,"F" }; gr = OneGraph(&miller); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+miller.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("gen_Miller_Overlay.pdf"); cn->SaveAs("gen_Miller_Overlay.root"); }
void plotXY(char* fname){ // input: root file from GBL gStyle->SetOptStat(0); Double_t w = 1.2; // number of RMS for gaussian fit TString filename = fname; TCanvas *cTop = new TCanvas("cTop","Residuals in lab frame, TOP", 800, 1000); TCanvas *cBot = new TCanvas("cBot","Residuals in lab frame, BOTTOM",800, 1000); cTop->SetFillColor(kBlue-10); cTop->SetFillStyle(3001); cBot->SetFillColor(kMagenta-10); cBot->SetFillStyle(3001); Double_t halfWid = 38.34/2.; Double_t halfLen = 98.33/2.; TBox *module = new TBox(-halfLen, -halfWid, halfLen, halfWid); module->SetLineColor(kMagenta); module->SetFillStyle(0); Int_t ic=0; TFile *f = new TFile(filename.Data()); // extract string Int_t idx2 = filename.Index("/"); Int_t idx1 = filename.Index("_"); TString outn = filename(idx1+1,idx2-(idx1+1)); TString outname ="predXY_"; outname += outn.Data(); outname += ".txt"; TString topName ="predXY_"; topName += outn.Data(); topName += "_topO.gif"; TString botName ="predXY_"; botName += outn.Data(); botName += "_botO.gif"; // ofstream outf(outname.Data()); // top Int_t nrow = 13; Double_t space = 0.007; Double_t space1 = 0.03; Double_t y2 = 1./13*nrow-space1; Double_t y1 = 1./13*(--nrow)-space1; TPad *tp1 = new TPad("tp1","tp1",0.33,y1,0.66,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *tp2 = new TPad("tp2","tp2",0.33,y1,0.66,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *tp3 = new TPad("tp3","tp3",0.33,y1,0.66,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *tp4 = new TPad("tp4","tp4",0.33,y1,0.66,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *tp5 = new TPad("tp5","tp5",0.33,y1,0.66,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *tp6 = new TPad("tp6","tp6",0.33,y1,0.66,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; Double_t off = 0.12; off = 0.165; y1 -= space1; y2 -= space1; space1 *= 2; TPad *tp7 = new TPad("tp7","tp7",0.+off,y1,0.33+off,y2); TPad *tp8 = new TPad("tp8","tp8",0.66-off,y1,1.-off,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *tp9 = new TPad("tp9","tp9",0.+off,y1,0.33+off,y2); TPad *tp10 = new TPad("tp10","tp10",0.66-off,y1,1.-off,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *tp11 = new TPad("tp11","tp11",0.+off,y1,0.33+off,y2); TPad *tp12 = new TPad("tp12","tp12",0.66-off,y1,1.-off,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *tp13 = new TPad("tp13","tp13",0.+off,y1,0.33+off,y2); TPad *tp14 = new TPad("tp14","tp14",0.66-off,y1,1.-off,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *tp15 = new TPad("tp15","tp15",0.+off,y1,0.33+off,y2); TPad *tp16 = new TPad("tp16","tp16",0.66-off,y1,1.-off,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *tp17 = new TPad("tp17","tp17",0.+off,y1,0.33+off,y2); TPad *tp18 = new TPad("tp18","tp18",0.66-off,y1,1.-off,y2); cout << " TOP " << endl; cTop->cd(); tp1->Draw(); tp2->Draw(); tp3->Draw(); tp4->Draw(); tp5->Draw(); tp6->Draw(); tp7->Draw(); tp8->Draw(); tp9->Draw(); tp10->Draw(); tp11->Draw(); tp12->Draw(); tp13->Draw(); tp14->Draw(); tp15->Draw(); tp16->Draw(); tp17->Draw(); tp18->Draw(); ic = 2; Int_t ipad=0; for(Int_t i=1; i<4; i++){ TString hisname = "h_xy_module_L"; hisname += i; hisname += "t_halfmodule_axial_sensor0"; TString layer = "L"; layer+=i; layer+= "TA"; TH2D *his2 = (TH2D*) f->Get(hisname.Data()); TH1D *his = (TH1D*)his2->ProjectionY(); ipad++; TString pd = "tp"; pd+=ipad; TPad *pad = (TPad*) cTop->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); Double_t low = his->GetMean()-w*his->GetRMS(); Double_t up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); TF1 *fit = his->GetFunction("gaus"); // cout << "sensor " << i << " axial mean : " << his->GetMean()*1000. << " - RMS : " << his->GetRMS()*1000. << " (um) " << " " << his->GetEntries() << endl; // cout << "sensor " << i << " axial mu : " << fit->GetParameter(1)*1000. << " - sigma : " << fit->GetParameter(2)*1000. << " (um) " << endl; // outf << layer.Data() << " " << fit->GetParameter(1)*1000. << " " << fit->GetParameter(2)*1000. << " " << his->GetEntries() << endl; hisname = "h_xy_module_L"; hisname += i; hisname += "t_halfmodule_stereo_sensor0"; layer = "L"; layer+=i; layer+= "TS"; his2 = (TH2D*) f->Get(hisname.Data()); his = (TH1D*)his2->ProjectionY(); ipad++; pd = "tp"; pd+=ipad; pad = (TPad*) cTop->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); } // ic = 19; for(Int_t i=4; i<7; i++){ TString hisname = "h_xy_module_L"; hisname += i; TString hisname2 = hisname; hisname += "t_halfmodule_axial_hole_sensor0"; hisname2 += "t_halfmodule_axial_slot_sensor0"; TH2D *hisOther = (TH2D*) f->Get(hisname2.Data()); Double_t norma2 = hisOther->GetMaximum(); TString layer = "L"; layer+=i; layer+= "TAHo"; TH2D *his2 = (TH2D*) f->Get(hisname.Data()); TH1D *his = (TH1D*)his2->ProjectionY(); Double_t norma1 = his2->GetMaximum(); Double_t normamax = TMath::Max(norma1,norma2); his2->SetMaximum(normamax); ipad++; TString pd = "tp"; pd+=ipad; TPad *pad = (TPad*) cTop->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); Double_t low = his->GetMean()-w*his->GetRMS(); Double_t up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); TF1 *fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; hisname2 = hisname; hisname += "t_halfmodule_stereo_hole_sensor0"; hisname2 += "t_halfmodule_stereo_slot_sensor0"; TH2D *hisOther = (TH2D*) f->Get(hisname2.Data()); norma2 = hisOther->GetMaximum(); TString layer = "L"; layer+=i; layer+= "TAHo"; TH2D *his2 = (TH2D*) f->Get(hisname.Data()); TH1D *his = (TH1D*)his2->ProjectionY(); norma1 = his2->GetMaximum(); normamax2 = TMath::Max(norma1,norma2); his2->SetMaximum(normamax2); layer = "L"; layer+=i; layer+= "TSHo"; his2 = (TH2D*) f->Get(hisname.Data()); his = (TH1D*)his2->ProjectionY(); ipad++; ipad++; pd = "tp"; pd+=ipad; pad = (TPad*) cTop->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; hisname += "t_halfmodule_axial_slot_sensor0"; layer = "L"; layer+=i; layer+= "TASl"; his2 = (TH2D*) f->Get(hisname.Data()); his2->SetMaximum(normamax); his = (TH1D*)his2->ProjectionY(); ipad--; pd = "tp"; pd+=ipad; pad = (TPad*) cTop->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; hisname += "t_halfmodule_stereo_slot_sensor0"; layer = "L"; layer+=i; layer+= "TSSl"; his2 = (TH2D*) f->Get(hisname.Data()); his2->SetMaximum(normamax2); his = (TH1D*)his2->ProjectionY(); ipad++; ipad++; pd = "tp"; pd+=ipad; pad = (TPad*) cTop->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); } cout << endl; cout << "------------------------" << endl; cout << endl; cout << " BOTTOM " << endl; nrow = 13; space = 0.007; space1 = 0.03; y2 = 1./13*nrow-space1; y1 = 1./13*(--nrow)-space1; TPad *bp1 = new TPad("bp1","bp1",0.33,y1,0.66,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *bp2 = new TPad("bp2","bp2",0.33,y1,0.66,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *bp3 = new TPad("bp3","bp3",0.33,y1,0.66,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *bp4 = new TPad("bp4","bp4",0.33,y1,0.66,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *bp5 = new TPad("bp5","bp5",0.33,y1,0.66,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *bp6 = new TPad("bp6","bp6",0.33,y1,0.66,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; off = 0.165; y1 -= space1; y2 -= space1; space1 *= 2; TPad *bp7 = new TPad("bp7","bp7",0.+off,y1,0.33+off,y2); TPad *bp8 = new TPad("bp8","bp8",0.66-off,y1,1.-off,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *bp9 = new TPad("bp9","bp9",0.+off,y1,0.33+off,y2); TPad *bp10 = new TPad("bp10","bp10",0.66-off,y1,1.-off,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *bp11 = new TPad("bp11","bp11",0.+off,y1,0.33+off,y2); TPad *bp12 = new TPad("bp12","bp12",0.66-off,y1,1.-off,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *bp13 = new TPad("bp13","bp13",0.+off,y1,0.33+off,y2); TPad *bp14 = new TPad("bp14","bp14",0.66-off,y1,1.-off,y2); y2 = y1-space; y1 = 1./13.*(--nrow)-space1; TPad *bp15 = new TPad("bp15","bp15",0.+off,y1,0.33+off,y2); TPad *bp16 = new TPad("bp16","bp16",0.66-off,y1,1.-off,y2); y2 = y1; y1 = 1./13.*(--nrow)-space1; TPad *bp17 = new TPad("bp17","bp17",0.+off,y1,0.33+off,y2); TPad *bp18 = new TPad("bp18","bp18",0.66-off,y1,1.-off,y2); cBot->cd(); bp1->Draw(); bp2->Draw(); bp3->Draw(); bp4->Draw(); bp5->Draw(); bp6->Draw(); bp7->Draw(); bp8->Draw(); bp9->Draw(); bp10->Draw(); bp11->Draw(); bp12->Draw(); bp13->Draw(); bp14->Draw(); bp15->Draw(); bp16->Draw(); bp17->Draw(); bp18->Draw(); cBot->cd(); bp1->Draw(); bp2->Draw(); bp3->Draw(); bp4->Draw(); bp5->Draw(); bp6->Draw(); bp7->Draw(); bp8->Draw(); bp9->Draw(); bp10->Draw(); bp11->Draw(); bp12->Draw(); bp13->Draw(); bp14->Draw(); bp15->Draw(); bp16->Draw(); bp17->Draw(); bp18->Draw(); ic=0; ipad = 0; for(Int_t i=1; i<4; i++){ TString hisname = "h_xy_module_L"; hisname += i; TString hisname2 = hisname; hisname += "b_halfmodule_stereo_sensor0"; hisname2 += "b_halfmodule_axial_sensor0"; TH2D *hisOther = (TH2D*) f->Get(hisname2.Data()); Double_t norma2 = hisOther->GetMaximum(); TString layer = "L"; layer+=i; layer+= "BS"; TH2D *his2 = (TH2D*) f->Get(hisname.Data()); Double_t norma1 = his2->GetMaximum(); Double_t normamax = TMath::Max(norma1,norma2); // his2->SetMaximum(normamax); TH1D *his = (TH1D*)his2->ProjectionY(); if(layer.Contains("1")){his->SetFillColor(kRed);} else if(layer.Contains("2")){his->SetFillColor(kOrange);} else if(layer.Contains("3")){his->SetFillColor(kYellow);} else if(layer.Contains("4")){his->SetFillColor(kGreen);} else if(layer.Contains("5")){his->SetFillColor(kCyan);} else if(layer.Contains("6")){his->SetFillColor(kBlue);} if(layer.Contains("A")){his->SetFillStyle(3007);} else if(layer.Contains("S")){his->SetFillStyle(3004);} // cBot->cd(++ic); ipad++; TString pd = "bp"; pd+=ipad; TPad *pad = (TPad*) cBot->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); Double_t low = his->GetMean()-w*his->GetRMS(); Double_t up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); TF1 *fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; hisname += "b_halfmodule_axial_sensor0"; layer = "L"; layer+=i; layer+= "BA"; his2 = (TH2D*) f->Get(hisname.Data()); // his2->SetMaximum(normamax); his = (TH1D*)his2->ProjectionY(); ipad++; pd = "bp"; pd+=ipad; pad = (TPad*) cBot->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); } for(Int_t i=4; i<7; i++){ TString hisname = "h_xy_module_L"; hisname += i; TString hisname2 = hisname; hisname += "b_halfmodule_stereo_hole_sensor0"; hisname2 += "b_halfmodule_stereo_slot_sensor0"; TH2D *hisOther = (TH2D*) f->Get(hisname2.Data()); Double_t norma2 = hisOther->GetMaximum(); TString layer = "L"; layer+=i; layer+= "BSHo"; TH2D *his2 = (TH2D*) f->Get(hisname.Data()); TH1D *his = (TH1D*)his2->ProjectionY(); Double_t norma1 = his2->GetMaximum(); Double_t normamax1 = TMath::Max(norma1,norma2); his2->SetMaximum(normamax1); ipad++; TString pd = "bp"; pd+=ipad; TPad *pad = (TPad*) cBot->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); Double_t low = his->GetMean()-w*his->GetRMS(); Double_t up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); TF1 *fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; TString hisname2 = hisname; hisname += "b_halfmodule_axial_hole_sensor0"; hisname2 += "b_halfmodule_axial_slot_sensor0"; TH2D *hisOther = (TH2D*) f->Get(hisname2.Data()); Double_t norma2 = hisOther->GetMaximum(); TString layer = "L"; layer+=i; layer+= "BAHo"; TH2D *his2 = (TH2D*) f->Get(hisname.Data()); TH1D *his = (TH1D*)his2->ProjectionY(); Double_t norma1 = his2->GetMaximum(); Double_t normamax2 = TMath::Max(norma1,norma2); his2->SetMaximum(normamax2); ipad++; ipad++; pd = "bp"; pd+=ipad; pad = (TPad*) cBot->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; hisname += "b_halfmodule_stereo_slot_sensor0"; layer = "L"; layer+=i; layer+= "BSSl"; his2 = (TH2D*) f->Get(hisname.Data()); his2->SetMaximum(normamax1); his = (TH1D*)his2->ProjectionY(); ipad--; pd = "bp"; pd+=ipad; pad = (TPad*) cBot->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); hisname = "h_xy_module_L"; hisname += i; hisname += "b_halfmodule_axial_slot_sensor0"; layer = "L"; layer+=i; layer+= "BASl"; his2 = (TH2D*) f->Get(hisname.Data()); his2->SetMaximum(normamax2); his = (TH1D*)his2->ProjectionY(); ipad++; ipad++; pd = "bp"; pd+=ipad; pad = (TPad*) cBot->GetListOfPrimitives()->FindObject(pd.Data()); pad->cd(); low = his->GetMean()-w*his->GetRMS(); up = his->GetMean()+w*his->GetRMS(); his->Fit("gaus","Q0","",low,up); his2->Draw("colz"); module->Draw("same"); fit = his->GetFunction("gaus"); } // outf.close(); cTop->SaveAs(topName.Data()); cBot->SaveAs(botName.Data()); }
void plot_BGEst_trigger(string cutname="delphi", string histname="MHT"){ /////////////////////////////////////////////////////////////////////////////////////////// ////Some cosmetic work for official documents. //gROOT->LoadMacro("tdrstyle.C"); //setTDRStyle(); //gROOT->LoadMacro("CMS_lumi_v2.C"); gStyle->SetOptStat(0); ///to avoid the stat. on the plots gStyle->SetPalette(1) ; // for better color output char tempname[200]; char tempname2[200]; int W = 600; int H = 600; int H_ref = 600; int W_ref = 800; float T = 0.08*H_ref; float B = 0.12*H_ref; float L = 0.12*W_ref; float R = 0.04*W_ref; TCanvas* canvas = new TCanvas("name","name",10,10,W,H); canvas->SetFillColor(0); canvas->SetBorderMode(0); canvas->SetFrameFillStyle(0); canvas->SetFrameBorderMode(0); canvas->SetLeftMargin( L/W ); canvas->SetRightMargin( R/W ); canvas->SetTopMargin( T/H ); canvas->SetBottomMargin( B/H ); canvas->SetTickx(0); canvas->SetTicky(0); canvas->Divide(1, 2); // // Define pads // TPad * canvas_up = (TPad*) canvas->GetListOfPrimitives()->FindObject("canvas_1"); TPad * canvas_dw = (TPad*) canvas->GetListOfPrimitives()->FindObject("canvas_2"); // set pad size canvas_up->SetPad(0., .25, 0.97, 1.); canvas_dw->SetPad(0., 0.07, 0.97, 0.25); canvas_up->SetFrameFillColor(0); canvas_up->SetFillColor(0); canvas_dw->SetFillColor(0); canvas_dw->SetFrameFillColor(0); canvas_dw->SetBottomMargin(0.3); // set top margin 0 for bottom figure canvas_dw->SetTopMargin(0); Float_t legendX1 = .20; //.50; Float_t legendX2 = .90; //.70; Float_t legendY1 = .70; //.65; Float_t legendY2 = .90; TLegend* catLeg1 = new TLegend(legendX1,legendY1,legendX2,legendY2); catLeg1->SetTextSize(0.032); catLeg1->SetTextFont(42); catLeg1->SetFillColor(0); catLeg1->SetLineColor(0); catLeg1->SetBorderSize(0); TFile *file_NoTrig = new TFile("InputRootFiles/HadTauEstimation_data_SingleMuon_v14c_.root","R"); TFile *file_Mu15 = new TFile("InputRootFiles/HadTauEstimation_data_SingleMuon_v14c_HLT_Mu15_IsoVVVL_PFHT350_PFMET70_v_.root","R"); TFile *file_Mu50 = new TFile("InputRootFiles/HadTauEstimation_data_SingleMuon_v14c_HLT_Mu50_v_.root","R"); TFile *file_Mu15ORMu50 = new TFile("InputRootFiles/HadTauEstimation_data_SingleMuon_v14c_HLT_Mu50_v_OR_HLT_Mu15_IsoVVVL_PFHT350_PFMET70_v_.root","R"); sprintf(tempname,"allEvents/%s/%s_%s_allEvents",cutname.c_str(),histname.c_str(),cutname.c_str()); TH1D * NoTrigHist = (TH1D*)file_NoTrig->Get(tempname)->Clone(); NoTrigHist->SetLineColor(41); NoTrigHist->SetLineWidth(2); TH1D * Mu15Hist = (TH1D*)file_Mu15->Get(tempname)->Clone(); Mu15Hist->SetLineColor(1); Mu15Hist->SetLineWidth(2); TH1D * Mu50Hist = (TH1D*)file_Mu50->Get(tempname)->Clone(); Mu50Hist->SetLineColor(2); Mu50Hist->SetLineWidth(2); TH1D * Mu15ORMu50Hist = (TH1D*)file_Mu15ORMu50->Get(tempname)->Clone(); Mu15ORMu50Hist->SetLineColor(4); Mu15ORMu50Hist->SetLineWidth(2); NoTrigHist->SetMaximum(10.); if(histname=="MHT"){ NoTrigHist->SetMaximum(10.); NoTrigHist->GetXaxis()->SetRangeUser(0.0,1000.); } if(histname=="HT"){ NoTrigHist->SetMaximum(10.); NoTrigHist->GetXaxis()->SetRangeUser(0.0,1500.); } if(histname=="NJet"){ NoTrigHist->SetMaximum(10.); NoTrigHist->GetXaxis()->SetRangeUser(3.0,10.); } if(histname=="NBtag"){ NoTrigHist->SetMaximum(15.); NoTrigHist->GetXaxis()->SetRangeUser(0.0,4.); } NoTrigHist->SetTitle(""); NoTrigHist->GetXaxis()->SetLabelFont(42); NoTrigHist->GetXaxis()->SetLabelOffset(0.007); NoTrigHist->GetXaxis()->SetLabelSize(0.032); NoTrigHist->GetXaxis()->SetTitleSize(0.036); NoTrigHist->GetXaxis()->SetTitleOffset(0.9); NoTrigHist->GetXaxis()->SetTitleFont(42); NoTrigHist->GetYaxis()->SetLabelFont(42); NoTrigHist->GetYaxis()->SetLabelOffset(0.007); NoTrigHist->GetYaxis()->SetLabelSize(0.032); NoTrigHist->GetYaxis()->SetTitleSize(0.036); NoTrigHist->GetYaxis()->SetTitleOffset(1.25); NoTrigHist->GetYaxis()->SetTitleFont(42); sprintf(tempname,"%s",histname.c_str()); NoTrigHist->GetXaxis()->SetTitle(tempname); NoTrigHist->GetYaxis()->SetTitle("#event"); // draw bottom figure canvas_dw->cd(); NoTrigHist->Draw(); // draw top figure canvas_up->cd(); catLeg1->SetHeader("Triggers:"); NoTrigHist->Draw("same,hist"); sprintf(tempname,"(a): No Trigger"); catLeg1->AddEntry(NoTrigHist,tempname,"l"); Mu15Hist->Draw("same,hist"); sprintf(tempname,"(b): HLT_Mu15_IsoVVVL_PFHT350_PFMET70_v"); catLeg1->AddEntry(Mu15Hist,tempname,"l"); Mu50Hist->Draw("same,hist"); sprintf(tempname,"(c): HLT_Mu50_v"); catLeg1->AddEntry(Mu50Hist,tempname,"l"); Mu15ORMu50Hist->Draw("same,hist"); sprintf(tempname,"(d): (b) or (c)"); catLeg1->AddEntry(Mu15ORMu50Hist,tempname,"l"); catLeg1->Draw(); sprintf(tempname,"BGEstWithTriggers_%s_%s.png",cutname.c_str(),histname.c_str()); canvas->Print(tempname); }
void long_Ay_nu_05() { gROOT->SetStyle("HALLA"); TCanvas *cn = new TCanvas("cn","cn",540,360); cn->Draw(); cn->UseCurrentStyle(); TH1F *frm = new TH1F("frm","",100,0.,10.); frm->GetXaxis()->SetTitle("#nu (GeV)"); frm->GetYaxis()->SetTitle("Ay for Q2=0.456 (GeV/c)2"); frm->SetMinimum(0); // frm->SetMinimum(0); // frm->SetMaximum(1.0); frm->SetMaximum(0.35); frm->UseCurrentStyle(); frm->Draw(); frm->SetAxisRange(0.120,0.350,"X"); // frm->SetAxisRange(0.5,1.1,"X"); // TF1* galster = new TF1("galster","x/(4.*0.938*.938)*1.91/(1.+x/.71)^2/(1.+5.6*x/(4.*.938*.938))",0.,4.); // galster->SetLineColor(6); // galster->SetLineStyle(3); // galster->SetLineWidth(2); TF1 *genf = new TF1("genf",genff,1.,10.,1); genf->SetLineColor(2); genf->SetLineStyle(2); genf->SetParameter(0,1.); // match to Madey point just below 1.5 // genf->SetParameter(0,.0411/genf->Eval(1.45)); genf->SetParameter(0,-0.558645); // TF1 *bbba05 = new TF1("BBBA05",gen_bbba05,0.,10.,0); // bbba05->SetLineColor(7); // bbba05->SetLineStyle(3); TMultiGraph* mgrDta = new TMultiGraph("Data","G_{E}^{n}"); TLegend *legDta = new TLegend(.54,.6,.875,.90,"","brNDC"); TMultiGraph* wgr = mgrDta; TLegend *wlg = legDta; // the data legDta->SetBorderSize(0); // turn off border legDta->SetFillStyle(0); datafile_t *f = datafiles; TGraph* gr=0; while ( f && f->filename ) { gr=OneGraph(f); if (gr) { if (f->lnpt) { mgrDta->Add(gr,f->lnpt); legDta->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { mgrDta->Add(gr,"p"); legDta->AddEntry(gr,f->label,"p"); } else { mgrDta->Add(gr,"l"); legDta->AddEntry(gr,f->label,"l"); } } f++; } mgrDta->Draw("p"); // legDta->Draw(); TF1 *theFit = new TF1("theFit","pol0"); gr->Fit(theFit); theFit->Draw("same"); TMultiGraph* mgrThry = new TMultiGraph("Theory","G_{E}^{n}"); TLegend *legThry = new TLegend(.54,.3,.875,.6,"","brNDC"); wgr = mgrThry; wlg = legThry; // the theory wlg->SetBorderSize(0); // turn off border wlg->SetFillStyle(0); f = theoryfiles1; gr=0; while ( f && f->filename ) { gr=OneGraph(f); if (gr) { TGraphAsymmErrors *egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetN()>1 && egr->GetEYhigh() && egr->GetEYhigh()[1]>0) { gr = toerror_band(egr); gr->SetFillStyle(3000+f->style); } if (f->lnpt) { wgr->Add(gr,f->lnpt); wlg->AddEntry(gr,f->label,f->lnpt); } else if (gr->GetMarkerStyle()>=20) { wgr->Add(gr,"p"); wlg->AddEntry(gr,f->label,"p"); } else { wgr->Add(gr,"l"); wlg->AddEntry(gr,f->label,"l"); } } f++; } // genf->Draw("same"); mgrThry->Draw("c"); // galster->Draw("same"); // bbba05->Draw("same"); // legThry->AddEntry(genf,"F_{2}/F_{1} #propto ln^{2}(Q^{2}/#Lambda^{2})/Q^{2}","l"); // legThry->AddEntry(galster,"Galster fit","l"); // legThry->AddEntry(bbba05,"BBBA05","l"); // legThry->Draw(); // legDta->Draw(); // draw a line at 1 cn->Modified(); cn->Update(); cn->SaveAs(Form("%s.eps",psfile)); cn->SaveAs(Form("%s.root",psfile)); gSystem->Exec(Form("./replace_symbols.pl %s.eps",psfile)); return; // LEAVING HERE // now an overlay, hopefully matching dimensions // remove everything but the graph cn->Update(); TList *clist = cn->GetListOfPrimitives(); TFrame* frame = cn->GetFrame(); for (int i=0; i<clist->GetSize(); ) { if (clist->At(i) != frame) { clist->RemoveAt(i); } else i++; } // draw markers in the corners TMarker *mkr = new TMarker(frame->GetX1(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY1(),2); mkr->Draw(); mkr = new TMarker(frame->GetX1(),frame->GetY2(),2); mkr->Draw(); mkr = new TMarker(frame->GetX2(),frame->GetY2(),2); mkr->Draw(); frame->SetLineColor(10); cn->Update(); datafile_t miller = { "figure_input/Miller/lattice.GEn.rtf","Miller", "[0]","[1]","[1]-[3]","[2]-[1]",0,0,1,3,"F" }; gr = OneGraph(&miller); TGraphAsymmErrors* egr = dynamic_cast<TGraphAsymmErrors*>(gr); if (egr && egr->GetEYhigh() && egr->GetEYhigh()[egr->GetN()/2]>0) { gr = toerror_band(egr); gr->SetLineStyle(1); gr->SetFillColor(gr->GetLineColor()); gr->SetFillStyle(3000+miller.style); } gr->Draw("F"); cn->Update(); cn->SaveAs("gen_Miller_Overlay.eps"); cn->SaveAs("gen_Miller_Overlay.root"); }
void plotSyst(){ TFile* fsmeared = new TFile("plots20131010/plotsWenu.root"); TFile* fcent = new TFile("plots20131010/plotsWenu_nosmear.root"); TFile* fup = new TFile("plots20131010/plotsWenu_nosmear_up.root"); TFile* fdown = new TFile("plots20131010/plotsWenu_nosmear_down.root"); TFile* fout = new TFile("plots20131010/plotsWenuJEC.root","RECREATE"); fout->cd(); // loop through objects in file TIter nextkey(fcent->GetListOfKeys()); TKey *key; while( (key = (TKey*)nextkey()) ){ string name = key->GetName(); string classname = key->GetClassName(); cout << "Adding " << classname << " " << name << endl; if( classname.compare("TCanvas") != 0 ) continue; if( name.compare("pchi2_old") == 0 ) continue; // get canvases TCanvas* cmet = (TCanvas*)fcent->Get( name.c_str() ); TCanvas* cmet_up = (TCanvas*)fup->Get( name.c_str() ); TCanvas* cmet_down = (TCanvas*)fdown->Get( name.c_str() ); TCanvas* cmet_smeared = (TCanvas*)fsmeared->Get( name.c_str() ); bool containsratio = cmet->GetListOfPrimitives()->Contains("pad2"); if( !containsratio ) continue; string objclass = cmet->FindObject( (name+"_MC").c_str() )->ClassName(); if( objclass.compare("TH1D") != 0 ) continue; // get histograms TH1D* hmet_mc = (TH1D*)cmet->FindObject( (name+"_MC").c_str() ); TH1D* hmet_data = (TH1D*)cmet->FindObject( (name+"_Data").c_str() ); TH1D* hmet_mc_up = (TH1D*)cmet_up->FindObject( (name+"_MC").c_str() ); TH1D* hmet_mc_down = (TH1D*)cmet_down->FindObject( (name+"_MC").c_str() ); TH1D* hmet_mc_smeared = (TH1D*)cmet_smeared->FindObject( (name+"_MC").c_str() ); TH1D* hmetratio = (TH1D*)cmet->FindObject("hratio"); TH1D* hmetratio_up = (TH1D*)cmet_up->FindObject("hratio"); TH1D* hmetratio_down = (TH1D*)cmet_down->FindObject("hratio"); TH1D* hmetratio_smeared = (TH1D*)cmet_smeared->FindObject("hratio"); // compute error bands TGraphAsymmErrors* gmet = new TGraphAsymmErrors(); for(int i=1; i <= hmet_mc->GetNbinsX(); i++){ double maxvar = max(max(hmet_mc_up->GetBinContent(i),hmet_mc_down->GetBinContent(i)), hmet_mc->GetBinContent(i)); double minvar = min(min(hmet_mc_up->GetBinContent(i),hmet_mc_down->GetBinContent(i)), hmet_mc->GetBinContent(i)); double ehigh = maxvar - hmet_mc->GetBinContent(i); double elow = hmet_mc->GetBinContent(i) - minvar; double w = hmet_mc->GetBinWidth(i)/2; gmet->SetPoint(i-1, hmet_mc_smeared->GetBinCenter(i), hmet_mc_smeared->GetBinContent(i)); gmet->SetPointError(i-1, w, w, elow, ehigh); } TGraphAsymmErrors* gmetratio = new TGraphAsymmErrors(); for(int i=1; i <= hmetratio->GetNbinsX(); i++){ double maxvar = max(max(hmetratio_up->GetBinContent(i),hmetratio_down->GetBinContent(i)), hmetratio->GetBinContent(i)); double minvar = min(min(hmetratio_up->GetBinContent(i),hmetratio_down->GetBinContent(i)), hmetratio->GetBinContent(i)); double ehigh = maxvar - hmetratio->GetBinContent(i); double elow = hmetratio->GetBinContent(i) - minvar; gmetratio->SetPoint(i-1, hmetratio_smeared->GetBinCenter(i), 1.0/*hmetratio_smeared->GetBinContent(i)*/); gmetratio->SetPointError(i-1, 0, 0, elow, ehigh); } // add bands to plot, print to file TPad* p1 = (TPad*)cmet_smeared->FindObject("pad1"); p1->cd(); gmet->SetFillColor(17); gmet->SetFillStyle(3001); gmet->Draw("2"); hmet_data->Draw("same"); TH1D* hmc_error = (TH1D*)cmet_smeared->FindObject( "histMCerror" ); p1->GetListOfPrimitives()->Remove(hmc_error); // legend TLegend *leg = (TLegend*)cmet_smeared->FindObject("TPave"); leg->AddEntry(gmet, "uncertainties", "f"); leg->Draw(); TPad* p2 = (TPad*)cmet_smeared->FindObject("pad2"); p2->cd(); gmetratio->SetFillColor(17); gmetratio->SetFillStyle(3001); gmetratio->Draw("3"); hmetratio_smeared->Draw("same"); cmet_smeared->cd(); cmet_smeared->Write(); } return; }