source: trunk/GSASIIddataGUI.py @ 1478

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

Fix CW & TOF hydrostatic strain calculations & change disply formats
work on TOF size/mustrain calcs.

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