Skip to content

Commit 039abe5

Browse files
committed
more tweaks and fixes for curve-fitting (still WIP)
1 parent 9120e6a commit 039abe5

File tree

1 file changed

+49
-39
lines changed

1 file changed

+49
-39
lines changed

larch/wxxas/curvefit_panel.py

Lines changed: 49 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,7 @@ def onSaveAllStats(self, evt=None):
458458
'# Fitted Array name: %s' % user_opts['array_name'],
459459
'# Model form: %s' % model_desc,
460460
'# Baseline form: %s' % user_opts['baseline_form'],
461-
'# Energy fit range: [%f, %f]' % (user_opts['emin'], user_opts['emax']),
461+
'# Energy fit range: [%f, %f]' % (user_opts['xmin'], user_opts['xmax']),
462462
'#--------------------']
463463

464464
labels = [('Data Set' + ' '*25)[:25], 'Group name', 'n_data',
@@ -473,10 +473,10 @@ def onSaveAllStats(self, evt=None):
473473
if not hasattr(dgroup, 'curvefit'):
474474
continue
475475
try:
476-
pkfit = dgroup.curvefit.fit_history[0]
476+
cvfit = dgroup.curvefit.fit_history[0]
477477
except:
478478
continue
479-
result = pkfit.result
479+
result = cvfit.result
480480
label = dgroup.filename
481481
if len(label) < 25:
482482
label = (label + ' '*25)[:25]
@@ -511,12 +511,12 @@ def onExportFitResult(self, event=None):
511511

512512
outfile = FileSave(self, 'Export Fit Result', default_file=deffile)
513513

514-
pkfit = self.get_fitresult()
515-
result = pkfit.result
514+
cvfit = self.get_fitresult()
515+
result = cvfit.result
516516
if outfile is not None:
517517
i1, i2 = get_xlims(dgroup.xplot,
518-
pkfit.user_options['emin'],
519-
pkfit.user_options['emax'])
518+
cvfit.user_options['xmin'],
519+
cvfit.user_options['xmax'])
520520
x = dgroup.xplot[i1:i2]
521521
y = dgroup.yplot[i1:i2]
522522
yerr = None
@@ -743,10 +743,10 @@ def onPanelExposed(self, **kws):
743743
except:
744744
pass # print(" Cannot Fill curvefit panel from group ")
745745

746-
pkfit = getattr(self.larch.symtable, 'curvefit_result', None)
747-
if pkfit is not None:
746+
cvfit = getattr(self.larch.symtable, 'curvefit_result', None)
747+
if cvfit is not None:
748748
self.showresults_btn.Enable()
749-
self.use_modelresult(pkfit)
749+
self.use_modelresult(cvfit)
750750

751751
def onModelPanelExposed(self, event=None, **kws):
752752
pass
@@ -756,14 +756,30 @@ def build_display(self):
756756

757757
self.wids = {}
758758

759-
fsopts = dict(digits=2, increment=1, size=(125, -1), with_pin=True)
759+
# xrange row
760+
xrpanel = wx.Panel(pan)
761+
xrsizer = wx.BoxSizer(wx.HORIZONTAL)
762+
fsopts = dict(parent=xrpanel, digits=2, increment=1,
763+
size=(125, -1), with_pin=True)
760764

761765
curvefit_xmin = self.add_floatspin('curvefit_xmin', value=-1, **fsopts)
762766
curvefit_xmax = self.add_floatspin('curvefit_xmax', value=+1, **fsopts)
763767

