//---------------------------------------------------------------- // // File : fit_problem.C // Date : 20060717 // Author: Jeroen Hegeman // (jhegeman@fnal.gov) // // How-to: root [0] .L fit_problem.C+ // root [1] ShowProblem() // //---------------------------------------------------------------- #include #include "TH1F.h" #include "TRandom.h" #include "TVirtualFitter.h" void MyFCN(Int_t& npar, Double_t* gin, Double_t& f, Double_t* par, Int_t flag); void ShowProblem() { TNamed dummy("dummy","dummy"); TH1F* histo = new TH1F("histo","Gaussian",100,-8,8); gRandom->SetSeed(); Float_t rnd; for (Int_t i = 0; i < 10000; ++i) { rnd = gRandom->Gaus(3,0.5); histo->Fill(rnd); } // for (i) TVirtualFitter* fitter = TVirtualFitter::Fitter(histo); fitter->Clear(); fitter->SetFCN(MyFCN); fitter->SetObjectFit(&dummy); //================================================================ TObject* fitObject = TVirtualFitter::GetFitter()->GetObjectFit(); std::cout << "============================" << endl; std::cout << "ShowProblem fitObject = '" << fitObject << "'" << std::endl; if (fitObject) std::cout << "ShowProblem fitObject->GetName() = '" << fitObject->GetName() << "'" << std::endl; std::cout << "============================" << endl; //================================================================ histo->Fit("gaus","U"); delete histo; histo = 0; } // ShowProblem //---------------------------------------------------------------- void MyFCN(Int_t& npar, Double_t* gin, Double_t& f, Double_t* par, Int_t flag) { // Just to avoid a lot of the same messages... static size_t count = 0; if (count == 0) { //================================================================ TObject* fitObject = TVirtualFitter::GetFitter()->GetObjectFit(); std::cout << "============================" << endl; std::cout << "MyFCN fitObject = '" << fitObject << "'" << std::endl; if (fitObject) std::cout << "MyFCN fitObject->GetName() = '" << fitObject->GetName() << "'" << std::endl; std::cout << "============================" << endl; //================================================================ } // if (count) ++count; return; } // MyFCN //----------------------------------------------------------------