From 8d32f2e0d9a6988e4cb4fc007ac6db752383eee3 Mon Sep 17 00:00:00 2001 From: Lorenzo Moneta <Lorenzo.Moneta@cern.ch> Date: Tue, 1 Dec 2009 18:11:55 +0000 Subject: [PATCH] Merge the changes from David in the dev branch (up to rev 31490) to return the TFitResultPtr from the Fit methods of TGraph, TGraph2D, TMultiGraph, THnSparse git-svn-id: http://root.cern.ch/svn/root/trunk@31491 27541ba8-7e3a-0410-8455-c3a389f83636 --- hist/hist/inc/HFitInterface.h | 2 +- hist/hist/inc/TGraph.h | 6 ++++-- hist/hist/inc/TGraph2D.h | 6 ++++-- hist/hist/inc/THnSparse.h | 2 ++ hist/hist/inc/TMultiGraph.h | 6 ++++-- hist/hist/src/HFitImpl.cxx | 16 ++++++++++++++-- hist/hist/src/TGraph.cxx | 4 ++-- hist/hist/src/TGraph2D.cxx | 4 ++-- hist/hist/src/TMultiGraph.cxx | 4 ++-- 9 files changed, 35 insertions(+), 15 deletions(-) diff --git a/hist/hist/inc/HFitInterface.h b/hist/hist/inc/HFitInterface.h index c79831d092a..f917d0e4b84 100644 --- a/hist/hist/inc/HFitInterface.h +++ b/hist/hist/inc/HFitInterface.h @@ -85,7 +85,7 @@ namespace ROOT { deleting the data after the fit. User calling this function MUST NOT delete UnBinData after calling it. */ - int UnBinFit(ROOT::Fit::UnBinData * data, TF1 * f1 , Foption_t & option , const ROOT::Math::MinimizerOptions & moption); + TFitResultPtr UnBinFit(ROOT::Fit::UnBinData * data, TF1 * f1 , Foption_t & option , const ROOT::Math::MinimizerOptions & moption); /** fill the data vector from a TH1. Pass also the TF1 function which is diff --git a/hist/hist/inc/TGraph.h b/hist/hist/inc/TGraph.h index 59c84968c68..af28b7272d9 100644 --- a/hist/hist/inc/TGraph.h +++ b/hist/hist/inc/TGraph.h @@ -48,6 +48,8 @@ class TCollection; class TF1; class TSpline; +#include "TFitResultPtr.h" + class TGraph : public TNamed, public TAttLine, public TAttFill, public TAttMarker { protected: @@ -114,8 +116,8 @@ public: virtual void Expand(Int_t newsize, Int_t step); virtual TObject *FindObject(const char *name) const; virtual TObject *FindObject(const TObject *obj) const; - virtual Int_t Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); // *MENU* - virtual Int_t Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); + virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); // *MENU* + virtual TFitResultPtr Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); virtual void FitPanel(); // *MENU* Bool_t GetEditable() const; TF1 *GetFunction(const char *name) const; diff --git a/hist/hist/inc/TGraph2D.h b/hist/hist/inc/TGraph2D.h index 8e241ae1897..a4ea835264b 100644 --- a/hist/hist/inc/TGraph2D.h +++ b/hist/hist/inc/TGraph2D.h @@ -45,6 +45,8 @@ class TH2D; class TView; class TDirectory; +#include "TFitResultPtr.h" + class TGraph2D : public TNamed, public TAttLine, public TAttFill, public TAttMarker { protected: @@ -97,8 +99,8 @@ public: void ExecuteEvent(Int_t event, Int_t px, Int_t py); virtual TObject *FindObject(const char *name) const; virtual TObject *FindObject(const TObject *obj) const; - virtual Int_t Fit(const char *formula ,Option_t *option="" ,Option_t *goption=""); // *MENU* - virtual Int_t Fit(TF2 *f2 ,Option_t *option="" ,Option_t *goption=""); // *MENU* + virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption=""); // *MENU* + virtual TFitResultPtr Fit(TF2 *f2 ,Option_t *option="" ,Option_t *goption=""); // *MENU* virtual void FitPanel(); // *MENU* TList *GetContourList(Double_t contour); TDirectory *GetDirectory() const {return fDirectory;} diff --git a/hist/hist/inc/THnSparse.h b/hist/hist/inc/THnSparse.h index 9dd2c2e48e5..b0facdd7155 100644 --- a/hist/hist/inc/THnSparse.h +++ b/hist/hist/inc/THnSparse.h @@ -59,6 +59,8 @@ class TH2D; class TH3D; class TF1; +#include "TFitResultPtr.h" + class THnSparseArrayChunk: public TObject { private: diff --git a/hist/hist/inc/TMultiGraph.h b/hist/hist/inc/TMultiGraph.h index fdf9c9b92c1..6e84c726199 100644 --- a/hist/hist/inc/TMultiGraph.h +++ b/hist/hist/inc/TMultiGraph.h @@ -32,6 +32,8 @@ class TAxis; class TBrowser; class TGraph; +#include "TFitResultPtr.h" + class TMultiGraph : public TNamed { protected: @@ -54,8 +56,8 @@ public: virtual void Browse(TBrowser *b); virtual Int_t DistancetoPrimitive(Int_t px, Int_t py); virtual void Draw(Option_t *chopt=""); - virtual Int_t Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); - virtual Int_t Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t rxmin=0, Axis_t rxmax=0); + virtual TFitResultPtr Fit(const char *formula ,Option_t *option="" ,Option_t *goption="", Axis_t xmin=0, Axis_t xmax=0); + virtual TFitResultPtr Fit(TF1 *f1 ,Option_t *option="" ,Option_t *goption="", Axis_t rxmin=0, Axis_t rxmax=0); virtual void FitPanel(); // *MENU* virtual Option_t *GetGraphDrawOption(const TGraph *gr) const; virtual void LeastSquareLinearFit(Int_t ndata, Double_t &a0, Double_t &a1, Int_t &ifail, Double_t xmin, Double_t xmax); diff --git a/hist/hist/src/HFitImpl.cxx b/hist/hist/src/HFitImpl.cxx index 6939405b049..1cd1d149336 100644 --- a/hist/hist/src/HFitImpl.cxx +++ b/hist/hist/src/HFitImpl.cxx @@ -594,7 +594,7 @@ void HFit::CheckGraphFitOptions(Foption_t & foption) { // implementation of unbin fit function (defined in HFitInterface) -int ROOT::Fit::UnBinFit(ROOT::Fit::UnBinData * fitdata, TF1 * fitfunc, Foption_t & fitOption , const ROOT::Math::MinimizerOptions & minOption) { +TFitResultPtr ROOT::Fit::UnBinFit(ROOT::Fit::UnBinData * fitdata, TF1 * fitfunc, Foption_t & fitOption , const ROOT::Math::MinimizerOptions & minOption) { // do unbin fit, ownership of fitdata is passed later to the TBackFitter class #ifdef DEBUG @@ -710,7 +710,19 @@ int ROOT::Fit::UnBinFit(ROOT::Fit::UnBinData * fitdata, TF1 * fitfunc, Foption_t if (fitOption.Verbose) bcfitter->PrintResults(2,0.); else if (!fitOption.Quiet) bcfitter->PrintResults(1,0.); - return iret; + if (fitOption.StoreResult) + { + TFitResult* fr = new TFitResult(fitResult); + TString name = "TFitResult-"; + name = name + "UnBinData-" + fitfunc->GetName(); + TString title = "TFitResult-"; + title += name; + fr->SetName(name); + fr->SetTitle(title); + return TFitResultPtr(fr); + } + else + return TFitResultPtr(iret); } diff --git a/hist/hist/src/TGraph.cxx b/hist/hist/src/TGraph.cxx index c7f8ea030b6..aa966514cf3 100644 --- a/hist/hist/src/TGraph.cxx +++ b/hist/hist/src/TGraph.cxx @@ -903,7 +903,7 @@ TObject *TGraph::FindObject(const TObject *obj) const //______________________________________________________________________________ -Int_t TGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax) +TFitResultPtr TGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax) { // Fit this graph with function with name fname. // @@ -929,7 +929,7 @@ Int_t TGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, //______________________________________________________________________________ -Int_t TGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax) +TFitResultPtr TGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax) { // Fit this graph with function f1. // diff --git a/hist/hist/src/TGraph2D.cxx b/hist/hist/src/TGraph2D.cxx index 68445c4aff2..4f784f3b062 100644 --- a/hist/hist/src/TGraph2D.cxx +++ b/hist/hist/src/TGraph2D.cxx @@ -610,7 +610,7 @@ TObject *TGraph2D::FindObject(const TObject *obj) const //______________________________________________________________________________ -Int_t TGraph2D::Fit(const char *fname, Option_t *option, Option_t *) +TFitResultPtr TGraph2D::Fit(const char *fname, Option_t *option, Option_t *) { // Fits this graph with function with name fname // Predefined functions such as gaus, expo and poln are automatically @@ -634,7 +634,7 @@ Int_t TGraph2D::Fit(const char *fname, Option_t *option, Option_t *) //______________________________________________________________________________ -Int_t TGraph2D::Fit(TF2 *f2, Option_t *option, Option_t *) +TFitResultPtr TGraph2D::Fit(TF2 *f2, Option_t *option, Option_t *) { // Fits this 2D graph with function f2 // diff --git a/hist/hist/src/TMultiGraph.cxx b/hist/hist/src/TMultiGraph.cxx index c799a62c3f2..ef156c7ff03 100644 --- a/hist/hist/src/TMultiGraph.cxx +++ b/hist/hist/src/TMultiGraph.cxx @@ -240,7 +240,7 @@ void TMultiGraph::Draw(Option_t *option) //______________________________________________________________________________ -Int_t TMultiGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax) +TFitResultPtr TMultiGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t xmin, Axis_t xmax) { // Fit this graph with function with name fname. // @@ -261,7 +261,7 @@ Int_t TMultiGraph::Fit(const char *fname, Option_t *option, Option_t *, Axis_t x //______________________________________________________________________________ -Int_t TMultiGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax) +TFitResultPtr TMultiGraph::Fit(TF1 *f1, Option_t *option, Option_t *goption, Axis_t rxmin, Axis_t rxmax) { // Fit this multigraph with function f1. // -- GitLab