Changeset 2473 for trunk/GSASIIstrIO.py


Ignore:
Timestamp:
Sep 20, 2016 1:58:10 PM (5 years ago)
Author:
vondreele
Message:

work on magnetic structures - import from EXP, plotting, LS refine I/O, mag. form factors, etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIstrIO.py

    r2450 r2473  
    808808            print >>pFile,' %8s %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f' %  \
    809809                (Ename.ljust(8),fa[0],fa[1],fa[2],fa[3],fb[0],fb[1],fb[2],fb[3],ffdata['fc'])
     810               
     811    def PrintMFtable(MFtable):
     812        print >>pFile,'\n <j0> Magnetic scattering factors:'
     813        print >>pFile,'   Symbol     mfa                                    mfb                                     mfc'
     814        print >>pFile,99*'-'
     815        for Ename in MFtable:
     816            mfdata = MFtable[Ename]
     817            fa = mfdata['mfa']
     818            fb = mfdata['mfb']
     819            print >>pFile,' %8s %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f' %  \
     820                (Ename.ljust(8),fa[0],fa[1],fa[2],fa[3],fb[0],fb[1],fb[2],fb[3],mfdata['mfc'])
     821        print >>pFile,'\n <j2> Magnetic scattering factors:'
     822        print >>pFile,'   Symbol     nfa                                    nfb                                     nfc'
     823        print >>pFile,99*'-'
     824        for Ename in MFtable:
     825            mfdata = MFtable[Ename]
     826            fa = mfdata['nfa']
     827            fb = mfdata['nfb']
     828            print >>pFile,' %8s %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f' %  \
     829                (Ename.ljust(8),fa[0],fa[1],fa[2],fa[3],fb[0],fb[1],fb[2],fb[3],mfdata['nfc'])
    810830               
    811831    def PrintBLtable(BLtable):
     
    915935                print >>pFile,line
    916936               
     937    def PrintMoments(General,Atoms):
     938        cx,ct,cs,cia = General['AtomPtrs']
     939        cmx = cx+4
     940        print >>pFile,'\n Magnetic moments:'
     941        line = '   name    type  refine?  Mx        My        Mz    '
     942        print >>pFile,line
     943        print >>pFile,135*'-'
     944        for i,at in enumerate(Atoms):
     945            line = '%7s'%(at[ct-1])+'%7s'%(at[ct])+'%7s'%(at[ct+1])+'%10.5f'%(at[cmx])+'%10.5f'%(at[cmx+1])+ \
     946                '%10.5f'%(at[cmx+2])
     947            print >>pFile,line
     948       
     949               
    917950    def PrintWaves(General,Atoms):
    918951        cx,ct,cs,cia = General['AtomPtrs']
     
    10451078    pawleyLookup = {}
    10461079    FFtables = {}                   #scattering factors - xrays
     1080    MFtables = {}                   #Mag. form factors
    10471081    BLtables = {}                   # neutrons
    10481082    Natoms = {}
     
    10611095        FFtables.update(FFtable)
    10621096        BLtables.update(BLtable)
     1097        if General['Type'] == 'magnetic':
     1098            MFtable = G2el.GetMFtable(General['AtomTypes'])
     1099            MFtables.update(MFtable)
    10631100        Atoms = PhaseData[name]['Atoms']
    10641101        if Atoms and not General.get('doPawley'):
     
    11151152                    phaseDict.update({pfx+'AU11:'+str(i):at[cia+2],pfx+'AU22:'+str(i):at[cia+3],pfx+'AU33:'+str(i):at[cia+4],
    11161153                        pfx+'AU12:'+str(i):at[cia+5],pfx+'AU13:'+str(i):at[cia+6],pfx+'AU23:'+str(i):at[cia+7]})
     1154                if General['Type'] == 'magnetic':
     1155                    phaseDict.update({pfx+'AMx:'+str(i):at[cx+4],pfx+'AMy:'+str(i):at[cx+5],pfx+'AMz:'+str(i):at[cx+6]})
    11171156                if 'F' in at[ct+1]:
    11181157                    phaseVary.append(pfx+'Afrac:'+str(i))
     
    11631202                                    eqv[1] /= coef
    11641203                                G2mv.StoreEquivalence(name,equiv[1:])
     1204                if 'M' in at[ct+1]:
     1205                    pass    #magnetic moment vary here
    11651206                if General.get('Modulated',False):
    11661207                    AtomSS = at[-1]['SS1']
     
    12351276                PrintFFtable(FFtable)
    12361277                PrintBLtable(BLtable)
     1278                if General['Type'] == 'magnetic':
     1279                    PrintMFtable(MFtable)
    12371280                print >>pFile,''
     1281                #how do we print magnetic symmetry table? TBD
    12381282                if len(SSGtext):    #if superstructure
    12391283                    for line in SSGtext: print >>pFile,line
     
    12541298                PrintRBObjects(resRBData,vecRBData)
    12551299                PrintAtoms(General,Atoms)
     1300                if General['Type'] == 'magnetic':
     1301                    PrintMoments(General,Atoms)
    12561302                if General.get('Modulated',False):
    12571303                    PrintWaves(General,Atoms)
     
    15301576        print >>pFile,'\n Atoms:'
    15311577        line = '   name      x         y         z      frac   Uiso     U11     U22     U33     U12     U13     U23'
    1532         if General['Type'] == 'magnetic':
    1533             line = line[:24]+'   Mx     My     Mz'+line[24:]
    1534         elif General['Type'] == 'macromolecular':
     1578        if General['Type'] == 'macromolecular':
    15351579            line = ' res no residue chain '+line
    15361580        cx,ct,cs,cia = General['AtomPtrs']
     
    15751619                    else:
    15761620                        sigstr += 8*' '
     1621            print >>pFile,name
     1622            print >>pFile,valstr
     1623            print >>pFile,sigstr
     1624           
     1625    def PrintMomentsAndSig(General,Atoms,atomsSig):
     1626        print >>pFile,'\n Magnetic Moments:'    #add magnitude & angle, etc.? TBD
     1627        line = '   name      Mx        My        Mz'
     1628        cx,ct,cs,cia = General['AtomPtrs']
     1629        cmx = cx+4
     1630        print >>pFile,line
     1631        print >>pFile,135*'-'
     1632        fmt = {0:'%7s',ct:'%7s',cmx:'%10.5f',cmx+1:'%10.5f',cmx+2:'%10.5f'}
     1633        noFXsig = {cmx:[10*' ','%10s'],cmx+1:[10*' ','%10s'],cmx+2:[10*' ','%10s']}
     1634        for i,at in enumerate(Atoms):
     1635            name = fmt[0]%(at[ct-1])+fmt[1]%(at[ct])+':'
     1636            valstr = ' values:'
     1637            sigstr = ' sig   :'
     1638            for ind in range(cmx,cmx+3):
     1639                sigind = str(i)+':'+str(ind)
     1640                valstr += fmt[ind]%(at[ind])                   
     1641                if sigind in atomsSig:
     1642                    sigstr += fmt[ind]%(atomsSig[sigind])
     1643                else:
     1644                    sigstr += noFXsig[ind][1]%(noFXsig[ind][0])
    15771645            print >>pFile,name
    15781646            print >>pFile,valstr
     
    19462014                   
    19472015            PrintAtomsAndSig(General,Atoms,atomsSig)
     2016            if General['Type'] == 'magnetic':
     2017                PrintMomentsAndSig(General,Atoms,atomsSig)
    19482018            if General.get('Modulated',False):
    19492019                PrintWavesAndSig(General,Atoms,wavesSig)
     
    21112181                elif 'T' in inst['Type'][0]:
    21122182                    dmin = limits[0]/inst['difC'][1]
     2183                if Phases[phase]['General']['Type'] == 'magnetic':
     2184                    dmin = max(dmin,Phases[phase]['General']['MagDmin'])
    21132185                pfx = str(pId)+':'+str(hId)+':'
    21142186                for item in ['Scale','Extinction']:
Note: See TracChangeset for help on using the changeset viewer.