Changeset 2581


Ignore:
Timestamp:
Dec 14, 2016 3:40:34 PM (5 years ago)
Author:
vondreele
Message:

Add Test button to Powder Sum popup - see plot of result by pressing Test

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r2579 r2581  
    26662666        '''Allows user to supply scale factor(s) when summing data -
    26672667        TODO: CAN WE PREVIEW RESULT HERE?'''
    2668         def __init__(self,parent,title,text,dataType,data):
     2668        def __init__(self,parent,title,text,dataType,data,dataList):
    26692669            wx.Dialog.__init__(self,parent,-1,title,size=(400,250),
    26702670                pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
     2671            self.plotFrame = wx.Frame(self,-1,'Sum Plots',size=wx.Size(700,600), \
     2672                style=wx.DEFAULT_FRAME_STYLE ^ wx.CLOSE_BOX)
     2673            self.G2plotNB = G2plt.G2PlotNoteBook(self.plotFrame,G2frame=self)
    26712674            self.data = data
     2675            self.dataList = dataList
     2676            self.dataType = dataType
    26722677            size = (400,250)
    26732678            panel = wxscroll.ScrolledPanel(self, wx.ID_ANY,size=size,
     
    26882693                self.dataGridSizer.Add(scale,0,wx.LEFT,10)
    26892694                self.dataGridSizer.Add(name,0,wx.RIGHT,10)
    2690             if dataType:
    2691                 self.dataGridSizer.Add(wx.StaticText(panel,-1,'Sum result name: '+dataType),0, \
     2695            if self.dataType:
     2696                self.dataGridSizer.Add(wx.StaticText(panel,-1,'Sum result name: '+self.dataType),0, \
    26922697                    wx.LEFT|wx.TOP|wx.ALIGN_CENTER_VERTICAL,10)
    26932698                self.name = wx.TextCtrl(panel,-1,self.data[-1],size=wx.Size(300,20),style=wx.TE_PROCESS_ENTER)
     
    27032708                self.dataGridSizer.Add(allScale,0,WACV)
    27042709            mainSizer.Add(self.dataGridSizer,0,wx.EXPAND)
     2710            TestBtn = wx.Button(panel,-1,"Test")
     2711            TestBtn.Bind(wx.EVT_BUTTON, self.OnTest)
    27052712            OkBtn = wx.Button(panel,-1,"Ok")
    27062713            OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
    27072714            cancelBtn = wx.Button(panel,-1,"Cancel")
    27082715            cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)
    2709             btnSizer = wx.BoxSizer(wx.HORIZONTAL)
    2710             btnSizer.Add((20,20),1)
     2716            btnSizer = wx.FlexGridSizer(0,3,10,20)
     2717            if self.dataType =='PWDR':  btnSizer.Add(TestBtn)
    27112718            btnSizer.Add(OkBtn)
    2712             btnSizer.Add((20,20),1)
    27132719            btnSizer.Add(cancelBtn)
    2714             btnSizer.Add((20,20),1)
    27152720           
    27162721            panel.SetSizer(mainSizer)
    27172722            panel.SetAutoLayout(1)
    27182723            panel.SetupScrolling()
    2719             mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
     2724            mainSizer.Add((10,10),1)
     2725            mainSizer.Add(btnSizer,0,wx.CENTER)
    27202726            panel.SetSizer(mainSizer)
    27212727            panel.Fit()
     
    27522758        def OnNameChange(self,event):
    27532759            event.Skip()
    2754             self.data[-1] = self.name.GetValue()
     2760            self.data[-1] = self.name.GetValue()
     2761           
     2762        def OnTest(self,event):
     2763            lenX = 0
     2764            Xminmax = [0,0]
     2765            XY = []
     2766            Xsum = []
     2767            Ysum = []
     2768            Vsum = []
     2769            result = self.data
     2770            for i,item in enumerate(result[:-1]):
     2771                scale,name = item
     2772                data = self.dataList[i]
     2773                if scale:
     2774                    x,y,w,yc,yb,yd = data   #numpy arrays!
     2775                    XY.append([x,scale*y])
     2776                    v = 1./w
     2777                    if lenX:
     2778                        if lenX != len(x):
     2779                            self.ErrorDialog('Data length error','Data to be summed must have same number of points'+ \
     2780                                '\nExpected:'+str(lenX)+ \
     2781                                '\nFound:   '+str(len(x))+'\nfor '+name)
     2782                            self.OnCancel(event)
     2783                    else:
     2784                        lenX = len(x)
     2785                    if Xminmax[1]:
     2786                        if Xminmax != [x[0],x[-1]]:
     2787                            self.ErrorDialog('Data range error','Data to be summed must span same range'+ \
     2788                                '\nExpected:'+str(Xminmax[0])+' '+str(Xminmax[1])+ \
     2789                                '\nFound:   '+str(x[0])+' '+str(x[-1])+'\nfor '+name)
     2790                            self.OnCancel(event)
     2791                        else:
     2792                            for j,yi in enumerate(y):
     2793                                 Ysum[j] += scale*yi
     2794                                 Vsum[j] += abs(scale)*v[j]
     2795                    else:
     2796                        Xminmax = [x[0],x[-1]]
     2797                        Xsum = x
     2798                        Ysum = scale*y
     2799                        Vsum = abs(scale*v)
     2800            Wsum = 1./np.array(Vsum)
     2801            YCsum = np.zeros(lenX)
     2802            YBsum = np.zeros(lenX)
     2803            YDsum = np.zeros(lenX)
     2804            XY.append([Xsum,Ysum])
     2805            self.result = [Xsum,Ysum,Wsum,YCsum,YBsum,YDsum]
     2806            G2plt.PlotXY(self,XY,lines=True,Title='Sum:'+self.data[-1],labelY='Intensity',)
     2807            self.plotFrame.Show()
     2808           
    27552809           
    27562810        def OnOk(self,event):
     2811            if self.dataType == 'PWDR': self.OnTest(event)
    27572812            parent = self.GetParent()
    27582813            parent.Raise()
     
    27652820           
    27662821        def GetData(self):
    2767             return self.data
     2822            if self.dataType == 'PWDR':
     2823                return self.data,self.result
     2824            else:
     2825                return self.data
    27682826                       
    27692827    def OnPwdrSum(self,event):
     
    27892847                return
    27902848            TextList.append('default_sum_name')               
    2791             dlg = self.SumDialog(self,'Sum data','Enter scale for each pattern in summation','PWDR',TextList)
     2849            dlg = self.SumDialog(self,'Sum data','Enter scale for each pattern in summation','PWDR',TextList,DataList)
    27922850            try:
    27932851                if dlg.ShowModal() == wx.ID_OK:
    2794                     lenX = 0
    2795                     Xminmax = [0,0]
    2796                     Xsum = []
    2797                     Ysum = []
    2798                     Vsum = []
    2799                     result = dlg.GetData()
    2800                     for i,item in enumerate(result[:-1]):
    2801                         scale,name = item
    2802                         data = DataList[i]
    2803                         if scale:
    2804                             Comments.append("%10.3f %s" % (scale,' * '+name))
    2805                             x,y,w,yc,yb,yd = data   #numpy arrays!
    2806                             v = 1./w
    2807                             if lenX:
    2808                                 if lenX != len(x):
    2809                                     self.ErrorDialog('Data length error','Data to be summed must have same number of points'+ \
    2810                                         '\nExpected:'+str(lenX)+ \
    2811                                         '\nFound:   '+str(len(x))+'\nfor '+name)
    2812                                     return
    2813                             else:
    2814                                 lenX = len(x)
    2815                             if Xminmax[1]:
    2816                                 if Xminmax != [x[0],x[-1]]:
    2817                                     self.ErrorDialog('Data range error','Data to be summed must span same range'+ \
    2818                                         '\nExpected:'+str(Xminmax[0])+' '+str(Xminmax[1])+ \
    2819                                         '\nFound:   '+str(x[0])+' '+str(x[-1])+'\nfor '+name)
    2820                                     return
    2821                                 else:
    2822                                     for j,yi in enumerate(y):
    2823                                          Ysum[j] += scale*yi
    2824                                          Vsum[j] += abs(scale)*v[j]
    2825                             else:
    2826                                 Xminmax = [x[0],x[-1]]
    2827                                 YCsum = YBsum = YDsum = [0.0 for i in range(lenX)]
    2828                                 for j,yi in enumerate(y):
    2829                                     Xsum.append(x[j])
    2830                                     Ysum.append(scale*yi)
    2831                                     Vsum.append(abs(scale*v[j]))
    2832                     Wsum = 1./np.array(Vsum)
     2852                    result,sumData = dlg.GetData()
     2853                    Xsum,Ysum,Wsum,YCsum,YBsum,YDsum = sumData
     2854                    Xminmax = [Xsum[0],Xsum[-1]]
    28332855                    outname = 'PWDR '+result[-1]
    28342856                    Id = 0
     
    28892911                return
    28902912            TextList.append('default_sum_name')               
    2891             dlg = self.SumDialog(self,'Sum data','Enter scale for each image in summation','IMG',TextList)
     2913            dlg = self.SumDialog(self,'Sum data','Enter scale for each image in summation','IMG',TextList,DataList)
    28922914            try:
    28932915                if dlg.ShowModal() == wx.ID_OK:
  • trunk/GSASIIpwdGUI.py

    r2579 r2581  
    22622262           
    22632263    def OnMaterial(event):
    2264         event.Skip()
    22652264        Obj = event.GetEventObject()
    2266         id,key = Info[Obj.GetId()]
    2267         if key == 'Name':
    2268             data['Materials'][id][key] = Obj.GetValue()
    2269         elif key == 'VolFrac':
    2270             try:
    2271                 value = min(max(0.,float(Obj.GetValue())),1.)
    2272             except ValueError:
    2273                 value = data['Materials'][id][key]
    2274             data['Materials'][id][key] = value
    2275             data['Materials'][not id][key] = 1.-value
     2265        id = Info[Obj.GetId()]
     2266        data['Materials'][id]['Name'] = Obj.GetValue()
     2267        wx.CallAfter(UpdateSampleGrid,G2frame,data)
     2268       
     2269    def OnVolFrac(invalid,value,tc):
     2270        id = Info[tc.GetId()]
     2271        data['Materials'][not id][key] = 1.-value
    22762272        wx.CallAfter(UpdateSampleGrid,G2frame,data)
    22772273
     
    24292425            matsel = wx.ComboBox(G2frame.dataDisplay,value=item['Name'],choices=Substances['Substances'].keys(),
    24302426                style=wx.CB_READONLY|wx.CB_DROPDOWN)
    2431             Info[matsel.GetId()] = [id,'Name']
     2427            Info[matsel.GetId()] = id
    24322428            matsel.Bind(wx.EVT_COMBOBOX,OnMaterial)       
    24332429            subSizer.Add(matsel,0,WACV)
    24342430            subSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Volume fraction: '),0,WACV)
    2435 #        azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)
    2436             volfrac = wx.TextCtrl(G2frame.dataDisplay,value=str('%.3f'%(item['VolFrac'])),style=wx.TE_PROCESS_ENTER)
    2437             Info[volfrac.GetId()] = [id,'VolFrac']
    2438             volfrac.Bind(wx.EVT_TEXT_ENTER,OnMaterial)
    2439             volfrac.Bind(wx.EVT_KILL_FOCUS,OnMaterial)
     2431            volfrac = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,item,'VolFrac',
     2432                min=0.,max=1.,nDig=(10,3),typeHint=float,OnLeave=OnVolFrac)
    24402433            subSizer.Add(volfrac,0,WACV)
    24412434            material = Substances['Substances'][item['Name']]
     
    26812674        wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
    26822675       
    2683     def OnModVal(event):
    2684         event.Skip()
    2685         Obj = event.GetEventObject()
    2686         ObjId = Obj.GetId()
    2687         Id = Indx[ObjId]
    2688         try:
    2689             value = min(0.98,max(-0.98,float(Obj.GetValue())))
    2690         except ValueError:
    2691             value = ssopt['ModVec'][Id]
    2692         Obj.SetValue('%.4f'%(value))
    2693         ssopt['ModVec'][Id] = value
    2694         OnHklShow(event)
     2676    def OnModVal(invalid,value,tc):
     2677        OnHklShow(tc.event)
    26952678       
    26962679    def OnMoveMod(event):
     
    32433226            if show:
    32443227                valSizer = wx.BoxSizer(wx.HORIZONTAL)
    3245 #        azmthOff = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,data,'azmthOff',nDig=(10,2),typeHint=float,OnLeave=OnAzmthOff)
    3246                 modVal = wx.TextCtrl(G2frame.dataDisplay,value=('%.4f'%(val)),
    3247                     size=wx.Size(50,20),style=wx.TE_PROCESS_ENTER)
    3248                 modVal.Bind(wx.EVT_TEXT_ENTER,OnModVal)       
    3249                 modVal.Bind(wx.EVT_KILL_FOCUS,OnModVal)
     3228                modVal = G2G.ValidatedTxtCtrl(G2frame.dataDisplay,ssopt['ModVec'],i,
     3229                    min=-.98,max=.98,nDig=(10,4),typeHint=float,OnLeave=OnModVal)
    32503230                valSizer.Add(modVal,0,WACV)
    32513231                modSpin = wx.SpinButton(G2frame.dataDisplay,style=wx.SP_VERTICAL,size=wx.Size(20,20))
Note: See TracChangeset for help on using the changeset viewer.