Changeset 36


Ignore:
Timestamp:
Mar 4, 2010 8:56:26 AM (12 years ago)
Author:
vondreel
Message:

and again

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r33 r36  
    371371        import copy
    372372        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)
    378377        if self.dirname:
    379378            dlg.SetDirectory(self.dirname)
     
    389388                    Comments,Data,Size,Image = G2IO.GetImgData(self.imagefile)
    390389                    Image[0][0] = 0
    391                 elif ext == '.mar3450':
     390                elif ext == '.mar3450' or ext == '.mar2300':
    392391                    Comments,Data,Size,Image = G2IO.GetMAR345Data(self.imagefile)
    393392                elif ext in ['.sum','.avg']:
     
    11191118                item = self.itemPicked
    11201119                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))
    11231122                    else:
    11241123                        xcent,ycent = Data['center']
    1125                         xpos = event.xdata-xcent*scalex
    1126                         ypos = event.ydata-ycent*scaley
     1124                        xpos = event.xdata-xcent
     1125                        ypos = event.ydata-ycent
    11271126                        if 'line2' in  str(item) or 'line3' in str(item) and not Data['fullIntegrate']:
    11281127                            ang = int(atan2d(-ypos,xpos))
     
    11301129                        elif 'line0' in  str(item) or 'line1' in str(item):
    11311130                            radius = math.sqrt(xpos**2+ypos**2)
    1132                             self.pdplot.canvas.SetToolTipString('%8.3fmm'%(radius/scalex))                           
     1131                            self.pdplot.canvas.SetToolTipString('%8.3fmm'%(radius))                           
    11331132                else:
    1134                     xpos = int(event.xdata)*self.imScale
    1135                     ypos = int(event.ydata)*self.imScale
    1136                     if (0 <= xpos <= size) and (0 <= ypos <= size):
    1137                         self.pdplot.canvas.SetToolTipString('%6d'%(self.ImageZ[ypos][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]))
    11381137
    11391138        def OnImPlotKeyPress(event):
     
    11431142                size = len(self.ImageZ)
    11441143                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
    11481145                    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
    11561149                self.PlotImage()
    11571150               
     
    11681161            Data = self.PatternTree.GetItemPyData(self.PickId)
    11691162            pixelSize = Data['pixelSize']
     1163            scalex = 1000./pixelSize[0]
     1164            scaley = 1000./pixelSize[1]
    11701165            if self.itemPicked is None:
    11711166                size = len(self.ImageZ)
    11721167                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
    11761169                    return
    1177                 Ypos = int(event.ydata)*self.imScale
     1170                Ypos = event.ydata
    11781171                if Ypos and not self.pdplot.canvas.toolbar._active:         #make sure zoom/pan not selected
    11791172                    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)
    11811176                        if I and J:
    1182                             xpos = Xpos*pixelSize[0]/1000.
    1183                             ypos = Ypos*pixelSize[1]/1000.
     1177                            xpos /= scalex
     1178                            ypos /= scaley
    11841179                            Data['ring'].append([xpos,ypos])
    11851180                    self.PlotImage()
     
    11901185                    ypos = event.ydata
    11911186                    if self.ifGetRing:
    1192                         scale = self.imScale*pixelSize[0]/1000.
    1193                         xypos = [xpos*scale,ypos*scale]
     1187                        xypos = [xpos,ypos]
    11941188                        rings = Data['ring']
    11951189                        for ring in rings:
     
    11981192                    else:
    11991193                        xcent,ycent = Data['center']
    1200                         xcent *= scalex
    1201                         ycent *= scaley
    12021194                        xpos -= xcent
    12031195                        ypos -= ycent
     
    12121204                                Data['LRazimuth'][1] = ang
    12131205                            elif 'line0' in str(self.itemPicked):
    1214                                 Data['IOradii'][0] = radius/scalex
     1206                                Data['IOradii'][0] = radius
    12151207                            elif 'line1' in str(self.itemPicked):
    1216                                 Data['IOradii'][1] = radius/scalex
     1208                                Data['IOradii'][1] = radius
    12171209                            if Data['LRazimuth'][1] < Data['LRazimuth'][0]:
    12181210                                Data['LRazimuth'][1] += 360
     
    12211213                            self.IOradText.SetValue("%8.3f,%8.3f" % (Data['IOradii'][0],Data['IOradii'][1]))
    12221214                            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 #                                pass
    12291215                        else:
    12301216                            print event.xdata,event.ydata,event.button
     
    12591245        Data = self.PatternTree.GetItemPyData( \
    12601246            G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    1261         self.imScale = 1
     1247        imScale = 1
    12621248        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,)
    12671257        if self.Img:
    12681258            xlim = self.Img.axes.get_xlim()
    12691259            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)
    12731260        Imin,Imax = Data['range'][1]
    12741261        acolor = mpl.cm.get_cmap(Data['color'])
    12751262        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])
    12831269        ax.text(xcent,ycent,'+',ha='center',va='center',picker=3)
    12841270        if Data['showLines']:
     
    12861272            IOradii = Data['IOradii']
    12871273            arcxI = arcyI = np.array(range(LRAzim[0],LRAzim[1]+1))
    1288             arcxI = np.sin(arcxI*math.pi/180.)*scalex*Data['IOradii'][0]+xcent
    1289             arcyI = -np.cos(arcyI*math.pi/180.)*scaley*Data['IOradii'][0]+ycent
     1274            arcxI = np.sin(arcxI*math.pi/180.)*Data['IOradii'][0]+xcent
     1275            arcyI = -np.cos(arcyI*math.pi/180.)*Data['IOradii'][0]+ycent
    12901276            ax.plot(arcxI,arcyI,picker=3)
    12911277            arcxO = arcyO = np.array(range(LRAzim[0],LRAzim[1]+1))
    1292             arcxO = np.sin(arcxO*math.pi/180.)*scalex*Data['IOradii'][1]+xcent
    1293             arcyO = -np.cos(arcyO*math.pi/180.)*scaley*Data['IOradii'][1]+ycent
     1278            arcxO = np.sin(arcxO*math.pi/180.)*Data['IOradii'][1]+xcent
     1279            arcyO = -np.cos(arcyO*math.pi/180.)*Data['IOradii'][1]+ycent
    12941280            ax.plot(arcxO,arcyO,picker=3)
    12951281            if not Data['fullIntegrate']:
    12961282                xbeg = arcxI[0]
    12971283                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)
    13001286                xbeg = arcxI[-1]
    13011287                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)
    13041290        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)
    13081292        if Data['setRings']:
    13091293            for ring in Data['rings']:
    13101294                for xring,yring in ring:
    1311                     xring *= scalex
    1312                     yring *= scaley
    13131295                    ax.text(xring,yring,'+',ha='center',va='center')           
    13141296        for ellipse in Data['ellipses']:
    13151297            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)
    13171300        self.Img.axes.set_xlim(xlim)
    13181301        self.Img.axes.set_ylim(ylim)
  • trunk/GSASIIIO.py

    r33 r36  
    417417        head = ['GE detector sum data from APS 1-ID',]
    418418    if '.avg' in filename:
    419 #        image = np.zeros(shape=(size,size),dtype=np.int16)
    420419        head = ['GE detector avg data from APS 1-ID',]
    421420    image = np.zeros(shape=(size,size),dtype=np.int32)
  • trunk/GSASIIcomp.py

    r35 r36  
    12551255    return cent,radius
    12561256   
    1257 def ImageLocalMax(image,w,Xpos,Ypos):
     1257def ImageLocalMax(image,w,Xpix,Ypix):
    12581258    w2 = w*2
    12591259    size = len(image)
    1260     if (w < Xpos < size-w) and (w < Ypos < size-w) and image[Ypos,Xpos]:
    1261         Z = image[Ypos-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]
    12621262        Zmax = np.argmax(Z)
    12631263        Zmin = np.argmin(Z)
    1264         Xpos += Zmax%w2-w
    1265         Ypos += Zmax/w2-w
    1266         return Xpos,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]
    12671267    else:
    12681268        return 0,0,0,0
    12691269   
    1270 def makeRing(ellipse,pix,reject,scalex,scaley,imScale,image):
     1270def makeRing(ellipse,pix,reject,scalex,scaley,image):
    12711271    cent,phi,radii = ellipse
    12721272    cphi = cosd(phi)
     
    12761276        x = radii[0]*cosd(a)
    12771277        y = radii[1]*sind(a)
    1278         X = (cphi*x-sphi*y+cent[0])*scalex*imScale
    1279         Y = (sphi*x+cphi*y+cent[1])*scaley*imScale
     1278        X = (cphi*x-sphi*y+cent[0])*scalex      #convert mm to pixels
     1279        Y = (sphi*x+cphi*y+cent[1])*scaley
    12801280        X,Y,I,J = ImageLocalMax(image,pix,X,Y)     
    12811281        if I and J and I/J > reject:
    1282             X /= scalex*imScale
    1283             Y /= scaley*imScale
     1282            X /= scalex                         #convert to mm
     1283            Y /= scaley
    12841284            ring.append([X,Y])
    12851285    if len(ring) < 45:             #want more than 1/4 of a circle
     
    13221322    print 'image calibrate'
    13231323    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]
    13261327    cutoff = data['cutoff']
    13271328    if len(ring) < 5:
     
    13391340       
    13401341    #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)
    13421343    if Ring:
    13431344        ellipse = FitEllipse(Ring)
     
    13981399        elcent = [cent[0]+zdis*sinp,cent[1]-zdis*cosp]
    13991400        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)
    14011402        if Ring:
    14021403            numZ = len(Ring)
     
    14471448        else:
    14481449            break
    1449     fullSize = len(self.ImageZ)/(self.imScale*scalex)
     1450    fullSize = len(self.ImageZ)/scalex
    14501451    if 2*radii[1] < .9*fullSize:
    14511452        print 'Are all usable rings (>25% visible) used? Try reducing Min ring I/Ib'
  • trunk/GSASIIgrid.py

    r32 r36  
    11401140        waveSel.SetValue("%6.5f" % (data['wavelength']))          #reset in case of error         
    11411141       
    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        
     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#       
    11501150    def OnCutOff(event):
    11511151        try:
     
    12231223        print 'image integrate'
    12241224       
    1225     def SetStatusLine():
    1226         Status.SetStatusText("On Image: key 'c' to mark center")
    1227                              
    12281225    colorList = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")]
    12291226    calList = [m for m in calFile.Calibrants.keys()]
     
    12321229    self.dataFrame.SetMenuBar(self.dataFrame.ImageMenu)
    12331230    Status = self.dataFrame.CreateStatusBar()
    1234     SetStatusLine()
    12351231    self.dataFrame.Bind(wx.EVT_MENU, OnCalibrate, id=wxID_IMCALIBRATE)
    12361232    self.dataFrame.Bind(wx.EVT_MENU, OnClearCalib, id=wxID_IMCLEARCALIB)   
     
    13231319    dataSizer.Add(wx.StaticText(parent=self.dataDisplay,label=' Distance'),0,
    13241320        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)
    13271323    dataSizer.Add(distSel,0,wx.ALIGN_CENTER_VERTICAL)
    13281324
Note: See TracChangeset for help on using the changeset viewer.