Changeset 4661
- Timestamp:
- Nov 27, 2020 8:48:26 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIIO.py
r4654 r4661 1550 1550 self.Phases[phaseName] = self.G2frame.GPXtree.GetItemPyData(item) 1551 1551 item, cookie = self.G2frame.GPXtree.GetNextChild(sub, cookie) 1552 # Get rigid body info into self.OverallParms 1553 for key in ('Rigid bodies','Covariance'): 1554 item = G2gd.GetGPXtreeItemId(self.G2frame,self.G2frame.root,key) 1555 if item: 1556 self.OverallParms[key] = self.G2frame.GPXtree.GetItemPyData(item) 1557 item, cookie = self.G2frame.GPXtree.GetNextChild(sub, cookie) 1552 1558 return 1553 1559 elif self.currentExportType == 'single': -
trunk/GSASIIobj.py
r4659 r4661 1850 1850 'DebyeU' : 'Debye model Uiso', 1851 1851 'RBV.*' : 'Vector rigid body parameter', 1852 'RBR.*' : 'Residue rigid body parameter',1853 1852 'RBRO([aijk])' : 'Residue rigid body orientation parameter', 1854 1853 'RBRP([xyz])' : 'Residue rigid body position parameter', 1855 1854 'RBRTr;.*' : 'Residue rigid body torsion parameter', 1856 1855 'RBR([TLS])([123AB][123AB])' : 'Residue rigid body group disp. param.', 1856 'RBRU' : 'Residue rigid body group Uiso param.', 1857 1857 'constr([0-9]*)' : 'Parameter from constraint', 1858 1858 # supersymmetry parameters p::<var>:a:o 'Flen','Fcent'? … … 1900 1900 'PkSig': 'Bragg peak sigma', 1901 1901 'PkGam': 'Bragg peak gamma', 1902 'e([12][12])' : 'strain tensor e\ 1', # strain vars e11, e22, e121902 'e([12][12])' : 'strain tensor e\\1', # strain vars e11, e22, e12 1903 1903 'Dcalc': 'Calc. d-spacing', 1904 1904 'Back$': 'background parameter', … … 1912 1912 'dif[ABC]':'TOF to d-space calibration', 1913 1913 'C\\([0-9]*,[0-9]*\\)' : 'spherical harmonics preferred orientation coef.', 1914 'Pressure': 'Pressure level for measurement in MPa', 1915 'Temperature': 'T value for measurement, K', 1916 'FreePrm([123])': 'User defined measurement parameter \\1', 1917 'Gonio. radius': 'Distance from sample to detector, mm', 1914 1918 }.items(): 1919 # Needs documentation: HAP: LayerDisp, LeBail, newLeBail 1920 # hist: Azimuth, Chi, Omega, Phi, Bank, nDebye, nPeaks 1921 1915 1922 if len(value) == 2: 1916 1923 #VarDesc[key] = value[0] -
trunk/GSASIIplot.py
r4658 r4661 1060 1060 if A > 0.0: 1061 1061 Plot.add_artist(Circle(xy,radius=A,ec='g',fc='w', 1062 picker=True,pickradius=1.,gid=hid)) 1062 #picker=True,pickradius=1., 1063 gid=hid)) 1063 1064 else: 1064 1065 Plot.add_artist(Circle(xy,radius=-A,ec='r',fc='w', 1065 picker=True,pickradius=1.,gid=hid)) 1066 #picker=True,pickradius=1., 1067 gid=hid)) 1066 1068 else: 1067 1069 if A > 0.0 and A > B: … … 1069 1071 if B: 1070 1072 Plot.add_artist(Circle(xy,radius=B,ec='b',fc='w', 1071 picker=True,pickradius=1.,gid=hid)) 1073 #picker=True,pickradius=1., 1074 gid=hid)) 1072 1075 if A < B: 1073 1076 Plot.add_artist(Circle(xy,radius=A,ec='g',fc='w')) … … 7062 7065 spot = [event.xdata,event.ydata,G2frame.spotSize] 7063 7066 Masks['Points'].append(spot) 7064 artist = Circle(spot[:2],radius=spot[2]/2,fc='none',ec='r' ,7065 picker=True,pickradius=3)7067 artist = Circle(spot[:2],radius=spot[2]/2,fc='none',ec='r') 7068 # picker=True,pickradius=3) 7066 7069 Page.figure.gca().add_artist(artist) 7067 7070 artist.itemNumber = len(Masks['Points'])-1 … … 7495 7498 spot = [Xpos,Ypos,sig] 7496 7499 Masks['Points'].append(spot) 7497 artist = Circle((Xpos,Ypos),radius=spot[2]/2,fc='none',ec='r' ,7498 picker=True,pickradius=3)7500 artist = Circle((Xpos,Ypos),radius=spot[2]/2,fc='none',ec='r') 7501 # picker=True,pickradius=3) 7499 7502 Page.figure.gca().add_artist(artist) 7500 7503 artist.itemNumber = len(Masks['Points'])-1 … … 7854 7857 if len(spot): 7855 7858 x,y,d = spot 7856 artist = Circle((x,y),radius=d/2,fc='none',ec='r' ,7857 picker=True,pickradius=3)7859 artist = Circle((x,y),radius=d/2,fc='none',ec='r') 7860 # picker=True,pickradius=3) 7858 7861 Plot.add_artist(artist) 7859 7862 artist.itemNumber = i -
trunk/GSASIIstrIO.py
r4629 r4661 1045 1045 1046 1046 def GetRigidBodyModels(rigidbodyDict,Print=True,pFile=None): 1047 ' needs a doc string'1047 'Get Rigid body info from tree entry and print it to .LST file' 1048 1048 1049 1049 def PrintResRBModel(RBModel): 1050 atNames = RBModel['atNames']1051 rbRef = RBModel['rbRef']1052 rbSeq = RBModel['rbSeq']1053 1050 pFile.write('Residue RB name: %s no.atoms: %d, No. times used: %d\n'% 1054 1051 (RBModel['RBname'],len(RBModel['rbTypes']),RBModel['useCount'])) 1055 pFile.write(' At name x y z\n') 1056 for name,xyz in zip(atNames,RBModel['rbXYZ']): 1057 pFile.write(' %8s %10.4f %10.4f %10.4f\n'%(name,xyz[0],xyz[1],xyz[2])) 1058 pFile.write('Orientation defined by: %s -> %s & %s -> %s\n'% 1059 (atNames[rbRef[0]],atNames[rbRef[1]],atNames[rbRef[0]],atNames[rbRef[2]])) 1060 if rbSeq: 1061 for i,rbseq in enumerate(rbSeq): 1062 # nameLst = [atNames[i] for i in rbseq[3]] 1063 pFile.write('Torsion sequence %d Bond: %s - %s riding: %s\n'% 1064 (i,atNames[rbseq[0]],atNames[rbseq[1]],str([atNames[i] for i in rbseq[3]]))) 1052 for i in WriteResRBModel(RBModel): 1053 pFile.write(i) 1065 1054 1066 1055 def PrintVecRBModel(RBModel): 1067 rbRef = RBModel['rbRef']1068 atTypes = RBModel['rbTypes']1069 1056 pFile.write('Vector RB name: %s no.atoms: %d No. times used: %d\n'% 1070 1057 (RBModel['RBname'],len(RBModel['rbTypes']),RBModel['useCount'])) 1071 for i in range(len(RBModel['VectMag'])): 1072 pFile.write('Vector no.: %d Magnitude: %8.4f Refine? %s\n'%(i,RBModel['VectMag'][i],RBModel['VectRef'][i])) 1073 pFile.write(' No. Type vx vy vz\n') 1074 for j,[name,xyz] in enumerate(zip(atTypes,RBModel['rbVect'][i])): 1075 pFile.write(' %d %2s %10.4f %10.4f %10.4f\n'%(j,name,xyz[0],xyz[1],xyz[2])) 1076 pFile.write(' No. Type x y z\n') 1077 for i,[name,xyz] in enumerate(zip(atTypes,RBModel['rbXYZ'])): 1078 pFile.write(' %d %2s %10.4f %10.4f %10.4f\n'%(i,name,xyz[0],xyz[1],xyz[2])) 1058 for i in WriteVecRBModel(RBModel): 1059 pFile.write(i) 1079 1060 pFile.write('Orientation defined by: atom %s -> atom %s & atom %s -> atom %s\n'% 1080 (rbRef[0],rbRef[1],rbRef[0],rbRef[2])) 1061 (RBModel['rbRef'][0],RBModel['rbRef'][1],RBModel['rbRef'][0],RBModel['rbRef'][2])) 1062 1081 1063 rbVary = [] 1082 1064 rbDict = {} … … 2089 2071 2090 2072 def PrintRBObjPOAndSig(rbfx,rbsx): 2091 namstr = ' names :' 2092 valstr = ' values:' 2093 sigstr = ' esds :' 2094 for i,px in enumerate(['Px:','Py:','Pz:']): 2095 name = pfx+rbfx+px+rbsx 2096 namstr += '%12s'%('Pos '+px[1]) 2097 valstr += '%12.5f'%(parmDict[name]) 2098 if name in sigDict: 2099 sigstr += '%12.5f'%(sigDict[name]) 2100 else: 2101 sigstr += 12*' ' 2102 for i,po in enumerate(['Oa:','Oi:','Oj:','Ok:']): 2103 name = pfx+rbfx+po+rbsx 2104 namstr += '%12s'%('Ori '+po[1]) 2105 valstr += '%12.5f'%(parmDict[name]) 2106 if name in sigDict: 2107 sigstr += '%12.5f'%(sigDict[name]) 2108 else: 2109 sigstr += 12*' ' 2110 pFile.write(namstr+'\n') 2111 pFile.write(valstr+'\n') 2112 pFile.write(sigstr+'\n') 2073 for i in WriteRBObjPOAndSig(pfx,rbfx,rbsx,parmDict,sigDict): 2074 pFile.write(i+'\n') 2113 2075 2114 2076 def PrintRBObjTLSAndSig(rbfx,rbsx,TLS): 2115 namstr = ' names :' 2116 valstr = ' values:' 2117 sigstr = ' esds :' 2118 if 'N' not in TLS: 2119 pFile.write(' Thermal motion:\n') 2120 if 'T' in TLS: 2121 for i,pt in enumerate(['T11:','T22:','T33:','T12:','T13:','T23:']): 2122 name = pfx+rbfx+pt+rbsx 2123 namstr += '%12s'%(pt[:3]) 2124 valstr += '%12.5f'%(parmDict[name]) 2125 if name in sigDict: 2126 sigstr += '%12.5f'%(sigDict[name]) 2127 else: 2128 sigstr += 12*' ' 2129 pFile.write(namstr+'\n') 2130 pFile.write(valstr+'\n') 2131 pFile.write(sigstr+'\n') 2132 if 'L' in TLS: 2133 namstr = ' names :' 2134 valstr = ' values:' 2135 sigstr = ' esds :' 2136 for i,pt in enumerate(['L11:','L22:','L33:','L12:','L13:','L23:']): 2137 name = pfx+rbfx+pt+rbsx 2138 namstr += '%12s'%(pt[:3]) 2139 valstr += '%12.3f'%(parmDict[name]) 2140 if name in sigDict: 2141 sigstr += '%12.3f'%(sigDict[name]) 2142 else: 2143 sigstr += 12*' ' 2144 pFile.write(namstr+'\n') 2145 pFile.write(valstr+'\n') 2146 pFile.write(sigstr+'\n') 2147 if 'S' in TLS: 2148 namstr = ' names :' 2149 valstr = ' values:' 2150 sigstr = ' esds :' 2151 for i,pt in enumerate(['S12:','S13:','S21:','S23:','S31:','S32:','SAA:','SBB:']): 2152 name = pfx+rbfx+pt+rbsx 2153 namstr += '%12s'%(pt[:3]) 2154 valstr += '%12.4f'%(parmDict[name]) 2155 if name in sigDict: 2156 sigstr += '%12.4f'%(sigDict[name]) 2157 else: 2158 sigstr += 12*' ' 2159 pFile.write(namstr+'\n') 2160 pFile.write(valstr+'\n') 2161 pFile.write(sigstr+'\n') 2162 if 'U' in TLS: 2163 name = pfx+rbfx+'U:'+rbsx 2164 namstr = ' names :'+'%12s'%('Uiso') 2165 valstr = ' values:'+'%12.5f'%(parmDict[name]) 2166 if name in sigDict: 2167 sigstr = ' esds :'+'%12.5f'%(sigDict[name]) 2168 else: 2169 sigstr = ' esds :'+12*' ' 2170 pFile.write(namstr+'\n') 2171 pFile.write(valstr+'\n') 2172 pFile.write(sigstr+'\n') 2077 for i in WriteRBObjTLSAndSig(pfx,rbfx,rbsx,TLS,parmDict,sigDict): 2078 pFile.write(i) 2173 2079 2174 2080 def PrintRBObjTorAndSig(rbsx): 2175 namstr = ' names :'2176 valstr = ' values:'2177 sigstr = ' esds :'2178 2081 nTors = len(RBObj['Torsions']) 2179 2082 if nTors: 2180 pFile.write(' Torsions:\n') 2181 for it in range(nTors): 2182 name = pfx+'RBRTr;'+str(it)+':'+rbsx 2183 namstr += '%12s'%('Tor'+str(it)) 2184 valstr += '%12.4f'%(parmDict[name]) 2185 if name in sigDict: 2186 sigstr += '%12.4f'%(sigDict[name]) 2187 pFile.write(namstr+'\n') 2188 pFile.write(valstr+'\n') 2189 pFile.write(sigstr+'\n') 2083 for i in WriteRBObjTorAndSig(pfx,rbsx,parmDict,sigDict,nTors): 2084 pFile.write(i) 2190 2085 2191 2086 def PrintSHtextureAndSig(textureData,SHtextureSig): … … 3679 3574 PrintBackgroundSig(Background,backSig) 3680 3575 3576 def WriteRBObjPOAndSig(pfx,rbfx,rbsx,parmDict,sigDict): 3577 '''Cribbed version of PrintRBObjPOAndSig but returns lists of strings. 3578 Moved so it can be used in ExportCIF 3579 ''' 3580 namstr = ' names :' 3581 valstr = ' values:' 3582 sigstr = ' esds :' 3583 for i,px in enumerate(['Px:','Py:','Pz:']): 3584 name = pfx+rbfx+px+rbsx 3585 namstr += '%12s'%('Pos '+px[1]) 3586 valstr += '%12.5f'%(parmDict[name]) 3587 if name in sigDict: 3588 sigstr += '%12.5f'%(sigDict[name]) 3589 else: 3590 sigstr += 12*' ' 3591 for i,po in enumerate(['Oa:','Oi:','Oj:','Ok:']): 3592 name = pfx+rbfx+po+rbsx 3593 namstr += '%12s'%('Ori '+po[1]) 3594 valstr += '%12.5f'%(parmDict[name]) 3595 if name in sigDict: 3596 sigstr += '%12.5f'%(sigDict[name]) 3597 else: 3598 sigstr += 12*' ' 3599 return (namstr,valstr,sigstr) 3600 3601 def WriteRBObjTLSAndSig(pfx,rbfx,rbsx,TLS,parmDict,sigDict): 3602 '''Cribbed version of PrintRBObjTLSAndSig but returns lists of strings. 3603 Moved so it can be used in ExportCIF 3604 ''' 3605 out = [] 3606 namstr = ' names :' 3607 valstr = ' values:' 3608 sigstr = ' esds :' 3609 if 'N' not in TLS: 3610 out.append(' Thermal motion:\n') 3611 if 'T' in TLS: 3612 for i,pt in enumerate(['T11:','T22:','T33:','T12:','T13:','T23:']): 3613 name = pfx+rbfx+pt+rbsx 3614 namstr += '%12s'%(pt[:3]) 3615 valstr += '%12.5f'%(parmDict[name]) 3616 if name in sigDict: 3617 sigstr += '%12.5f'%(sigDict[name]) 3618 else: 3619 sigstr += 12*' ' 3620 out.append(namstr+'\n') 3621 out.append(valstr+'\n') 3622 out.append(sigstr+'\n') 3623 if 'L' in TLS: 3624 namstr = ' names :' 3625 valstr = ' values:' 3626 sigstr = ' esds :' 3627 for i,pt in enumerate(['L11:','L22:','L33:','L12:','L13:','L23:']): 3628 name = pfx+rbfx+pt+rbsx 3629 namstr += '%12s'%(pt[:3]) 3630 valstr += '%12.3f'%(parmDict[name]) 3631 if name in sigDict: 3632 sigstr += '%12.3f'%(sigDict[name]) 3633 else: 3634 sigstr += 12*' ' 3635 out.append(namstr+'\n') 3636 out.append(valstr+'\n') 3637 out.append(sigstr+'\n') 3638 if 'S' in TLS: 3639 namstr = ' names :' 3640 valstr = ' values:' 3641 sigstr = ' esds :' 3642 for i,pt in enumerate(['S12:','S13:','S21:','S23:','S31:','S32:','SAA:','SBB:']): 3643 name = pfx+rbfx+pt+rbsx 3644 namstr += '%12s'%(pt[:3]) 3645 valstr += '%12.4f'%(parmDict[name]) 3646 if name in sigDict: 3647 sigstr += '%12.4f'%(sigDict[name]) 3648 else: 3649 sigstr += 12*' ' 3650 out.append(namstr+'\n') 3651 out.append(valstr+'\n') 3652 out.append(sigstr+'\n') 3653 if 'U' in TLS: 3654 name = pfx+rbfx+'U:'+rbsx 3655 namstr = ' names :'+'%12s'%('Uiso') 3656 valstr = ' values:'+'%12.5f'%(parmDict[name]) 3657 if name in sigDict: 3658 sigstr = ' esds :'+'%12.5f'%(sigDict[name]) 3659 else: 3660 sigstr = ' esds :'+12*' ' 3661 out.append(namstr+'\n') 3662 out.append(valstr+'\n') 3663 out.append(sigstr+'\n') 3664 return out 3665 3666 def WriteRBObjTorAndSig(pfx,rbsx,parmDict,sigDict,nTors): 3667 '''Cribbed version of PrintRBObjTorAndSig but returns lists of strings. 3668 Moved so it can be used in ExportCIF 3669 ''' 3670 out = [] 3671 namstr = ' names :' 3672 valstr = ' values:' 3673 sigstr = ' esds :' 3674 out.append(' Torsions:\n') 3675 for it in range(nTors): 3676 name = pfx+'RBRTr;'+str(it)+':'+rbsx 3677 namstr += '%12s'%('Tor'+str(it)) 3678 valstr += '%12.4f'%(parmDict[name]) 3679 if name in sigDict: 3680 sigstr += '%12.4f'%(sigDict[name]) 3681 out.append(namstr+'\n') 3682 out.append(valstr+'\n') 3683 out.append(sigstr+'\n') 3684 return out 3685 3686 def WriteResRBModel(RBModel): 3687 '''Write description of a residue rigid body. Code shifted from 3688 PrintResRBModel to make usable from G2export_CIF 3689 ''' 3690 out = [] 3691 atNames = RBModel['atNames'] 3692 rbRef = RBModel['rbRef'] 3693 rbSeq = RBModel['rbSeq'] 3694 out.append(' At name x y z\n') 3695 for name,xyz in zip(atNames,RBModel['rbXYZ']): 3696 out.append(' %8s %10.4f %10.4f %10.4f\n'%(name,xyz[0],xyz[1],xyz[2])) 3697 out.append(' Orientation defined by: %s -> %s & %s -> %s\n'% 3698 (atNames[rbRef[0]],atNames[rbRef[1]],atNames[rbRef[0]],atNames[rbRef[2]])) 3699 if rbSeq: 3700 for i,rbseq in enumerate(rbSeq): 3701 # nameLst = [atNames[i] for i in rbseq[3]] 3702 out.append(' Torsion sequence %d Bond: %s - %s riding: %s\n'% 3703 (i,atNames[rbseq[0]],atNames[rbseq[1]],str([atNames[i] for i in rbseq[3]]))) 3704 return out 3705 3706 def WriteVecRBModel(RBModel,sigDict={},irb=None): 3707 '''Write description of a vector rigid body. Code shifted from 3708 PrintVecRBModel to make usable from G2export_CIF 3709 ''' 3710 out = [] 3711 rbRef = RBModel['rbRef'] 3712 atTypes = RBModel['rbTypes'] 3713 for i in range(len(RBModel['VectMag'])): 3714 if sigDict and irb is not None: 3715 name = '::RBV;'+str(i)+':'+str(irb) 3716 s = G2mth.ValEsd(RBModel['VectMag'][i],sigDict.get(name,-.0001)) 3717 out.append('Vector no.: %d Magnitude: %s\n'%(i,s)) 3718 else: 3719 out.append('Vector no.: %d Magnitude: %8.4f Refine? %s\n'% 3720 (i,RBModel['VectMag'][i],RBModel['VectRef'][i])) 3721 out.append(' No. Type vx vy vz\n') 3722 for j,[name,xyz] in enumerate(zip(atTypes,RBModel['rbVect'][i])): 3723 out.append(' %d %2s %10.4f %10.4f %10.4f\n'%(j,name,xyz[0],xyz[1],xyz[2])) 3724 out.append(' No. Type x y z\n') 3725 for i,[name,xyz] in enumerate(zip(atTypes,RBModel['rbXYZ'])): 3726 out.append(' %d %2s %10.4f %10.4f %10.4f\n'%(i,name,xyz[0],xyz[1],xyz[2])) 3727 return out -
trunk/exports/G2export_CIF.py
r4657 r4661 57 57 import GSASIIspc as G2spc 58 58 import GSASIIstrMain as G2stMn 59 import GSASIIstrIO as G2strIO 59 60 import GSASIImapvars as G2mv 60 61 import GSASIIElem as G2el … … 87 88 fp.write(name+'\n') 88 89 90 def RBheader(fp): 91 WriteCIFitem(fp,'\n# RIGID BODY DETAILS') 92 WriteCIFitem(fp,'loop_\n _restr_rigid_body_class.class_id\n _restr_rigid_body_class.details') 89 93 90 94 # Refactored over here to allow access by GSASIIscriptable.py 91 def WriteAtomsNuclear(fp, phasedict, phasenam, parmDict, sigDict, labellist): 95 def WriteAtomsNuclear(fp, phasedict, phasenam, parmDict, sigDict, labellist, 96 RBparms={}): 92 97 'Write atom positions to CIF' 93 98 # phasedict = self.Phases[phasenam] # pointer to current phase info … … 174 179 s += PutInCol(at[cs+1],3) 175 180 WriteCIFitem(fp, s) 176 if naniso == 0: return 177 # now loop over aniso atoms 178 WriteCIFitem(fp, '\nloop_' + '\n _atom_site_aniso_label' + 179 '\n _atom_site_aniso_U_11' + '\n _atom_site_aniso_U_22' + 180 '\n _atom_site_aniso_U_33' + '\n _atom_site_aniso_U_12' + 181 '\n _atom_site_aniso_U_13' + '\n _atom_site_aniso_U_23') 182 for i,at in enumerate(Atoms): 183 fval = parmDict.get(fpfx+str(i),at[cfrac]) 184 if fval == 0.0: continue # ignore any atoms that have a occupancy set to 0 (exact) 185 if at[cia] == 'I': continue 186 s = PutInCol(labellist[i],6) # label 187 for j in (2,3,4,5,6,7): 188 sigdig = -0.0009 189 var = pfx+varnames[cia+j]+":"+str(i) 190 val = parmDict.get(var,at[cia+j]) 191 sig = sigDict.get(var,sigdig) 192 s += PutInCol(G2mth.ValEsd(val,sig),11) 193 WriteCIFitem(fp, s) 194 181 if naniso != 0: 182 # now loop over aniso atoms 183 WriteCIFitem(fp, '\nloop_' + '\n _atom_site_aniso_label' + 184 '\n _atom_site_aniso_U_11' + '\n _atom_site_aniso_U_22' + 185 '\n _atom_site_aniso_U_33' + '\n _atom_site_aniso_U_12' + 186 '\n _atom_site_aniso_U_13' + '\n _atom_site_aniso_U_23') 187 for i,at in enumerate(Atoms): 188 fval = parmDict.get(fpfx+str(i),at[cfrac]) 189 if fval == 0.0: continue # ignore any atoms that have a occupancy set to 0 (exact) 190 if at[cia] == 'I': continue 191 s = PutInCol(labellist[i],6) # label 192 for j in (2,3,4,5,6,7): 193 sigdig = -0.0009 194 var = pfx+varnames[cia+j]+":"+str(i) 195 val = parmDict.get(var,at[cia+j]) 196 sig = sigDict.get(var,sigdig) 197 s += PutInCol(G2mth.ValEsd(val,sig),11) 198 WriteCIFitem(fp, s) 199 # save information about rigid bodies 200 header = False 201 num = 0 202 rbAtoms = [] 203 for irb,RBObj in enumerate(phasedict['RBModels'].get('Residue',[])): 204 if not header: 205 header = True 206 RBheader(fp) 207 jrb = RBparms['RBIds']['Residue'].index(RBObj['RBId']) 208 rbsx = str(irb)+':'+str(jrb) 209 num += 1 210 WriteCIFitem(fp,'',str(num)) 211 RBModel = RBparms['Residue'][RBObj['RBId']] 212 SGData = phasedict['General']['SGData'] 213 Sytsym,Mult = G2spc.SytSym(RBObj['Orig'][0],SGData)[:2] 214 s = '''GSAS-II residue rigid body "{}" with {} atoms 215 Site symmetry @ origin: {}, multiplicity: {} 216 '''.format(RBObj['RBname'],len(RBModel['rbTypes']),Sytsym,Mult) 217 for i in G2strIO.WriteResRBModel(RBModel): 218 s += i 219 s += '\n Location:\n' 220 for i in G2strIO.WriteRBObjPOAndSig(pfx,'RBR',rbsx,parmDict,sigDict): 221 s += i+'\n' 222 for i in G2strIO.WriteRBObjTLSAndSig(pfx,'RBR',rbsx, 223 RBObj['ThermalMotion'][0],parmDict,sigDict): 224 s += i 225 nTors = len(RBObj['Torsions']) 226 if nTors: 227 for i in G2strIO.WriteRBObjTorAndSig(pfx,rbsx,parmDict,sigDict, 228 nTors): 229 s += i 230 WriteCIFitem(fp,'',s.rstrip()) 231 232 pId = phasedict['pId'] 233 for i in RBObj['Ids']: 234 lbl = G2obj.LookupAtomLabel(pId,G2obj.LookupAtomId(pId,i))[0] 235 rbAtoms.append('{:7s} 1_555 {:3d} ?'.format(lbl,num)) 236 #GSASIIpath.IPyBreak() 237 238 for irb,RBObj in enumerate(phasedict['RBModels'].get('Vector',[])): 239 if not header: 240 header = True 241 RBheader(fp) 242 jrb = RBparms['RBIds']['Vector'].index(RBObj['RBId']) 243 rbsx = str(irb)+':'+str(jrb) 244 num += 1 245 WriteCIFitem(fp,'',str(num)) 246 RBModel = RBparms['Vector'][RBObj['RBId']] 247 SGData = phasedict['General']['SGData'] 248 Sytsym,Mult = G2spc.SytSym(RBObj['Orig'][0],SGData)[:2] 249 s = '''GSAS-II vector rigid body "{}" with {} atoms 250 Site symmetry @ origin: {}, multiplicity: {} 251 '''.format(RBObj['RBname'],len(RBModel['rbTypes']),Sytsym,Mult) 252 for i in G2strIO.WriteVecRBModel(RBModel,sigDict,irb): 253 s += i 254 s += '\n Location:\n' 255 for i in G2strIO.WriteRBObjPOAndSig(pfx,'RBV',rbsx,parmDict,sigDict): 256 s += i+'\n' 257 for i in G2strIO.WriteRBObjTLSAndSig(pfx,'RBV',rbsx, 258 RBObj['ThermalMotion'][0],parmDict,sigDict): 259 s += i 260 WriteCIFitem(fp,'',s.rstrip()) 261 262 pId = phasedict['pId'] 263 for i in RBObj['Ids']: 264 lbl = G2obj.LookupAtomLabel(pId,G2obj.LookupAtomId(pId,i))[0] 265 rbAtoms.append('{:7s} 1_555 {:3d} ?'.format(lbl,num)) 266 267 if rbAtoms: 268 WriteCIFitem(fp,'loop_\n _restr_rigid_body.id'+ 269 '\n _restr_rigid_body.atom_site_label\n _restr_rigid_body.site_symmetry'+ 270 '\n _restr_rigid_body.class_id\n _restr_rigid_body.details') 271 for i,l in enumerate(rbAtoms): 272 WriteCIFitem(fp,' {:5d} {}'.format(i+1,l)) 273 195 274 def WriteAtomsMagnetic(fp, phasedict, phasenam, parmDict, sigDict, labellist): 196 275 'Write atom positions to CIF' … … 560 639 if self.ifHKLF: 561 640 controls = self.OverallParms['Controls'] 562 if controls['F**2']: 563 thresh = 'F**2>%.1fu(F**2)'%(controls['UsrReject']['minF/sig']) 564 else: 565 thresh = 'F>%.1fu(F)'%(controls['UsrReject']['minF/sig']) 566 WriteCIFitem(self.fp, '_reflns_threshold_expression', thresh) 641 try: 642 if controls['F**2']: 643 thresh = 'F**2>%.1fu(F**2)'%(controls['UsrReject']['minF/sig']) 644 else: 645 thresh = 'F>%.1fu(F)'%(controls['UsrReject']['minF/sig']) 646 WriteCIFitem(self.fp, '_reflns_threshold_expression', thresh) 647 except KeyError: 648 pass 567 649 try: 568 650 vars = str(len(self.OverallParms['Covariance']['varyList'])) … … 1143 1225 self.labellist = [] 1144 1226 WriteAtomsNuclear(self.fp, self.Phases[phasenam], phasenam, 1145 self.parmDict, self.sigDict, self.labellist) 1227 self.parmDict, self.sigDict, self.labellist, 1228 self.OverallParms['Rigid bodies']) 1146 1229 else: 1147 1230 try: … … 1522 1605 s += PutInCol('.',10) 1523 1606 s += PutInCol(G2mth.ValEsd(ref[9],0),12) 1524 s += PutInCol(G2mth.ValEsd(ref[10],-0.9),7)1525 1607 else: 1526 1608 sig = ref[6] * ref[8] / ref[5] … … 1918 2000 # load saved CIF author name 1919 2001 try: 1920 self.author = self.OverallParms['Controls'].get("Author",' ').strip()2002 self.author = self.OverallParms['Controls'].get("Author",'?').strip() 1921 2003 except KeyError: 1922 2004 pass … … 2104 2186 # give the user a window to edit CIF contents 2105 2187 if not self.author: 2106 self.author = self.OverallParms['Controls'] ["Author"]2188 self.author = self.OverallParms['Controls'].get("Author",'?').strip() 2107 2189 self.shortauthorname = self.author.replace(',','').replace(' ','')[:20] 2108 2190 if not self.author:
Note: See TracChangeset
for help on using the changeset viewer.