Hello Experts,
TF1Convolution() and drawing it from a TF1 is not working for me. I’m tried following this example with my own TF1 function: Convolution of two TF1 , but it gives me a flat line on the canvas. Not really sure what I need to do and ChatGPT is not sure either. Any help would be much appreciated. Here is my code for reference:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#include "TFile.h"
#include "TMath.h"
#include "TH1.h"
#include "TF1.h"
#include "TPDF.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TLatex.h"
#include "TString.h"
#include "TLine.h"
#include "TPaveStats.h"
#include "TF1Convolution.h"
void landau (){
//Float_t pi = TMath::Pi();
Double_t low = 0;
Double_t high = 70;
/*
//Parameters changed for fit.
TF1 *Landau1 = new TF1("Landau1","[0]*TMath::Landau(x,[1],[2])",low,high);
//[1] = location parameter, [2] = scaling parameter
Landau1->SetParameters(649.5,22.95,7.534);
Landau1->SetTitle("Landau vs. Gaus*Landau Comparison");
*/
TF1 *GausLandau = new TF1("GausLandau","[0]*TMath::Gaus(x,[1],[2])*TMath::Landau(x,[3],[4])",low,high);
GausLandau->SetParameters(649.5,11.29,7.856,22.95,7.534);
//GausLandau->GetYaxis()->SetRangeUser(0,700);
GausLandau->SetLineColor(kBlue);
GausLandau->SetTitle("Landau vs. Gaussian*Landau Comparison");
TF1 *Landau1 = new TF1("Landau1","[0]*TMath::Landau(x,[1],[2])",low,high);
//[1] = location parameter, [2] = scaling parameter
Landau1->SetParameters(649.5,22.95,7.534);
Landau1->GetYaxis()->SetRangeUser(0,700);
TF1 *Gaus = new TF1("Gaus","[0]*TMath::Gaus(x,[1],[2])",low,high);
Gaus->SetParameters(649.5,11.29,7.856);
Gaus->SetLineColor(kGreen);
TF1Convolution *conv = new TF1Convolution(Gaus,Landau1,low,high);
TF1 *f = new TF1("f", *conv, low, high, conv->GetNpar());
//f->SetParameters(11.29,7.856,22.95,7.534);
TCanvas *canvas = new TCanvas("c","c",1000,1000);
//GausLandau->Draw();
canvas->Update();
TPaveStats *stats = new TPaveStats(50, 110, 70, 70, "stats");
stats->SetFillColor(0); // Set background color to transparent
stats->SetTextAlign(12); // Align text left
stats->SetBorderSize(1);
// Customize content of the stats box for different parameters
stats->AddText(Form("#alpha: %.2f", GausLandau->GetParameter(0))); // Add amplitude
stats->AddText(Form("#mu_{g}: %.2f", GausLandau->GetParameter(1))); // Add gaussian mean
stats->AddText(Form("#sigma_{g}: %.2f", GausLandau->GetParameter(2))); // Add gaussian sigma
stats->AddText(Form("#mu_{l}: %.2f", GausLandau->GetParameter(3))); // Add landau mean
stats->AddText(Form("#sigma_{l}: %.2f", GausLandau->GetParameter(4))); // Add landau sigma
canvas->cd();
stats->Draw();
// Update the canvas
canvas->Modified();
canvas->Update();
Landau1->Draw();
Gaus->Draw("SAME");
f->Draw("SAME");
TLegend *l = new TLegend(0.7,0.7,0.9,0.9);
l->AddEntry(Landau1,"Landau","l");
//l->AddEntry(GausLandau,"Gaussian*Landau","l");
l->AddEntry(Gaus,"Gaussian","l");
l->AddEntry(f,"convolution:GL","l");
l->Draw();
//canvas->SaveAs("GausLandau_Statbox.pdf");
TCanvas *canvas2 = new TCanvas("can2","can2",1000,1000);
f->Draw();
}
-Charlie Clark