void compIsol(int varnum) { TString varname, vartitle; if(varnum==1) { varname="hHEIsoPt"; vartitle="H/E Isolation"; } if(varnum==2) { varname="hHcalIsoPt"; vartitle="HCAL Isolation"; } if(varnum==3) { varname="hEcalIsoPt"; vartitle="ECAL Isolation"; } if(varnum==4) { varname="hTrkIsoPt"; vartitle="Track Isolation"; } if(varnum==5) { varname="hJetEt"; vartitle="Jet E_{T} [GeV]"; } if(varnum==6) { varname="hNJets"; vartitle="Number of Jets"; } TH1D* hBorn; TH1D* hADD; if(varnum<=4) { TH2D* hBorn2d = dynamic_cast<TH2D*>(GetPlot(1, varname)); TH2D* hADD2d = dynamic_cast<TH2D*>(GetPlot(3, varname)); hBorn = hBorn2d->ProjectionX(varname+"born"); hADD = hADD2d->ProjectionX(varname+"add"); cout << "asdf" << endl; } else { hBorn = dynamic_cast<TH1D*>(GetPlot(1, varname)); hADD = dynamic_cast<TH1D*>(GetPlot(3, varname)); } hBorn->Scale(1/hBorn->GetSumOfWeights()); hADD->Scale(1/hADD->GetSumOfWeights()); hBorn->SetLineColor(kBlue+2); hADD->SetLineColor(kCyan+4); hBorn->SetFillColor(0); hADD->SetFillColor(0); hBorn->SetLineStyle(1); hADD->SetLineStyle(2); // hBorn->SetStats(0); // hADD->SetStats(0); gPad->SetLogy(1); hBorn->GetXaxis()->SetTitle(vartitle); hBorn->GetYaxis()->SetTitle("Normalized Units"); hBorn->SetTitle("Leading Photons in Pythia/Sherpa Samples"); hBorn->Draw(); hADD->Draw("sames"); hBorn->SetMaximum(1); gPad->Update(); TPaveStats *st1=(TPaveStats*)hBorn->GetListOfFunctions()->FindObject("stats"); TPaveStats *st2=(TPaveStats*)hADD->GetListOfFunctions()->FindObject("stats"); st1->SetName("Born"); st2->SetName("ADD"); st1->SetOptStat(101100); st2->SetOptStat(101100); st1->SetX1NDC(.25); st1->SetX2NDC(.55); st1->SetY1NDC(.56); st1->SetY2NDC(.80); st2->SetX1NDC(.56); st2->SetX2NDC(.86); st2->SetY1NDC(.56); st2->SetY2NDC(.80); TLegend* leg=new TLegend(.25,.78,.55,.85); leg->AddEntry(hBorn, "Pythia (Born)", "l"); leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetTextSize(0.045); leg->Draw(); TLegend* leg=new TLegend(.56,.78,.86,.85); leg->AddEntry(hADD, "Sherpa (ADD)", "l"); leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetTextSize(0.045); leg->Draw(); gPad->Update(); return; }
void combinedFit() { TH1D * hB = new TH1D("hB","histo B",100,0,100); TH1D * hSB = new TH1D("hSB","histo S+B",100, 0,100); TF1 * fB = new TF1("fB","expo",0,100); fB->SetParameters(1,-0.05); hB->FillRandom("fB"); TF1 * fS = new TF1("fS","gaus",0,100); fS->SetParameters(1,30,5); hSB->FillRandom("fB",2000); hSB->FillRandom("fS",1000); // perform now global fit TF1 * fSB = new TF1("fSB","expo + gaus(2)",0,100); ROOT::Math::WrappedMultiTF1 wfB(*fB,1); ROOT::Math::WrappedMultiTF1 wfSB(*fSB,1); ROOT::Fit::DataOptions opt; ROOT::Fit::DataRange rangeB; // set the data range rangeB.SetRange(10,90); ROOT::Fit::BinData dataB(opt,rangeB); ROOT::Fit::FillData(dataB, hB); ROOT::Fit::DataRange rangeSB; rangeSB.SetRange(10,50); ROOT::Fit::BinData dataSB(opt,rangeSB); ROOT::Fit::FillData(dataSB, hSB); ROOT::Fit::Chi2Function chi2_B(dataB, wfB); ROOT::Fit::Chi2Function chi2_SB(dataSB, wfSB); GlobalChi2 globalChi2(chi2_B, chi2_SB); ROOT::Fit::Fitter fitter; const int Npar = 6; double par0[Npar] = { 5,5,-0.1,100, 30,10}; // create before the parameter settings in order to fix or set range on them fitter.Config().SetParamsSettings(6,par0); // fix 5-th parameter fitter.Config().ParSettings(4).Fix(); // set limits on the third and 4-th parameter fitter.Config().ParSettings(2).SetLimits(-10,-1.E-4); fitter.Config().ParSettings(3).SetLimits(0,10000); fitter.Config().ParSettings(3).SetStepSize(5); fitter.Config().MinimizerOptions().SetPrintLevel(0); fitter.Config().SetMinimizer("Minuit2","Migrad"); // fit FCN function directly // (specify optionally data size and flag to indicate that is a chi2 fit) fitter.FitFCN(6,globalChi2,0,dataB.Size()+dataSB.Size(),true); ROOT::Fit::FitResult result = fitter.Result(); result.Print(std::cout); TCanvas * c1 = new TCanvas("Simfit","Simultaneous fit of two histograms", 10,10,700,700); c1->Divide(1,2); c1->cd(1); gStyle->SetOptFit(1111); fB->SetFitResult( result, iparB); fB->SetRange(rangeB().first, rangeB().second); fB->SetLineColor(kBlue); hB->GetListOfFunctions()->Add(fB); hB->Draw(); c1->cd(2); fSB->SetFitResult( result, iparSB); fSB->SetRange(rangeSB().first, rangeSB().second); fSB->SetLineColor(kRed); hSB->GetListOfFunctions()->Add(fSB); hSB->Draw(); }
void plot_xtalE(){ gStyle->SetOptStat(0); gStyle->SetOptFit(0); gStyle->SetTitleSize(0.08,"t"); // a list of runs corresponding to xtal0 to xtal53 int runlist[54] = {3295,3296,3297,3369,3300,3301,3302,3303,3368, 3244,3245,3246,3247,3248,3249,3250,3251,3252, 3240,3239,3238,3237,3236,3235,3232,3234,3233, 3267,3266,3265,3263,3258,3257,3256,3254,3253, 3268,3272,3274,3275,3276,3277,3278,3281,3283, 3294,3293,3292,3289,3288,3287,3286,3285,3284}; // for(int i=0;i<54;i++){ // runlist[i] = 3305; // } ofstream outfile("energycalibration.fcl"); TCanvas *c1 = new TCanvas("c1","c1",1800,1200); TH2D *xtalEnergy = new TH2D("xtalEnergy","xtalEnergy",9,0,9,6,0,6); outfile << "// constants from runs" <<endl;; for(int i=0;i<54;i++){ outfile << runlist[i] << " "; if(i%9==8 && i!=53) { outfile << endl; outfile << "// ";} } outfile << "\nBEGIN_PROLOG" << endl; outfile << "xtal_energy_response: {" << endl; double mean[54]; double rms[54]; double norm[54]; double index[54]; c1->Divide(9,6); for(int i=0;i<54;i++){ index[i]=i; c1->cd(54-i); c1->cd(54-i)->SetLogz(); //if(i==3 || i==8 || i==9) continue; // these are runs where the beams are at the wrong place TFile *file = new TFile(Form("run%d.root",runlist[i])); TH2D *beamEnergy2D = (TH2D*)file->Get("beamEnergy2D"); beamEnergy2D->Draw("colz text"); beamEnergy2D->SetMarkerSize(1); beamEnergy2D->SetMaximum(3000); beamEnergy2D->SetMinimum(1); beamEnergy2D->SetTitle(Form("Run %d",runlist[i])); double maxE = beamEnergy2D->GetMaximum(); int maxBin = beamEnergy2D->GetMaximumBin(); int x,y,z; beamEnergy2D->GetBinXYZ(maxBin,x,y,z); cout<<x<<" "<<y<<" "<<z<<" "<<(y-1)*9+9-x<<endl; int xtalNum = (y-1)*9+9-x; TH1D *beamEnergy = (TH1D*)file->Get(Form("beamEnergy%02d",xtalNum)); TH1D *beamTime = (TH1D*)file->Get(Form("beamTime%02d",xtalNum)); TH1D *beamTimeEnergy = (TH1D*)file->Get(Form("beamTimeEnergy%02d",xtalNum)); TH1D *syncEnergy = (TH1D*)file->Get(Form("syncEnergy%02d",xtalNum)); beamEnergy->Draw(); TF1 *fit = new TF1("fit","gaus(0)",1500,2800); fit->SetParLimits(1,1700,2500); fit->SetParLimits(2,50,150); fit->SetParameters(100,2100,100); beamEnergy->Fit("fit","REM"); norm[i]=fit->GetParameter(0); mean[i]=fit->GetParameter(1); rms[i]=fit->GetParameter(2); TF1 *refit = new TF1("refit","gaus(0)",mean[i]-2*rms[i], mean[i]+2*rms[i]); refit->SetParameters(norm[i],mean[i],rms[i]); beamEnergy->Fit("refit","REM"); norm[i]=refit->GetParameter(0); mean[i]=refit->GetParameter(1); rms[i]=refit->GetParameter(2); outfile << Form("xtal%d : %f",i,mean[i]) << endl; xtalEnergy->Fill(8-i%9,i/9,mean[i]); TText *text = new TText(0.15,0.75,Form("E%d=%.1f",xtalNum,mean[i])); text->SetTextSize(0.09); text->SetTextColor(2); text->SetNDC(); beamEnergy->GetListOfFunctions()->Add(text); } outfile << "}" << endl; outfile << "END_PROLOG" << endl; TCanvas *c2 = new TCanvas("c2","c2",900,600); xtalEnergy->Draw("colz text"); xtalEnergy->SetMarkerSize(1.5); xtalEnergy->SetMaximum(2500); xtalEnergy->SetMinimum(1700); TCanvas *c3 = new TCanvas("c3","c3",900,600); TGraph *g1 = new TGraph(54,index,mean); g1->SetMarkerStyle(20); g1->Draw("AP"); double avg=0; for(int i=0;i<54;i++){ if(mean[i]>0){ avg += mean[i]/54.; } } cout<<avg<<endl; TLine *linem5 = new TLine(0,0.95*avg,54,0.95*avg); TLine *linep5 = new TLine(0,1.05*avg,54,1.05*avg); linem5->SetLineWidth(2); linem5->SetLineStyle(7); linem5->SetLineColor(2); linep5->SetLineWidth(2); linep5->SetLineColor(2); linep5->SetLineStyle(7); linem5->Draw("same"); linep5->Draw("same"); TLine *line1 = new TLine(0,0.9*avg,54,0.9*avg); line1->SetLineWidth(2); line1->SetLineColor(4); line1->Draw("same"); TLine *line2 = new TLine(0,1.1*avg,54,1.1*avg); line2->SetLineWidth(2); line2->SetLineColor(4); line2->Draw("same"); TLegend *leg = new TLegend(0.7,0.1,0.9,0.3); leg->AddEntry(linem5,"#pm 5%","l"); leg->AddEntry(line1,"#pm 10%","l"); leg->Draw(); }