Changeset 2326
- Timestamp:
- Jun 15, 2016 9:21:13 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIexprGUI.py
r2321 r2326 830 830 dlg.Destroy() 831 831 self.Oatom = '' 832 self.Tatoms = ['','']832 self.Tatoms = '' 833 833 self.Draw() 834 834 … … 851 851 wx.CallAfter(self.Draw) 852 852 853 def OnTargAtom (event):853 def OnTargAtoms(event): 854 854 Obj = event.GetEventObject() 855 self.Tatom = Obj.GetValue()855 self.Tatoms = Obj.GetValue() 856 856 wx.CallAfter(self.Draw) 857 857 … … 880 880 atomSizer.Add(origAtom,0,WACV) 881 881 mainSizer.Add(atomSizer) 882 mainSizer.Add(wx.StaticText(self.panel,label=' A-O-B angle for A,B: '),0,WACV)883 882 neigh = [] 884 883 if self.Oatom: 885 # GSASIIpath.IPyBreak() 886 neigh = G2mth.FindAllNeighbors(Phase,self.Oatom,aNames) 887 bNames = ['',] 888 if neigh: 889 bNames = [item[0]+' d=%.3f'%(item[1]) for item in neigh[0]] 884 neigh = G2mth.FindAllNeighbors(Phase,self.Oatom,aNames)[0] 885 mainSizer.Add(wx.StaticText(self.panel,label=' A-O-B angle for A,B: '),0,WACV) 886 bNames = ['',] 887 if neigh: 888 # GSASIIpath.IPyBreak() 889 for iA,aName in enumerate(neigh): 890 for cName in neigh[iA+1:]: 891 bNames.append('%s;%s'%(aName[0].replace(' ',''),cName[0].replace(' ',''))) 892 targAtoms = wx.ComboBox(self.panel,value=self.Tatoms,choices=bNames, 893 style=wx.CB_READONLY|wx.CB_DROPDOWN) 894 targAtoms.Bind(wx.EVT_COMBOBOX,OnTargAtoms) 895 mainSizer.Add(targAtoms,0,WACV) 890 896 891 897 … … 907 913 908 914 def GetSelection(self): 909 return []915 return self.pName,self.Oatom,self.Tatoms 910 916 911 917 def OnOk(self,event): -
trunk/GSASIIgrid.py
r2323 r2326 2807 2807 2808 2808 def AddNewAnglePseudoVar(event): 2809 print 'Add bond angle pseudo-variable here - TBD'2810 2809 dlg = G2exG.AngleDialog( 2811 2810 G2frame.dataDisplay,Phases,PSvarDict, … … 2813 2812 VarLabel = "New Angle") 2814 2813 if dlg.ShowModal() == wx.ID_OK: 2815 obj = dlg.GetSelection() 2814 pName,Oatom,Tatoms = dlg.GetSelection() 2815 if Tatoms: 2816 Phase = Phases[pName] 2817 General = Phase['General'] 2818 cx,ct = General['AtomPtrs'][:2] 2819 pId = Phase['pId'] 2820 SGData = General['SGData'] 2821 Atoms = Phase['Atoms'] 2822 aNames = [atom[ct-1] for atom in Atoms] 2823 tIds = [] 2824 symNos = [] 2825 cellNos = [] 2826 oId = aNames.index(Oatom) 2827 Tatoms = Tatoms.split(';') 2828 for Tatom in Tatoms: 2829 sB = Tatom.find('(')+1 2830 symNo = 0 2831 if sB: 2832 sF = Tatom.find(')') 2833 symNo = int(Tatom[sB:sF]) 2834 symNos.append(symNo) 2835 cellNo = [0,0,0] 2836 cB = Tatom.find('[') 2837 if cB>0: 2838 cF = Tatom.find(']')+1 2839 cellNo = eval(Tatom[cB:cF]) 2840 cellNos.append(cellNo) 2841 tIds.append(aNames.index(Tatom.split('+')[0])) 2842 # create an expression object 2843 obj = G2obj.ExpressionObj() 2844 obj.expression = 'Angle(%s,%s,\n%s)'%(Tatoms[0],Oatom,Tatoms[1]) 2845 obj.angle_dict = {'pId':pId,'SGData':SGData,'symNo':symNos,'cellNo':cellNos} 2846 obj.angle_atoms = [oId,tIds] 2816 2847 else: 2817 2848 dlg.Destroy() … … 2819 2850 dlg.Destroy() 2820 2851 if obj: 2821 calcobj = G2obj.ExpressionCalcObj(obj) 2822 Controls['SeqPseudoVars'][calcobj.eObj.expression] = obj 2852 Controls['SeqPseudoVars'][obj.expression] = obj 2823 2853 UpdateSeqResults(G2frame,data,G2frame.dataDisplay.GetSize()) # redisplay variables 2824 2854 -
trunk/GSASIImath.py
r2321 r2326 1589 1589 return Dist,sig 1590 1590 1591 def CalcAngle( distance_dict, distance_atoms, parmDict):1591 def CalcAngle(angle_dict, angle_atoms, parmDict): 1592 1592 if not len(parmDict): 1593 1593 return 0. 1594 1595 return 0. #angle 1594 pId = angle_dict['pId'] 1595 pfx = '%d::'%(pId) 1596 A = [parmDict['%s::A%d'%(pId,i)] for i in range(6)] 1597 Amat = G2lat.cell2AB(G2lat.A2cell(A))[0] 1598 Oxyz = [parmDict['%s::A%s:%d'%(pId,x,angle_atoms[0])] for x in ['x','y','z']] 1599 Axyz = [parmDict['%s::A%s:%d'%(pId,x,angle_atoms[1][0])] for x in ['x','y','z']] 1600 Bxyz = [parmDict['%s::A%s:%d'%(pId,x,angle_atoms[1][1])] for x in ['x','y','z']] 1601 ABxyz = [Axyz,Bxyz] 1602 symNo = angle_dict['symNo'] 1603 for i in range(2): 1604 inv = 1 1605 if symNo[i] < 0: 1606 inv = -1 1607 symNo[i] *= -1 1608 cen = symNo[i]/100 1609 op = symNo[i]%100-1 1610 M,T = angle_dict['SGData']['SGOps'][op] 1611 D = T*inv+angle_dict['SGData']['SGCen'][cen] 1612 D += angle_dict['cellNo'][i] 1613 ABxyz[i] = np.inner(M*inv,ABxyz[i])+D 1614 ABxyz[i] = np.inner(Amat,(ABxyz[i]-Oxyz)) 1615 dist = np.sqrt(np.sum(ABxyz[i]**2)) 1616 if not dist: 1617 return 0. 1618 ABxyz[i] /= dist 1619 angle = acosd(np.sum(ABxyz[0]*ABxyz[1])) 1620 return angle 1596 1621 1597 1622 def getSyXYZ(XYZ,ops,SGData): -
trunk/GSASIIobj.py
r2323 r2326 1953 1953 Adds the free parameter values to the parameter dict (parmDict). 1954 1954 ''' 1955 if self.eObj.expression.startswith('Dist') :1955 if self.eObj.expression.startswith('Dist') or self.eObj.expression.startswith('Angle'): 1956 1956 return 1957 1957 self.fxnpkgdict = self.eObj.CheckVars() … … 2022 2022 :param list parmDict: a dict of values some of which may be in use here 2023 2023 ''' 2024 if self.eObj.expression.startswith('Dist') :2024 if self.eObj.expression.startswith('Dist') or self.eObj.expression.startswith('Angle'): 2025 2025 self.parmDict = parmDict 2026 2026 return … … 2051 2051 #self.su = G2mth.CalcDistSu(self.eObj.distance_dict, self.eObj.distance_atoms, self.parmDict) 2052 2052 return dist 2053 elif self.eObj.expression.startswith('Angle'): 2054 angle = 0 2055 dist = G2mth.CalcAngle(self.eObj.angle_dict, self.eObj.angle_atoms, self.parmDict) 2056 return angle 2053 2057 if self.compiledExpr is None: 2054 2058 raise Exception,"EvalExpression called before SetupCalc"
Note: See TracChangeset
for help on using the changeset viewer.