Changeset 62


Ignore:
Timestamp:
May 5, 2010 10:36:36 AM (14 years ago)
Author:
vondreel
Message:

more cleanup of image integration; force 32 bit arrays to reduce memory problems. Some cost in CPU time.
First use of masking to define 2-theta/azimuth limits
Allow multiple image selection for readin.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r56 r62  
    140140
    141141    def _init_coll_Export_Items(self,parent):
    142         self.ExportPattern = parent.Append(help='',id=wxID_GSASIIEXPORTPATTERN, kind=wx.ITEM_NORMAL,
     142        self.ExportPattern = parent.Append(help='Select PWDR item to enable',id=wxID_GSASIIEXPORTPATTERN, kind=wx.ITEM_NORMAL,
    143143            text='Export Powder Pattern')
    144144        self.ExportPeakList = parent.Append(help='',id=wxID_GSASIIEXPORTPEAKLIST, kind=wx.ITEM_NORMAL,
     
    236236        self.plotView = 0
    237237        self.Image = 0
     238        self.oldImagefile = ''
    238239        self.Img = 0
    239         self.TA = 0
    240240        self.Integrate = 0
    241241        self.Pwdr = False
     
    254254            pltPage = self.G2plotNB.nb.GetPage(pltNum)
    255255            pltPlot = pltPage.figure.gca()
    256 #            pltPage.xylim = [pltPlot.get_xlim(),pltPlot.get_ylim()]
    257 #            print pltPage.xylim
    258 #            pltPage.views = copy.deepcopy(pltPage.toolbar._views)
    259256        item = event.GetItem()
    260257        G2gd.MovePatternTreeToGrid(self,item)
     
    370367    def OnImageRead(self,event):
    371368        self.CheckNotebook()
    372         dlg = wx.FileDialog(self, 'Choose image file', '.', '',\
     369        dlg = wx.FileDialog(self, 'Choose image files', '.', '',\
    373370        'MAR345 (*.mar3450;*.mar2300)|*.mar3450;*.mar2300|ADSC Image (*.img)\
    374371        |*.img|Perkin-Elmer TIF (*.tif)|*.tif|GE Image sum (*.sum)\
    375         |*.sum|GE Image avg (*.avg)|*.avg|All files (*.*)|*.*',wx.OPEN)
     372        |*.sum|GE Image avg (*.avg)|*.avg|All files (*.*)|*.*',wx.OPEN | wx.MULTIPLE)
    376373        if self.dirname:
    377374            dlg.SetDirectory(self.dirname)
    378375        try:
    379376            if dlg.ShowModal() == wx.ID_OK:
    380                 imagefile = dlg.GetPath()
    381377                self.dirname = dlg.GetDirectory()
    382                 Comments,Data,Size,Image = G2IO.GetImageData(imagefile)
    383                 if Comments:
    384                     Id = self.PatternTree.AppendItem(parent=self.root,text='IMG '+ospath.basename(imagefile))
    385                     self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments)
    386                     Imax = np.amax(Image)
    387                     Imin = np.amin(Image)
    388                     if self.imageDefault:
    389                         Data = copy.copy(self.imageDefault)
    390                         Data['refine'] = [False,False,False,False,False]
    391                         Data['showLines'] = True
    392                     else:
    393                         Data['color'] = 'binary'
    394                         Data['tilt'] = 0.0
    395                         Data['rotation'] = 0.0
    396                         Data['showLines'] = False
    397                         Data['ring'] = []
    398                         Data['rings'] = []
    399                         Data['cutoff'] = 10
    400                         Data['pixLimit'] = 20
    401                         Data['ellipses'] = []
    402                         Data['masks'] = []
    403                         Data['calibrant'] = ''
    404                         Data['IOtth'] = [2.0,5.0]
    405                         Data['LRazimuth'] = [-135,-45]
    406                         Data['outChannels'] = 2500
    407                         Data['outAzimuths'] = 1
    408                         Data['fullIntegrate'] = False
    409                         Data['setRings'] = False
    410                     Data['setDefault'] = False
    411                     Data['range'] = [(Imin,Imax),[Imin,Imax]]
    412                     self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)
    413                     self.PatternTree.SetItemPyData(Id,[Size,imagefile])
    414                     self.PickId = Id
    415                     self.Image = Id
    416                     self.PatternTree.SelectItem(Id)
    417                     self.PatternTree.Expand(Id)
     378                imagefiles = dlg.GetPaths()
     379                imagefiles.sort()
     380                for imagefile in imagefiles:
     381                    Comments,Data,Size,Image = G2IO.GetImageData(imagefile)
     382                    if Comments:
     383                        Id = self.PatternTree.AppendItem(parent=self.root,text='IMG '+ospath.basename(imagefile))
     384                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments)
     385                        Imax = np.amax(Image)
     386                        Imin = np.amin(Image)
     387                        if self.imageDefault:
     388                            Data = copy.copy(self.imageDefault)
     389                            Data['showLines'] = True
     390                            Data['ring'] = []
     391                            Data['rings'] = []
     392                            Data['cutoff'] = 10
     393                            Data['pixLimit'] = 20
     394                            Data['ellipses'] = []
     395                            Data['masks'] = []
     396                            Data['calibrant'] = ''
     397                        else:
     398                            Data['color'] = 'binary'
     399                            Data['tilt'] = 0.0
     400                            Data['rotation'] = 0.0
     401                            Data['showLines'] = False
     402                            Data['ring'] = []
     403                            Data['rings'] = []
     404                            Data['cutoff'] = 10
     405                            Data['pixLimit'] = 20
     406                            Data['ellipses'] = []
     407                            Data['masks'] = []
     408                            Data['calibrant'] = ''
     409                            Data['IOtth'] = [2.0,5.0]
     410                            Data['LRazimuth'] = [-135,-45]
     411                            Data['outChannels'] = 2500
     412                            Data['outAzimuths'] = 1
     413                            Data['fullIntegrate'] = False
     414                            Data['setRings'] = False
     415                        Data['setDefault'] = False
     416                        Data['range'] = [(Imin,Imax),[Imin,Imax]]
     417                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)
     418                        self.PatternTree.SetItemPyData(Id,[Size,imagefile])
     419                        self.PickId = Id
     420                        self.Image = Id
     421                self.PatternTree.SelectItem(Id)             #show last one
     422                self.PatternTree.Expand(Id)
    418423        finally:
    419424            dlg.Destroy()
     
    463468            sub = self.PatternTree.AppendItem(parent=self.root,text='Controls')
    464469            self.PatternTree.SetItemPyData(sub,[0])
    465        
    466        
     470               
    467471    class SumDialog(wx.Dialog):
    468472        def __init__(self,parent,title,text,type,data):
     
    514518            try:
    515519                self.data[id][0] = float(value)
     520                self.FindWindowById(id).SetValue('%.3f'%(self.data[id][0]))
    516521            except ValueError:
    517522                if value and '-' not in value[0]:
     
    650655                if dlg.ShowModal() == wx.ID_OK:
    651656                    imSize = 0
    652                     newImage = []
    653657                    result = dlg.GetData()
     658                    First = True
    654659                    for i,item in enumerate(result[:-1]):
    655660                        scale,name = item
    656661                        data = DataList[i]
    657                         if scale:
     662                        if scale:                               
    658663                            Comments.append("%10.3f %s" % (scale,' * '+name))
    659                             size,image = data
     664                            size,imagefile = data
     665                            image = G2IO.GetImageData(imagefile,imageOnly=True)
     666                            if First:
     667                                newImage = np.zeros_like(image)
     668                                First = False
    660669                            if imSize:
    661670                                if imSize != size:
     
    664673                                        '\nFound:   '+str(size)+'\nfor '+name)
    665674                                    return
    666                                 newImage += scale*image
     675                                newImage = newImage+scale*image
    667676                            else:
    668677                                imSize = size
    669                                 newImage = scale*image
     678                                newImage = newImage+scale*image
     679                    newImage = np.asfarray(newImage,dtype=np.float32)                       
     680                    print 'result dtype',newImage.dtype                               
    670681                    outname = 'IMG '+result[-1]
    671682                    Id = 0
     
    680691                        Id = self.PatternTree.AppendItem(parent=self.root,text=outname)
    681692                    if Id:
    682                         self.PatternTree.SetItemPyData(Id,[imSize,newImage])
    683                         self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments)
    684                         self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)                                           
    685                         self.PatternTree.SelectItem(Id)
    686                         self.PatternTree.Expand(Id)
    687                     self.PickId = Id
    688                     self.Image = Id
     693                        dlg = wx.FileDialog(self, 'Choose sum image filename', '.', '',
     694                            'G2img files (*.G2img)|*.G2img',
     695                            wx.SAVE|wx.FD_OVERWRITE_PROMPT)
     696                        if self.dirname: dlg.SetDirectory(self.dirname)
     697                        if dlg.ShowModal() == wx.ID_OK:
     698                            self.dirname = dlg.GetDirectory()
     699                            newimagefile = dlg.GetPath()
     700                            G2IO.PutG2Image(newimagefile,newImage)
     701                            newImage = []
     702                            self.PatternTree.SetItemPyData(Id,[imSize,newimagefile])
     703                            self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Comments'),Comments)
     704                        if self.imageDefault:
     705                            Data = copy.copy(self.imageDefault)
     706                            Data['showLines'] = True
     707                            Data['ring'] = []
     708                            Data['rings'] = []
     709                            Data['cutoff'] = 10
     710                            Data['pixLimit'] = 20
     711                            Data['ellipses'] = []
     712                            Data['masks'] = []
     713                            Data['calibrant'] = ''
     714                            self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Image Controls'),Data)                                           
     715                            self.PatternTree.SelectItem(Id)
     716                            self.PatternTree.Expand(Id)
     717                        self.PickId = Id
     718                        self.Image = Id
    689719            finally:
    690720                dlg.Destroy()
  • trunk/GSASIIIO.py

    r56 r62  
    400400    elif ext in ['.sum','.avg']:
    401401        Comments,Data,Size,Image = GetGEsumData(imagefile)
     402    elif ext == '.G2img':
     403        return GetG2Image(imagefile)
    402404    if imageOnly:
    403405        return Image
    404406    else:
    405407        return Comments,Data,Size,Image
    406 
     408       
     409def PutG2Image(filename,image):
     410    File = open(filename,'wb')
     411    cPickle.dump(image,File,1)
     412    File.close()
     413    return
     414   
     415def GetG2Image(filename):
     416    File = open(filename,'rb')
     417    image = cPickle.load(File)
     418    File.close()
     419    return image
    407420   
    408421def GetGEsumData(filename,imageOnly=False):
    409422    import array as ar
    410     print 'Read GE sum file: ',filename   
     423    if not imageOnly:
     424        print 'Read GE sum file: ',filename   
    411425    File = open(filename,'rb')
    412426    size = 2048
     
    438452    import struct as st
    439453    import array as ar
    440     print 'Read ADSC img file: ',filename
     454    if not imageOnly:
     455        print 'Read ADSC img file: ',filename
    441456    File = open(filename,'rb')
    442457    head = File.read(511)
     
    492507        return None,None,None,None
    493508
    494     print 'Read Mar345 file: ',filename
     509    if not imageOnly:
     510        print 'Read Mar345 file: ',filename
    495511    File = open(filename,'rb')
    496512    head = File.read(4095)
     
    530546    image = pf.pack_f(len(raw),raw,size,image)
    531547    if imageOnly:
    532         return image.T
     548        return image.T              #transpose to get it right way around
    533549    else:
    534550        return head,data,size,image.T
     
    538554    import struct as st
    539555    import array as ar
    540     print 'Read APS PE-detector tiff file: ',filename
     556    if not imageOnly:
     557        print 'Read APS PE-detector tiff file: ',filename
    541558    File = open(filename,'Ur')
    542559    dataType = 5
     
    576593        return head,data,size,image
    577594   
    578 
    579595def ProjFileOpen(self):
    580596    file = open(self.GSASprojectfile,'rb')
     
    589605            datum = data[0]
    590606            print 'load: ',datum[0]
    591             if 'PWDR' in datum[0] and 'list' in str(type(datum[1][1][0])):      #fix to convert old style list arrays to numpy arrays
     607           
     608            #temporary fixes to old project files
     609            #fix to convert old style list arrays to numpy arrays
     610            if 'PWDR' in datum[0] and 'list' in str(type(datum[1][1][0])):     
    592611                X = datum[1][1]
    593612                X = [np.array(X[0]),np.array(X[1]),np.array(X[2]),np.array(X[3]),np.array(X[4]),np.array(X[5])]
    594613                datum[1] = [datum[1][0],X]
    595614                print 'powder data converted to numpy arrays'
     615            #temporary fix to insert 'PWDR' in front of powder names
    596616            if 'PKS' not in datum[0] and 'IMG' not in datum[0] and 'SNGL' not in datum[0]:
    597                 if datum[0] not in ['Notebook','Controls','Phases'] and 'PWDR' not in datum[0]:            #temporary fix
     617                if datum[0] not in ['Notebook','Controls','Phases'] and 'PWDR' not in datum[0]:
    598618                    datum[0] = 'PWDR '+datum[0]
     619                    print 'add PWDR to powder names'
     620            #end of temporary fixes
     621           
    599622            Id = self.PatternTree.AppendItem(parent=self.root,text=datum[0])
    600623            self.PatternTree.SetItemPyData(Id,datum[1])
    601624            for datus in data[1:]:
    602625                print '    load: ',datus[0]
     626               
     627                #temporary fix to add azimuthal angle to instrument parameters
    603628                if 'PWDR' in datum[0] and 'Instrument Parameters' in datus[0]:
    604629                    if len(datus[1][0]) == 10 or len(datus[1][0]) == 12:
     
    607632                        datus[1][2].append(0.0)
    608633                        datus[1][3].append('Azimuth')
     634                        print 'add azimuth to instrument parameters'
     635                #end of temporary fix       
     636               
    609637                sub = self.PatternTree.AppendItem(Id,datus[0])
    610638                self.PatternTree.SetItemPyData(sub,datus[1])
     639               
     640            #temporary fix to add Comments to powder data sets
    611641            if 'PWDR' in datum[0] and not G2gd.GetPatternTreeItemId(self,Id, 'Comments'):
    612642                print 'no comments - add comments'
    613643                sub = self.PatternTree.AppendItem(Id,'Comments')
    614644                self.PatternTree.SetItemPyData(sub,['no comments'])
     645            #end of temporary fix
     646                               
     647            if 'IMG' in datum[0]:                   #retreive image default flag & data if set
     648                Data = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,Id,'Image Controls'))
     649                if Data['setDefault']:
     650                    self.imageDefault = Data
    615651               
    616652        file.close()
     653       
     654        #temporary fix to add Notebook & Controls to project
    617655        if not G2gd.GetPatternTreeItemId(self,self.root,'Notebook'):
    618656            sub = self.PatternTree.AppendItem(parent=self.root,text='Notebook')
     
    620658            sub = self.PatternTree.AppendItem(parent=self.root,text='Controls')
    621659            self.PatternTree.SetItemPyData(sub,[0])
     660            print 'add Notebook and Controls to project'
    622661           
    623662    finally:
     
    653692def powderFxyeSave(self,powderfile):
    654693    file = open(powderfile,'w')
     694    prm = open(powderfile.strip('fxye')+'prm','w')      #old style GSAS parm file
    655695    print 'save powder pattern to file: ',powderfile
    656696    wx.BeginBusyCursor()
     697    Inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, \
     698                    self.PickId, 'Instrument Parameters'))[1]
     699    if len(Inst) == 11:             #single wavelength
     700        lam1 = Inst[1]
     701        lam2 = 0.0
     702        GU,GV,GW = Inst[4:7]
     703        LX,LY = Inst[7:9]
     704        SL = HL = Inst[9]/2.0   
     705    else:                           #Ka1 & Ka2
     706        lam1 = Inst[1]
     707        lam2 = Inst[2]
     708        GU,GV,GW = Inst[6:9]
     709        LX,LY = Inst[9:11]
     710        SL = HL = Inst[11]/2.0   
     711    prm.write( '            123456789012345678901234567890123456789012345678901234567890        '+'\n')
     712    prm.write( 'INS   BANK      1                                                               '+'\n')
     713    prm.write( 'INS   HTYPE   PXCR                                                              '+'\n')
     714    prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(lam1,lam2))
     715    prm.write( 'INS  1 IRAD     0                                                               '+'\n')
     716    prm.write( 'INS  1I HEAD                                                                    '+'\n')
     717    prm.write( 'INS  1I ITYP    0    0.0000  180.0000         1                                 '+'\n')
     718    prm.write( 'INS  1PRCF1     3    8   0.00100                                                '+'\n')
     719    prm.write(('INS  1PRCF11     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(GU,GV,GW,0.0))
     720    prm.write(('INS  1PRCF12     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(LX,LY,SL,HL))
     721    prm.close()
    657722    try:
    658723        x,y,w,yc,yb,yd = self.PatternTree.GetItemPyData(self.PickId)[1]
    659         x = x*100.
     724        file.write(powderfile+'\n')
     725        file.write('BANK 1 %d %d CONS %.2f %.2f 0 0 FXYE\n'%(len(x),len(x),\
     726            100.*x[0],100.*(x[1]-x[0])))       
    660727        XYW = zip(x,y,w)
    661728        for X,Y,W in XYW:
    662             file.write("%15.6g %15.6g %15.6g\n" % (X,Y,W))
     729            file.write("%15.6g %15.6g %15.6g\n" % (100.*X,Y,W))
    663730        file.close()
    664731    finally:
  • trunk/GSASIIcomp.py

    r56 r62  
    11661166            cycle = 0
    11671167            while cycle < 5:
    1168                 dlg = wx.ProgressDialog("Generated reflections",tries[cycle]+" cell search for "+bravaisNames[ibrav],ncMax, \
     1168                dlg = wx.ProgressDialog("Generated reflections",tries[cycle]+" cell search for "+bravaisNames[ibrav],ncMax,
    11691169                    style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)
    11701170                screenSize = wx.DisplaySize()
     
    15871587                tiltSum += numZ*abs(Tilt)
    15881588            cent = data['center']
    1589             print 'for ring # %2i dist %.3f rotate %6.2f tilt %6.2f Xcent %.3f Ycent %.3f Npts %d' \
    1590                 %(i,dist,phi,Tilt,cent[0],cent[1],numZ)
     1589            print ('for ring # %2i dist %.3f rotate %6.2f tilt %6.2f Xcent %.3f Ycent %.3f Npts %d'
     1590                %(i,dist,phi,Tilt,cent[0],cent[1],numZ))
    15911591            data['ellipses'].append(copy.deepcopy(ellipse+('r',)))
    15921592            G2plt.PlotImage(self)
     
    16361636   
    16371637def ImageIntegrate(self,data):
     1638    import matplotlib as mpl
     1639    import numpy.ma as ma
    16381640    print 'image integrate'
    16391641    pixelSize = data['pixelSize']
     
    16471649    numAzms = data['outAzimuths']
    16481650    numChans = data['outChannels']
    1649     outGrid = np.zeros(shape=(numAzms,numChans))
    1650     outNum = np.zeros(shape=(numAzms,numChans))           
    16511651    imageN = len(self.ImageZ)
    16521652    t0 = time.time()
    16531653    print 'Create ',imageN,' X ',imageN,' 2-theta,azimuth map'
    16541654    tax,tay = np.mgrid[0:imageN,0:imageN]
    1655     tax = np.asfarray(tax)
    1656     tay = np.asfarray(tay)
    1657     tax *= scalex
    1658     tay *= scaley
     1655    tax = np.asfarray(tax*scalex,dtype=np.float32)
     1656    tay = np.asfarray(tay*scaley,dtype=np.float32)
    16591657    t1 = time.time()
    16601658    print "Elapsed time:","%8.3f"%(t1-t0), "s"
    16611659    print 'Fill map with 2-theta/azimuth values'
    1662     self.TA = GetTthAzm(tay,tax,data)           #2-theta & azimuth arrays
    1663     self.TA = np.reshape(self.TA,(2,imageN,imageN))
    1664     self.TA = np.dstack((self.TA[1],self.TA[0]))    #azimuth, 2-theta
     1660    TA = GetTthAzm(tay,tax,data)           #2-theta & azimuth arrays
     1661    del tax,tay
     1662    TA = np.reshape(TA,(2,imageN,imageN))
     1663    TA = np.dstack((ma.getdata(TA[1]),ma.getdata(TA[0])))    #azimuth, 2-theta
    16651664    t2 = time.time()
     1665    tax,tay = np.dsplit(TA,2)    #azimuth, 2-theta
     1666    tax = ma.masked_outside(tax.flatten(),LRazm[0],LRazm[1])
     1667    tay = ma.masked_outside(tay.flatten(),LUtth[0],LUtth[1])
     1668    tam = ma.getmask(tax)+ma.getmask(tay)
     1669    taz = ma.masked_where(tam,self.ImageZ.flatten())
     1670    G2plt.PlotTRImage(self,np.reshape(tax,(imageN,imageN)),
     1671        np.reshape(tay,(imageN,imageN)),np.reshape(taz,(imageN,imageN)),newPlot=True)
     1672    del TA
    16661673    print "Elapsed time:","%8.3f"%(t2-t1), "s"
    1667 #    G2plt.PlotTRImage(self,newPlot=True)
    16681674    print 'Form 1-D histograms for ',numAzms,' azimuthal angles'
    16691675    print 'Integration limits:',LUtth,LRazm
    1670     tax,tay = np.dsplit(self.TA,2)    #azimuth, 2-theta, intensity
    1671     NST = np.histogram2d(tax.flatten(),tay.flatten(),normed=False, \
    1672         bins=(numAzms,numChans),range=[LRazm,LUtth])
    1673     HST = np.histogram2d(tax.flatten(),tay.flatten(),normed=False, \
    1674         bins=(numAzms,numChans),weights=self.ImageZ.flatten(),range=[LRazm,LUtth])
     1676    NST = np.histogram2d(tax,tay,normed=False,bins=(numAzms,numChans),range=[LRazm,LUtth])
     1677    HST = np.histogram2d(tax,tay,normed=False,bins=(numAzms,numChans),range=[LRazm,LUtth],weights=taz)
     1678    del tax,tay,taz
    16751679    t3 = time.time()
    16761680    print "Elapsed time:","%8.3f"%(t3-t2), "s"
    16771681    self.Integrate = [HST[0]/NST[0],HST[1],HST[2]]
     1682    del NST,HST
    16781683    G2plt.PlotIntegration(self,newPlot=True)
    16791684   
  • trunk/GSASIIgrid.py

    r55 r62  
    13651365    cutOff = wx.TextCtrl(parent=self.dataDisplay,value=("%.1f" % (data['cutoff'])),
    13661366        style=wx.TE_PROCESS_ENTER)
    1367     cutOff.Bind(wx.EVT_TEXT_ENTER,OnCutOff)
     1367    cutOff.Bind(wx.EVT_TEXT,OnCutOff)
    13681368    comboSizer.Add(cutOff,0,wx.ALIGN_CENTER_VERTICAL)
    13691369
     
    14111411    waveSel = wx.TextCtrl(parent=self.dataDisplay,value=("%6.5f" % (data['wavelength'])),
    14121412        style=wx.TE_PROCESS_ENTER)
    1413     waveSel.Bind(wx.EVT_TEXT_ENTER,OnWavelength)
     1413    waveSel.Bind(wx.EVT_TEXT,OnWavelength)
    14141414    dataSizer.Add(waveSel,0,wx.ALIGN_CENTER_VERTICAL)
    14151415         
     
    14371437    littleSizer = wx.BoxSizer(wx.HORIZONTAL)
    14381438    outChan = wx.TextCtrl(parent=self.dataDisplay,value=str(data['outChannels']),style=wx.TE_PROCESS_ENTER)
    1439     outChan.Bind(wx.EVT_TEXT_ENTER,OnNumOutChans)
     1439    outChan.Bind(wx.EVT_TEXT,OnNumOutChans)
    14401440    littleSizer.Add(outChan,0,wx.ALIGN_CENTER_VERTICAL)
    14411441    outAzim = wx.TextCtrl(parent=self.dataDisplay,value=str(data['outAzimuths']),style=wx.TE_PROCESS_ENTER)
    1442     outAzim.Bind(wx.EVT_TEXT_ENTER,OnNumOutAzms)
     1442    outAzim.Bind(wx.EVT_TEXT,OnNumOutAzms)
    14431443    littleSizer.Add(outAzim,0,wx.ALIGN_CENTER_VERTICAL)
    14441444    dataSizer.Add(littleSizer,0,)
     
    18611861    self.dataFrame.Raise()           
    18621862    self.PickId = 0
    1863     self.PatternId = 0
    18641863    parentID = self.root
     1864    self.ExportPattern.Enable(False)
    18651865    if item != self.root:
    18661866        parentID = self.PatternTree.GetItemParent(item)
    18671867    if self.PatternTree.GetItemParent(item) == self.root:
    18681868        self.PatternId = item
    1869         self.ExportPattern.Enable(True)
    18701869        self.PickId = item
    18711870        if self.PatternTree.GetItemText(item) == 'Notebook':
     
    18861885            G2plt.PlotPowderLines(self)
    18871886        elif 'PWDR' in self.PatternTree.GetItemText(item):           
     1887            self.ExportPattern.Enable(True)
    18881888            G2plt.PlotPatterns(self,newPlot=True)
    18891889        elif 'SXTL' in self.PatternTree.GetItemText(item):
  • trunk/GSASIIplot.py

    r56 r62  
    4646        self.SetSizer(sizer)
    4747        self.status = parent.CreateStatusBar()
     48#        self.Bind(wx.aui.EVT_AUI_PAGE_CHANGED, self.OnPageChanged)
    4849       
    4950        self.plotList = []
     
    5657       
    5758        return page.figure
     59       
     60    def OnPageChanged(self,event):
     61        print 'page changed'
    5862       
    5963def PlotSngl(self,newPlot=False):
     
    248252        if xpos:                                        #avoid out of frame mouse position
    249253            ypos = event.ydata
    250             wave = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, \
    251                 self.PatternId, 'Instrument Parameters'))[0][1]
    252             dsp = 0.0
    253             if abs(xpos) > 0.:
    254                 dsp = wave/(2.*sind(abs(xpos)/2.0))
    255254            Page.canvas.SetCursor(wx.CROSS_CURSOR)
    256             self.G2plotNB.status.SetFields(['2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),])
    257             if self.itemPicked:
    258                 Page.canvas.SetToolTipString('%9.3f'%(xpos))
     255            try:
     256                wave = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, \
     257                    self.PatternId, 'Instrument Parameters'))[0][1]
     258                dsp = 0.0
     259                if abs(xpos) > 0.:                  #avoid possible singularity at beam center
     260                    dsp = wave/(2.*sind(abs(xpos)/2.0))
     261                self.G2plotNB.status.SetFields(['2-theta =%9.3f d =%9.5f Intensity =%9.1f'%(xpos,dsp,ypos),])
     262                if self.itemPicked:
     263                    Page.canvas.SetToolTipString('%9.3f'%(xpos))
     264            except TypeError:
     265                self.G2plotNB.status.SetFields(['Select PWDR powder pattern first',])
     266               
    259267                   
    260268    def OnRelease(event):
     
    656664    Plot.set_title(self.PatternTree.GetItemText(self.Image)[4:])
    657665    size,imagefile = self.PatternTree.GetItemPyData(self.Image)
    658     self.ImageZ = G2IO.GetImageData(imagefile,True)
     666    if imagefile != self.oldImagefile:
     667        self.ImageZ = G2IO.GetImageData(imagefile,imageOnly=True)
     668        self.oldImagefile = imagefile
    659669    Data = self.PatternTree.GetItemPyData( \
    660670        G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
     
    731741        Page.canvas.draw()
    732742           
    733 def PlotTRImage(self,newPlot=False):
     743def PlotTRImage(self,tax,tay,taz,newPlot=False):
    734744           
    735745    def OnMotion(event):
     
    741751            self.G2plotNB.status.SetFields(\
    742752                ['Detector 2-th =%9.3fdeg, azm = %7.2fdeg'%(tth,azm),])
    743                    
    744     def OnPick(event):
    745         if self.PatternTree.GetItemText(self.PickId) != 'Image Controls':
    746             return
    747         if self.itemPicked is not None: return
    748         pick = event.artist
    749         self.itemPicked = pick
    750        
    751     def OnRelease(event):
    752         if self.PatternTree.GetItemText(self.PickId) != 'Image Controls':
    753             return
    754         Data = self.PatternTree.GetItemPyData(self.PickId)
    755         if self.itemPicked:
    756             xpos = event.xdata
    757             if xpos:                                        #avoid out of frame mouse position
    758                 ypos = event.ydata
    759                 if 'Line2D' in str(self.itemPicked):
    760                     if 'line0' in str(self.itemPicked):
    761                         Data['IOtth'][0] = ypos
    762                     elif 'line1' in str(self.itemPicked):
    763                         Data['IOtth'][1] = ypos
    764                     elif 'line2' in str(self.itemPicked) and not Data['fullIntegrate']:
    765                         Data['LRazimuth'][0] = int(xpos)
    766                     elif 'line3' in str(self.itemPicked) and not Data['fullIntegrate']:
    767                         Data['LRazimuth'][1] = int(xpos)
    768                        
    769                     if Data['LRazimuth'][1] < Data['LRazimuth'][0]:
    770                         Data['LRazimuth'][1] += 360
    771                     if  Data['IOtth'][0] > Data['IOtth'][1]:
    772                         Data['IOtth'] = G2cmp.SwapXY(Data['IOtth'][0],Data['IOtth'][1])
    773                        
    774                     self.InnerTth.SetValue("%8.2f" % (Data['IOtth'][0]))
    775                     self.OuterTth.SetValue("%8.2f" % (Data['IOtth'][1]))
    776                     self.Lazim.SetValue("%6d" % (Data['LRazimuth'][0]))
    777                     self.Razim.SetValue("%6d" % (Data['LRazimuth'][1]))
    778                 else:
    779                     print event.xdata,event.ydata,event.button
    780                 PlotTRImage(self)
    781             self.itemPicked = None
    782            
     753                               
    783754    try:
    784755        plotNum = self.G2plotNB.plotList.index('2D Transformed Powder Image')
     
    795766        Page = self.G2plotNB.nb.GetPage(plotNum)
    796767        Page.canvas.mpl_connect('motion_notify_event', OnMotion)
    797         Page.canvas.mpl_connect('pick_event', OnPick)
    798         Page.canvas.mpl_connect('button_release_event', OnRelease)
    799768        Page.views = False
    800769        view = False
     
    803772    Data = self.PatternTree.GetItemPyData( \
    804773        G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    805     size,imagefile = self.PatternTree.GetItemPyData(self.Image)
    806     self.ImageZ = G2IO.GetImageData(imagefile,True)
    807     image = self.ImageZ
    808     Iz = len(image)
    809774    Imin,Imax = Data['range'][1]
    810775    step = (Imax-Imin)/5.
     
    813778    Plot.set_xlabel('azimuth',fontsize=12)
    814779    Plot.set_ylabel('2-theta',fontsize=12)
    815     Plot.contour(self.TA[:,:,0],self.TA[:,:,1],image,V,cmap=acolor)
     780    Plot.contour(tax,tay,taz,V,cmap=acolor)
    816781    if Data['showLines']:
    817782        IOtth = Data['IOtth']
     
    847812def PlotExposedImage(self,newPlot=False):
    848813    plotNo = self.G2plotNB.nb.GetSelection()
    849     if self.G2plotNB.nb.GetPageText(plotNo) == '2D Transformed Powder Image':
    850         PlotTRImage(self,newPlot)
    851     elif self.G2plotNB.nb.GetPageText(plotNo) == '2D Powder Image':
     814    if self.G2plotNB.nb.GetPageText(plotNo) == '2D Powder Image':
    852815        PlotImage(self,newPlot)
    853816    elif self.G2plotNB.nb.GetPageText(plotNo) == '2D Integration':
Note: See TracChangeset for help on using the changeset viewer.