source: trunk/GSASIIddataGUI.py @ 995

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

remove extra imports, etc. from GSASIIddataGUI.py
Select page --> Select tab
fix doubling up for draw atoms

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