Changeset 1592
- Timestamp:
- Dec 2, 2014 2:16:00 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIindex.py
r1587 r1592 29 29 import GSASIIlattice as G2lat 30 30 import GSASIIpwd as G2pwd 31 import GSASIIspc as G2spc 32 import GSASIImath as G2mth 31 33 import scipy.optimize as so 32 34 … … 171 173 return [a,b,c,alp,bet,gam] 172 174 173 def calc_M20(peaks,HKL ):175 def calc_M20(peaks,HKL,ifX20=True): 174 176 'needs a doc string' 175 177 diff = 0 … … 197 199 else: 198 200 M20 = 0 199 M20 /= (1.+X20) 201 if ifX20: 202 M20 /= (1.+X20) 200 203 return M20,X20 201 204 … … 257 260 return X 258 261 259 def findMV(peaks,HKL,ssopt): 260 # import basinhopping as bh 261 print ssopt 262 return ssopt['ModVec'] 262 def findMV(peaks,controls,ssopt,Inst): 263 264 def Val2Vec(vec,Vref,values): 265 Vec = [] 266 i = 0 267 for j,r in enumerate(Vref): 268 if r: 269 if values.size > 1: 270 Vec.append(values[i]) 271 else: 272 Vec.append(values) 273 i += 1 274 else: 275 Vec.append(vec[j]) 276 return np.array(Vec) 277 278 def ZSSfunc(values,peaks,dmin,Inst,SGData,SSGData,vec,Vref,maxH,A,wave,Z): 279 Vec = Val2Vec(vec,Vref,values) 280 HKL = G2pwd.getHKLMpeak(dmin,Inst,SGData,SSGData,Vec,maxH,A) 281 Peaks = np.array(IndexSSPeaks(peaks,HKL)[1]).T 282 Qo = 1./Peaks[-2]**2 283 Qc = G2lat.calc_rDsqZSS(Peaks[4:8],A,Vec,Z,Peaks[0],wave) 284 return np.sum((Qo-Qc)**2) 285 286 if 'C' in Inst['Type'][0]: 287 wave = G2mth.getWave(Inst) 288 else: 289 difC = Inst['difC'][1] 290 SGData = G2spc.SpcGroup(controls[13])[1] 291 SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb']) 292 A = G2lat.cell2A(controls[6:12]) 293 Z = controls[1] 294 Vref = [True if x in ssopt['ssSymb'] else False for x in ['a','b','g']] 295 values = [] 296 ranges = [] 297 for v,r in zip(ssopt['ModVec'],Vref): 298 if r: 299 ranges += [slice(.02,.98,.05),] 300 values += [v,] 301 dmin = getDmin(peaks)-0.005 302 Peaks = np.copy(np.array(peaks).T) 303 result = so.brute(ZSSfunc,ranges,finish=so.fmin_cg, 304 args=(peaks,dmin,Inst,SGData,SSGData,ssopt['ModVec'],Vref,ssopt['maxH'],A,wave,Z)) 305 return Val2Vec(ssopt['ModVec'],Vref,result) 263 306 264 307 def IndexPeaks(peaks,HKL): … … 311 354 import bisect 312 355 N = len(HKL) 313 if N == 0: return False,peaks 356 Peaks = np.copy(peaks) 357 if N == 0: return False,Peaks 314 358 if len(peaks[0]) == 9: #add m column if missing 315 for peak in peaks:359 for peak in Peaks: 316 360 peak.insert(7,0) 317 361 hklds = list(np.array(HKL).T[4])+[1000.0,0.0,] 318 362 hklds.sort() # ascending sort - upper bound at end 319 363 hklmax = [0,0,0,0] 320 for ipk,peak in enumerate( peaks):364 for ipk,peak in enumerate(Peaks): 321 365 if peak[2]: #Use 322 366 peak[4:8] = [0,0,0,0] #clear old indexing … … 332 376 hkl = HKL[pos] # put in hkl 333 377 if hkl[-1] >= 0: # peak already assigned - test if this one better 334 opeak = peaks[hkl[-1]]378 opeak = Peaks[hkl[-1]] 335 379 dold = abs(opeak[-2]-hkl[4]) 336 380 dnew = min(dm,dp) … … 343 387 peak[4:8] = hkl[:4] 344 388 peak[9] = hkl[4] # fill in d-calc 345 for peak in peaks:389 for peak in Peaks: 346 390 peak[3] = False 347 391 if peak[2]: … … 351 395 peak[3] = True 352 396 if hklmax[0]*hklmax[1]*hklmax[2]*hklmax[3] > 0: 353 return True, peaks354 else: 355 return False, peaks #nothing indexed!397 return True,Peaks 398 else: 399 return False,Peaks #nothing indexed! 356 400 357 401 def Values2A(ibrav,values): … … 654 698 return len(HKL),M20,X20,Aref,Z 655 699 656 def refinePeaks(peaks,ibrav,A ):700 def refinePeaks(peaks,ibrav,A,ifX20=True): 657 701 'needs a doc string' 658 702 dmin = getDmin(peaks) … … 696 740 A = oldA 697 741 698 M20,X20 = calc_M20(peaks,HKL )742 M20,X20 = calc_M20(peaks,HKL,ifX20) 699 743 return len(HKL),M20,X20,A 700 744 701 def findBestCell(dlg,ncMax,A,Ntries,ibrav,peaks,V1 ):745 def findBestCell(dlg,ncMax,A,Ntries,ibrav,peaks,V1,ifX20=True): 702 746 'needs a doc string' 703 747 # dlg & ncMax are used for wx progress bar … … 715 759 if len(HKL) > mHKL[ibrav]: 716 760 peaks = IndexPeaks(peaks,HKL)[1] 717 Asave.append([calc_M20(peaks,HKL ),A[:]])761 Asave.append([calc_M20(peaks,HKL,ifX20),A[:]]) 718 762 tries = 0 719 763 while tries < Ntries: … … 727 771 728 772 if IndexPeaks(peaks,HKL)[0] and len(HKL) > mHKL[ibrav]: 729 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg )730 Asave.append([calc_M20(peaks,HKL ),Aref[:]])773 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg,ifX20) 774 Asave.append([calc_M20(peaks,HKL,ifX20),Aref[:]]) 731 775 if ibrav == 9: #C-centered orthorhombic 732 776 for i in range(2): 733 777 Abeg = rotOrthoA(Abeg[:]) 734 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg )778 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg,ifX20) 735 779 HKL = G2lat.GenHBravais(dmin,ibrav,Aref) 736 780 peaks = IndexPeaks(peaks,HKL)[1] 737 Asave.append([calc_M20(peaks,HKL ),Aref[:]])781 Asave.append([calc_M20(peaks,HKL,ifX20),Aref[:]]) 738 782 elif ibrav == 11: #C-centered monoclinic 739 783 Abeg = swapMonoA(Abeg[:]) 740 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg )784 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg,ifX20) 741 785 HKL = G2lat.GenHBravais(dmin,ibrav,Aref) 742 786 peaks = IndexPeaks(peaks,HKL)[1] 743 Asave.append([calc_M20(peaks,HKL ),Aref[:]])787 Asave.append([calc_M20(peaks,HKL,ifX20),Aref[:]]) 744 788 else: 745 789 break … … 754 798 X = sortM20(Asave) 755 799 if X: 756 Lhkl,M20,X20,A = refinePeaks(peaks,ibrav,X[0][1] )800 Lhkl,M20,X20,A = refinePeaks(peaks,ibrav,X[0][1],ifX20) 757 801 return GoOn,Lhkl,M20,X20,A 758 802 … … 782 826 return A 783 827 784 def DoIndexPeaks(peaks,controls,bravais ):828 def DoIndexPeaks(peaks,controls,bravais,ifX20=True): 785 829 'needs a doc string' 786 830 … … 825 869 if not N2: 826 870 A = [] 827 GoOn,Nc,M20,X20,A = findBestCell(dlg,ncMax,A,Nm[ibrav]*N1s[ibrav],ibrav,peaks,V1 )871 GoOn,Nc,M20,X20,A = findBestCell(dlg,ncMax,A,Nm[ibrav]*N1s[ibrav],ibrav,peaks,V1,ifX20) 828 872 if A: 829 GoOn,Nc,M20,X20,A = findBestCell(dlg,ncMax,A[:],N1s[ibrav],ibrav,peaks,0 )873 GoOn,Nc,M20,X20,A = findBestCell(dlg,ncMax,A[:],N1s[ibrav],ibrav,peaks,0,ifX20) 830 874 else: 831 GoOn,Nc,M20,X20,A = findBestCell(dlg,ncMax,0,Nm[ibrav]*N1s[ibrav],ibrav,peaks,V1 )875 GoOn,Nc,M20,X20,A = findBestCell(dlg,ncMax,0,Nm[ibrav]*N1s[ibrav],ibrav,peaks,V1,ifX20) 832 876 if Nc >= ncMax: 833 877 GoOn = False … … 848 892 a,b,c,alp,bet,gam = G2lat.A2cell(A) 849 893 V = G2lat.calc_V(A) 850 print "%10.3f %3d %3d %10.5f %10.5f %10.5f %10.3f %10.3f %10.3f %10.2f %10.2f" % (M20,X20,Nc,a,b,c,alp,bet,gam,V,V1)851 894 if M20 >= 2.0: 895 print "%10.3f %3d %3d %10.5f %10.5f %10.5f %10.3f %10.3f %10.3f %10.2f %10.2f" % (M20,X20,Nc,a,b,c,alp,bet,gam,V,V1) 852 896 cells.append([M20,X20,ibrav,a,b,c,alp,bet,gam,V,False,False]) 853 897 if not GoOn: -
trunk/GSASIIplot.py
r1586 r1592 1071 1071 pickIdText = G2frame.PatternTree.GetItemText(G2frame.PickId) 1072 1072 if pickIdText in ['Index Peak List','Unit Cells List','Reflection Lists'] or \ 1073 'PWDR' in G2frame.PatternTree.GetItemText(PickId):1073 'PWDR' in pickIdText: 1074 1074 indx = -1 1075 1075 if pickIdText in ['Index Peak List','Unit Cells List',]: -
trunk/GSASIIpwdGUI.py
r1587 r1592 2175 2175 UnitCellsId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Unit Cells List') 2176 2176 SPGlist = G2spc.spglist 2177 ifX20 = True 2177 2178 bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm', 2178 2179 'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1'] … … 2206 2207 controls[2] = NcNo.GetValue() 2207 2208 2209 def OnIfX20(event): 2210 ifX20 = x20.GetValue() 2211 2208 2212 def OnStartVol(event): 2209 2213 try: … … 2275 2279 2276 2280 def OnFindMV(event): 2277 ssopt['ModVec'] = G2indx.findMV(peaks,G2frame.HKL,ssopt) 2281 Peaks = np.copy(peaks[0]) 2282 ssopt['ModVec'] = G2indx.findMV(Peaks,controls,ssopt,Inst) 2278 2283 OnHklShow(event) 2279 2284 wx.CallAfter(UpdateUnitCellsGrid,G2frame,data) … … 2388 2393 if colLabels[c] == 'M20': 2389 2394 cells = G2indx.sortM20(cells) 2390 elif colLabels[c] in ['Bravais','a','b','c','alpha','beta','gamma','Volume']: 2395 elif colLabels[c] in ['X20','Bravais','a','b','c','alpha','beta','gamma','Volume']: 2396 if c == 1: 2397 c += 1 #X20 before Use 2391 2398 cells = G2indx.sortCells(cells,c-1) #an extra column (Use) not in cells 2392 2399 else: … … 2434 2441 PickId = G2frame.PickId 2435 2442 peaks = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Index Peak List')) 2436 if not peaks[0]:2443 if not len(peaks[0]): 2437 2444 G2frame.ErrorDialog('No peaks!', 'Nothing to refine!') 2438 2445 return … … 2497 2504 for cell in cells: 2498 2505 if cell[11]: 2506 cell[10] = False #clear selection flag on keepers 2499 2507 keepcells.append(cell) 2500 2508 except IndexError: … … 2502 2510 except ValueError: 2503 2511 G2frame.ErrorDialog('Error','Need to set controls in Unit Cell List first') 2512 return 2513 if ssopt.get('Use',False): 2514 G2frame.ErrorDialog('Super lattice error','Indexing not available for super lattices') 2504 2515 return 2505 2516 if True not in bravais: … … 2509 2520 G2frame.ErrorDialog('Error','Index Peak List is empty') 2510 2521 return 2522 if len(peaks[0][0]) > 9: 2523 G2frame.ErrorDialog('Error','You need to reload Index Peaks List first') 2524 return 2511 2525 G2frame.dataFrame.CopyCell.Enable(False) 2512 2526 G2frame.dataFrame.RefineCell.Enable(False) 2513 OK,dmin,newcells = G2indx.DoIndexPeaks(peaks[0],controls,bravais )2527 OK,dmin,newcells = G2indx.DoIndexPeaks(peaks[0],controls,bravais,ifX20) 2514 2528 cells = keepcells+newcells 2515 2529 cells = G2indx.sortM20(cells) 2516 cells[0][10] = True 2530 cells[0][10] = True #select best M20 2517 2531 if OK: 2518 2532 data = [controls,bravais,cells,dmin,ssopt] … … 2533 2547 2534 2548 def RefreshUnitCellsGrid(event): 2535 data = G2frame.PatternTree.GetItemPyData(UnitCellsId)2549 data = G2frame.PatternTree.GetItemPyData(UnitCellsId) 2536 2550 cells,dmin = data[2:4] 2537 2551 r,c = event.GetRow(),event.GetCol() … … 2542 2556 UnitCellsTable.SetValue(i,c,False) 2543 2557 UnitCellsTable.SetValue(r,c,True) 2544 gridDisplay. ForceRefresh()2558 gridDisplay.Refresh() 2545 2559 cells[r][-2] = True 2546 2560 ibrav = cells[r][2] … … 2561 2575 UnitCellsTable.SetValue(r,c,True) 2562 2576 gridDisplay.ForceRefresh() 2563 G2frame.PatternTree.SetItemPyData(UnitCellsId,data) 2577 G2frame.PatternTree.SetItemPyData(UnitCellsId,data) 2564 2578 2565 2579 def MakeNewPhase(event): … … 2586 2600 finally: 2587 2601 dlg.Destroy() 2588 2589 2602 if G2frame.dataDisplay: 2603 print G2frame.dataDisplay.GetScrollPos(wx.VERTICAL) 2590 2604 G2frame.dataFrame.DestroyChildren() 2591 2605 G2frame.dataDisplay = wxscroll.ScrolledPanel(G2frame.dataFrame) … … 2645 2659 startVol.Bind(wx.EVT_KILL_FOCUS,OnStartVol) 2646 2660 littleSizer.Add(startVol,0,WACV) 2661 x20 = wx.CheckBox(G2frame.dataDisplay,label='Use M20/(X20+1)?') 2662 x20.SetValue(ifX20) 2663 x20.Bind(wx.EVT_CHECKBOX,OnIfX20) 2664 littleSizer.Add(x20,0,WACV) 2647 2665 mainSizer.Add(littleSizer,0) 2648 2666 mainSizer.Add((5,5),0) … … 2794 2812 UnitCellsTable = G2gd.Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types) 2795 2813 gridDisplay = G2gd.GSGrid(G2frame.dataDisplay) 2796 gridDisplay.SetPosition(wx.Point(0,20))2797 2814 gridDisplay.SetTable(UnitCellsTable, True) 2798 2815 G2frame.dataFrame.CopyCell.Enable(True)
Note: See TracChangeset
for help on using the changeset viewer.