Changeset 164
- Timestamp:
- Oct 18, 2010 1:25:18 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r163 r164 267 267 if pltNum >= 0: #to avoid the startup with no plot! 268 268 pltPage = self.G2plotNB.nb.GetPage(pltNum) 269 # pltPlot = pltPage.figure.gca()270 269 pltPlot = pltPage.figure 271 270 item = event.GetItem() … … 302 301 DataType = DataType.strip()[0:3] #just 1st 3 chars 303 302 wx.BeginBusyCursor() 303 Sample = {'Scale':[1.0,True],'Type':'Debye-Scherrer','Absorption':[0.0,False],'DisplaceX':[0.0,False], 304 'DisplaceY':[0.0,False],'Diffuse':[]} 304 305 try: 305 306 for Item in Data: … … 342 343 codes.extend([0,0,0,0,0,0,0]) 343 344 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(data),data,codes,names]) 345 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Sample Parameters'),Sample) 344 346 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Peak List'),[]) 345 347 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Index Peak List'),[]) … … 680 682 Id = self.PatternTree.AppendItem(parent=self.root,text=outname) 681 683 if Id: 684 Sample = {'Scale':[1.0,True],'Type':'Debye-Scherrer','Absorption':[0.0,False],'DisplaceX':[0.0,False], 685 'DisplaceY':[0.0,False],'Diffuse':[]} 682 686 self.PatternTree.SetItemPyData(Id,[[''],[Xsum,Ysum,Wsum,YCsum,YBsum,YDsum]]) 683 687 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments) … … 685 689 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0]]) 686 690 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),Inst) 691 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Sample Parameters'),Sample) 687 692 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Peak List'),[]) 688 693 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Index Peak List'),[]) -
trunk/GSASIIIO.py
r163 r164 8 8 import cPickle 9 9 import sys 10 import random as ran 10 11 import GSASIIpath 11 12 import GSASIIgrid as G2gd 13 import GSASIIspc as G2spc 14 import GSASIIlattice as G2lat 15 import GSASIIElem as G2el 12 16 import os.path as ospath 13 17 … … 732 736 Y = self.Integrate[0][i] 733 737 W = np.sqrt(Y) 738 Sample = {'Scale':[1.0,True],'Type':'Debye-Scherrer','Absorption':[0.0,False],'DisplaceX':[0.0,False], 739 'DisplaceY':[0.0,False],'Diffuse':[]} 734 740 if Id: 735 741 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id, 'Comments'),Comments) … … 737 743 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Background'),[['chebyschev',1,3,1.0,0.0,0.0]]) 738 744 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Instrument Parameters'),[tuple(parms),parms,codes,names]) 745 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Sample Parameters'),Sample) 739 746 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Peak List'),[]) 740 747 self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Index Peak List'),[]) … … 746 753 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Background'),[['chebyschev',1,3,1.0,0.0,0.0]]) 747 754 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(parms),parms,codes,names]) 755 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(self,Id,'Sample Parameters'),Sample) 748 756 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Peak List'),[]) 749 757 self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Index Peak List'),[]) … … 845 853 846 854 def ReadEXPPhase(self,filename): 847 import GSASIIspc as G2spc848 import GSASIIlattice as G2lat849 import GSASIIElem as G2el850 855 file = open(filename, 'Ur') 851 856 Phase = {} … … 915 920 XYZ = Atom[3:6] 916 921 Atom[7],Atom[8] = G2spc.SytSym(XYZ,SGData) 922 Atom.append(ran.randint(0,sys.maxint)) 917 923 Atoms.append(Atom) 918 924 elif Ptype == 'macromolecular': … … 926 932 XYZ = Atom[6:9] 927 933 Atom[10],Atom[11] = G2spc.SytSym(XYZ,SGData) 934 Atom.append(ran.randint(0,sys.maxint)) 928 935 Atoms.append(Atom) 929 936 Volume = G2lat.calc_V(G2lat.cell2A(abc+angles)) … … 936 943 937 944 def ReadPDBPhase(filename): 938 import GSASIIspc as G2spc939 import GSASIIlattice as G2lat940 import GSASIIElem as G2el941 945 EightPiSq = 8.*math.pi**2 942 946 file = open(filename, 'Ur') … … 988 992 Atom[12] = 'A' 989 993 S = file.readline() 994 Atom.append(ran.randint(0,sys.maxint)) 990 995 Atoms.append(Atom) 991 996 else: -
trunk/GSASIIgrid.py
r163 r164 234 234 def setSizePosLeft(self,Width): 235 235 screenSize = wx.DisplaySize() 236 Width[1] = min(Width[1],screenSize[1]-300) 236 237 self.SetSize(Width) 237 238 self.SetPosition(wx.Point(screenSize[0]-Width[0],250)) … … 622 623 G2pdG.UpdateInstrumentGrid(self,data) 623 624 G2plt.PlotPeakWidths(self) 625 elif self.PatternTree.GetItemText(item) == 'Sample Parameters': 626 self.PatternId = self.PatternTree.GetItemParent(item) 627 self.PickId = item 628 data = self.PatternTree.GetItemPyData(item) 629 G2pdG.UpdateSampleGrid(self,data) 630 G2plt.PlotPatterns(self) 624 631 elif self.PatternTree.GetItemText(item) == 'Index Peak List': 625 632 self.PatternId = self.PatternTree.GetItemParent(item) -
trunk/GSASIIlattice.py
r162 r164 31 31 else: 32 32 return np.array([[1,0,0],[0,cosd(angle),-sind(angle)],[0,sind(angle),cosd(angle)]]) 33 33 34 def rotdMat4(angle,axis=0): 35 '''Prepare rotation matrix for angle in degrees about axis(=0,1,2) with scaling for OpenGL 36 Returns numpy 4,4 array 37 ''' 38 Mat = rotdMat(angle,axis) 39 return np.concatenate((np.concatenate((Mat,[[0],[0],[0]]),axis=1),[[0,0,0,1],]),axis=0) 40 34 41 def fillgmat(cell): 35 42 '''Compute lattice metric tensor from unit cell constants -
trunk/GSASIIphsGUI.py
r163 r164 6 6 import copy 7 7 import time 8 import sys 9 import random as ran 8 10 import cPickle 9 11 import GSASIIpath … … 32 34 self.SGData = SGData 33 35 self.New = New 34 self.OpSelected = [0,0,0, 0,0,0]36 self.OpSelected = [0,0,0,[0,0,0],False] 35 37 mainSizer = wx.BoxSizer(wx.VERTICAL) 36 38 mainSizer.Add((5,5),0) … … 96 98 97 99 def OnOpSelect(self,event): 98 self.OpSelected = [0,0,0,[]]99 100 if self.SGData['SGInv']: 100 101 self.OpSelected[0] = self.inv.GetSelection() … … 103 104 self.OpSelected[2] = self.oprs.GetSelection() 104 105 for i in range(3): 105 self.OpSelected[3] .append(float(self.cell[i].GetValue()))106 self.OpSelected[3][i] = float(self.cell[i].GetValue()) 106 107 if self.New: 107 self.OpSelected .append(self.new.GetSelection())108 self.OpSelected[4] = self.new.GetSelection() 108 109 109 110 def GetSelection(self): … … 222 223 Text += line+'\n' 223 224 wx.MessageBox(Text,caption=msg,style=Style) 224 dataDisplay.Destroy () #needed to clear away bad cellSizer, etc.225 dataDisplay.DestroyChildren() #needed to clear away bad cellSizer, etc. 225 226 UpdateGeneral() 226 227 … … 596 597 Atoms.SetCellValue(r,c,parms) 597 598 elif Atoms.GetColLabelValue(c) in ['Name']: 598 atomData[r][c] = Atoms.GetCellValue(r,c) 599 value = Atoms.GetCellValue(r,c) 600 atomData[r][c] = value 601 ID = [atomData[r][-1],] 602 if 'Atoms' in data['Drawing']: 603 DrawAtomsReplaceByIDs(data['Drawing'],atomData[r],ID) 599 604 elif Atoms.GetColLabelValue(c) in ['x','y','z']: 600 605 atomData[r][c] = float(Atoms.GetCellValue(r,c)) … … 705 710 SetupGeneral() 706 711 FillAtomsGrid() 712 value = Atoms.GetCellValue(r,c) 713 atomData[r][c] = value 714 ID = [atomData[r][-1],] 715 if 'Atoms' in data['Drawing']: 716 DrawAtomsReplaceByIDs(data['Drawing'],atomData[r],ID) 707 717 else: 708 718 event.Skip() … … 768 778 generalData = data['General'] 769 779 Ncol = Atoms.GetNumberCols() 780 atId = ran.randint(0,sys.maxint) 770 781 E,SGData = G2spc.SpcGroup(generalData['SGData']['SpGrp']) 771 782 Sytsym,Mult = G2spc.SytSym([x,y,z],SGData) 772 783 if generalData['Type'] == 'macromolecular': 773 atomData.append([0,'UNK','','UNK','H','',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0 ])784 atomData.append([0,'UNK','','UNK','H','',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0,atId]) 774 785 elif generalData['Type'] == 'nuclear': 775 atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0 ])786 atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId]) 776 787 elif generalData['Type'] == 'magnetic': 777 atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0 ])788 atomData.append(['UNK','H','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0,atId]) 778 789 SetupGeneral() 790 if 'Drawing' in data: 791 DrawAtomAdd(data['Drawing'],atomData[-1]) 792 G2plt.PlotStructure(self,data) 779 793 780 794 def OnAtomInsert(event): … … 784 798 785 799 def OnAtomTestInsert(event): 786 try:800 if 'Drawing' in data: 787 801 drawData = data['Drawing'] 788 802 x,y,z = drawData['testPos'] 789 803 AtomAdd(x,y,z) 790 except: 791 AtomAdd(0,0,0) 792 FillAtomsGrid() 804 FillAtomsGrid() 793 805 event.StopPropagation() 794 806 … … 802 814 E,SGData = G2spc.SpcGroup(generalData['SGData']['SpGrp']) 803 815 Sytsym,Mult = G2spc.SytSym([0,0,0],SGData) 816 atId = ran.randint(0,sys.maxint) 804 817 if generalData['Type'] == 'macromolecular': 805 atomData.insert(indx,[0,'UNK','','UNK','UNK','',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0 ])818 atomData.insert(indx,[0,'UNK','','UNK','UNK','',x,y,z,1,Sytsym,Mult,'I',0.10,0,0,0,0,0,0,atId]) 806 819 elif generalData['Type'] == 'nuclear': 807 atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0 ])820 atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,'I',0.01,0,0,0,0,0,0,atId]) 808 821 elif generalData['Type'] == 'magnetic': 809 atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0 ])822 atomData.insert(indx,['UNK','UNK','',x,y,z,1,Sytsym,Mult,0,'I',0.01,0,0,0,0,0,0,0,0,0,atId]) 810 823 SetupGeneral() 811 824 812 825 def AtomDelete(event): 813 826 indx = Atoms.GetSelectedRows() 827 IDs = [] 814 828 if indx: 815 829 atomData = data['Atoms'] … … 817 831 for ind in indx: 818 832 atom = atomData[ind] 833 IDs.append(atom[-1]) 819 834 del atomData[ind] 820 FillAtomsGrid() 835 if 'Atoms' in data['Drawing']: 836 DrawAtomsDeleteByIDs(IDs) 837 FillAtomsGrid() 838 G2plt.PlotStructure(self,data) 821 839 event.StopPropagation() 822 840 … … 868 886 cent = SGData['SGCen'][Cent] 869 887 M,T = SGData['SGOps'][Opr] 870 print M,T871 888 for ind in indx: 872 889 XYZ = np.array(atomData[ind][cx:cx+3]) … … 917 934 drawingData = copy.copy(defaultDrawing) 918 935 drawingData['Atoms'] = [] 936 cx,ct,cs = [0,0,0] 937 if generalData['Type'] == 'nuclear': 938 cx,ct,cs = [2,1,6] #x, type & style 939 elif generalData['Type'] == 'macromolecular': 940 cx,ct,cs = [5,4,9] #x, type & style 941 elif generalData['Type'] == 'magnetic': 942 cx,ct,cs = [2,1,6] #x, type & style 943 # elif generalData['Type'] == 'modulated': 944 # ????? for future 919 945 if not drawingData['Atoms']: 920 946 for atom in atomData: 921 if generalData['Type'] == 'nuclear': 922 atomInfo = [atom[:2]+atom[3:6]+['1',]+['vdW balls',]+ 923 ['',]+[[255,255,255],]+atom[9:17]+[[]]][0] 924 cx,ct,cs = [2,1,6] #x, type & style 925 elif generalData['Type'] == 'macromolecular': 926 try: 927 oneLetter = AA3letter.index(atom[1]) 928 except ValueError: 929 oneLetter = -1 930 atomInfo = [[atom[1].strip()+atom[0],]+ 931 [AA1letter[oneLetter]+atom[0],]+atom[2:5]+ 932 atom[6:9]+['1',]+['sticks',]+['',]+[[255,255,255],]+atom[12:20]+[[]]][0] 933 cx,ct,cs = [5,4,9] #x, type & style 934 elif generalData['Type'] == 'magnetic': 935 atomData = [atom[:2]+atom[3:6]+['vdW balls',]+['',]+atom[9:20]+[[]]][0] 936 cx,ct,cs = [2,1,6] #x, type & style 937 # elif generalData['Type'] == 'modulated': 938 # ????? for future 939 atNum = generalData['AtomTypes'].index(atom[ct]) 940 atomInfo[cs+2] = list(generalData['Color'][atNum]) 941 drawingData['Atoms'].append(atomInfo) 947 DrawAtomAdd(drawingData,atom) 942 948 drawingData['atomPtrs'] = [cx,ct,cs] 943 949 data['Drawing'] = drawingData 944 950 951 def MakeDrawAtom(atom,oldatom=None): 952 AA3letter = ['ALA','ARG','ASN','ASP','CYS','GLN','GLU','GLY','HIS','ILE', 953 'LEU','LYS','MET','PHE','PRO','SER','THR','TRP','TYR','VAL','MSE','HOH','WAT','UNK'] 954 AA1letter = ['A','R','N','D','C','Q','E','G','H','I', 955 'L','K','M','F','P','S','T','W','Y','V','M',' ',' ',' '] 956 generalData = data['General'] 957 if generalData['Type'] == 'nuclear': 958 if oldatom: 959 atomInfo = [atom[:2]+oldatom[2:]][0] 960 else: 961 atomInfo = [atom[:2]+atom[3:6]+['1',]+['vdW balls',]+ 962 ['',]+[[255,255,255],]+atom[9:]+[[]]][0] 963 ct,cs = [1,8] #type & color 964 elif generalData['Type'] == 'macromolecular': 965 try: 966 oneLetter = AA3letter.index(atom[1]) 967 except ValueError: 968 oneLetter = -1 969 atomInfo = [[atom[1].strip()+atom[0],]+ 970 [AA1letter[oneLetter]+atom[0],]+atom[2:5]+ 971 atom[6:9]+['1',]+['sticks',]+['',]+[[255,255,255],]+atom[12:]+[[]]][0] 972 ct,cs = [4,11] #type & color 973 elif generalData['Type'] == 'magnetic': 974 if oldatom: 975 atomInfo = [atom[:2]+oldatom[3:]][0] 976 else: 977 atomInfo = [atom[:2]+atom[3:6]+['vdW balls',]+['',]+atom[9:]+[[]]][0] 978 ct,cs = [1,8] #type & color 979 # elif generalData['Type'] == 'modulated': 980 # ????? for future 981 atNum = generalData['AtomTypes'].index(atom[ct]) 982 atomInfo[cs] = list(generalData['Color'][atNum]) 983 return atomInfo 984 985 def DrawAtomAdd(drawingData,atom): 986 drawingData['Atoms'].append(MakeDrawAtom(atom)) 987 988 def DrawAtomsReplaceByIDs(drawingData,atom,IDs): 989 atomData = drawingData['Atoms'] 990 indx = FindAtomIndexByIDs(atomData,IDs) 991 for ind in indx: 992 atomData[ind] = MakeDrawAtom(atom,atomData[ind]) 993 945 994 def UpdateDrawAtoms(): 946 995 generalData = data['General'] … … 1132 1181 drawAtoms.SetColAttr(c,attr) 1133 1182 self.dataFrame.setSizePosLeft([600,300]) 1183 1134 1184 FindBonds() 1135 1185 G2plt.PlotStructure(self,data) … … 1232 1282 try: 1233 1283 if dlg.ShowModal() == wx.ID_OK: 1234 Inv,Cent,Opr,Cell = dlg.GetSelection()1284 Inv,Cent,Opr,Cell,New = dlg.GetSelection() 1235 1285 Cell = np.array(Cell) 1236 1286 cent = SGData['SGCen'][Cent] … … 1274 1324 try: 1275 1325 if dlg.ShowModal() == wx.ID_OK: 1276 Inv,Cent,Opr,Cell = dlg.GetSelection()1326 Inv,Cent,Opr,Cell,New = dlg.GetSelection() 1277 1327 Cell = np.array(Cell) 1278 1328 cent = SGData['SGCen'][Cent] … … 1336 1386 data['Drawing']['Atoms'] = atomData 1337 1387 UpdateDrawAtoms() 1338 FindBonds()1339 1388 G2plt.PlotStructure(self,data) 1340 1389 … … 1418 1467 import numpy.ma as ma 1419 1468 cx,ct,cs = data['Drawing']['atomPtrs'] 1469 hydro = data['Drawing']['showHydrogen'] 1420 1470 atomData = data['Drawing']['Atoms'] 1421 1471 generalData = data['General'] … … 1432 1482 Indx = range(len(atomData)) 1433 1483 Atoms = [] 1434 Types = []1484 Styles = [] 1435 1485 Radii = [] 1436 1486 for atom in atomData: 1437 1487 Atoms.append(np.array(atom[cx:cx+3])) 1438 Types.append(atom[cs]) 1439 Radii.append(radii[atomTypes.index(atom[ct])]) 1488 Styles.append(atom[cs]) 1489 try: 1490 if not hydro and atom[ct] == 'H': 1491 Radii.append(0.0) 1492 else: 1493 Radii.append(radii[atomTypes.index(atom[ct])]) 1494 except ValueError: #changed atom type! 1495 Radii.append(0.20) 1440 1496 Atoms = np.array(Atoms) 1441 1497 Radii = np.array(Radii) 1442 IA TR = zip(Indx,Atoms,Types,Radii)1443 for atomA in IA TR:1498 IASR = zip(Indx,Atoms,Styles,Radii) 1499 for atomA in IASR: 1444 1500 if atomA[2] in ['lines','sticks','ellipsoids','balls & sticks','polyhedra']: 1445 1501 Dx = Atoms-atomA[1] … … 1450 1506 for j in IndB[0]: 1451 1507 if j > i: 1452 if Types[i] == 'polyhedra':1508 if Styles[i] == 'polyhedra': 1453 1509 atomData[i][-1].append(np.inner(Amat,Dx[j])) 1454 elif Types[j] != 'polyhedra':1510 elif Styles[j] != 'polyhedra': 1455 1511 atomData[i][-1].append(Dx[j]*Radii[i]/sumR[j]) 1456 1512 atomData[j][-1].append(-Dx[j]*Radii[j]/sumR[j]) … … 1463 1519 indx.reverse() 1464 1520 for ind in indx: 1465 atom = atomData[ind]1466 1521 del atomData[ind] 1467 1522 UpdateDrawAtoms() 1468 1523 G2plt.PlotStructure(self,data) 1469 1524 event.StopPropagation() 1470 1525 1526 def FindAtomIndexByIDs(atomData,IDs): 1527 indx = [] 1528 for i,atom in enumerate(atomData): 1529 if atom[-2] in IDs: 1530 indx.append(i) 1531 return indx 1532 1533 def DrawAtomsDeleteByIDs(IDs): 1534 atomData = data['Drawing']['Atoms'] 1535 indx = FindAtomIndexByIDs(atomData,IDs) 1536 indx.reverse() 1537 for ind in indx: 1538 del atomData[ind] 1539 1540 def ChangeDrawAtomsByIDs(colName,IDs,value): 1541 atomData = data['Drawing']['Atoms'] 1542 cx,ct,cs = data['Drawing']['atomPtrs'] 1543 if colName == 'Name': 1544 col = ct-1 1545 elif colName == 'Type': 1546 col = ct 1547 elif colName == 'I/A': 1548 col = cs 1549 indx = FindAtomIndexByIDs(atomData,IDs) 1550 for ind in indx: 1551 atomData[ind][col] = value 1552 1471 1553 def UpdateDrawOptions(): 1472 1554 import copy … … 1531 1613 def OnShowHyd(event): 1532 1614 drawingData['showHydrogen'] = showHydrogen.GetValue() 1615 FindBonds() 1533 1616 G2plt.PlotStructure(self,data) 1534 1617 … … 1679 1762 Indx = {} 1680 1763 1764 def OnShowData(event): 1765 Obj = event.GetEventObject() 1766 hist = Indx[Obj.GetId()] 1767 UseList[hist]['Show'] = Obj.GetValue() 1768 UpdateDData() 1769 1681 1770 def OnScaleRef(event): 1682 1771 Obj = event.GetEventObject() … … 1718 1807 Obj = event.GetEventObject() 1719 1808 hist,pid = Indx[Obj.GetId()] 1809 axis = np.array(UseList[hist]['Size'][3]) 1720 1810 UseList[hist]['Size'][3][pid] = Obj.GetValue() 1721 1811 new = np.array(UseList[hist]['Size'][3]) 1812 if not np.any(new): 1813 UseList[hist]['Size'][3] += new-axis 1814 Obj.SetValue(UseList[hist]['Size'][3][pid]) 1815 1722 1816 def OnStrainType(event): 1723 1817 Obj = event.GetEventObject() … … 1736 1830 try: 1737 1831 strain = float(Obj.GetValue()) 1738 if strain > 0:1832 if strain >= 0: 1739 1833 UseList[hist]['Mustrain'][1][pid] = strain 1740 1834 except ValueError: … … 1745 1839 Obj = event.GetEventObject() 1746 1840 hist,pid = Indx[Obj.GetId()] 1841 axis = np.array(UseList[hist]['Mustrain'][3]) 1747 1842 UseList[hist]['Mustrain'][3][pid] = Obj.GetValue() 1748 1843 new = np.array(UseList[hist]['Mustrain'][3]) 1844 if not np.any(new): 1845 UseList[hist]['Mustrain'][3] += new-axis 1846 Obj.SetValue(UseList[hist]['Mustrain'][3][pid]) 1847 1848 def OnMDRef(event): 1849 Obj = event.GetEventObject() 1850 hist = Indx[Obj.GetId()] 1851 UseList[hist]['MDtexture'][1][pid] = Obj.GetValue() 1852 1853 def OnMDVal(event): 1854 Obj = event.GetEventObject() 1855 hist = Indx[Obj.GetId()] 1856 try: 1857 mdVal = float(Obj.GetValue()) 1858 if mdVal > 0: 1859 UseList[hist]['MDtexture'][0] = mdVal 1860 except ValueError: 1861 pass 1862 Obj.SetValue("%.3f"%(UseList[hist]['MDtexture'][0])) #reset in case of error 1863 1864 def OnMDAxis(event): 1865 Obj = event.GetEventObject() 1866 hist,pid = Indx[Obj.GetId()] 1867 axis = np.array(UseList[hist]['MDtexture'][2]) 1868 UseList[hist]['MDtexture'][2][pid] = Obj.GetValue() 1869 new = np.array(UseList[hist]['MDtexture'][2]) 1870 if not np.any(new): 1871 UseList[hist]['MDtexture'][2] += new-axis 1872 Obj.SetValue(UseList[hist]['MDtexture'][2][pid]) 1873 1874 def OnExtRef(event): 1875 Obj = event.GetEventObject() 1876 UseList[Indx[Obj.GetId()]]['Extinction'][1] = Obj.GetValue() 1877 1878 def OnExtVal(event): 1879 Obj = event.GetEventObject() 1880 try: 1881 ext = float(Obj.GetValue()) 1882 if ext >= 0: 1883 UseList[Indx[Obj.GetId()]]['Extinction'][0] = ext 1884 except ValueError: 1885 pass 1886 Obj.SetValue("%.4f"%(UseList[Indx[Obj.GetId()]]['Extinction'][0])) #reset in case of error 1887 1888 def checkAxis(axis): 1889 if not np.any(np.array(axis)): 1890 return False 1891 return axis 1892 1749 1893 DData.DestroyChildren() 1750 1894 dataDisplay = wx.Panel(DData) … … 1755 1899 mainSizer.Add(wx.StaticText(dataDisplay,-1,50*'_')) 1756 1900 mainSizer.Add((5,5),0) 1757 mainSizer.Add(wx.StaticText(dataDisplay,-1,' '+item),0,wx.ALIGN_CENTER_VERTICAL) 1901 showData = wx.CheckBox(dataDisplay,label=' Show '+item) 1902 showData.SetValue(UseList[item]['Show']) 1903 Indx[showData.GetId()] = item 1904 showData.Bind(wx.EVT_CHECKBOX, OnShowData) 1905 mainSizer.Add(showData,0,wx.ALIGN_CENTER_VERTICAL) 1758 1906 mainSizer.Add((0,5),0) 1759 scaleSizer = wx.BoxSizer(wx.HORIZONTAL) 1760 scaleRef = wx.CheckBox(dataDisplay,label=' Scale factor: ') 1761 scaleRef.SetValue(UseList[item]['Scale'][1]) 1762 Indx[scaleRef.GetId()] = item 1763 scaleRef.Bind(wx.EVT_CHECKBOX, OnScaleRef) 1764 scaleSizer.Add(scaleRef,0,wx.ALIGN_CENTER_VERTICAL) 1765 scaleVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 1766 '%.4f'%(UseList[item]['Scale'][0]),style=wx.TE_PROCESS_ENTER) 1767 Indx[scaleVal.GetId()] = item 1768 scaleVal.Bind(wx.EVT_TEXT_ENTER,OnScaleVal) 1769 scaleVal.Bind(wx.EVT_KILL_FOCUS,OnScaleVal) 1770 scaleSizer.Add(scaleVal,0,wx.ALIGN_CENTER_VERTICAL) 1771 mainSizer.Add(scaleSizer) 1772 mainSizer.Add((0,5),0) 1907 if UseList[item]['Show']: 1908 scaleSizer = wx.BoxSizer(wx.HORIZONTAL) 1909 scaleRef = wx.CheckBox(dataDisplay,label=' Scale factor: ') 1910 scaleRef.SetValue(UseList[item]['Scale'][1]) 1911 Indx[scaleRef.GetId()] = item 1912 scaleRef.Bind(wx.EVT_CHECKBOX, OnScaleRef) 1913 scaleSizer.Add(scaleRef,0,wx.ALIGN_CENTER_VERTICAL) 1914 scaleVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 1915 '%.4f'%(UseList[item]['Scale'][0]),style=wx.TE_PROCESS_ENTER) 1916 Indx[scaleVal.GetId()] = item 1917 scaleVal.Bind(wx.EVT_TEXT_ENTER,OnScaleVal) 1918 scaleVal.Bind(wx.EVT_KILL_FOCUS,OnScaleVal) 1919 scaleSizer.Add(scaleVal,0,wx.ALIGN_CENTER_VERTICAL) 1920 mainSizer.Add(scaleSizer) 1921 mainSizer.Add((0,5),0) 1773 1922 1774 if item[:4] == 'PWDR' :1923 if item[:4] == 'PWDR' and UseList[item]['Show']: 1775 1924 sizeSizer = wx.BoxSizer(wx.HORIZONTAL) 1776 1925 choices = ['isotropic','uniaxial',] … … 1897 2046 strainSizer.Add(strainVal,0,wx.ALIGN_CENTER_VERTICAL) 1898 2047 mainSizer.Add(strainSizer) 1899 elif item[:4] == 'HKLF': 2048 #MD texture 'MDtexture':[1.0,False,[0,0,1]] 2049 mdSizer = wx.BoxSizer(wx.HORIZONTAL) 2050 mdRef = wx.CheckBox(dataDisplay,label=' March-Dollase texture ratio: ') 2051 mdRef.SetValue(UseList[item]['MDtexture'][1]) 2052 Indx[mdRef.GetId()] = item 2053 mdRef.Bind(wx.EVT_CHECKBOX, OnMDRef) 2054 mdSizer.Add(mdRef,0,wx.ALIGN_CENTER_VERTICAL) 2055 mdVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 2056 '%.3f'%(UseList[item]['MDtexture'][0]),style=wx.TE_PROCESS_ENTER) 2057 Indx[mdVal.GetId()] = item 2058 mdVal.Bind(wx.EVT_TEXT_ENTER,OnMDVal) 2059 mdVal.Bind(wx.EVT_KILL_FOCUS,OnMDVal) 2060 mdSizer.Add(mdVal,0,wx.ALIGN_CENTER_VERTICAL) 2061 mdSizer.Add(wx.StaticText(dataDisplay,-1,' Unique axis: '),0,wx.ALIGN_CENTER_VERTICAL) 2062 axes = zip(['H:','K:','L:'],UseList[item]['MDtexture'][2],range(3)) 2063 for ax,H,i in axes: 2064 Axis = wx.SpinCtrl(dataDisplay,wx.ID_ANY,ax,min=-3,max=3,size=wx.Size(40,20)) 2065 Axis.SetValue(H) 2066 Indx[Axis.GetId()] = [item,i] 2067 mdSizer.Add(Axis) 2068 Axis.Bind(wx.EVT_SPINCTRL, OnMDAxis) 2069 mainSizer.Add(mdSizer) 2070 mainSizer.Add((0,5),0) 2071 2072 #Extinction 'Extinction':[0.0,False] 2073 extSizer = wx.BoxSizer(wx.HORIZONTAL) 2074 extRef = wx.CheckBox(dataDisplay,label=' Extinction: ') 2075 extRef.SetValue(UseList[item]['Extinction'][1]) 2076 Indx[extRef.GetId()] = item 2077 extRef.Bind(wx.EVT_CHECKBOX, OnExtRef) 2078 extSizer.Add(extRef,0,wx.ALIGN_CENTER_VERTICAL) 2079 extVal = wx.TextCtrl(dataDisplay,wx.ID_ANY, 2080 '%.4f'%(UseList[item]['Extinction'][0]),style=wx.TE_PROCESS_ENTER) 2081 Indx[extVal.GetId()] = item 2082 extVal.Bind(wx.EVT_TEXT_ENTER,OnExtVal) 2083 extVal.Bind(wx.EVT_KILL_FOCUS,OnExtVal) 2084 extSizer.Add(extVal,0,wx.ALIGN_CENTER_VERTICAL) 2085 mainSizer.Add(extSizer) 2086 mainSizer.Add((0,5),0) 2087 elif item[:4] == 'HKLF' and UseList[item]['Show']: 1900 2088 pass 1901 else:1902 print 'error - unknown histogram type' #place holder - never invoked1903 2089 mainSizer.Add((5,5),0) 1904 1905 2090 1906 2091 dataDisplay.SetSizer(mainSizer) 1907 2092 Size = mainSizer.Fit(self.dataFrame) 1908 Size[0] = max(Size[0],300) 1909 Size[1] += 26 #compensate for status bar 1910 DData.Fit() 2093 Size[0] = max(Size[0],300)+20 2094 Size[1] += 30 #compensate for status bar 2095 DData.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-10) 2096 self.dataFrame.setSizePosLeft(Size) 1911 2097 dataDisplay.SetSize(Size) 1912 self.dataFrame.setSizePosLeft(Size)1913 2098 1914 2099 def OnHklfAdd(event): … … 1929 2114 for i in result: 1930 2115 histoName = TextList[i] 1931 UseList[histoName] = {'Histogram':histoName,'S cale':[1.0,True],2116 UseList[histoName] = {'Histogram':histoName,'Show':False,'Scale':[1.0,True], 1932 2117 'Extinction':['Lorentzian','Secondary Type I',{'Eg':[0.0,False]},]} 1933 2118 data['Histograms'] = UseList … … 1953 2138 for i in result: 1954 2139 histoName = TextList[i] 1955 UseList[histoName] = {'Histogram':histoName,'Scale':[1.0,False], 2140 UseList[histoName] = {'Histogram':histoName,'Show':False, 2141 'Scale':[1.0,False],'MDtexture':[1.0,False,[0,0,1]], 1956 2142 'Size':['isotropic',[10000.,0,],[False,False],[0,0,1]], 1957 'Mustrain':['isotropic',[0.0,0,],[False,False],[0,0,1]], 1958 'MDtexture':[[0,0,1],1.0,False], 2143 'Mustrain':['isotropic',[0.0,0,],[False,False],[0,0,1]], 1959 2144 'Extinction':[0.0,False]} 1960 2145 data['Histograms'] = UseList … … 2042 2227 self.dataDisplay.AddPage(PawleyRefl,'Pawley reflections') 2043 2228 else: 2044 DData = wx. Window(self.dataDisplay)2229 DData = wx.ScrolledWindow(self.dataDisplay) 2045 2230 self.dataDisplay.AddPage(DData,'Data') 2046 2231 Atoms = G2gd.GSGrid(self.dataDisplay) -
trunk/GSASIIplot.py
r163 r164 1304 1304 drawingData['Rotation'] = [anglex,angley,anglez,oldxy] 1305 1305 1306 def SetRotationZ(newxy): 1307 def sign(x): 1308 if x < 0: 1309 return -1 1310 else: 1311 return 1 1312 1306 def SetRotationZ(newxy): 1313 1307 anglex,angley,anglez,oldxy = drawingData['Rotation'] 1314 1308 dxy = newxy-oldxy … … 1319 1313 def RenderBox(): 1320 1314 glEnable(GL_COLOR_MATERIAL) 1321 glLineWidth( 3)1315 glLineWidth(2) 1322 1316 glEnable(GL_BLEND) 1323 1317 glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) … … 1414 1408 glMultMatrixf(B4mat.T) 1415 1409 for face,norm in Faces: 1416 glPolygonMode(GL_FRONT,GL_FILL) 1410 glPolygonMode(GL_FRONT_AND_BACK,GL_FILL) 1411 glFrontFace(GL_CW) 1417 1412 glNormal3fv(norm) 1418 1413 glBegin(GL_TRIANGLES) … … 1475 1470 glMatrixMode(GL_MODELVIEW) 1476 1471 glLoadIdentity() 1472 # Mz = G2lat.rotdMat4(anglez,2) 1473 # My = G2lat.rotdMat4(angley,1) 1474 # Mx = G2lat.rotdMat4(anglex,0) 1475 # Myz = np.inner(Mz,My) 1476 # Mxyz = np.inner(Myz,Mx) 1477 # glMultMatrixf(Mz) 1478 # glMultMatrixf(My) 1479 # glMultMatrixf(Mx) 1477 1480 glRotate(anglez,0,0,1) 1478 1481 glRotate(anglex,cosd(anglez),-sind(anglez),0) … … 1491 1494 x,y,z = atom[cx:cx+3] 1492 1495 Bonds = atom[-1] 1493 atNum = generalData['AtomTypes'].index(atom[ct]) 1496 try: 1497 atNum = generalData['AtomTypes'].index(atom[ct]) 1498 except ValueError: 1499 atNum = -1 1494 1500 CL = atom[cs+2] 1495 # CL = list(generalData['Color'][atNum])1496 # CL.extend([255,])1497 1501 color = np.array(CL)/255. 1498 1502 if iat in Ind: … … 1502 1506 vdwScale = drawingData['vdwScale'] 1503 1507 ballScale = drawingData['ballScale'] 1504 if 'H' == atom[ct]: 1508 if atNum < 0: 1509 radius = 0.2 1510 elif 'H' == atom[ct]: 1505 1511 if drawingData['showHydrogen']: 1506 if 'vdW' in atom[cs] :1512 if 'vdW' in atom[cs] and atNum >= 0: 1507 1513 radius = vdwScale*generalData['vdWRadii'][atNum] 1508 1514 else: … … 1520 1526 elif 'ellipsoids' in atom[cs]: 1521 1527 RenderBonds(x,y,z,Bonds,bondR,color) 1522 if atom[cs+ 2] == 'A':1523 Uij = atom[cs+ 4:cs+10]1528 if atom[cs+3] == 'A': 1529 Uij = atom[cs+5:cs+11] 1524 1530 U = np.multiply(G2spc.Uij2U(Uij),GS) 1525 1531 U = np.inner(Amat,np.inner(U,Amat).T) … … 1529 1535 RenderEllipsoid(x,y,z,ellipseProb,E,R4,color) 1530 1536 else: 1531 radius = ellipseProb*math.sqrt(abs(atom[cs+ 3]))1537 radius = ellipseProb*math.sqrt(abs(atom[cs+4])) 1532 1538 RenderSphere(x,y,z,radius,color) 1533 1539 elif 'lines' in atom[cs]: … … 1544 1550 for face in FaceGen: 1545 1551 vol = nl.det(face) 1546 if abs(vol) > 1. :1552 if abs(vol) > 1. or len(Bonds) == 3: 1547 1553 if vol < 0.: 1548 1554 face = [face[0],face[2],face[1]] -
trunk/GSASIIpwdGUI.py
r150 r164 8 8 import GSASIIpeak as G2pk 9 9 import GSASIIlattice as G2lat 10 import GSASIIspc as G2spc 10 11 import GSASIIindex as G2indx 11 12 import GSASIIplot as G2plt … … 229 230 230 231 def UpdateBackgroundGrid(self,data): 231 #if self.dataDisplay:232 self.dataFrame.Clear()232 if self.dataDisplay: 233 self.dataFrame.Clear() 233 234 BackId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Background') 234 235 maxTerm = 9 … … 261 262 self.dataDisplay.ProcessTableMessage(msg) 262 263 self.PatternTree.SetItemPyData(BackId,data) 264 event.StopPropagation() 263 265 264 266 self.BackTable = [] … … 286 288 if self.dataDisplay: 287 289 self.dataFrame.Clear() 288 LimitId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Limits')289 290 def RefreshLimitsGrid(event): 290 291 data = self.LimitsTable.GetData() … … 322 323 Ka2 = True 323 324 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 324 InstId = G2gd.GetPatternTreeItemId(self,self.PatternId, 'Instrument Parameters')325 325 326 326 def RefreshInstrumentGrid(event,doAnyway=False): … … 398 398 self.dataDisplay.SetSizer(mainSizer) 399 399 self.dataFrame.setSizePosLeft(mainSizer.Fit(self.dataFrame)) 400 401 def UpdateSampleGrid(self,data): 402 if self.dataDisplay: 403 self.dataFrame.Clear() 404 self.dataFrame.SetMenuBar(self.dataFrame.BlankMenu) 405 if not self.dataFrame.GetStatusBar(): 406 Status = self.dataFrame.CreateStatusBar() 407 self.dataDisplay = wx.Panel(self.dataFrame) 408 409 if data['Type'] == 'Debye-Scherrer': 410 parms = [['DisplaceX',' Sample X displacement: ','%.4f',], 411 ['DisplaceY',' Sample Y displacement: ','%.4f',], 412 ['Absorption',' Sample absorption: ','%.4f',],] 413 elif data['Type'] == 'Bragg-Brentano': 414 parms = [['Shift',' Sample displacement: ','%.4f',], 415 ['Transparency',' Sample transparency: ','%.4f'],] 416 objList = {} 417 418 def OnScaleRef(event): 419 Obj = event.GetEventObject() 420 data['Scale'][1] = Obj.GetValue() 421 422 def OnScaleVal(event): 423 Obj = event.GetEventObject() 424 try: 425 scale = float(Obj.GetValue()) 426 if scale > 0: 427 data['Scale'][0] = scale 428 except ValueError: 429 pass 430 Obj.SetValue("%.4f"%(data['Scale'][0])) #reset in case of error 431 432 def OnHistoType(event): 433 Obj = event.GetEventObject() 434 data['Type'] = Obj.GetValue() 435 if data['Type'] == 'Bragg-Brentano' and 'Shift' not in data: #set up defaults for new type(s) 436 data['Shift'] = [0.0,False] 437 data['Transparency'] = [0.0,False] 438 self.dataDisplay.Destroy() 439 UpdateSampleGrid(self,data) 440 441 def OnParmRef(event): 442 Obj = event.GetEventObject() 443 parm = objList[Obj.GetId()] 444 data[parm][1] = Obj.GetValue() 445 446 def OnParmVal(event): 447 Obj = event.GetEventObject() 448 parm = objList[Obj.GetId()] 449 try: 450 data[parm[0]][0] = float(Obj.GetValue()) 451 except ValueError: 452 pass 453 Obj.SetValue(parm[2]%(data[parm[0]][0])) #reset in case of error 454 455 mainSizer = wx.BoxSizer(wx.VERTICAL) 456 mainSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Sample parameters: '),0,wx.ALIGN_CENTER_VERTICAL) 457 mainSizer.Add((5,5),0) 458 scaleSizer = wx.BoxSizer(wx.HORIZONTAL) 459 scaleRef = wx.CheckBox(self.dataDisplay,label=' Histogram scale factor: ') 460 scaleRef.SetValue(data['Scale'][1]) 461 scaleRef.Bind(wx.EVT_CHECKBOX, OnScaleRef) 462 scaleSizer.Add(scaleRef,0,wx.ALIGN_CENTER_VERTICAL) 463 scaleVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY, 464 '%.4f'%(data['Scale'][0]),style=wx.TE_PROCESS_ENTER) 465 scaleVal.Bind(wx.EVT_TEXT_ENTER,OnScaleVal) 466 scaleVal.Bind(wx.EVT_KILL_FOCUS,OnScaleVal) 467 scaleSizer.Add(scaleVal,0,wx.ALIGN_CENTER_VERTICAL) 468 mainSizer.Add(scaleSizer) 469 mainSizer.Add((0,5),0) 470 typeSizer = wx.BoxSizer(wx.HORIZONTAL) 471 choices = ['Debye-Scherrer','Bragg-Brentano',] 472 histoType = wx.ComboBox(self.dataDisplay,wx.ID_ANY,value=data['Type'],choices=choices, 473 style=wx.CB_READONLY|wx.CB_DROPDOWN) 474 histoType.Bind(wx.EVT_COMBOBOX, OnHistoType) 475 typeSizer.Add(histoType) 476 mainSizer.Add(typeSizer) 477 mainSizer.Add((0,5),0) 478 479 for parm in parms: 480 parmSizer = wx.BoxSizer(wx.HORIZONTAL) 481 parmRef = wx.CheckBox(self.dataDisplay,label=parm[1]) 482 objList[parmRef.GetId()] = parm[0] 483 parmRef.SetValue(data[parm[0]][1]) 484 parmRef.Bind(wx.EVT_CHECKBOX, OnParmRef) 485 parmSizer.Add(parmRef,0,wx.ALIGN_CENTER_VERTICAL) 486 parmVal = wx.TextCtrl(self.dataDisplay,wx.ID_ANY, 487 parm[2]%(data[parm[0]][0]),style=wx.TE_PROCESS_ENTER) 488 objList[parmVal.GetId()] = parm 489 parmVal.Bind(wx.EVT_TEXT_ENTER,OnParmVal) 490 parmVal.Bind(wx.EVT_KILL_FOCUS,OnParmVal) 491 parmSizer.Add(parmVal,0,wx.ALIGN_CENTER_VERTICAL) 492 mainSizer.Add(parmSizer) 493 mainSizer.Add((0,5),0) 494 495 mainSizer.Layout() 496 self.dataDisplay.SetSizer(mainSizer) 497 Size = mainSizer.Fit(self.dataFrame) 498 self.dataDisplay.SetSize(Size) 499 self.dataFrame.setSizePosLeft(Size) 500 501 400 502 401 503 def UpdateIndexPeaksGrid(self, data): … … 480 582 bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm', 481 583 'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1'] 482 spaceGroups = ['F m 3 m','I m 3 m','P m 3 m','R 3-H','P 6/m m m','I 4/m m m',483 'P 4/m m m','F m m m','I m m m','C m m m','P m m m','C 2/m','P 2/m','P 1']584 spaceGroups = ['F m 3 m','I m 3 m','P m 3 m','R -3 H','P 6/m m m','I 4/m m m', 585 'P 4/m m m','F m m m','I m m m','C m m m','P m m m','C 2/m','P 2/m','P -1'] 484 586 485 587 def SetLattice(controls): … … 692 794 cell = Cell[2:10] 693 795 sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName) 694 SGData = {'SpGrp':spaceGroups[cell[0]]}796 E,SGData = G2spc.SpcGroup(spaceGroups[cell[0]]) 695 797 self.PatternTree.SetItemPyData(sub, \ 696 {'General':{'Name':'phase name','Type':'nuclear','SGData':SGData,'Cell':[False,]+cell[1:], 697 'Scale':[False,1.0],'Pawley dmin':0.25},'Atoms':[]}) 798 {'General':{'Name':'phase name','Type':'nuclear','SGData':SGData, 799 'Cell':[False,]+cell[1:], 800 'Pawley dmin':0.25},'Atoms':[],'Drawing':{},'Histograms':{}}) 698 801 Status.SetStatusText('Change space group if needed') 699 802
Note: See TracChangeset
for help on using the changeset viewer.