source: trunk/GSASIIddataGUI.py @ 1453

Last change on this file since 1453 was 1453, checked in by vondreele, 7 years ago

get HKLF data type into RefDict?
create a SetDefaultDData routine in GSASII.py
fix copyflags for sc extinction coeff
fix neutron resonant ff for TOF
fix error in making Hessian v-cov matrix - now matches the Jabobian one
put names in the Es, Ep & Eg sc extinction coeff
fix errors in SCExtinction - still problem with derivatives

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Revision URL Id
File size: 41.3 KB
Line 
1# -*- coding: utf-8 -*-
2#GSASII - phase data display routines
3########### SVN repository information ###################
4# $Date: 2014-08-01 20:19:48 +0000 (Fri, 01 Aug 2014) $
5# $Author: vondreele $
6# $Revision: 1453 $
7# $URL: trunk/GSASIIddataGUI.py $
8# $Id: GSASIIddataGUI.py 1453 2014-08-01 20:19:48Z 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: 1453 $")
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] = {}
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                                    for itm in ['Eg','Es','Ep']:
231                                        UseList[item][name][2][itm][1] = copy.copy(copyDict[name][itm])                                 
232                                else:
233                                    UseList[item][name][1] = copy.copy(copyDict[name])
234                            elif name in ['Size','Mustrain']:
235                                UseList[item][name][0] = copy.copy(copyDict[name][0])
236                                UseList[item][name][2] = copy.copy(copyDict[name][1])
237                                UseList[item][name][4] = copy.copy(copyDict[name][2])
238                            elif name == 'Pref.Ori.':
239                                UseList[item][name][0] = copy.copy(copyDict[name][0])
240                                UseList[item][name][2] = copy.copy(copyDict[name][1])
241                                if sourceDict[name][0] == 'SH':
242                                    SHflags = copy.copy(copyDict[name][2])
243                                    SHterms = copy.copy(sourceDict[name][5])
244                                    for item in SHflags:
245                                        SHterms[item][1] = copy.copy(SHflags[item])
246                            elif name == 'Babinet':
247                                for bab in babNames:
248                                    UseList[item][name][bab][1] = copy.copy(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.1 <= 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            nTerm = len(UseList[item]['Mustrain'][4])
402            for i in range(nTerm):
403                UseList[item]['Mustrain'][4][i] = 0.01
404        G2plt.PlotSizeStrainPO(G2frame,data)
405        wx.CallAfter(UpdateDData,G2frame,DData,data)
406           
407    def OnHstrainRef(event):
408        Obj = event.GetEventObject()
409        hist,pid = Indx[Obj.GetId()]
410        UseList[hist]['HStrain'][1][pid] = Obj.GetValue()
411       
412    def OnHstrainVal(event):
413        Snames = G2spc.HStrainNames(SGData)
414        Obj = event.GetEventObject()
415        hist,pid = Indx[Obj.GetId()]
416        try:
417            strain = float(Obj.GetValue())
418            UseList[hist]['HStrain'][0][pid] = strain
419        except ValueError:
420            pass
421        Obj.SetValue("%.5f"%(UseList[hist]['HStrain'][0][pid]))          #reset in case of error
422
423    def OnPOVal(event):
424        Obj = event.GetEventObject()
425        hist = Indx[Obj.GetId()]
426        try:
427            mdVal = float(Obj.GetValue())
428            if mdVal > 0:
429                UseList[hist]['Pref.Ori.'][1] = mdVal
430        except ValueError:
431            pass
432        Obj.SetValue("%.3f"%(UseList[hist]['Pref.Ori.'][1]))          #reset in case of error
433       
434    def OnPOAxis(event):
435        Obj = event.GetEventObject()
436        hist = Indx[Obj.GetId()]
437        Saxis = Obj.GetValue().split()
438        try:
439            hkl = [int(Saxis[i]) for i in range(3)]
440        except (ValueError,IndexError):
441            hkl = UseList[hist]['Pref.Ori.'][3]
442        if not np.any(np.array(hkl)):
443            hkl = UseList[hist]['Pref.Ori.'][3]
444        UseList[hist]['Pref.Ori.'][3] = hkl
445        h,k,l = hkl
446        Obj.SetValue('%3d %3d %3d'%(h,k,l)) 
447       
448    def OnPOOrder(event):
449        Obj = event.GetEventObject()
450        hist = Indx[Obj.GetId()]
451        Order = int(Obj.GetValue())
452        UseList[hist]['Pref.Ori.'][4] = Order
453        UseList[hist]['Pref.Ori.'][5] = SetPOCoef(Order,hist)
454        wx.CallAfter(UpdateDData,G2frame,DData,data)
455
456    def OnPOType(event):
457        Obj = event.GetEventObject()
458        hist = Indx[Obj.GetId()]
459        if 'March' in Obj.GetValue():
460            UseList[hist]['Pref.Ori.'][0] = 'MD'
461        else:
462            UseList[hist]['Pref.Ori.'][0] = 'SH'
463        wx.CallAfter(UpdateDData,G2frame,DData,data)           
464
465    def OnPORef(event):
466        Obj = event.GetEventObject()
467        hist = Indx[Obj.GetId()]
468        UseList[hist]['Pref.Ori.'][2] = Obj.GetValue()
469           
470    def SetPOCoef(Order,hist):
471        cofNames = G2lat.GenSHCoeff(SGData['SGLaue'],'0',Order,False)     #cylindrical & no M
472        newPOCoef = dict(zip(cofNames,np.zeros(len(cofNames))))
473        POCoeff = UseList[hist]['Pref.Ori.'][5]
474        for cofName in POCoeff:
475            if cofName in  cofNames:
476                newPOCoef[cofName] = POCoeff[cofName]
477        return newPOCoef
478   
479    def OnExtRef(event):
480        Obj = event.GetEventObject()
481        UseList[Indx[Obj.GetId()]]['Extinction'][1] = Obj.GetValue()
482       
483    def OnExtVal(event):
484        Obj = event.GetEventObject()
485        try:
486            ext = float(Obj.GetValue())
487            if ext >= 0:
488                UseList[Indx[Obj.GetId()]]['Extinction'][0] = ext
489        except ValueError:
490            pass
491        Obj.SetValue("%.2f"%(UseList[Indx[Obj.GetId()]]['Extinction'][0]))
492
493    def OnBabRef(event):
494        Obj = event.GetEventObject()
495        item,bab = Indx[Obj.GetId()]
496        UseList[item]['Babinet']['Bab'+bab][1] = Obj.GetValue()
497       
498    def OnBabVal(event):
499        Obj = event.GetEventObject()
500        item,bab = Indx[Obj.GetId()]
501        try:
502            val = float(Obj.GetValue())
503            if val >= 0:
504                UseList[item]['Babinet']['Bab'+bab][0] = val
505        except ValueError:
506            pass
507        Obj.SetValue("%.3f"%(UseList[item]['Babinet']['Bab'+bab][0]))
508
509    def OnTbarVal(event):
510        Obj = event.GetEventObject()
511        try:
512            tbar = float(Obj.GetValue())
513            if tbar > 0:
514                UseList[Indx[Obj.GetId()]]['Extinction'][2]['Tbar'] = tbar
515        except ValueError:
516            pass
517        Obj.SetValue("%.3f"%(UseList[Indx[Obj.GetId()]]['Extinction'][2]['Tbar']))
518
519    def OnCos2TM(event):
520        Obj = event.GetEventObject()
521        try:
522            val = float(Obj.GetValue())
523            if 0. < val <= 1.:
524                UseList[Indx[Obj.GetId()]]['Extinction'][2]['Cos2TM'] = val
525        except ValueError:
526            pass
527        Obj.SetValue("%.3f"%(UseList[Indx[Obj.GetId()]]['Extinction'][2]['Cos2TM']))
528       
529    def OnEval(event):
530        Obj = event.GetEventObject()
531        item = Indx[Obj.GetId()]
532        try:
533            val = float(Obj.GetValue())
534            if val > 0:
535                UseList[item[0]]['Extinction'][2][item[1]][0] = val
536        except ValueError:
537            pass
538        Obj.SetValue("%10.3e"%(UseList[item[0]]['Extinction'][2][item[1]][0]))
539       
540    def OnEref(event):
541        Obj = event.GetEventObject()
542        item = Indx[Obj.GetId()]
543        UseList[item[0]]['Extinction'][2][item[1]][1] = Obj.GetValue()
544
545    def OnSCExtType(event):
546        Obj = event.GetEventObject()
547        item = Indx[Obj.GetId()]
548        UseList[item[0]]['Extinction'][item[1]] = Obj.GetValue()
549        wx.CallAfter(UpdateDData,G2frame,DData,data)
550           
551    def checkAxis(axis):
552        if not np.any(np.array(axis)):
553            return False
554        return axis
555       
556    def TopSizer(name,choices,parm,OnType):
557        topSizer = wx.BoxSizer(wx.HORIZONTAL)
558        topSizer.Add(wx.StaticText(DData,-1,name),0,WACV)
559        sizeType = wx.ComboBox(DData,wx.ID_ANY,value=UseList[item][parm][0],choices=choices,
560            style=wx.CB_READONLY|wx.CB_DROPDOWN)
561        sizeType.Bind(wx.EVT_COMBOBOX, OnType)
562        Indx[sizeType.GetId()] = item
563        topSizer.Add(sizeType)
564        topSizer.Add((5,0),0)
565        return topSizer
566       
567    def LGmixSizer(name,OnVal,OnRef):
568        lgmixSizer = wx.BoxSizer(wx.HORIZONTAL)
569        lgmixRef = wx.CheckBox(DData,-1,label='LGmix')
570        lgmixRef.thisown = False
571        lgmixRef.SetValue(UseList[item][name][2][2])
572        Indx[lgmixRef.GetId()] = [item,name]
573        lgmixRef.Bind(wx.EVT_CHECKBOX, OnRef)
574        lgmixSizer.Add(lgmixRef,0,WACV)
575        lgmixVal = wx.TextCtrl(DData,wx.ID_ANY,
576            '%.4f'%(UseList[item][name][1][2]),style=wx.TE_PROCESS_ENTER)
577        Indx[lgmixVal.GetId()] = [item,name]
578        lgmixVal.Bind(wx.EVT_TEXT_ENTER,OnVal)
579        lgmixVal.Bind(wx.EVT_KILL_FOCUS,OnVal)
580        lgmixSizer.Add(lgmixVal,0,WACV)
581        return lgmixSizer
582                   
583    def ResetSizer(name,OnReset):
584        resetSizer = wx.BoxSizer(wx.HORIZONTAL)
585        resetSizer.Add((5,0),0)
586        reset = wx.CheckBox(DData,-1,label='Reset?')
587        reset.thisown = False
588        reset.SetValue(False)
589        Indx[reset.GetId()] = [item,name]
590        reset.Bind(wx.EVT_CHECKBOX,OnReset)
591        resetSizer.Add(reset,0,WACV)
592        return resetSizer
593       
594    def IsoSizer(name,parm,fmt,OnVal,OnRef):
595        isoSizer = wx.BoxSizer(wx.HORIZONTAL)
596        sizeRef = wx.CheckBox(DData,-1,label=name)
597        sizeRef.thisown = False
598        sizeRef.SetValue(UseList[item][parm][2][0])
599        Indx[sizeRef.GetId()] = [item,0]
600        sizeRef.Bind(wx.EVT_CHECKBOX, OnRef)
601        isoSizer.Add(sizeRef,0,WACV)
602        sizeVal = wx.TextCtrl(DData,wx.ID_ANY,
603            fmt%(UseList[item][parm][1][0]),style=wx.TE_PROCESS_ENTER)
604        Indx[sizeVal.GetId()] = [item,0]
605        sizeVal.Bind(wx.EVT_TEXT_ENTER,OnVal)
606        sizeVal.Bind(wx.EVT_KILL_FOCUS,OnVal)
607        isoSizer.Add(sizeVal,0,WACV)
608        return isoSizer
609       
610    def UniSizer(parm,OnAxis):
611        uniSizer = wx.BoxSizer(wx.HORIZONTAL)
612        uniSizer.Add(wx.StaticText(DData,-1,' Unique axis, H K L: '),0,WACV)
613        h,k,l = UseList[item][parm][3]
614        Axis = wx.TextCtrl(DData,-1,'%3d %3d %3d'%(h,k,l),style=wx.TE_PROCESS_ENTER)
615        Indx[Axis.GetId()] = item
616        Axis.Bind(wx.EVT_TEXT_ENTER,OnAxis)
617        Axis.Bind(wx.EVT_KILL_FOCUS,OnAxis)
618        uniSizer.Add(Axis,0,WACV)
619        return uniSizer
620       
621    def UniDataSizer(parmName,parm,fmt,OnVal,OnRef):
622        dataSizer = wx.BoxSizer(wx.HORIZONTAL)
623        parms = zip([' Equatorial '+parmName,' Axial '+parmName],
624            UseList[item][parm][1],UseList[item][parm][2],range(2))
625        for Pa,val,ref,id in parms:
626            sizeRef = wx.CheckBox(DData,-1,label=Pa)
627            sizeRef.thisown = False
628            sizeRef.SetValue(ref)
629            Indx[sizeRef.GetId()] = [item,id]
630            sizeRef.Bind(wx.EVT_CHECKBOX, OnRef)
631            dataSizer.Add(sizeRef,0,WACV)
632            sizeVal = wx.TextCtrl(DData,wx.ID_ANY,fmt%(val),style=wx.TE_PROCESS_ENTER)
633            Indx[sizeVal.GetId()] = [item,id]
634            sizeVal.Bind(wx.EVT_TEXT_ENTER,OnVal)
635            sizeVal.Bind(wx.EVT_KILL_FOCUS,OnVal)
636            dataSizer.Add(sizeVal,0,WACV)
637            dataSizer.Add((5,0),0)
638        return dataSizer
639       
640    def EllSizeDataSizer():
641        parms = zip(['S11','S22','S33','S12','S13','S23'],UseList[item]['Size'][4],
642            UseList[item]['Size'][5],range(6))
643        dataSizer = wx.FlexGridSizer(0,6,5,5)
644        for Pa,val,ref,id in parms:
645            sizeRef = wx.CheckBox(DData,-1,label=Pa)
646            sizeRef.thisown = False
647            sizeRef.SetValue(ref)
648            Indx[sizeRef.GetId()] = [item,id]
649            sizeRef.Bind(wx.EVT_CHECKBOX, OnSizeRef)
650            dataSizer.Add(sizeRef,0,WACV)
651            sizeVal = wx.TextCtrl(DData,wx.ID_ANY,'%.3f'%(val),style=wx.TE_PROCESS_ENTER)
652            Indx[sizeVal.GetId()] = [item,id]
653            sizeVal.Bind(wx.EVT_TEXT_ENTER,OnSizeVal)
654            sizeVal.Bind(wx.EVT_KILL_FOCUS,OnSizeVal)
655            dataSizer.Add(sizeVal,0,WACV)
656        return dataSizer
657       
658    def GenStrainDataSizer():
659        Snames = G2spc.MustrainNames(SGData)
660        numb = len(Snames)
661        if len(UseList[item]['Mustrain'][4]) < numb:
662            UseList[item]['Mustrain'][4] = numb*[0.0,]
663            UseList[item]['Mustrain'][5] = numb*[False,]
664        parms = zip(Snames,UseList[item]['Mustrain'][4],UseList[item]['Mustrain'][5],range(numb))
665        dataSizer = wx.FlexGridSizer(0,6,5,5)
666        for Pa,val,ref,id in parms:
667            strainRef = wx.CheckBox(DData,-1,label=Pa)
668            strainRef.thisown = False
669            strainRef.SetValue(ref)
670            Indx[strainRef.GetId()] = [item,id]
671            strainRef.Bind(wx.EVT_CHECKBOX, OnStrainRef)
672            dataSizer.Add(strainRef,0,WACV)
673            strainVal = wx.TextCtrl(DData,wx.ID_ANY,'%.5f'%(val),style=wx.TE_PROCESS_ENTER)
674            Indx[strainVal.GetId()] = [item,id]
675            strainVal.Bind(wx.EVT_TEXT_ENTER,OnStrainVal)
676            strainVal.Bind(wx.EVT_KILL_FOCUS,OnStrainVal)
677            dataSizer.Add(strainVal,0,WACV)
678        return dataSizer
679
680    def HstrainSizer():
681        hstrainSizer = wx.FlexGridSizer(0,6,5,5)
682        Hsnames = G2spc.HStrainNames(SGData)
683        parms = zip(Hsnames,UseList[item]['HStrain'][0],UseList[item]['HStrain'][1],range(len(Hsnames)))
684        for Pa,val,ref,id in parms:
685            hstrainRef = wx.CheckBox(DData,-1,label=Pa)
686            hstrainRef.thisown = False
687            hstrainRef.SetValue(ref)
688            Indx[hstrainRef.GetId()] = [item,id]
689            hstrainRef.Bind(wx.EVT_CHECKBOX, OnHstrainRef)
690            hstrainSizer.Add(hstrainRef,0,WACV)
691            hstrainVal = wx.TextCtrl(DData,wx.ID_ANY,'%.5f'%(val),style=wx.TE_PROCESS_ENTER)
692            Indx[hstrainVal.GetId()] = [item,id]
693            hstrainVal.Bind(wx.EVT_TEXT_ENTER,OnHstrainVal)
694            hstrainVal.Bind(wx.EVT_KILL_FOCUS,OnHstrainVal)
695            hstrainSizer.Add(hstrainVal,0,WACV)
696        return hstrainSizer
697       
698    def PoTopSizer(POData):
699        poSizer = wx.FlexGridSizer(0,6,5,5)
700        choice = ['March-Dollase','Spherical harmonics']
701        POtype = choice[['MD','SH'].index(POData[0])]
702        poSizer.Add(wx.StaticText(DData,-1,' Preferred orientation model '),0,WACV)
703        POType = wx.ComboBox(DData,wx.ID_ANY,value=POtype,choices=choice,
704            style=wx.CB_READONLY|wx.CB_DROPDOWN)
705        Indx[POType.GetId()] = item
706        POType.Bind(wx.EVT_COMBOBOX, OnPOType)
707        poSizer.Add(POType)
708        if POData[0] == 'SH':
709            poSizer.Add(wx.StaticText(DData,-1,' Harmonic order: '),0,WACV)
710            poOrder = wx.ComboBox(DData,wx.ID_ANY,value=str(POData[4]),choices=[str(2*i) for i in range(18)],
711                style=wx.CB_READONLY|wx.CB_DROPDOWN)
712            Indx[poOrder.GetId()] = item
713            poOrder.Bind(wx.EVT_COMBOBOX,OnPOOrder)
714            poSizer.Add(poOrder,0,WACV)
715            poRef = wx.CheckBox(DData,-1,label=' Refine? ')
716            poRef.SetValue(POData[2])
717            Indx[poRef.GetId()] = item
718            poRef.Bind(wx.EVT_CHECKBOX,OnPORef)
719            poSizer.Add(poRef,0,WACV)
720        return poSizer
721       
722    def MDDataSizer(POData):
723        poSizer = wx.BoxSizer(wx.HORIZONTAL)
724        poRef = wx.CheckBox(DData,-1,label=' March-Dollase ratio: ')
725        poRef.SetValue(POData[2])
726        Indx[poRef.GetId()] = item
727        poRef.Bind(wx.EVT_CHECKBOX,OnPORef)
728        poSizer.Add(poRef,0,WACV)
729        poVal = wx.TextCtrl(DData,wx.ID_ANY,
730            '%.3f'%(POData[1]),style=wx.TE_PROCESS_ENTER)
731        Indx[poVal.GetId()] = item
732        poVal.Bind(wx.EVT_TEXT_ENTER,OnPOVal)
733        poVal.Bind(wx.EVT_KILL_FOCUS,OnPOVal)
734        poSizer.Add(poVal,0,WACV)
735        poSizer.Add(wx.StaticText(DData,-1,' Unique axis, H K L: '),0,WACV)
736        h,k,l =POData[3]
737        poAxis = wx.TextCtrl(DData,-1,'%3d %3d %3d'%(h,k,l),style=wx.TE_PROCESS_ENTER)
738        Indx[poAxis.GetId()] = item
739        poAxis.Bind(wx.EVT_TEXT_ENTER,OnPOAxis)
740        poAxis.Bind(wx.EVT_KILL_FOCUS,OnPOAxis)
741        poSizer.Add(poAxis,0,WACV)
742        return poSizer
743       
744    def SHDataSizer(POData):
745        textJ = G2lat.textureIndex(POData[5])
746        mainSizer.Add(wx.StaticText(DData,-1,' Spherical harmonic coefficients: '+'Texture index: %.3f'%(textJ)),0,WACV)
747        mainSizer.Add((0,5),0)
748        ODFSizer = wx.FlexGridSizer(0,8,2,2)
749        ODFIndx = {}
750        ODFkeys = POData[5].keys()
751        ODFkeys.sort()
752        for odf in ODFkeys:
753            ODFSizer.Add(wx.StaticText(DData,-1,odf),0,WACV)
754            ODFval = wx.TextCtrl(DData,wx.ID_ANY,'%8.3f'%(POData[5][odf]),style=wx.TE_PROCESS_ENTER)
755            ODFIndx[ODFval.GetId()] = odf
756#             ODFval.Bind(wx.EVT_TEXT_ENTER,OnODFValue)
757#             ODFval.Bind(wx.EVT_KILL_FOCUS,OnODFValue)
758            ODFSizer.Add(ODFval,0,WACV)
759        return ODFSizer
760       
761    def ExtSizer():           
762        extSizer = wx.BoxSizer(wx.HORIZONTAL)
763        extRef = wx.CheckBox(DData,-1,label=' Extinction: ')
764        extRef.SetValue(UseList[item]['Extinction'][1])
765        Indx[extRef.GetId()] = item
766        extRef.Bind(wx.EVT_CHECKBOX, OnExtRef)
767        extSizer.Add(extRef,0,WACV)
768        extVal = wx.TextCtrl(DData,wx.ID_ANY,
769            '%.2f'%(UseList[item]['Extinction'][0]),style=wx.TE_PROCESS_ENTER)
770        Indx[extVal.GetId()] = item
771        extVal.Bind(wx.EVT_TEXT_ENTER,OnExtVal)
772        extVal.Bind(wx.EVT_KILL_FOCUS,OnExtVal)
773        extSizer.Add(extVal,0,WACV)
774        return extSizer
775   
776    def SCExtSizer():
777        extSizer = wx.BoxSizer(wx.VERTICAL)
778        typeSizer = wx.BoxSizer(wx.HORIZONTAL)           
779        typeSizer.Add(wx.StaticText(DData,-1,' Extinction type: '),0,WACV)
780        Choices = ['None','Primary','Secondary Type I','Secondary Type II','Secondary Type I & II']
781        typeTxt = wx.ComboBox(DData,-1,choices=Choices,value=UseList[item]['Extinction'][1],
782            style=wx.CB_READONLY|wx.CB_DROPDOWN)
783        Indx[typeTxt.GetId()] = [item,1]
784        typeTxt.Bind(wx.EVT_COMBOBOX,OnSCExtType)
785        typeSizer.Add(typeTxt)
786        typeSizer.Add(wx.StaticText(DData,-1,' Approx: '),0,WACV)
787        Choices=['Lorentzian','Gaussian']
788        approxTxT = wx.ComboBox(DData,-1,choices=Choices,value=UseList[item]['Extinction'][0],
789            style=wx.CB_READONLY|wx.CB_DROPDOWN)
790        Indx[approxTxT.GetId()] = [item,0]
791        approxTxT.Bind(wx.EVT_COMBOBOX,OnSCExtType)
792        typeSizer.Add(approxTxT)
793        extSizer.Add(typeSizer,0,WACV)
794        if UseList[item]['Extinction'][1] != 'None':
795            extSizer.Add((0,5),)
796            if 'Tbar' in UseList[item]['Extinction'][2]:       #skipped for TOF   
797                valSizer =wx.BoxSizer(wx.HORIZONTAL)
798                valSizer.Add(wx.StaticText(DData,-1,' Tbar(mm):'),0,WACV)
799                tbarVal = wx.TextCtrl(DData,wx.ID_ANY,
800                    '%.3f'%(UseList[item]['Extinction'][2]['Tbar']),style=wx.TE_PROCESS_ENTER)
801                Indx[tbarVal.GetId()] = item
802                tbarVal.Bind(wx.EVT_TEXT_ENTER,OnTbarVal)
803                tbarVal.Bind(wx.EVT_KILL_FOCUS,OnTbarVal)
804                valSizer.Add(tbarVal,0,WACV)
805                valSizer.Add(wx.StaticText(DData,-1,' cos(2ThM):'),0,WACV)
806                cos2tm = wx.TextCtrl(DData,wx.ID_ANY,
807                    '%.3f'%(UseList[item]['Extinction'][2]['Cos2TM']),style=wx.TE_PROCESS_ENTER)
808                Indx[cos2tm.GetId()] = item
809                cos2tm.Bind(wx.EVT_TEXT_ENTER,OnCos2TM)
810                cos2tm.Bind(wx.EVT_KILL_FOCUS,OnCos2TM)
811                valSizer.Add(cos2tm,0,WACV)
812                extSizer.Add(valSizer,0,WACV)
813            val2Sizer =wx.BoxSizer(wx.HORIZONTAL)
814            if 'Primary' in UseList[item]['Extinction'][1]:
815                Ekey = ['Ep',]
816            elif 'Secondary Type II' == UseList[item]['Extinction'][1]:
817                Ekey = ['Es',]
818            elif 'Secondary Type I' == UseList[item]['Extinction'][1]:
819                Ekey = ['Eg',]
820            else:
821                Ekey = ['Eg','Es']
822            for ekey in Ekey:
823                Eref = wx.CheckBox(DData,-1,label=ekey+' : ')
824                Eref.SetValue(UseList[item]['Extinction'][2][ekey][1])
825                Indx[Eref.GetId()] = [item,ekey]
826                Eref.Bind(wx.EVT_CHECKBOX, OnEref)
827                val2Sizer.Add(Eref,0,WACV)
828                Eval = wx.TextCtrl(DData,wx.ID_ANY,
829                    '%10.3e'%(UseList[item]['Extinction'][2][ekey][0]),style=wx.TE_PROCESS_ENTER)
830                Indx[Eval.GetId()] = [item,ekey]
831                Eval.Bind(wx.EVT_TEXT_ENTER,OnEval)
832                Eval.Bind(wx.EVT_KILL_FOCUS,OnEval)
833                val2Sizer.Add(Eval,0,WACV)
834
835            extSizer.Add(val2Sizer,0,WACV)
836        return extSizer
837       
838    def BabSizer():
839        babSizer = wx.BoxSizer(wx.HORIZONTAL)
840        for bab in ['A','U']:
841            babRef = wx.CheckBox(DData,-1,label=' Babinet '+bab+': ')
842            babRef.SetValue(UseList[item]['Babinet']['Bab'+bab][1])
843            Indx[babRef.GetId()] = [item,bab]
844            babRef.Bind(wx.EVT_CHECKBOX, OnBabRef)
845            babSizer.Add(babRef,0,WACV)
846            babVal = wx.TextCtrl(DData,wx.ID_ANY,
847                '%.3f'%(UseList[item]['Babinet']['Bab'+bab][0]),style=wx.TE_PROCESS_ENTER)
848            Indx[babVal.GetId()] = [item,bab]
849            babVal.Bind(wx.EVT_TEXT_ENTER,OnBabVal)
850            babVal.Bind(wx.EVT_KILL_FOCUS,OnBabVal)
851            babSizer.Add(babVal,0,WACV)
852            babSizer.Add((5,5),0)
853        return babSizer
854       
855    if DData.GetSizer():
856        DData.GetSizer().Clear(True)
857    mainSizer = wx.BoxSizer(wx.VERTICAL)
858    mainSizer.Add(wx.StaticText(DData,-1,'Histogram data for '+PhaseName+':'),0,WACV)
859    if PWDR:
860        mainSizer.Add(PlotSizer())           
861       
862    for item in keyList:
863        histData = UseList[item]
864        if 'Use' not in UseList[item]:      #patch
865            UseList[item]['Use'] = True
866        if 'Babinet' not in UseList[item]:
867            UseList[item]['Babinet'] = {'BabA':[0.0,False],'BabU':[0.0,False]}
868        showSizer = wx.BoxSizer(wx.HORIZONTAL)
869        showData = wx.CheckBox(DData,-1,label=' Show '+item)
870        showData.SetValue(UseList[item]['Show'])
871        Indx[showData.GetId()] = item
872        showData.Bind(wx.EVT_CHECKBOX, OnShowData)
873        showSizer.Add(showData,0,WACV)
874        useData = wx.CheckBox(DData,-1,label='Use?')
875        Indx[useData.GetId()] = item
876        showSizer.Add(useData,0,WACV)
877        useData.Bind(wx.EVT_CHECKBOX, OnUseData)
878        useData.SetValue(UseList[item]['Use'])
879        copyData = wx.Button(DData,-1,label=' Copy?')
880        Indx[copyData.GetId()] = item
881        copyData.Bind(wx.EVT_BUTTON,OnCopyData)
882        showSizer.Add(copyData,WACV)
883        copyFlags = wx.Button(DData,-1,label=' Copy flags?')
884        Indx[copyFlags.GetId()] = item
885        copyFlags.Bind(wx.EVT_BUTTON,OnCopyFlags)
886        showSizer.Add(copyFlags,WACV)
887        mainSizer.Add((5,5),0)
888        mainSizer.Add(showSizer,0,WACV)
889        mainSizer.Add((0,5),0)
890       
891        if UseList[item]['Show']:
892            mainSizer.Add(ScaleSizer())
893            mainSizer.Add((0,5),0)
894           
895        if item[:4] == 'PWDR' and UseList[item]['Show']:
896            if UseList[item]['Size'][0] == 'isotropic':
897                isoSizer = wx.BoxSizer(wx.HORIZONTAL)
898                isoSizer.Add(TopSizer(' Size model: ',['isotropic','uniaxial','ellipsoidal'],
899                    'Size',OnSizeType),0,WACV)
900                isoSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
901                isoSizer.Add(ResetSizer('isotropic',OnResetSize),0,WACV)
902                mainSizer.Add(isoSizer)
903                mainSizer.Add(IsoSizer(u' Cryst. size(\xb5m): ','Size','%.5f',
904                    OnSizeVal,OnSizeRef),0,WACV)
905            elif UseList[item]['Size'][0] == 'uniaxial':
906                uniSizer = wx.BoxSizer(wx.HORIZONTAL)
907                uniSizer.Add(TopSizer(' Size model: ',['isotropic','uniaxial','ellipsoidal'],
908                    'Size',OnSizeType),0,WACV)
909                uniSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
910                uniSizer.Add(ResetSizer('uniaxial',OnResetSize),0,WACV)
911                mainSizer.Add(UniSizer('Size',OnSizeAxis),0,WACV)
912                mainSizer.Add(uniSizer)
913                mainSizer.Add(UniDataSizer(u'size(\xb5m): ','Size','%.5f',OnSizeVal,OnSizeRef))
914            elif UseList[item]['Size'][0] == 'ellipsoidal':
915                ellSizer = wx.BoxSizer(wx.HORIZONTAL)
916                ellSizer.Add(TopSizer(' Size model: ',['isotropic','uniaxial','ellipsoidal'],
917                    'Size',OnSizeType),0,WACV)
918                ellSizer.Add(LGmixSizer('Size',OnLGmixVal,OnLGmixRef))
919                ellSizer.Add(ResetSizer('ellipsoidal',OnResetSize),0,WACV)
920                mainSizer.Add(ellSizer)
921                mainSizer.Add(EllSizeDataSizer())
922            mainSizer.Add((0,5),0)                   
923           
924            if UseList[item]['Mustrain'][0] == 'isotropic':
925                isoSizer = wx.BoxSizer(wx.HORIZONTAL)
926                isoSizer.Add(TopSizer(' Mustrain model: ',['isotropic','uniaxial','generalized',],
927                    'Mustrain',OnStrainType),0,WACV)
928                isoSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
929                isoSizer.Add(ResetSizer('isotropic',OnResetStrain),0,WACV)
930                mainSizer.Add(isoSizer)
931                mainSizer.Add(IsoSizer(' microstrain: ','Mustrain','%.1f',
932                    OnStrainVal,OnStrainRef),0,WACV)                   
933                mainSizer.Add((0,5),0)
934            elif UseList[item]['Mustrain'][0] == 'uniaxial':
935                uniSizer = wx.BoxSizer(wx.HORIZONTAL)
936                uniSizer.Add(TopSizer(' Mustrain model: ',['isotropic','uniaxial','generalized',],
937                    'Mustrain',OnStrainType),0,WACV)
938                uniSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
939                uniSizer.Add(ResetSizer('uniaxial',OnResetStrain),0,WACV)
940                mainSizer.Add(uniSizer)
941                mainSizer.Add(UniSizer('Mustrain',OnStrainAxis),0,WACV)
942                mainSizer.Add(UniDataSizer('mustrain: ','Mustrain','%.1f',OnStrainVal,OnStrainRef))
943            elif UseList[item]['Mustrain'][0] == 'generalized':
944                genSizer = wx.BoxSizer(wx.HORIZONTAL)
945                genSizer.Add(TopSizer(' Mustrain model: ',['isotropic','uniaxial','generalized',],
946                    'Mustrain',OnStrainType),0,WACV)
947                genSizer.Add(LGmixSizer('Mustrain',OnLGmixVal,OnLGmixRef))
948                genSizer.Add(ResetSizer('generalized',OnResetStrain),0,WACV)
949                mainSizer.Add(genSizer)
950                mainSizer.Add(GenStrainDataSizer())                       
951            mainSizer.Add((0,5),0)
952           
953            mainSizer.Add(wx.StaticText(DData,-1,' Hydrostatic/elastic strain:'))
954            mainSizer.Add(HstrainSizer())
955               
956            #texture  'Pref. Ori.':['MD',1.0,False,[0,0,1],0,[]] last two for 'SH' are SHorder & coeff
957            poSizer = wx.BoxSizer(wx.VERTICAL)
958            POData = UseList[item]['Pref.Ori.']
959            poSizer.Add(PoTopSizer(POData))
960            if POData[0] == 'MD':
961                poSizer.Add(MDDataSizer(POData))
962            else:           #'SH'
963                if POData[4]:       #SH order > 0
964                    poSizer.Add(SHDataSizer(POData))
965                   
966            mainSizer.Add(poSizer)
967            mainSizer.Add((0,5),0)               
968            mainSizer.Add(ExtSizer())
969            mainSizer.Add((0,5),0)
970            mainSizer.Add(BabSizer())
971            mainSizer.Add((0,5),0)
972        elif item[:4] == 'HKLF' and UseList[item]['Show']:
973            mainSizer.Add((0,5),0)               
974            mainSizer.Add(SCExtSizer())
975            mainSizer.Add((0,5),0)
976            mainSizer.Add(BabSizer())
977            mainSizer.Add((0,5),0)
978            pass
979        if UseList[item]['Show']:
980            G2gd.HorizontalLine(mainSizer,DData)
981
982    mainSizer.Add((5,5),0)
983    G2phsGUI.SetPhaseWindow(G2frame.dataFrame,DData,mainSizer)
Note: See TracBrowser for help on using the repository browser.