12 #ifndef ROOT_TFitEditor
13 #define ROOT_TFitEditor
54 class TGDoubleHSlider;
56 class TGNumberEntryField;
64 class TFitEditor :
public TGMainFrame {
68 TGCompositeFrame *fTabContainer;
69 TGCompositeFrame *fGeneral;
70 TGCompositeFrame *fMinimization;
71 TGTextButton *fUpdateButton;
72 TGTextButton *fFitButton;
73 TGTextButton *fResetButton;
74 TGTextButton *fCloseButton;
78 TGComboBox *fFuncList;
79 TGTextEntry *fEnteredFunc;
80 TGTextButton *fUserButton;
83 TGRadioButton *fNormAdd;
85 TGLayoutHints *fLayoutNone;
86 TGLayoutHints *fLayoutAdd;
87 TGLayoutHints *fLayoutNormAdd;
88 TGLayoutHints *fLayoutConv;
89 TGTextButton *fSetParam;
90 TGCheckButton *fIntegral;
91 TGCheckButton *fBestErrors;
92 TGCheckButton *fUseRange;
93 TGCheckButton *fAdd2FuncList;
94 TGCheckButton *fUseGradient ;
95 TGCheckButton *fAllWeights1;
96 TGCheckButton *fImproveResults;
97 TGCheckButton *fEmptyBinsWghts1;
98 TGComboBox *fMethodList;
99 TGCheckButton *fLinearFit;
100 TGCheckButton *fNoChi2;
101 TGCheckButton *fNoStoreDrawing;
102 TGCheckButton *fNoDrawing;
103 TGCheckButton *fDrawSame;
104 TGTextButton *fDrawAdvanced;
105 TGDoubleHSlider *fSliderX;
106 TGNumberEntry *fSliderXMax;
107 TGNumberEntry *fSliderXMin;
108 TGDoubleHSlider *fSliderY;
109 TGNumberEntry *fSliderYMax;
110 TGNumberEntry *fSliderYMin;
111 TGDoubleHSlider *fSliderZ;
112 TGHorizontalFrame *fSliderXParent;
113 TGHorizontalFrame *fSliderYParent;
114 TGHorizontalFrame *fSliderZParent;
115 TGCheckButton *fEnableRobust;
116 TGNumberEntry *fRobustValue;
117 TGRadioButton *fOptDefault;
118 TGRadioButton *fOptVerbose;
119 TGRadioButton *fOptQuiet;
120 TVirtualPad *fParentPad;
127 TF1NormSum *fSumFunc;
128 TF1Convolution *fConvFunc;
131 struct FuncParamData_t {
133 fP[0] = 0; fP[1] = 0; fP[2] = 0;
135 Double_t & operator[](UInt_t i) {
return fP[i];}
138 std::vector<FuncParamData_t> fFuncPars;
140 std::multimap<TObject*, TF1*> fPrevFit;
141 std::vector<TF1*> fSystemFuncs;
143 TGRadioButton *fLibMinuit;
144 TGRadioButton *fLibMinuit2;
145 TGRadioButton *fLibFumili;
146 TGRadioButton *fLibGSL;
147 TGRadioButton *fLibGenetics;
148 TGComboBox *fMinMethodList;
149 TGNumberEntryField *fErrorScale;
150 TGNumberEntryField *fTolerance;
151 TGNumberEntryField *fIterations;
153 TGStatusBar *fStatusBar;
155 Bool_t fChangedParams;
157 static TFitEditor *fgFitDialog;
160 void GetFunctionsFromSystem();
161 void ProcessTreeInput(TObject* objSelected, Int_t selected,
162 TString variables, TString cuts);
164 void FillDataSetList();
165 TGComboBox* BuildMethodList(TGFrame *parent, Int_t
id);
166 void GetRanges(ROOT::Fit::DataRange&);
167 TF1* GetFitFunction();
168 TList* GetFitObjectListOfFunctions();
169 void DrawSelection(
bool restore =
false);
170 Int_t CheckFunctionString(
const char* str);
171 void CreateFunctionGroup();
172 void CreateGeneralTab();
173 void CreateMinimizationTab();
174 void MakeTitle(TGCompositeFrame *parent,
const char *title);
175 TF1* HasFitFunction();
176 void SetEditable(Bool_t);
179 TFitEditor(
const TFitEditor&);
180 TFitEditor& operator=(
const TFitEditor&);
182 void RetrieveOptions(Foption_t&, TString&, ROOT::Math::MinimizerOptions&, Int_t);
185 TFitEditor(TVirtualPad* pad, TObject *obj);
186 virtual ~TFitEditor();
188 TList* GetListOfFittingFunctions(TObject* obj = 0);
190 static TFitEditor *GetInstance(TVirtualPad* pad = 0, TObject *obj = 0);
191 virtual Option_t *GetDrawOption()
const;
193 virtual void Show(TVirtualPad* pad, TObject *obj);
195 void ShowObjectName(TObject* obj);
196 Bool_t SetObjectType(TObject* obj);
197 virtual void Terminate();
200 virtual void CloseWindow();
201 virtual void ConnectSlots();
202 virtual void DisconnectSlots();
203 virtual void RecursiveRemove(TObject* obj);
206 virtual void SetCanvas(TCanvas *c);
209 virtual void SetFitObject(TVirtualPad *pad, TObject *obj, Int_t event);
210 virtual void SetFunction(
const char *
function);
213 void FillFunctionList(Int_t selected = -1);
214 void FillMinMethodList(Int_t selected = -1);
215 virtual void DoAddition(Bool_t on);
216 virtual void DoNormAddition(Bool_t on);
217 virtual void DoConvolution(Bool_t on);
218 virtual void DoAdvancedOptions();
219 virtual void DoAllWeights1();
220 virtual void DoClose();
221 virtual void DoEmptyBinsAllWeights1();
222 virtual void DoEnteredFunction();
223 virtual void DoUpdate();
224 virtual void DoFit();
225 virtual void DoMaxIterations();
226 virtual void DoDataSet(Int_t sel);
227 virtual void DoFunction(Int_t sel);
228 virtual void DoLinearFit();
229 virtual void DoNoChi2();
230 virtual void DoNoSelection();
231 virtual void DoNoStoreDrawing();
232 virtual void DoReset();
233 virtual void DoRobustFit();
234 virtual void DoSetParameters();
235 virtual void DoSliderXMoved();
236 virtual void DoNumericSliderXChanged();
237 virtual void DoSliderYMoved();
238 virtual void DoNumericSliderYChanged();
239 virtual void DoSliderZMoved();
240 virtual void DoUserDialog();
241 virtual void DoUseFuncRange();
244 virtual void DoLibrary(Bool_t on);
245 virtual void DoMinMethod(Int_t );
246 virtual void DoPrintOpt(Bool_t on);
249 typedef std::vector<FuncParamData_t > FuncParams_t;
251 friend class FitEditorUnitTesting;
252 ClassDef(TFitEditor,0)