Hi,
I have this code that iterates through a root file that contains a bunch of histograms. I’m fitting each one to a Gaussian and writing the results to a text file. Here is the essence of the code (Parameters is a function that estimates starting parameters and PeakFit is my fitting function–these are both defined in a straightforward way and not reproduced here):
void Parameters( TH1 *his, Double_t *par, Double_t xlow, Double_t xhigh );
Double_t PeakFit( Double_t *x, Double_t *par );
void MyFunction( TString filename ) {
Double_t Params[6]; // six parameters
TFile *inputFile = TFile::Open( filename );
TIter next(inputFile->GetListOfKeys());
TKey *key;
Int_t fcounter = 0;
TF1 *func;
string fname;
while ( ( key = (TKey*)next() ) ) {
TClass *cl = gROOT->GetClass(key->GetClassName());
if (!cl->InheritsFrom("TH1"))
continue;
TH1 *h = (TH1*)key->ReadObj();
fcounter++;
ostringstream oss;
oss << fcounter;
fname = "peakfit_" + oss.str();
Parameters( h, Params, 0, 1000 );
func = new TF1( fname.c_str(), PeakFit, Params[4] - 200, Params[4] + 200, 6 );
func->SetParameters( Params[0], Params[1], Params[2], Params[3], Params[4], Params[5] );
h->Fit( fname.c_str(), "0R" );
}
}
Usually this crashes on the h->Fit() line the second time through. If I run without debugging, it sometimes makes it through the entire thing (fitting several hundred histograms). The error I get is given in the subject (critical error c0000374). A couple of years ago this same code worked reliably (back in root version 5).
Does anyone have a clue?
Thanks,
Scott
ROOT Version: v6.23.01
Platform: Windows 10
Compiler: Visual Studio 2019