Please provide the following information:
ROOT Version (e.g. 6.12/02): 6.10/04
Platform, compiler (e.g. CentOS 7.3, gcc6.2): SLC6, gcc6.2
I have to perform fits many times over in my code. The fit function that I use is a convolution of two functions, constructed as in this tutorial: https://root.cern.ch/root/html/tutorials/fit/fitConvolution.C.html
But I notice that the memory usage by ROOT increases quite linearly with running time, while the fits are being iterated over. In my case, I iterate until the computer runs out of memory and the program gets killed. You can reproduce this by looping over the fit in the above tutorial code many times as well.
If I making an elementary mistake in memory management here, could I get some help? Or might this be a problem with ROOT?
Thank you.
#include <stdio.h>
#include <TMath.h>
#include <TCanvas.h>
#include <iostream>
#include <TROOT.h>
#include <TChain.h>
#include <TObject.h>
#include <TRandom.h>
#include <TFile.h>
#include <math.h>
#include <TF1Convolution.h>
#include <TF1.h>
#include <TH1F.h>
#include <TGraph.h>
#include <TStopwatch.h>
using namespace std;
void fitConvolution()
{
// generate histogram
TH1F *h_ExpGauss = new TH1F("h_ExpGauss","Exponential convoluted by gaussian",100,0.,5.);
for (int i=0;i<1e6;i++)
{
Double_t x = gRandom->Exp(1./0.3);//gives a alpha of -0.3 in the exp
x += gRandom->Gaus(0.,3.);
h_ExpGauss->Fill(x);//probability density function of the addition of two variables is the convolution of 2 dens. functions
}
// make convolution function
TF1Convolution *f_conv = new TF1Convolution("expo","gaus",-1,6,true);
f_conv->SetRange(-1.,6.);
f_conv->SetNofPointsFFT(1000);
TF1 *f = new TF1("f",*f_conv, 0., 5., f_conv->GetNpar());
// fit many times
for (int i=0 ; i<1000 ; i++) {
f->SetParameters(1.,-0.3,0.,1.);
h_ExpGauss->Fit("f");
}
}