Changeset 171
- Timestamp:
- Nov 12, 2010 10:53:07 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r169 r171 47 47 48 48 [wxID_FILECLOSE, wxID_FILEEXIT, wxID_FILEOPEN, 49 wxID_FILESAVE, wxID_FILESAVEAS, wxID_ UNDO, wxID_REFINE,50 ] = [wx.NewId() for _init_coll_File_Items in range( 7)]49 wxID_FILESAVE, wxID_FILESAVEAS, wxID_REFINE, 50 ] = [wx.NewId() for _init_coll_File_Items in range(6)] 51 51 52 52 [wxID_PWDRREAD,wxID_SNGLREAD,wxID_ADDPHASE,wxID_DELETEPHASE, … … 130 130 self.Refine.Enable(False) 131 131 self.Bind(wx.EVT_MENU, self.OnRefine, id=wxID_REFINE) 132 # self.UnDo = parent.Append(help='', id=wxID_UNDO, kind=wx.ITEM_NORMAL,133 # text='UnDo')134 # self.UnDo.Enable(False)135 # self.Bind(wx.EVT_MENU, self.OnUnDo, id=wxID_UNDO)136 132 137 133 def _init_coll_Import_Items(self,parent): … … 140 136 self.ImportPDB = parent.Append(help='Import phase data from PDB file', 141 137 id=wxID_IMPORTPDB, kind=wx.ITEM_NORMAL,text='Import PDB Phase...') 138 self.ImportCIF = parent.Append(help='Import phase data from cif file',id=wxID_IMPORTCIF, kind=wx.ITEM_NORMAL, 139 text='Import CIF Phase...') 142 140 self.ImportPattern = parent.Append(help='',id=wxID_IMPORTPATTERN, kind=wx.ITEM_NORMAL, 143 141 text='Import Powder Pattern...') 144 142 self.ImportHKL = parent.Append(help='',id=wxID_IMPORTHKL, kind=wx.ITEM_NORMAL, 145 143 text='Import HKLs...') 146 self.ImportCIF = parent.Append(help='',id=wxID_IMPORTCIF, kind=wx.ITEM_NORMAL,147 text='Import CIF...')148 144 self.Bind(wx.EVT_MENU, self.OnImportPhase, id=wxID_IMPORTPHASE) 149 145 self.Bind(wx.EVT_MENU, self.OnImportPDB, id=wxID_IMPORTPDB) 146 self.Bind(wx.EVT_MENU, self.OnImportCIF, id=wxID_IMPORTCIF) 150 147 self.Bind(wx.EVT_MENU, self.OnImportPattern, id=wxID_IMPORTPATTERN) 151 148 self.Bind(wx.EVT_MENU, self.OnImportHKL, id=wxID_IMPORTHKL) 152 self.Bind(wx.EVT_MENU, self.OnImportCIF, id=wxID_IMPORTCIF)153 149 154 150 def _init_coll_Export_Items(self,parent): … … 646 642 Xsum = [] 647 643 Ysum = [] 648 Wsum = []644 Vsum = [] 649 645 result = dlg.GetData() 650 646 for i,item in enumerate(result[:-1]): … … 654 650 Comments.append("%10.3f %s" % (scale,' * '+name)) 655 651 x,y,w,yc,yb,yd = data 652 v = 1./w 656 653 if lenX: 657 654 if lenX != len(x): … … 671 668 for j,yi in enumerate(y): 672 669 Ysum[j] += scale*yi 670 Vsum[j] += abs(scale)*v[j] 673 671 else: 674 672 Xminmax = [x[0],x[-1]] … … 677 675 Xsum.append(x[j]) 678 676 Ysum.append(scale*yi) 679 Wsum.append(w[j]) 677 Vsum.append(abs(scale*v[j])) 678 Wsum = 1./np.array(Vsum) 680 679 outname = 'PWDR '+result[-1] 681 680 Id = 0 … … 1069 1068 try: 1070 1069 if dlg.ShowModal() == wx.ID_OK: 1071 self.CIFfile = dlg.GetPath()1070 CIFfile = dlg.GetPath() 1072 1071 self.dirname = dlg.GetDirectory() 1072 Phase = G2IO.ReadCIFPhase(CIFfile) 1073 1073 finally: 1074 1074 dlg.Destroy() 1075 if Phase: 1076 PhaseName = Phase['General']['Name'] 1077 if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'): 1078 sub = self.PatternTree.AppendItem(parent=self.root,text='Phases') 1079 else: 1080 sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases') 1081 sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName) 1082 self.PatternTree.SetItemPyData(sub,Phase) 1075 1083 1076 1084 def OnExportPattern(self,event): … … 1129 1137 event.Skip() 1130 1138 1131 # def OnUnDo(self,event):1132 # self.DoUnDo()1133 # self.UnDo.Enable(False)1134 #1135 1139 def OnRefine(self,event): 1136 1140 #works - but it'd be better if it could restore plots … … 1147 1151 dlg.Destroy() 1148 1152 1149 # def DoUnDo(self):1150 # print 'Undo last refinement'1151 # file = open(self.undofile,'rb')1152 # PatternId = self.PatternId1153 # for item in ['Background','Instrument Parameters','Peak List']:1154 # self.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item),cPickle.load(file))1155 # if self.dataDisplay.GetName() == item:1156 # if item == 'Background':1157 # G2pdG.UpdateBackgroundGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))1158 # elif item == 'Instrument Parameters':1159 # G2pdG.UpdateInstrumentGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))1160 # elif item == 'Peak List':1161 # G2pdG.UpdatePeakGrid(self,self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId, item)))1162 # print item,' recovered'1163 # file.close()1164 #1165 # def SaveState(self):1166 # self.undofile = self.dirname+'\\GSASII.save'1167 # file = open(self.undofile,'wb')1168 # PatternId = self.PatternId1169 # for item in ['Background','Instrument Parameters','Peak List']:1170 # cPickle.dump(self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,PatternId,item)),file,1)1171 # file.close()1172 # self.UnDo.Enable(True)1173 #1174 1153 def ErrorDialog(self,title,message): 1175 1154 dlg = wx.MessageDialog(self, message, title, wx.OK) -
trunk/GSASIIIO.py
r167 r171 758 758 file.write(powderfile+'\n') 759 759 file.write('BANK 1 %d %d CONS %.2f %.2f 0 0 FXYE\n'%(len(x),len(x),\ 760 100.*x[0],100.*(x[1]-x[0]))) 761 XYW = zip(x,y,w) 762 for X,Y,W in XYW: 763 file.write("%15.6g %15.6g %15.6g\n" % (100.*X,Y,W)) 760 100.*x[0],100.*(x[1]-x[0]))) 761 s = list(np.sqrt(1./np.array(w))) 762 XYW = zip(x,y,s) 763 for X,Y,S in XYW: 764 file.write("%15.6g %15.6g %15.6g\n" % (100.*X,Y,S)) 764 765 file.close() 765 766 finally: … … 930 931 SpGrp = S[55:65] 931 932 E,SGData = G2spc.SpcGroup(SpGrp) 933 if E: 934 print ' ERROR in space group symbol ',SpGrp,' in file ',filename 935 print ' N.B.: make sure spaces separate axial fields in symbol' 936 print G2spc.SGErrors(E) 937 return None 938 SGlines = G2spc.SGPrint(SGData) 939 for line in SGlines: print line 932 940 S = file.readline() 933 941 elif 'SCALE' in S[:5]: … … 973 981 return Phase 974 982 975 def ReadCIFAtoms(self,data): 976 print data 983 def ReadCIFPhase(filename): 984 anisoNames = ['aniso_u_11','aniso_u_22','aniso_u_33','aniso_u_12','aniso_u_13','aniso_u_23'] 985 file = open(filename, 'Ur') 986 Phase = {} 987 Title = ospath.split(filename)[-1] 988 print '\n Reading cif file: ',Title 989 Compnd = '' 990 Atoms = [] 991 A = np.zeros(shape=(3,3)) 992 S = file.readline() 993 while S: 994 if '_symmetry_space_group_name_H-M' in S: 995 SpGrp = S.split("_symmetry_space_group_name_H-M")[1].strip().strip('"').strip("'") 996 E,SGData = G2spc.SpcGroup(SpGrp) 997 if E: 998 print ' ERROR in space group symbol ',SpGrp,' in file ',filename 999 print ' N.B.: make sure spaces separate axial fields in symbol' 1000 print G2spc.SGErrors(E) 1001 return None 1002 S = file.readline() 1003 elif '_cell' in S: 1004 if '_cell_length_a' in S: 1005 a = S.split('_cell_length_a')[1].strip().strip('"').strip("'").split('(')[0] 1006 elif '_cell_length_b' in S: 1007 b = S.split('_cell_length_b')[1].strip().strip('"').strip("'").split('(')[0] 1008 elif '_cell_length_c' in S: 1009 c = S.split('_cell_length_c')[1].strip().strip('"').strip("'").split('(')[0] 1010 elif '_cell_angle_alpha' in S: 1011 alp = S.split('_cell_angle_alpha')[1].strip().strip('"').strip("'").split('(')[0] 1012 elif '_cell_angle_beta' in S: 1013 bet = S.split('_cell_angle_beta')[1].strip().strip('"').strip("'").split('(')[0] 1014 elif '_cell_angle_gamma' in S: 1015 gam = S.split('_cell_angle_gamma')[1].strip().strip('"').strip("'").split('(')[0] 1016 S = file.readline() 1017 elif 'loop_' in S: 1018 labels = {} 1019 i = 0 1020 while S: 1021 S = file.readline() 1022 if '_atom_site' in S.strip()[:10]: 1023 labels[S.strip().split('_atom_site_')[1].lower()] = i 1024 i += 1 1025 else: 1026 break 1027 if labels: 1028 if 'aniso_label' not in labels: 1029 while S: 1030 atom = ['','','',0,0,0,0,'','','I',0.01,0,0,0,0,0,0] 1031 S.strip() 1032 if len(S.split()) != len(labels): 1033 if 'loop_' in S: 1034 break 1035 S += file.readline().strip() 1036 data = S.split() 1037 if len(data) != len(labels): 1038 break 1039 for key in labels: 1040 if key == 'type_symbol': 1041 atom[1] = data[labels[key]] 1042 elif key == 'label': 1043 atom[0] = data[labels[key]] 1044 elif key == 'fract_x': 1045 atom[3] = float(data[labels[key]].split('(')[0]) 1046 elif key == 'fract_y': 1047 atom[4] = float(data[labels[key]].split('(')[0]) 1048 elif key == 'fract_z': 1049 atom[5] = float(data[labels[key]].split('(')[0]) 1050 elif key == 'occupancy': 1051 atom[6] = float(data[labels[key]].split('(')[0]) 1052 elif key == 'thermal_displace_type': 1053 if data[labels[key]].lower() == 'uiso': 1054 atom[9] = 'I' 1055 atom[10] = float(data[labels['u_iso_or_equiv']].split('(')[0]) 1056 else: 1057 atom[9] = 'A' 1058 atom[10] = 0.0 1059 1060 atom[7],atom[8] = G2spc.SytSym(atom[3:6],SGData) 1061 atom.append(ran.randint(0,sys.maxint)) 1062 Atoms.append(atom) 1063 S = file.readline() 1064 else: 1065 while S: 1066 S.strip() 1067 data = S.split() 1068 if len(data) != len(labels): 1069 break 1070 name = data[labels['aniso_label']] 1071 for atom in Atoms: 1072 if name == atom[0]: 1073 for i,uname in enumerate(anisoNames): 1074 atom[i+11] = float(data[labels[uname]].split('(')[0]) 1075 S = file.readline() 1076 1077 else: 1078 S = file.readline() 1079 file.close() 1080 if Title: 1081 PhaseName = Title 1082 else: 1083 PhaseName = 'None' 1084 SGlines = G2spc.SGPrint(SGData) 1085 for line in SGlines: print line 1086 cell = [float(a),float(b),float(c),float(alp),float(bet),float(gam)] 1087 Volume = G2lat.calc_V(G2lat.cell2A(cell)) 1088 Phase['General'] = {'Name':PhaseName,'Type':'nuclear','SGData':SGData, 1089 'Cell':[False,]+cell+[Volume,]} 1090 Phase['Atoms'] = Atoms 1091 Phase['Drawing'] = {} 1092 Phase['Histograms'] = {} 1093 1094 return Phase -
trunk/GSASIIplot.py
r169 r171 293 293 self.Weight = True 294 294 print 'plot weighting:',self.Weight 295 elif event.key == 'u' and self.Offset < 100.: 296 self.Offset += 1. 297 elif event.key == 'd' and self.Offset > 0.: 298 self.Offset -= 1. 295 elif event.key == 'u': 296 if self.Contour: 297 self.Cmax = min(1.0,self.Cmax*1.1) 298 elif self.Offset < 100.: 299 self.Offset += 1. 300 elif event.key == 'd': 301 if self.Contour: 302 self.Cmax = max(0.0,self.Cmax*0.9) 303 elif self.Offset > 0.: 304 self.Offset -= 1. 299 305 elif event.key == 'c': 300 306 if self.Contour: … … 327 333 if abs(xpos) > 0.: #avoid possible singularity at beam center 328 334 dsp = wave/(2.*sind(abs(xpos)/2.0)) 329 self.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),1) 335 if self.Contour: 336 self.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f pattern ID =%5d Max contour =%9.1f'%(xpos,dsp,int(ypos),self.Cmax*Ymax),1) 337 else: 338 self.G2plotNB.status.SetStatusText('2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),1) 330 339 if self.itemPicked: 331 340 Page.canvas.SetToolTipString('%9.3f'%(xpos)) … … 381 390 except ValueError,error: 382 391 newPlot = True 392 self.Cmax = 1.0 383 393 Plot = self.G2plotNB.addMpl('Powder Patterns').gca() 384 394 plotNum = self.G2plotNB.plotList.index('Powder Patterns') … … 478 488 if self.Contour: 479 489 acolor = mpl.cm.get_cmap('Paired') 480 Plot.imshow(ContourZ,cmap=acolor,vmin=0,vmax=Ymax ,interpolation='nearest',490 Plot.imshow(ContourZ,cmap=acolor,vmin=0,vmax=Ymax*self.Cmax,interpolation='nearest', 481 491 extent=[ContourX[0],ContourX[-1],ContourY[0],ContourY[-1]],aspect='auto') 482 492 newPlot = True … … 1128 1138 drawingData = data['Drawing'] 1129 1139 drawAtoms = drawingData['Atoms'] 1140 cx,ct,cs = drawingData['atomPtrs'] 1130 1141 Wt = [255,255,255] 1131 1142 Rd = [255,0,0] … … 1157 1168 self.G2plotNB.status.SetStatusText('Drawing saved to: '+Fname,1) 1158 1169 1170 def GetTruePosition(xy): 1171 View = glGetIntegerv(GL_VIEWPORT) 1172 Proj = glGetDoublev(GL_PROJECTION_MATRIX) 1173 Model = glGetDoublev(GL_MODELVIEW_MATRIX) 1174 Zmax = 1. 1175 for i,atom in enumerate(drawAtoms): 1176 x,y,z = atom[cx:cx+3] 1177 X,Y,Z = gluProject(x,y,z,Model,Proj,View) 1178 XY = [int(X),int(View[3]-Y)] 1179 if np.allclose(xy,XY,atol=10) and Z < Zmax: 1180 Zmax = Z 1181 SetSelectedAtoms(i) 1182 1159 1183 def OnMouseDown(event): 1160 1184 xy = event.GetPosition() 1161 drawingData['Rotation'][3] = xy 1185 if event.AltDown(): 1186 GetTruePosition(xy) 1187 else: 1188 drawingData['Rotation'][3] = xy 1162 1189 1163 1190 def OnMouseWheel(event): … … 1179 1206 panel[names.index('viewPoint')].SetValue('%.3f, %.3f, %.3f'%(VP[0],VP[1],VP[2])) 1180 1207 1208 def SetSelectedAtoms(ind): 1209 page = self.dataDisplay.GetSelection() 1210 if self.dataDisplay.GetPageText(page) == 'Draw Atoms': 1211 self.dataDisplay.GetPage(page).SelectRow(ind) #this is the Atoms grid in Draw Atoms 1212 1213 1181 1214 def GetSelectedAtoms(): 1182 1215 page = self.dataDisplay.GetSelection() … … 1186 1219 return Ind 1187 1220 1188 def OnKey(event): 1221 def OnKey(event): #on key UP!! 1189 1222 keyCode = event.GetKeyCode() 1190 1223 if keyCode > 255: … … 1192 1225 key,xyz = chr(keyCode),event.GetPosition() 1193 1226 indx = drawingData['selectedAtoms'] 1194 cx,ct,cs = drawingData['atomPtrs']1195 1227 if key in ['c','C']: 1196 1228 drawingData['viewPoint'] = [[.5,.5,.5],[0,0]] … … 1230 1262 pI[0] = len(drawAtoms)-1 1231 1263 drawingData['viewPoint'] = [[Tx,Ty,Tz],pI] 1232 SetViewPointText(drawingData['viewPoint'][0]) 1233 1234 elif key in ['a','A']: 1235 print xyz,GetTruePosition(xyz) 1264 SetViewPointText(drawingData['viewPoint'][0]) 1236 1265 Draw() 1237 1266 … … 1243 1272 if event.LeftIsDown(): 1244 1273 SetNewPos(newxy) 1245 if event.Dragging() :1274 if event.Dragging() and not event.AltDown(): 1246 1275 if event.LeftIsDown(): 1247 1276 SetRotation(newxy) … … 1251 1280 SetRotationZ(newxy) 1252 1281 Draw() 1253 1254 def GetTruePosition(xy):1255 View = glGetIntegerv(GL_VIEWPORT)1256 x,y,z = gluUnProject(xy[0],xy[1],0,view=View)1257 return x,y,z1258 1282 1259 1283 def SetBackground(): … … 1479 1503 1480 1504 SetBackground() 1505 glInitNames() 1506 glPushName(0) 1481 1507 1482 1508 glMatrixMode(GL_PROJECTION) … … 1522 1548 color = np.array(Gr)/255. 1523 1549 radius = 0.5 1550 if atom[cs] != '': 1551 glLoadName(atom[-2]) 1524 1552 if 'balls' in atom[cs]: 1525 1553 vdwScale = drawingData['vdwScale'] -
trunk/GSASIIpwdGUI.py
r169 r171 45 45 file.close() 46 46 47 def SaveState( self):47 def SaveState(): 48 48 self.undofile = self.dirname+'\\GSASII.save' 49 49 file = open(self.undofile,'wb') … … 55 55 56 56 def OnPeakFit(event): 57 self.SaveState()57 SaveState() 58 58 print 'Peak Fitting - Do one cycle of peak fitting' 59 59 PatternId = self.PatternId … … 87 87 88 88 def OnAutoPeakFit(event): 89 self.SaveState()89 SaveState() 90 90 print 'AutoPeak Fitting - run until minimized' 91 91 PatternId = self.PatternId
Note: See TracChangeset
for help on using the changeset viewer.