source: trunk/GSASIIddataGUI.py @ 927

Last change on this file since 927 was 927, checked in by vondreele, 9 years ago

more G2str fixes

  • Property svn:eol-style set to native
File size: 43.1 KB
Line 
1# -*- coding: utf-8 -*-
2#GSASII - phase data display routines
3########### SVN repository information ###################
4# $Date: 2013-02-01 15:23:56 -0600 (Fri, 01 Feb 2013) $
5# $Author: vondreele $
6# $Revision: 844 $
7# $URL: https://subversion.xor.aps.anl.gov/pyGSAS/trunk/GSASIIddataGUI.py $
8# $Id: GSASIIddataGUI.py 844 2013-02-01 21:23:56Z vondreele $
9########### SVN repository information ###################
10'''
11*GSASIIddataGUI: Phase Diffraction Data GUI*
12--------------------------------------------
13
14Module to create the GUI for display of diffraction data * phase
15information that is shown in the data display window
16(when a phase is selected.)
17
18'''
19import wx
20import wx.grid as wg
21import wx.lib.gridmovers as wgmove
22import matplotlib as mpl
23import math
24import copy
25import time
26import sys
27import random as ran
28import cPickle
29import GSASIIpath
30GSASIIpath.SetVersionNumber("$Revision: 844 $")
31import GSASIIlattice as G2lat
32import GSASIIspc as G2spc
33import GSASIIElem as G2elem
34import GSASIIElemGUI as G2elemGUI
35import GSASIIplot as G2plt
36import GSASIIgrid as G2gd
37import GSASIIIO as G2IO
38import GSASIImath as G2mth
39import GSASIIpwd as G2pwd
40import numpy as np
41import numpy.linalg as nl
42import numpy.ma as ma
43
44VERY_LIGHT_GREY = wx.Colour(235,235,235)
45WHITE = wx.Colour(255,255,255)
46BLACK = wx.Colour(0,0,0)
47mapDefault = {'MapType':'','RefList':'','Resolution':0.5,'Show bonds':True,
48                'rho':[],'rhoMax':0.,'mapSize':10.0,'cutOff':50.,'Flip':False}
49# trig functions in degrees
50sind = lambda x: np.sin(x*np.pi/180.)
51tand = lambda x: np.tan(x*np.pi/180.)
52cosd = lambda x: np.cos(x*np.pi/180.)
53asind = lambda x: 180.*np.arcsin(x)/np.pi
54acosd = lambda x: 180.*np.arccos(x)/np.pi
55
56################################################################################
57##### DData routines
58################################################################################       
59def UpdateDData(G2frame,DData,data):
60    '''Display the Diffraction Data associated with a phase
61    (items where there is a value for each histogram and phase)
62
63    :param wx.frame G2frame: the main GSAS-II frame object
64
65    :param wx.ScrolledWindow DData: notebook page to be used for the display
66
67    :param dict data: all the information on the phase in a dictionary
68
69    '''
70    G2frame.dataFrame.SetStatusText('')
71    UseList = data['Histograms']
72    if UseList:
73        G2frame.dataFrame.DataMenu.Enable(G2gd.wxID_DATADELETE,True)
74        for item in G2frame.Refine: item.Enable(True)
75    else:
76        G2frame.dataFrame.DataMenu.Enable(G2gd.wxID_DATADELETE,False)
77        for item in G2frame.Refine: item.Enable(False)
78    generalData = data['General']
79    PhaseName = generalData['Name']       
80    SGData = generalData['SGData']
81    keyList = UseList.keys()
82    keyList.sort()
83    PWDR = any(['PWDR' in item for item in keyList])
84    Indx = {}
85   
86    def PlotSizer():
87
88        def OnPlotSel(event):
89            Obj = event.GetEventObject()
90            generalData['Data plot type'] = Obj.GetStringSelection()
91            wx.CallAfter(UpdateDData,G2frame,DData,data)
92            G2plt.PlotSizeStrainPO(G2frame,data)
93           
94        def OnPOhkl(event):
95            Obj = event.GetEventObject()
96            Saxis = Obj.GetValue().split()
97            try:
98                hkl = [int(Saxis[i]) for i in range(3)]
99            except (ValueError,IndexError):
100                hkl = generalData['POhkl']
101            if not np.any(np.array(hkl)):
102                hkl = generalData['POhkl']
103            generalData['POhkl'] = hkl
104            h,k,l = hkl
105            Obj.SetValue('%3d %3d %3d'%(h,k,l)) 
106            G2plt.PlotSizeStrainPO(G2frame,data)
107       
108        plotSizer = wx.BoxSizer(wx.VERTICAL)
109        choice = ['None','Mustrain','Size','Preferred orientation']
110        plotSel = wx.RadioBox(DData,-1,'Select plot type:',choices=choice,
111            majorDimension=2,style=wx.RA_SPECIFY_COLS)
112        plotSel.SetStringSelection(generalData['Data plot type'])
113        plotSel.Bind(wx.EVT_RADIOBOX,OnPlotSel)   
114        plotSizer.Add(plotSel)
115        if generalData['Data plot type'] == 'Preferred orientation':
116            POhklSizer = wx.BoxSizer(wx.HORIZONTAL)
117            POhklSizer.Add(wx.StaticText(DData,-1,' Plot preferred orientation for H K L: '),0,wx.ALIGN_CENTER_VERTICAL)
118            h,k,l = generalData['POhkl']
119            poAxis = wx.TextCtrl(DData,-1,'%3d %3d %3d'%(h,k,l),style=wx.TE_PROCESS_ENTER)
120            poAxis.Bind(wx.EVT_TEXT_ENTER,OnPOhkl)
121            poAxis.Bind(wx.EVT_KILL_FOCUS,OnPOhkl)
122            POhklSizer.Add(poAxis,0,wx.ALIGN_CENTER_VERTICAL)
123            plotSizer.Add(POhklSizer)           
124        return plotSizer
125       
126    def ScaleSizer():
127       
128        def OnScaleRef(event):
129            Obj = event.GetEventObject()
130            UseList[Indx[Obj.GetId()]]['Scale'][1] = Obj.GetValue()
131           
132        def OnScaleVal(event):
133            Obj = event.GetEventObject()
134            try:
135                scale = float(Obj.GetValue())
136                if scale > 0:
137                    UseList[Indx[Obj.GetId()]]['Scale'][0] = scale
138            except ValueError:
139                pass
140            Obj.SetValue("%.4f"%(UseList[Indx[Obj.GetId()]]['Scale'][0]))          #reset in case of error
141                       
142        scaleSizer = wx.BoxSizer(wx.HORIZONTAL)
143        if 'PWDR' in item:
144            scaleRef = wx.CheckBox(DData,-1,label=' Phase fraction: ')
145        elif 'HKLF' in item:
146            scaleRef = wx.CheckBox(DData,-1,label=' Scale factor: ')               
147        scaleRef.SetValue(UseList[item]['Scale'][1])
148        Indx[scaleRef.GetId()] = item
149        scaleRef.Bind(wx.EVT_CHECKBOX, OnScaleRef)
150        scaleSizer.Add(scaleRef,0,wx.ALIGN_CENTER_VERTICAL)
151        scaleVal = wx.TextCtrl(DData,wx.ID_ANY,
152            '%.4f'%(UseList[item]['Scale'][0]),style=wx.TE_PROCESS_ENTER)
153        Indx[scaleVal.GetId()] = item
154        scaleVal.Bind(wx.EVT_TEXT_ENTER,OnScaleVal)
155        scaleVal.Bind(wx.EVT_KILL_FOCUS,OnScaleVal)
156        scaleSizer.Add(scaleVal,0,wx.ALIGN_CENTER_VERTICAL)
157        return scaleSizer
158       
159    def OnUseData(event):
160        Obj = event.GetEventObject()
161        hist = Indx[Obj.GetId()]
162        UseList[hist]['Use'] = Obj.GetValue()
163       
164    def OnShowData(event):
165        Obj = event.GetEventObject()
166        hist = Indx[Obj.GetId()]
167        UseList[hist]['Show'] = Obj.GetValue()
168        wx.CallAfter(UpdateDData,G2frame,DData,data)
169        G2plt.PlotSizeStrainPO(G2frame,data)
170       
171    def OnCopyData(event):
172        #how about HKLF data? This is only for PWDR data
173        Obj = event.GetEventObject()
174        hist = Indx[Obj.GetId()]
175        sourceDict = UseList[hist]
176        copyNames = ['Scale','Pref.Ori.','Size','Mustrain','HStrain','Extinction','Babinet']
177        copyDict = {}
178        for name in copyNames: 
179            copyDict[name] = copy.deepcopy(sourceDict[name])        #force copy
180        keyList = ['All',]+UseList.keys()
181        if UseList:
182            copyList = []
183            dlg = wx.MultiChoiceDialog(G2frame, 
184                'Copy parameters to which histograms?', 'Copy parameters', 
185                keyList, wx.CHOICEDLG_STYLE)
186            try:
187                if dlg.ShowModal() == wx.ID_OK:
188                    result = dlg.GetSelections()
189                    for i in result: 
190                        copyList.append(keyList[i])
191                    if 'All' in copyList: 
192                        copyList = keyList[1:]
193                    for item in copyList:
194                        UseList[item].update(copy.deepcopy(copyDict))
195                    wx.CallAfter(UpdateDData,G2frame,DData,data)
196            finally:
197                dlg.Destroy()
198               
199    def OnCopyFlags(event):
200        Obj = event.GetEventObject()
201        hist = Indx[Obj.GetId()]
202        sourceDict = UseList[hist]
203        copyDict = {}
204        copyNames = ['Scale','Pref.Ori.','Size','Mustrain','HStrain','Extinction','Babinet']
205        babNames = ['BabA','BabU']
206        for name in copyNames:
207            if name in ['Scale','Extinction','HStrain']:
208                copyDict[name] = sourceDict[name][1]
209            elif name in ['Size','Mustrain']:
210                copyDict[name] = [sourceDict[name][0],sourceDict[name][2],sourceDict[name][4]]
211            elif name == 'Pref.Ori.':
212                copyDict[name] = [sourceDict[name][0],sourceDict[name][2]]
213                if sourceDict[name][0] == 'SH':
214                    SHterms = sourceDict[name][5]
215                    SHflags = {}
216                    for item in SHterms:
217                        SHflags[item] = SHterms[item][1]
218                    copyDict[name].append(SHflags)
219            elif name == 'Babinet':
220                copyDict[name] = {}
221                for bab in babNames:
222                    copyDict[name][bab] = sourceDict[name][bab][1]                       
223        keyList = ['All',]+UseList.keys()
224        if UseList:
225            copyList = []
226            dlg = wx.MultiChoiceDialog(G2frame, 
227                'Copy parameters to which histograms?', 'Copy parameters', 
228                keyList, wx.CHOICEDLG_STYLE)
229            try:
230                if dlg.ShowModal() == wx.ID_OK:
231                    result = dlg.GetSelections()
232                    for i in result: 
233                        copyList.append(keyList[i])
234                    if 'All' in copyList: 
235                        copyList = keyList[1:]
236                    for item in copyList:
237                        UseList[item]                           
238                        for name in copyNames:
239                            if name in ['Scale','Extinction','HStrain']:
240                                UseList[item][name][1] = copy.copy(copyDict[name])
241                            elif name in ['Size','Mustrain']:
242                                UseList[item][name][0] = copy.copy(copyDict[name][0])
243                                UseList[item][name][2] = copy.copy(copyDict[name][1])
244                                UseList[item][name][4] = copy.copy(copyDict[name][2])
245                            elif name == 'Pref.Ori.':
246                                UseList[item][name][0] = copy.copy(copyDict[name][0])
247                                UseList[item][name][2] = copy.copy(copyDict[name][1])
248                                if sourceDict[name][0] == 'SH':
249                                    SHflags = copy.copy(copyDict[name][2])
250                                    SHterms = copy.copy(sourceDict[name][5])
251                                    for item in SHflags:
252                                        SHterms[item][1] = copy.copy(SHflags[item])
253                            elif name == 'Babinet':
254                                for bab in babNames:
255                                    UseList[item][name][bab][1] = copy.copy(copyDict[name][bab])                                             
256                    wx.CallAfter(UpdateDData,G2frame,DData,data)
257            finally:
258                dlg.Destroy()
259       
260       
261    def OnLGmixRef(event):
262        Obj = event.GetEventObject()
263        hist,name = Indx[Obj.GetId()]
264        UseList[hist][name][2][2] = Obj.GetValue()
265       
266    def OnLGmixVal(event):
267        Obj = event.GetEventObject()
268        hist,name = Indx[Obj.GetId()]
269        try:
270            value = float(Obj.GetValue())
271            if 0.1 <= value <= 1:
272                UseList[hist][name][1][2] = value
273            else:
274                raise ValueError
275        except ValueError:
276            pass
277        Obj.SetValue("%.4f"%(UseList[hist][name][1][2]))          #reset in case of error
278
279    def OnSizeType(event):
280        Obj = event.GetEventObject()
281        hist = Indx[Obj.GetId()]
282        UseList[hist]['Size'][0] = Obj.GetValue()
283        G2plt.PlotSizeStrainPO(G2frame,data)
284        wx.CallAfter(UpdateDData,G2frame,DData,data)
285       
286    def OnSizeRef(event):
287        Obj = event.GetEventObject()
288        hist,pid = Indx[Obj.GetId()]
289        if UseList[hist]['Size'][0] == 'ellipsoidal':
290            UseList[hist]['Size'][5][pid] = Obj.GetValue()               
291        else:
292            UseList[hist]['Size'][2][pid] = Obj.GetValue()
293       
294    def OnSizeVal(event):
295        Obj = event.GetEventObject()
296        hist,pid = Indx[Obj.GetId()]
297        if UseList[hist]['Size'][0] == 'ellipsoidal':
298            try:
299                size = float(Obj.GetValue())
300                if pid < 3 and size <= 0.001:            #10A lower limit!
301                    raise ValueError
302                UseList[hist]['Size'][4][pid] = size                   
303            except ValueError:
304                pass
305            Obj.SetValue("%.3f"%(UseList[hist]['Size'][4][pid]))          #reset in case of error
306        else:
307            try:
308                size = float(Obj.GetValue())
309                if size <= 0.001:            #10A lower limit!
310                    raise ValueError
311                UseList[hist]['Size'][1][pid] = size
312            except ValueError:
313                pass
314            Obj.SetValue("%.3f"%(UseList[hist]['Size'][1][pid]))          #reset in case of error
315        G2plt.PlotSizeStrainPO(G2frame,data)
316       
317    def OnSizeAxis(event):           
318        Obj = event.GetEventObject()
319        hist = Indx[Obj.GetId()]
320        Saxis = Obj.GetValue().split()
321        try:
322            hkl = [int(Saxis[i]) for i in range(3)]
323        except (ValueError,IndexError):
324            hkl = UseList[hist]['Size'][3]
325        if not np.any(np.array(hkl)):
326            hkl = UseList[hist]['Size'][3]
327        UseList[hist]['Size'][3] = hkl
328        h,k,l = hkl
329        Obj.SetValue('%3d %3d %3d'%(h,k,l)) 
330                   
331    def OnResetSize(event):
332        Obj = event.GetEventObject()
333        Obj.SetValue(False)
334        item,name = Indx[Obj.GetId()]
335        if name == 'isotropic':
336            UseList[item]['Size'][1][0] = 1.0
337        elif name == 'uniaxial':
338            UseList[item]['Size'][1][0] = 1.0
339            UseList[item]['Size'][1][1] = 1.0
340        elif name == 'ellipsoidal':
341            for i in range(3):
342                UseList[item]['Size'][4][i] = 1.0
343                UseList[item]['Size'][4][i+3] = 0.0
344        G2plt.PlotSizeStrainPO(G2frame,data)
345        wx.CallAfter(UpdateDData,G2frame,DData,data)
346           
347    def OnStrainType(event):
348        Obj = event.GetEventObject()
349        hist = Indx[Obj.GetId()]
350        UseList[hist]['Mustrain'][0] = Obj.GetValue()
351        wx.CallAfter(UpdateDData,G2frame,DData,data)
352        G2plt.PlotSizeStrainPO(G2frame,data)
353       
354    def OnStrainRef(event):
355        Obj = event.GetEventObject()
356        hist,pid = Indx[Obj.GetId()]
357        if UseList[hist]['Mustrain'][0] == 'generalized':
358            UseList[hist]['Mustrain'][5][pid] = Obj.GetValue()
359        else:
360            UseList[hist]['Mustrain'][2][pid] = Obj.GetValue()
361       
362    def OnStrainVal(event):
363        Snames = G2spc.MustrainNames(SGData)
364        Obj = event.GetEventObject()
365        hist,pid = Indx[Obj.GetId()]
366        try:
367            strain = float(Obj.GetValue())
368            if UseList[hist]['Mustrain'][0] == 'generalized':
369                if '4' in Snames[pid] and strain < 0:
370                    raise ValueError
371                UseList[hist]['Mustrain'][4][pid] = strain
372            else:
373                if strain <= 0:
374                    raise ValueError
375                UseList[hist]['Mustrain'][1][pid] = strain
376        except ValueError:
377            pass
378        if UseList[hist]['Mustrain'][0] == 'generalized':
379            Obj.SetValue("%.3f"%(UseList[hist]['Mustrain'][4][pid]))          #reset in case of error
380        else:
381            Obj.SetValue("%.1f"%(UseList[hist]['Mustrain'][1][pid]))          #reset in case of error
382        G2plt.PlotSizeStrainPO(G2frame,data)
383       
384    def OnStrainAxis(event):
385        Obj = event.GetEventObject()
386        hist = Indx[Obj.GetId()]
387        Saxis = Obj.GetValue().split()
388        try:
389            hkl = [int(Saxis[i]) for i in range(3)]
390        except (ValueError,IndexError):
391            hkl = UseList[hist]['Mustrain'][3]
392        if not np.any(np.array(hkl)):
393            hkl = UseList[hist]['Mustrain'][3]
394        UseList[hist]['Mustrain'][3] = hkl
395        h,k,l = hkl
396        Obj.SetValue('%3d %3d %3d'%(h,k,l)) 
397        G2plt.PlotSizeStrainPO(G2frame,data)
398       
399    def OnResetStrain(event):
400        Obj = event.GetEventObject()
401        Obj.SetValue(False)
402        item,name = Indx[Obj.GetId()]
403        if name == 'isotropic':
404            UseList[item]['Mustrain'][1][0] = 1000.0
405        elif name == 'uniaxial':
406            UseList[item]['Mustrain'][1][0] = 1000.0
407            UseList[item]['Mustrain'][1][1] = 1000.0
408        elif name == 'generalized':
409            nTerm = len(UseList[item]['Mustrain'][4])
410            for i in range(nTerm):
411                UseList[item]['Mustrain'][4][i] = 0.01
412        wx.CallAfter(UpdateDData,G2frame,DData,data)
413        G2plt.PlotSizeStrainPO(G2frame,data)
414           
415    def OnHstrainRef(event):
416        Obj = event.GetEventObject()
417        hist,pid = Indx[Obj.GetId()]
418        UseList[hist]['HStrain'][1][pid] = Obj.GetValue()
419       
420    def OnHstrainVal(event):
421        Snames = G2spc.HStrainNames(SGData)
422        Obj = event.GetEventObject()
423        hist,pid = Indx[Obj.GetId()]
424        try:
425            strain = float(Obj.GetValue())
426            UseList[hist]['HStrain'][0][pid] = strain
427        except ValueError:
428            pass
429        Obj.SetValue("%.5f"%(UseList[hist]['HStrain'][0][pid]))          #reset in case of error
430
431    def OnPOVal(event):
432        Obj = event.GetEventObject()
433        hist = Indx[Obj.GetId()]
434        try:
435            mdVal = float(Obj.GetValue())
436            if mdVal > 0:
437                UseList[hist]['Pref.Ori.'][1] = mdVal
438        except ValueError:
439            pass
440        Obj.SetValue("%.3f"%(UseList[hist]['Pref.Ori.'][1]))          #reset in case of error
441       
442    def OnPOAxis(event):
443        Obj = event.GetEventObject()
444        hist = Indx[Obj.GetId()]
445        Saxis = Obj.GetValue().split()
446        try:
447            hkl = [int(Saxis[i]) for i in range(3)]
448        except (ValueError,IndexError):
449            hkl = UseList[hist]['Pref.Ori.'][3]
450        if not np.any(np.array(hkl)):
451            hkl = UseList[hist]['Pref.Ori.'][3]
452        UseList[hist]['Pref.Ori.'][3] = hkl
453        h,k,l = hkl
454        Obj.SetValue('%3d %3d %3d'%(h,k,l)) 
455       
456    def OnPOOrder(event):
457        Obj = event.GetEventObject()
458        hist = Indx[Obj.GetId()]
459        Order = int(Obj.GetValue())
460        UseList[hist]['Pref.Ori.'][4] = Order
461        UseList[hist]['Pref.Ori.'][5] = SetPOCoef(Order,hist)
462        wx.CallAfter(UpdateDData,G2frame,DData,data)
463
464    def OnPOType(event):
465        Obj = event.GetEventObject()
466        hist = Indx[Obj.GetId()]
467        if 'March' in Obj.GetValue():
468            UseList[hist]['Pref.Ori.'][0] = 'MD'
469        else:
470            UseList[hist]['Pref.Ori.'][0] = 'SH'
471        wx.CallAfter(UpdateDData,G2frame,DData,data)           
472
473    def OnPORef(event):
474        Obj = event.GetEventObject()
475        hist = Indx[Obj.GetId()]
476        UseList[hist]['Pref.Ori.'][2] = Obj.GetValue()
477           
478    def SetPOCoef(Order,hist):
479        cofNames = G2lat.GenSHCoeff(SGData['SGLaue'],'0',Order,False)     #cylindrical & no M
480        newPOCoef = dict(zip(cofNames,np.zeros(len(cofNames))))
481        POCoeff = UseList[hist]['Pref.Ori.'][5]
482        for cofName in POCoeff:
483            if cofName in  cofNames:
484                newPOCoef[cofName] = POCoeff[cofName]
485        return newPOCoef
486   
487    def OnExtRef(event):
488        Obj = event.GetEventObject()
489        UseList[Indx[Obj.GetId()]]['Extinction'][1] = Obj.GetValue()
490       
491    def OnExtVal(event):
492        Obj = event.GetEventObject()
493        try:
494            ext = float(Obj.GetValue())
495            if ext >= 0:
496                UseList[Indx[Obj.GetId()]]['Extinction'][0] = ext
497        except ValueError:
498            pass
499        Obj.SetValue("%.2f"%(UseList[Indx[Obj.GetId()]]['Extinction'][0]))
500
501    def OnBabRef(event):
502        Obj = event.GetEventObject()
503        item,bab = Indx[Obj.GetId()]
504        UseList[item]['Babinet']['Bab'+bab][1] = Obj.GetValue()
505       
506    def OnBabVal(event):
507        Obj = event.GetEventObject()
508        item,bab = Indx[Obj.GetId()]
509        try:
510            val = float(Obj.GetValue())
511            if val >= 0:
512                UseList[item]['Babinet']['Bab'+bab][0] = val
513        except ValueError:
514            pass
515        Obj.SetValue("%.3f"%(UseList[item]['Babinet']['Bab'+bab][0]))
516
517    def OnTbarVal(event):
518        Obj = event.GetEventObject()
519        try:
520            tbar = float(Obj.GetValue())
521            if tbar > 0:
522                UseList[Indx[Obj.GetId()]]['Extinction'][2]['Tbar'] = tbar
523        except ValueError:
524            pass
525        Obj.SetValue("%.3f"%(UseList[Indx[Obj.GetId()]]['Extinction'][2]['Tbar']))
526
527    def OnCos2TM(event):
528        Obj = event.GetEventObject()
529        try:
530            val = float(Obj.GetValue())
531            if 0. < val <= 1.:
532                UseList[Indx[Obj.GetId()]]['Extinction'][2]['Cos2TM'] = val
533        except ValueError:
534            pass
535        Obj.SetValue("%.3f"%(UseList[Indx[Obj.GetId()]]['Extinction'][2]['Cos2TM']))
536       
537    def OnEval(event):
538        Obj = event.GetEventObject()
539        item = Indx[Obj.GetId()]
540        try:
541            val = float(Obj.GetValue())
542            if val > 0:
543                UseList[item[0]]['Extinction'][2][item[1]][0] = val
544        except ValueError:
545            pass
546        Obj.SetValue("%10.3e"%(UseList[item[0]]['Extinction'][2][item[1]][0]))
547       
548    def OnEref(event):
549        Obj = event.GetEventObject()
550        item = Indx[Obj.GetId()]
551        UseList[item[0]]['Extinction'][2][item[1]][1] = Obj.GetValue()
552
553    def OnSCExtType(event):
554        Obj = event.GetEventObject()
555        item = Indx[Obj.GetId()]
556        UseList[item[0]]['Extinction'][item[1]] = Obj.GetValue()
557        wx.CallAfter(UpdateDData,G2frame,DData,data)
558           
559    def checkAxis(axis):
560        if not np.any(np.array(axis)):
561            return False
562        return axis
563       
564    def TopSizer(name,choices,parm,OnType):
565        topSizer = wx.BoxSizer(wx.HORIZONTAL)
566        topSizer.Add(wx.StaticText(DData,-1,name),0,wx.ALIGN_CENTER_VERTICAL)
567        sizeType = wx.ComboBox(DData,wx.ID_ANY,value=UseList[item][parm][0],choices=choices,
568            style=wx.CB_READONLY|wx.CB_DROPDOWN)
569        sizeType.Bind(wx.EVT_COMBOBOX, OnType)
570        Indx[sizeType.GetId()] = item
571        topSizer.Add(sizeType)
572        topSizer.Add((5,0),0)
573        return topSizer
574       
575    def LGmixSizer(name,OnVal,OnRef):
576        lgmixSizer = wx.BoxSizer(wx.HORIZONTAL)
577        lgmixRef = wx.CheckBox(DData,-1,label='LGmix')
578        lgmixRef.thisown = False
579        lgmixRef.SetValue(UseList[item][name][2][2])
580        Indx[lgmixRef.GetId()] = [item,name]
581        lgmixRef.Bind(wx.EVT_CHECKBOX, OnRef)
582        lgmixSizer.Add(lgmixRef,0,wx.ALIGN_CENTER_VERTICAL)
583        lgmixVal = wx.TextCtrl(DData,wx.ID_ANY,
584            '%.4f'%(UseList[item][name][1][2]),style=wx.TE_PROCESS_ENTER)
585        Indx[lgmixVal.GetId()] = [item,name]
586        lgmixVal.Bind(wx.EVT_TEXT_ENTER,OnVal)
587        lgmixVal.Bind(wx.EVT_KILL_FOCUS,OnVal)
588        lgmixSizer.Add(lgmixVal,0,wx.ALIGN_CENTER_VERTICAL)
589        return lgmixSizer
590                   
591    def ResetSizer(name,OnReset):
592        resetSizer = wx.BoxSizer(wx.HORIZONTAL)
593        resetSizer.Add((5,0),0)
594        reset = wx.CheckBox(DData,-1,label='Reset?')
595        reset.thisown = False
596        reset.SetValue(False)
597        Indx[reset.GetId()] = [item,name]
598        reset.Bind(wx.EVT_CHECKBOX,OnReset)
599        resetSizer.Add(reset,0,wx.ALIGN_CENTER_VERTICAL)
600        return resetSizer
601       
602    def IsoSizer(name,parm,fmt,OnVal,OnRef):
603        isoSizer = wx.BoxSizer(wx.HORIZONTAL)
604        sizeRef = wx.CheckBox(DData,-1,label=name)
605        sizeRef.thisown = False
606        sizeRef.SetValue(UseList[item][parm][2][0])
607        Indx[sizeRef.GetId()] = [item,0]
608        sizeRef.Bind(wx.EVT_CHECKBOX, OnRef)
609        isoSizer.Add(sizeRef,0,wx.ALIGN_CENTER_VERTICAL)
610        sizeVal = wx.TextCtrl(DData,wx.ID_ANY,
611            fmt%(UseList[item][parm][1][0]),style=wx.TE_PROCESS_ENTER)
612        Indx[sizeVal.GetId()] = [item,0]
613        sizeVal.Bind(wx.EVT_TEXT_ENTER,OnVal)
614        sizeVal.Bind(wx.EVT_KILL_FOCUS,OnVal)
615        isoSizer.Add(sizeVal,0,wx.ALIGN_CENTER_VERTICAL)
616        return isoSizer
617       
618    def UniSizer(parm,OnAxis):
619        uniSizer = wx.BoxSizer(wx.HORIZONTAL)
620        uniSizer.Add(wx.StaticText(DData,-1,' Unique axis, H K L: '),0,wx.ALIGN_CENTER_VERTICAL)
621        h,k,l = UseList[item][parm][3]
622        Axis = wx.TextCtrl(DData,-1,'%3d %3d %3d'%(h,k,l),style=wx.TE_PROCESS_ENTER)
623        Indx[Axis.GetId()] = item
624        Axis.Bind(wx.EVT_TEXT_ENTER,OnAxis)
625        Axis.Bind(wx.EVT_KILL_FOCUS,OnAxis)
626        uniSizer.Add(Axis,0,wx.ALIGN_CENTER_VERTICAL)
627        return uniSizer
628       
629    def UniDataSizer(parmName,parm,fmt,OnVal,OnRef):
630        dataSizer = wx.BoxSizer(wx.HORIZONTAL)
631        parms = zip([' Equatorial '+parmName,' Axial '+parmName],
632            UseList[item][parm][1],UseList[item][parm][2],range(2))
633        for Pa,val,ref,id in parms:
634            sizeRef = wx.CheckBox(DData,-1,label=Pa)
635            sizeRef.thisown = False
636            sizeRef.SetValue(ref)
637            Indx[sizeRef.GetId()] = [item,id]
638            sizeRef.Bind(wx.EVT_CHECKBOX, OnRef)
639            dataSizer.Add(sizeRef,0,wx.ALIGN_CENTER_VERTICAL)
640            sizeVal = wx.TextCtrl(DData,wx.ID_ANY,fmt%(val),style=wx.TE_PROCESS_ENTER)
641            Indx[sizeVal.GetId()] = [item,id]
642            sizeVal.Bind(wx.EVT_TEXT_ENTER,OnVal)
643            sizeVal.Bind(wx.EVT_KILL_FOCUS,OnVal)
644            dataSizer.Add(sizeVal,0,wx.ALIGN_CENTER_VERTICAL)
645            dataSizer.Add((5,0),0)
646        return dataSizer
647       
648    def EllSizeDataSizer():
649        parms = zip(['S11','S22','S33','S12','S13','S23'],UseList[item]['Size'][4],
650            UseList[item]['Size'][5],range(6))
651        dataSizer = wx.FlexGridSizer(1,6,5,5)
652        for Pa,val,ref,id in parms:
653            sizeRef = wx.CheckBox(DData,-1,label=Pa)
654            sizeRef.thisown = False
655            sizeRef.SetValue(ref)
656            Indx[sizeRef.GetId()] = [item,id]
657            sizeRef.Bind(wx.EVT_CHECKBOX, OnSizeRef)
658            dataSizer.Add(sizeRef,0,wx.ALIGN_CENTER_VERTICAL)
659            sizeVal = wx.TextCtrl(DData,wx.ID_ANY,'%.3f'%(val),style=wx.TE_PROCESS_ENTER)
660            Indx[sizeVal.GetId()] = [item,id]
661            sizeVal.Bind(wx.EVT_TEXT_ENTER,OnSizeVal)
662            sizeVal.Bind(wx.EVT_KILL_FOCUS,OnSizeVal)
663            dataSizer.Add(sizeVal,0,wx.ALIGN_CENTER_VERTICAL)
664        return dataSizer
665       
666    def GenStrainDataSizer():
667        Snames = G2spc.MustrainNames(SGData)
668        numb = len(Snames)
669        if len(UseList[item]['Mustrain'][4]) < numb:
670            UseList[item]['Mustrain'][4] = numb*[0.0,]
671            UseList[item]['Mustrain'][5] = numb*[False,]
672        parms = zip(Snames,UseList[item]['Mustrain'][4],UseList[item]['Mustrain'][5],range(numb))
673        dataSizer = wx.FlexGridSizer(1,6,5,5)
674        for Pa,val,ref,id in parms:
675            strainRef = wx.CheckBox(DData,-1,label=Pa)
676            strainRef.thisown = False
677            strainRef.SetValue(ref)
678            Indx[strainRef.GetId()] = [item,id]
679            strainRef.Bind(wx.EVT_CHECKBOX, OnStrainRef)
680            dataSizer.Add(strainRef,0,wx.ALIGN_CENTER_VERTICAL)
681            strainVal = wx.TextCtrl(DData,wx.ID_ANY,'%.5f'%(val),style=wx.TE_PROCESS_ENTER)
682            Indx[strainVal.GetId()] = [item,id]
683            strainVal.Bind(wx.EVT_TEXT_ENTER,OnStrainVal)
684            strainVal.Bind(wx.EVT_KILL_FOCUS,OnStrainVal)
685            dataSizer.Add(strainVal,0,wx.ALIGN_CENTER_VERTICAL)
686        return dataSizer
687
688    def HstrainSizer():
689        hstrainSizer = wx.FlexGridSizer(1,6,5,5)
690        Hsnames = G2spc.HStrainNames(SGData)
691        parms = zip(Hsnames,UseList[item]['HStrain'][0],UseList[item]['HStrain'][1],range(len(Hsnames)))
692        for Pa,val,ref,id in parms:
693            hstrainRef = wx.CheckBox(DData,-1,label=Pa)
694            hstrainRef.thisown = False
695            hstrainRef.SetValue(ref)
696            Indx[hstrainRef.GetId()] = [item,id]
697            hstrainRef.Bind(wx.EVT_CHECKBOX, OnHstrainRef)
698            hstrainSizer.Add(hstrainRef,0,wx.ALIGN_CENTER_VERTICAL)
699            hstrainVal = wx.TextCtrl(DData,wx.ID_ANY,'%.5f'%(val),style=wx.TE_PROCESS_ENTER)
700            Indx[hstrainVal.GetId()] = [item,id]
701            hstrainVal.Bind(wx.EVT_TEXT_ENTER,OnHstrainVal)
702            hstrainVal.Bind(wx.EVT_KILL_FOCUS,OnHstrainVal)
703            hstrainSizer.Add(hstrainVal,0,wx.ALIGN_CENTER_VERTICAL)
704        return hstrainSizer
705       
706    def PoTopSizer(POData):
707        poSizer = wx.FlexGridSizer(1,6,5,5)
708        choice = ['March-Dollase','Spherical harmonics']
709        POtype = choice[['MD','SH'].index(POData[0])]
710        poSizer.Add(wx.StaticText(DData,-1,' Preferred orientation model '),0,wx.ALIGN_CENTER_VERTICAL)
711        POType = wx.ComboBox(DData,wx.ID_ANY,value=POtype,choices=choice,
712            style=wx.CB_READONLY|wx.CB_DROPDOWN)
713        Indx[POType.GetId()] = item
714        POType.Bind(wx.EVT_COMBOBOX, OnPOType)
715        poSizer.Add(POType)
716        if POData[0] == 'SH':
717            poSizer.Add(wx.StaticText(DData,-1,' Harmonic order: '),0,wx.ALIGN_CENTER_VERTICAL)
718            poOrder = wx.ComboBox(DData,wx.ID_ANY,value=str(POData[4]),choices=[str(2*i) for i in range(18)],
719                style=wx.CB_READONLY|wx.CB_DROPDOWN)
720            Indx[poOrder.GetId()] = item
721            poOrder.Bind(wx.EVT_COMBOBOX,OnPOOrder)
722            poSizer.Add(poOrder,0,wx.ALIGN_CENTER_VERTICAL)
723            poRef = wx.CheckBox(DData,-1,label=' Refine? ')
724            poRef.SetValue(POData[2])
725            Indx[poRef.GetId()] = item
726            poRef.Bind(wx.EVT_CHECKBOX,OnPORef)
727            poSizer.Add(poRef,0,wx.ALIGN_CENTER_VERTICAL)
728        return poSizer
729       
730    def MDDataSizer(POData):
731        poSizer = wx.BoxSizer(wx.HORIZONTAL)
732        poRef = wx.CheckBox(DData,-1,label=' March-Dollase ratio: ')
733        poRef.SetValue(POData[2])
734        Indx[poRef.GetId()] = item
735        poRef.Bind(wx.EVT_CHECKBOX,OnPORef)
736        poSizer.Add(poRef,0,wx.ALIGN_CENTER_VERTICAL)
737        poVal = wx.TextCtrl(DData,wx.ID_ANY,
738            '%.3f'%(POData[1]),style=wx.TE_PROCESS_ENTER)
739        Indx[poVal.GetId()] = item
740        poVal.Bind(wx.EVT_TEXT_ENTER,OnPOVal)
741        poVal.Bind(wx.EVT_KILL_FOCUS,OnPOVal)
742        poSizer.Add(poVal,0,wx.ALIGN_CENTER_VERTICAL)
743        poSizer.Add(wx.StaticText(DData,-1,' Unique axis, H K L: '),0,wx.ALIGN_CENTER_VERTICAL)
744        h,k,l =POData[3]
745        poAxis = wx.TextCtrl(DData,-1,'%3d %3d %3d'%(h,k,l),style=wx.TE_PROCESS_ENTER)
746        Indx[poAxis.GetId()] = item
747        poAxis.Bind(wx.EVT_TEXT_ENTER,OnPOAxis)
748        poAxis.Bind(wx.EVT_KILL_FOCUS,OnPOAxis)
749        poSizer.Add(poAxis,0,wx.ALIGN_CENTER_VERTICAL)
750        return poSizer
751       
752    def SHDataSizer(POData):
753        textJ = G2lat.textureIndex(POData[5])
754        mainSizer.Add(wx.StaticText(DData,-1,' Spherical harmonic coefficients: '+'Texture index: %.3f'%(textJ)),0,wx.ALIGN_CENTER_VERTICAL)
755        mainSizer.Add((0,5),0)
756        ODFSizer = wx.FlexGridSizer(2,8,2,2)
757        ODFIndx = {}
758        ODFkeys = POData[5].keys()
759        ODFkeys.sort()
760        for odf in ODFkeys:
761            ODFSizer.Add(wx.StaticText(DData,-1,odf),0,wx.ALIGN_CENTER_VERTICAL)
762            ODFval = wx.TextCtrl(DData,wx.ID_ANY,'%8.3f'%(POData[5][odf]),style=wx.TE_PROCESS_ENTER)
763            ODFIndx[ODFval.GetId()] = odf
764#             ODFval.Bind(wx.EVT_TEXT_ENTER,OnODFValue)
765#             ODFval.Bind(wx.EVT_KILL_FOCUS,OnODFValue)
766            ODFSizer.Add(ODFval,0,wx.ALIGN_CENTER_VERTICAL)
767        return ODFSizer
768       
769    def ExtSizer():           
770        extSizer = wx.BoxSizer(wx.HORIZONTAL)
771        extRef = wx.CheckBox(DData,-1,label=' Extinction: ')
772        extRef.SetValue(UseList[item]['Extinction'][1])
773        Indx[extRef.GetId()] = item
774        extRef.Bind(wx.EVT_CHECKBOX, OnExtRef)
775        extSizer.Add(extRef,0,wx.ALIGN_CENTER_VERTICAL)
776        extVal = wx.TextCtrl(DData,wx.ID_ANY,
777            '%.2f'%(UseList[item]['Extinction'][0]),style=wx.TE_PROCESS_ENTER)
778        Indx[extVal.GetId()] = item
779        extVal.Bind(wx.EVT_TEXT_ENTER,OnExtVal)
780        extVal.Bind(wx.EVT_KILL_FOCUS,OnExtVal)
781        extSizer.Add(extVal,0,wx.ALIGN_CENTER_VERTICAL)
782        return extSizer
783   
784    def SCExtSizer():
785        extSizer = wx.BoxSizer(wx.VERTICAL)
786        typeSizer = wx.BoxSizer(wx.HORIZONTAL)           
787        typeSizer.Add(wx.StaticText(DData,-1,' Extinction type: '),0,wx.ALIGN_CENTER_VERTICAL)
788        Choices = ['None','Primary','Secondary Type I','Secondary Type II','Secondary Type I & II']
789        typeTxt = wx.ComboBox(DData,-1,choices=Choices,value=UseList[item]['Extinction'][1],
790            style=wx.CB_READONLY|wx.CB_DROPDOWN)
791        Indx[typeTxt.GetId()] = [item,1]
792        typeTxt.Bind(wx.EVT_COMBOBOX,OnSCExtType)
793        typeSizer.Add(typeTxt)
794        typeSizer.Add(wx.StaticText(DData,-1,' Approx: '),0,wx.ALIGN_CENTER_VERTICAL)
795        Choices=['Lorentzian','Gaussian']
796        approxTxT = wx.ComboBox(DData,-1,choices=Choices,value=UseList[item]['Extinction'][0],
797            style=wx.CB_READONLY|wx.CB_DROPDOWN)
798        Indx[approxTxT.GetId()] = [item,0]
799        approxTxT.Bind(wx.EVT_COMBOBOX,OnSCExtType)
800        typeSizer.Add(approxTxT)
801        extSizer.Add(typeSizer,0,wx.ALIGN_CENTER_VERTICAL)
802        if UseList[item]['Extinction'][1] != 'None':
803            extSizer.Add((0,5),)
804            valSizer =wx.BoxSizer(wx.HORIZONTAL)
805            valSizer.Add(wx.StaticText(DData,-1,' Tbar(mm):'),0,wx.ALIGN_CENTER_VERTICAL)
806            tbarVal = wx.TextCtrl(DData,wx.ID_ANY,
807                '%.3f'%(UseList[item]['Extinction'][2]['Tbar']),style=wx.TE_PROCESS_ENTER)
808            Indx[tbarVal.GetId()] = item
809            tbarVal.Bind(wx.EVT_TEXT_ENTER,OnTbarVal)
810            tbarVal.Bind(wx.EVT_KILL_FOCUS,OnTbarVal)
811            valSizer.Add(tbarVal,0,wx.ALIGN_CENTER_VERTICAL)
812            valSizer.Add(wx.StaticText(DData,-1,' cos(2ThM):'),0,wx.ALIGN_CENTER_VERTICAL)
813            cos2tm = wx.TextCtrl(DData,wx.ID_ANY,
814                '%.3f'%(UseList[item]['Extinction'][2]['Cos2TM']),style=wx.TE_PROCESS_ENTER)
815            Indx[cos2tm.GetId()] = item
816            cos2tm.Bind(wx.EVT_TEXT_ENTER,OnCos2TM)
817            cos2tm.Bind(wx.EVT_KILL_FOCUS,OnCos2TM)
818            valSizer.Add(cos2tm,0,wx.ALIGN_CENTER_VERTICAL)
819            extSizer.Add(valSizer,0,wx.ALIGN_CENTER_VERTICAL)
820            val2Sizer =wx.BoxSizer(wx.HORIZONTAL)
821            if 'Primary' in UseList[item]['Extinction'][1]:
822                Ekey = ['Ep',]
823            elif 'Secondary Type II' == UseList[item]['Extinction'][1]:
824                Ekey = ['Es',]
825            elif 'Secondary Type I' == UseList[item]['Extinction'][1]:
826                Ekey = ['Eg',]
827            else:
828                Ekey = ['Eg','Es']
829            for ekey in Ekey:
830                Eref = wx.CheckBox(DData,-1,label=ekey+' : ')
831                Eref.SetValue(UseList[item]['Extinction'][2][ekey][1])
832                Indx[Eref.GetId()] = [item,ekey]
833                Eref.Bind(wx.EVT_CHECKBOX, OnEref)
834                val2Sizer.Add(Eref,0,wx.ALIGN_CENTER_VERTICAL)
835                Eval = wx.TextCtrl(DData,wx.ID_ANY,
836                    '%10.3e'%(UseList[item]['Extinction'][2][ekey][0]),style=wx.TE_PROCESS_ENTER)
837                Indx[Eval.GetId()] = [item,ekey]
838                Eval.Bind(wx.EVT_TEXT_ENTER,OnEval)
839                Eval.Bind(wx.EVT_KILL_FOCUS,OnEval)
840                val2Sizer.Add(Eval,0,wx.ALIGN_CENTER_VERTICAL)
841
842            extSizer.Add(val2Sizer,0,wx.ALIGN_CENTER_VERTICAL)
843        return extSizer
844       
845    def BabSizer():
846        babSizer = wx.BoxSizer(wx.HORIZONTAL)
847        for bab in ['A','U']:
848            babRef = wx.CheckBox(DData,-1,label=' Babinet '+bab+': ')
849            babRef.SetValue(UseList[item]['Babinet']['Bab'+bab][1])
850            Indx[babRef.GetId()] = [item,bab]
851            babRef.Bind(wx.EVT_CHECKBOX, OnBabRef)
852            babSizer.Add(babRef,0,wx.ALIGN_CENTER_VERTICAL)
853            babVal = wx.TextCtrl(DData,wx.ID_ANY,
854                '%.3f'%(UseList[item]['Babinet']['Bab'+bab][0]),style=wx.TE_PROCESS_ENTER)
855            Indx[babVal.GetId()] = [item,bab]
856            babVal.Bind(wx.EVT_TEXT_ENTER,OnBabVal)
857            babVal.Bind(wx.EVT_KILL_FOCUS,OnBabVal)
858            babSizer.Add(babVal,0,wx.ALIGN_CENTER_VERTICAL)
859            babSizer.Add((5,5),0)
860        return babSizer
861       
862    if DData.GetSizer():
863        DData.GetSizer().Clear(True)
864    mainSizer = wx.BoxSizer(wx.VERTICAL)
865    mainSizer.Add(wx.StaticText(DData,-1,'Histogram data for '+PhaseName+':'),0,wx.ALIGN_CENTER_VERTICAL)
866    if PWDR:
867        mainSizer.Add(PlotSizer())           
868       
869    for item in keyList:
870        histData = UseList[item]
871        if 'Use' not in UseList[item]:      #patch
872            UseList[item]['Use'] = True
873        if 'Babinet' not in UseList[item]:
874            UseList[item]['Babinet'] = {'BabA':[0.0,False],'BabU':[0.0,False]}
875        showSizer = wx.BoxSizer(wx.HORIZONTAL)
876        showData = wx.CheckBox(DData,-1,label=' Show '+item)
877        showData.SetValue(UseList[item]['Show'])
878        Indx[showData.GetId()] = item
879        showData.Bind(wx.EVT_CHECKBOX, OnShowData)
880        showSizer.Add(showData,0,wx.ALIGN_CENTER_VERTICAL)
881        useData = wx.CheckBox(DData,-1,label='Use?')
882        Indx[useData.GetId()] = item
883        showSizer.Add(useData,0,wx.ALIGN_CENTER_VERTICAL)
884        useData.Bind(wx.EVT_CHECKBOX, OnUseData)
885        useData.SetValue(UseList[item]['Use'])
886        copyData = wx.Button(DData,-1,label=' Copy?')
887        Indx[copyData.GetId()] = item
888        copyData.Bind(wx.EVT_BUTTON,OnCopyData)
889        showSizer.Add(copyData,wx.ALIGN_CENTER_VERTICAL)
890        copyFlags = wx.Button(DData,-1,label=' Copy flags?')
891        Indx[copyFlags.GetId()] = item
892        copyFlags.Bind(wx.EVT_BUTTON,OnCopyFlags)
893        showSizer.Add(copyFlags,wx.ALIGN_CENTER_VERTICAL)
894        mainSizer.Add((5,5),0)
895        mainSizer.Add(showSizer,0,wx.ALIGN_CENTER_VERTICAL)
896        mainSizer.Add((0,5),0)
897       
898        if UseList[item]['Show']:
899            mainSizer.Add(ScaleSizer())
900            mainSizer.Add((0,5),0)
901           
902        if item[:4] == 'PWDR' and UseList[item]['Show']:
903            if UseList[item]['Size'][0] == 'isotropic':
904                isoSizer = wx.BoxSizer(wx.HORIZONTAL)
905                isoSizer.Add(TopSizer(' Size model: ',['isotropic','uniaxial','ellipsoidal'],
906                    'Size',OnSizeType),0,wx.ALIGN_CENTER_VERTICAL)
907                isoSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
908                isoSizer.Add(ResetSizer('isotropic',OnResetSize),0,wx.ALIGN_CENTER_VERTICAL)
909                mainSizer.Add(isoSizer)
910                mainSizer.Add(IsoSizer(u' Cryst. size(\xb5m): ','Size','%.3f',
911                    OnSizeVal,OnSizeRef),0,wx.ALIGN_CENTER_VERTICAL)
912            elif UseList[item]['Size'][0] == 'uniaxial':
913                uniSizer = wx.BoxSizer(wx.HORIZONTAL)
914                uniSizer.Add(TopSizer(' Size model: ',['isotropic','uniaxial','ellipsoidal'],
915                    'Size',OnSizeType),0,wx.ALIGN_CENTER_VERTICAL)
916                uniSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
917                uniSizer.Add(ResetSizer('uniaxial',OnResetSize),0,wx.ALIGN_CENTER_VERTICAL)
918                mainSizer.Add(UniSizer('Size',OnSizeAxis),0,wx.ALIGN_CENTER_VERTICAL)
919                mainSizer.Add(uniSizer)
920                mainSizer.Add(UniDataSizer(u'size(\xb5m): ','Size','%.3f',OnSizeVal,OnSizeRef))
921            elif UseList[item]['Size'][0] == 'ellipsoidal':
922                ellSizer = wx.BoxSizer(wx.HORIZONTAL)
923                ellSizer.Add(TopSizer(' Size model: ',['isotropic','uniaxial','ellipsoidal'],
924                    'Size',OnSizeType),0,wx.ALIGN_CENTER_VERTICAL)
925                ellSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
926                ellSizer.Add(ResetSizer('ellipsoidal',OnResetSize),0,wx.ALIGN_CENTER_VERTICAL)
927                mainSizer.Add(ellSizer)
928                mainSizer.Add(EllSizeDataSizer())
929            mainSizer.Add((0,5),0)                   
930           
931            if UseList[item]['Mustrain'][0] == 'isotropic':
932                isoSizer = wx.BoxSizer(wx.HORIZONTAL)
933                isoSizer.Add(TopSizer(' Mustrain model: ',['isotropic','uniaxial','generalized',],
934                    'Mustrain',OnStrainType),0,wx.ALIGN_CENTER_VERTICAL)
935                isoSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
936                isoSizer.Add(ResetSizer('isotropic',OnResetStrain),0,wx.ALIGN_CENTER_VERTICAL)
937                mainSizer.Add(isoSizer)
938                mainSizer.Add(IsoSizer(' microstrain: ','Mustrain','%.1f',
939                    OnStrainVal,OnStrainRef),0,wx.ALIGN_CENTER_VERTICAL)                   
940                mainSizer.Add((0,5),0)
941            elif UseList[item]['Mustrain'][0] == 'uniaxial':
942                uniSizer = wx.BoxSizer(wx.HORIZONTAL)
943                uniSizer.Add(TopSizer(' Mustrain model: ',['isotropic','uniaxial','generalized',],
944                    'Mustrain',OnStrainType),0,wx.ALIGN_CENTER_VERTICAL)
945                uniSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
946                uniSizer.Add(ResetSizer('uniaxial',OnResetStrain),0,wx.ALIGN_CENTER_VERTICAL)
947                mainSizer.Add(uniSizer)
948                mainSizer.Add(UniSizer('Mustrain',OnStrainAxis),0,wx.ALIGN_CENTER_VERTICAL)
949                mainSizer.Add(UniDataSizer('mustrain: ','Mustrain','%.1f',OnStrainVal,OnStrainRef))
950            elif UseList[item]['Mustrain'][0] == 'generalized':
951                genSizer = wx.BoxSizer(wx.HORIZONTAL)
952                genSizer.Add(TopSizer(' Mustrain model: ',['isotropic','uniaxial','generalized',],
953                    'Mustrain',OnStrainType),0,wx.ALIGN_CENTER_VERTICAL)
954                genSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
955                genSizer.Add(ResetSizer('generalized',OnResetStrain),0,wx.ALIGN_CENTER_VERTICAL)
956                mainSizer.Add(genSizer)
957                mainSizer.Add(GenStrainDataSizer())                       
958            mainSizer.Add((0,5),0)
959           
960            mainSizer.Add(wx.StaticText(DData,-1,' Hydrostatic/elastic strain:'))
961            mainSizer.Add(HstrainSizer())
962               
963            #texture  'Pref. Ori.':['MD',1.0,False,[0,0,1],0,[]] last two for 'SH' are SHorder & coeff
964            poSizer = wx.BoxSizer(wx.VERTICAL)
965            POData = UseList[item]['Pref.Ori.']
966            poSizer.Add(PoTopSizer(POData))
967            if POData[0] == 'MD':
968                poSizer.Add(MDDataSizer(POData))
969            else:           #'SH'
970                if POData[4]:       #SH order > 0
971                    poSizer.Add(SHDataSizer(POData))
972                   
973            mainSizer.Add(poSizer)
974            mainSizer.Add((0,5),0)               
975            mainSizer.Add(ExtSizer())
976            mainSizer.Add((0,5),0)
977            mainSizer.Add(BabSizer())
978            mainSizer.Add((0,5),0)
979        elif item[:4] == 'HKLF' and UseList[item]['Show']:
980            mainSizer.Add((0,5),0)               
981            mainSizer.Add(SCExtSizer())
982            mainSizer.Add((0,5),0)
983            mainSizer.Add(BabSizer())
984            mainSizer.Add((0,5),0)
985            pass
986        #G2gd.HorizontalLine(mainSizer,DData)
987    mainSizer.Add((5,5),0)
988
989    DData.SetSizer(mainSizer,True)
990    if G2frame.dataFrame.PhaseUserSize is None:
991        Size = mainSizer.GetMinSize()
992        Size[0] += 40
993        Size[1] = max(Size[1],290) + 35
994        DData.SetSize(Size)
995        DData.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
996        Size[1] = min(Size[1],450)
997        G2frame.dataFrame.setSizePosLeft(Size)
998    else:
999        Size = G2frame.dataFrame.PhaseUserSize
1000        DData.SetSize(G2frame.dataFrame.GetClientSize())
1001        DData.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1)
1002        G2frame.dataFrame.Update()
Note: See TracBrowser for help on using the repository browser.