source: trunk/GSASIIddataGUI.py @ 1656

Last change on this file since 1656 was 1655, checked in by vondreele, 10 years ago

add a Show/Hide? command in the phase/data menu
add importer for ISIS SXD data

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