Changeset 4263
- Timestamp:
- Jan 22, 2020 9:49:36 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIphsGUI.py
r4254 r4263 1084 1084 self.EndModal(wx.ID_CANCEL) 1085 1085 1086 ################################################################################1087 class SetUpRMCProfileDialog(wx.Dialog):1088 ''' Get from user the super cell size & selected histogram to make various files1089 '''1090 def __init__(self,parent,Name,Phase):1091 title = 'RMCProfile setup for '+Name1092 wx.Dialog.__init__(self,parent,wx.ID_ANY,title,size=(700,500),1093 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)1094 self.panel = wxscroll.ScrolledPanel(self) #just a dummy - gets destroyed in Draw!1095 self.Name = Name1096 if not Phase['RMC']['RMCProfile']:1097 Atypes = Phase['General']['AtomTypes']1098 aTypes = dict(zip(Atypes,len(Atypes)*[0.10,]))1099 atSeq = list(aTypes.keys())1100 atOxid = [[atmdata.BVSoxid[atm][0],0.001] for atm in atSeq]1101 lenA = len(atSeq)1102 Pairs= []1103 for pair in [[' %s-%s'%(atSeq[i],atSeq[j]) for j in range(i,lenA)] for i in range(lenA)]:1104 Pairs += pair1105 Pairs = {pairs:[0.0,0.0,0.0] for pairs in Pairs}1106 BVSpairs = []1107 if lenA > 1:1108 for pair in [[' %s-%s'%(atSeq[i],atSeq[j]) for j in range(i+1,lenA)] for i in range(lenA)]:1109 BVSpairs += pair1110 BVS = {pairs:[0.0,0.0,0.0,0.0] for pairs in BVSpairs}1111 files = {'Neutron real space data; G(r): ':['',0.05,'G(r)','RMC',],1112 'Neutron reciprocal space data; F(Q): ':['',0.05,'F(Q)','RMC',],1113 'Neutron reciprocal space data; S(Q): ':['',0.05,'S(Q)','RMC',],1114 'Xray real space data; G(r): ':['',0.01,'G(r)','RMC',],1115 'Xray reciprocal space data; F(Q): ':['',0.01,'F(Q)','RMC',],}1116 runTimes = [10.,1.]1117 metadata = {'title':'none','owner':'no one','date':str(time.ctime()),'temperature':'300K',1118 'material':'nothing','phase':'vacuum','comment':'none ','source':'nowhere'}1119 Phase['RMC']['RMCProfile'] = {'SuperCell':[1,1,1],'UseSampBrd':[True,True],'aTypes':aTypes,1120 'atSeq':atSeq,'Pairs':Pairs,'histogram':['',1.0],'files':files,'metadata':metadata,1121 'runTimes':runTimes,'ReStart':False,'BVS':BVS,'Oxid':atOxid,'useBVS':False,1122 'AveCN':[],'FxCN':[]}1123 self.RMCPdict = Phase['RMC']['RMCProfile']1124 self.Phase = Phase1125 self.Draw()1126 1127 def Draw(self):1128 1129 def OnHisto(event):1130 self.RMCPdict['histogram'][0] = histo.GetStringSelection()1131 1132 def OnAtSel(event):1133 Obj = event.GetEventObject()1134 itype = Indx[Obj.GetId()]1135 tid = self.RMCPdict['atSeq'].index(Obj.GetStringSelection())1136 if itype < nTypes:1137 if itype == tid:1138 tid += 11139 self.RMCPdict['atSeq'] = G2lat.SwapItems(self.RMCPdict['atSeq'],itype,tid)1140 wx.CallAfter(self.Draw)1141 1142 def OnValSel(event):1143 Obj = event.GetEventObject()1144 itype = Indx[Obj.GetId()]1145 self.RMCPdict['Oxid'][itype][0] = Obj.GetStringSelection()1146 wx.CallAfter(self.Draw)1147 1148 def OnSize(event):1149 self.RMCPdict['UseSampBrd'][0] = samSize.GetValue()1150 1151 def OnStrain(event):1152 self.RMCPdict['UseSampBrd'][1] = strain.GetValue()1153 1154 def OnFileSel(event):1155 Obj = event.GetEventObject()1156 fil = Indx[Obj.GetId()]1157 dlg = wx.FileDialog(self.panel, 'Choose '+fil+'NB: do not change directory; must be a local file',1158 '.',style=wx.FD_OPEN,wildcard=fil+'(*.*)|*.*')1159 if dlg.ShowModal() == wx.ID_OK:1160 fName = os.path.split(dlg.GetPath())[1]1161 if os.path.exists(fName):1162 self.RMCPdict['files'][fil][0] = fName1163 dlg.Destroy()1164 else:1165 dlg.Destroy()1166 return1167 wx.CallAfter(self.Draw)1168 1169 def OnFileFormat(event):1170 Obj = event.GetEventObject()1171 fil = Indx[Obj.GetId()]1172 self.RMCPdict['files'][fil][3] = Obj.GetStringSelection()1173 1174 def SetRestart(invalid,value,tc):1175 self.RMCPdict['ReStart'] = True1176 self.OKBtn.SetLabel('Restart')1177 1178 def OnUseBVS(event):1179 self.RMCPdict['useBVS'] = not self.RMCPdict['useBVS']1180 wx.CallAfter(self.Draw)1181 1182 def OnResetBVS(event):1183 Obj = event.GetEventObject()1184 pair = Indx[Obj.GetId()]1185 pId = [key for key in self.RMCPdict['BVS']].index(pair)+11186 nId = len(self.RMCPdict['BVS'])+11187 dist = G2elem.GetBVS(pair,self.RMCPdict['atSeq'],self.RMCPdict['Oxid'])1188 if dist:1189 self.RMCPdict['BVS'][pair] = [dist,0.37,3.0]1190 bvsCh = bvsSizer.GetChildren()1191 addr = 2*nId+pId1192 bvsCh[addr].Window.SetValue('%6.3f'%dist)1193 bvsCh[addr+nId].Window.SetValue('0.37')1194 bvsCh[addr+2*nId].Window.SetValue('3.00')1195 1196 def OnAddFxCN(event):1197 self.RMCPdict['FxCN'].append(['','',0.0,2.0,6,1.0,0.001])1198 wx.CallAfter(self.Draw)1199 1200 def OnDelFxCN(event):1201 Obj = event.GetEventObject()1202 fxCN = Indx[Obj.GetId()]1203 del self.RMCPdict['FxCN'][fxCN]1204 wx.CallAfter(self.Draw)1205 1206 def OnFxcnAtSel(event):1207 Obj = event.GetEventObject()1208 ifxCN,i = Indx[Obj.GetId()]1209 self.RMCPdict['FxCN'][ifxCN][i] = Obj.GetStringSelection()1210 1211 def OnAddAveCN(event):1212 self.RMCPdict['AveCN'].append(['','',0.0,2.0,6.,0.001])1213 wx.CallAfter(self.Draw)1214 1215 def OnDelAvCN(event):1216 Obj = event.GetEventObject()1217 fxCN = Indx[Obj.GetId()]1218 del self.RMCPdict['AveCN'][fxCN]1219 wx.CallAfter(self.Draw)1220 1221 def OnAvcnAtSel(event):1222 Obj = event.GetEventObject()1223 ifxCN,i = Indx[Obj.GetId()]1224 self.RMCPdict['AveCN'][ifxCN][i] = Obj.GetStringSelection()1225 1226 Indx = {}1227 #patches1228 if 'runTimes' not in self.RMCPdict:1229 self.RMCPdict['runTimes'] = [10.0,1.0]1230 lenA = len(self.RMCPdict['atSeq'])1231 if 'Oxid' not in self.RMCPdict:1232 self.RMCPdict['Oxid'] = [[atmdata.BVSoxid[atm][0],0.001] for atm in self.RMCPdict['atSeq']]1233 Pairs= []1234 for pair in [[' %s-%s'%(self.RMCPdict['atSeq'][i],self.RMCPdict['atSeq'][j]) for j in range(i,lenA)] for i in range(lenA)]:1235 Pairs += pair1236 self.RMCPdict['Pairs'] = dict(zip(Pairs,[self.RMCPdict['Pairs'].get(pair,[0.0,0.0,0.0]) for pair in Pairs]))1237 BVSpairs = []1238 if 'BVS' not in self.RMCPdict:1239 self.RMCPdict['useBVS'] = False1240 self.RMCPdict['BVS'] = {}1241 if lenA > 1:1242 for pair in [[' %s-%s'%(self.RMCPdict['atSeq'][i],self.RMCPdict['atSeq'][j]) for j in range(i+1,lenA)] for i in range(lenA)]:1243 BVSpairs += pair1244 self.RMCPdict['BVS'] = dict(zip(BVSpairs,[self.RMCPdict['BVS'].get(pair,[0.0,0.0,0.0]) for pair in BVSpairs]))1245 if 'FxCN' not in self.RMCPdict:1246 self.RMCPdict.update({'AveCN':[],'FxCN':[]})1247 1248 #end patches1249 self.panel.Destroy()1250 self.panel = wxscroll.ScrolledPanel(self,style = wx.DEFAULT_DIALOG_STYLE,size=(700,500))1251 mainSizer = wx.BoxSizer(wx.VERTICAL)1252 mainSizer.Add(wx.StaticText(self.panel,label=' Enter metadata items:'),0,WACV)1253 metalist = ['title','owner','material','phase','comment','source','temperature',]1254 metaSizer = wx.FlexGridSizer(0,2,5,5)1255 for item in metalist:1256 metaSizer.Add(wx.StaticText(self.panel,label=' Metadata item: '+item+' '),0,WACV)1257 metaSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['metadata'],item),0,WACV)1258 mainSizer.Add(metaSizer,0,WACV)1259 1260 G2G.HorizontalLine(mainSizer,self.panel)1261 timeSizer = wx.BoxSizer(wx.HORIZONTAL)1262 timeSizer.Add(wx.StaticText(self.panel,label=' Total running time (min): '),0,WACV)1263 timeSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['runTimes'],0,min=0.),0,WACV)1264 timeSizer.Add(wx.StaticText(self.panel,label=' Save interval time (min): '),0,WACV)1265 timeSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['runTimes'],1,min=0.1,max=20.),0,WACV)1266 mainSizer.Add(timeSizer,0,WACV)1267 mainSizer.Add(wx.StaticText(self.panel,label=' Lattice multipliers; if changed will force reset of atom positions:'),0,WACV)1268 superSizer = wx.BoxSizer(wx.HORIZONTAL)1269 axes = ['X','Y','Z']1270 for i,ax in enumerate(axes):1271 superSizer.Add(wx.StaticText(self.panel,label=' %s-axis: '%ax),0,WACV)1272 superSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['SuperCell'],i,min=1,max=20,size=(50,25),OnLeave=SetRestart),0,WACV)1273 mainSizer.Add(superSizer,0,WACV)1274 mainSizer.Add(wx.StaticText(self.panel,label=' NB: be sure to set cations first && anions last in atom ordering'),0,WACV)1275 nTypes = len(self.RMCPdict['aTypes'])1276 atmChoice = wx.FlexGridSizer(nTypes+1,5,5)1277 atmChoice.Add(wx.StaticText(self.panel,label=' Set atom ordering: '),0,WACV)1278 for iType in range(nTypes):1279 atChoice = self.RMCPdict['atSeq'][iType:]1280 atmSel = wx.ComboBox(self.panel,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)1281 atmSel.SetStringSelection(self.RMCPdict['atSeq'][iType])1282 atmSel.Bind(wx.EVT_COMBOBOX,OnAtSel)1283 Indx[atmSel.GetId()] = iType1284 atmChoice.Add(atmSel,0,WACV)1285 if self.RMCPdict['useBVS']:1286 atmChoice.Add(wx.StaticText(self.panel,label=' Select valence: '),0,WACV)1287 for itype in range(nTypes):1288 valChoice = atmdata.BVSoxid[self.RMCPdict['atSeq'][itype]]1289 valSel = wx.ComboBox(self.panel,choices=valChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)1290 valSel.SetStringSelection(self.RMCPdict['Oxid'][itype][0])1291 valSel.Bind(wx.EVT_COMBOBOX,OnValSel)1292 Indx[valSel.GetId()] = itype1293 atmChoice.Add(valSel,0,WACV)1294 atmChoice.Add(wx.StaticText(self.panel,label=' BVS weight: '),0,WACV)1295 for itype in range(nTypes):1296 atmChoice.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['Oxid'][itype],1,min=0.),0,WACV)1297 atmChoice.Add(wx.StaticText(self.panel,label=' Set max shift: '),0,WACV)1298 for iType in range(nTypes):1299 atId = self.RMCPdict['atSeq'][iType]1300 atmChoice.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['aTypes'],atId,min=0.,max=1.),0,WACV)1301 mainSizer.Add(atmChoice,0,WACV)1302 1303 G2G.HorizontalLine(mainSizer,self.panel)1304 mainSizer.Add(wx.StaticText(self.panel,label=' Enter constraints && restraints:'),0,WACV)1305 mainSizer.Add(wx.StaticText(self.panel,label=' Set minimum && maximum distances for:'),0,WACV)1306 pairSizer = wx.FlexGridSizer(len(self.RMCPdict['Pairs'])+1,5,5)1307 pairSizer.Add((5,5),0)1308 for pair in self.RMCPdict['Pairs']:1309 pairSizer.Add(wx.StaticText(self.panel,label=pair),0,WACV)1310 pairSizer.Add(wx.StaticText(self.panel,label='%14s'%' Hard min: '),0,WACV)1311 for pair in self.RMCPdict['Pairs']:1312 pairSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['Pairs'][pair],0,min=0.,max=10.,size=(50,25)),0,WACV)1313 pairSizer.Add(wx.StaticText(self.panel,label='%14s'%' Search from: '),0,WACV)1314 for pair in self.RMCPdict['Pairs']:1315 pairSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['Pairs'][pair],1,min=self.RMCPdict['Pairs'][pair][0],max=10.,size=(50,25)),0,WACV)1316 pairSizer.Add(wx.StaticText(self.panel,label='%14s'%'to: '),0,WACV)1317 for pair in self.RMCPdict['Pairs']:1318 pairSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['Pairs'][pair],2,min=0.,max=10.,size=(50,25)),0,WACV)1319 mainSizer.Add(pairSizer,0,WACV)1320 1321 G2G.HorizontalLine(mainSizer,self.panel)1322 useBVS = wx.CheckBox(self.panel,label=' Use bond valence sum restraints for (set to 0 for non-bonded ones):')1323 useBVS.SetValue(self.RMCPdict.get('useBVS',False))1324 useBVS.Bind(wx.EVT_CHECKBOX,OnUseBVS)1325 mainSizer.Add(useBVS,0,WACV)1326 if self.RMCPdict.get('useBVS',False):1327 bvsSizer = wx.FlexGridSizer(len(self.RMCPdict['BVS'])+1,5,5)1328 bvsSizer.Add((5,5),0)1329 for pair in self.RMCPdict['BVS']:1330 bvsSizer.Add(wx.StaticText(self.panel,label=pair),0,WACV)1331 bvsSizer.Add(wx.StaticText(self.panel,label=' Reset:'),0,WACV)1332 for pair in self.RMCPdict['BVS']:1333 reset = wx.Button(self.panel,label='Yes')1334 bvsSizer.Add(reset,0,WACV)1335 reset.Bind(wx.EVT_BUTTON,OnResetBVS)1336 Indx[reset.GetId()] = pair1337 bvsSizer.Add(wx.StaticText(self.panel,label=' Bond length:'),0,WACV)1338 for pair in self.RMCPdict['BVS']:1339 bvsSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['BVS'][pair],0,min=0.,max=10.,size=(50,25)),0,WACV)1340 bvsSizer.Add(wx.StaticText(self.panel,label=' B constant (0.37): '),0,WACV)1341 for pair in self.RMCPdict['BVS']:1342 bvsSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['BVS'][pair],1,min=0.,max=10.,size=(50,25)),0,WACV)1343 bvsSizer.Add(wx.StaticText(self.panel,label=' Cut off: '),0,WACV)1344 for pair in self.RMCPdict['BVS']:1345 bvsSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['BVS'][pair],2,min=0.,max=10.,size=(50,25)),0,WACV)1346 mainSizer.Add(bvsSizer,0,WACV)1347 1348 G2G.HorizontalLine(mainSizer,self.panel)1349 fxcnBox = wx.BoxSizer(wx.HORIZONTAL)1350 fxcnAdd = wx.Button(self.panel,label='Add')1351 fxcnAdd.Bind(wx.EVT_BUTTON,OnAddFxCN)1352 fxcnBox.Add(fxcnAdd,0,WACV)1353 fxcnBox.Add(wx.StaticText(self.panel,label=' Fixed coordination number restraint: '),0,WACV)1354 mainSizer.Add(fxcnBox,0,WACV)1355 if len(self.RMCPdict['FxCN']):1356 atChoice = self.RMCPdict['atSeq']1357 fxcnSizer = wx.FlexGridSizer(8,5,5)1358 fxcnLabels = [' ','Atom-1','Atom-2','min dist','max dist','CN','fraction','weight']1359 for lab in fxcnLabels:1360 fxcnSizer.Add(wx.StaticText(self.panel,label=lab),0,WACV)1361 for ifx,fxCN in enumerate(self.RMCPdict['FxCN']):1362 delBtn = wx.Button(self.panel,label='Delete')1363 delBtn.Bind(wx.EVT_BUTTON,OnDelFxCN)1364 Indx[delBtn.GetId()] = ifx1365 fxcnSizer.Add(delBtn,0,WACV)1366 for i in [0,1]:1367 atmSel = wx.ComboBox(self.panel,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)1368 atmSel.SetStringSelection(fxCN[i])1369 atmSel.Bind(wx.EVT_COMBOBOX,OnFxcnAtSel)1370 Indx[atmSel.GetId()] = [ifx,i]1371 fxcnSizer.Add(atmSel,0,WACV)1372 fxcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,2,min=0.,max=5.,size=(50,25)),0,WACV)1373 fxcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,3,min=0.,max=5.,size=(50,25)),0,WACV)1374 fxcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,4,min=1,max=12,size=(50,25)),0,WACV)1375 fxcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,5,min=0.,max=1.,size=(50,25)),0,WACV)1376 fxcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,6,min=0.,size=(50,25)),0,WACV)1377 mainSizer.Add(fxcnSizer,0,WACV)1378 1379 G2G.HorizontalLine(mainSizer,self.panel)1380 avcnBox = wx.BoxSizer(wx.HORIZONTAL)1381 avcnAdd = wx.Button(self.panel,label='Add')1382 avcnAdd.Bind(wx.EVT_BUTTON,OnAddAveCN)1383 avcnBox.Add(avcnAdd,0,WACV)1384 avcnBox.Add(wx.StaticText(self.panel,label=' Average coordination number restraint: '),0,WACV)1385 mainSizer.Add(avcnBox,0,WACV)1386 if len(self.RMCPdict['AveCN']):1387 atChoice = self.RMCPdict['atSeq']1388 avcnSizer = wx.FlexGridSizer(7,5,5)1389 fxcnLabels = [' ','Atom-1','Atom-2','min dist','max dist','CN','weight']1390 for lab in fxcnLabels:1391 avcnSizer.Add(wx.StaticText(self.panel,label=lab),0,WACV)1392 for ifx,fxCN in enumerate(self.RMCPdict['FxCN']):1393 delBtn = wx.Button(self.panel,label='Delete')1394 delBtn.Bind(wx.EVT_BUTTON,OnDelAvCN)1395 Indx[delBtn.GetId()] = ifx1396 avcnSizer.Add(delBtn,0,WACV)1397 for i in [0,1]:1398 atmSel = wx.ComboBox(self.panel,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY)1399 atmSel.SetStringSelection(fxCN[i])1400 atmSel.Bind(wx.EVT_COMBOBOX,OnAvcnAtSel)1401 Indx[atmSel.GetId()] = [ifx,i]1402 avcnSizer.Add(atmSel,0,WACV)1403 avcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,2,min=0.,max=5.,size=(50,25)),0,WACV)1404 avcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,3,min=0.,max=5.,size=(50,25)),0,WACV)1405 avcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,4,min=1.,max=12.,size=(50,25)),0,WACV)1406 avcnSizer.Add(G2G.ValidatedTxtCtrl(self.panel,fxCN,5,min=0.,size=(50,25)),0,WACV)1407 mainSizer.Add(avcnSizer,0,WACV)1408 1409 G2G.HorizontalLine(mainSizer,self.panel)1410 mainSizer.Add(wx.StaticText(self.panel,label=' Select data:'),0,WACV)1411 histograms = self.Phase['Histograms']1412 histNames = list(histograms.keys())1413 mainSizer.Add(wx.StaticText(self.panel,label=' Select one histogram for Bragg processing:'),0,WACV)1414 histoSizer = wx.BoxSizer(wx.HORIZONTAL)1415 histo = wx.ComboBox(self.panel,choices=histNames,style=wx.CB_DROPDOWN|wx.TE_READONLY)1416 histo.SetStringSelection(self.RMCPdict['histogram'][0])1417 histo.Bind(wx.EVT_COMBOBOX,OnHisto)1418 histoSizer.Add(histo,0,WACV)1419 histoSizer.Add(wx.StaticText(self.panel,label=' Weight '),0,WACV)1420 histoSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['histogram'],1,min=0.,max=10000.,size=(50,25)),0,WACV)1421 1422 mainSizer.Add(histoSizer,0,WACV)1423 samSizer = wx.BoxSizer(wx.HORIZONTAL)1424 samSize = wx.CheckBox(self.panel,label=' Use size broadening?')1425 samSize.SetValue(self.RMCPdict['UseSampBrd'][0])1426 samSize.Bind(wx.EVT_CHECKBOX,OnSize)1427 strain = wx.CheckBox(self.panel,label=' Use mustrain broadening?')1428 strain.SetValue(self.RMCPdict['UseSampBrd'][1])1429 strain.Bind(wx.EVT_CHECKBOX,OnStrain)1430 samSizer.Add(samSize,0,WACV)1431 samSizer.Add(strain,0,WACV)1432 mainSizer.Add(samSizer,0,WACV)1433 title = ' Select data for processing:'1434 mainSizer.Add(wx.StaticText(self.panel,label=title),0,WACV)1435 fileSizer = wx.FlexGridSizer(4,5,5)1436 Formats = ['RMC','GUDRUN','STOG']1437 Heads = [' ','Format','Weight','Name']1438 for head in Heads:1439 fileSizer.Add(wx.StaticText(self.panel,label=head),0,WACV)1440 for fil in self.RMCPdict['files']:1441 filSel = wx.Button(self.panel,label='Select')1442 filSel.Bind(wx.EVT_BUTTON,OnFileSel)1443 Indx[filSel.GetId()] = fil1444 fileSizer.Add(filSel,0,WACV)1445 if self.RMCPdict['files'][fil][0]:1446 nform = 31447 if 'Xray' in fil: nform = 11448 fileFormat = wx.ComboBox(self.panel,choices=Formats[:nform],style=wx.CB_DROPDOWN|wx.TE_READONLY)1449 fileFormat.SetStringSelection(self.RMCPdict['files'][fil][3])1450 Indx[fileFormat.GetId()] = fil1451 fileFormat.Bind(wx.EVT_COMBOBOX,OnFileFormat)1452 fileSizer.Add(fileFormat,0,WACV)1453 fileSizer.Add(G2G.ValidatedTxtCtrl(self.panel,self.RMCPdict['files'][fil],1),0,WACV)1454 if not self.RMCPdict['files'][fil][0]:1455 fileSizer.Add((5,5),0)1456 fileSizer.Add((5,5),0)1457 fileSizer.Add(wx.StaticText(self.panel,label=fil+self.RMCPdict['files'][fil][0]),0,WACV)1458 mainSizer.Add(fileSizer,0,WACV)1459 1460 mainSizer.Add(wx.StaticText(self.panel,label=' WARNING: this can take time - be patient'),0,WACV)1461 btnSizer = wx.BoxSizer(wx.HORIZONTAL)1462 self.OKBtn = wx.Button(self.panel,-1,"OK")1463 self.OKBtn.Bind(wx.EVT_BUTTON, self.OnOK)1464 btnSizer.Add(self.OKBtn)1465 CancelBtn = wx.Button(self.panel,-1,'Cancel')1466 CancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel)1467 btnSizer.Add(CancelBtn)1468 1469 1470 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)1471 self.panel.SetSizer(mainSizer)1472 size = np.array(self.GetSize())1473 self.panel.SetupScrolling()1474 self.panel.SetAutoLayout(1)1475 size = [size[0]-5,size[1]-20] #this fiddling is needed for older wx!1476 self.panel.SetSize(size)1477 1478 def GetData(self):1479 'Returns the values from the dialog'1480 self.Phase.update(self.RMCPdict)1481 return self.Phase1482 1483 def OnOK(self,event):1484 parent = self.GetParent()1485 parent.Raise()1486 self.EndModal(wx.ID_OK)1487 1488 def OnCancel(self,event):1489 parent = self.GetParent()1490 parent.Raise()1491 self.EndModal(wx.ID_CANCEL)1492 1493 1086 1494 1087 class SetUpFullrmcDialog(wx.Dialog): … … 4830 4423 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_LOADRMC,True) 4831 4424 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_SAVERMC,True) 4425 if G2frame.FRMC.GetSizer(): 4426 G2frame.FRMC.GetSizer().Clear(True) 4832 4427 mainSizer = wx.BoxSizer(wx.VERTICAL) 4833 4428 runFile = ' ' … … 4844 4439 # G2frame.runtext.SetFont(font1) 4845 4440 mainSizer.Add(G2frame.runtext) 4846 else: 4847 pass 4848 4849 4441 elif G2frame.RMCchoice == 'RMCProfile': 4442 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' RMCProfile setup:')) 4443 if not data['RMC']['RMCProfile']: 4444 Atypes = data['General']['AtomTypes'] 4445 aTypes = dict(zip(Atypes,len(Atypes)*[0.10,])) 4446 atSeq = list(aTypes.keys()) 4447 atOxid = [[atmdata.BVSoxid[atm][0],0.001] for atm in atSeq] 4448 lenA = len(atSeq) 4449 Pairs= [] 4450 for pair in [[' %s-%s'%(atSeq[i],atSeq[j]) for j in range(i,lenA)] for i in range(lenA)]: 4451 Pairs += pair 4452 Pairs = {pairs:[0.0,0.0,0.0] for pairs in Pairs} 4453 BVSpairs = [] 4454 if lenA > 1: 4455 for pair in [[' %s-%s'%(atSeq[i],atSeq[j]) for j in range(i+1,lenA)] for i in range(lenA)]: 4456 BVSpairs += pair 4457 BVS = {pairs:[0.0,0.0,0.0,0.0] for pairs in BVSpairs} 4458 files = {'Neutron real space data; G(r): ':['',0.05,'G(r)','RMC',], 4459 'Neutron reciprocal space data; F(Q): ':['',0.05,'F(Q)','RMC',], 4460 'Neutron reciprocal space data; S(Q): ':['',0.05,'S(Q)','RMC',], 4461 'Xray real space data; G(r): ':['',0.01,'G(r)','RMC',], 4462 'Xray reciprocal space data; F(Q): ':['',0.01,'F(Q)','RMC',],} 4463 runTimes = [10.,1.] 4464 metadata = {'title':'none','owner':'no one','date':str(time.ctime()),'temperature':'300K', 4465 'material':'nothing','phase':'vacuum','comment':'none ','source':'nowhere'} 4466 data['RMC']['RMCProfile'] = {'SuperCell':[1,1,1],'UseSampBrd':[True,True],'aTypes':aTypes, 4467 'atSeq':atSeq,'Pairs':Pairs,'histogram':['',1.0],'files':files,'metadata':metadata, 4468 'runTimes':runTimes,'ReStart':[False,False],'BVS':BVS,'Oxid':atOxid,'useBVS':False, 4469 'AveCN':[],'FxCN':[],'Potentials':{'Angles':[],'Angle search':10.,'Stretch':[],'Stretch search':10.}} 4470 RMCPdict = data['RMC']['RMCProfile'] 4471 #patches 4472 if 'runTimes' not in RMCPdict: 4473 RMCPdict['runTimes'] = [10.0,1.0] 4474 lenA = len(RMCPdict['atSeq']) 4475 if 'Oxid' not in RMCPdict: 4476 RMCPdict['Oxid'] = [[atmdata.BVSoxid[atm][0],0.001] for atm in RMCPdict['atSeq']] 4477 Pairs= [] 4478 for pair in [[' %s-%s'%(RMCPdict['atSeq'][i],RMCPdict['atSeq'][j]) for j in range(i,lenA)] for i in range(lenA)]: 4479 Pairs += pair 4480 RMCPdict['Pairs'] = dict(zip(Pairs,[RMCPdict['Pairs'].get(pair,[0.0,0.0,0.0]) for pair in Pairs])) 4481 BVSpairs = [] 4482 if 'BVS' not in RMCPdict: 4483 RMCPdict['useBVS'] = False 4484 RMCPdict['BVS'] = {} 4485 if lenA > 1: 4486 for pair in [[' %s-%s'%(RMCPdict['atSeq'][i],RMCPdict['atSeq'][j]) for j in range(i+1,lenA)] for i in range(lenA)]: 4487 BVSpairs += pair 4488 RMCPdict['BVS'] = dict(zip(BVSpairs,[RMCPdict['BVS'].get(pair,[0.0,0.0,0.0]) for pair in BVSpairs])) 4489 if 'FxCN' not in RMCPdict: 4490 RMCPdict.update({'AveCN':[],'FxCN':[]}) 4491 if 'Potentials' not in RMCPdict: 4492 RMCPdict.update({'Potentials':{'Angles':[],'Angle search':10.,'Stretch':[],'Stretch search':10.}}) 4493 #end patches 4494 4495 def OnHisto(event): 4496 RMCPdict['histogram'][0] = histo.GetStringSelection() 4497 4498 def OnSize(event): 4499 RMCPdict['UseSampBrd'][0] = samSize.GetValue() 4500 4501 def OnStrain(event): 4502 RMCPdict['UseSampBrd'][1] = strain.GetValue() 4503 4504 def OnFileSel(event): 4505 Obj = event.GetEventObject() 4506 fil = Indx[Obj.GetId()] 4507 dlg = wx.FileDialog(G2frame.FRMC, 'Choose '+fil+'NB: do not change directory; must be a local file', 4508 '.',style=wx.FD_OPEN,wildcard=fil+'(*.*)|*.*') 4509 if dlg.ShowModal() == wx.ID_OK: 4510 fName = os.path.split(dlg.GetPath())[1] 4511 if os.path.exists(fName): 4512 RMCPdict['files'][fil][0] = fName 4513 dlg.Destroy() 4514 else: 4515 dlg.Destroy() 4516 return 4517 wx.CallAfter(UpdateRMC) 4518 4519 def OnFileFormat(event): 4520 Obj = event.GetEventObject() 4521 fil = Indx[Obj.GetId()] 4522 RMCPdict['files'][fil][3] = Obj.GetStringSelection() 4523 4524 def SetRestart(invalid,value,tc): 4525 RMCPdict['ReStart'] = [True,True] 4526 4527 def OnUseBVS(event): 4528 RMCPdict['useBVS'] = not RMCPdict['useBVS'] 4529 wx.CallAfter(UpdateRMC) 4530 4531 def OnAddFxCN(event): 4532 RMCPdict['FxCN'].append(['','',0.0,2.0,6,1.0,0.001]) 4533 wx.CallAfter(UpdateRMC) 4534 4535 def OnAddAveCN(event): 4536 RMCPdict['AveCN'].append(['','',0.0,2.0,6.,0.001]) 4537 wx.CallAfter(UpdateRMC) 4538 4539 def OnAddAnglePot(event): 4540 RMCPdict['Potentials']['Angles'].append(['','','',0.,0.,0.,0.]) 4541 wx.CallAfter(UpdateRMC) 4542 4543 def OnAddBondPot(event): 4544 RMCPdict['Potentials']['Stretch'].append(['','',0.,0.]) 4545 wx.CallAfter(UpdateRMC) 4546 4547 def GetMetaSizer(): 4548 metalist = ['title','owner','material','phase','comment','source',] 4549 metaSizer = wx.FlexGridSizer(0,2,5,5) 4550 for item in metalist: 4551 metaSizer.Add(wx.StaticText(G2frame.FRMC,label=' Metadata item: '+item+' '),0,WACV) 4552 metaSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['metadata'],item),0,WACV) 4553 return metaSizer 4554 4555 def GetTimeSizer(): 4556 timeSizer = wx.BoxSizer(wx.HORIZONTAL) 4557 timeSizer.Add(wx.StaticText(G2frame.FRMC,label=' Total running time (min): '),0,WACV) 4558 timeSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['runTimes'],0,min=0.),0,WACV) 4559 timeSizer.Add(wx.StaticText(G2frame.FRMC,label=' Save interval time (min): '),0,WACV) 4560 timeSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['runTimes'],1,min=0.1,max=20.),0,WACV) 4561 return timeSizer 4562 4563 def GetSuperSizer(): 4564 superSizer = wx.BoxSizer(wx.HORIZONTAL) 4565 axes = ['X','Y','Z'] 4566 for i,ax in enumerate(axes): 4567 superSizer.Add(wx.StaticText(G2frame.FRMC,label=' %s-axis: '%ax),0,WACV) 4568 superSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['SuperCell'], 4569 i,min=1,max=20,size=(50,25),OnLeave=SetRestart),0,WACV) 4570 return superSizer 4571 4572 def GetAtmChoice(): 4573 4574 def OnAtSel(event): 4575 Obj = event.GetEventObject() 4576 itype = Indx[Obj.GetId()] 4577 tid = RMCPdict['atSeq'].index(Obj.GetStringSelection()) 4578 if itype < nTypes: 4579 if itype == tid: 4580 tid += 1 4581 RMCPdict['atSeq'] = G2lat.SwapItems(RMCPdict['atSeq'],itype,tid) 4582 wx.CallAfter(UpdateRMC) 4583 4584 def OnValSel(event): 4585 Obj = event.GetEventObject() 4586 itype = Indx[Obj.GetId()] 4587 RMCPdict['Oxid'][itype][0] = Obj.GetStringSelection() 4588 wx.CallAfter(UpdateRMC) 4589 4590 nTypes = len(RMCPdict['aTypes']) 4591 atmChoice = wx.FlexGridSizer(nTypes+1,5,5) 4592 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' Set atom ordering: '),0,WACV) 4593 for iType in range(nTypes): 4594 atChoice = RMCPdict['atSeq'][iType:] 4595 atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4596 atmSel.SetStringSelection(RMCPdict['atSeq'][iType]) 4597 atmSel.Bind(wx.EVT_COMBOBOX,OnAtSel) 4598 Indx[atmSel.GetId()] = iType 4599 atmChoice.Add(atmSel,0,WACV) 4600 if RMCPdict['useBVS']: 4601 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' Select valence: '),0,WACV) 4602 for itype in range(nTypes): 4603 valChoice = atmdata.BVSoxid[RMCPdict['atSeq'][itype]] 4604 valSel = wx.ComboBox(G2frame.FRMC,choices=valChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4605 valSel.SetStringSelection(RMCPdict['Oxid'][itype][0]) 4606 valSel.Bind(wx.EVT_COMBOBOX,OnValSel) 4607 Indx[valSel.GetId()] = itype 4608 atmChoice.Add(valSel,0,WACV) 4609 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' BVS weight: '),0,WACV) 4610 for itype in range(nTypes): 4611 atmChoice.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Oxid'][itype],1,min=0.),0,WACV) 4612 atmChoice.Add(wx.StaticText(G2frame.FRMC,label=' Set max shift: '),0,WACV) 4613 for iType in range(nTypes): 4614 atId = RMCPdict['atSeq'][iType] 4615 atmChoice.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['aTypes'],atId,min=0.,max=1.),0,WACV) 4616 return atmChoice 4617 4618 def GetPairSizer(): 4619 pairSizer = wx.FlexGridSizer(len(RMCPdict['Pairs'])+1,5,5) 4620 pairSizer.Add((5,5),0) 4621 for pair in RMCPdict['Pairs']: 4622 pairSizer.Add(wx.StaticText(G2frame.FRMC,label=pair),0,WACV) 4623 pairSizer.Add(wx.StaticText(G2frame.FRMC,label='%14s'%' Hard min: '),0,WACV) 4624 for pair in RMCPdict['Pairs']: 4625 pairSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Pairs'][pair],0,min=0.,max=10.,size=(50,25)),0,WACV) 4626 pairSizer.Add(wx.StaticText(G2frame.FRMC,label='%14s'%' Search from: '),0,WACV) 4627 for pair in RMCPdict['Pairs']: 4628 pairSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Pairs'][pair], 4629 1,min=0.,max=10.,size=(50,25)),0,WACV) 4630 pairSizer.Add(wx.StaticText(G2frame.FRMC,label='%14s'%'to: '),0,WACV) 4631 for pair in RMCPdict['Pairs']: 4632 pairSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Pairs'][pair],2,min=0.,max=10.,size=(50,25)),0,WACV) 4633 return pairSizer 4634 4635 def GetBvsSizer(): 4636 4637 def OnResetBVS(event): 4638 Obj = event.GetEventObject() 4639 pair = Indx[Obj.GetId()] 4640 pId = [key for key in RMCPdict['BVS']].index(pair)+1 4641 nId = len(RMCPdict['BVS'])+1 4642 dist = G2elem.GetBVS(pair,RMCPdict['atSeq'],RMCPdict['Oxid']) 4643 if dist: 4644 RMCPdict['BVS'][pair] = [dist,0.37,3.0] 4645 bvsCh = bvsSizer.GetChildren() 4646 addr = 2*nId+pId 4647 bvsCh[addr].Window.SetValue('%6.3f'%dist) 4648 bvsCh[addr+nId].Window.SetValue('0.37') 4649 bvsCh[addr+2*nId].Window.SetValue('3.00') 4650 4651 bvsSizer = wx.FlexGridSizer(len(RMCPdict['BVS'])+1,5,5) 4652 bvsSizer.Add((5,5),0) 4653 for pair in RMCPdict['BVS']: 4654 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=pair),0,WACV) 4655 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' Reset:'),0,WACV) 4656 for pair in RMCPdict['BVS']: 4657 reset = wx.Button(G2frame.FRMC,label='Yes') 4658 bvsSizer.Add(reset,0,WACV) 4659 reset.Bind(wx.EVT_BUTTON,OnResetBVS) 4660 Indx[reset.GetId()] = pair 4661 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' Bond length:'),0,WACV) 4662 for pair in RMCPdict['BVS']: 4663 bvsSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['BVS'][pair],0,min=0.,max=10.,size=(50,25)),0,WACV) 4664 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' B constant (0.37): '),0,WACV) 4665 for pair in RMCPdict['BVS']: 4666 bvsSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['BVS'][pair],1,min=0.,max=10.,size=(50,25)),0,WACV) 4667 bvsSizer.Add(wx.StaticText(G2frame.FRMC,label=' Cut off: '),0,WACV) 4668 for pair in RMCPdict['BVS']: 4669 bvsSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['BVS'][pair],2,min=0.,max=10.,size=(50,25)),0,WACV) 4670 return bvsSizer 4671 4672 def GetFxcnSizer(): 4673 4674 def OnDelFxCN(event): 4675 Obj = event.GetEventObject() 4676 fxCN = Indx[Obj.GetId()] 4677 del RMCPdict['FxCN'][fxCN] 4678 wx.CallAfter(UpdateRMC) 4679 4680 def OnFxcnAtSel(event): 4681 Obj = event.GetEventObject() 4682 ifxCN,i = Indx[Obj.GetId()] 4683 RMCPdict['FxCN'][ifxCN][i] = Obj.GetStringSelection() 4684 4685 fxcnSizer = wx.FlexGridSizer(8,5,5) 4686 atChoice = RMCPdict['atSeq'] 4687 fxcnLabels = [' ','Atom-1','Atom-2','min dist','max dist','CN','fraction','weight'] 4688 for lab in fxcnLabels: 4689 fxcnSizer.Add(wx.StaticText(G2frame.FRMC,label=lab),0,WACV) 4690 for ifx,fxCN in enumerate(RMCPdict['FxCN']): 4691 delBtn = wx.Button(G2frame.FRMC,label='Delete') 4692 delBtn.Bind(wx.EVT_BUTTON,OnDelFxCN) 4693 Indx[delBtn.GetId()] = ifx 4694 fxcnSizer.Add(delBtn,0,WACV) 4695 for i in [0,1]: 4696 atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4697 atmSel.SetStringSelection(fxCN[i]) 4698 atmSel.Bind(wx.EVT_COMBOBOX,OnFxcnAtSel) 4699 Indx[atmSel.GetId()] = [ifx,i] 4700 fxcnSizer.Add(atmSel,0,WACV) 4701 fxcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,2,min=0.,max=5.,size=(50,25)),0,WACV) 4702 fxcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,3,min=0.,max=5.,size=(50,25)),0,WACV) 4703 fxcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,4,min=1,max=12,size=(50,25)),0,WACV) 4704 fxcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,5,min=0.,max=1.,size=(50,25)),0,WACV) 4705 fxcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,6,min=0.,size=(50,25)),0,WACV) 4706 return fxcnSizer 4707 4708 def GetAvcnSizer(): 4709 4710 def OnDelAvCN(event): 4711 Obj = event.GetEventObject() 4712 fxCN = Indx[Obj.GetId()] 4713 del RMCPdict['AveCN'][fxCN] 4714 wx.CallAfter(UpdateRMC) 4715 4716 def OnAvcnAtSel(event): 4717 Obj = event.GetEventObject() 4718 ifxCN,i = Indx[Obj.GetId()] 4719 RMCPdict['AveCN'][ifxCN][i] = Obj.GetStringSelection() 4720 4721 avcnSizer = wx.FlexGridSizer(7,5,5) 4722 atChoice = RMCPdict['atSeq'] 4723 fxcnLabels = [' ','Atom-1','Atom-2','min dist','max dist','CN','weight'] 4724 for lab in fxcnLabels: 4725 avcnSizer.Add(wx.StaticText(G2frame.FRMC,label=lab),0,WACV) 4726 for ifx,fxCN in enumerate(RMCPdict['FxCN']): 4727 delBtn = wx.Button(G2frame.FRMC,label='Delete') 4728 delBtn.Bind(wx.EVT_BUTTON,OnDelAvCN) 4729 Indx[delBtn.GetId()] = ifx 4730 avcnSizer.Add(delBtn,0,WACV) 4731 for i in [0,1]: 4732 atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4733 atmSel.SetStringSelection(fxCN[i]) 4734 atmSel.Bind(wx.EVT_COMBOBOX,OnAvcnAtSel) 4735 Indx[atmSel.GetId()] = [ifx,i] 4736 avcnSizer.Add(atmSel,0,WACV) 4737 avcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,2,min=0.,max=5.,size=(50,25)),0,WACV) 4738 avcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,3,min=0.,max=5.,size=(50,25)),0,WACV) 4739 avcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,4,min=1.,max=12.,size=(50,25)),0,WACV) 4740 avcnSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,fxCN,5,min=0.,size=(50,25)),0,WACV) 4741 return avcnSizer 4742 4743 def GetAngleSizer(): 4744 4745 def OnDelAngle(event): 4746 Obj = event.GetEventObject() 4747 angle = Indx[Obj.GetId()] 4748 del RMCPdict['Potentials']['Angles'][angle] 4749 wx.CallAfter(UpdateRMC) 4750 4751 def OnAngleAtSel(event): 4752 Obj = event.GetEventObject() 4753 angle,i = Indx[Obj.GetId()] 4754 RMCPdict['Potentials']['Angles'][angle][i] = Obj.GetStringSelection() 4755 4756 def SetRestart1(invalid,value,tc): 4757 RMCPdict['ReStart'][1] = True 4758 4759 atChoice = RMCPdict['atSeq'] 4760 angleSizer = wx.FlexGridSizer(8,5,5) 4761 fxcnLabels = [' ','Atom-A','Atom-B','Atom-C',' ABC angle','AB dist','BC dist','potential'] 4762 for lab in fxcnLabels: 4763 angleSizer.Add(wx.StaticText(G2frame.FRMC,label=lab),0,WACV) 4764 for ifx,angle in enumerate(RMCPdict['Potentials']['Angles']): 4765 delBtn = wx.Button(G2frame.FRMC,label='Delete') 4766 delBtn.Bind(wx.EVT_BUTTON,OnDelAngle) 4767 Indx[delBtn.GetId()] = ifx 4768 angleSizer.Add(delBtn,0,WACV) 4769 for i in [0,1,2]: 4770 atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4771 atmSel.SetStringSelection(angle[i]) 4772 atmSel.Bind(wx.EVT_COMBOBOX,OnAngleAtSel) 4773 Indx[atmSel.GetId()] = [ifx,i] 4774 angleSizer.Add(atmSel,0,WACV) 4775 angleSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,angle,3,min=0.,max=180.,OnLeave=SetRestart1,size=(50,25)),0,WACV) 4776 angleSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,angle,4,min=0.5,max=5.,OnLeave=SetRestart1,size=(50,25)),0,WACV) 4777 angleSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,angle,5,min=0.5,max=5.,OnLeave=SetRestart1,size=(50,25)),0,WACV) 4778 angleSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,angle,6,min=0.,OnLeave=SetRestart1,size=(50,25)),0,WACV) 4779 return angleSizer 4780 4781 def GetBondSizer(): 4782 4783 def OnDelBond(event): 4784 Obj = event.GetEventObject() 4785 bond = Indx[Obj.GetId()] 4786 del RMCPdict['Potentials']['Stretch'][bond] 4787 wx.CallAfter(UpdateRMC) 4788 4789 def OnBondAtSel(event): 4790 Obj = event.GetEventObject() 4791 bond,i = Indx[Obj.GetId()] 4792 RMCPdict['Potentials']['Stretch'][bond][i] = Obj.GetStringSelection() 4793 4794 def SetRestart1(invalid,value,tc): 4795 RMCPdict['ReStart'][1] = True 4796 4797 atChoice = RMCPdict['atSeq'] 4798 bondSizer = wx.FlexGridSizer(5,5,5) 4799 fxcnLabels = [' ','Atom-A','Atom-B',' AB dist','potential'] 4800 for lab in fxcnLabels: 4801 bondSizer.Add(wx.StaticText(G2frame.FRMC,label=lab),0,WACV) 4802 for ifx,bond in enumerate(RMCPdict['Potentials']['Stretch']): 4803 delBtn = wx.Button(G2frame.FRMC,label='Delete') 4804 delBtn.Bind(wx.EVT_BUTTON,OnDelBond) 4805 Indx[delBtn.GetId()] = ifx 4806 bondSizer.Add(delBtn,0,WACV) 4807 for i in [0,1]: 4808 atmSel = wx.ComboBox(G2frame.FRMC,choices=atChoice,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4809 atmSel.SetStringSelection(bond[i]) 4810 atmSel.Bind(wx.EVT_COMBOBOX,OnBondAtSel) 4811 Indx[atmSel.GetId()] = [ifx,i] 4812 bondSizer.Add(atmSel,0,WACV) 4813 bondSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,bond,2,min=0.,max=5.,OnLeave=SetRestart1,size=(50,25)),0,WACV) 4814 bondSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,bond,3,min=0.,size=(50,25)),0,WACV) 4815 return bondSizer 4816 4817 Indx = {} 4818 4819 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Enter metadata items:'),0,WACV) 4820 mainSizer.Add(GetMetaSizer(),0,WACV) 4821 4822 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4823 mainSizer.Add(GetTimeSizer(),0,WACV) 4824 4825 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Lattice multipliers; if changed will force reset of atom positions:'),0,WACV) 4826 mainSizer.Add(GetSuperSizer(),0,WACV) 4827 4828 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' NB: be sure to set cations first && anions last in atom ordering'),0,WACV) 4829 mainSizer.Add(GetAtmChoice(),0,WACV) 4830 4831 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4832 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Enter constraints && restraints:'),0,WACV) 4833 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Set minimum && maximum distances for:'),0,WACV) 4834 mainSizer.Add(GetPairSizer(),0,WACV) 4835 4836 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4837 useBVS = wx.CheckBox(G2frame.FRMC,label=' Use bond valence sum restraints for (set to 0 for non-bonded ones):') 4838 useBVS.SetValue(RMCPdict.get('useBVS',False)) 4839 useBVS.Bind(wx.EVT_CHECKBOX,OnUseBVS) 4840 mainSizer.Add(useBVS,0,WACV) 4841 if RMCPdict.get('useBVS',False): 4842 mainSizer.Add(GetBvsSizer(),0,WACV) 4843 4844 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4845 fxcnBox = wx.BoxSizer(wx.HORIZONTAL) 4846 fxcnAdd = wx.Button(G2frame.FRMC,label='Add') 4847 fxcnAdd.Bind(wx.EVT_BUTTON,OnAddFxCN) 4848 fxcnBox.Add(fxcnAdd,0,WACV) 4849 fxcnBox.Add(wx.StaticText(G2frame.FRMC,label=' Fixed coordination number restraint: '),0,WACV) 4850 mainSizer.Add(fxcnBox,0,WACV) 4851 if len(RMCPdict['FxCN']): 4852 mainSizer.Add(GetFxcnSizer(),0,WACV) 4853 4854 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4855 avcnBox = wx.BoxSizer(wx.HORIZONTAL) 4856 avcnAdd = wx.Button(G2frame.FRMC,label='Add') 4857 avcnAdd.Bind(wx.EVT_BUTTON,OnAddAveCN) 4858 avcnBox.Add(avcnAdd,0,WACV) 4859 avcnBox.Add(wx.StaticText(G2frame.FRMC,label=' Average coordination number restraint: '),0,WACV) 4860 mainSizer.Add(avcnBox,0,WACV) 4861 if len(RMCPdict['AveCN']): 4862 mainSizer.Add(GetAvcnSizer(),0,WACV) 4863 4864 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4865 angpotBox = wx.BoxSizer(wx.HORIZONTAL) 4866 angpotAdd = wx.Button(G2frame.FRMC,label='Add') 4867 angpotAdd.Bind(wx.EVT_BUTTON,OnAddAnglePot) 4868 angpotBox.Add(angpotAdd,0,WACV) 4869 angpotBox.Add(wx.StaticText(G2frame.FRMC,label=' A-B-C angle potential restraints, search range (%): '),0,WACV) 4870 angpotBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Potentials'],'Angle search',min=0.,max=100.,size=(50,25)),0,WACV) 4871 mainSizer.Add(angpotBox,0,WACV) 4872 if len(RMCPdict['Potentials']['Angles']): 4873 mainSizer.Add(GetAngleSizer(),0,WACV) 4874 4875 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4876 bondpotBox = wx.BoxSizer(wx.HORIZONTAL) 4877 bondpotAdd = wx.Button(G2frame.FRMC,label='Add') 4878 bondpotAdd.Bind(wx.EVT_BUTTON,OnAddBondPot) 4879 bondpotBox.Add(bondpotAdd,0,WACV) 4880 bondpotBox.Add(wx.StaticText(G2frame.FRMC,label=' A-B stretch potential restraints, search range (%): '),0,WACV) 4881 bondpotBox.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['Potentials'],'Stretch search',min=0.,max=100.,size=(50,25)),0,WACV) 4882 mainSizer.Add(bondpotBox,0,WACV) 4883 if len(RMCPdict['Potentials']['Stretch']): 4884 mainSizer.Add(GetBondSizer(),0,WACV) 4885 4886 G2G.HorizontalLine(mainSizer,G2frame.FRMC) 4887 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Select data:'),0,WACV) 4888 histograms = data['Histograms'] 4889 histNames = list(histograms.keys()) 4890 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=' Select one histogram for Bragg processing:'),0,WACV) 4891 histoSizer = wx.BoxSizer(wx.HORIZONTAL) 4892 histo = wx.ComboBox(G2frame.FRMC,choices=histNames,style=wx.CB_DROPDOWN|wx.TE_READONLY) 4893 histo.SetStringSelection(RMCPdict['histogram'][0]) 4894 histo.Bind(wx.EVT_COMBOBOX,OnHisto) 4895 histoSizer.Add(histo,0,WACV) 4896 histoSizer.Add(wx.StaticText(G2frame.FRMC,label=' Weight '),0,WACV) 4897 histoSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['histogram'],1,min=0.,max=10000.,size=(50,25)),0,WACV) 4898 mainSizer.Add(histoSizer,0,WACV) 4899 4900 samSizer = wx.BoxSizer(wx.HORIZONTAL) 4901 samSize = wx.CheckBox(G2frame.FRMC,label=' Use size broadening?') 4902 samSize.SetValue(RMCPdict['UseSampBrd'][0]) 4903 samSize.Bind(wx.EVT_CHECKBOX,OnSize) 4904 strain = wx.CheckBox(G2frame.FRMC,label=' Use mustrain broadening?') 4905 strain.SetValue(RMCPdict['UseSampBrd'][1]) 4906 strain.Bind(wx.EVT_CHECKBOX,OnStrain) 4907 samSizer.Add(samSize,0,WACV) 4908 samSizer.Add(strain,0,WACV) 4909 mainSizer.Add(samSizer,0,WACV) 4910 title = ' Select data for processing:' 4911 mainSizer.Add(wx.StaticText(G2frame.FRMC,label=title),0,WACV) 4912 fileSizer = wx.FlexGridSizer(4,5,5) 4913 Formats = ['RMC','GUDRUN','STOG'] 4914 Heads = [' ','Format','Weight','Name'] 4915 for head in Heads: 4916 fileSizer.Add(wx.StaticText(G2frame.FRMC,label=head),0,WACV) 4917 for fil in RMCPdict['files']: 4918 filSel = wx.Button(G2frame.FRMC,label='Select') 4919 filSel.Bind(wx.EVT_BUTTON,OnFileSel) 4920 Indx[filSel.GetId()] = fil 4921 fileSizer.Add(filSel,0,WACV) 4922 if RMCPdict['files'][fil][0]: 4923 nform = 3 4924 if 'Xray' in fil: nform = 1 4925 fileFormat = wx.ComboBox(G2frame.FRMC,choices=Formats[:nform],style=wx.CB_DROPDOWN|wx.TE_READONLY) 4926 fileFormat.SetStringSelection(RMCPdict['files'][fil][3]) 4927 Indx[fileFormat.GetId()] = fil 4928 fileFormat.Bind(wx.EVT_COMBOBOX,OnFileFormat) 4929 fileSizer.Add(fileFormat,0,WACV) 4930 fileSizer.Add(G2G.ValidatedTxtCtrl(G2frame.FRMC,RMCPdict['files'][fil],1),0,WACV) 4931 if not RMCPdict['files'][fil][0]: 4932 fileSizer.Add((5,5),0) 4933 fileSizer.Add((5,5),0) 4934 fileSizer.Add(wx.StaticText(G2frame.FRMC,label=fil+RMCPdict['files'][fil][0]),0,WACV) 4935 mainSizer.Add(fileSizer,0,WACV) 4936 4850 4937 SetPhaseWindow(G2frame.FRMC,mainSizer) 4851 4938 … … 4906 4993 else: 4907 4994 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_RUNRMC,True) 4908 dlg = SetUpRMCProfileDialog(G2frame,Name=pName,Phase=data) 4909 if dlg.ShowModal() == wx.ID_OK: 4910 phase = dlg.GetData() 4911 RMCPdict = phase['RMC']['RMCProfile'] 4912 PWId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,RMCPdict['histogram'][0]) 4913 if PWId: 4914 print(G2pwd.MakeInst(G2frame,pName,data,RMCPdict['UseSampBrd'],PWId)+ ' written') 4915 backfile = G2pwd.MakeBack(G2frame,pName,PWId) 4916 if backfile is None: 4917 print(' Chebyschev-1 background not used; no .back file written') 4918 wx.MessageDialog(G2frame,' Chebyschev-1 background not used; '+ \ 4919 'no .back file written & RMCProfile will not run','Wrong background function',wx.OK).ShowModal() 4920 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_RUNRMC,False) 4921 return 4922 else: 4923 print(backfile+ ' written') 4924 print(G2pwd.MakeBragg(G2frame,pName,data,PWId)+ ' written') 4925 if RMCPdict.get('ReStart',False): 4926 print(G2pwd.MakeRMC6f(G2frame,pName,data,RMCPdict,PWId)+ ' written') 4927 print(G2pwd.MakeRMCPdat(G2frame,pName,data,RMCPdict,PWId)+ ' written') 4928 print('RMCProfile file build completed') 4929 RMCPdict['ReStart'] = False 4995 RMCPdict = data['RMC']['RMCProfile'] 4996 PWId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,RMCPdict['histogram'][0]) 4997 if PWId: 4998 print(G2pwd.MakeInst(G2frame,pName,data,RMCPdict['UseSampBrd'],PWId)+ ' written') 4999 backfile = G2pwd.MakeBack(G2frame,pName,PWId) 5000 if backfile is None: 5001 print(' Chebyschev-1 background not used; no .back file written') 5002 wx.MessageDialog(G2frame,' Chebyschev-1 background not used; '+ \ 5003 'no .back file written & RMCProfile will not run','Wrong background function',wx.OK).ShowModal() 5004 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_RUNRMC,False) 5005 return 4930 5006 else: 4931 print('RMCProfile file build failed - no histogram selected') 4932 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_RUNRMC,False) 5007 print(backfile+ ' written') 5008 print(G2pwd.MakeBragg(G2frame,pName,data,PWId)+ ' written') 5009 if RMCPdict['ReStart'][0]: 5010 if os.path.isfile(pName+'.his6f'): 5011 os.remove(pName+'.his6f') 5012 print(G2pwd.MakeRMC6f(G2frame,pName,data,RMCPdict,PWId)+ ' written') 5013 print(G2pwd.MakeRMCPdat(G2frame,pName,data,RMCPdict,PWId)+ ' written') 5014 print('RMCProfile file build completed') 5015 RMCPdict['ReStart'] = [False,False] 4933 5016 else: 4934 p ass4935 dlg.Destroy()5017 print('RMCProfile file build failed - no histogram selected') 5018 G2frame.dataWindow.FRMCDataEdit.Enable(G2G.wxID_RUNRMC,False) 4936 5019 4937 5020 def OnLoadRMC(event): … … 4940 5023 dlg = wx.FileDialog(G2frame, 'Choose fullrmc run file to open', '.', runFile, 4941 5024 wildcard='fullrmc run.py file (*.py)|*.py',style=wx.FD_OPEN| wx.FD_CHANGE_DIR) 4942 else:4943 dlg = wx.FileDialog(G2frame, 'Choose RMCProfile control file to open', '.', runFile,4944 wildcard='RMCProfile control file (*.dat)|*.dat|All files (*.*)|*.*',style=wx.FD_OPEN| wx.FD_CHANGE_DIR)4945 5025 try: 4946 5026 if dlg.ShowModal() == wx.ID_OK: … … 4959 5039 dlg = wx.FileDialog(G2frame, 'Choose fullrmc run.py file to save', '.', runFile, 4960 5040 wildcard='fullrmc run.py file (*.py)|*.py',style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) 4961 else:4962 dlg = wx.FileDialog(G2frame, 'Choose RMCProfile control file to save', '.', runFile,4963 wildcard='RMCProfile control file (*.dat)|*.dat|All files (*.*)|*.*',style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)4964 5041 try: 4965 5042 if dlg.ShowModal() == wx.ID_OK: … … 4975 5052 def OnRunRMC(event): 4976 5053 5054 generalData = data['General'] 5055 pName = generalData['Name'].replace(' ','_') 4977 5056 if G2frame.RMCchoice == 'fullrmc': 4978 5057 wx.MessageBox(''' For use of fullrmc, please cite: … … 5012 5091 doi: https://doi.org/10.1088/0953-8984/19/33/335218''', 5013 5092 caption='RMCProfile',style=wx.ICON_INFORMATION) 5093 if os.path.isfile(pName+'.neigh'): 5094 os.remove(pName+'.neigh') 5095 if os.path.isfile(pName+'.bonds'): 5096 os.remove(pName+'.bonds') 5097 if os.path.isfile(pName+'.triplets'): 5098 os.remove(pName+'.triplets') 5099 G2frame.OnFileSave(event) 5100 print (' GSAS-II project saved') 5014 5101 import subprocess as sb 5015 5102 generalData = data['General'] … … 5132 5219 labelY=r'$\mathsf{\chi^2}$',newPlot=True,Title='RMCP Chi^2 for '+pName, 5133 5220 lines=True,names=Names[3:]) 5134 UpdateRMC() 5221 5222 5135 5223 5136 5224 ################################################################################ -
trunk/GSASIIpwd.py
r4254 r4263 2107 2107 if useSamBrd[0]: 2108 2108 if 'ellipsoidal' not in Size[0]: #take the isotropic term only 2109 Xsb = 1.e-4*difC/Size[1][0] 2109 Xsb = 1.e-4*difC/Size[1][0]/2. 2110 2110 if useSamBrd[1]: 2111 2111 if 'generalized' not in Mustrain[0]: #take the isotropic term only 2112 Ysb = 1.e-6*difC*Mustrain[1][0] 2112 Ysb = 1.e-6*difC*Mustrain[1][0]/2. 2113 2113 prms = ['Bank', 2114 2114 'difC','difA','Zero','2-theta', … … 2123 2123 fl.write('%12.6e%14.6e%14.6e\n'%(inst[prms[5]][1],inst[prms[6]][1],inst[prms[7]][1])) 2124 2124 fl.write('%12.6e%14.6e%14.6e\n'%(inst[prms[8]][1],inst[prms[9]][1],inst[prms[10]][1])) 2125 fl.write('%12.6e%14.6e%14.6e%14.6e%14.6e\n'%(inst[prms[11]][1],inst[prms[12]][1]+ Ysb,inst[prms[13]][1]+Xsb,0.0,0.0))2125 fl.write('%12.6e%14.6e%14.6e%14.6e%14.6e\n'%(inst[prms[11]][1],inst[prms[12]][1]+Xsb,inst[prms[13]][1]+Ysb,0.0,0.0)) 2126 2126 fl.close() 2127 2127 else: … … 2129 2129 wave = G2mth.getWave(inst) 2130 2130 if 'ellipsoidal' not in Size[0]: #take the isotropic term only 2131 Xsb = 1.8*wave/(np.pi*Size[1][0]) 2131 Xsb = 1.8*wave/(np.pi*Size[1][0])/2. 2132 2132 if useSamBrd[1]: 2133 2133 if 'generalized' not in Mustrain[0]: #take the isotropic term only 2134 Ysb = 0.018*np.pi*Mustrain[1][0] 2134 Ysb = 0.018*np.pi*Mustrain[1][0]/2. 2135 2135 prms = ['Bank', 2136 2136 'Lam','Zero','Polariz.', … … 2168 2168 2169 2169 def MakeRMC6f(G2frame,Name,Phase,RMCPdict,PWId): 2170 2171 def findDup(Atoms): 2172 Dup = [] 2173 Fracs = [] 2174 for iat1,at1 in enumerate(Atoms): 2175 if any([at1[0] in dup for dup in Dup]): 2176 continue 2177 else: 2178 Dup.append([at1[0],]) 2179 Fracs.append([at1[6],]) 2180 for iat2,at2 in enumerate(Atoms[(iat1+1):]): 2181 if np.sum((np.array(at1[3:6])-np.array(at2[3:6]))**2) < 0.00001: 2182 Dup[-1] += [at2[0],] 2183 Fracs[-1]+= [at2[6],] 2184 return Dup,Fracs 2185 2170 2186 Meta = RMCPdict['metadata'] 2171 2187 Atseq = RMCPdict['atSeq'] … … 2173 2189 PWDdata = G2frame.GetPWDRdatafromTree(PWId) 2174 2190 generalData = Phase['General'] 2191 Dups,Fracs = findDup(Phase['Atoms']) 2192 Sfracs = [np.cumsum(fracs) for fracs in Fracs] 2175 2193 Sample = PWDdata['Sample Parameters'] 2176 2194 Meta['temperature'] = Sample['Temperature'] … … 2185 2203 Natm = np.count_nonzero(Natm-1) 2186 2204 Atoms = newPhase['Atoms'] 2205 Satoms = G2mth.sortArray(G2mth.sortArray(G2mth.sortArray(Atoms,5),4),3) 2206 Datoms = [[atom for atom in Satoms if atom[0] in dup] for dup in Dups] 2207 Natoms = [] 2208 for idup,dup in enumerate(Dups): 2209 ldup = len(dup) 2210 datoms = Datoms[idup] 2211 natm = len(datoms) 2212 i = 0 2213 while i < natm: 2214 atoms = datoms[i:i+ldup] 2215 try: 2216 atom = atoms[np.searchsorted(Sfracs[idup],rand.random())] 2217 Natoms.append(atom) 2218 except IndexError: #what about vacancies? 2219 pass 2220 i += ldup 2187 2221 NAtype = np.zeros(len(Atseq)) 2188 for atom in Atoms:2222 for atom in Natoms: 2189 2223 NAtype[Atseq.index(atom[1])] += 1 2190 2224 NAstr = ['%d'%i for i in NAtype] … … 2201 2235 fl.write('Atom types present: %s\n'%' '.join(Atseq)) 2202 2236 fl.write('Number of each atom type: %s\n'%' '.join(NAstr)) 2203 fl.write('Number of atoms: %d\n'%len( Atoms))2237 fl.write('Number of atoms: %d\n'%len(Natoms)) 2204 2238 fl.write('%-35s%4d%4d%4d\n'%('Supercell dimensions:',Supercell[0],Supercell[1],Supercell[2])) 2205 2239 fl.write('Cell (Ang/deg): %12.6f%12.6f%12.6f%12.6f%12.6f%12.6f\n'%( … … 2212 2246 nat = 0 2213 2247 for atm in Atseq: 2214 for iat,atom in enumerate( Atoms):2248 for iat,atom in enumerate(Natoms): 2215 2249 if atom[1] == atm: 2216 2250 nat += 1 … … 2238 2272 fname = Name+'.bragg' 2239 2273 fl = open(fname,'w') 2240 fl.write('%12d%6d%15.7f%15.4f\n'%(Ifin-Ibeg- 1,Bank,Scale,Vol))2274 fl.write('%12d%6d%15.7f%15.4f\n'%(Ifin-Ibeg-2,Bank,Scale,Vol)) 2241 2275 if 'T' in Inst['Type'][0]: 2242 2276 fl.write('%12s%12s\n'%(' TOF,ms',' I(obs)')) … … 2245 2279 else: 2246 2280 fl.write('%12s%12s\n'%(' 2-theta, deg',' I(obs)')) 2281 DT = np.diff(Data[0]) 2247 2282 for i in range(Ibeg,Ifin-1): 2248 fl.write('%11.6f%15.2f\n'%(Data[0][i] ,Data[1][i]))2283 fl.write('%11.6f%15.2f\n'%(Data[0][i]-DT[i],Data[1][i])) 2249 2284 fl.close() 2250 2285 return fname … … 2309 2344 fl.write('INPUT_CONFIGURATION_FORMAT :: rmc6f\n') 2310 2345 fl.write('SAVE_CONFIGURATION_FORMAT :: rmc6f\n') 2346 fl.write('\n') 2311 2347 fl.write('DISTANCE_WINDOW ::\n') 2312 2348 fl.write(' > MNDIST :: %s\n'%minD) 2313 2349 fl.write(' > MXDIST :: %s\n'%maxD) 2350 if len(RMCPdict['Potentials']['Stretch']) or len(RMCPdict['Potentials']['Stretch']): 2351 fl.write('\n') 2352 fl.write('POTENTIALS ::\n') 2353 if len(RMCPdict['Potentials']['Stretch']): 2354 fl.write(' > STRETCH_SEARCH :: %.1f%%\n'%RMCPdict['Potentials']['Stretch search']) 2355 for bond in RMCPdict['Potentials']['Stretch']: 2356 fl.write(' > STRETCH :: %s %s %.2f eV %.2f Ang\n'%(bond[0],bond[1],bond[3],bond[2])) 2357 if len(RMCPdict['Potentials']['Angles']): 2358 fl.write(' > ANGLE_SEARCH :: %.1f%%\n'%RMCPdict['Potentials']['Angle search']) 2359 for angle in RMCPdict['Potentials']['Angles']: 2360 fl.write(' > ANGLE :: %s %s %s %.2f eV %.2f deg %.2f Ang %.2f Ang\n'% 2361 (angle[1],angle[0],angle[2],angle[6],angle[3],angle[4],angle[5])) 2314 2362 if RMCPdict['useBVS']: 2315 2363 fl.write('BVS ::\n') … … 2364 2412 fl.write(' > REAL_SPACE_FIT :: 1 3000 1\n') 2365 2413 fl.write(' > REAL_SPACE_PARAMETERS :: 1 3000 %.4f\n'%Files[File][1]) 2414 fl.write('\n') 2366 2415 fl.write('BRAGG ::\n') 2367 2416 fl.write(' > BRAGG_SHAPE :: %s\n'%gsasType)
Note: See TracChangeset
for help on using the changeset viewer.