Source code for pySAXS.guisaxs.LSInterpolateDlg

#!/usr/bin/python

import wx
import numpy
import sys
import pySAXS.LS.LSsca as LSsca



[docs]class LSInterpolateDlg(wx.Frame): def __init__(self,parent,newdatasetname,olddatasetname): wx.Frame.__init__(self, parent, 10, "Interpolation", size=wx.Size(350,250),pos=wx.Point(50,50),style=wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN) self.parentwindow=parent self.newdatasetname=newdatasetname self.olddatasetname=olddatasetname self.SetBackgroundColour("White") qminimum=numpy.min(self.parentwindow.data_dict[newdatasetname].q) qmaximum=numpy.max(self.parentwindow.data_dict[newdatasetname].q) nb=len(self.parentwindow.data_dict[newdatasetname].q) vbox_top = wx.BoxSizer(wx.VERTICAL) #--------- #box1=wx.StaticBox(self,-1,"q range :") #stsizer=wx.StaticBoxSizer(box1,wx.VERTICAL) sizer=wx.FlexGridSizer(rows=3,cols=8,hgap=5,vgap=5) self.chkb=[] self.qmin=[] self.qmax=[] self.nbpts=[] self.qrange_list=['linear','logscale'] self.qrange_type=[] for i in range(3): self.chkb.append(wx.CheckBox(self,-1,str(i)+" - q range ")) sizer.Add(self.chkb[i]) sizer.Add(wx.StaticText(self,-1," min :")) self.qmin.append(wx.TextCtrl(self,-1,value=str(qminimum))) sizer.Add(self.qmin[i]) sizer.Add(wx.StaticText(self,-1," max :")) self.qmax.append(wx.TextCtrl(self,-1,value=str(qmaximum))) sizer.Add(self.qmax[i]) sizer.Add(wx.StaticText(self,-1," points :")) self.nbpts.append(wx.TextCtrl(self,-1,value=str(nb))) sizer.Add(self.nbpts[i]) self.qrange_type.append(wx.Choice(self,-1,choices=self.qrange_list)) sizer.Add(self.qrange_type[i]) self.qrange_type[i].SetSelection(0) self.chkb[0].SetValue(True) vbox_top.Add(sizer, 0, wx.BOTTOM | wx.TOP, 9) self.applyButton=wx.Button(self,wx.ID_ANY,"APPLY") vbox_top.Add(self.applyButton, 0, wx.BOTTOM | wx.TOP, 9) wx.EVT_BUTTON(self, self.applyButton.GetId(), self.OnApply) self.CancelButton=wx.Button(self,wx.ID_ANY,"CANCEL") vbox_top.Add(self.CancelButton, 0, wx.BOTTOM | wx.TOP, 9) wx.EVT_BUTTON(self, self.CancelButton.GetId(), self.OnExitClick) self.SetSizer(vbox_top) vbox_top.Fit(self)
[docs] def OnApply(self,event): ''' calculate the new qrange ''' # test if q range is selected if len(self.giveMeListOfChecked())==0: dlg2=wx.MessageDialog(self, message='No q range are checked !', caption='pySAXS error', style=wx.OK | wx.ICON_INFORMATION) dlg2.ShowModal() dlg2.Destroy() return # test if q ranges are coherent ''' ------ test qmin< qmax ''' for i in self.giveMeListOfChecked(): if float(self.qmin[i].GetValue())>float(self.qmax[i].GetValue()): dlg2=wx.MessageDialog(self, message='qmin > qmax in the '+str(i)+'- q range !', caption='pySAXS error', style=wx.OK | wx.ICON_INFORMATION) dlg2.ShowModal() dlg2.Destroy() return ''' can be optimized in future... ''' '''list of q range ordered by qmin''' d={}#a dictionnary of qmin -> qrange are sorted by qmin for i in self.giveMeListOfChecked(): # in d <- qmin and index d[float(self.qmin[i].GetValue())]=i sorted=self.sortedDictValues(d) #d is sorted print sorted if len(sorted)>1: #test si qmax<qmin for i in range(1,len(sorted)): if float(self.qmax[i-1].GetValue())>float(self.qmin[i].GetValue()): dlg2=wx.MessageDialog(self, message='qmax in the '+str(i-1)+'- q range > qmin in the '+str(i)+'- q range!', caption='pySAXS error', style=wx.OK | wx.ICON_INFORMATION) dlg2.ShowModal() dlg2.Destroy() return #creation of qrange newqrange=None for i in sorted: #i is qmin, d[i] is index of qrange if newqrange==None: newqrange=self.giveMeAQRange(i) else: newqrange=numpy.concatenate((newqrange,self.giveMeAQRange(i))) #c'est fini les amis #print newqrange self.parentwindow.OnInterpolate(self.newdatasetname,self.olddatasetname,newqrange)
[docs] def giveMeAQRange(self,index): ''' return a q range from the information on the form ''' qmin=float(self.qmin[index].GetValue()) qmax=float(self.qmax[index].GetValue()) nbpts=float(self.nbpts[index].GetValue()) steps=(qmax-qmin)/nbpts if self.qrange_type[index].GetStringSelection()=='linear': newqrange=numpy.arange(qmin,qmax,steps) else: newqrange=LSsca.Qlogspace(qmin,qmax,nbpts) return newqrange
[docs] def giveMeListOfChecked(self): l=[] for i in range(3): if self.chkb[i].GetValue(): l.append(i) return l
[docs] def sortedDictValues(self,adict): '''sort a dictionnary ''' items = adict.items() items.sort() return [value for key, value in items]
[docs] def OnExitClick(self,event): ''' user click on Cancel exit without clipping ''' self.Destroy()