Changeset 2401 for trunk/GSASIIphsGUI.py


Ignore:
Timestamp:
Jul 29, 2016 3:52:31 PM (6 years ago)
Author:
vondreele
Message:

begin adding magnetism; change space group fortran code
modify tutorial menus

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r2311 r2401  
    219219        if 'AtomPtrs' not in generalData:
    220220            generalData['AtomPtrs'] = [3,1,7,9]
    221             if generalData['Type'] =='macromolecular':
     221            if generalData['Type'] == 'macromolecular':
    222222                generalData['AtomPtrs'] = [6,4,10,12]
    223         if generalData['Type'] in ['modulated','magnetic',]:
     223            elif generalData['Type'] == 'magnetic':
     224                generalData['AtomPtrs'] = [3,1,10,12]
     225        if generalData['Type'] in ['modulated',]:
     226            generalData['Modulated'] = True
     227            generalData['Type'] = 'nuclear'
    224228            if 'Super' not in generalData:
    225229                generalData['Super'] = 1
     
    229233                generalData['4DmapData'] = mapDefault.copy()
    230234                generalData['4DmapData'].update({'MapType':'Fobs'})
     235        if 'Modulated' not in generalData:
     236            generalData['Modulated'] = False
    231237        if 'HydIds' not in generalData:
    232238            generalData['HydIds'] = {}
     
    316322        if General.GetSizer():
    317323            General.GetSizer().Clear(True)
    318         phaseTypes = ['nuclear','modulated','magnetic','macromolecular','faulted']
     324        phaseTypes = ['nuclear','magnetic','macromolecular','faulted']
    319325        SetupGeneral()
    320326        generalData = data['General']
     
    369375                    generalData['Type'] = TypeTxt.GetValue()
    370376                    pages = [G2frame.dataDisplay.GetPageText(PageNum) for PageNum in range(G2frame.dataDisplay.GetPageCount())]
    371                     if generalData['Type'] in ['modulated','magnetic']:
    372                         if 'SuperSg' not in generalData:
    373                             generalData['SuperSg'] = SetDefaultSSsymbol()
    374                         generalData['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1]
    375                         if 'MC/SA' in pages:
    376                             pass
    377 #                            G2frame.dataDisplay.DeletePage(pages.index('MC/SA'))   #this crashes!!
    378                         if 'Layers' in pages:
    379                             pass
    380 #                            G2frame.dataDisplay.DeletePage(pages.index('Layers'))
    381                         if 'Wave Data' not in pages:
    382                             G2frame.waveData = wx.ScrolledWindow(G2frame.dataDisplay)
    383                             G2frame.dataDisplay.InsertPage(3,G2frame.waveData,'Wave Data')
    384                             Id = wx.NewId()
    385                             TabSelectionIdDict[Id] = 'Wave Data'
    386                         wx.CallAfter(UpdateGeneral)
    387                     elif generalData['Type'] == 'faulted':
     377                    if generalData['Type'] == 'faulted':
    388378                        G2frame.dataFrame.Bind(wx.EVT_MENU, OnLoadDIFFaX, id=G2gd.wxID_LOADDIFFAX)
    389379                        G2frame.dataFrame.Bind(wx.EVT_MENU, OnSimulate, id=G2gd.wxID_LAYERSIMULATE)
     
    445435                    msg = 'Space Group Information'
    446436                    G2gd.SGMessageBox(General,msg,text,table).Show()
    447                 if generalData['Type'] in ['modulated',]:
     437                if generalData['Modulated']:
    448438                    generalData['SuperSg'] = SetDefaultSSsymbol()
    449439                    generalData['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1]
     
    456446                    atom[cx+5] = Mult
    457447                wx.CallAfter(UpdateGeneral)
     448               
     449            def OnModulated(event):
     450                if not len(generalData['AtomTypes']):             #can change only if no atoms!
     451                    pages = [G2frame.dataDisplay.GetPageText(PageNum) for PageNum in range(G2frame.dataDisplay.GetPageCount())]
     452                    if generalData['Type'] in ['nuclear','magnetic']:
     453                        generalData['Modulated'] = modulated.GetValue()
     454                        if generalData['Modulated']:
     455                            if 'SuperSg' not in generalData:
     456                                generalData['SuperSg'] = SetDefaultSSsymbol()
     457                            generalData['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1]
     458                            if 'Super' not in generalData:
     459                                generalData['Super'] = 1
     460                                generalData['SuperVec'] = [[0,0,.1],False,4]
     461                                generalData['SSGData'] = {}
     462                            if '4DmapData' not in generalData:
     463                                generalData['4DmapData'] = mapDefault.copy()
     464                                generalData['4DmapData'].update({'MapType':'Fobs'})
     465                            if 'MC/SA' in pages:
     466                                pass
     467    #                            G2frame.dataDisplay.DeletePage(pages.index('MC/SA'))   #this crashes!!
     468                            if 'Layers' in pages:
     469                                pass
     470    #                            G2frame.dataDisplay.DeletePage(pages.index('Layers'))
     471                            if 'Wave Data' not in pages:
     472                                G2frame.waveData = wx.ScrolledWindow(G2frame.dataDisplay)
     473                                G2frame.dataDisplay.InsertPage(3,G2frame.waveData,'Wave Data')
     474                                Id = wx.NewId()
     475                                TabSelectionIdDict[Id] = 'Wave Data'
     476                        else:
     477                            if 'Wave Data' in pages:
     478                                G2frame.dataDisplay.DeletePage(pages.index('Wave Data'))
     479                        wx.CallAfter(UpdateGeneral)
     480                else:
     481                    G2frame.ErrorDialog('Modulation type change error','Can change modulation only if there are no atoms')
     482                    modulated.SetValue(generalData['Modulated'])               
    458483               
    459484            nameSizer = wx.BoxSizer(wx.HORIZONTAL)
     
    472497            SGTxt.Bind(wx.EVT_TEXT_ENTER,OnSpaceGroup)
    473498            nameSizer.Add(SGTxt,0,WACV)
     499            if generalData['Type'] in ['nuclear','magnetic']:
     500                modulated = wx.CheckBox(General,label='Modulated? ')
     501                modulated.SetValue(generalData['Modulated'])
     502                modulated.Bind(wx.EVT_CHECKBOX,OnModulated)
     503                nameSizer.Add(modulated,0,WACV)           
    474504            return nameSizer
    475505           
     
    684714                denSizer.Add(mattTxt,0,WACV)
    685715            return denSizer,denTxt,mattTxt
     716           
     717        def MagSizer():
     718           
     719            def OnSpinOp(event):
     720                Obj = event.GetEventObject()
     721                isym = Indx[Obj.GetId()]
     722                SGData['SGSpin'][isym] = Obj.GetValue()
     723                wx.CallAfter(UpdateGeneral)                               
     724
     725            SGData = generalData['SGData']           
     726            Indx = {}
     727            MagSym = generalData['SGData']['SpGrp'].split()
     728            magSizer = wx.BoxSizer(wx.VERTICAL)
     729            magSizer.Add(wx.StaticText(General,label=' Magnetic spin operator selection:'),0,WACV)
     730            magSizer.Add(wx.StaticText(General,label='NB: UNDER CONSTRUCTION - DO NOT USE'),0,WACV)
     731            if not len(GenSym):
     732                magSizer.Add(wx.StaticText(General,label=' No spin inversion allowed'),0,WACV)
     733                return magSizer
     734            spinSizer = wx.BoxSizer(wx.HORIZONTAL)
     735            spinColor = ['black','red']
     736            for isym,sym in enumerate(GenSym):
     737                spinSizer.Add(wx.StaticText(General,label='%s: '%(sym.strip())),0,WACV)               
     738                spinOp = wx.ComboBox(General,value=SGData['SGSpin'][isym],choices=spinColor,
     739                    style=wx.CB_READONLY|wx.CB_DROPDOWN)               
     740                Indx[spinOp.GetId()] = isym
     741                spinOp.Bind(wx.EVT_COMBOBOX,OnSpinOp)
     742                spinSizer.Add(spinOp,0,WACV)
     743            MagSym = G2spc.MagSGSym(SGData)
     744            spinSizer.Add(wx.StaticText(General,label=' Magnetic space group: '+MagSym),0,WACV)
     745            magSizer.Add(spinSizer)
     746            return magSizer
    686747           
    687748        def PawleySizer():
     
    11881249        G2G.HorizontalLine(mainSizer,General)
    11891250       
    1190         if generalData['Type'] in ['modulated','magnetic',]:
     1251        if generalData['Type'] == 'magnetic':
     1252            GenSym,GenFlg = G2spc.GetGenSym(generalData['SGData'])
     1253            mainSizer.Add(MagSizer())
     1254            G2G.HorizontalLine(mainSizer,General)
     1255
     1256        if generalData['Modulated']:
    11911257            G2frame.dataFrame.GeneralCalc.Enable(G2gd.wxID_SINGLEMCSA,False)
    11921258            G2frame.dataFrame.GeneralCalc.Enable(G2gd.wxID_MULTIMCSA,False)
     
    12271293            G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Phases'),text=phaseName)
    12281294        G2frame.PatternTree.SetItemPyData(sub,newPhase)
    1229 #        G2gd.MovePatternTreeToGrid(G2frame,sub) #bring up new phase General tab
    12301295       
    12311296################################################################################
     
    12471312                if Atoms.GetColLabelValue(c) == 'refine':
    12481313                    Type = generalData['Type']
    1249                     if Type in ['nuclear','macromolecular','modulated','faulted',]:
     1314                    if Type in ['nuclear','macromolecular','faulted',]:
    12501315                        choice = ['F - site fraction','X - coordinates','U - thermal parameters']
    12511316                    elif Type in ['magnetic',]:
     
    13981463                                Atoms.SetCellStyle(r,ci,WHITE,False)
    13991464                    SetupGeneral()
     1465                elif Atoms.GetColLabelValue(c) in ['Mx','My','Mz']:
     1466                    pass
    14001467                elif Atoms.GetColLabelValue(c) == 'I/A':            #note use of text color to make it vanish!
    14011468                    if atomData[r][c] == 'I':
     
    16261693                wg.GRID_VALUE_CHOICE+AAchoice,
    16271694                wg.GRID_VALUE_STRING] + Types
     1695        elif generalData['Type'] == 'magnetic':
     1696            colLabels = colLabels[:7]+['Mx','My','Mz']+colLabels[7:]
     1697            Types = Types[:7]+3*[wg.GRID_VALUE_FLOAT+':10,4',]+Types[7:]
    16281698        SGData = data['General']['SGData']
    16291699        G2frame.dataFrame.SetStatusText('')
     
    16681738        Sytsym,Mult = G2spc.SytSym([x,y,z],SGData)
    16691739        if generalData['Type'] == 'macromolecular':
    1670             atomData.append([0,Name,'',Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0,atId])
     1740            atomData.append([0,Name,'',Name,El,'',x,y,z,1.,Sytsym,Mult,'I',0.10,0,0,0,0,0,0,atId])
    16711741        elif generalData['Type'] in ['nuclear','faulted',]:
    1672             atomData.append([Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
    1673         elif generalData['Type'] in ['modulated','magnetic',]:
    1674             atomData.append([Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId,[],[],
    1675                 {'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}])
     1742            if generalData['Modulated']:
     1743                atomData.append([Name,El,'',x,y,z,1.,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId,[],[],
     1744                    {'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}])
     1745            else:
     1746                atomData.append([Name,El,'',x,y,z,1.,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
     1747        elif generalData['Type'] == 'magnetic':
     1748            if generalData['Modulated']:
     1749                atomData.append([Name,El,'',x,y,z,1.,0.,0.,0.,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId,[],[],
     1750                    {'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}])
     1751            else:
     1752                atomData.append([Name,El,'',x,y,z,1.,0.,0.,0.,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
     1753           
    16761754        SetupGeneral()
    16771755        data['Drawing']['Atoms'] = []
     
    18581936        generalData = data['General']
    18591937        SGData = generalData['SGData']
    1860         if generalData['Type'] in ['nuclear','modulated','faulted',]:
     1938        if generalData['Type'] in ['nuclear','faulted',]:
    18611939            if oldatom:
    18621940                opr = oldatom[5]
     
    18711949                    ['',]+[[255,255,255],]+atom[9:]+[[],[]]][0]
    18721950            ct,cs = [1,8]         #type & color
     1951        elif  generalData['Type'] == 'magnetic':
     1952            atomInfo = [atom[:2]+atom[3:6]+atom[7:10]+['1',]+['vdW balls',]+
     1953                ['',]+[[255,255,255],]+atom[12:]+[[],[]]][0]
     1954            ct,cs = [1,11]         #type & color
    18731955        elif generalData['Type'] == 'macromolecular':
    18741956            try:
     
    18941976            atomData.insert(indx,[0,Name,'',Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0,atId])
    18951977        elif generalData['Type'] in ['nuclear','faulted',]:
    1896             atomData.insert(indx,[Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
    1897         elif generalData['Type'] in ['modulated','magnetic']:
    1898             atomData.insert(indx,[Name,El,'',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,atId,[],[],
    1899                 {'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}])
    1900         SetupGeneral()
     1978            if generalData['Modulated']:
     1979                atomData.insert(indx,[Name,El,'',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,atId,[],[],
     1980                    {'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}])
     1981            else:
     1982                atomData.insert(indx,[Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
     1983            SetupGeneral()
    19011984        data['Drawing']['Atoms'] = []
    19021985        UpdateDrawAtoms()
     
    35933676            drawingData['showRigidBodies'] = True
    35943677        cx,ct,cs,ci = [0,0,0,0]
    3595         if generalData['Type'] in ['nuclear','modulated','faulted',]:
     3678        if generalData['Type'] in ['nuclear','faulted',]:
    35963679            cx,ct,cs,ci = [2,1,6,17]         #x, type, style & index
    35973680        elif generalData['Type'] == 'macromolecular':
    35983681            cx,ct,cs,ci = [5,4,9,20]         #x, type, style & index
    35993682        elif generalData['Type'] == 'magnetic':
    3600             cx,ct,cs,ci = [2,1,6,20]         #x, type, style & index
    3601 #        elif generalData['Type'] == 'modulated':
    3602 #           ?????   for future
     3683            cx,ct,cs,ci = [2,1,9,20]         #x, type, style & index
    36033684        drawingData['atomPtrs'] = [cx,ct,cs,ci]
    36043685        if not drawingData.get('Atoms'):
     
    38673948            labelChoice = [' ','type','name','number','residue','1-letter','chain']
    38683949            Types[9] = wg.GRID_VALUE_CHOICE+": ,type,name,number,residue,1-letter,chain"
     3950        elif generalData['Type'] == 'magnetic':
     3951            colLabels = colLabels[:5]+['Mx','My','Mz']+colLabels[5:]
     3952            Types = Types[:5]+3*[wg.GRID_VALUE_FLOAT+':10,4',]+Types[5:]
    38693953        table = []
    38703954        rowLabels = []
     
    67406824            rowLabels = []
    67416825            for i in range(len(PawleyPeaks)): rowLabels.append(str(i))
    6742             if generalData['Type'] in ['modulated','magnetic',]:
     6826            if generalData['Modulated']:
    67436827                colLabels = ['h','k','l','m','mul','d','refine','Fsq(hkl)','sig(Fsq)']
    67446828                Types = 5*[wg.GRID_VALUE_LONG,]+[wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,]+ \
     
    67716855        PawleyPeaks = []
    67726856        HKLd = np.array(G2lat.GenHLaue(dmin,SGData,A))
    6773         if generalData['Type'] in ['modulated','magnetic',]:
     6857        if generalData['Modulated']:
    67746858            Vec,x,maxH = generalData['SuperVec']
    67756859            SSGData = G2spc.SSpcGroup(SGData,generalData['SuperSg'])[1]
     
    68106894        generalData = data['General']
    68116895        im = 0
    6812         if generalData['Type'] in ['modulated','magnetic',]:
     6896        if generalData['Modulated']:
    68136897            im = 1
    68146898        HistoNames = filter(lambda a:Histograms[a]['Use']==True,Histograms.keys())
     
    68686952            PatternId,'Reflection Lists'))[PhaseName]['RefList']
    68696953        im = 0
    6870         if data['General']['Type'] in ['modulated','magnetic',]:
     6954        if data['General']['Modulated']:
    68716955            im = 1
    68726956        Inv = data['General']['SGData']['SGInv']
     
    70967180            pgbar.Destroy()
    70977181        else:
    7098             if generalData['Type'] in ['modulated',]:
     7182            if generalData['Modulated']:
    70997183                dim = '4D '
    71007184                G2mth.Fourier4DMap(data,ReflData)
     
    73547438            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.LayerData)
    73557439            UpdateLayerData()
    7356         elif text == 'Wave Data' and data['General']['Type'] in ['modulated','magnetic']:
     7440        elif text == 'Wave Data' and data['General']['Modulated']:
    73577441            G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.WavesData)
    73587442            UpdateWavesData()
     
    74357519            G2frame.dataFrame.Bind(wx.EVT_MENU, OnReImport, id=id)
    74367520        # Wave Data
    7437         if data['General']['Type'] in ['modulated','magnetic']:
     7521        if data['General']['Modulated']:
    74387522            FillSelectPageMenu(TabSelectionIdDict, G2frame.dataFrame.WavesData)
    74397523            G2frame.dataFrame.Bind(wx.EVT_MENU, OnWaveVary, id=G2gd.wxID_WAVEVARY)
     
    75117595    if 'dict' in str(type(data['MCSA']['Results'])):
    75127596        data['MCSA']['Results'] = []
     7597    if 'Modulated' not in data['General']:
     7598        data['General']['Modulated'] = False
     7599    if 'modulated' in data['General']['Type']:
     7600        data['General']['Modulated'] = True
     7601        data['General']['Type'] = 'nuclear'
     7602       
    75137603#end patch   
    75147604
     
    75367626    G2frame.dataDisplay.AddPage(Atoms,'Atoms')
    75377627    Pages.append('Atoms')
    7538     if data['General']['Type'] in ['modulated','magnetic']:
     7628    if data['General']['Modulated']:
    75397629        G2frame.waveData = wx.ScrolledWindow(G2frame.dataDisplay)
    75407630        G2frame.dataDisplay.AddPage(G2frame.waveData,'Wave Data')
     
    75517641    G2frame.dataDisplay.AddPage(drawAtoms,'Draw Atoms')
    75527642    Pages.append('Draw Atoms')
    7553     if data['General']['Type'] not in ['modulated','magnetic','faulted',]:
     7643    if data['General']['Type'] not in ['faulted',] and not data['General']['Modulated']:
    75547644        RigidBodies = wx.ScrolledWindow(G2frame.dataDisplay)
    75557645        G2frame.dataDisplay.AddPage(RigidBodies,'RB Models')
     
    75597649    G2frame.dataDisplay.AddPage(MapPeaks,'Map peaks')
    75607650    Pages.append('Map peaks')
    7561     if data['General']['Type'] not in ['modulated','magnetic','faulted',]:
     7651    if data['General']['Type'] not in ['faulted',] and not data['General']['Modulated']:
    75627652        G2frame.MCSA = wx.ScrolledWindow(G2frame.dataDisplay)
    75637653        G2frame.dataDisplay.AddPage(G2frame.MCSA,'MC/SA')
Note: See TracChangeset for help on using the changeset viewer.