Changeset 3686 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Oct 22, 2018 8:58:53 AM (3 years ago)
Author:
vondreele
Message:

install new use of Bilbao site - call SUBGROUPS for making subgroup phase selections from parent structure
some modifications to mag subgroup stuff to accommodate

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r3685 r3686  
    31373137        if pNum is None: return
    31383138        Phase = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,pId,Phases[pNum]))
    3139         Phase['magPhases'] = G2frame.GPXtree.GetItemText(G2frame.PatternId)    #use as reference for recovering possible mag phases
     3139        Phase['magPhases'] = G2frame.GPXtree.GetItemText(G2frame.PatternId)    #use as reference for recovering possible phases
    31403140        Cell = Phase['General']['Cell']
    31413141        SGData = Phase['General']['SGData']
     
    31533153        if 'R' in controls[5]: controls[5] = 'R3-H'
    31543154        controls[6:13] = Cell[1:8]
     3155        cx,ct,cs,cia = Phase['General']['AtomPtrs']
     3156        controls[15] = [atom[:cx+3] for atom in Phase['Atoms']]
    31553157        if 'N' in Inst['Type'][0]:
    3156             testAtoms = []
    3157             cx,ct,cs,cia = Phase['General']['AtomPtrs']
    3158             Atoms = Phase['Atoms']
    3159             for atom in Atoms:
    3160                 if len(G2elem.GetMFtable([atom[ct],],[2.0,])):
    3161                     testAtoms.append(atom[:cx+3])
    3162             controls[15] = testAtoms
    31633158            if not ssopt.get('Use',False):
    31643159                G2frame.dataWindow.RunSubGroupsMag.Enable(True)
     
    34203415                phase = magcells[r]
    34213416                mSGData = phase['SGData']
    3422                 msg = 'Magnetic space group information for '+phase['Name']
    34233417                text,table = G2spc.SGPrint(mSGData,AddInv=True)
    3424                 text[0] = ' Magnetic Space Group: '+mSGData['MagSpGrp']
    3425                 text[3] = ' The magnetic lattice point group is '+mSGData['MagPtGp']
    3426                 OprNames,SpnFlp = G2spc.GenMagOps(mSGData)
    3427                 G2G.SGMagSpinBox(G2frame.dataWindow,msg,text,table,mSGData['SGCen'],OprNames,
    3428                     mSGData['SpnFlp'],False).Show()
     3418                if 'magAtoms' in phase:
     3419                    msg = 'Magnetic space group information for '+phase['Name']
     3420                    text[0] = ' Magnetic Space Group: '+mSGData['MagSpGrp']
     3421                    text[3] = ' The magnetic lattice point group is '+mSGData['MagPtGp']
     3422                    OprNames,SpnFlp = G2spc.GenMagOps(mSGData)
     3423                    G2G.SGMagSpinBox(G2frame.dataWindow,msg,text,table,mSGData['SGCen'],OprNames,
     3424                        mSGData['SpnFlp'],False).Show()
     3425                else:
     3426                    msg = 'Space Group Information'
     3427                    G2G.SGMessageBox(G2frame.dataWindow,msg,text,table).Show()
    34293428            elif c == 1:
    34303429                for i in range(len(magcells)):
     
    34483447            elif c ==3:
    34493448                r = event.GetRow()
    3450                 allmom = magcells[0].get('allmom',False)
    3451                 magAtms = magcells[0].get('magAtms','')
    34523449                maxequiv = magcells[0].get('maxequiv',100)
    34533450                phase = magcells[r]
     
    34553452                Uvec = phase['Uvec']
    34563453                Trans = phase['Trans']
    3457                 mAtoms = TestMagAtoms(phase,magAtms,SGData,Uvec,Trans,allmom,maxequiv)
     3454                ifMag = False
     3455                if 'magAtms' in magcells[r]:
     3456                    ifMag = True
     3457                    allmom = magcells[r].get('allmom',False)
     3458                    magAtms = magcells[r].get('magAtms','')
     3459                    mAtoms = TestMagAtoms(phase,magAtms,SGData,Uvec,Trans,allmom,maxequiv)
     3460                else:
     3461                    mAtoms = TestAtoms(phase,controls[15],SGData,Uvec,Trans,maxequiv)
    34583462                Atms = []
    34593463                AtCods = []
     
    34623466                    atom[0] += '_%d'%ia
    34633467                    SytSym,Mul,Nop,dupDir = G2spc.SytSym(atom[2:5],mSGData)
    3464                     CSI = G2spc.GetCSpqinel(mSGData['SpnFlp'],dupDir)
    34653468                    Atms.append(atom[:2]+['',]+atom[2:5])
    34663469                    AtCods.append('1')
    3467                     MagSytSym = G2spc.MagSytSym(SytSym,dupDir,mSGData)
    3468                     atMxyz.append([MagSytSym,CSI[0]])
    3469                 G2phsG.UseMagAtomDialog(G2frame,magcells[r]['Name'],Atms,AtCods,atMxyz,ifOK=True).ShowModal()
     3470                    if 'magAtms' in magcells[r]:
     3471                        MagSytSym = G2spc.MagSytSym(SytSym,dupDir,mSGData)
     3472                        CSI = G2spc.GetCSpqinel(mSGData['SpnFlp'],dupDir)
     3473                        atMxyz.append([MagSytSym,CSI[0]])
     3474                    else:
     3475                        CSI = G2spc.GetCSxinel(SytSym)
     3476                        atMxyz.append([SytSym,CSI[0]])
     3477                G2phsG.UseMagAtomDialog(G2frame,magcells[r]['Name'],Atms,AtCods,atMxyz,ifMag=ifMag,ifOK=True).ShowModal()
    34703478            data = [controls,bravais,cells,dminx,ssopt,magcells]
    34713479            G2frame.GPXtree.SetItemPyData(UnitCellsId,data)
     
    36313639        return uAtms
    36323640
     3641    def TestAtoms(phase,magAtms,SGData,Uvec,Trans,maxequiv=100):
     3642        phase['Keep'] = False
     3643        if not magAtms:
     3644            phase['Keep'] = True
     3645            return []
     3646        invTrans = nl.inv(Trans)
     3647        atCodes = []
     3648        Phase = {'General':{'AtomPtrs':[2,1],'SGData':copy.deepcopy(phase['SGData'])},'Atoms':[]}
     3649        for matm in magAtms:
     3650            XYZ = G2spc.GenAtom(matm[3:6],SGData,False,Move=True)
     3651            xyzs = [xyz[0] for xyz in XYZ]
     3652            atCodes += len(xyzs)*['1',]
     3653            xyzs,atCodes = G2lat.ExpandCell(xyzs,atCodes,0,Trans)
     3654            for ix,x in enumerate(xyzs):
     3655                xyz = G2lat.TransformXYZ(x-Uvec,invTrans.T,np.zeros(3))%1.
     3656                Phase['Atoms'].append(matm[:2]+list(xyz))
     3657        uAtms = G2lat.GetUnique(Phase,atCodes)[0]
     3658        natm = len(uAtms)
     3659        if natm > maxequiv: #too many allowed atoms found
     3660            phase['Keep'] = False
     3661        return uAtms
     3662
    36333663    def OnRunSubs(event):
    3634 #        import SUBGROUPS as kSUB
     3664        import kSUBGROUPSMAG as kMAG
    36353665        G2frame.dataWindow.RunSubGroupsMag.Enable(False)
    36363666        pUCid = G2gd.GetGPXtreeItemId(G2frame,G2frame.PatternId, 'Unit Cells List')
    36373667        controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(pUCid)
    36383668        E,SGData = G2spc.SpcGroup(controls[13])
     3669        atoms = list(set([atom[1] for atom in controls[15]]))       
    36393670        Kx = [' ','0','1/2','-1/2','1/3','-1/3','2/3','1']
    36403671        Ky = [' ','0','1/2','1/3','2/3','1']
     
    36433674        dlg = G2G.MultiDataDialog(G2frame,title='SUBGROUPS options',prompts=[' k-vector 1',' k-vector 2',' k-vector 3', \
    36443675            ' Use whole star',' Filter by','preserve axes','max unique'],
    3645             values=kvec+[False,'',True,'',False,100],
     3676            values=kvec+[False,'',True,100],
    36463677            limits=[[Kx[1:],Ky[1:],Kz[1:]],[Kx,Ky,Kz],[Kx,Ky,Kz],[True,False],['',' Landau transition',' Only maximal subgroups',],
    36473678                [True,False],[1,100]],
     
    36493680                    'bool','%d',])
    36503681        if dlg.ShowModal() == wx.ID_OK:
    3651             subcells = []
     3682            magcells = []
    36523683            newVals = dlg.GetValues()
    36533684            kvec[:9] = newVals[0]+newVals[1]+newVals[2]+[' ',]
     
    36743705                    caption='Bilbao SUBGROUPS setup error',style=wx.ICON_EXCLAMATION)
    36753706                return
    3676         print('run Bilbao SUBGROUPS - TBD')
     3707            wx.BeginBusyCursor()
     3708            wx.MessageBox(''' For use of SUBGROUPS, please cite:
     3709      Symmetry-Based Computational Tools for Magnetic Crystallography,
     3710      J.M. Perez-Mato, S.V. Gallego, E.S. Tasci, L. Elcoro, G. de la Flor, and M.I. Aroyo
     3711      Annu. Rev. Mater. Res. 2015. 45,217-48.
     3712      doi: 10.1146/annurev-matsci-070214-021008''',caption='Bilbao SUBGROUPS',style=wx.ICON_INFORMATION)
     3713           
     3714            SUBGROUPS = kMAG.GetNonStdSubgroups(SGData,kvec[:9],star,Landau,maximal)
     3715            wx.EndBusyCursor()
     3716            if SUBGROUPS is None:
     3717                wx.MessageBox('Check your internet connection?',caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION)
     3718                return
     3719            if not SUBGROUPS:
     3720                if Landau:
     3721                    wx.MessageBox('No results from SUBGROUPS, multi k-vectors & Landau not compatible',
     3722                        caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION)
     3723                else:
     3724                    wx.MessageBox('No results from SUBGROUPS, check your propagation vector(s)',
     3725                        caption='Bilbao SUBGROUPS error',style=wx.ICON_EXCLAMATION)
     3726                return
     3727            controls[14] = kvec[:9]
     3728            dlg = wx.ProgressDialog('SUBGROUPS results','Processing '+SUBGROUPS[0][0],len(SUBGROUPS),
     3729                style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME)
     3730           
     3731            for ir,result in enumerate(SUBGROUPS):
     3732                dlg.Update(ir,newmsg='Processing '+result[0])
     3733                numbs = [eval(item+'.') for item in result[1].split()]
     3734                Uvec = np.array(numbs[3::4])
     3735                Trans = np.array([numbs[:3],numbs[4:7],numbs[8:11]]).T         #Bilbao gives transpose
     3736                phase = G2lat.makeBilbaoPhase(result,Uvec,Trans)
     3737                RVT = None
     3738                if keepaxes:
     3739                    RVT = G2lat.FindNonstandard(controls,phase)
     3740                if RVT is not None:
     3741                    result,Uvec,Trans = RVT
     3742                phase = G2lat.makeBilbaoPhase(result,Uvec,Trans)
     3743                phase['Cell'] = G2lat.TransformCell(controls[6:12],Trans)   
     3744                phase['maxequiv'] = maxequiv
     3745                phase['nAtoms'] = len(TestAtoms(phase,controls[15],SGData,Uvec,Trans,maxequiv))
     3746                magcells.append(phase)
     3747            dlg.Destroy()
     3748            magcells[0]['Use'] = True
     3749            SGData = magcells[0]['SGData']
     3750            A = G2lat.cell2A(magcells[0]['Cell'][:6]) 
     3751            G2frame.HKL = G2pwd.getHKLpeak(1.0,SGData,A,Inst)
     3752            G2plt.PlotPatterns(G2frame,extraKeys=KeyList)
     3753        data = [controls,bravais,cells,dmin,ssopt,magcells]
     3754        G2frame.GPXtree.SetItemPyData(pUCid,data)
     3755        G2frame.OnFileSave(event)
     3756        wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
    36773757       
    36783758    def OnRunSubsMag(event):
     
    36823762        controls,bravais,cells,dminx,ssopt,magcells = G2frame.GPXtree.GetItemPyData(pUCid)
    36833763        E,SGData = G2spc.SpcGroup(controls[13])
    3684         testAtoms = ['',]+list(set([atom[1] for atom in controls[15]]))
     3764        atoms = list(set([atom[1] for atom in controls[15]]))       
     3765        testAtoms = ['',]+[atom for atom in atoms if len(G2elem.GetMFtable([atom,],[2.0,]))]
    36853766        Kx = [' ','0','1/2','-1/2','1/3','-1/3','2/3','1']
    36863767        Ky = [' ','0','1/2','1/3','2/3','1']
     
    37543835                Uvec = np.array(numbs[3::4])
    37553836                Trans = np.array([numbs[:3],numbs[4:7],numbs[8:11]]).T         #Bilbao gives transpose
    3756                 phase = G2lat.makeBilbaoPhase(result[:2],Uvec,Trans)
    3757 
     3837                phase = G2lat.makeBilbaoPhase(result[:2],Uvec,Trans,True)
    37583838                RVT = None
    37593839                if keepaxes:
     
    37613841                if RVT is not None:
    37623842                    result,Uvec,Trans = RVT
    3763                 phase = G2lat.makeBilbaoPhase(result,Uvec,Trans)
     3843                phase = G2lat.makeBilbaoPhase(result,Uvec,Trans,True)
    37643844                phase['Cell'] = G2lat.TransformCell(controls[6:12],Trans)   
    37653845                phase['aType'] = atype
     
    40564136                    gridDisplay.SetReadOnly(r,c,isReadOnly=True)
    40574137        mainSizer.Add(gridDisplay,0,WACV)
    4058     if magcells and 'N' in Inst['Type'][0]:
    4059         if 'N' in Inst['Type'][0]:
    4060             if not ssopt.get('Use',False):
    4061                 G2frame.dataWindow.RunSubGroupsMag.Enable(True)
     4138    if magcells:       
    40624139        G2frame.dataWindow.CopyCell.Enable(False)
    40634140        kvec1 = ','.join(controls[14][:3])
    40644141        kvec2 = ','.join(controls[14][3:6])
    40654142        kvec3 = ','.join(controls[14][6:])
    4066         Label = '\n Magnetic cells from Bilbao k-SUBGROUPSMAG for %s; kvec1=(%s)'%(controls[13],kvec1)
     4143        if 'magAtms' in magcells[0]:
     4144            G2frame.dataWindow.RunSubGroupsMag.Enable(True)
     4145            Label = '\n Magnetic subgroup cells from Bilbao k-SUBGROUPSMAG for %s; kvec1=(%s)'%(controls[13],kvec1)
     4146        else:
     4147            G2frame.dataWindow.RunSubGroups.Enable(True)
     4148            Label = '\n Subgroup cells from Bilbao SUBGROUPS for %s; kvec1=(%s)'%(controls[13],kvec1)
    40674149        if ' ' not in kvec2:
    40684150            Label += ', kvec2=(%s)' % kvec2
Note: See TracChangeset for help on using the changeset viewer.