Changeset 240


Ignore:
Timestamp:
Jan 20, 2011 3:56:37 PM (11 years ago)
Author:
vondreele
Message:

reworked menu of image file types in FileDialog?
allow nonsquare image sizes
implement fit2D tiff files
refactor tiff image input

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r239 r240  
    407407        self.CheckNotebook()
    408408        dlg = wx.FileDialog(self, 'Choose image files', '.', '',\
    409         'MAR345 (*.mar3450;*.mar2300)|*.mar3450;*.mar2300|ADSC Image (*.img)\
    410         |*.img|Detector tif (*.tif;*.tiff)|*.tif;*.tiff|GE Image sum (*.sum)\
    411         |*.sum|GE Image avg (*.avg)\
    412         |*.avg|Any image file (*.mar3450;*.mar2300;*.img;*.tif;*.tiff;*.sum)\
    413         |*.mar3450;*.mar2300;*.img;*.tif;*.tiff;*.sum|All files (*.*)|*.*',
     409        'Any image file (*.tif;*.tiff;*.mar*;*.avg;*.sum;*.img)\
     410        |*.tif;*.tiff;*.mar*;*.avg;*.sum;*.img|\
     411        Any detector tif (*.tif;*.tiff)|*.tif;*.tiff|\
     412        MAR file (*.mar*)|*.mar*|\
     413        GE Image (*.avg;*.sum)|*.avg;*.sum|\
     414        ADSC Image (*.img)|*.img|\
     415        All files (*.*)|*.*',
    414416        wx.OPEN | wx.MULTIPLE)
    415417        if self.dirname:
     
    421423                imagefiles.sort()
    422424                for imagefile in imagefiles:
    423                     Comments,Data,Size,Image = G2IO.GetImageData(self,imagefile)
     425                    Comments,Data,Npix,Image = G2IO.GetImageData(self,imagefile)
    424426                    if Comments:
    425427                        Id = self.PatternTree.AppendItem(parent=self.root,text='IMG '+ospath.basename(imagefile))
     
    463465                        Masks = {'Points':[],'Rings':[],'Arcs':[],'Polygons':[],'Thresholds':[(Imin,Imax),[Imin,Imax]]}
    464466                        self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Masks'),Masks)
    465                         self.PatternTree.SetItemPyData(Id,[Size,imagefile])
     467                        self.PatternTree.SetItemPyData(Id,[Npix,imagefile])
    466468                        self.PickId = Id
    467469                        self.Image = Id
     
    766768                            Found = True                               
    767769                            Comments.append("%10.3f %s" % (scale,' * '+name))
    768                             size,imagefile = data
     770                            Npix,imagefile = data
    769771                            image = G2IO.GetImageData(self,imagefile,imageOnly=True)
    770772                            if First:
     
    772774                                First = False
    773775                            if imSize:
    774                                 if imSize != size:
     776                                if imSize != Npix:
    775777                                    self.ErrorDialog('Image size error','Images to be summed must be same size'+ \
    776778                                        '\nExpected:'+str(imSize)+ \
    777                                         '\nFound:   '+str(size)+'\nfor '+name)
     779                                        '\nFound:   '+str(Npix)+'\nfor '+name)
    778780                                    return
    779781                                newImage = newImage+scale*image
    780782                            else:
    781                                 imSize = size
     783                                imSize = Npix
    782784                                newImage = newImage+scale*image
    783785                            del(image)
  • trunk/GSASIIIO.py

    r239 r240  
    435435    Comments = []
    436436    if ext == '.tif':
    437         Comments,Data,Size,Image = GetTifData(imagefile)
     437        Comments,Data,Npix,Image = GetTifData(imagefile)
    438438    elif ext == '.img':
    439         Comments,Data,Size,Image = GetImgData(imagefile)
     439        Comments,Data,Npix,Image = GetImgData(imagefile)
    440440        Image[0][0] = 0
    441441    elif ext == '.mar3450' or ext == '.mar2300':
    442         Comments,Data,Size,Image = GetMAR345Data(imagefile)
     442        Comments,Data,Npix,Image = GetMAR345Data(imagefile)
    443443    elif ext in ['.sum','.avg','']:
    444         Comments,Data,Size,Image = GetGEsumData(imagefile)
     444        Comments,Data,Npix,Image = GetGEsumData(imagefile)
    445445    elif ext == '.G2img':
    446446        return GetG2Image(imagefile)
     
    448448        return Image
    449449    else:
    450         return Comments,Data,Size,Image
     450        return Comments,Data,Npix,Image
    451451       
    452452def PutG2Image(filename,image):
     
    467467        print 'Read GE sum file: ',filename   
    468468    File = open(filename,'rb')
    469     size = 2048
    470     row = 0
    471     pos = 0
    472469    if '.sum' in filename:
    473470        head = ['GE detector sum data from APS 1-ID',]
    474     if '.avg' in filename:
     471        sizexy = [2048,2047]
     472    elif '.avg' in filename:
    475473        head = ['GE detector avg data from APS 1-ID',]
     474        sizexy = [2048,2048]
    476475    else:
    477476        head = ['GE detector raw data from APS 1-ID',]
     477        sizexy = [2048,2048]
    478478        pos = 8192
    479     image = np.zeros(shape=(size,size),dtype=np.int32)
    480     while row < size:
    481479        File.seek(pos)
    482         if '.sum' in filename:
    483             line = ar.array('f',File.read(4*size))
    484             pos += 4*size
    485         elif '.avg' in filename:
    486             line = ar.array('H',File.read(2*size))
    487             pos += 2*size
    488         else:
    489             line = ar.array('H',File.read(2*size))
    490             pos += 2*size
    491         image[row] = np.asarray(line)
    492         row += 1
    493     data = {'pixelSize':(200,200),'wavelength':0.15,'distance':250.0,'center':[204.8,204.8],'size':[size,size]} 
     480    Npix = sizexy[0]*sizexy[1]
     481    if '.sum' in filename:
     482        image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.int32)
     483    elif '.avg' in filename:
     484        image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     485    else:
     486        image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     487    image = np.reshape(image,(sizexy[1],sizexy[0]))
     488    data = {'pixelSize':(200,200),'wavelength':0.15,'distance':250.0,'center':[204.8,204.8],'size':sizexy} 
    494489    File.close()   
    495490    if imageOnly:
    496491        return image
    497492    else:
    498         return head,data,size,image
     493        return head,data,Npix,image
    499494       
    500495def GetImgData(filename,imageOnly=False):
     
    513508            if 'SIZE1' in line:
    514509                size = int(line.split('=')[1])
     510                Npix = size*size
    515511            elif 'WAVELENGTH' in line:
    516512                wave = float(line.split('=')[1])
     
    531527    row = 0
    532528    pos = 512
    533     image = np.zeros(shape=(size,size),dtype=np.int32)   
    534     while row < size:
    535         File.seek(pos)
    536         line = ar.array('H',File.read(2*size))
    537         image[row] = np.asarray(line)
    538         row += 1
    539         pos += 2*size
     529    File.seek(pos)
     530    image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     531    image = np.reshape(image,(sizexy[1],sizexy[0]))
     532#    image = np.zeros(shape=(size,size),dtype=np.int32)   
     533#    while row < size:
     534#        File.seek(pos)
     535#        line = ar.array('H',File.read(2*size))
     536#        image[row] = np.asarray(line)
     537#        row += 1
     538#        pos += 2*size
    540539    File.close()
    541540    if imageOnly:
    542541        return image
    543542    else:
    544         return lines[1:-2],data,size,image
     543        return lines[1:-2],data,Npix,image
    545544       
    546545def GetMAR345Data(filename,imageOnly=False):
     
    582581            items = line.split()
    583582            size = int(items[1])
     583            Npix = size*size
    584584    pos = 4096
    585585    data['size'] = [size,size]
     
    598598        return image.T              #transpose to get it right way around
    599599    else:
    600         return head,data,size,image.T
    601    
     600        return head,data,Npix,image.T
     601       
    602602def GetTifData(filename,imageOnly=False):
    603     # only works for APS Perkin-Elmer or MAR detector data files in "TIFF" format that are readable by Fit2D
    604603    import struct as st
    605604    import array as ar
     
    616615    except IOError:
    617616        print 'no metadata file found - will try to read file anyway'
    618         head = 'no metadata file found'
     617        head = ['no metadata file found',]
    619618    tag = File.read(3)
    620619    if tag != 'II*':
     
    658657        if not imageOnly:
    659658            print 'Read APS PE-detector tiff file: ',filename
     659    elif Ityp == 3072:
     660        tifType = 'Sect 5'
     661        sizexy = [finalSize,finalSize]
     662        pixy = [158,158]
     663        pos = 512
     664        if not imageOnly:
     665            print 'Read Sect 5 tiff file: ',filename
    660666    elif Ityp == 3328:
    661667        tifType = 'MAR'
     
    668674        lines = 'unknown tif type'
    669675        return lines,0,0
    670     image = np.zeros(shape=(sizexy[1],sizexy[0]),dtype=np.int32)
    671     row = 0
    672     while row < sizexy[1]:
    673         File.seek(pos)
    674         if 'PE' in tifType or 'Pilatus' in tifType:
    675             if dataType == 5:
    676                 line = ar.array('f',File.read(4*sizexy[0]))
    677             else:
    678                 line = ar.array('L',File.read(4*sizexy[0]))
    679             pos += 4*sizexy[0]
    680         elif 'MAR' in tifType or 'Gold' in tifType:
    681             line = ar.array('H',File.read(2*sizexy[0]))
    682             pos += 2*sizexy[0]
    683         image[row] = np.asarray(line)
    684         row += 1
     676    Npix = sizexy[0]*sizexy[1]
     677    File.seek(pos)
     678    if 'PE' in tifType or 'Pilatus' in tifType:
     679        if dataType == 5:
     680            image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.int32)
     681        else:
     682            image = ar.array('L',File.read(4*Npix))
     683            image = np.array(np.asarray(image),dtype=np.int32)
     684    elif 'MAR' in tifType or 'Gold' in tifType or 'Sect 5' in tifType:
     685        image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     686    image = np.reshape(image,(sizexy[1],sizexy[0]))
    685687    center = [pixy[0]*sizexy[0]/2000,pixy[1]*sizexy[1]/2000]
    686688    data = {'pixelSize':pixy,'wavelength':0.10,'distance':100.0,'center':center,'size':sizexy}
     
    689691        return image
    690692    else:
    691         return head,data,sizexy[0],image
     693        return head,data,Npix,image
    692694   
    693695def ProjFileOpen(self):
  • trunk/GSASIIimgGUI.py

    r239 r240  
    234234                        if ifintegrate:
    235235                            id = G2gd.GetPatternTreeItemId(self, self.root, name)
    236                             size,imagefile = self.PatternTree.GetItemPyData(id)
     236                            Npix,imagefile = self.PatternTree.GetItemPyData(id)
    237237                            print imagefile
    238238                            image = G2IO.GetImageData(self,imagefile,True)
     
    292292                        if ifcopy:
    293293                            oldData = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,id, 'Image Controls'))
    294                             Data['range'] = oldData['range']                               
     294                            Data['range'] = oldData['range']
     295                            Data['size'] = oldData['size']                               
    295296                            Data['ring'] = []
    296297                            Data['rings'] = []
  • trunk/GSASIIplot.py

    r239 r240  
    832832    import numpy.ma as ma
    833833    Dsp = lambda tth,wave: wave/(2.*sind(tth/2.))
     834    global Data,Masks
     835    Data = self.PatternTree.GetItemPyData(
     836        G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
     837    Masks = self.PatternTree.GetItemPyData(
     838        G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'))
    834839
    835840    def OnImMotion(event):
    836         Data = self.PatternTree.GetItemPyData(
    837             G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    838841        Page.canvas.SetToolTipString('')
    839842        sizexy = Data['size']
     
    843846            pixelSize = Data['pixelSize']
    844847            scalex = 1000./pixelSize[0]
    845             scaley = 1000./pixelSize[1]                   
     848            scaley = 1000./pixelSize[1]
    846849            if item and self.PatternTree.GetItemText(self.PickId) == 'Image Controls':
    847850                if 'Text' in str(item):
     
    874877
    875878    def OnImPlotKeyPress(event):
    876         Data = self.PatternTree.GetItemPyData(
    877             G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    878         Masks = self.PatternTree.GetItemPyData(
    879             G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'))
    880879        if self.PatternTree.GetItemText(self.PickId) == 'Masks':
    881880            Xpos = event.xdata
     
    915914            return
    916915        if self.setPoly:
    917             Masks = self.PatternTree.GetItemPyData(
    918                 G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'))
    919916            polygon = Masks['Polygons'][-1]
    920917            xpos,ypos = event.mouseevent.xdata,event.mouseevent.ydata
     
    938935        if PickName not in ['Image Controls','Masks']:
    939936            return
    940         Data = self.PatternTree.GetItemPyData(
    941             G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    942         Masks = self.PatternTree.GetItemPyData(
    943             G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'))
    944937        pixelSize = Data['pixelSize']
    945938        scalex = 1000./pixelSize[0]
     
    979972                    itemPicked = str(self.itemPicked)
    980973                    if 'Line2D' in itemPicked and PickName == 'Image Controls':
    981                         print int(itemPicked.split('_line')[1].strip(')'))
    982974                        if 'line1' in itemPicked:
    983975                            Data['IOtth'][0] = tth
     
    10731065        self.ImageZ = G2IO.GetImageData(self,imagefile,imageOnly=True)
    10741066        self.oldImagefile = imagefile
    1075     Data = self.PatternTree.GetItemPyData(
    1076         G2gd.GetPatternTreeItemId(self,self.Image, 'Image Controls'))
    1077     Masks = self.PatternTree.GetItemPyData(
    1078         G2gd.GetPatternTreeItemId(self,self.Image, 'Masks'))
    10791067
    10801068    imScale = 1
     
    10831071    sizexy = Data['size']
    10841072    pixelSize = Data['pixelSize']
    1085 #    print sizexy,pixelSize,len(self.ImageZ),len(self.ImageZ[0])
    10861073    scalex = 1000./pixelSize[0]
    10871074    scaley = 1000./pixelSize[1]
    10881075    Xmax = sizexy[0]*pixelSize[0]/1000.
    10891076    Ymax = sizexy[1]*pixelSize[1]/1000.
    1090     xlim = (-0.5,Xmax-.5)
    1091     ylim = (Ymax-.5,-0.5,)
     1077    xlim = (0,Xmax)
     1078    ylim = (Ymax,0)
    10921079    Imin,Imax = Data['range'][1]
    10931080    acolor = mpl.cm.get_cmap(Data['color'])
     
    11071094            interpolation='nearest',vmin=0,vmax=2,extent=[0,Xmax,Xmax,0])
    11081095        Img = Plot.imshow(A,aspect='equal',cmap=acolor,
    1109             interpolation='nearest',vmin=Imin,vmax=Imax,extent=[0,Xmax,Xmax,0])
     1096            interpolation='nearest',vmin=Imin,vmax=Imax,extent=[0,Xmax,Ymax,0])
    11101097        if self.setPoly:
    11111098            Img.set_picker(True)
  • trunk/ImageCalibrants.py

    r239 r240  
    22#calibrations. Each entry consists of:
    33# 'name':(Bravais no,(a,b,c,alpha,beta,gamma),no. lines skipped,(dmin,pixLimit,cutOff)
    4 #Useful Bravais nos.: F-cubic=0,I-cubic=1,P-cubic=2,R3/m(hex)=3, P6=4
     4#Useful Bravais nos.: F-cubic=0,I-cubic=1,P-cubic=2,R3/m(hex)=3, P6=4, P4mmm=6
    55Calibrants={
    66'':(0,(0,0,0,0,0,0),0,(0,0,0)),
     
    1515'NaCl @ 298K':(0,(5.6402,5.6402,5.6402,90,90,90),0,(0.5,20,10)),
    1616'CeO2  SRM674b skip 8':(0,(5.411651,5.411651,5.411651,90,90,90),8,(0.5,2,1)),
     17'Ag behenate':(6,(1.0,1.0,58.380,90,90,90),0,(7.0,5,1)),
     18'Spun Si grating':(6,(1.0,1.0,2777.78,90,90,90),2,(200.,5,1))
    1719    }
Note: See TracChangeset for help on using the changeset viewer.