diff --git a/test/TestFitSplineToTH1.cc b/test/TestFitSplineToTH1.cc index 732bb7b..77d11f7 100644 --- a/test/TestFitSplineToTH1.cc +++ b/test/TestFitSplineToTH1.cc @@ -1,35 +1,106 @@ #include +#include #include "TFile.h" #include "TH1.h" +#include "TH1D.h" #include "TF1.h" #include "TCanvas.h" +#include "TPad.h" +#include "TStyle.h" +#include "TBox.h" +#include "TLine.h" #include "Lau1DCubicSpline.hh" //int main(const int argc, const char ** argv) int main() { - TFile* dtaFile = TFile::Open("dta-hist.root"); + TFile* dtaFile = TFile::Open("DTA-hist-PV.root"); TH1* dtaHist = dynamic_cast(dtaFile->Get("dta_hist")); - std::vector dtvals = {0.,0.5 ,1., 2., 3., 4., 7., 10., 15.}; - std::vector effvals = {0.,0.01 ,0.022,0.035,0.042,0.05,0.051,0.052,0.055}; + gStyle->SetOptStat(0); + + std::vector dtvals = {0. ,0.25,0.5 ,0.75 ,1., 2., 3., 4., 7., 10., 15.}; + std::vector effvals = {1e-11,0.01,0.015,0.2 ,0.022,0.035,0.042,0.05,0.051,0.052,0.055}; Lau1DCubicSpline* dtEffSpline = nullptr; dtEffSpline = new Lau1DCubicSpline(dtvals,effvals,Lau1DCubicSpline::AkimaSpline,Lau1DCubicSpline::Natural,Lau1DCubicSpline::Natural); dtEffSpline->fitToTH1(dtaHist); TF1* tf1 = dtEffSpline->makeTF1(); TCanvas canvas("canvas","canvas",800,450); + TPad* fitPad = new TPad("fitPad","fit",0,0.3,1,1.0); + fitPad->SetFillColor(0); + + TPad* ratioPad = new TPad("ratioPad","fit",0,0.05,1,0.3); + ratioPad->SetFillColor(0); + + fitPad->Draw(); + ratioPad->Draw(); + + fitPad->cd(); dtaHist->Draw(); tf1->Draw("SAME"); + + TH1D* ratios = new TH1D(*dynamic_cast(dtaHist)); + ratios->SetName("ratios"); + ratios->SetTitle("Ratios of spline/MC;t(ps)"); + + std::vector infIndicies; + + for(Int_t i = 1; i <= ratios->GetNbinsX(); ++i) + { + Double_t t = ratios->GetBinCenter(i); + Double_t splineValue = dtEffSpline->evaluate(t); + + Double_t dtaHistVal = dtaHist->GetBinContent(i); + Double_t ratio = splineValue/dtaHistVal; + if (std::isinf(ratio)) + { + ratio = 0.; + infIndicies.push_back(i); + } + + ratios->SetBinContent( i, ratio ); + std::cout << "ratio: " << splineValue/dtaHistVal << std::endl; + ratios->SetBinError( i, 0. ); //TODO work out the error + } + + ratioPad->cd(); + ratios->Draw("P*"); + + const Double_t yMin = ratios->GetMinimum(0.001)*0.99; + const Double_t yMax = ratios->GetMaximum(1000.)*1.01; + + std::cout << yMin << " " << yMax << std::endl; + + ratios->GetYaxis()->SetRangeUser(yMin,yMax); + + for(Int_t i : infIndicies) + { + TBox* b = new TBox( + ratios->GetBinLowEdge(i), + yMin, + ratios->GetBinWidth(i)+ratios->GetBinLowEdge(i), + yMax + ); + b->SetFillColorAlpha(2,0.3); + b->Draw(); + } + + TLine* zeroLine = new TLine(ratios->GetXaxis()->GetXmin(), 1, ratios->GetXaxis()->GetXmax(), 1); + zeroLine->SetLineColor(kGray+1); + zeroLine->Draw(); + canvas.SaveAs("TF1fitTest.pdf"); delete dtEffSpline; delete dtaHist; + delete ratios; + delete zeroLine; dtaFile->Close(); delete dtaFile; return 0; }