Changeset 5464


Ignore:
Timestamp:
Jan 3, 2023 2:38:18 PM (11 months ago)
Author:
vondreele
Message:

remove Qa, Qb,... from atom lists. Variety not needed; all spin RB are atom type Q
include a couple of patches to convert Qa, etc. to Q
new routines Cart2polar, Polar2Cart & RotPolbyQ
Fix FillUnitCell? to handle overlapped spin RB shells
Fix Shell display to properly respond to changes in Q angle,vector

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/ElementTable.py

    r5433 r5464  
    122122    (["Va",],                 13.5,7.5, "Vacancy",     White,            0.000,(255,255,255)),
    123123    (["Q",],                  14.5,7.5, "Special form factor", REcolor,  0.000,(161,54,212)),
    124     (["Qa",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
    125     (["Qb",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
    126     (["Qc",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
    127     (["Qd",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
     124    # (["Qa",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
     125    # (["Qb",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
     126    # (["Qc",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
     127    # (["Qd",],                    -1,-1, "Special form factor", REcolor,  0.000,(161,54,212)),
    128128    (["None",],                  15.5,7.5, "No element choice",REcolor,     0.000,(161,54,212)),
    129129    ]
  • trunk/GSASIIElem.py

    r5460 r5464  
    252252    Elements = [elem[0][0] for elem in Elem]
    253253    AtomInfo = {}
     254    if 'Q' in El: El = 'Q'      #patch - remove Qa, etc.
    254255    ElS = getElSym(El)
    255256    if El not in atmdata.XrayFF and El not in atmdata.MagFF:
     
    729730                    landeg.append(2.0)
    730731        if 'Q' in atom[ct]:
     732            atom[ct] = 'Q'  #patch - remove 'QA', etc.
    731733            for Srb in RBModels.get('Spin',[]):
    732734                if Srb['Ids'][0] != atom[cia+8]:
  • trunk/GSASIIconstrGUI.py

    r5453 r5464  
    30273027        radius = 1.0
    30283028        atType = 'C'
    3029         rbType = 'Qa'
     3029        rbType = 'Q'
    30303030        Natoms = 1
    30313031        name = 'UNKRB'
     
    34373437        for ibod,spinID in enumerate(data['Spin']):
    34383438            bodSizer.Add(G2G.ValidatedTxtCtrl(SpinRBDisplay,data['Spin'][spinID],'RBname'))
    3439             choices = ['Q','Qa','Qb','Qc','Qd']
    3440             typeSel = wx.ComboBox(SpinRBDisplay,choices=choices,value=data['Spin'][spinID]['rbType'],
    3441                 style=wx.CB_READONLY|wx.CB_DROPDOWN)
    3442             typeSel.Bind(wx.EVT_COMBOBOX,OnTypeSel)
    3443             Indx[typeSel.GetId()] = spinID
    3444             bodSizer.Add(typeSel,0)
     3439            bodSizer.Add(wx.StaticText(SpinRBDisplay,label='Q'),0)
     3440            data['Spin'][spinID]['rbType'] = 'Q'    #patch
     3441            # choices = ['Q','Qa','Qb','Qc','Qd']
     3442            # typeSel = wx.ComboBox(SpinRBDisplay,choices=choices,value=data['Spin'][spinID]['rbType'],
     3443            #     style=wx.CB_READONLY|wx.CB_DROPDOWN)
     3444            # typeSel.Bind(wx.EVT_COMBOBOX,OnTypeSel)
     3445            # Indx[typeSel.GetId()] = spinID
     3446            # bodSizer.Add(typeSel,0)
    34453447            symchoice = ['53m','m3m','-43m','6/mmm','-6m2','-3m','4/mmm','-42m','mmm','2/m','-1','1']
    34463448            data['Spin'][spinID]['RBsym'] = data['Spin'][spinID].get('RBsym','53m')
  • trunk/GSASIImath.py

    r5453 r5464  
    56655665       
    56665666################################################################################
    5667 #### Quaternion stuff
     5667#### Quaternion & other geometry stuff
    56685668################################################################################
     5669
     5670def Cart2Polar(X,Y,Z):
     5671    ''' convert Cartesian to polar coordinates
     5672    '''
     5673   
     5674    R = np.sqrt(X**2+Y**2+Z**2)
     5675    Pl = acosd(Z/R)
     5676    Az = atan2d(Y,X)
     5677    return R,Az,Pl
     5678   
     5679def Polar2Cart(R,Az,Pl):
     5680    '''Convert polar to Cartesian coordinates
     5681    '''
     5682
     5683    X = R*sind(Pl)*cosd(Az)
     5684    Y = R*sind(Pl)*sind(Az)
     5685    Z = R*cosd(Pl)
     5686    return Y,-X,Z
     5687
     5688def RotPolbyQ(R,Az,Pl,Q):
     5689    '''Rotate polar coordinates by quaternion
     5690    '''
     5691    X,Y,Z = Polar2Cart(R,Az,Pl)
     5692    XYZ = np.vstack((X,Y,Z)).T
     5693    nXYZ = prodQVQ(Q,XYZ).T
     5694    return(Cart2Polar(nXYZ[0],nXYZ[1],nXYZ[2]))
    56695695
    56705696def prodQQ(QA,QB):
  • trunk/GSASIIphsGUI.py

    r5460 r5464  
    98369836                Opp = G2spc.Opposite(item[0])
    98379837                for key in Opp:
    9838                     if noDuplicate(Opp[key],atomData):
     9838                    if noDuplicate(Opp[key],atomData) or atom[ct] == 'Q':
    98399839                        unit = item[3]+np.array(eval(key))*1.
    98409840                        cell = '%d+%d,%d,%d'%(item[2],unit[0],unit[1],unit[2])
  • trunk/GSASIIplot.py

    r5463 r5464  
    97969796        GL.glShadeModel(GL.GL_SMOOTH)
    97979797
    9798     def RenderTextureSphere(x,y,z,radius,Qmat,color,shape=[20,10],Fade=None):
     9798    def RenderTextureSphere(x,y,z,radius,color,shape=[20,10],Fade=None):
    97999799        SpFade = np.zeros(list(Fade.shape)+[4,],dtype=np.dtype('B'))
    98009800        SpFade[:,:,:3] = Fade[:,:,nxs]*list(color)
     
    98219821        GL.glTranslate(x,y,z)
    98229822        GL.glMultMatrixf(B4mat.T)
    9823         GL.glMultMatrixf(Qmat)
    98249823        GLU.gluSphere(q,radius,shape[0],shape[1])
    98259824        GL.glPopMatrix()
     
    1030010299                    SpnData = G2mth.GetSpnRBData(SpnRB,atom[ci])
    1030110300                    try:
    10302                         N = SpnData['nSH'][0]
     10301                        SpnData['nSH'][0]
    1030310302                    except TypeError:
    1030410303                        break
     
    1030710306                        radius = SpnData['radius']
    1030810307                        atColor = SpnData['atColor']
    10309                         Q = SpnData['Orient'][0]
    10310                         A,V = G2mth.Q2AVdeg(Q)
    10311                         QR,R = G2mth.make2Quat(V,np.array([0.,0.,1.0]))
    10312                         QA = G2mth.AVdeg2Q(A,np.array([0.,0.,1.0]))
    10313                         Q2 = G2mth.prodQQ(QA,QR)    #correct - rotates about V axis
    10314                         Qmat = G2mth.Q2Mat(Q2)
    10315                         Q4mat = np.eye(4)
    10316                         Q4mat[:3,:3] = Qmat
    10317                         Npsi,Ngam = 120,60
     10308                        Q = G2mth.invQ(SpnData['Orient'][0])
     10309                        Npsi,Ngam = 60,30       #seems acceptable - don't use smaller!
    1031810310                        PSI,GAM = np.mgrid[0:Npsi,0:Ngam]   #[azm,pol]
    1031910311                        PSI = PSI.flatten()*360./Npsi  #azimuth 0-360 ncl
    1032010312                        GAM = GAM.flatten()*180./Ngam  #polar 0-180 incl
     10313                        Rp,PSIp,GAMp = G2mth.RotPolbyQ(np.ones_like(PSI),PSI,GAM,Q)
    1032110314                        for ish,nSH in enumerate(SpnData['nSH']):
    1032210315                            if nSH > 0:
    1032310316                                SHC = SpnData['SHC'][ish]
    10324                                 P = G2lat.SHarmcal(SytSym,SHC,PSI,GAM).reshape((Npsi,Ngam))
     10317                                P = G2lat.SHarmcal(SytSym,SHC,PSIp,GAMp).reshape((Npsi,Ngam))
    1032510318                                if np.min(P) < np.max(P):
    1032610319                                    P = (P-np.min(P))/(np.max(P)-np.min(P))
    10327                                 RenderTextureSphere(x,y,z,radius[ish][0],Q4mat,atColor[ish],shape=[Npsi,Ngam],Fade=P.T)
     10320                                RenderTextureSphere(x,y,z,radius[ish][0],atColor[ish],shape=[Npsi,Ngam],Fade=P.T)
    1032810321                        else:
    1032910322                            RenderSphere(x,y,z,radius[ish][0],atColor[ish],fade,shape=[60,30])
  • trunk/atmdata.py

    r5433 r5464  
    256256    'Va':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
    257257    'Q':    {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
    258     'Qa':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
    259     'Qb':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
    260     'Qc':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
    261     'Qd':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,}
     258    # 'Qa':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
     259    # 'Qb':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
     260    # 'Qc':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,},
     261    # 'Qd':   {'Z':0, 'fa':[ 0.0, 0.0, 0.0, 0.0,],'fb':[ 0.0, 0.0, 0.0, 0.0],'fc': 0.0,}
    262262        }
    263263#electron form factor coefficients to stl=6.0; those as M+0 are 4 term values from SHELX: match the 5 term ones
     
    471471    'Va':[0.50,  0.50, 0.50, 0],
    472472    'Q': [0.50,  0.50, 0.50, 0],
    473     'Qa':[0.50,  0.50, 0.50, 0],
    474     'Qb':[0.50,  0.50, 0.50, 0],
    475     'Qc':[0.50,  0.50, 0.50, 0],
    476     'Qd':[0.50,  0.50, 0.50, 0],
     473    # 'Qa':[0.50,  0.50, 0.50, 0],
     474    # 'Qb':[0.50,  0.50, 0.50, 0],
     475    # 'Qc':[0.50,  0.50, 0.50, 0],
     476    # 'Qd':[0.50,  0.50, 0.50, 0],
    477477        }
    478478# Bond valence coefficients for X-O, X-F & X-Cl Taken from Brese and O'Keefe, Acta Cryst B, 47, 192-197 (1991).
     
    982982    'Va_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
    983983    'Q_':    {'Mass':0.0,'SL':[0.0,0],'SA':0},
    984     'Qa_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
    985     'Qb_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
    986     'Qc_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
    987     'Qd_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
     984    # 'Qa_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
     985    # 'Qb_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
     986    # 'Qc_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
     987    # 'Qd_':   {'Mass':0.0,'SL':[0.0,0],'SA':0},
    988988        }
    989989MagFF = {
Note: See TracChangeset for help on using the changeset viewer.