Changeset 5137


Ignore:
Timestamp:
Jan 13, 2022 10:57:49 AM (7 months ago)
Author:
vondreele
Message:

fix to constraint delete function - order of delete list must be reversed before deleting items - G2constrGUI
various documentation changes & additions
refine flags in ISODISTORT display = vary flags in Constraints display; can be set/cleared either place
fix errors in PrintISOmodes in G2strIO - now shows normalized values & esds that match those in ISODISTORT display

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIconstrGUI.py

    r5118 r5137  
    12661266            else:
    12671267                constSizer.Add((-1,-1))
    1268             constSizer.Add(wx.StaticText(panel,wx.ID_ANY,typeString),
    1269                            0,WACV|wx.ALIGN_CENTER|wx.RIGHT|wx.LEFT,3)
     1268            constSizer.Add(wx.StaticText(panel,wx.ID_ANY,typeString),0,WACV|wx.ALIGN_CENTER|wx.RIGHT|wx.LEFT,3)
    12701269            #if badVar: eqString[-1] += ' -- Error: variable removed'
    12711270            #if note: eqString[-1] += '  (' + note + ')'
     
    12971296        'Delete selected constraints'
    12981297        sel = G2frame.constr.GetSelection()
    1299         delList = []
     1298        selList = event.GetEventObject().checkboxList
     1299        selList.reverse()
    13001300        for obj,Id,name in event.GetEventObject().checkboxList:
    13011301            if obj.GetValue(): del data[name][Id]
     
    13181318            lbl = 'Enter value for each term in constraint; sum = new variable'
    13191319            dlg = ConstraintDialog(G2frame,constType,lbl,items,
    1320                                    varname=varname,varyflag=data[name][Id][-2])
     1320                varname=varname,varyflag=data[name][Id][-2])
    13211321        elif data[name][Id][-1] == 'c':
    13221322            items = data[name][Id][:-3]+[
     
    38573857            else:
    38583858                subSizer2.Add((-1,-1))
    3859             subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,str(lbl)))
    3860             subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,str(G2var)))
     3859            subSizer1.Add(wx.StaticText(panel1,label=str(lbl)))
     3860            subSizer1.Add(wx.StaticText(panel1,label=str(G2var)))
    38613861            try:
    38623862                value = G2mth.ValEsd(xyz,xyzsig)
    38633863            except TypeError:
    38643864                value = str(xyz)           
    3865             subSizer1.Add(wx.StaticText(panel1,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
    3866 
    3867             subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,str(var)))
    3868             subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,str(G2mode)))
     3865            subSizer1.Add(wx.StaticText(panel1,label=value),0,wx.ALIGN_RIGHT)
     3866
     3867            subSizer2.Add(wx.StaticText(panel2,label=str(var)))
     3868            subSizer2.Add(wx.StaticText(panel2,label=str(G2mode)))
    38693869            try:
    3870                 value = G2mth.ValEsd(mval,msig)
     3870                # value = G2mth.ValEsd(mval,msig)
     3871                value = '%.5f'%(mval/2.)      #why /2.0
    38713872            except TypeError:
    38723873                value = str(mval)
    3873             subSizer2.Add(wx.StaticText(panel2,wx.ID_ANY,value),0,wx.ALIGN_RIGHT)
     3874            subSizer2.Add(wx.StaticText(panel2,label=value),0,wx.ALIGN_RIGHT)
    38743875    # ISODISTORT occupancy modes
    38753876    if 'G2OccVarList' in ISO:
  • trunk/GSASIImath.py

    r5130 r5137  
    21712171
    21722172def ApplyModeDisp(data):
    2173     ''' Applies ISODISTORT mode displacements to drawing atoms.
    2174     This changes the contents of the Draw Atoms positions but not
     2173    ''' Applies ISODISTORT mode displacements to atom lists.
     2174    This changes the contents of the Draw Atoms positions and
    21752175    the Atoms positions.
    21762176
  • trunk/GSASIIobj.py

    r5130 r5137  
    262262                                the plot. Second item list of previous & current
    263263                                atom number viewed (may be [0,0])
     264ISODISTORT      \\              (dict) contains controls for running ISODISTORT and results from it
     265\\           ISOmethod          (int) ISODISTORT method (currently 1 or 4; 2 & 3 not implemented in GSAS-II)
     266\\           ParentCIF          (str) parent cif file name for ISODISTORT method 4
     267\\           ChildCIF           (str) child cif file name for ISODISTORT method 4
     268\\           SGselect           (dict) selection list for lattice types in radio result from ISODISTORT method 1
     269\\           selection          (int) chosen selection from radio
     270\\           radio              (list) results from ISODISTORT method 1
     271\\           ChildMatrix        (3x3 array) transformation matrix for method 3 (not currently used)
     272\\           ChildSprGp         (str) child space group for method 3 (not currently used)
     273\\           ChildCell          (str) cell ordering for nonstandard orthorhombic ChildSprGrp in method 3 (not currently used)
     274\\           G2ModeList         (list) ISODISTORT mode names
     275\\           modeDispl          (list) distortion mode values; refinable parameters
     276\\           ISOmodeDispl       (list) distortion mode values as determined in method 4 by ISODISTORT
     277\\           NormList           (list) ISODISTORT normalization values; to convert mode value to fractional coordinate dsplacement
     278\\           G2parentCoords     (list) full set of parent structure coordinates transformed to child structure; starting basis for mode displacements
     279\\           G2VarList          (list)
     280\\           IsoVarList         (list)
     281\\           G2coordOffset      (list) only adjustible set of parent structure coordinates
     282\\           G2OccVarList       (list)
     283\\           Var2ModeMatrix     (array) atom variable to distortion mode transformation
     284\\           Mode2VarMatrix     (array) distortion mode to atom variable transformation
     285\\           rundata            (dict) saved input information for use by ISODISTORT method 1
     286
    264287RBModels        \\               Rigid body assignments (note Rigid body definitions
    265288                                are stored in their own main top-level tree entry.)
    266 RMC             \\               (dict) RMCProfile & rmcfull controls
     289RMC             \\               (dict) RMCProfile, PDFfit & fullrmc controls
    267290Pawley ref      \\               (list) Pawley reflections
    268291Histograms      \\               (dict of dicts) The key for the outer dict is
  • trunk/GSASIIphsGUI.py

    r5130 r5137  
    71027102                laueCk = wx.CheckBox(ISODIST,label=name)
    71037103                Indx[laueCk.GetId()] = name
    7104                 laueCk.SetValue(data['ISODISTORT']['SGselect'][name[:4]])
     7104                laueCk.SetValue(ISOdata['SGselect'][name[:4]])
    71057105                laueCk.Bind(wx.EVT_CHECKBOX,OnLaue)
    71067106                littleSizer.Add(laueCk,0,WACV)
     
    71847184            def OnRefDispl(event):
    71857185                Obj = event.GetEventObject()
    7186                 idsp = Indx[Obj.GetId()][0]
    7187                 ISOdata['modeDisplFlag'][idsp] = not ISOdata['modeDisplFlag'][idsp]
     7186                idsp,item = Indx[Obj.GetId()]
     7187                item[-2] = not item[-2]
    71887188               
    71897189            def OnReset(event):
    7190                 '''Reset all distortion mode values to zero'''
     7190                '''Reset all distortion mode values to initial values'''
    71917191                ISOdata['modeDispl'] = copy.deepcopy(ISOdata['ISOmodeDispl'])
    71927192                err = G2mth.ApplyModeDisp(data)
     
    71977197                UpdateISODISTORT()
    71987198           
     7199            ConstrData = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,G2frame.root, 'Constraints'))
     7200            pId = data['ranId']
    71997201            mainSizer = wx.BoxSizer(wx.VERTICAL)
    72007202            topSizer = wx.BoxSizer(wx.VERTICAL)   
     
    72107212            slideSizer.AddGrowableCol(2,1)
    72117213            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)
     7214            idsp = 0
     7215            for item in ConstrData['Phase']:
     7216                if pId != item[-3].phase:
     7217                    continue
     7218                slideSizer.Add(wx.StaticText(ISODIST,label=item[-3].name),0,WACV)
     7219                dispVal = G2G.ValidatedTxtCtrl(ISODIST,modeDisp,idsp,xmin=-2.,xmax=2.,size=(75,20),OnLeave=OnDispVal)
    72157220                slideSizer.Add(dispVal,0,WACV)
    72167221                displ = wx.Slider(ISODIST,style=wx.SL_HORIZONTAL,minValue=-2000,maxValue=2000,value=int(modeDisp[idsp]*1000))
     
    72207225                slideSizer.Add(displ,1,wx.EXPAND|wx.RIGHT)
    72217226                refDispl = wx.CheckBox(ISODIST,label=' Refine?')
    7222                 refDispl.SetValue(ISOdata['modeDisplFlag'][idsp])
     7227                refDispl.SetValue(item[-2])
    72237228                refDispl.Bind(wx.EVT_CHECKBOX,OnRefDispl)
    7224                 Indx[refDispl.GetId()] = [idsp]
     7229                Indx[refDispl.GetId()] = [idsp,item]
    72257230                slideSizer.Add(refDispl,0,WACV)
     7231                idsp += 1
    72267232            slideSizer.SetMinSize(wx.Size(350,10))
    72277233            topSizer.Add(slideSizer)
     
    72477253        if 'G2ModeList' in ISOdata:      #invoked only if phase is from a ISODISTORT cif file & thus contains distortion mode constraints
    72487254           
    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            
     7255# #patch
     7256#             if 'modeDispl' not in ISOdata:
     7257#                 ISOdata['modeDispl'] = np.zeros(len(ISOdata['G2ModeList']))
     7258# #end patch
    72567259            displayModes()
    72577260            return
  • trunk/GSASIIstrIO.py

    r5114 r5137  
    314314        data = Phases[phase]
    315315        ISO = data['ISODISTORT']
     316        atNames = [atom[0] for atom in data['Atoms']]
     317                       
    316318        if 'G2VarList' in ISO:
    317319            deltaList = []
     
    319321                dvar = gv.varname()
    320322                var = dvar.replace('::dA','::A')
    321                 albl = Ilbl[:Ilbl.rfind('_')]
    322                 pval = 0
    323                 #v = Ilbl[Ilbl.rfind('_')+1:]
    324                 #pval = ISO['ParentStructure'][albl][['dx','dy','dz'].index(v)]
     323                atnum = atNames.index(Ilbl[:Ilbl.rfind('_')])
     324                v = Ilbl[Ilbl.rfind('_')+1:]
     325                pval = ISO['G2parentCoords'][atnum][['dx','dy','dz'].index(v)]
    325326                if var in parmDict:
    326327                    cval = parmDict[var]
     
    331332            modeVals = np.inner(ISO['Var2ModeMatrix'],deltaList)
    332333           
    333         if 'G2OccVarList' in ISO:
     334            pFile.write('\n ISODISTORT Displacive Modes for phase {}\n'.format(data['General'].get('Name','')))
     335            l = str(max([len(i) for i in ISO['IsoModeList']])+3)
     336            fmt = '  {:'+l+'}{}'
     337            for varid,[var,val,norm,G2mode] in enumerate(zip(
     338                    ISO['IsoModeList'],modeVals,ISO['NormList'],ISO['G2ModeList'] )):
     339                try:
     340                    ISO['modeDispl'][varid]  = val/norm
     341                    value = G2py3.FormatSigFigs(val/norm)
     342                    item = str(G2mode).replace('::','::nv-')
     343                    item1 = ISO['G2VarList'][varid].varname()      #case where constraint has only single term
     344                    if item in sigDict:
     345                        value = G2mth.ValEsd(val/norm,sigDict[item]/norm)
     346                    elif item1 in sigDict:
     347                        value = G2mth.ValEsd(val/norm,sigDict[item1]/norm)+' *not in refined constraints'
     348                except TypeError:
     349                    value = '?'
     350                pFile.write(fmt.format(var,value)+'\n')
     351               
     352        if 'G2OccVarList' in ISO:       #untested - probably wrong
    334353            deltaOccList = []
    335354            for gv,Ilbl in zip(ISO['G2OccVarList'],ISO['OccVarList']):
     
    345364            modeOccVals = np.inner(ISO['Var2OccMatrix'],deltaOccList)
    346365           
    347         if 'G2VarList' in ISO:
    348             pFile.write('\n ISODISTORT Displacive Modes for phase {}\n'.format(data['General'].get('Name','')))
    349             l = str(max([len(i) for i in ISO['IsoModeList']])+3)
    350             fmt = '  {:'+l+'}{}'
    351             for var,val,norm,G2mode in zip(
    352                     ISO['IsoModeList'],modeVals,ISO['NormList'],ISO['G2ModeList'] ):
    353                 try:
    354                     value = G2py3.FormatSigFigs(val/norm)
    355                     if str(G2mode) in sigDict:
    356                         value = G2mth.ValEsd(val/norm,sigDict[str(G2mode)]/norm)
    357                 except TypeError:
    358                     value = '?'
    359                 pFile.write(fmt.format(var,value)+'\n')
    360                
    361         if 'G2OccVarList' in ISO:
    362366            pFile.write('\n ISODISTORT Occupancy Modes for phase {}\n'.format(data['General'].get('Name','')))
    363367            l = str(max([len(i) for i in ISO['OccModeList']])+3)
Note: See TracChangeset for help on using the changeset viewer.