Changeset 243


Ignore:
Timestamp:
Feb 8, 2011 3:47:07 PM (11 years ago)
Author:
vondreele
Message:

GSASIIpeak.py - added factorize for future use in finding good numbers for fft
GSASIIimgGUI.py - minor tweak to q-value formatting & make small angle name 'SASD'
GSASIIIO.py - major refactor of GetTifData?

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r240 r243  
    616616        print 'no metadata file found - will try to read file anyway'
    617617        head = ['no metadata file found',]
    618     tag = File.read(3)
    619     if tag != 'II*':
     618       
     619    tag = File.read(2)
     620    byteOrd = '<'
     621    if tag == 'II' and int(st.unpack('<h',File.read(2))[0]) == 42:     #little endian
     622        IFD = int(st.unpack(byteOrd+'i',File.read(4))[0])
     623    elif tag == 'MM' and int(st.unpack('>h',File.read(2))[0]) == 42:   #big endian
     624        byteOrd = '>'
     625        IFD = int(st.unpack(byteOrd+'i',File.read(4))[0])       
     626    else:
    620627        lines = ['not a detector tiff file',]
    621         return lines,0,0
    622     origSize,Ityp = st.unpack('<ii',File.read(8))
    623     File.seek(30)
    624     finalSize = st.unpack('<i',File.read(4))[0]
    625     if finalSize:
    626         sizeScale = origSize/finalSize
    627     else:
    628         sizeScale = 1
    629         finalSize = origSize
    630     if Ityp == 0:
    631         File.seek(62)
    632         S = File.read(32)
     628        return lines,0,0,0
     629    File.seek(IFD)                                                  #get number of directory entries
     630    NED = int(st.unpack(byteOrd+'h',File.read(2))[0])
     631    IFD = {}
     632    for ied in range(NED):
     633        Tag,Type = st.unpack(byteOrd+'Hh',File.read(4))
     634        nVal = st.unpack(byteOrd+'i',File.read(4))[0]
     635        if Type == 1:
     636            Value = st.unpack(byteOrd+nVal*'b',File.read(nVal))
     637        elif Type == 2:
     638            Value = st.unpack(byteOrd+'i',File.read(4))
     639        elif Type == 3:
     640            Value = st.unpack(byteOrd+nVal*'i',File.read(nVal*4))
     641        elif Type == 4:
     642            Value = st.unpack(byteOrd+nVal*'i',File.read(nVal*4))
     643        elif Type == 5:
     644            Value = st.unpack(byteOrd+nVal*'i',File.read(nVal*4))
     645        elif Type == 11:
     646            Value = st.unpack(byteOrd+nVal*'f',File.read(nVal*4))
     647        IFD[Tag] = [Type,nVal,Value]
     648    sizexy = [IFD[256][2][0],IFD[257][2][0]]
     649    [nx,ny] = sizexy
     650    Npix = nx*ny
     651    if 272 in IFD:
     652        ifd = IFD[272]
     653        File.seek(ifd[2][0])
     654        S = File.read(ifd[1])
    633655        if 'PILATUS' in S:
     656            tifType = 'Pilatus'
    634657            dataType = 0
    635             tifType = 'Pilatus'
    636             if '2M' in S:
    637                 sizexy = [1475,1679]
    638             elif '100K' in S:
    639                 sizexy = [487,195]
    640658            pixy = (172,172)
    641             pos = 4096
     659            File.seek(4096)
    642660            if not imageOnly:
    643661                print 'Read Pilatus tiff file: ',filename
    644         else:
    645             sizexy = [1536,1536]
    646             sizeScale = 1
    647             tifType = 'Gold'
    648             pixy = (150,150)
    649             pos = 64
    650             if not imageOnly:
    651                 print 'Read Gold tiff file:',filename
    652     elif Ityp == 1:
    653         tifType = 'PE'
    654         sizexy = [finalSize,finalSize]
    655         pixy = (200*sizeScale,200*sizeScale)
    656         pos = 8
    657         if not imageOnly:
    658             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
    666     elif Ityp == 3328:
    667         tifType = 'MAR'
    668         sizexy = [finalSize,finalSize]
    669         pixy = (79*sizeScale,79*sizeScale)
    670         pos = 4096
    671         if not imageOnly:
    672             print 'Read MAR CCD tiff file: ',filename
    673     else:
    674         lines = 'unknown tif type'
    675         return lines,0,0
    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:
    682662            image = ar.array('L',File.read(4*Npix))
    683663            image = np.array(np.asarray(image),dtype=np.int32)
    684     elif 'MAR' in tifType or 'Gold' in tifType or 'Sect 5' in tifType:
     664    elif 262 in IFD and IFD[262][2][0] > 4:
     665        tifType = 'DND'
     666        pixy = (158,158)
     667        File.seek(512)
     668        if not imageOnly:
     669            print 'Read DND SAX/WAX-detector tiff file: ',filename
    685670        image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     671    elif sizexy == [1536,1536]:
     672        tifType = 'APS Gold'
     673        pixy = (150,150)
     674        File.seek(64)
     675        if not imageOnly:
     676            print 'Read Gold tiff file:',filename
     677        image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     678    elif sizexy == [2048,2048] or sizexy == [1024,1024]:
     679        if IFD[273][2][0] == 8:
     680            if IFD[258][2][0] == 32:
     681                tifType = 'PE'
     682                pixy = (200,200)
     683                File.seek(8)
     684                if not imageOnly:
     685                    print 'Read APS PE-detector tiff file: ',filename
     686                if dataType == 5:
     687                    image = np.array(ar.array('f',File.read(4*Npix)),dtype=np.int32)
     688                else:
     689                    image = np.array(ar.array('I',File.read(4*Npix)),dtype=np.int32)
     690        elif IFD[273][2][0] == 4096:
     691            tifType = 'MAR'
     692            pixy = (158,158)
     693            File.seek(4096)
     694            if not imageOnly:
     695                print 'Read MAR CCD tiff file: ',filename
     696            image = np.array(ar.array('H',File.read(2*Npix)),dtype=np.int32)
     697           
     698    else:
     699        lines = ['not a known detector tiff file',]
     700        return lines,0,0,0
     701       
    686702    image = np.reshape(image,(sizexy[1],sizexy[0]))
    687703    center = [pixy[0]*sizexy[0]/2000,pixy[1]*sizexy[1]/2000]
  • trunk/GSASIIimgGUI.py

    r240 r243  
    155155            Ltth,Utth = Utth,Ltth
    156156        data['IOtth'] = [Ltth,Utth]
    157         self.InnerTth.SetValue("%8.2f" % (Ltth))
     157        self.InnerTth.SetValue("%8.3f" % (Ltth))
    158158        self.OuterTth.SetValue("%8.2f" % (Utth))
    159159        self.dataFrame.ImageEdit.Enable(id=G2gd.wxID_SAVEINTG,enable=False)
     
    356356    colorList = [m for m in mpl.cm.datad.keys() if not m.endswith("_r")]
    357357    calList = [m for m in calFile.Calibrants.keys()]
    358     typeList = ['PWDR - powder diffraction data','SXAS - small angle scattering data',
     358    typeList = ['PWDR - powder diffraction data','SASD - small angle scattering data',
    359359        'REFL - reflectometry data']
    360360    if not data.get('type'):                        #patch for old project files
    361361        data['type'] = 'PWDR'
    362     typeDict = {'PWDR':typeList[0],'SXAS':typeList[1],'REFL':typeList[2]}
     362    typeDict = {'PWDR':typeList[0],'SASD':typeList[1],'REFL':typeList[2]}
    363363    if self.dataDisplay:
    364364        self.dataDisplay.Destroy()
     
    479479    littleSizer = wx.BoxSizer(wx.HORIZONTAL)
    480480    self.InnerTth = wx.TextCtrl(parent=self.dataDisplay,
    481         value=("%8.2f" % (IOtth[0])),style=wx.TE_PROCESS_ENTER)
     481        value=("%8.3f" % (IOtth[0])),style=wx.TE_PROCESS_ENTER)
    482482    self.InnerTth.Bind(wx.EVT_TEXT_ENTER,OnIOtth)
    483483    self.InnerTth.Bind(wx.EVT_KILL_FOCUS,OnIOtth)
  • trunk/GSASIIpeak.py

    r230 r243  
    3333npatand = lambda x: 180.*np.arctan(x)/np.pi
    3434npatan2d = lambda y,x: 180.*np.arctan2(y,x)/np.pi
     35
     36def factorize(num):
     37    ''' Provide prime number factors for integer num
     38    Returns dictionary of prime factors (keys) & power for each (data)
     39    '''
     40    factors = {}
     41    orig = num
     42
     43    # we take advantage of the fact that (i +1)**2 = i**2 + 2*i +1
     44    i, sqi = 2, 4
     45    while sqi <= num:
     46        while not num%i:
     47            num /= i
     48            factors[i] = factors.get(i, 0) + 1
     49
     50        sqi += 2*i + 1
     51        i += 1
     52
     53    if num != 1 and num != orig:
     54        factors[num] = factors.get(num, 0) + 1
     55
     56    if factors:
     57        return factors
     58    else:
     59        return {num:1}          #a prime number!
     60           
     61def makeFFTsizeList(nmin=1,nmax=1023,thresh=15):
     62    ''' Provide list of optimal data sizes for FFT calculations
     63    Input:
     64        nmin: minimum data size >= 1
     65        nmax: maximum data size > nmin
     66        thresh: maximum prime factor allowed
     67    Returns:
     68        list of data sizes where the maximum prime factor is < thresh
     69    '''
     70    plist = []
     71    nmin = max(1,nmin)
     72    nmax = max(nmin+1,nmax)
     73    for p in range(nmin,nmax):
     74        if max(factorize(p).keys()) < thresh:
     75            plist.append(p)
     76    return plist
    3577
    3678def ValEsd(value,esd=0,nTZ=False):                  #NOT complete - don't use
  • trunk/GSASIIplot.py

    r242 r243  
    874874                else:
    875875                    self.G2plotNB.status.SetFields(\
    876                         ['','Detector 2-th =%9.2fdeg, dsp =%9.3fA, Q = %6.3fA-1, azm = %7.2fdeg, I = %6d'%(tth,dsp,Q,azm,Int)])
     876                        ['','Detector 2-th =%9.3fdeg, dsp =%9.3fA, Q = %6.5fA-1, azm = %7.2fdeg, I = %6d'%(tth,dsp,Q,azm,Int)])
    877877
    878878    def OnImPlotKeyPress(event):
Note: See TracChangeset for help on using the changeset viewer.