#include #include #include #include #include #include #include "TF1Convolution.h" using namespace std; using namespace TMath; double n = 5000; TF1 *fR, *fL, *fA, *fRLA, *fRAconv, *fRLconv, *fRLAconv; double Func_1(double *t, double *par) // The detector-response function { double result; result = RLAfuncs::RLAconv(t[0], par[0], par[1], par[2], par[3]); return result; } double fRAcon(double *t, double *par) { return fRAconv->Eval(t[0])/n; } double fRLcon(double *t, double *par) { return fRLconv->Eval(t[0])/n; } double fRLAcon(double *t, double *par) { return fRLAconv->Eval(t[0])/n; } void Test() { double tmin = 0; double tmax = 2000; double npx = 5000; double t_R = 50; double L = 13; double t_r = 40; double t_f = 2000; fR = new TF1("fR", RLAfuncs::Rfunc, tmin, tmax, 1); fL = new TF1("fL", RLAfuncs::Lfunc, tmin, tmax, 1); fA = new TF1("fA", RLAfuncs::Afunc, tmin, tmax, 2); fRLA = new TF1("fRLA", Func_1, tmin, tmax, 4); fR->SetParameter(0,t_R); fL->SetParameter(0,L); fA->SetParameters(t_r,t_f); fR->SetNpx(npx); fL->SetNpx(npx); fA->SetNpx(npx); fRLA->SetParameters(t_R,L,t_r,t_f); fRLA->SetNpx(n); TCanvas *c = new TCanvas ("c","",900,700); c->Divide(3,3); c->cd(1); fR->Draw(); c->cd(2); fL->Draw(); c->cd(3); fA->Draw(); //fRLA->Draw(); t_R = t_R/n; L = L/n; t_r = t_r/n; t_f = t_f/n; TF1Convolution *fRA_conv = new TF1Convolution(fR,fA); fRA_conv->SetRange(tmin,tmax); fRA_conv->SetNofPointsFFT(n); fRA_conv->SetParameters(t_R,t_r,t_f); fRAconv = new TF1("fRAconv",*fRA_conv, tmin, tmax, fRA_conv->GetNpar()); TF1Convolution *fRL_conv = new TF1Convolution(fR,fL); fRL_conv->SetRange(tmin,tmax); fRL_conv->SetNofPointsFFT(n); fRL_conv->SetParameters(t_R,L); fRLconv = new TF1("fRLconv",*fRL_conv, tmin, tmax, fRL_conv->GetNpar()); TF1Convolution *fRLA_conv = new TF1Convolution(fRLconv,fA); fRLA_conv->SetRange(tmin,tmax); fRLA_conv->SetNofPointsFFT(n); fRLA_conv->SetParameters(t_R,L,t_r,t_f); fRLAconv = new TF1("fRLAconv",*fRLA_conv, tmin, tmax, fRLA_conv->GetNpar()); c->cd(4); fRAconv->Draw(); c->cd(5); fRLconv->Draw(); c->cd(6); fRLAconv->Draw(); TF1 *fRAconv_divide_by_n = new TF1("fRAconv_divide_by_n", fRAcon, tmin, tmax, 0); TF1 *fRLconv_divide_by_n = new TF1("fRLconv_divide_by_n", fRLcon, tmin, tmax, 0); TF1 *fRLAconv_divide_by_n = new TF1("fRLAconv_divide_by_n", fRLAcon, tmin, tmax, 0); c->cd(7); fRAconv_divide_by_n->Draw(); c->cd(8); fRLconv_divide_by_n->Draw(); c->cd(9); fRLAconv_divide_by_n->Draw(); c->Update(); TCanvas *c1 = new TCanvas ("c1","",900,700); fRLA->Draw(); }