Changeset 82
- Timestamp:
- Jun 4, 2010 10:03:15 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r81 r82 16 16 import GSASIIgrid as G2gd 17 17 import GSASIIplot as G2plt 18 import GSASIIpwdGUI as G2pdG 18 19 19 20 # print versions … … 1074 1075 if self.dataDisplay.GetName() == item: 1075 1076 if item == 'Background': 1076 G2 gd.UpdateBackgroundGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))1077 G2pdG.UpdateBackgroundGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item))) 1077 1078 elif item == 'Instrument Parameters': 1078 G2 gd.UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))1079 G2pdG.UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item))) 1079 1080 elif item == 'Peak List': 1080 G2 gd.UpdatePeakGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))1081 G2pdG.UpdatePeakGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item))) 1081 1082 print item,' recovered' 1082 1083 file.close() -
trunk/GSASIIgrid.py
r81 r82 7 7 import cPickle 8 8 import GSASIIpath 9 import GSASII comp as G2cmp9 import GSASIIpeak as G2pk 10 10 import GSASIIlattice as G2lat 11 11 import GSASIIindex as G2indx … … 15 15 import GSASIIplot as G2plt 16 16 import GSASIIIO as G2IO 17 import GSASIIpwdGUI as G2pdG 17 18 18 19 # trig functions in degrees … … 29 30 ] = [wx.NewId() for _init_coll_IMAGE_Items in range(6)] 30 31 32 [ wxID_MASKCOPY, 33 ] = [wx.NewId() for _init_coll_MASK_Items in range(1)] 34 31 35 [ wxID_INSTPRMRESET, 32 36 ] = [wx.NewId() for _init_coll_INST_Items in range(1)] 33 34 [ wxID_MASKCOPY,35 ] = [wx.NewId() for _init_coll_MASK_Items in range(1)]36 37 37 38 [ wxID_UNDO,wxID_PEAKFIT,wxID_AUTOPEAKFIT, … … 336 337 for line in data: 337 338 self.dataDisplay.AppendText(line+"\n") 338 339 def UpdatePeakGrid(self, data):340 if self.dataDisplay:341 self.dataDisplay.Destroy()342 343 def OnUnDo(event):344 DoUnDo()345 self.dataFrame.UnDo.Enable(False)346 347 def DoUnDo():348 print 'Undo last refinement'349 file = open('GSASII.save','rb')350 PatternId = self.PatternId351 for item in ['Background','Instrument Parameters','Peak List']:352 self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,PatternId, item),cPickle.load(file))353 if self.dataDisplay.GetName() == item:354 if item == 'Background':355 UpdateBackgroundGrid(self,self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, item)))356 elif item == 'Instrument Parameters':357 UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, item)))358 elif item == 'Peak List':359 UpdatePeakGrid(self,self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, item)))360 print item,' recovered'361 file.close()362 363 def OnPeakFit(event):364 self.SaveState()365 print 'Peak Fitting - Do one cycle of peak fitting'366 PatternId = self.PatternId367 PickId = self.PickId368 peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Peak List'))369 if not peaks:370 self.ErrorDialog('No peaks!','Nothing to fit!')371 return372 background = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Background'))[0]373 limits = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Limits'))[1]374 inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))375 data = self.PatternTree.GetItemPyData(PatternId)[1]376 OK,smin,Rwp,runtime,GoOn = G2cmp.DoPeakFit(peaks,background,limits,inst,data)377 UpdatePeakGrid(self,peaks)378 G2plt.PlotPatterns(self)379 if not OK:380 print 'Refinement failed'381 dlg = wx.MessageDialog(self, 'Do you want to reload now?', 'Refinement failed', wx.YES_NO)382 try:383 if dlg.ShowModal() == wx.ID_YES:384 DoUnDo()385 self.dataFrame.UnDo.Enable(False)386 finally:387 dlg.Destroy()388 else:389 self.dataFrame.UnDo.Enable(True)390 print "%s%7.2f%s%12.6g" % ('Rwp = ',Rwp,'%, Smin = ',smin)391 print "%s%8.3f%s " % ('fitpeak time =',runtime,'s')392 print 'finished'393 return394 395 def OnAutoPeakFit(event):396 self.SaveState()397 print 'AutoPeak Fitting - run until minimized'398 PatternId = self.PatternId399 PickId = self.PickId400 peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Peak List'))401 if not peaks:402 self.ErrorDialog('No peaks!','Nothing to fit!')403 return404 background = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Background'))[0]405 limits = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Limits'))[1]406 inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))407 data = self.PatternTree.GetItemPyData(PatternId)[1]408 smin = 1.0e15409 GoOn = True410 while GoOn:411 osmin = smin412 OK,smin,Rwp,runtime,GoOn = G2cmp.DoPeakFit(peaks,background,limits,inst,data)413 UpdatePeakGrid(self,peaks)414 if not OK:415 break416 G2plt.PlotPatterns(self)417 print "%s%7.2f%s%12.6g" % ('Rwp = ',Rwp,'%, Smin = ',smin)418 rat = (osmin-smin)/smin419 if rat < 1.0e-4: GoOn = False420 if not OK:421 print 'Refinement failed'422 dlg = wx.MessageDialog(self, 'Do you want to reload now?', 'Refinement failed', wx.YES_NO)423 try:424 if dlg.ShowModal() == wx.ID_YES:425 DoUnDo()426 self.dataFrame.UnDo.Enable(False)427 finally:428 dlg.Destroy()429 else:430 self.dataFrame.UnDo.Enable(True)431 print "%s%8.3f%s " % ('fitpeak time =',runtime,'s per cycle')432 print 'finished'433 return434 435 def RefreshPeakGrid(event):436 event.StopPropagation()437 data = self.PeakTable.GetData()438 T = []439 for peak in data:T.append(peak[0])440 D = dict(zip(T,data))441 T.sort()442 X = []443 for key in T: X.append(D[key])444 data = X445 G2plt.PlotPatterns(self)446 447 def setBackgroundColors():448 for r in range(self.dataDisplay.GetNumberRows()):449 for c in range(self.dataDisplay.GetNumberCols()):450 if self.dataDisplay.GetColLabelValue(c) in ['position','intensity','sigma','gamma']:451 if float(self.dataDisplay.GetCellValue(r,c)) < 0.:452 self.dataDisplay.SetCellBackgroundColour(r,c,wx.RED)453 else:454 self.dataDisplay.SetCellBackgroundColour(r,c,wx.WHITE)455 456 def KeyEditPeakGrid(event):457 rowList = self.dataDisplay.GetSelectedRows()458 colList = self.dataDisplay.GetSelectedCols()459 selectList = self.dataDisplay.GetSelectedCells()460 data = self.PatternTree.GetItemPyData(self.PickId)461 if event.GetKeyCode() == wx.WXK_RETURN:462 event.Skip(True)463 elif event.GetKeyCode() == wx.WXK_CONTROL:464 event.Skip(True)465 elif event.GetKeyCode() == wx.WXK_SHIFT:466 event.Skip(True)467 elif rowList:468 self.dataDisplay.ClearSelection()469 if event.GetKeyCode() == wx.WXK_DELETE:470 self.dataDisplay.ClearGrid()471 rowList.reverse()472 nDel = 0473 for row in rowList:474 self.PeakTable.DeleteRow(row)475 nDel += 1476 if nDel:477 msg = wg.GridTableMessage(self.PeakTable,478 wg.GRIDTABLE_NOTIFY_ROWS_DELETED,0,nDel)479 self.dataDisplay.ProcessTableMessage(msg)480 data = self.PeakTable.GetData()481 self.PatternTree.SetItemPyData(self.PickId,data[:-nDel])482 self.dataDisplay.ForceRefresh()483 setBackgroundColors()484 if not len(self.PatternTree.GetItemPyData(self.PickId)):485 self.dataFrame.PeakFit.Enable(False)486 self.dataFrame.AutoPeakFit.Enable(False)487 488 elif colList:489 self.dataDisplay.ClearSelection()490 key = event.GetKeyCode()491 for col in colList:492 if self.PeakTable.GetTypeName(0,col) == wg.GRID_VALUE_BOOL:493 if key == 89: #'Y'494 for row in range(self.PeakTable.GetNumberRows()): data[row][col]=True495 elif key == 78: #'N'496 for row in range(self.PeakTable.GetNumberRows()): data[row][col]=False497 elif selectList:498 self.dataDisplay.ClearSelection()499 key = event.GetKeyCode()500 for row,col in selectList:501 if self.PeakTable.GetTypeName(row,col) == wg.GRID_VALUE_BOOL:502 if key == 89: #'Y'503 data[row][col]=True504 elif key == 78: #'N'505 data[row][col]=False506 G2plt.PlotPatterns(self)507 508 self.dataFrame.SetMenuBar(self.dataFrame.PeakMenu)509 if not self.dataFrame.GetStatusBar():510 Status = self.dataFrame.CreateStatusBar()511 self.Bind(wx.EVT_MENU, OnUnDo, id=wxID_UNDO)512 self.Bind(wx.EVT_MENU, OnPeakFit, id=wxID_PEAKFIT)513 self.Bind(wx.EVT_MENU, OnAutoPeakFit, id=wxID_AUTOPEAKFIT)514 self.dataFrame.PeakFit.Enable(False)515 self.dataFrame.AutoPeakFit.Enable(False)516 if data:517 self.dataFrame.PeakFit.Enable(True)518 self.dataFrame.AutoPeakFit.Enable(True)519 self.PickTable = []520 rowLabels = []521 for i in range(len(data)): rowLabels.append(str(i+1))522 colLabels = ['position','refine','intensity','refine','sigma','refine','gamma','refine']523 Types = [wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,524 wg.GRID_VALUE_FLOAT+':10,1',wg.GRID_VALUE_BOOL,525 wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL,526 wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_BOOL]527 T = []528 for peak in data:529 T.append(peak[0])530 D = dict(zip(T,data))531 T.sort()532 X = []533 for key in T: X.append(D[key])534 data = X535 self.PatternTree.SetItemPyData(self.PickId,data)536 self.PeakTable = Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)537 self.dataFrame.SetLabel('Peak List')538 self.dataDisplay = GSGrid(parent=self.dataFrame)539 self.dataDisplay.SetTable(self.PeakTable, True)540 setBackgroundColors()541 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshPeakGrid)542 self.dataDisplay.Bind(wx.EVT_KEY_DOWN, KeyEditPeakGrid)543 self.dataDisplay.SetMargins(0,0)544 self.dataDisplay.AutoSizeColumns(False)545 self.dataFrame.setSizePosLeft([550,350])546 547 def UpdateBackgroundGrid(self,data):548 BackId = GetPatternTreeItemId(self,self.PatternId, 'Background')549 550 def RefreshBackgroundGrid(event):551 data = self.BackTable.GetData()552 M = len(data[0])553 N = data[0][2]+3554 item = data[0]555 if N > M: #add terms556 for i in range(M,N):557 item.append(0.0)558 self.BackTable.SetColLabelValue(i,str(i-2))559 data = [item]560 msg = wg.GridTableMessage(self.BackTable,561 wg.GRIDTABLE_NOTIFY_COLS_APPENDED,0,N-M)562 self.dataDisplay.ProcessTableMessage(msg)563 elif N < M: #delete terms564 new = []565 for i in range(N):566 new.append(item[i])567 data = [new]568 msg = wg.GridTableMessage(self.BackTable,569 wg.GRIDTABLE_NOTIFY_COLS_DELETED,0,M-N)570 self.dataDisplay.ProcessTableMessage(msg)571 self.PatternTree.SetItemPyData(BackId,data)572 573 self.dataFrame.setSizePosLeft([700,150])574 maxTerm = 7575 self.BackTable = []576 N = len(data[0])577 M = data[0][2]578 colLabels = ['function','refine','Nterms']579 rowLabels=['background']580 for i in range(M): colLabels.append(str(i+1))581 Types = [wg.GRID_VALUE_CHOICE+':chebyschev,another,more',582 wg.GRID_VALUE_BOOL,583 wg.GRID_VALUE_NUMBER+':1,'+str(maxTerm)]584 for i in range(maxTerm):585 Types.append(wg.GRID_VALUE_FLOAT+':10,3')586 self.BackTable = Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)587 self.dataFrame.SetLabel('Background')588 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)589 self.dataDisplay = GSGrid(parent=self.dataFrame)590 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshBackgroundGrid)591 self.dataDisplay.SetTable(self.BackTable, True)592 self.dataDisplay.SetMargins(0,0)593 self.dataDisplay.AutoSizeColumns(False)594 595 def UpdateLimitsGrid(self, data):596 if self.dataDisplay:597 self.dataDisplay.Destroy()598 self.dataFrame.setSizePosLeft([250,150])599 LimitId = GetPatternTreeItemId(self,self.PatternId, 'Limits')600 def RefreshLimitsGrid(event):601 data = self.LimitsTable.GetData()602 old = data[0]603 new = data[1]604 new[0] = max(old[0],new[0])605 new[1] = max(new[0],min(old[1],new[1]))606 data = [old,new]607 G2plt.PlotPatterns(self)608 609 self.LimitsTable = []610 colLabels = ['Tmin','Tmax']611 rowLabels = ['original','changed']612 Types = [wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3']613 self.LimitsTable = Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)614 self.dataFrame.SetLabel('Limits')615 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)616 self.dataDisplay = GSGrid(parent=self.dataFrame)617 self.dataDisplay.SetTable(self.LimitsTable, True)618 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshLimitsGrid)619 self.dataDisplay.SetMargins(0,0)620 self.dataDisplay.AutoSizeColumns(False)621 622 def UpdateInstrumentGrid(self, data):623 if self.dataDisplay:624 self.dataDisplay.Destroy()625 Ka2 = False626 Xwid = 700627 if len(data[0]) == 13:628 Ka2 = True629 Xwid = 840630 self.dataFrame.setSizePosLeft([Xwid,170])631 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)632 InstId = GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters')633 634 def RefreshInstrumentGrid(event,doAnyway=False):635 if doAnyway or event.GetRow() == 1:636 peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,self.PatternId, 'Peak List'))637 ins = data[1]638 if 'P' in ins[0]: #update powder peak parameters639 for peak in peaks:640 if Ka2:641 peak[4] = ins[6]*tand(peak[0]/2.0)**2+ins[7]*tand(peak[0]/2.0)+ins[8]642 peak[6] = ins[9]/cosd(peak[0]/2.0)+ins[10]*tand(peak[0]/2.0)643 else:644 peak[4] = ins[4]*tand(peak[0]/2.0)**2+ins[5]*tand(peak[0]/2.0)+ins[6]645 peak[6] = ins[7]/cosd(peak[0]/2.0)+ins[8]*tand(peak[0]/2.0)646 647 def OnReset(event):648 if Ka2:649 data[1][6:12] = data[0][6:12]650 else:651 data[1][4:10] = data[0][4:10]652 RefreshInstrumentGrid(event,doAnyway=True) #to get peaks updated653 UpdateInstrumentGrid(self, data)654 655 self.InstrumentTable = []656 if 'P' in data[1][0]: #powder data657 self.dataFrame.SetMenuBar(self.dataFrame.InstMenu)658 if not self.dataFrame.GetStatusBar():659 Status = self.dataFrame.CreateStatusBar()660 self.Bind(wx.EVT_MENU, OnReset, id=wxID_INSTPRMRESET)661 if Ka2:662 Types = [wg.GRID_VALUE_CHOICE+":PXC,PNC,PNT",wg.GRID_VALUE_FLOAT+':10,6',wg.GRID_VALUE_FLOAT+':10,6', #type, lam-1 & lam-2663 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #zero, ratio, pola664 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #u,v,w665 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,2']666 else:667 Types = [wg.GRID_VALUE_CHOICE+":PXC,PNC,PNT",wg.GRID_VALUE_FLOAT+':10,6', #type & lam-1668 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #zero, pola669 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3', #u,v,w670 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,2']671 colLabels = data[3]672 rowLabels = ['default','changed','refine']673 self.InstrumentTable = Table(data[:-1],rowLabels=rowLabels,colLabels=colLabels,types=Types)674 self.dataFrame.SetLabel('Instrument Parameters')675 self.dataDisplay = GSGrid(parent=self.dataFrame)676 self.dataDisplay.SetTable(self.InstrumentTable, True)677 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshInstrumentGrid)678 self.dataDisplay.SetMargins(0,0)679 self.dataDisplay.AutoSizeColumns(False)680 beg = 4681 if Ka2: beg = 6682 for i in range(len(data[2])):683 if i < beg or i == beg+6:684 self.dataDisplay.SetCellRenderer(2,i,wg.GridCellStringRenderer())685 self.dataDisplay.SetCellValue(2,i,'')686 self.dataDisplay.SetReadOnly(2,i,isReadOnly=True)687 else:688 self.dataDisplay.SetCellRenderer(2,i,wg.GridCellBoolRenderer())689 self.dataDisplay.SetCellEditor(2,i,wg.GridCellBoolEditor())690 else: #single crystal data691 Types = [wg.GRID_VALUE_CHOICE+":SXC,SNC,SNT",wg.GRID_VALUE_FLOAT+':10,6']692 colLabels = data[2]693 rowLabels = ['original','changed']694 self.InstrumentTable = Table(data[:-1],rowLabels=rowLabels,colLabels=colLabels,types=Types)695 self.dataFrame.SetLabel('Instrument Parameters')696 self.dataDisplay = GSGrid(parent=self.dataFrame)697 self.dataDisplay.SetTable(self.InstrumentTable, True)698 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshInstrumentGrid)699 self.dataDisplay.SetMargins(0,0)700 self.dataDisplay.AutoSizeColumns(False)701 702 def UpdateIndexPeaksGrid(self, data):703 IndexId = GetPatternTreeItemId(self,self.PatternId, 'Index Peak List')704 705 def RefreshIndexPeaksGrid(event):706 data = self.IndexPeaksTable.GetData()707 self.PatternTree.SetItemPyData(IndexId,data)708 709 def KeyEditPickGrid(event):710 colList = self.dataDisplay.GetSelectedCols()711 rowList = self.dataDisplay.GetSelectedRows()712 data = self.PatternTree.GetItemPyData(IndexId)713 if event.GetKeyCode() == wx.WXK_RETURN:714 event.Skip(True)715 elif event.GetKeyCode() == wx.WXK_CONTROL:716 event.Skip(True)717 elif event.GetKeyCode() == wx.WXK_SHIFT:718 event.Skip(True)719 elif event.GetKeyCode() == wx.WXK_DELETE:720 dlg = wx.MessageDialog(self, 'Delete Index Peak List?', ' ', wx.YES | wx.NO)721 try:722 result = dlg.ShowModal()723 if result == wx.ID_YES:724 oldlen = len(data)725 data = []726 self.PatternTree.SetItemPyData(IndexId,data)727 self.dataDisplay.Clear()728 self.dataDisplay.Destroy()729 self.IndexPeaksTable = []730 finally:731 dlg.Destroy()732 elif colList:733 self.dataDisplay.ClearSelection()734 key = event.GetKeyCode()735 for col in colList:736 if self.IndexPeaksTable.GetTypeName(0,col) == wg.GRID_VALUE_BOOL:737 if key == 89: #'Y'738 for row in range(self.IndexPeaksTable.GetNumberRows()): data[row][col]=True739 elif key == 78: #'N'740 for row in range(self.IndexPeaksTable.GetNumberRows()): data[row][col]=False741 742 if self.dataDisplay:743 self.dataDisplay.Destroy()744 self.dataFrame.setSizePosLeft([500,300])745 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu)746 inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1]747 self.IndexPeaksTable = []748 if not data:749 peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,self.PatternId, 'Peak List'))750 for peak in peaks:751 dsp = inst[1]/(2.0*sind(peak[0]/2.0))752 data.append([peak[0],peak[2],True,False,0,0,0,dsp,0.0])753 else:754 cells = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,self.PatternId, 'Unit Cells List'))755 if cells:756 cellist = cells[2]757 dmin = cells[3]758 self.HKL = []759 for i,cell in enumerate(cellist):760 if cell[-1]:761 ibrav = cell[2]762 A = G2lat.cell2A(cell[3:9])763 self.HKL = G2lat.GenHBravais(dmin,ibrav,A)764 G2indx.IndexPeaks(data,self.HKL)765 for hkl in self.HKL:766 hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))767 rowLabels = []768 for i in range(len(data)): rowLabels.append(str(i+1))769 colLabels = ['position','intensity','use','indexed','h','k','l','d-obs','d-calc']770 Types = [wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_FLOAT+':10,1',wg.GRID_VALUE_BOOL,771 wg.GRID_VALUE_BOOL,wg.GRID_VALUE_LONG,wg.GRID_VALUE_LONG,wg.GRID_VALUE_LONG,772 wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,5']773 self.PatternTree.SetItemPyData(IndexId,data)774 self.IndexPeaksTable = Table(data,rowLabels=rowLabels,colLabels=colLabels,types=Types)775 self.dataFrame.SetLabel('Index Peak List')776 self.dataDisplay = GSGrid(parent=self.dataFrame)777 self.dataDisplay.SetTable(self.IndexPeaksTable, True)778 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshIndexPeaksGrid)779 self.dataDisplay.Bind(wx.EVT_KEY_DOWN, KeyEditPickGrid)780 self.dataDisplay.SetMargins(0,0)781 self.dataDisplay.AutoSizeColumns(False)782 783 def UpdateUnitCellsGrid(self, data):784 UnitCellsId = GetPatternTreeItemId(self,self.PatternId, 'Unit Cells List')785 bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm',786 'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1']787 788 def OnRefineCell(event):789 def cellPrint(ibrav,A):790 cell = G2lat.A2cell(A)791 Vol = G2lat.calc_V(A)792 if ibrav in [0,1,2]:793 print "%s%10.6f" % ('a =',cell[0])794 elif ibrav in [3,4,5,6]:795 print "%s%10.6f %s%10.6f %s%12.3f" % ('a =',cell[0],' c =',cell[2],' volume =',Vol)796 elif ibrav in [7,8,9,10]:797 print "%s%10.6f %s%10.6f %s%10.6f %s%12.3f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2],' volume =',Vol)798 elif ibrav in [11,12]:799 print "%s%10.6f %s%10.6f %s%10.6f %s%8.3f %s%12.3f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2],'beta =',cell[4],' volume =',Vol)800 else:801 print "%s%10.6f %s%10.6f %s%10.6f" % ('a =',cell[0],'b =',cell[1],'c =',cell[2])802 print "%s%8.3f %s%8.3f %s%8.3f %s%12.3f" % ('alpha =',cell[3],'beta =',cell[4],'gamma =',cell[5],' volume =',Vol)803 339 804 bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm',805 'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1']806 PatternId = self.PatternId807 PickId = self.PickId808 peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Index Peak List'))809 if not peaks:810 self.ErrorDialog('No peaks!', 'Nothing to refine!')811 return812 print 'Refine cell'813 inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1]814 controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'))815 cell = controls[6:12]816 A = G2lat.cell2A(cell)817 print controls[5]818 ibrav = bravaisSymb.index(controls[5])819 dmin = G2indx.getDmin(peaks)-0.005820 Lhkl,M20,X20 = G2indx.refinePeaks(peaks,ibrav,A)821 controls[6:12] = G2lat.A2cell(A)822 controls[12] = G2lat.calc_V(A)823 data = [controls,bravais,cells,dmin]824 self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'),data)825 self.HKL = G2lat.GenHBravais(dmin,ibrav,A)826 UpdateUnitCellsGrid(self,data)827 print "%s%10.3f" % ('refinement M20 = ',M20)828 print 'unindexed lines = ',X20829 cellPrint(ibrav,A)830 for hkl in self.HKL:831 hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))832 if 'PKS' in self.PatternTree.GetItemText(self.PatternId):833 G2plt.PlotPowderLines(self)834 else:835 G2plt.PlotPatterns(self)836 837 def OnIndexPeaks(event):838 PatternId = self.PatternId839 peaks = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Index Peak List'))840 if not peaks:841 self.ErrorDialog('No peaks!', 'Nothing to index!')842 return843 inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Instrument Parameters'))[1]844 print 'Peak Indexing'845 try:846 controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'))847 cells = []848 except ValueError:849 self.ErrorDialog('Error','Need to set controls in Unit Cell List first')850 return851 if True not in bravais:852 self.ErrorDialog('Error','No Bravais lattices selected')853 return854 self.dataFrame.IndexPeaks.Enable(False)855 self.dataFrame.CopyCell.Enable(False)856 OK,dmin,cells = G2indx.DoIndexPeaks(peaks,inst,controls,bravais)857 if OK:858 data = [controls,bravais,cells,dmin]859 self.PatternTree.SetItemPyData(GetPatternTreeItemId(self,PatternId, 'Unit Cells List'),data)860 UpdateUnitCellsGrid(self,data)861 bestCell = cells[0]862 if bestCell[0] > 10.:863 self.HKL = G2lat.GenHBravais(dmin,bestCell[2],G2lat.cell2A(bestCell[3:9]))864 for hkl in self.HKL:865 hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))866 if 'PKS' in self.PatternTree.GetItemText(self.PatternId):867 G2plt.PlotPowderLines(self)868 else:869 G2plt.PlotPatterns(self)870 self.dataFrame.CopyCell.Enable(True)871 self.dataFrame.IndexPeaks.Enable(True)872 873 def CopyUnitCell(event):874 controls,bravais,cells,dmin = self.PatternTree.GetItemPyData(UnitCellsId)875 for Cell in cells:876 if Cell[-1]:877 break878 cell = Cell[2:9]879 controls[4] = 1880 controls[5] = bravaisSymb[cell[0]]881 controls[6:12] = cell[1:8]882 controls[12] = G2lat.calc_V(G2lat.cell2A(controls[6:12]))883 for i in range(4,13):884 self.UnitCellsTable.SetValue(i,1,controls[i])885 self.PatternTree.SetItemPyData(UnitCellsId,[controls,bravais,cells,dmin])886 self.dataDisplay.ForceRefresh()887 self.dataFrame.RefineCell.Enable(True)888 889 def RefreshUnitCellsGrid(event):890 cells,dmin = self.PatternTree.GetItemPyData(UnitCellsId)[2:]891 r,c = event.GetRow(),event.GetCol()892 if cells:893 if c == 6:894 for i in range(min(self.UnitCellsTable.GetNumberRows(),len(cells))):895 cells[i][-1] = False896 self.UnitCellsTable.SetValue(i,c,0)897 self.UnitCellsTable.SetValue(r,c,1)898 cells[r][-1] = True899 ibrav = cells[r][2]900 A = G2lat.cell2A(cells[r][3:9])901 self.HKL = G2lat.GenHBravais(dmin,ibrav,A)902 for hkl in self.HKL:903 hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))904 if 'PKS' in self.PatternTree.GetItemText(self.PatternId):905 G2plt.PlotPowderLines(self)906 else:907 G2plt.PlotPatterns(self)908 controls = []909 bravais = [0,0,0,0,0,0,0, 0,0,0,0,0,0,0]910 table = self.UnitCellsTable.GetData()911 for i,row in enumerate(table):912 if i in [0,4]:913 if row[1]:914 controls.append(1)915 else:916 controls.append(0)917 elif i in [1,3]:918 controls.append(float(row[1]))919 elif i in [2]:920 controls.append(int(row[1]))921 elif i in [5]:922 controls.append(row[1])923 elif i in [6,7,8,9,10,11]:924 if controls[5] in bravaisSymb[:3]: #cubic925 if i in [6]:926 controls.append(float(row[1]))927 controls.append(float(row[1]))928 controls.append(float(row[1]))929 controls.append(90.)930 controls.append(90.)931 controls.append(90.)932 elif controls[5] in bravaisSymb[3:7]: #hexagonal & tetragonal933 if i in [6]:934 controls.append(float(row[1]))935 controls.append(float(row[1]))936 elif i in [8]:937 controls.append(float(row[1]))938 controls.append(90.)939 controls.append(90.)940 if controls[5] in bravaisSymb[3:5]: #hexagonal941 controls.append(120.)942 else: #tetragonal943 controls.append(90.)944 elif controls[5] in bravaisSymb[7:13]: #orthorhombic & monoclinic945 if i in [6,7,8]:946 controls.append(float(row[1]))947 if i in [9,10,11]:948 if controls[5] in bravaisSymb[7:11]:949 controls.append(90.)950 controls.append(90.)951 controls.append(90.)952 break953 else:954 if i in [9,11]:955 controls.append(90.)956 else:957 controls.append(float(row[1]))958 else: #triclinic959 controls.append(float(row[1]))960 controls.append(G2lat.calc_V(G2lat.cell2A(controls[6:12]))) #volume961 for i,row in enumerate(table):962 if i < 14:963 bravais[i] = int(row[2])964 else:965 break966 if controls[4]:967 for i in range(6,13):968 self.UnitCellsTable.SetValue(i,1,controls[i])969 self.dataDisplay.ForceRefresh()970 if controls[4] and not False in controls[6:12]:971 self.dataFrame.RefineCell.Enable(True)972 else:973 self.dataFrame.RefineCell.Enable(False)974 data = [controls,bravais,cells,dmin]975 self.PatternTree.SetItemPyData(UnitCellsId,data)976 977 if self.dataDisplay:978 self.dataDisplay.Destroy()979 self.dataFrame.SetMenuBar(self.dataFrame.IndexMenu)980 if not self.dataFrame.GetStatusBar():981 Status = self.dataFrame.CreateStatusBar()982 self.Bind(wx.EVT_MENU, OnIndexPeaks, id=wxID_INDEXPEAKS)983 self.Bind(wx.EVT_MENU, CopyUnitCell, id=wxID_COPYCELL)984 self.Bind(wx.EVT_MENU, OnRefineCell, id=wxID_REFINECELL)985 self.UnitCellsTable = []986 controls,bravais,cells,dmin = data987 if cells:988 self.dataFrame.setSizePosLeft([900,320])989 else:990 self.dataFrame.setSizePosLeft([280,320])991 if len(controls) < 13:992 controls.append(G2lat.calc_V(G2lat.cell2A(controls[6:12])))993 self.PatternTree.SetItemPyData(UnitCellsId,data)994 inst = self.PatternTree.GetItemPyData(GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters'))[1]995 if cells:996 colLabels = ['controls','value','try','Bravais cells',997 'M20','X20','use','Bravais','a','b','c','alpha','beta','gamma','Volume']998 Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_FLOAT+":10,1",999 wg.GRID_VALUE_BOOL,wg.GRID_VALUE_STRING,wg.GRID_VALUE_FLOAT+':10,2',1000 wg.GRID_VALUE_NUMBER,wg.GRID_VALUE_BOOL,wg.GRID_VALUE_STRING,1001 wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,5',wg.GRID_VALUE_FLOAT+':10,5',1002 wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',wg.GRID_VALUE_FLOAT+':10,3',1003 wg.GRID_VALUE_FLOAT+':10,2']1004 else:1005 colLabels = ['controls','value','try','Bravais cells']1006 Types = [wg.GRID_VALUE_STRING,wg.GRID_VALUE_STRING,1007 wg.GRID_VALUE_BOOL,wg.GRID_VALUE_STRING]1008 controlNames = ['Vary zero?','Max zero error','Max Nc/Nobs','Start volume','refine cell?',1009 'bravais','a=','b=','c=','alpha=','beta=','gamma=','Volume=']1010 bravaisNames = ['Cubic-F','Cubic-I','Cubic-P','Trigonal-R','Trigonal/Hexagonal-P',1011 'Tetragonal-I','Tetragonal-P','Orthorhombic-F','Orthorhombic-I','Orthorhombic-C',1012 'Orthorhombic-P','Monoclinic-C','Monoclinic-P','Triclinic']1013 rowLabels = []1014 table = []1015 numRows = max(len(bravais),len(cells))1016 for i in range(numRows):1017 rowLabels.append('')1018 if i < 13:1019 row = [controlNames[i],controls[i],bravais[i],bravaisSymb[i]]1020 elif i < 14:1021 row = ['','',bravais[i],bravaisSymb[i]]1022 else:1023 row = ['','','','']1024 if cells:1025 if i < len(cells):1026 cell = cells[i]1027 row += cell[0:2]+[cell[-1]]+[bravaisSymb[cell[2]]]+cell[3:10]1028 if cell[-1]:1029 A = G2lat.cell2A(cell[3:9])1030 self.HKL = G2lat.GenHBravais(dmin,cell[2],A)1031 for hkl in self.HKL:1032 hkl.append(2.0*asind(inst[1]/(2.*hkl[3])))1033 else:1034 row += 14*['',]1035 table.append(row)1036 self.UnitCellsTable = Table(table,rowLabels=rowLabels,colLabels=colLabels,types=Types)1037 self.dataFrame.SetLabel('Unit Cells List')1038 self.dataDisplay = GSGrid(parent=self.dataFrame)1039 self.dataDisplay.SetTable(self.UnitCellsTable, True)1040 self.dataDisplay.Bind(wg.EVT_GRID_CELL_CHANGE, RefreshUnitCellsGrid)1041 self.dataDisplay.SetMargins(0,0)1042 self.dataDisplay.SetRowLabelSize(0)1043 self.dataDisplay.SetCellRenderer(0,1,wg.GridCellBoolRenderer())1044 self.dataDisplay.SetCellEditor(0,1,wg.GridCellBoolEditor())1045 self.dataDisplay.SetCellRenderer(1,1,wg.GridCellFloatRenderer(5,2))1046 self.dataDisplay.SetCellEditor(1,1,wg.GridCellFloatEditor(5,0))1047 self.dataDisplay.SetCellRenderer(2,1,wg.GridCellNumberRenderer())1048 self.dataDisplay.SetCellEditor(2,1,wg.GridCellNumberEditor(1,10))1049 self.dataDisplay.SetCellRenderer(3,1,wg.GridCellFloatRenderer(5,0))1050 self.dataDisplay.SetCellEditor(3,1,wg.GridCellFloatEditor(5,2))1051 self.dataDisplay.SetCellRenderer(4,1,wg.GridCellBoolRenderer())1052 self.dataDisplay.SetCellEditor(4,1,wg.GridCellBoolEditor())1053 self.dataDisplay.SetCellRenderer(5,1,wg.GridCellStringRenderer())1054 self.dataDisplay.SetCellEditor(5,1,wg.GridCellChoiceEditor(bravaisSymb,False))1055 for i in range(6,9):1056 self.dataDisplay.SetCellRenderer(i,1,wg.GridCellFloatRenderer(10,5))1057 self.dataDisplay.SetCellEditor(i,1,wg.GridCellFloatEditor(10,5))1058 for i in range(9,13):1059 self.dataDisplay.SetCellRenderer(i,1,wg.GridCellFloatRenderer(10,3))1060 self.dataDisplay.SetCellEditor(i,1,wg.GridCellFloatEditor(10,3))1061 for i in range(14):1062 self.dataDisplay.SetReadOnly(i,0,isReadOnly=True)1063 self.dataDisplay.SetReadOnly(i,3,isReadOnly=True)1064 if cells:1065 self.dataFrame.CopyCell.Enable(True)1066 for r in range(max(len(cells),14)):1067 if r > 12:1068 self.dataDisplay.SetCellRenderer(r,0,wg.GridCellStringRenderer())1069 self.dataDisplay.SetCellRenderer(r,1,wg.GridCellStringRenderer())1070 if r > 13:1071 self.dataDisplay.SetCellRenderer(r,2,wg.GridCellStringRenderer())1072 for c in range(4,15):1073 if r >= len(cells):1074 self.dataDisplay.SetCellRenderer(r,c,wg.GridCellStringRenderer())1075 if c != 6:1076 self.dataDisplay.SetReadOnly(r,c,isReadOnly=True)1077 self.dataDisplay.AutoSizeColumns(False)1078 if controls[4] and not False in controls[6:12]:1079 self.dataFrame.RefineCell.Enable(True)1080 else:1081 self.dataFrame.RefineCell.Enable(False)1082 1083 340 def UpdateHKLControls(self,data): 1084 341 … … 2093 1350 self.PickId = item 2094 1351 data = self.PatternTree.GetItemPyData(item) 2095 UpdatePeakGrid(self,data)1352 G2pdG.UpdatePeakGrid(self,data) 2096 1353 G2plt.PlotPatterns(self) 2097 1354 elif self.PatternTree.GetItemText(item) == 'Background': … … 2099 1356 self.PickId = item 2100 1357 data = self.PatternTree.GetItemPyData(item) 2101 UpdateBackgroundGrid(self,data)1358 G2pdG.UpdateBackgroundGrid(self,data) 2102 1359 G2plt.PlotPatterns(self) 2103 1360 elif self.PatternTree.GetItemText(item) == 'Limits': … … 2105 1362 self.PickId = item 2106 1363 data = self.PatternTree.GetItemPyData(item) 2107 UpdateLimitsGrid(self,data)1364 G2pdG.UpdateLimitsGrid(self,data) 2108 1365 G2plt.PlotPatterns(self) 2109 1366 elif self.PatternTree.GetItemText(item) == 'Instrument Parameters': … … 2111 1368 self.PickId = item 2112 1369 data = self.PatternTree.GetItemPyData(item) 2113 UpdateInstrumentGrid(self,data)1370 G2pdG.UpdateInstrumentGrid(self,data) 2114 1371 G2plt.PlotPeakWidths(self) 2115 1372 elif self.PatternTree.GetItemText(item) == 'Index Peak List': … … 2118 1375 self.PickId = item 2119 1376 data = self.PatternTree.GetItemPyData(item) 2120 UpdateIndexPeaksGrid(self,data)1377 G2pdG.UpdateIndexPeaksGrid(self,data) 2121 1378 if 'PKS' in self.PatternTree.GetItemText(self.PatternId): 2122 1379 G2plt.PlotPowderLines(self) … … 2133 1390 data.append([]) #empty dmin 2134 1391 self.PatternTree.SetItemPyData(item,data) 2135 UpdateUnitCellsGrid(self,data)1392 G2pdG.UpdateUnitCellsGrid(self,data) 2136 1393 self.dataFrame.RefineCell.Enable(True) 2137 1394 self.dataFrame.IndexPeaks.Enable(True) -
trunk/GSASIIplot.py
r81 r82 10 10 import GSASIIimage as G2img 11 11 import GSASIIIO as G2IO 12 import GSASIIpwdGUI as G2pdG 12 13 from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as Canvas 13 14 from matplotlib.backends.backend_wxagg import NavigationToolbar2Wx as Toolbar … … 212 213 XY = [xy[0],0, xy[1],1, sig,0, gam,0] #default refine intensity 1st 213 214 data.append(XY) 214 G2 gd.UpdatePeakGrid(self,data)215 G2pdG.UpdatePeakGrid(self,data) 215 216 PlotPatterns(self) 216 217 else: #picked a peak list line … … 225 226 data[1][1] = max(xy[0],data[1][0]) 226 227 self.PatternTree.SetItemPyData(LimitId,data) 227 G2 gd.UpdateLimitsGrid(self,data)228 G2pdG.UpdateLimitsGrid(self,data) 228 229 PlotPatterns(self) 229 230 else: #picked a limit line … … 291 292 self.PatternTree.SetItemPyData(LimitId,data) 292 293 if self.PatternTree.GetItemText(self.PickId) == 'Limits': 293 G2 gd.UpdateLimitsGrid(self,data)294 G2pdG.UpdateLimitsGrid(self,data) 294 295 else: 295 296 PeakId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Peak List') … … 298 299 data[lineNo-2][0] = xpos 299 300 self.PatternTree.SetItemPyData(PeakId,data) 300 G2 gd.UpdatePeakGrid(self,data)301 G2pdG.UpdatePeakGrid(self,data) 301 302 PlotPatterns(self) 302 303 self.itemPicked = None
Note: See TracChangeset
for help on using the changeset viewer.