Dear ROOTers,
I came across a problem trying to fit the same function multiple times to the same hist but using different fit ranges. I like to access the fitted function after each fit for a given range and store their parameters. This works well if I only store the last fitted function, i.e. I do not use the option "+" for TH1::Fit. If I use it, I always get the first stored function back. Is there a solution w/o using a different function in each iteration with an unique name?
The following macro illustrates the problem:
TH1F *trigPt = new TH1F("trigPt", "Pt efficiency", 100, 0, 50); trigPt->FillRandom("landau");
const Float_t ptbins[5] = {1.5, 3, 5, 10, 50};
Float_t eff[4];
Float_t effSigma[4];
for (Int_t i = 0; i < 4; ++i) {
// case 1: this gets the correct function
trigPt->Fit("pol0","","",ptbins[i],ptbins[i+1]);
// case 2: this does get always the first pol0 function
// trigPt->Fit("pol0","+","",ptbins[i],ptbins[i+1]);
eff[i] = trigPt->GetFunction("pol0")->GetParameter(0); effSigma[i] = trigPt->GetFunction("pol0")->GetParError(0); std::cout << "Ptbin " << i << ": " << eff[i] << " +/- " <<effSigma[i] << std::endl;
}
Output in case 1:
root [] .x rootbug.C
Fitting results:
Parameters:
NO. VALUE ERROR 0 342.285725 10.681537
NO. VALUE ERROR 0 172.255836 6.562314
NO. VALUE ERROR 0 69.657010 2.639261
NO. VALUE ERROR 0 3.242070 0.205195
Output in case 2:
note that the cout line always prints the values for function 1
root [] .x rootbug.C
Fitting results:
Parameters:
NO. VALUE ERROR 0 355.334138 10.883231
NO. VALUE ERROR 0 193.946272 6.963230
NO. VALUE ERROR 0 67.710358 2.602121
NO. VALUE ERROR 0 3.305274 0.208544
If it matters: I'm using root 5.06/00 on Mac OS X 10.4.3
Cheers,
Remi
-- Truth decays into beauty, while beauty soon becomes merely charm. Charm ends up as strangeness, and even that doesn't last, but up and down are forever. (Anonymous) ********************************************************************* Remigius K. Mommsen e-mail: mommsen_at_fnal.gov University of Manchester URL: http://cern.ch/mommsen Fermilab, MS 357 voice: ++1 (630) 840-8321 P.O. Box 500 fax: ++1 (630) 840-2649 Batavia, Il 60510, US home: ++1 (630) 236-0932 *********************************************************************Received on Fri Dec 02 2005 - 01:38:36 MET
This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:14 MET