Changeset 4195
- Timestamp:
- Dec 3, 2019 3:00:37 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIdataGUI.py
r4192 r4195 2842 2842 print('Value for config {} {} is invalid'.format(var,GSASIIpath.GetConfigValue(var))) 2843 2843 win.Center() 2844 2844 ################################################################################ 2845 #### init_vars 2846 ################################################################################ 2845 2847 def init_vars(self): 2846 2848 # initialize default values for GSAS-II "global" variables (saved in main Frame) -
trunk/GSASIIfiles.py
r4026 r4195 68 68 G2Print('G2SetPrintLevel Error: level={} cannot be interpreted.', 69 69 'Use all, warn, error or none.') 70 71 def find(name, path): 72 '''find 1st occurance of file in path 73 ''' 74 for root, dirs, files in os.walk(path): 75 if name in files: 76 return os.path.join(root, name) 70 77 71 78 def G2Print(*args,**kwargs): -
trunk/GSASIIlattice.py
r4175 r4195 278 278 279 279 def ExpandCell(Atoms,atCodes,cx,Trans): 280 Unit =[int(max(abs(np.array(unit)))-1) for unit in Trans.T] 281 for i,unit in enumerate(Unit): 282 if unit > 0: 283 for j in range(unit): 284 moreAtoms = copy.deepcopy(Atoms) 285 moreCodes = [] 286 for atom,code in zip(moreAtoms,atCodes): 287 atom[cx+i] += 1. 288 if '+' in code: 289 cell = list(eval(code.split('+')[1])) 290 ops = code.split('+')[0] 291 else: 292 cell = [0,0,0] 293 ops = code 294 cell[i] += 1 295 moreCodes.append('%s+%d,%d,%d'%(ops,cell[0],cell[1],cell[2])) 296 Atoms += moreAtoms 297 atCodes += moreCodes 298 return Atoms,atCodes 280 Unit = [int(max(abs(np.array(unit)))-1) for unit in Trans.T] 281 nUnit = (Unit[0]+1)*(Unit[1]+1)*(Unit[2]+1) 282 Ugrid = np.mgrid[0:Unit[0]+1,0:Unit[1]+1,0:Unit[2]+1] 283 Ugrid = np.reshape(Ugrid,(3,nUnit)).T 284 Codes = copy.deepcopy(atCodes) 285 newAtoms = copy.deepcopy(Atoms) 286 for unit in Ugrid[1:]: 287 moreAtoms = copy.deepcopy(Atoms) 288 for atom in moreAtoms: 289 atom[cx:cx+3] += unit 290 newAtoms += moreAtoms 291 codes = copy.deepcopy(atCodes) 292 moreCodes = [code+'+%d,%d,%d'%(unit[0],unit[1],unit[2]) for code in codes] 293 Codes += moreCodes 294 return newAtoms,Codes 299 295 300 296 def TransformPhase(oldPhase,newPhase,Trans,Uvec,Vvec,ifMag): … … 992 988 else: 993 989 return [H[2],H[0],H[1]] 990 991 def SwapItems(Alist,pos1,pos2): 992 'exchange 2 items in a list' 993 try: 994 get = Alist[pos1],Alist[pos2] 995 Alist[pos2],Alist[pos1] = get 996 except IndexError: 997 pass 998 return Alist 994 999 995 1000 def Rh2Hx(Rh): -
trunk/GSASIIphsGUI.py
r4194 r4195 59 59 import GSASIIobj as G2obj 60 60 import GSASIIctrlGUI as G2G 61 import GSASIIfiles as G2fl 61 62 import GSASIIconstrGUI as G2cnstG 62 63 import numpy as np … … 1094 1095 self.Phase = Phase 1095 1096 self.SuperCell = [1,1,1] 1097 self.aTypes = self.Phase['General']['AtomTypes'] 1098 self.atSeq = self.aTypes[:] 1096 1099 self.histogram = '' 1097 1100 self.metadata = {'title':'none','owner':'no one','date':str(time.ctime()), … … 1103 1106 def OnHisto(event): 1104 1107 self.histogram = histo.GetStringSelection() 1108 1109 def OnAtSel(event): 1110 Obj = event.GetEventObject() 1111 itype = Indx[Obj.GetId()] 1112 tid = Obj.GetSelection() 1113 if itype < nTypes-1: 1114 if itype == tid: 1115 tid += 1 1116 self.atSeq = G2lat.SwapItems(self.atSeq,itype,tid) 1117 wx.CallAfter(self.Draw) 1105 1118 1106 1119 self.panel.Destroy() … … 1114 1127 superSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.SuperCell,i,min=1,max=10,size=(50,25)),0,WACV) 1115 1128 mainSizer.Add(superSizer,0,WACV) 1129 nTypes = len(self.aTypes) 1130 atmChoice = wx.BoxSizer(wx.HORIZONTAL) 1131 atmChoice.Add(wx.StaticText(self.panel,label=' Set atom ordering: '),0,WACV) 1132 Indx = {} 1133 for iType in range(nTypes): 1134 atChoice = self.atSeq[iType:] 1135 atmSel = wx.ComboBox(self.panel,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 1136 atmSel.SetStringSelection(self.atSeq[iType]) 1137 atmSel.Bind(wx.EVT_COMBOBOX,OnAtSel) 1138 Indx[atmSel.GetId()] = iType 1139 atmChoice.Add(atmSel,0,WACV) 1140 mainSizer.Add(atmChoice,0,WACV) 1116 1141 histograms = self.Phase['Histograms'] 1117 1142 histNames = list(histograms.keys()) … … 1126 1151 metaSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.metadata,item),0,WACV) 1127 1152 mainSizer.Add(metaSizer,0,WACV) 1153 mainSizer.Add(wx.StaticText(self.panel,label=' WARNING: this can take time - be patient'),0,WACV) 1128 1154 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 1129 1155 OKBtn = wx.Button(self.panel,-1,"OK") … … 1141 1167 def GetData(self): 1142 1168 'Returns the values from the dialog' 1143 return self.SuperCell,self.histogram,self.metadata 1169 return self.SuperCell,self.histogram,self.metadata,self.atSeq 1144 1170 1145 1171 def OnOK(self,event): … … 4475 4501 dlg = SetUpRMCProfileDialog(G2frame,Name=pName,Phase=data) 4476 4502 if dlg.ShowModal() == wx.ID_OK: 4477 superCell,histoName,meta = dlg.GetData()4503 superCell,histoName,meta,atSeq = dlg.GetData() 4478 4504 PWId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,histoName) 4479 4505 if PWId: 4506 # Progress 4480 4507 print(G2pwd.MakeInst(G2frame,pName,PWId)+ ' written') 4481 4508 backfile = G2pwd.MakeBack(G2frame,pName,PWId) … … 4485 4512 print(backfile+ ' written') 4486 4513 print(G2pwd.MakeBragg(G2frame,pName,data,PWId)+ ' written') 4487 print(G2pwd.MakeRMC6f(G2frame,pName,data,meta, superCell,PWId)+ ' written')4514 print(G2pwd.MakeRMC6f(G2frame,pName,data,meta,atSeq,superCell,PWId)+ ' written') 4488 4515 print('RMCProfile file build completed') 4489 4516 else: … … 4541 4568 dlg = wx.FileDialog(G2frame, 'Choose fullrmc python file to execute', 4542 4569 wildcard='fullrmc python file (*.py)|*.py',style=wx.FD_CHANGE_DIR) 4570 try: 4571 if dlg.ShowModal() == wx.ID_OK: 4572 import subprocess as sb 4573 batch = open('fullrmc.bat','w') 4574 batch.write(sys.exec_prefix+'\\activate\n') 4575 batch.write(sys.exec_prefix+'\\python.exe '+dlg.GetPath()+'\n') 4576 batch.write('pause') 4577 batch.close() 4578 sb.Popen('fullrmc.bat',creationflags=sb.CREATE_NEW_CONSOLE) 4579 else: 4580 return 4581 finally: 4582 dlg.Destroy() 4583 4543 4584 4544 4585 else: 4586 rmcfile = G2fl.find('rmcprofile.exe',GSASIIpath.path2GSAS2) 4587 rmcexe = os.path.split(rmcfile)[0] 4588 print(rmcexe) 4589 if rmcfile is None: 4590 wx.MessageBox(''' RMCProfile is not correctly installed for use in GSAS-II 4591 Obtain the zip file distribution from www.rmcprofile.org, 4592 unzip it and place the RMCProfile main directory in the main GSAS-II directory ''', 4593 caption='RMCProfile',style=wx.ICON_INFORMATION) 4594 return 4545 4595 wx.MessageBox(''' For use of RMCProfile, please cite: 4546 4596 RMCProfile: Reverse Monte Carlo for polycrystalline materials, 4547 4597 M.G. Tucker, D.A. keen, M.T. Dove, A.L. Goodwin and Q. Hui, 4548 4598 Jour. Phys.: Cond. matter 2007, 19, 335218. 4549 doi: https://doi.org/10.1088/0953-8984/19/33/335218''',caption='RMCProfile',style=wx.ICON_INFORMATION) 4550 return 4551 try: 4552 if dlg.ShowModal() == wx.ID_OK: 4553 import subprocess as sb 4554 batch = open('fullrmc.bat','w') 4555 batch.write(sys.exec_prefix+'\\activate\n') 4556 batch.write(sys.exec_prefix+'\\python.exe '+dlg.GetPath()+'\n') 4557 batch.write('pause') 4558 batch.close() 4559 sb.Popen('fullrmc.bat',creationflags=sb.CREATE_NEW_CONSOLE) 4560 else: 4561 return 4562 finally: 4563 dlg.Destroy() 4564 4599 doi: https://doi.org/10.1088/0953-8984/19/33/335218''', 4600 caption='RMCProfile',style=wx.ICON_INFORMATION) 4601 import subprocess as sb 4602 generalData = data['General'] 4603 pName = generalData['Name'].replace(' ','_') 4604 batch = open('runrmc.bat','w') 4605 batch.write('::PATH=%PATH%;'+rmcexe+';c:'+rmcexe+'\cygwin_libs\n') 4606 batch.write('SET RMCPROFILE_DIR='+G2frame.dirname+'\n') 4607 batch.write('SET RMCPROFILE_DRIVE=%~d1\n') 4608 batch.write('::PATH=%PATH%;%RMCPROFILE_DIR%\exe;%RMCPROFILE_DIR%\exe\cygwin_libs\n') 4609 batch.write('PATH=%RMCPROFILE_DIR%\exe;%RMCPROFILE_DIR%\exe\cygwin_libs;%PATH%\n') 4610 batch.write('PATH\n') 4611 batch.write('Title RMCProfile\n') 4612 batch.write(rmcexe+'\\rmcprofile.exe '+pName+'\n') 4613 batch.write('pause\n') 4614 batch.close() 4615 sb.Popen('runrmc.bat',creationflags=sb.CREATE_NEW_CONSOLE) 4616 4617 # dlg = wx.FileDialog(G2frame, 'Find rmcprofile.bat file to execute', 4618 # wildcard='RMCProfile (rmcprofile.bat)|*.bat',style=wx.FD_CHANGE_DIR) 4619 # try: 4620 # if dlg.ShowModal() == wx.ID_OK: 4621 # pass 4622 # else: 4623 # return 4624 # finally: 4625 # dlg.Destroy() 4565 4626 4566 4627 -
trunk/GSASIIpwd.py
r4194 r4195 2092 2092 PWDdata = G2frame.GetPWDRdatafromTree(PWId) 2093 2093 inst = PWDdata['Instrument Parameters'][0] 2094 prms = ['Bank', 2095 'difC','difA','Zero','2-theta', 2096 'alpha','beta-0','beta-1','sig-0', 2097 'sig-1','sig-2','X','Y'] 2098 fname = Name+'.inst' 2099 fl = open(fname,'w') 2100 fl.write(' 1\n') 2101 fl.write('%10d\n'%int(inst[prms[0]][1])) 2102 fl.write('%10.3f%10.3f%10.3f%10.3f\n'%(inst[prms[1]][1],inst[prms[2]][1],inst[prms[3]][1],inst[prms[4]][1])) 2103 fl.write('%10.3f%10.6f%10.6f%10.3f\n'%(inst[prms[5]][1],inst[prms[6]][1],inst[prms[7]][1],inst[prms[8]][1])) 2104 fl.write('%10.3f%10.3f%10.3f%10.4f\n'%(inst[prms[9]][1],inst[prms[10]][1],0.0,inst[prms[12]][1])) 2105 fl.write('%10.4f%10.3f%10.3f%10.3f\n'%(inst[prms[11]][1],0.0,0.0,0.0)) 2106 fl.close() 2094 if 'T' in inst['Type'][1]: 2095 prms = ['Bank', 2096 'difC','difA','Zero','2-theta', 2097 'alpha','beta-0','beta-1','sig-0', 2098 'sig-1','sig-2','X','Y'] 2099 fname = Name+'.inst' 2100 fl = open(fname,'w') 2101 fl.write('1\n') 2102 fl.write('%d\n'%int(inst[prms[0]][1])) 2103 fl.write('%10.3f%10.3f%10.3f%10.3f\n'%(inst[prms[1]][1],inst[prms[2]][1],inst[prms[3]][1],inst[prms[4]][1])) 2104 fl.write('%10.3f%10.6f%10.6f%10.3f\n'%(inst[prms[5]][1],inst[prms[6]][1],inst[prms[7]][1],inst[prms[8]][1])) 2105 fl.write('%10.3f%10.3f%10.3f%10.4f\n'%(inst[prms[9]][1],inst[prms[10]][1],0.0,inst[prms[12]][1])) 2106 fl.write('%10.4f%10.3f%10.3f%10.3f\n'%(inst[prms[11]][1],0.0,0.0,0.0)) 2107 fl.write('%10.4f%10.3f%10.3f%10.3f\n'%(0.0,0.0,0.0,0.0)) 2108 fl.close() 2109 else: 2110 prms = ['Bank', 2111 'Lam','Zero', 2112 'U','V','W', 2113 'X','Y',] 2114 fname = Name+'.inst' 2115 fl = open(fname,'w') 2116 fl.write('1\n') 2117 fl.write('%d\n'%int(inst[prms[0]][1])) 2118 fl.write('%10.3f%10.3f%10.3f%10.3f\n'%(inst[prms[1]][1],inst[prms[2]][1],0.0,0.0)) 2119 fl.write('%10.3f%10.6f%10.6f%10.3f\n'%(inst[prms[3]][1],inst[prms[4]][1],inst[prms[5]][1],0.0)) 2120 fl.write('%10.3f%10.3f%10.3f%10.3f\n'%(inst[prms[6]][1],inst[prms[7]][1],0.0,0.0)) 2121 fl.write('%10.3f%10.3f%10.3f%10.3f\n'%(0.0,0.0,0.0,0.0)) 2122 fl.close() 2107 2123 return fname 2108 2124 … … 2122 2138 return fname 2123 2139 2124 def MakeRMC6f(G2frame,Name,Phase,Meta, Supercell,PWId):2140 def MakeRMC6f(G2frame,Name,Phase,Meta,Atseq,Supercell,PWId): 2125 2141 PWDdata = G2frame.GetPWDRdatafromTree(PWId) 2126 2142 generalData = Phase['General'] … … 2140 2156 fl.write('(Version 6f format configuration file)\n') 2141 2157 for item in Meta: 2142 fl.write('%-20s : %s\n'%('Metadata '+item,Meta[item]))2143 fl.write(' Supercell dimensions: %d %d %d\n'%(Supercell[0],Supercell[1],Supercell[2]))2144 fl.write('Cell (Ang/deg): % f %f %f %f %f %f\n'%(2158 fl.write('%-20s%s\n'%('Metadata '+item+':',Meta[item])) 2159 fl.write('%-35s%3d%3d%3d\n'%('Supercell dimensions:',Supercell[0],Supercell[1],Supercell[2])) 2160 fl.write('Cell (Ang/deg): %12.6f%12.6f%12.6f%12.6f%12.6f%12.6f\n'%( 2145 2161 Cell[0],Cell[1],Cell[2],Cell[3],Cell[4],Cell[5])) 2162 A,B = G2lat. cell2AB(Cell) 2163 fl.write('Lattice vectors (Ang):\n') 2164 for i in [0,1,2]: 2165 fl.write('%12.6f%12.6f%12.6f\n'%(A[i,0],A[i,1],A[i,2])) 2146 2166 fl.write('Atoms (fractional coordinates):\n') 2147 for iat,atom in enumerate(Atoms): 2148 atcode = Atcodes[iat].split(':') 2149 cell = [0,0,0] 2150 if '+' in atcode[1]: 2151 cell = eval(atcode[1].split('+')[1]) 2152 fl.write('%6d%6s [%s]%10.6f%10.6f%10.6f%5d%5d%5d%5d\n'%( 2153 iat,atom[1],atcode[0],atom[3],atom[4],atom[5],0,cell[0],cell[1],cell[2])) 2167 Natm = np.core.defchararray.count(np.array(Atcodes),'+') 2168 Natm = np.count_nonzero(Natm-1) 2169 nat = 0 2170 for atm in Atseq: 2171 for iat,atom in enumerate(Atoms): 2172 if atom[1] == atm: 2173 nat += 1 2174 atcode = Atcodes[iat].split(':') 2175 cell = [0,0,0] 2176 if '+' in atcode[1]: 2177 cell = eval(atcode[1].split('+')[1]) 2178 fl.write('%6d%4s [%s]%19.15f%19.15f%19.15f%6d%4d%4d%4d\n'%( 2179 nat,atom[1],atcode[0],atom[3],atom[4],atom[5],(iat)%Natm+1,cell[0],cell[1],cell[2])) 2154 2180 fl.close() 2155 2181 return fname … … 2169 2195 fname = Name+'.bragg' 2170 2196 fl = open(fname,'w') 2171 fl.write('%10d%10d%12.4f%12.4f\n'%(Ifin-Ibeg,Bank,Scale,Vol)) 2172 fl.write('%12s%12s\n'%(' TOF,ms',' I(obs)')) 2173 for i in range(Ibeg,Ifin-1): 2174 fl.write('%12.8f%12.6f\n'%(Data[0][i]/1000.,Data[1][i])) 2197 fl.write('%12d%6d%15.7f%15.4f\n'%(Ifin-Ibeg-1,Bank,Scale,Vol)) 2198 if 'T' in Inst['Type'][0]: 2199 fl.write('%12s%12s\n'%(' TOF,ms',' I(obs)')) 2200 for i in range(Ibeg,Ifin-1): 2201 fl.write('%12.8f%12.6f\n'%(Data[0][i]/1000.,Data[1][i])) 2202 else: 2203 fl.write('%12s%12s\n'%(' 2-theta, deg',' I(obs)')) 2204 for i in range(Ibeg,Ifin-1): 2205 fl.write('%11.6f%15.2f\n'%(Data[0][i],Data[1][i])) 2175 2206 fl.close() 2176 2207 return fname
Note: See TracChangeset
for help on using the changeset viewer.