764-
self.xrange_choice = Choice(pan, size=(175, -1),
768+
self.xrange_choice = Choice(xrpanel, size=(175, -1),
765769
choices=['Full Range', 'Set Xmin / Xmax'],
766770
action=self.onXrangeChoice)
771+
772+
self.wids['show_fitrange'] = Check(xrpanel, label='show?', default=True,
773+
size=(75, -1), action=self.onPlot)
774+
775+
xrsizer.Add(self.xrange_choice, 0)
776+
xrsizer.Add(SimpleText(xrpanel, ' X min:'), 0)
777+
xrsizer.Add(curvefit_xmin, 0)
778+
xrsizer.Add(SimpleText(xrpanel, ' X max: '), 0)
779+
xrsizer.Add(curvefit_xmax, 0)
780+
xrsizer.Add(self.wids['show_fitrange'], 0)
781+
pack(xrpanel, xrsizer)
782+
767783
self.wids['curvefit_xmin'].Disable()
768784
self.wids['curvefit_xmax'].Disable()
769785
self.xrange_choice.SetSelection(0)
@@ -802,8 +818,6 @@ def build_display(self):
802818

803819
self.message = SimpleText(pan, '')
804820

805-
opts = dict(default=True, size=(75, -1), action=self.onPlot)
806-
self.show_fitrange = Check(pan, label='show?', **opts)
807821

808822
opts = dict(default=False, size=(200, -1), action=self.onPlot)
809823

@@ -816,18 +830,14 @@ def add_text(text, dcol=1, newrow=True):
816830
add_text(' Array to fit: ')
817831
pan.Add(self.array_choice, dcol=3)
818832

819-
add_text(' X Range: ')
820-
pan.Add(self.xrange_choice, dcol=4)
821-
pan.Add(self.loadresults_btn)
833+
add_text( ' X range: ')
834+
pan.Add(xrpanel, dcol=5)
835+
822836

823-
add_text(' X min/max: ')
824-
pan.Add(curvefit_xmin)
825-
add_text(' : ', newrow=False)
826-
pan.Add(curvefit_xmax)
827-
pan.Add(self.show_fitrange)
837+
pan.Add((10, 10), newrow=True)
838+
pan.Add(self.loadresults_btn)
828839
pan.Add(self.showresults_btn)
829840

830-
pan.Add((10, 10))
831841

832842
pan.Add(HLine(pan, size=(600, 2)), dcol=6, newrow=True)
833843

@@ -908,7 +918,7 @@ def fill_form(self, dat):
908918

909919

910920
self.array_choice.SetStringSelection(dat['array_desc'])
911-
self.show_fitrange.Enable(dat['show_fitrange'])
921+
self.wids['show_fitrange'].Enable(dat['show_fitrange'])
912922

913923
def read_form(self):
914924
"read for, returning dict of values"
@@ -927,7 +937,7 @@ def read_form(self):
927937
else:
928938
form_opts['xmin'] = self.wids['curvefit_xmin'].GetValue()
929939
form_opts['xmax'] = self.wids['curvefit_xmax'].GetValue()
930-
form_opts['show_fitrange'] = self.show_fitrange.IsChecked()
940+
form_opts['show_fitrange'] = self.wids['show_fitrange'].IsChecked()
931941
return form_opts
932942

933943

@@ -1245,12 +1255,12 @@ def onLoadFitResult(self, event=None):
12451255

12461256
self.use_modelresult(dat[1])
12471257

1248-
def use_modelresult(self, pkfit):
1258+
def use_modelresult(self, cvfit):
12491259
for prefix in list(self.fit_components.keys()):
12501260
self.onDeleteComponent(prefix=prefix)
12511261

1252-
result = pkfit.result
1253-
bkg_comps = pkfit.user_options['bkg_components']
1262+
result = cvfit.result
1263+
bkg_comps = cvfit.user_options['bkg_components']
12541264
for comp in result.model.components:
12551265
isbkg = comp.prefix in bkg_comps
12561266
self.addModel(model=comp.func.__name__,
@@ -1269,7 +1279,7 @@ def use_modelresult(self, pkfit):
12691279
if wids.minval is not None: wids.minval.SetValue(par.min)
12701280
if wids.maxval is not None: wids.maxval.SetValue(par.max)
12711281

1272-
self.fill_form(pkfit.user_options)
1282+
self.fill_form(cvfit.user_options)
12731283

12741284

12751285
def get_xranges(self, x):
@@ -1387,13 +1397,13 @@ def onFitSelected(self, event=None):
13871397
imin=imin, imax=imax,
13881398
user_opts=repr(opts)))
13891399

1390-
pkfit = self.larch_get("curvefit_result")
1391-
jnl = {'label': pkfit.label, 'var_names': pkfit.result.var_names,
1392-
'model': repr(pkfit.result.model)}
1393-
jnl.update(pkfit.user_options)
1400+
cvfit = self.larch_get("curvefit_result")
1401+
jnl = {'label': cvfit.label, 'var_names': cvfit.result.var_names,
1402+
'model': repr(cvfit.result.model)}
1403+
jnl.update(cvfit.user_options)
13941404
dgroup.journal.add('curvefit', jnl)
13951405
if igroup == 0:
1396-
self.autosave_modelresult(pkfit)
1406+
self.autosave_modelresult(cvfit)
13971407

13981408
self.subframes['curvefit_result'].add_results(dgroup, form=opts,
13991409
larch_eval=self.larch_eval,
@@ -1445,13 +1455,13 @@ def onFitModel(self, event=None):
14451455
user_opts=repr(opts)))
14461456

14471457
# journal about curvefit_result
1448-
pkfit = self.larch_get("curvefit_result")
1449-
jnl = {'label': pkfit.label, 'var_names': pkfit.result.var_names,
1450-
'model': repr(pkfit.result.model)}
1451-
jnl.update(pkfit.user_options)
1458+
cvfit = self.larch_get("curvefit_result")
1459+
jnl = {'label': cvfit.label, 'var_names': cvfit.result.var_names,
1460+
'model': repr(cvfit.result.model)}
1461+
jnl.update(cvfit.user_options)
14521462
dgroup.journal.add('curvefit', jnl)
14531463

1454-
self.autosave_modelresult(pkfit)
1464+
self.autosave_modelresult(cvfit)
14551465
self.onPlot()
14561466
self.showresults_btn.Enable()
14571467

0 commit comments

Comments
 (0)