source: trunk/GSASIIddataGUI.py @ 923

Last change on this file since 923 was 923, checked in by toby, 9 years ago

more doc updates

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