Changeset 2471


Ignore:
Timestamp:
Sep 17, 2016 9:27:42 AM (5 years ago)
Author:
vondreele
Message:

complete atom/draw atom editing for magnetic structures

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIphsGUI.py

    r2470 r2471  
    441441                    generalData['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1]
    442442                Atoms = data['Atoms']
    443                 cx = generalData['AtomPtrs'][0]
     443                cx,ct,cs,cia = generalData['AtomPtrs']
    444444                for atom in Atoms:
    445445                    XYZ = atom[cx:cx+3]
    446446                    Sytsym,Mult = G2spc.SytSym(XYZ,SGData)[:2]
    447                     atom[cx+4] = Sytsym
    448                     atom[cx+5] = Mult
     447                    atom[cs] = Sytsym
     448                    atom[cs+1] = Mult
    449449                wx.CallAfter(UpdateGeneral)
    450450               
     
    740740            magSizer = wx.BoxSizer(wx.VERTICAL)
    741741            magSizer.Add(wx.StaticText(General,label=' Magnetic spin operator selection:'),0,WACV)
    742             magSizer.Add(wx.StaticText(General,label='NB: UNDER CONSTRUCTION - DO NOT USE'),0,WACV)
     742            magSizer.Add(wx.StaticText(General,label='NB: UNDER CONSTRUCTION - LS NOT AVAILABLE'),0,WACV)
    743743            if not len(GenSym):
    744744                magSizer.Add(wx.StaticText(General,label=' No spin inversion allowed'),0,WACV)
     
    17321732            for item in Items:
    17331733                G2frame.dataFrame.AtomsMenu.Enable(item,False)
     1734        parmChoice = ': ,X,XU,U,F,FX,FXU,FU'
     1735        if generalData['Type'] == 'magnetic':
     1736            parmChoice += ',M,MX,MXU,MU,MF,MFX,MFXU,MFU'
    17341737        AAchoice = ": ,ALA,ARG,ASN,ASP,CYS,GLN,GLU,GLY,HIS,ILE,LEU,LYS,MET,PHE,PRO,SER,THR,TRP,TYR,VAL,MSE,HOH,UNK"
    1735         Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,wg.GRID_VALUE_CHOICE+": ,X,XU,U,F,FX,FXU,FU",]+ \
     1738        Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,wg.GRID_VALUE_CHOICE+parmChoice,]+ \
    17361739            3*[wg.GRID_VALUE_FLOAT+':10,5',]+[wg.GRID_VALUE_FLOAT+':10,4', #x,y,z,frac
    17371740            wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,wg.GRID_VALUE_CHOICE+":I,A",]
     
    20322035                atomData.insert(indx,[Name,El,'',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
    20332036            SetupGeneral()
     2037        elif generalData['Type'] == 'magnetic':
     2038            if generalData['Modulated']:
     2039                atomData.insert(indx,[Name,El,'',x,y,z,1,0.,0.,0.,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,atId,[],[],
     2040                    {'SS1':{'waveType':'Fourier','Sfrac':[],'Spos':[],'Sadp':[],'Smag':[]}}])
     2041            else:
     2042                atomData.insert(indx,[Name,El,'',x,y,z,1,0.,0.,0.,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId])
    20342043        data['Drawing']['Atoms'] = []
    20352044        UpdateDrawAtoms()
     
    20952104            ci = colLabels.index('I/A')
    20962105            choices = ['Type','Name','x','y','z','frac','I/A','Uiso']
     2106            if generalData['Type'] == 'magnetic':
     2107                choices += ['Mx','My','Mz',]
    20972108            dlg = wx.SingleChoiceDialog(G2frame,'Select','Atom parameter',choices)
    20982109            parm = ''
     
    21762187                    FillAtomsGrid(Atoms)
    21772188                dlg.Destroy()
     2189            elif parm in ['Mx','My','Mz',]:
     2190                limits = [-10.,10.]
     2191                val = 0.
     2192                dlg = G2G.SingleFloatDialog(G2frame,'Atom moment','Enter new value for '+parm,val,limits)
     2193                if dlg.ShowModal() == wx.ID_OK:
     2194                    parm = dlg.GetValue()
     2195                    for r in indx:                       
     2196                        if not Atoms.IsReadOnly(r,cid):
     2197                            atomData[r][cid] = parm
     2198                    SetupGeneral()
     2199                    FillAtomsGrid(Atoms)
     2200                dlg.Destroy()
     2201               
    21782202            data['Drawing']['Atoms'] = []
    21792203            UpdateDrawAtoms()
     
    21872211        if indx:
    21882212            generalData = data['General']
     2213            SpnFlp = generalData['SGData'].get('SpnFlp',[])
    21892214            colLabels = [Atoms.GetColLabelValue(c) for c in range(Atoms.GetNumberCols())]
    21902215            cx = colLabels.index('x')
     
    21922217            cuij = colLabels.index('U11')
    21932218            css = colLabels.index('site sym')
     2219            cmx = 0
     2220            if 'Mx' in colLabels:
     2221                cmx = colLabels.index('Mx')
    21942222            atomData = data['Atoms']
    21952223            SGData = generalData['SGData']
     
    22232251                            Uij = G2spc.U2Uij(U)
    22242252                            atom[cuij:cuij+6] = Uij
     2253                        if cmx:
     2254                            atom[cmx:cmx+3] = np.inner(M,np.array(atom[cmx:cmx+3]))
    22252255                        if New:
    22262256                            atomData.append(atom)
     
    22402270           
    22412271    def AtomRotate(event):
     2272        '''
     2273        Currently not used - Bind commented out below
     2274        '''
    22422275        Units = {'':np.zeros(3),
    22432276            'xy':np.array([[i,j,0] for i in range(3) for j in range(3)])-np.array([1,1,0]),
     
    23152348            OnReloadDrawAtoms(event)           
    23162349            FillAtomsGrid(Atoms)
    2317            
    2318            
    23192350#                G2frame.ErrorDialog('Distance/Angle calculation','try again but do "Reset" to fill in missing atom types')
    23202351        else:
     
    42424273                            atom[cx:cx+3] = item[0]
    42434274                            Opr = abs(item[2])%100
    4244                             Cent = abs(item[2]/100)
    42454275                            M = SGData['SGOps'][Opr-1][0]
    42464276                            if cmx:
     
    43614391                                    newAtom = atomB[:]
    43624392                                    newAtom[cx:cx+3] = xyz
    4363                                     OpN = int(oprB.split('+')[0])
     4393                                    newAtom[cs-1] = G2spc.StringOpsProd(oprB,newOp,SGData)
     4394                                    OpN = int(newAtom[cs-1].split('+')[0])
    43644395                                    Opr = abs(OpN)%100
    4365                                     Cent = abs(OpN/100)
    43664396                                    M = SGData['SGOps'][Opr-1][0]
    43674397                                    if cmx:
    43684398                                        opNum = G2spc.GetOpNum(OpN,SGData)
    4369                                     newAtom[cmx:cmx+3] = np.inner(M,np.array(newAtom[cmx:cmx+3]))
    4370                                     newAtom[cs-1] = G2spc.StringOpsProd(oprB,newOp,SGData)
     4399                                        newAtom[cmx:cmx+3] = np.inner(M,np.array(newAtom[cmx:cmx+3]))
    43714400                                    atomData.append(newAtom[:cij+9])  #not SS stuff
    43724401            finally:
     
    44034432                            atom[cx:cx+3] = item[0]
    44044433                            Opr = abs(item[2])%100
    4405                             Cent = abs(item[2]/100)
    44064434                            M = SGData['SGOps'][Opr-1][0]
    44074435                            if cmx:
     
    44254453                            atom = copy.copy(atomData[ind])
    44264454                            Opr = abs(item[1])%100
    4427                             Cent = abs(item[1]/100)
    44284455                            M = SGData['SGOps'][Opr-1][0]
    44294456                            atom[cx:cx+3] = item[0]
Note: See TracChangeset for help on using the changeset viewer.