Changeset 4659 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Nov 21, 2020 2:15:49 PM (13 months ago)
Author:
toby
Message:

extensive Origin 1->2 updates; merge SetupGeneral? into a single routine in G2Elem; read sym ops from CIF; fix sites sym/mult after cood xform

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r4654 r4659  
    8080BLACK = wx.Colour(0,0,0)
    8181WACV = wx.ALIGN_CENTER_VERTICAL
    82 mapDefault = {'MapType':'','RefList':'','GridStep':0.25,'Show bonds':True,
    83                 'rho':[],'rhoMax':0.,'mapSize':10.0,'cutOff':50.,'Flip':False}
     82mapDefault = G2elem.mapDefault
    8483TabSelectionIdDict = {}
    8584# trig functions in degrees
     
    16151614
    16161615    def SetupGeneral():
    1617         generalData = data['General']
    1618         atomData = data['Atoms']
    1619         generalData['AtomTypes'] = []
    1620         generalData['Isotopes'] = {}
    1621 # various patches
    1622         if 'Isotope' not in generalData:
    1623             generalData['Isotope'] = {}
    1624         if 'Data plot type' not in generalData:
    1625             generalData['Data plot type'] = 'Mustrain'
    1626         if 'POhkl' not in generalData:
    1627             generalData['POhkl'] = [0,0,1]
    1628         if 'Map' not in generalData:
    1629             generalData['Map'] = mapDefault.copy()
    1630         if 'Flip' not in generalData:
    1631             generalData['Flip'] = {'RefList':'','GridStep':0.25,'Norm element':'None',
    1632                 'k-factor':0.1,'k-Max':20.,}
    1633         if 'testHKL' not in generalData['Flip']:
    1634             generalData['Flip']['testHKL'] = [[0,0,2],[2,0,0],[1,1,1],[0,2,0],[1,2,3]]
    1635         if 'doPawley' not in generalData:
    1636             generalData['doPawley'] = False     #ToDo: change to ''
    1637         if 'Pawley dmin' not in generalData:
    1638             generalData['Pawley dmin'] = 1.0
    1639         if 'Pawley dmax' not in generalData:
    1640             generalData['Pawley dmax'] = 100.0
    1641         if 'Pawley neg wt' not in generalData:
    1642             generalData['Pawley neg wt'] = 0.0
    1643         if '3Dproj' not in generalData:
    1644             generalData['3Dproj'] = ''
    1645         if 'doDysnomia' not in generalData:
    1646             generalData['doDysnomia'] = False
    1647         if 'Algolrithm' in generalData.get('MCSA controls',{}) or \
    1648             'MCSA controls' not in generalData:
    1649             generalData['MCSA controls'] = {'Data source':'','Annealing':[0.7,0.1,250],
    1650             'dmin':2.8,'Algorithm':'log','fast parms':[0.8,0.6],'log slope':0.9,
    1651             'Cycles':1,'Results':[],'newDmin':True}
    1652         if 'AtomPtrs' not in generalData:
    1653             generalData['AtomPtrs'] = [3,1,7,9]
    1654             if generalData['Type'] == 'macromolecular':
    1655                 generalData['AtomPtrs'] = [6,4,10,12]
    1656             elif generalData['Type'] == 'magnetic':
    1657                 generalData['AtomPtrs'] = [3,1,10,12]
    1658         if generalData['Modulated']:
    1659             if 'Super' not in generalData:
    1660                 generalData['Super'] = 1
    1661                 generalData['SuperVec'] = [[0.,0.,0.],False,1]
    1662                 generalData['SSGData'] = {}
    1663             if '4DmapData' not in generalData:
    1664                 generalData['4DmapData'] = mapDefault.copy()
    1665                 generalData['4DmapData'].update({'MapType':'Fobs'})
    1666             atomData = data['Atoms']
    1667             for atom in atomData:
    1668 #                if 'SS1' not in atom:
    1669 #                    atom += [[],[],{'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}]
    1670                 if isinstance(atom[-1],dict) and 'waveType' in atom[-1]['SS1']:
    1671                     waveType = atom[-1]['SS1']['waveType']
    1672                     for parm in ['Sfrac','Spos','Sadp','Smag']:
    1673                         if len(atom[-1]['SS1'][parm]):
    1674                             wType = 'Fourier'
    1675                             if parm == 'Sfrac':
    1676                                 if 'Crenel' in waveType:
    1677                                     wType = 'Crenel'
    1678                             elif parm == 'Spos':
    1679                                 if not 'Crenel' in waveType:
    1680                                     wType = waveType
    1681                             atom[-1]['SS1'][parm] = [wType,]+list(atom[-1]['SS1'][parm])
    1682                     del atom[-1]['SS1']['waveType']
    1683         else:
    1684             generalData['Super'] = 0
    1685         if 'Modulated' not in generalData:
    1686             generalData['Modulated'] = False
    1687         if 'HydIds' not in generalData:
    1688             generalData['HydIds'] = {}
    1689         if generalData['Type'] == 'magnetic':
    1690             if 'SGGray' not in generalData['SGData']:
    1691                 generalData['SGData']['SGGray'] = False
    1692         if 'Resolution' in generalData['Map']:
    1693             generalData['Map']['GridStep'] = generalData['Map']['Resolution']/2.
    1694             generalData['Flip']['GridStep'] = generalData['Flip']['Resolution']/2.
    1695             del generalData['Map']['Resolution']
    1696             del generalData['Flip']['Resolution']
    1697         if 'Compare' not in generalData:
    1698             generalData['Compare'] = {'Oatoms':'','Tatoms':'',
    1699                     'Tilts':{'Otilts':[],'Ttilts':[]},
    1700                 'Bonds':{'Obonds':[],'Tbonds':[]},'Vects':{'Ovec':[],'Tvec':[]},
    1701                 'dVects':{'Ovec':[],'Tvec':[]},'Sampling':1.0}
    1702         if 'Sampling' not in generalData['Compare']:
    1703             generalData['Compare']['Sampling'] = 1.0
    1704                
    1705 # end of patches
    1706         cx,ct,cs,cia = generalData['AtomPtrs']
    1707         generalData['NoAtoms'] = {}
    1708         generalData['BondRadii'] = []
    1709         generalData['AngleRadii'] = []
    1710         generalData['vdWRadii'] = []
    1711         generalData['AtomMass'] = []
    1712         generalData['Color'] = []
    1713         if generalData['Type'] == 'magnetic':
    1714             generalData['MagDmin'] = generalData.get('MagDmin',1.0)
    1715             landeg = generalData.get('Lande g',[])
    1716         generalData['Mydir'] = G2frame.dirname
    1717         badList = {}
    1718         for iat,atom in enumerate(atomData):
    1719             atom[ct] = atom[ct].lower().capitalize()              #force to standard form
    1720             if generalData['AtomTypes'].count(atom[ct]):
    1721                 generalData['NoAtoms'][atom[ct]] += atom[cx+3]*float(atom[cs+1])
    1722             elif atom[ct] != 'UNK':
    1723                 Info = G2elem.GetAtomInfo(atom[ct])
    1724                 if not Info:
    1725                     if atom[ct] not in badList:
    1726                         badList[atom[ct]] = 0
    1727                     badList[atom[ct]] += 1
    1728                     atom[ct] = 'UNK'
    1729                     continue
    1730                 atom[ct] = Info['Symbol'] # N.B. symbol might be changed by GetAtomInfo
    1731                 generalData['AtomTypes'].append(atom[ct])
    1732                 generalData['Z'] = Info['Z']
    1733                 generalData['Isotopes'][atom[ct]] = Info['Isotopes']
    1734                 generalData['BondRadii'].append(Info['Drad'])
    1735                 generalData['AngleRadii'].append(Info['Arad'])
    1736                 generalData['vdWRadii'].append(Info['Vdrad'])
    1737                 if atom[ct] in generalData['Isotope']:
    1738                     if generalData['Isotope'][atom[ct]] not in generalData['Isotopes'][atom[ct]]:
    1739                         isotope = list(generalData['Isotopes'][atom[ct]].keys())[-1]
    1740                         generalData['Isotope'][atom[ct]] = isotope
    1741                     generalData['AtomMass'].append(Info['Isotopes'][generalData['Isotope'][atom[ct]]]['Mass'])
    1742                 else:
    1743                     generalData['Isotope'][atom[ct]] = 'Nat. Abund.'
    1744                     if 'Nat. Abund.' not in generalData['Isotopes'][atom[ct]]:
    1745                         isotope = list(generalData['Isotopes'][atom[ct]].keys())[-1]
    1746                         generalData['Isotope'][atom[ct]] = isotope
    1747                     generalData['AtomMass'].append(Info['Mass'])
    1748                 generalData['NoAtoms'][atom[ct]] = atom[cx+3]*float(atom[cs+1])
    1749                 generalData['Color'].append(Info['Color'])
    1750                 if generalData['Type'] == 'magnetic':
    1751                     if len(landeg) < len(generalData['AtomTypes']):
    1752                         landeg.append(2.0)
    1753         if generalData['Type'] == 'magnetic':
    1754             generalData['Lande g'] = landeg[:len(generalData['AtomTypes'])]
    1755                        
    1756         if badList:
    1757             msg = 'Warning: element symbol(s) not found:'
    1758             for key in badList:
    1759                 msg += '\n\t' + key
    1760                 if badList[key] > 1:
    1761                     msg += ' (' + str(badList[key]) + ' times)'
     1616        try:
     1617            G2elem.SetupGeneral(data,G2frame.dirname)
     1618        except ValueError as msg:
    17621619            wx.MessageBox(msg,caption='Element symbol error')
    1763         F000X = 0.
    1764         F000N = 0.
    1765         for i,elem in enumerate(generalData['AtomTypes']):
    1766             F000X += generalData['NoAtoms'][elem]*generalData['Z']
    1767             isotope = generalData['Isotope'][elem]
    1768             F000N += generalData['NoAtoms'][elem]*generalData['Isotopes'][elem][isotope]['SL'][0]
    1769         generalData['F000X'] = F000X
    1770         generalData['F000N'] = F000N
    1771         generalData['Mass'] = G2mth.getMass(generalData)
    1772        
    17731620
    17741621################################################################################
     
    30052852                        SGData['SGSpin'] = G2spc.GetSGSpin(SGData,SGData['MagSpGrp'])
    30062853                else:
    3007                     dlg.Destroy()
    30082854                    return
    30092855            finally:
     
    30192865                    for i in [0,1,2]:
    30202866                        atom[cx+i] += T[i]
     2867                    SytSym,Mul,Nop,dupDir = G2spc.SytSym(atom[3:6],SGData) # update symmetry & mult
     2868                    atom[cs:cs+2] = SytSym,Mul
    30212869                data['Drawing'] = []
    3022                 break
     2870                #force redraw of page
     2871                sub = G2frame.GPXtree.GetSelection()
     2872                G2frame.GPXtree.SelectItem(G2frame.GPXtree.root)
     2873                wx.CallAfter(G2frame.GPXtree.SelectItem,sub)
     2874                return
    30232875            else:
    30242876                phaseName = newPhase['General']['Name']
Note: See TracChangeset for help on using the changeset viewer.