#include "TCanvas.h" #include "TPad.h" #include "TMultiGraph.h" #include "TGraph.h" #include "TGraphErrors.h" #include "TAxis.h" #include "TLegend.h" #include "TLatex.h" #include "TROOT.h" #include void corona() { gStyle->SetOptFit(); const char *datain = "corona.txt"; const char *dataout = "corona.pdf"; TCanvas *c01 = new TCanvas("c01","multigraph",1280,1024); float offx=1.3; float offy=1.7; float margr=0.08; float w=3; float margl=0.12; gPad->SetLeftMargin(margl); gPad->SetRightMargin(margr); TGraphErrors *gamma = new TGraphErrors(datain,"%lg %lg"); for(int i = 0; i < gamma->GetN(); i++) { gamma->SetPointError(i, 0.0, TMath::Sqrt(gamma->GetY()[i])); } // ex = 0.0 or 0.3 or 0.5 gamma->SetMarkerColor(kBlue); gamma->SetLineColor(kBlue); gamma->SetMarkerStyle(23); gamma->SetMarkerSize(1.3); gamma->SetLineWidth(3); //gamma->Draw("APL"); // TF1 *fitspettro = new TF1("fitspettro", "gaus"); TF1 *fitspettro = new TF1("fitspettro", "[0] * (1+[1]*TMath::Exp(-x/[2]))/(1+[3]*TMath::Exp(-x/[2]))", 0,25); TF1 *fitspettroexpo = new TF1("fitspettroexpo", "expo", 0,25); fitspettro->SetParName(0,"a"); fitspettro->SetParName(1,"m"); fitspettro->SetParName(2,"#tau"); fitspettro->SetParName(3,"n"); fitspettro->SetParameter(0,2); fitspettro->SetParameter(1,60); fitspettro->SetParameter(2,5); fitspettro->SetParameter(3,300); fitspettro->SetParLimits(0,0,1.E10); fitspettro->SetParLimits(2,-1,50000); fitspettro->SetLineColor(kRed+2); // need to increase number of function calls for avoiding call limit error ROOT::Math::MinimizerOptions::SetDefaultMaxFunctionCalls(1000000); gamma->Fit("fitspettro","+"); gamma->Fit("fitspettroexpo","+"); fitspettro->SetLineWidth(3); fitspettroexpo->SetRange(0.,50); fitspettroexpo->SetLineWidth(3); // draw first function to have then data put on top fitspettro->SetRange(0.,70); fitspettro->Draw(); fitspettroexpo->Draw("SAME "); gamma->Draw("PL "); // drow graph data on top of function //gamma->Draw("L"); fitspettro->SetTitle("Covid-19 cases"); fitspettro->GetXaxis()->SetTitle("Day"); fitspettro->GetYaxis()->SetTitle("Cases"); fitspettro->GetYaxis()->SetTitleOffset(offy); fitspettro->GetXaxis()->SetTitleOffset(offx); gamma->SetTitle("Covid-19 cases"); gamma->GetXaxis()->SetTitle("Day"); gamma->GetYaxis()->SetTitle("Cases"); gamma->GetYaxis()->SetTitleOffset(offy); gamma->GetXaxis()->SetTitleOffset(offx); TLegend* leg = new TLegend(0.15, 0.6, .35, .85); leg->SetHeader("Legend"); leg->SetNColumns(1); leg->AddEntry(gamma, "Data", "lp"); leg->AddEntry(fitspettro, "Logistic Fit", "l"); leg->AddEntry(fitspettroexpo, "Exponential Fit", "l"); leg->Draw(); gPad->SetLogy(true); gPad->Update(); TPaveStats *stat = (TPaveStats*)gamma->GetListOfFunctions()->FindObject("stats"); if (stat) { stat->SetTextColor(kBlue); stat->SetX1NDC(0.80); stat->SetX2NDC(0.98); stat->SetY1NDC(0.77); stat->SetY2NDC(0.92); } c01->Print(dataout); }