Changeset 2301
- Timestamp:
- May 31, 2016 4:48:18 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIexprGUI.py
r2298 r2301 35 35 import GSASIIpy3 as G2py3 36 36 import GSASIIobj as G2obj 37 import GSASIImath as G2mth 38 39 # Define a short name for convenience 40 WACV = wx.ALIGN_CENTER_VERTICAL 37 41 38 42 def IndexParmDict(parmDict,wildcard): … … 678 682 679 683 #========================================================================== 680 #class BondDialog(wx.Dialog):684 class BondDialog(wx.Dialog): 681 685 '''A wx.Dialog that allows a user to select a bond length to be evaluated. 682 686 What needs to be done here? Need phase info for atoms … … 687 691 Use existing bond & esd calculate routines 688 692 ''' 693 def __init__(self, parent, Phases, parmDict, exprObj=None, 694 header='Enter restraint expression here', 695 wintitle='Expression Editor', 696 VarLabel=None,depVarDict=None, 697 ExtraButton=None,usedVars=[]): 698 wx.Dialog.__init__(self,parent,wx.ID_ANY,wintitle, 699 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 700 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 701 self.Phases = Phases 702 self.parmDict = parmDict 703 self.header = header 704 self.pName = Phases.keys()[0] 705 DisAglCtls = {} 706 dlg = G2gd.DisAglDialog(self.panel,DisAglCtls,self.Phases[self.pName]['General'],Reset=False) 707 if dlg.ShowModal() == wx.ID_OK: 708 Phases[self.pName]['General']['DisAglCtls'] = dlg.GetData() 709 dlg.Destroy() 710 self.Oatom = '' 711 self.Tatom = '' 712 713 self.Draw() 714 715 def Draw(self): 716 717 def OnPhase(event): 718 Obj = event.GetEventObject() 719 self.pName = Obj.GetValue() 720 self.Oatom = '' 721 DisAglCtls = {} 722 dlg = G2gd.DisAglDialog(self.panel,DisAglCtls,self.Phases[self.pName]['General'],Reset=False) 723 if dlg.ShowModal() == wx.ID_OK: 724 self.Phases[self.pName]['General']['DisAglCtls'] = dlg.GetData() 725 dlg.Destroy() 726 self.Draw() 727 728 def OnOrigAtom(event): 729 Obj = event.GetEventObject() 730 self.Oatom = Obj.GetValue() 731 self.Draw() 732 733 def OnTargAtom(event): 734 Obj = event.GetEventObject() 735 self.Tatom = Obj.GetValue() 736 self.Draw() 737 738 self.panel.Destroy() 739 self.panel = wx.Panel(self) 740 mainSizer = wx.BoxSizer(wx.VERTICAL) 741 mainSizer.Add(wx.StaticText(self.panel,label=self.header),0,WACV) 742 pNames = self.Phases.keys() 743 phaseSizer = wx.BoxSizer(wx.HORIZONTAL) 744 phaseSizer.Add(wx.StaticText(self.panel,label=' Select phase: '),0,WACV) 745 phase = wx.ComboBox(self.panel,value=self.pName,choices=pNames, 746 style=wx.CB_READONLY|wx.CB_DROPDOWN) 747 phase.Bind(wx.EVT_COMBOBOX,OnPhase) 748 phaseSizer.Add(phase,0,WACV) 749 mainSizer.Add(phaseSizer) 750 Phase = self.Phases[self.pName] 751 cx,ct = Phase['General']['AtomPtrs'][:2] 752 Atoms = Phase['Atoms'] 753 aNames = [atom[ct-1] for atom in Atoms] 754 atomSizer = wx.BoxSizer(wx.HORIZONTAL) 755 atomSizer.Add(wx.StaticText(self.panel,label=' Origin atom: '),0,WACV) 756 origAtom = wx.ComboBox(self.panel,value=self.Oatom,choices=aNames, 757 style=wx.CB_READONLY|wx.CB_DROPDOWN) 758 origAtom.Bind(wx.EVT_COMBOBOX,OnOrigAtom) 759 atomSizer.Add(origAtom,0,WACV) 760 atomSizer.Add(wx.StaticText(self.panel,label=' distance to: '),0,WACV) 761 neigh = [] 762 if self.Oatom: 763 # GSASIIpath.IPyBreak() 764 neigh = G2mth.FindAllNeighbors(Phase,self.Oatom,aNames) 765 bNames = ['',] 766 if neigh: 767 bNames = [item[0]+' d=%.3f'%(item[1]) for item in neigh[0]] 768 targAtom = wx.ComboBox(self.panel,value=self.Tatom,choices=bNames, 769 style=wx.CB_READONLY|wx.CB_DROPDOWN) 770 targAtom.Bind(wx.EVT_COMBOBOX,OnTargAtom) 771 atomSizer.Add(targAtom,0,WACV) 772 773 mainSizer.Add(atomSizer) 774 775 776 OkBtn = wx.Button(self.panel,-1,"Ok") 777 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 778 cancelBtn = wx.Button(self.panel,-1,"Cancel") 779 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 780 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 781 btnSizer.Add((20,20),1) 782 btnSizer.Add(OkBtn) 783 btnSizer.Add((20,20),1) 784 btnSizer.Add(cancelBtn) 785 btnSizer.Add((20,20),1) 786 787 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 788 self.panel.SetSizer(mainSizer) 789 self.panel.Fit() 790 self.Fit() 791 792 def GetSelection(self): 793 exprObj = G2obj.ExpressionObj() 794 exprObj.LoadExpression( 795 self.expr, 796 self.exprVarLst, 797 self.varSelect, 798 self.varName, 799 self.varValue, 800 self.varRefflag, 801 ) 802 if self.depVarDict: 803 exprObj.SetDepVar(self.dependentVar) 804 return exprObj 805 806 def OnOk(self,event): 807 parent = self.GetParent() 808 parent.Raise() 809 self.EndModal(wx.ID_OK) 810 811 def OnCancel(self,event): 812 parent = self.GetParent() 813 parent.Raise() 814 self.EndModal(wx.ID_CANCEL) 815 689 816 #========================================================================== 690 #class AngleDialog(wx.Dialog):817 class AngleDialog(wx.Dialog): 691 818 '''A wx.Dialog that allows a user to select a bond angle to be evaluated. 692 819 What needs to be done here? Need phase info for atom … … 697 824 Use existing angle & esd calculate routines 698 825 ''' 826 def __init__(self, parent, Phases, parmDict, exprObj=None, 827 header='Enter restraint expression here', 828 wintitle='Expression Editor', 829 VarLabel=None,depVarDict=None, 830 ExtraButton=None,usedVars=[]): 831 wx.Dialog.__init__(self,parent,wx.ID_ANY,wintitle, 832 pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE) 833 self.panel = wx.Panel(self) #just a dummy - gets destroyed in Draw! 834 self.Phases = Phases 835 self.parmDict = parmDict 836 self.header = header 837 self.pName = Phases.keys()[0] 838 self.Oatom = '' 839 840 self.Draw() 841 842 def Draw(self): 843 844 def OnPhase(event): 845 Obj = event.GetEventObject() 846 self.pName = Obj.GetValue() 847 self.Draw() 848 849 def OnOrigAtom(event): 850 Obj = event.GetEventObject() 851 self.Oatom = Obj.GetValue() 852 self.Draw() 853 854 855 self.panel.Destroy() 856 self.panel = wx.Panel(self) 857 mainSizer = wx.BoxSizer(wx.VERTICAL) 858 mainSizer.Add(wx.StaticText(self.panel,label=self.header),0,WACV) 859 pNames = self.Phases.keys() 860 phaseSizer = wx.BoxSizer(wx.HORIZONTAL) 861 phaseSizer.Add(wx.StaticText(self.panel,label=' Select phase: '),0,WACV) 862 phase = wx.ComboBox(self.panel,value=self.pName,choices=pNames, 863 style=wx.CB_READONLY|wx.CB_DROPDOWN) 864 phase.Bind(wx.EVT_COMBOBOX,OnPhase) 865 phaseSizer.Add(phase,0,WACV) 866 mainSizer.Add(phaseSizer) 867 Phase = self.Phases[self.pName] 868 cx,ct = Phase['General']['AtomPtrs'][:2] 869 Atoms = Phase['Atoms'] 870 aNames = [atom[ct-1] for atom in Atoms] 871 # GSASIIpath.IPyBreak() 872 atomSizer = wx.BoxSizer(wx.HORIZONTAL) 873 atomSizer.Add(wx.StaticText(self.panel,label=' Origin atom: '),0,WACV) 874 origAtom = wx.ComboBox(self.panel,value=self.Oatom,choices=aNames, 875 style=wx.CB_READONLY|wx.CB_DROPDOWN) 876 origAtom.Bind(wx.EVT_COMBOBOX,OnOrigAtom) 877 atomSizer.Add(origAtom,0,WACV) 878 879 mainSizer.Add(atomSizer) 880 881 882 OkBtn = wx.Button(self.panel,-1,"Ok") 883 OkBtn.Bind(wx.EVT_BUTTON, self.OnOk) 884 cancelBtn = wx.Button(self.panel,-1,"Cancel") 885 cancelBtn.Bind(wx.EVT_BUTTON, self.OnCancel) 886 btnSizer = wx.BoxSizer(wx.HORIZONTAL) 887 btnSizer.Add((20,20),1) 888 btnSizer.Add(OkBtn) 889 btnSizer.Add((20,20),1) 890 btnSizer.Add(cancelBtn) 891 btnSizer.Add((20,20),1) 892 893 mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10) 894 self.panel.SetSizer(mainSizer) 895 self.panel.Fit() 896 self.Fit() 897 898 def GetSelection(self): 899 return [] 900 901 def OnOk(self,event): 902 parent = self.GetParent() 903 parent.Raise() 904 self.EndModal(wx.ID_OK) 905 906 def OnCancel(self,event): 907 parent = self.GetParent() 908 parent.Raise() 909 self.EndModal(wx.ID_CANCEL) 910 699 911 700 912 if __name__ == "__main__": -
trunk/GSASIIgrid.py
r2298 r2301 2762 2762 def AddNewDistPseudoVar(event): 2763 2763 print 'Add bond distance pseudo-variable here - TBD' 2764 # dlg = G2exG.BondDialog( 2765 # G2frame.dataDisplay,PSvarDict, 2766 # header='Select a Bond here', 2767 # VarLabel = "New Bond", 2768 # fit=False) 2769 # obj = dlg.Show(True) 2770 # dlg.Destroy() 2771 # if obj: 2772 # calcobj = G2obj.ExpressionCalcObj(obj) 2773 # Controls['SeqPseudoVars'][calcobj.eObj.expression] = obj 2774 # UpdateSeqResults(G2frame,data,G2frame.dataDisplay.GetSize()) # redisplay variables 2764 dlg = G2exG.BondDialog( 2765 G2frame.dataDisplay,Phases,PSvarDict, 2766 header='Select a Bond here', 2767 VarLabel = "New Bond") 2768 if dlg.ShowModal() == wx.ID_OK: 2769 obj = dlg.GetSelection() 2770 else: 2771 dlg.Destroy() 2772 return 2773 dlg.Destroy() 2774 if obj: 2775 calcobj = G2obj.ExpressionCalcObj(obj) 2776 Controls['SeqPseudoVars'][calcobj.eObj.expression] = obj 2777 UpdateSeqResults(G2frame,data,G2frame.dataDisplay.GetSize()) # redisplay variables 2775 2778 2776 2779 def AddNewAnglePseudoVar(event): 2777 2780 print 'Add bond angle pseudo-variable here - TBD' 2778 # dlg = G2exG.AngleDialog( 2779 # G2frame.dataDisplay,PSvarDict, 2780 # header='Enter an Angle here', 2781 # VarLabel = "New Angle", 2782 # fit=False) 2783 # obj = dlg.Show(True) 2784 # dlg.Destroy() 2785 # if obj: 2786 # calcobj = G2obj.ExpressionCalcObj(obj) 2787 # Controls['SeqPseudoVars'][calcobj.eObj.expression] = obj 2788 # UpdateSeqResults(G2frame,data,G2frame.dataDisplay.GetSize()) # redisplay variables 2781 dlg = G2exG.AngleDialog( 2782 G2frame.dataDisplay,Phases,PSvarDict, 2783 header='Enter an Angle here', 2784 VarLabel = "New Angle") 2785 if dlg.ShowModal() == wx.ID_OK: 2786 obj = dlg.GetSelection() 2787 else: 2788 dlg.Destroy() 2789 return 2790 dlg.Destroy() 2791 if obj: 2792 calcobj = G2obj.ExpressionCalcObj(obj) 2793 Controls['SeqPseudoVars'][calcobj.eObj.expression] = obj 2794 UpdateSeqResults(G2frame,data,G2frame.dataDisplay.GetSize()) # redisplay variables 2795 2789 2796 def UpdateParmDict(parmDict): 2790 2797 '''generate the atom positions and the direct & reciprocal cell values, -
trunk/GSASIIimgGUI.py
r2300 r2301 2506 2506 lbl = ParmList[c] 2507 2507 if lbl in nonInterpVars: 2508 D[lbl] = float(parms[c][closest]) 2508 if lbl in ['outChannels',]: 2509 D[lbl] = int(float(parms[c][closest])) 2510 else: 2511 D[lbl] = float(parms[c][closest]) 2509 2512 else: 2510 2513 y = np.array([float(i) for i in parms[c]]) … … 2516 2519 r = a.split('_')[0] 2517 2520 D[r] = [D[a],D[b]] 2521 if r in ['LRazimuth',]: 2522 D[r] = [int(D[a]),int(D[b])] 2518 2523 del D[a] 2519 2524 del D[b] -
trunk/GSASIImath.py
r2275 r2301 416 416 Neigh.append([AtNames[j],dist[j],True]) 417 417 Ids.append(Atoms[j][cia+8]) 418 return Neigh,[OId,Ids] 419 420 def FindAllNeighbors(phase,FrstName,AtNames,notName=''): 421 General = phase['General'] 422 cx,ct,cs,cia = General['AtomPtrs'] 423 Atoms = phase['Atoms'] 424 atNames = [atom[ct-1] for atom in Atoms] 425 Cell = General['Cell'][1:7] 426 Amat,Bmat = G2lat.cell2AB(Cell) 427 SGData = General['SGData'] 428 indices = (-1,0,1) 429 Units = np.array([[h,k,l] for h in indices for k in indices for l in indices]) 430 atTypes = General['AtomTypes'] 431 Radii = np.array(General['BondRadii']) 432 DisAglCtls = General['DisAglCtls'] 433 radiusFactor = DisAglCtls['Factors'][0] 434 AtInfo = dict(zip(atTypes,Radii)) #or General['BondRadii'] 435 Orig = atNames.index(FrstName) 436 OId = Atoms[Orig][cia+8] 437 OType = Atoms[Orig][ct] 438 XYZ = getAtomXYZ(Atoms,cx) 439 Oxyz = XYZ[Orig] 440 Neigh = [] 441 Ids = [] 442 sumR = np.array([AtInfo[OType]+AtInfo[atom[ct]] for atom in Atoms]) 443 sumR = np.reshape(np.tile(sumR,27),(27,-1)) 444 results = [] 445 for xyz in XYZ: 446 results.append(G2spc.GenAtom(xyz,SGData,False,Move=False)) 447 for iA,result in enumerate(results): 448 if iA != Orig: 449 for [Txyz,Top,Tunit] in result: 450 Dx = np.array([Txyz-Oxyz+unit for unit in Units]) 451 dx = np.inner(Dx,Amat) 452 dist = np.sqrt(np.sum(dx**2,axis=1)) 453 IndB = ma.nonzero(ma.masked_greater(dist-radiusFactor*sumR[:,iA],0.)) 454 # GSASIIpath.IPyBreak() 455 for iU in IndB[0]: 456 if AtNames[iA] != notName: 457 unit = Units[iU] 458 if np.any(unit): 459 Topstr = ' +(%4d)[%2d,%2d,%2d]'%(Top,unit[0],unit[1],unit[2]) 460 else: 461 Topstr = ' +(%4d)'%(Top) 462 Neigh.append([AtNames[iA]+Topstr,dist[iU]]) 463 Ids.append(Atoms[iA][cia+8]) 418 464 return Neigh,[OId,Ids] 419 465
Note: See TracChangeset
for help on using the changeset viewer.