Changeset 36
- Timestamp:
- Mar 4, 2010 8:56:26 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r33 r36 371 371 import copy 372 372 self.CheckNotebook() 373 dlg = wx.FileDialog(self, 'Choose image file', '.', '', \ 374 'MAR345 (*.mar3450)|*.mar3450|ADSC Image (*.img)|*.img \ 375 |Perkin-Elmer TIF (*.tif)|*.tif \ 376 |GE Image sum (*.sum)|*.sum|GE Image avg (*.avg) \ 377 |*.avg|All files (*.*)|*.*',wx.OPEN) 373 dlg = wx.FileDialog(self, 'Choose image file', '.', '',\ 374 'MAR345 (*.mar3450;*.mar2300)|*.mar3450;*.mar2300|ADSC Image (*.img)\ 375 |*.img|Perkin-Elmer TIF (*.tif)|*.tif|GE Image sum (*.sum)\ 376 |*.sum|GE Image avg (*.avg)|*.avg|All files (*.*)|*.*',wx.OPEN) 378 377 if self.dirname: 379 378 dlg.SetDirectory(self.dirname) … … 389 388 Comments,Data,Size,Image = G2IO.GetImgData(self.imagefile) 390 389 Image[0][0] = 0 391 elif ext == '.mar3450' :390 elif ext == '.mar3450' or ext == '.mar2300': 392 391 Comments,Data,Size,Image = G2IO.GetMAR345Data(self.imagefile) 393 392 elif ext in ['.sum','.avg']: … … 1119 1118 item = self.itemPicked 1120 1119 if item and self.PatternTree.GetItemText(self.PickId) == 'Image Controls': 1121 if 'Text' in str(item) and Data['refine'][0]:1122 self.pdplot.canvas.SetToolTipString('%8.3f %8.3fmm'%(event.xdata /scalex,event.ydata/scaley))1120 if 'Text' in str(item): 1121 self.pdplot.canvas.SetToolTipString('%8.3f %8.3fmm'%(event.xdata,event.ydata)) 1123 1122 else: 1124 1123 xcent,ycent = Data['center'] 1125 xpos = event.xdata-xcent *scalex1126 ypos = event.ydata-ycent *scaley1124 xpos = event.xdata-xcent 1125 ypos = event.ydata-ycent 1127 1126 if 'line2' in str(item) or 'line3' in str(item) and not Data['fullIntegrate']: 1128 1127 ang = int(atan2d(-ypos,xpos)) … … 1130 1129 elif 'line0' in str(item) or 'line1' in str(item): 1131 1130 radius = math.sqrt(xpos**2+ypos**2) 1132 self.pdplot.canvas.SetToolTipString('%8.3fmm'%(radius /scalex))1131 self.pdplot.canvas.SetToolTipString('%8.3fmm'%(radius)) 1133 1132 else: 1134 xp os = int(event.xdata)*self.imScale1135 yp os = int(event.ydata)*self.imScale1136 if (0 <= xp os <= size) and (0 <= ypos<= size):1137 self.pdplot.canvas.SetToolTipString('%6d'%(self.ImageZ[yp os][xpos]))1133 xpix = event.xdata*scalex 1134 ypix = event.ydata*scaley 1135 if (0 <= xpix <= size) and (0 <= ypix <= size): 1136 self.pdplot.canvas.SetToolTipString('%6d'%(self.ImageZ[ypix][xpix])) 1138 1137 1139 1138 def OnImPlotKeyPress(event): … … 1143 1142 size = len(self.ImageZ) 1144 1143 Xpos = event.xdata 1145 if Xpos: 1146 Xpos = int(Xpos)*self.imScale 1147 else: #got point out of frame 1144 if not Xpos: #got point out of frame 1148 1145 return 1149 Ypos = int(event.ydata)*self.imScale 1150 if event.key == 'c': 1151 cent = Data['center'] = [Xpos*pixelSize[0]/1000.,Ypos*pixelSize[1]/1000.] #convert to mm 1152 elif event.key == 'm': 1153 xpos = Xpos*pixelSize[0]/1000. 1154 ypos = Ypos*pixelSize[1]/1000. 1155 print 'mask = ',xpos,ypos 1146 Ypos = event.ydata 1147 if event.key == 'm': 1148 print 'mask = ',Xpos,Ypos 1156 1149 self.PlotImage() 1157 1150 … … 1168 1161 Data = self.PatternTree.GetItemPyData(self.PickId) 1169 1162 pixelSize = Data['pixelSize'] 1163 scalex = 1000./pixelSize[0] 1164 scaley = 1000./pixelSize[1] 1170 1165 if self.itemPicked is None: 1171 1166 size = len(self.ImageZ) 1172 1167 Xpos = event.xdata 1173 if Xpos and self.ifGetRing: 1174 Xpos = int(Xpos)*self.imScale 1175 else: #got point out of frame 1168 if not (Xpos and self.ifGetRing): #got point out of frame 1176 1169 return 1177 Ypos = int(event.ydata)*self.imScale1170 Ypos = event.ydata 1178 1171 if Ypos and not self.pdplot.canvas.toolbar._active: #make sure zoom/pan not selected 1179 1172 if event.button == 1: 1180 Xpos,Ypos,I,J = G2cmp.ImageLocalMax(self.ImageZ,20,Xpos,Ypos) 1173 Xpix = Xpos*scalex 1174 Ypix = Ypos*scaley 1175 xpos,ypos,I,J = G2cmp.ImageLocalMax(self.ImageZ,20,Xpix,Ypix) 1181 1176 if I and J: 1182 xpos = Xpos*pixelSize[0]/1000.1183 ypos = Ypos*pixelSize[1]/1000.1177 xpos /= scalex 1178 ypos /= scaley 1184 1179 Data['ring'].append([xpos,ypos]) 1185 1180 self.PlotImage() … … 1190 1185 ypos = event.ydata 1191 1186 if self.ifGetRing: 1192 scale = self.imScale*pixelSize[0]/1000. 1193 xypos = [xpos*scale,ypos*scale] 1187 xypos = [xpos,ypos] 1194 1188 rings = Data['ring'] 1195 1189 for ring in rings: … … 1198 1192 else: 1199 1193 xcent,ycent = Data['center'] 1200 xcent *= scalex1201 ycent *= scaley1202 1194 xpos -= xcent 1203 1195 ypos -= ycent … … 1212 1204 Data['LRazimuth'][1] = ang 1213 1205 elif 'line0' in str(self.itemPicked): 1214 Data['IOradii'][0] = radius /scalex1206 Data['IOradii'][0] = radius 1215 1207 elif 'line1' in str(self.itemPicked): 1216 Data['IOradii'][1] = radius /scalex1208 Data['IOradii'][1] = radius 1217 1209 if Data['LRazimuth'][1] < Data['LRazimuth'][0]: 1218 1210 Data['LRazimuth'][1] += 360 … … 1221 1213 self.IOradText.SetValue("%8.3f,%8.3f" % (Data['IOradii'][0],Data['IOradii'][1])) 1222 1214 self.LRazim.SetValue("%6d,%6d" % (Data['LRazimuth'][0],Data['LRazimuth'][1])) 1223 # elif 'Text' in str(self.itemPicked) and Data['refine'][0]:1224 # cent = Data['center'] = [event.xdata/scalex,event.ydata/scalex]1225 # try:1226 # self.centText.SetValue(("%8.3f,%8.3f" % (cent[0],cent[1])))1227 # except AttributeError:1228 # pass1229 1215 else: 1230 1216 print event.xdata,event.ydata,event.button … … 1259 1245 Data = self.PatternTree.GetItemPyData( \ 1260 1246 G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls')) 1261 self.imScale = 11247 imScale = 1 1262 1248 if len(self.ImageZ) > 1024: 1263 self.imScale = len(self.ImageZ)/1024 1264 xmax = len(self.ImageZ)/self.imScale 1265 xlim = (-0.5,xmax-.5) 1266 ylim = (xmax-.5,-0.5,) 1249 imScale = len(self.ImageZ)/1024 1250 pixelSize = Data['pixelSize'] 1251 scalex = 1000./pixelSize[0] 1252 scaley = 1000./pixelSize[1] 1253 xmax = len(self.ImageZ) 1254 Xmax = len(self.ImageZ)*pixelSize[0]/1000. 1255 xlim = (-0.5,Xmax-.5) 1256 ylim = (Xmax-.5,-0.5,) 1267 1257 if self.Img: 1268 1258 xlim = self.Img.axes.get_xlim() 1269 1259 ylim = self.Img.axes.get_ylim() 1270 pixelSize = Data['pixelSize']1271 Data['scalex'] = scalex = 1000./(pixelSize[0]*self.imScale)1272 Data['scaley'] = scaley = 1000./(pixelSize[1]*self.imScale)1273 1260 Imin,Imax = Data['range'][1] 1274 1261 acolor = mpl.cm.get_cmap(Data['color']) 1275 1262 xcent,ycent = Data['center'] 1276 xcent *= scalex 1277 ycent *= scaley 1278 ax.set_xlabel('Image x-axis/'+str(self.imScale),fontsize=12) 1279 ax.set_ylabel('Image y-axis/'+str(self.imScale),fontsize=12) 1280 self.Img = ax.imshow(self.ImageZ[::self.imScale,::self.imScale], \ 1281 aspect='equal',origin='upper',cmap=acolor, \ 1282 interpolation='nearest',vmin=Imin,vmax=Imax,picker=1) 1263 ax.set_xlabel('Image x-axis, mm',fontsize=12) 1264 ax.set_ylabel('Image y-axis, mm',fontsize=12) 1265 self.Img = ax.imshow(self.ImageZ[::imScale,::imScale], \ 1266 aspect='equal',cmap=acolor, \ 1267 interpolation='nearest',vmin=Imin,vmax=Imax,picker=1, \ 1268 extent=[0,Xmax,Xmax,0]) 1283 1269 ax.text(xcent,ycent,'+',ha='center',va='center',picker=3) 1284 1270 if Data['showLines']: … … 1286 1272 IOradii = Data['IOradii'] 1287 1273 arcxI = arcyI = np.array(range(LRAzim[0],LRAzim[1]+1)) 1288 arcxI = np.sin(arcxI*math.pi/180.)* scalex*Data['IOradii'][0]+xcent1289 arcyI = -np.cos(arcyI*math.pi/180.)* scaley*Data['IOradii'][0]+ycent1274 arcxI = np.sin(arcxI*math.pi/180.)*Data['IOradii'][0]+xcent 1275 arcyI = -np.cos(arcyI*math.pi/180.)*Data['IOradii'][0]+ycent 1290 1276 ax.plot(arcxI,arcyI,picker=3) 1291 1277 arcxO = arcyO = np.array(range(LRAzim[0],LRAzim[1]+1)) 1292 arcxO = np.sin(arcxO*math.pi/180.)* scalex*Data['IOradii'][1]+xcent1293 arcyO = -np.cos(arcyO*math.pi/180.)* scaley*Data['IOradii'][1]+ycent1278 arcxO = np.sin(arcxO*math.pi/180.)*Data['IOradii'][1]+xcent 1279 arcyO = -np.cos(arcyO*math.pi/180.)*Data['IOradii'][1]+ycent 1294 1280 ax.plot(arcxO,arcyO,picker=3) 1295 1281 if not Data['fullIntegrate']: 1296 1282 xbeg = arcxI[0] 1297 1283 ybeg = arcyI[0] 1298 ax.plot([xbeg,sind(LRAzim[0])*IOradii[1] *scalex+xcent],1299 [ybeg,-cosd(LRAzim[0])*IOradii[1] *scaley+ycent],picker=3)1284 ax.plot([xbeg,sind(LRAzim[0])*IOradii[1]+xcent], 1285 [ybeg,-cosd(LRAzim[0])*IOradii[1]+ycent],picker=3) 1300 1286 xbeg = arcxI[-1] 1301 1287 ybeg = arcyI[-1] 1302 ax.plot([xbeg,sind(LRAzim[1])*IOradii[1] *scalex+xcent],1303 [ybeg,-cosd(LRAzim[1])*IOradii[1] *scaley+ycent],picker=3)1288 ax.plot([xbeg,sind(LRAzim[1])*IOradii[1]+xcent], 1289 [ybeg,-cosd(LRAzim[1])*IOradii[1]+ycent],picker=3) 1304 1290 for xring,yring in Data['ring']: 1305 xring *= scalex 1306 yring *= scaley 1307 ax.text(xring,yring,'+',color='r',ha='center',va='center',picker=3) 1291 ax.text(xring,yring,'+',color='b',ha='center',va='center',picker=3) 1308 1292 if Data['setRings']: 1309 1293 for ring in Data['rings']: 1310 1294 for xring,yring in ring: 1311 xring *= scalex1312 yring *= scaley1313 1295 ax.text(xring,yring,'+',ha='center',va='center') 1314 1296 for ellipse in Data['ellipses']: 1315 1297 cent,phi,[width,height] = ellipse 1316 ax.add_artist(Ellipse([cent[0]*scalex,cent[1]*scaley],2*width*scalex,2*height*scalex,phi,ec='r',fc=None)) 1298 ax.add_artist(Ellipse([cent[0],cent[1]],2*width,2*height,phi,ec='r',fc=None)) 1299 ax.text(cent[0],cent[1],'+',color='b',ha='center',va='center',picker=3) 1317 1300 self.Img.axes.set_xlim(xlim) 1318 1301 self.Img.axes.set_ylim(ylim) -
trunk/GSASIIIO.py
r33 r36 417 417 head = ['GE detector sum data from APS 1-ID',] 418 418 if '.avg' in filename: 419 # image = np.zeros(shape=(size,size),dtype=np.int16)420 419 head = ['GE detector avg data from APS 1-ID',] 421 420 image = np.zeros(shape=(size,size),dtype=np.int32) -
trunk/GSASIIcomp.py
r35 r36 1255 1255 return cent,radius 1256 1256 1257 def ImageLocalMax(image,w,Xp os,Ypos):1257 def ImageLocalMax(image,w,Xpix,Ypix): 1258 1258 w2 = w*2 1259 1259 size = len(image) 1260 if (w < Xp os < size-w) and (w < Ypos < size-w) and image[Ypos,Xpos]:1261 Z = image[Yp os-w:Ypos+w,Xpos-w:Xpos+w]1260 if (w < Xpix < size-w) and (w < Ypix < size-w) and image[Ypix,Xpix]: 1261 Z = image[Ypix-w:Ypix+w,Xpix-w:Xpix+w] 1262 1262 Zmax = np.argmax(Z) 1263 1263 Zmin = np.argmin(Z) 1264 Xp os+= Zmax%w2-w1265 Yp os+= Zmax/w2-w1266 return Xp os,Ypos,np.ravel(Z)[Zmax],np.ravel(Z)[Zmin]1264 Xpix += Zmax%w2-w 1265 Ypix += Zmax/w2-w 1266 return Xpix,Ypix,np.ravel(Z)[Zmax],np.ravel(Z)[Zmin] 1267 1267 else: 1268 1268 return 0,0,0,0 1269 1269 1270 def makeRing(ellipse,pix,reject,scalex,scaley,im Scale,image):1270 def makeRing(ellipse,pix,reject,scalex,scaley,image): 1271 1271 cent,phi,radii = ellipse 1272 1272 cphi = cosd(phi) … … 1276 1276 x = radii[0]*cosd(a) 1277 1277 y = radii[1]*sind(a) 1278 X = (cphi*x-sphi*y+cent[0])*scalex *imScale1279 Y = (sphi*x+cphi*y+cent[1])*scaley *imScale1278 X = (cphi*x-sphi*y+cent[0])*scalex #convert mm to pixels 1279 Y = (sphi*x+cphi*y+cent[1])*scaley 1280 1280 X,Y,I,J = ImageLocalMax(image,pix,X,Y) 1281 1281 if I and J and I/J > reject: 1282 X /= scalex *imScale1283 Y /= scaley *imScale1282 X /= scalex #convert to mm 1283 Y /= scaley 1284 1284 ring.append([X,Y]) 1285 1285 if len(ring) < 45: #want more than 1/4 of a circle … … 1322 1322 print 'image calibrate' 1323 1323 ring = data['ring'] 1324 scalex = data['scalex'] # = 1000./(pixelSize[0]*self.imScale) 1325 scaley = data['scaley'] 1324 pixelSize = data['pixelSize'] 1325 scalex = 1000./pixelSize[0] 1326 scaley = 1000./pixelSize[1] 1326 1327 cutoff = data['cutoff'] 1327 1328 if len(ring) < 5: … … 1339 1340 1340 1341 #setup 180 points on that ring for "good" fit 1341 Ring = makeRing(ellipse,20,cutoff,scalex,scaley,self. imScale,self.ImageZ)1342 Ring = makeRing(ellipse,20,cutoff,scalex,scaley,self.ImageZ) 1342 1343 if Ring: 1343 1344 ellipse = FitEllipse(Ring) … … 1398 1399 elcent = [cent[0]+zdis*sinp,cent[1]-zdis*cosp] 1399 1400 ratio = radii[1]/radii[0] 1400 Ring = makeRing(ellipse,pixLimit,cutoff,scalex,scaley,self. imScale,self.ImageZ)1401 Ring = makeRing(ellipse,pixLimit,cutoff,scalex,scaley,self.ImageZ) 1401 1402 if Ring: 1402 1403 numZ = len(Ring) … … 1447 1448 else: 1448 1449 break 1449 fullSize = len(self.ImageZ)/ (self.imScale*scalex)1450 fullSize = len(self.ImageZ)/scalex 1450 1451 if 2*radii[1] < .9*fullSize: 1451 1452 print 'Are all usable rings (>25% visible) used? Try reducing Min ring I/Ib' -
trunk/GSASIIgrid.py
r32 r36 1140 1140 waveSel.SetValue("%6.5f" % (data['wavelength'])) #reset in case of error 1141 1141 1142 def OnDistance(event):1143 try:1144 dist = float(distSel.GetValue())1145 data['distance'] = dist1146 except ValueError:1147 pass1148 distSel.SetValue("%8.3f"%(data['distance'])) #reset in case of error1149 1142 # def OnDistance(event): 1143 # try: 1144 # dist = float(distSel.GetValue()) 1145 # data['distance'] = dist 1146 # except ValueError: 1147 # pass 1148 # distSel.SetValue("%8.3f"%(data['distance'])) #reset in case of error 1149 # 1150 1150 def OnCutOff(event): 1151 1151 try: … … 1223 1223 print 'image integrate' 1224 1224 1225 def SetStatusLine():1226 Status.SetStatusText("On Image: key 'c' to mark center")1227 1228 1225 colorList = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")] 1229 1226 calList = [m for m in calFile.Calibrants.keys()] … … 1232 1229 self.dataFrame.SetMenuBar(self.dataFrame.ImageMenu) 1233 1230 Status = self.dataFrame.CreateStatusBar() 1234 SetStatusLine()1235 1231 self.dataFrame.Bind(wx.EVT_MENU, OnCalibrate, id=wxID_IMCALIBRATE) 1236 1232 self.dataFrame.Bind(wx.EVT_MENU, OnClearCalib, id=wxID_IMCLEARCALIB) … … 1323 1319 dataSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Distance'),0, 1324 1320 wx.ALIGN_CENTER_VERTICAL) 1325 distSel = wx.TextCtrl(parent=self.dataDisplay,value=("%8.3f"%(data['distance'])),style=wx.TE_ PROCESS_ENTER)1326 distSel.Bind(wx.EVT_TEXT_ENTER,OnDistance)1321 distSel = wx.TextCtrl(parent=self.dataDisplay,value=("%8.3f"%(data['distance'])),style=wx.TE_READONLY) 1322 # distSel.Bind(wx.EVT_TEXT_ENTER,OnDistance) 1327 1323 dataSizer.Add(distSel,0,wx.ALIGN_CENTER_VERTICAL) 1328 1324
Note: See TracChangeset
for help on using the changeset viewer.