Changeset 5130 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Jan 8, 2022 11:21:35 AM (11 months ago)
Author:
vondreele
Message:

revise ISODISTORT operation - now uses Method 4 by default.
Revise ISODISTORT cif import to retain mode displacements
ApplyModeDisp? now uses mode normalization
move OnRunISODISTORT to UpdateISODISTORT - where it is now called from
revise UpdateISODISTORT to allow Method 4 along with 1; 2 & 3 are not currently supported in GSAS-II
mode display sliders now initialized from ISODISTORT cif data; reset goes back to cif values (not zeros)
fix errors in instrument parm plots; also provide alert in plot title if negatives encountered
recover _iso_displacivemode_value from ISODISTORT cif file
revise ISODISTORT.py to work with method 4 as well as method 1.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r5123 r5130  
    6969import numpy.linalg as nl
    7070import atmdata
     71import ISODISTORT as ISO
    7172
    7273try:
     
    29342935        G2frame.GPXtree.SelectItem(sub)
    29352936       
    2936     def OnRunISODISTORT(event):
    2937         ''' this needs to setup for method #3 or #4 in ISODISTORT
    2938         after providing parent cif:
    2939         #3 asks for transformation matrix & space group of child structure
    2940         #4 asks for cif file of child structure
    2941         '''
    2942         import ISODISTORT as ISO
    2943         # Use GSAS2Scriptable to make a CIF for the current phase in a
    2944         # scratch directory
    2945         data['pId'] = data.get('pId',0) # needs a pId
    2946         import GSASIIscriptable as G2sc
    2947         import tempfile
    2948         wx.BeginBusyCursor()
    2949         proj = G2sc.G2Project(newgpx='tmp4cif.gpx')
    2950         ph = G2sc.G2Phase(data,data['General']['Name'],proj)
    2951         tmpdir = tempfile.TemporaryDirectory()
    2952         parentcif = os.path.join(tmpdir.name,'ISOin.cif')
    2953         ph.export_CIF(parentcif)
    2954         radio,rundata = ISO.GetISODISTORT(data,parentcif)
    2955         wx.EndBusyCursor()
    2956         tmpdir.cleanup()
    2957         if radio and rundata:
    2958             data['ISODISTORT']['radio'] = radio
    2959             data['ISODISTORT']['rundata'] = rundata
    2960             data['ISODISTORT']['SGselect'] =  {'Tric':True,'Mono':True,'Orth':True,'Tetr':True,'Trig':True,'Hexa':True,'Cubi':True}
    2961             data['ISODISTORT']['selection'] = None
    2962             print('ISODISTORT run complete')
    2963             wx.CallAfter(UpdateISODISTORT)
    2964         else:
    2965             G2G.G2MessageBox(G2frame,'ISODISTORT run failed - see page opened in web browser')
    2966                
    29672937    def OnCompare(event):
    29682938        generalData = data['General']
     
    66376607            if not os.path.exists(engineFilePath):
    66386608                dlg = wx.FileDialog(G2frame, 'Open fullrmc directory',
    6639                                         defaultFile='*.rmc',
    6640                                         wildcard='*.rmc')
     6609                    defaultFile='*.rmc',wildcard='*.rmc')
    66416610                try:
    66426611                    if dlg.ShowModal() == wx.ID_OK:
     
    70266995
    70276996    def UpdateISODISTORT(Scroll=0):
    7028         ''' Present the results of an ISODISTORT run & allow selection of a distortion model for PDFfit
    7029         & refinement constraints
     6997        ''' Setup ISODISTORT and present the results. Allow selection of a distortion model for PDFfit or
     6998        GSAS-II structure refinement as a cif file produced by ISODISTORT. Allows manipulation of distortion
     6999        mode displacements selection their refinement for this new phase.
    70307000        '''
    7031         def OnLaue(event):
    7032             Obj = event.GetEventObject()
    7033             name = Indx[Obj.GetId()]
    7034             data['ISODISTORT']['SGselect'][name[:4]] = not data['ISODISTORT']['SGselect'][name[:4]]
    7035             data['ISODISTORT']['selection'] = None
    7036             UpdateISODISTORT()
    7037            
    7038         def OnAllBtn(event):
    7039             for item in data['ISODISTORT']['SGselect']:
    7040                 data['ISODISTORT']['SGselect'][item] = not data['ISODISTORT']['SGselect'][item]
    7041             data['ISODISTORT']['selection'] = None
    7042             UpdateISODISTORT()
    7043            
    7044         def CheckItem(item):
    7045             SGnum = int(item.split()[1].split('*')[0])
    7046             for SGtype in data['ISODISTORT']['SGselect']:
    7047                 if data['ISODISTORT']['SGselect'][SGtype] and SGnum in SGrange[SGtype]:
    7048                     return True
    7049             return False
    7050        
    7051         def OnSelect(event):
    7052             r,c = event.GetRow(),event.GetCol()
    7053             if c == 0:
    7054                 data['ISODISTORT']['selection'] = [r,isoTable.GetValue(r,1)]
    7055                 for row in range(isoGrid.GetNumberRows()):
    7056                     isoTable.SetValue(row,c,False)
    7057                 isoTable.SetValue(r,c,True)
    7058                 isoGrid.ForceRefresh()
    7059                
    7060         def OnDispl(event):
    7061             '''Respond to movement of distortion mode slider'''
    7062             Obj = event.GetEventObject()
    7063             idsp,dispVal = Indx[Obj.GetId()]
    7064             modeDisp[idsp] = (Obj.GetValue()-100)/1000.
    7065             dispVal.SetValue(modeDisp[idsp])
    7066             err = G2mth.ApplyModeDisp(data)
    7067             if err:
    7068                 G2G.G2MessageBox(G2frame,'Do Draw atoms first')     
    7069             FindBondsDraw(data)               
    7070             G2plt.PlotStructure(G2frame,data)
    7071            
    7072         def OnDispVal(invalid,value,tc):
    7073             '''Respond to entry of a value into a distortion mode entry widget'''
    7074             idsp,displ = Indx[tc.GetId()]
    7075             displ.SetValue(int(value*1000)+100)
    7076             err = G2mth.ApplyModeDisp(data)
    7077             if err:
    7078                 G2G.G2MessageBox(G2frame,'Do Draw atoms first')               
    7079             FindBondsDraw(data)               
    7080             G2plt.PlotStructure(G2frame,data)
     7001       
     7002        def displaySetup():
     7003           
     7004            def OnParentCif(event):
     7005                dlg = wx.FileDialog(ISODIST, 'Select parent cif file',G2frame.LastGPXdir,
     7006                    style=wx.FD_OPEN ,wildcard='cif file(*.cif)|*.cif')
     7007                if dlg.ShowModal() == wx.ID_OK:
     7008                    fName = dlg.GetFilename()
     7009                    ISOdata['ParentCIF'] = fName
     7010                    dlg.Destroy()
     7011                else:
     7012                    dlg.Destroy()
     7013                UpdateISODISTORT()
     7014               
     7015            def OnUsePhase(event):
     7016                ISOdata['ParentCIF'] = 'Use this phase'                   
     7017                UpdateISODISTORT()
     7018               
     7019            def OnMethodSel(event):
     7020                method = methodSel.GetSelection()+1
     7021                if method in [1,4]:
     7022                    ISOdata['ISOmethod'] = method
     7023                UpdateISODISTORT()
     7024               
     7025            def OnChildCif(event):
     7026                dlg = wx.FileDialog(ISODIST, 'Select child cif file',G2frame.LastGPXdir,
     7027                    style=wx.FD_OPEN ,wildcard='cif file(*.cif)|*.cif')
     7028                if dlg.ShowModal() == wx.ID_OK:
     7029                    fName = dlg.GetFilename()
     7030                    ISOdata['ChildCIF'] = fName
     7031                    dlg.Destroy()
     7032                else:
     7033                    dlg.Destroy()
     7034                UpdateISODISTORT()
     7035
     7036            def OnUsePhase2(event):
     7037                ISOdata['ChildCIF'] = 'Use this phase'                   
     7038                UpdateISODISTORT()
     7039
     7040            topSizer = wx.BoxSizer(wx.VERTICAL)
     7041            topSizer.Add(wx.StaticText(ISODIST,label=' ISODISTORT setup controls:'))
     7042            parentSizer = wx.BoxSizer(wx.HORIZONTAL)
     7043            parentSizer.Add(wx.StaticText(ISODIST,label=' Parent cif file:'),0,WACV)
     7044            parentCif = wx.Button(ISODIST,label=ISOdata['ParentCIF'],size=(200,24))
     7045            parentCif.Bind(wx.EVT_BUTTON,OnParentCif)
     7046            parentSizer.Add(parentCif,0,WACV)
     7047            if 'Use this phase' not in ISOdata['ChildCIF'] and 'Use this phase' not in ISOdata['ParentCIF']:
     7048                usePhase = wx.Button(ISODIST,label=' Use this phase? ')
     7049                usePhase.Bind(wx.EVT_BUTTON,OnUsePhase)
     7050                parentSizer.Add(usePhase,0,WACV)
     7051            topSizer.Add(parentSizer)
     7052            #patch
     7053            if 'ISOmethod' not in ISOdata:
     7054                ISOdata['ISOmethod'] = 1
     7055            #end patch
     7056            choice = ['Method 1: Search over all special k points - yields only single Irrep models',
     7057                'Method 2: not implemented in GSAS-II',
     7058                'Method 3: not implemented in GSAS-II',
     7059                'Method 4: Mode decomposition of known child structure']
     7060            methodSel = wx.RadioBox(ISODIST,label='Select ISODISTORT method:',choices=choice,
     7061                majorDimension=1,style=wx.RA_SPECIFY_COLS)
     7062            methodSel.SetSelection(ISOdata['ISOmethod']-1)
     7063            methodSel.Bind(wx.EVT_RADIOBOX,OnMethodSel)
     7064            topSizer.Add(methodSel)
     7065            if ISOdata['ISOmethod'] == 4:
     7066                childSizer = wx.BoxSizer(wx.HORIZONTAL)
     7067                childSizer.Add(wx.StaticText(ISODIST,label=' Child cif file:'),0,WACV)
     7068                childCif = wx.Button(ISODIST,label=ISOdata['ChildCIF'],size=(200,24))
     7069                childCif.Bind(wx.EVT_BUTTON,OnChildCif)
     7070                childSizer.Add(childCif,0,WACV)
     7071                if 'Use this phase' not in ISOdata['ChildCIF'] and 'Use this phase' not in ISOdata['ParentCIF']:
     7072                    usePhase2 = wx.Button(ISODIST,label=' Use this phase? ')
     7073                    usePhase2.Bind(wx.EVT_BUTTON,OnUsePhase2)
     7074                    childSizer.Add(usePhase2,0,WACV)
     7075                topSizer.Add(childSizer)
     7076           
     7077            return topSizer
     7078           
     7079        def displaySubset():
     7080           
     7081            def OnLaue(event):
     7082                Obj = event.GetEventObject()
     7083                name = Indx[Obj.GetId()]
     7084                ISOdata['SGselect'][name[:4]] = not ISOdata['SGselect'][name[:4]]
     7085                ISOdata['selection'] = None
     7086                UpdateISODISTORT()
     7087               
     7088            def OnAllBtn(event):
     7089                for item in ISOdata['SGselect']:
     7090                    ISOdata['SGselect'][item] = not ISOdata['SGselect'][item]
     7091                ISOdata['selection'] = None
     7092                UpdateISODISTORT()
     7093               
     7094            topSizer = wx.BoxSizer(wx.VERTICAL)   
     7095            G2G.HorizontalLine(topSizer,ISODIST)
     7096            topSizer.Add(wx.StaticText(ISODIST,label='ISODISTORT Method 1 distortion search results:'))
     7097            topSizer.Add(wx.StaticText(ISODIST,label=' Subset selection if desired:'))
     7098            laueName = ['Cubic','Hexagonal','Trigonal','Tetragonal','Orthorhombic','Monoclinic','Triclinic']
     7099            littleSizer = wx.FlexGridSizer(0,8,5,5)
     7100            Indx = {}
     7101            for name in laueName:
     7102                laueCk = wx.CheckBox(ISODIST,label=name)
     7103                Indx[laueCk.GetId()] = name
     7104                laueCk.SetValue(data['ISODISTORT']['SGselect'][name[:4]])
     7105                laueCk.Bind(wx.EVT_CHECKBOX,OnLaue)
     7106                littleSizer.Add(laueCk,0,WACV)
     7107            allBtn = wx.Button(ISODIST,label='Toggle all')
     7108            allBtn.Bind(wx.EVT_BUTTON,OnAllBtn)
     7109            littleSizer.Add(allBtn)
     7110            topSizer.Add(littleSizer)
     7111            return topSizer
     7112           
     7113        def displayRadio():
     7114           
     7115            def CheckItem(item):
     7116                SGnum = int(item.split()[1].split('*')[0])
     7117                for SGtype in ISOdata['SGselect']:
     7118                    if ISOdata['SGselect'][SGtype] and SGnum in SGrange[SGtype]:
     7119                        return True
     7120                return False
     7121       
     7122            def OnSelect(event):
     7123               r,c = event.GetRow(),event.GetCol()
     7124               if c == 0:
     7125                   ISOdata['selection'] = [r,isoTable.GetValue(r,1)]
     7126                   for row in range(isoGrid.GetNumberRows()):
     7127                       isoTable.SetValue(row,c,False)
     7128                   isoTable.SetValue(r,c,True)
     7129                   isoGrid.ForceRefresh()
    70817130           
    7082         def OnReset(event):
    7083             '''Reset all distortion mode values to zero'''
    7084             data['ISODISTORT']['modeDispl'] = np.zeros(len(data['ISODISTORT']['G2ModeList']))
    7085             err = G2mth.ApplyModeDisp(data)
    7086             if err:
    7087                 G2G.G2MessageBox(G2frame,'Do Draw atoms first')               
    7088             FindBondsDraw(data)               
    7089             G2plt.PlotStructure(G2frame,data)
    7090             UpdateISODISTORT()                                   
    7091        
    7092         Indx = {}     
    7093         G2frame.dataWindow.ISODDataEdit.Enable(G2G.wxID_ISODNEWPHASE,
    7094                                 'rundata' in data['ISODISTORT'])
    7095         G2frame.dataWindow.ISODDataEdit.Enable(G2G.wxID_SHOWISO1,
    7096                     ('G2VarList' in data['ISODISTORT']) or
    7097                     ('G2OccVarList' in data['ISODISTORT']))
    7098         G2frame.dataWindow.ISODDataEdit.Enable(G2G.wxID_SHOWISOMODES,
    7099                     ('G2VarList' in data['ISODISTORT'])
    7100 #                    or ('G2OccVarList' in data['ISODISTORT'])
    7101                                                    )
    7102         if 'radio' not in data['ISODISTORT']:
    7103             if not data['ISODISTORT']:
    7104                 mainSizer = wx.BoxSizer(wx.VERTICAL)
    7105                 mainSizer.Add(wx.StaticText(ISODIST,
    7106                         label='No ISODISTORT information found for this phase\n'
    7107                             +'  (use Operations->Run ISODISTORT to generate)'))
    7108                 SetPhaseWindow(ISODIST,mainSizer,Scroll=Scroll)               
    7109                 return
    7110 #patch
    7111             if 'modeDispl' not in data['ISODISTORT']:
    7112                 data['ISODISTORT']['modeDispl'] = np.zeros(len(data['ISODISTORT']['G2ModeList']))
    7113 #end patch
    7114             if ISODIST.GetSizer():
    7115                 ISODIST.GetSizer().Clear(True)
    7116             mainSizer = wx.BoxSizer(wx.VERTICAL)
    7117             topSizer = wx.BoxSizer(wx.VERTICAL)   
     7131            SGrange = {'Cubi':np.arange(195,231),'Hexa':np.arange(168,195),'Trig':np.arange(143,168),'Tetr':np.arange(75,143),
     7132                       'Orth':np.arange(16,75),'Mono':np.arange(3,16),'Tric':np.arange(1,3)}       
    71187133            bottomSizer = wx.BoxSizer(wx.VERTICAL)
    7119             topSizer.Add(wx.StaticText(ISODIST,
    7120                          label=''' For use of ISODISTORT, please cite:
    7121   H. T. Stokes, D. M. Hatch, and B. J. Campbell, ISODISTORT, ISOTROPY Software Suite, iso.byu.edu.
    7122   B. J. Campbell, H. T. Stokes, D. E. Tanner, and D. M. Hatch, "ISODISPLACE: An Internet Tool for
    7123   Exploring Structural Distortions." J. Appl. Cryst. 39, 607-614 (2006).
    7124   '''))
    7125             topSizer.Add(wx.StaticText(ISODIST,label=' ISODISTORT distortion modes for %s:\n'%data['General']['Name']))
    7126             lineSizer = wx.BoxSizer(wx.HORIZONTAL)           
    7127             lineSizer.Add(wx.StaticText(ISODIST,label=' Adjust magnitude of distortion modes (-0.1 to +0.1):  '),0,WACV)
    7128             reset = wx.Button(ISODIST,label='Reset modes')
    7129             reset.Bind(wx.EVT_BUTTON,OnReset)
    7130             lineSizer.Add(reset,0,WACV)
    7131             topSizer.Add(lineSizer)
    7132             slideSizer = wx.FlexGridSizer(0,3,0,0)
    7133             slideSizer.AddGrowableCol(2,1)
    7134             modeDisp = data['ISODISTORT']['modeDispl']
    7135             for idsp,item in enumerate(data['ISODISTORT']['G2ModeList']):
    7136                 slideSizer.Add(wx.StaticText(ISODIST,label=item.name),0,WACV)
    7137                 dispVal = G2G.ValidatedTxtCtrl(ISODIST,modeDisp,idsp,xmin=-0.1,xmax=0.1,size=(50,20),OnLeave=OnDispVal)
    7138                 slideSizer.Add(dispVal,0,WACV)
    7139                 displ = wx.Slider(ISODIST,style=wx.SL_HORIZONTAL,value=int(modeDisp[idsp]*1000)+100)
    7140                 displ.SetRange(0,200)
    7141                 displ.Bind(wx.EVT_SLIDER, OnDispl)
    7142                 Indx[displ.GetId()] = [idsp,dispVal]
    7143                 Indx[dispVal.GetId()] = [idsp,displ]
    7144                 slideSizer.Add(displ,1,wx.EXPAND|wx.RIGHT)
    7145             slideSizer.SetMinSize(wx.Size(350,10))
    7146             topSizer.Add(slideSizer)
    7147             mainSizer.Add(topSizer)
    7148             SetPhaseWindow(ISODIST,mainSizer,Scroll=Scroll)               
    7149             return
    7150         if ISODIST.GetSizer():
    7151             ISODIST.GetSizer().Clear(True)
    7152         SGrange = {'Cubi':np.arange(195,231),'Hexa':np.arange(168,195),'Trig':np.arange(143,168),'Tetr':np.arange(75,143),
    7153                    'Orth':np.arange(16,75),'Mono':np.arange(3,16),'Tric':np.arange(1,3)}       
    7154         colLabels = ['select',' ISODISTORT order parameter direction description']
    7155         colTypes = [wg.GRID_VALUE_BOOL,wg.GRID_VALUE_STRING,]
    7156         mainSizer = wx.BoxSizer(wx.VERTICAL)
    7157         topSizer = wx.BoxSizer(wx.VERTICAL)   
    7158         bottomSizer = wx.BoxSizer(wx.VERTICAL)
    7159         topSizer.Add(wx.StaticText(ISODIST,label=' ISODISTORT distortion search results:'))
    7160         topSizer.Add(wx.StaticText(ISODIST,label='''
    7161 For use of ISODISTORT, please cite:
    7162   H. T. Stokes, D. M. Hatch, and B. J. Campbell, ISODISTORT, ISOTROPY Software Suite, iso.byu.edu.
    7163   B. J. Campbell, H. T. Stokes, D. E. Tanner, and D. M. Hatch, "ISODISPLACE: An Internet Tool for
    7164   Exploring Structural Distortions." J. Appl. Cryst. 39, 607-614 (2006).
    7165   '''))
    7166         topSizer.Add(wx.StaticText(ISODIST,label=' Subset selection if desired:'))
    7167         laueName = ['Cubic','Hexagonal','Trigonal','Tetragonal','Orthorhombic','Monoclinic','Triclinic']
    7168         littleSizer = wx.FlexGridSizer(0,8,5,5)
    7169         Indx = {}
    7170         for name in laueName:
    7171             laueCk = wx.CheckBox(ISODIST,label=name)
    7172             Indx[laueCk.GetId()] = name
    7173             laueCk.SetValue(data['ISODISTORT']['SGselect'][name[:4]])
    7174             laueCk.Bind(wx.EVT_CHECKBOX,OnLaue)
    7175             littleSizer.Add(laueCk,0,WACV)
    7176         allBtn = wx.Button(ISODIST,label='Toggle all')
    7177         allBtn.Bind(wx.EVT_BUTTON,OnAllBtn)
    7178         littleSizer.Add(allBtn)
    7179         topSizer.Add(littleSizer)
    7180        
    7181         mainSizer.Add(topSizer)
    7182          
    7183         if 'radio' in data['ISODISTORT']:
    7184             Radio = data['ISODISTORT']['radio']
     7134            colLabels = ['select',' ISODISTORT order parameter direction description']
     7135            colTypes = [wg.GRID_VALUE_BOOL,wg.GRID_VALUE_STRING,]
     7136           
     7137            Radio = ISOdata['radio']
    71857138            rowLabels = []
    71867139            table = []
    71877140            for i,item in enumerate(Radio):
    71887141                if CheckItem(Radio[item]):
    7189                     if data['ISODISTORT']['selection'] and data['ISODISTORT']['selection'][0] == i:
     7142                    if ISOdata['selection'] and ISOdata['selection'][0] == i:
    71907143                        table.append([True,Radio[item]])
    71917144                    else:
     
    72037156            isoGrid.SetColAttr(1,attr)
    72047157            isoGrid.Bind(wg.EVT_GRID_CELL_LEFT_CLICK, OnSelect)
    7205         mainSizer.Add(bottomSizer)
     7158            return bottomSizer
     7159               
     7160        def displayModes():
     7161           
     7162            def OnDispl(event):
     7163                '''Respond to movement of distortion mode slider'''
     7164                Obj = event.GetEventObject()
     7165                idsp,dispVal = Indx[Obj.GetId()]
     7166                modeDisp[idsp] = Obj.GetValue()/1000.
     7167                dispVal.SetValue(modeDisp[idsp])
     7168                err = G2mth.ApplyModeDisp(data)
     7169                if err:
     7170                    G2G.G2MessageBox(G2frame,'Do Draw atoms first')     
     7171                FindBondsDraw(data)               
     7172                G2plt.PlotStructure(G2frame,data)
     7173               
     7174            def OnDispVal(invalid,value,tc):
     7175                '''Respond to entry of a value into a distortion mode entry widget'''
     7176                idsp,displ = Indx[tc.GetId()]
     7177                displ.SetValue(int(value*1000))
     7178                err = G2mth.ApplyModeDisp(data)
     7179                if err:
     7180                    G2G.G2MessageBox(G2frame,'Do Draw atoms first')               
     7181                FindBondsDraw(data)               
     7182                G2plt.PlotStructure(G2frame,data)
     7183               
     7184            def OnRefDispl(event):
     7185                Obj = event.GetEventObject()
     7186                idsp = Indx[Obj.GetId()][0]
     7187                ISOdata['modeDisplFlag'][idsp] = not ISOdata['modeDisplFlag'][idsp]
     7188               
     7189            def OnReset(event):
     7190                '''Reset all distortion mode values to zero'''
     7191                ISOdata['modeDispl'] = copy.deepcopy(ISOdata['ISOmodeDispl'])
     7192                err = G2mth.ApplyModeDisp(data)
     7193                if err:
     7194                    G2G.G2MessageBox(G2frame,'Do Draw atoms first')               
     7195                FindBondsDraw(data)               
     7196                G2plt.PlotStructure(G2frame,data)
     7197                UpdateISODISTORT()
     7198           
     7199            mainSizer = wx.BoxSizer(wx.VERTICAL)
     7200            topSizer = wx.BoxSizer(wx.VERTICAL)   
     7201            topSizer.Add(wx.StaticText(ISODIST,label=ISOcite))
     7202            topSizer.Add(wx.StaticText(ISODIST,label=' ISODISTORT distortion modes for %s:'%data['General']['Name']))
     7203            lineSizer = wx.BoxSizer(wx.HORIZONTAL)           
     7204            lineSizer.Add(wx.StaticText(ISODIST,label=' Adjust magnitude of distortion modes (-2 to +2):  '),0,WACV)
     7205            reset = wx.Button(ISODIST,label='Reset modes')
     7206            reset.Bind(wx.EVT_BUTTON,OnReset)
     7207            lineSizer.Add(reset,0,WACV)
     7208            topSizer.Add(lineSizer)
     7209            slideSizer = wx.FlexGridSizer(0,4,0,0)
     7210            slideSizer.AddGrowableCol(2,1)
     7211            modeDisp = ISOdata['modeDispl']
     7212            for idsp,item in enumerate(ISOdata['G2ModeList']):
     7213                slideSizer.Add(wx.StaticText(ISODIST,label=item.name),0,WACV)
     7214                dispVal = G2G.ValidatedTxtCtrl(ISODIST,modeDisp,idsp,xmin=-2.,xmax=2.,size=(50,20),OnLeave=OnDispVal)
     7215                slideSizer.Add(dispVal,0,WACV)
     7216                displ = wx.Slider(ISODIST,style=wx.SL_HORIZONTAL,minValue=-2000,maxValue=2000,value=int(modeDisp[idsp]*1000))
     7217                displ.Bind(wx.EVT_SLIDER, OnDispl)
     7218                Indx[displ.GetId()] = [idsp,dispVal]
     7219                Indx[dispVal.GetId()] = [idsp,displ]
     7220                slideSizer.Add(displ,1,wx.EXPAND|wx.RIGHT)
     7221                refDispl = wx.CheckBox(ISODIST,label=' Refine?')
     7222                refDispl.SetValue(ISOdata['modeDisplFlag'][idsp])
     7223                refDispl.Bind(wx.EVT_CHECKBOX,OnRefDispl)
     7224                Indx[refDispl.GetId()] = [idsp]
     7225                slideSizer.Add(refDispl,0,WACV)
     7226            slideSizer.SetMinSize(wx.Size(350,10))
     7227            topSizer.Add(slideSizer)
     7228            mainSizer.Add(topSizer)
     7229            SetPhaseWindow(ISODIST,mainSizer,Scroll=Scroll)               
     7230       
     7231        Indx = {}     
     7232        ISOdata = data['ISODISTORT']
     7233        G2frame.dataWindow.ISODDataEdit.Enable(G2G.wxID_ISODNEWPHASE,'rundata' in ISOdata)
     7234        G2frame.dataWindow.ISODDataEdit.Enable(G2G.wxID_SHOWISO1,('G2VarList' in ISOdata)
     7235            or ('G2OccVarList' in ISOdata))
     7236        G2frame.dataWindow.ISODDataEdit.Enable(G2G.wxID_SHOWISOMODES,('G2VarList' in ISOdata)
     7237#           or ('G2OccVarList' in data['ISODISTORT'])
     7238                                                   )
     7239        ISOcite = ''' For use of ISODISTORT, please cite:
     7240  H. T. Stokes, D. M. Hatch, and B. J. Campbell, ISODISTORT, ISOTROPY Software Suite, iso.byu.edu.
     7241  B. J. Campbell, H. T. Stokes, D. E. Tanner, and D. M. Hatch, "ISODISPLACE: An Internet Tool for
     7242  Exploring Structural Distortions." J. Appl. Cryst. 39, 607-614 (2006).
     7243  '''
     7244        if ISODIST.GetSizer():
     7245            ISODIST.GetSizer().Clear(True)
     7246           
     7247        if 'G2ModeList' in ISOdata:      #invoked only if phase is from a ISODISTORT cif file & thus contains distortion mode constraints
     7248           
     7249#patch
     7250            if 'modeDispl' not in ISOdata:
     7251                ISOdata['modeDispl'] = np.zeros(len(ISOdata['G2ModeList']))
     7252            if 'modeDisplFlag' not in ISOdata:
     7253                ISOdata['modeDisplFlag'] = [False,]*len(ISOdata['G2ModeList'])
     7254#end patch
     7255           
     7256            displayModes()
     7257            return
     7258       
     7259#initialization
     7260        if 'ParentCIF' not in ISOdata:
     7261            ISOdata.update({'ParentCIF':'Select','ChildCIF':'Select','ISOmethod':4,
     7262                'ChildMatrix':np.eye(3),'ChildSprGp':'P 1','ChildCell':'abc',})         #these last 3 currently unused
     7263#end initialization
     7264 
     7265        mainSizer = wx.BoxSizer(wx.VERTICAL)
     7266        mainSizer.Add(wx.StaticText(ISODIST,label=ISOcite))
     7267       
     7268        mainSizer.Add(displaySetup())
     7269           
     7270        if 'radio' in ISOdata:
     7271            mainSizer.Add(displaySubset())             
     7272            mainSizer.Add(displayRadio())
    72067273        SetPhaseWindow(ISODIST,mainSizer,Scroll=Scroll)
    72077274       
     7275    def OnRunISODISTORT(event):
     7276        ''' this needs to setup for method #3 or #4 in ISODISTORT
     7277        after providing parent cif:
     7278        #3 asks for transformation matrix & space group of child structure
     7279        #4 asks for cif file of child structure
     7280        '''
     7281        radio,rundata = ISO.GetISODISTORT(data)
     7282        if radio:
     7283            data['ISODISTORT']['radio'] = radio
     7284            data['ISODISTORT']['rundata'] = rundata
     7285            data['ISODISTORT']['SGselect'] =  {'Tric':True,'Mono':True,'Orth':True,'Tetr':True,'Trig':True,'Hexa':True,'Cubi':True}
     7286            data['ISODISTORT']['selection'] = None
     7287            print('ISODISTORT run complete')
     7288            wx.CallAfter(UpdateISODISTORT)
     7289        elif data['ISODISTORT']['ISOmethod'] != 4 or radio is None:
     7290            G2G.G2MessageBox(G2frame,'ISODISTORT run failed - see page opened in web browser')
     7291        else:
     7292            G2G.G2MessageBox(G2frame,'ISODISTORT run complete; new cif file %s created.\n To use, import it as a new phase.'%rundata)
     7293            print(' ISODISTORT run complete; new cif file %s created. To use, import it as a new phase.'%rundata)
     7294               
    72087295    def OnNewISOPhase(event):
    72097296        ''' Make CIF file with ISODISTORT
    72107297        '''
    7211         import ISODISTORT as ISO
    7212 
    72137298        if 'rundata' in data['ISODISTORT'] and data['ISODISTORT']['selection'] is not None:
    72147299            CIFfile = ISO.GetISODISTORTcif(data)
     
    94909575        cell = data['General']['Cell'][1:7]
    94919576        drawingData = data['Drawing']
    9492         voidDlg = wx.Dialog(G2frame,wx.ID_ANY,
    9493                     'Void computation parameters',
    9494                     style=wx.DEFAULT_DIALOG_STYLE)
     9577        voidDlg = wx.Dialog(G2frame,wx.ID_ANY,'Void computation parameters',style=wx.DEFAULT_DIALOG_STYLE)
    94959578        mainSizer = wx.BoxSizer(wx.VERTICAL)
    94969579        mainSizer.Add(wx.StaticText(voidDlg,wx.ID_ANY,
     
    95009583        voidPar = {'a':1., 'b':1., 'c':1., 'grid':.25, 'probe':0.5}
    95019584        for i in ('a', 'b', 'c'):
    9502             mainSizer.Add(G2G.G2SliderWidget(voidDlg,voidPar,i,
    9503                 'Max '+i+' value: ',0.,xmax,100))
     9585            mainSizer.Add(G2G.G2SliderWidget(voidDlg,voidPar,i,'Max '+i+' value: ',0.,xmax,100))
    95049586        hSizer = wx.BoxSizer(wx.HORIZONTAL)
    95059587        hSizer.Add(wx.StaticText(voidDlg,wx.ID_ANY,'Grid spacing (A)'))
    9506         hSizer.Add(G2G.ValidatedTxtCtrl(voidDlg,voidPar,'grid',
    9507                 nDig=(5,2), xmin=0.1, xmax=2., typeHint=float))       
     9588        hSizer.Add(G2G.ValidatedTxtCtrl(voidDlg,voidPar,'grid',nDig=(5,2), xmin=0.1, xmax=2., typeHint=float))       
    95089589        mainSizer.Add(hSizer)
    95099590        hSizer = wx.BoxSizer(wx.HORIZONTAL)
    95109591        hSizer.Add(wx.StaticText(voidDlg,wx.ID_ANY,'Probe radius (A)'))
    9511         hSizer.Add(G2G.ValidatedTxtCtrl(voidDlg,voidPar,'probe',
    9512                 nDig=(5,2), xmin=0.1, xmax=2., typeHint=float))       
     9592        hSizer.Add(G2G.ValidatedTxtCtrl(voidDlg,voidPar,'probe',nDig=(5,2), xmin=0.1, xmax=2., typeHint=float))       
    95139593        mainSizer.Add(hSizer)
    95149594
     
    95329612        if res != wx.ID_OK: return
    95339613        drawingData['Voids'] = VoidMap(data, voidPar['a'], voidPar['b'], voidPar['c'],
    9534                           voidPar['grid'],voidPar['probe'])
     9614            voidPar['grid'],voidPar['probe'])
    95359615        drawingData['showVoids'] = True
    95369616        G2plt.PlotStructure(G2frame,data)
     
    96389718            G2frame.phaseDisplay.cameraPosTxt = cameraPosTxt
    96399719            slideSizer.Add(cameraPosTxt,0,WACV)
    9640             cameraPos = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=drawingData['cameraPos'],name='cameraSlider')
    9641             cameraPos.SetRange(10,500)
     9720            cameraPos = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=drawingData['cameraPos'],
     9721                minValue=10,maxValue=500,name='cameraSlider')
    96429722            cameraPos.Bind(wx.EVT_SLIDER, OnCameraPos)
    96439723            G2frame.phaseDisplay.cameraSlider = cameraPos
     
    96509730            G2frame.phaseDisplay.Zval = Zval
    96519731            slideSizer.Add(Zval)
    9652             Zclip = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=drawingData['Zclip'])
     9732            Zclip = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=drawingData['Zclip'],minValue=1,maxValue=99)
    96539733            G2frame.phaseDisplay.Zclip = Zclip
    9654             Zclip.SetRange(1,99)
    96559734            Zclip.Bind(wx.EVT_SLIDER, OnZclip)
    96569735            slideSizer.Add(Zclip,1,wx.EXPAND|wx.RIGHT)
     
    96939772            bondRadiusTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'bondRadius',nDig=(10,2),xmin=0.01,xmax=0.99,size=valSize,OnLeave=OnBondRadiusTxt)
    96949773            slideSizer.Add(bondRadiusTxt,0,WACV)
    9695             bondRadius = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=int(100*drawingData['bondRadius']))
    9696             bondRadius.SetRange(1,25)
     9774            bondRadius = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=int(100*drawingData['bondRadius']),minValue=1,maxValue=25)
    96979775            bondRadius.Bind(wx.EVT_SLIDER, OnBondRadius)
    96989776            slideSizer.Add(bondRadius,1,wx.EXPAND|wx.RIGHT)
     
    97029780                magMultTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'magMult',nDig=(10,2),xmin=0.1,xmax=5.,size=valSize,OnLeave=OnMagMultTxt)
    97039781                slideSizer.Add(magMultTxt,0,WACV)
    9704                 magMult = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=int(100*drawingData['magMult']))
    9705                 magMult.SetRange(10,500)
     9782                magMult = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,value=int(100*drawingData['magMult']),minValue=10,maxValue=500)
    97069783                magMult.Bind(wx.EVT_SLIDER, OnMagMult)
    97079784                slideSizer.Add(magMult,1,wx.EXPAND|wx.RIGHT)
     
    99069983                contourMaxTxt = wx.StaticText(drawOptions,label=' Max.: '+'%.2f'%(drawingData['contourMax']*generalData['Map']['rhoMax']))
    99079984                line3Sizer.Add(contourMaxTxt,0,WACV)
    9908                 contourMax = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,size=(150,25),value=int(100*drawingData['contourMax']))
    9909                 contourMax.SetRange(1,100)
     9985                contourMax = wx.Slider(drawOptions,style=wx.SL_HORIZONTAL,size=(150,25),
     9986                    value=int(100*drawingData['contourMax']),minValue=1,maxValue=100)
    99109987                contourMax.Bind(wx.EVT_SLIDER, OnContourMax)
    99119988                line3Sizer.Add(contourMax,1,wx.EXPAND|wx.RIGHT)
     
    1188011957                xmin=0.,xmax=360.,typeHint=float,OnLeave=UpdateOrientation))
    1188111958            OriSizer2.Add(OrientVecSiz[-1],0,WACV)
    11882             azSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL,size=(200,25))
    11883             azSlide.SetRange(0,3600)
    11884             azSlide.SetValue(int(10*rbObj['OrientVec'][0]))
     11959            azSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL,size=(200,25),
     11960                minValue=0,maxValue=3600,value=int(10*rbObj['OrientVec'][0]))
    1188511961            azSlide.Bind(wx.EVT_SLIDER, OnAzSlide)
    1188611962            OriSizer2.Add(azSlide,0,WACV)
     
    1192111997                            torName += data['testRBObj']['rbAtTypes'][item]+str(item)+' '
    1192211998                    TorSizer.Add(wx.StaticText(RigidBodies,label='Side chain torsion for rb seq: '+torName),0,WACV)
    11923                     torSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL)
    11924                     torSlide.SetRange(0,3600)
    11925                     torSlide.SetValue(int(torsion[0]*10.))
     11999                    torSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL,minValue=0,maxVaue=3600,value=int(torsion[0]*10.))
    1192612000                    torSlide.Bind(wx.EVT_SLIDER, OnTorSlide)
    1192712001                    TorSizer.Add(torSlide,1,wx.EXPAND|wx.RIGHT)
Note: See TracChangeset for help on using the changeset viewer.