Hi, I have a function which has a loop containing minuit fits to a user defined function. After the loop, TH1F::Fit() is called. When I execute the function twice in a row, it segmentation faults at the TH1F::Fit() line. The problem may be related to the fact that I delete the instance of TMinuit after each use (I do this to guarantee that in each iteration minuit does not retain any information) - but this doesn't explain why the function works the first time. The problem is recreated in the folowing code when the following is run: .L testHFit.C testH() // runs okay testH() // segmentation faults at h->Fit("gaus") //------------------- FILE: testHFit.C ------------------ #include "TMinuit.h" #include "TH1.h" double value, MyX, MyY; Double_t func(double x,double y,Double_t *par) { value = par[1]*(par[0]*x + (1.-par[0])*y); return(value); } void fcn(Int_t &npar, Double_t *gin, Double_t &f, Double_t *par, Int_t iflag) { f = func(MyX,MyY,par); } void testH () { for (int i=0; i < 2; i++) { TMinuit *minuit = new TMinuit(2); minuit->SetFCN(fcn); Double_t arglist[2]; Int_t ierflg = 0; arglist[0] = 1; minuit->mnexcm("SET ERR", arglist ,1,ierflg); Double_t vstart[2] = {0.5, 10}; Double_t step[2] = {0.01, 1.0}; minuit->mnparm(0, "Frac", vstart[0], step[0], 0,0,ierflg); minuit->mnparm(1, "Normaliz", vstart[1], step[1], 0,0,ierflg); arglist[0] = 6000; arglist[1] = 1.; MyX = 0.3; MyY = 0.7; minuit->mnexcm("MIGRAD", arglist ,2,ierflg); minuit->Clear(); delete minuit; } TH1F *h = new TH1F("h","test",10,0,10); h->Fill(1);h->Fill(2);h->Fill(3);h->Fill(4);h->Fill(3); // seg faults here the second time that testH() is run. h->Fit("gaus"); } //------------------- END FILE: testHFit.C ------------------
This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:13 MET