Changeset 1217


Ignore:
Timestamp:
Feb 11, 2014 9:42:03 PM (8 years ago)
Author:
vondreele
Message:

add reading of CheMin? tif & png files
continue work on small angle stuff

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r1216 r1217  
    267267        Comments,Data,Npix,Image = GetG2Image(imagefile)
    268268    elif ext == '.png':
    269         import scipy.misc
    270         Image = scipy.misc.imread(imagefile,flatten=True)
    271         Npix = Image.size
    272         Comments = ['no metadata']
    273         Data = {'wavelength': 0.1, 'pixelSize': [200, 200], 'distance': 100.0}
    274         Data['size'] = list(Image.shape)
    275         Data['center'] = [int(i/2) for i in Image.shape]
     269        Comments,Data,Npix,Image = GetPNGData(imagefile)
    276270        if not imageOnly:
    277271            EditImageParms(G2frame,Data,Comments,Image,imagefile)
     
    501495    else:
    502496        return head,data,Npix,image
     497       
     498def GetPNGData(filename,imageOnly=False):
     499    '''Read an image in a png format, assumes image is converted from CheMin tif file
     500    so default parameters are that machine.
     501    '''
     502    import scipy.misc
     503    Image = scipy.misc.imread(filename,flatten=True)
     504    Npix = Image.size
     505    Comments = ['no metadata']
     506    pixy = list(Image.shape)
     507    sizexy = [40,40]
     508    Data = {'wavelength': 1.78892, 'pixelSize': sizexy, 'distance': 18.0,'size':pixy}
     509    Data['center'] = [pixy[0]*sizexy[0]/1000,pixy[1]*sizexy[1]/2000]
     510    if imageOnly:
     511        return Image.T
     512    else:
     513        return Comments,Data,Npix,Image.T
    503514
    504515def GetTifData(filename,imageOnly=False):
     
    508519    '''
    509520    import struct as st
     521    import Image as Im
    510522    import array as ar
    511523    import ReadMarCCDFrame as rmf
     
    540552    NED = int(st.unpack(byteOrd+'h',File.read(2))[0])
    541553    IFD = {}
     554    nSlice = 1
    542555    for ied in range(NED):
    543556        Tag,Type = st.unpack(byteOrd+'Hh',File.read(4))
    544557        nVal = st.unpack(byteOrd+'i',File.read(4))[0]
     558        if DEBUG: print 'Try:',Tag,Type,nVal
    545559        if Type == 1:
    546560            Value = st.unpack(byteOrd+nVal*'b',File.read(nVal))
     
    551565            x = st.unpack(byteOrd+nVal*'h',File.read(nVal*2))
    552566        elif Type == 4:
     567            if Tag in [273,279]:
     568                nSlice = nVal
     569                nVal = 1
    553570            Value = st.unpack(byteOrd+nVal*'i',File.read(nVal*4))
    554571        elif Type == 5:
     
    581598        center = (center[0] != 0 and center[1] != 0) and center or [None,None]
    582599#print head,tifType,pixy
     600    elif nSlice > 1:    #CheMin multislice tif file!
     601        tifType = 'CheMin'
     602        pixy = [40,40]
     603        image = np.array(Im.open(filename))
     604        distance = 18.0
     605        center = [pixy[0]*sizexy[0]/2000,pixy[1]*sizexy[1]/1000]
     606        wavelength = 1.78892
    583607    elif 272 in IFD:
    584608        ifd = IFD[272]
  • trunk/GSASIIplot.py

    r1212 r1217  
    687687                    'c: contour on','q: toggle q plot','s: toggle single plot','+: no selection')
    688688            elif 'SASD' in plottype:
    689                 Page.Choice = (' key press','n: log(I) off','l: offset left','r: offset right',
     689                Page.Choice = (' key press','n: loglog off','l: offset left','r: offset right',
    690690                    'd: offset down','u: offset up','o: reset offset','q: toggle S(q) plot',
    691691                    'c: contour on','s: toggle single plot','+: no selection')
     
    697697            elif 'SASD' in plottype:
    698698                Page.Choice = (' key press','e: toggle error bars','l: offset left','r: offset right','d: offset down',
    699                     'u: offset up','o: reset offset','n: log(I) on','c: contour on',
     699                    'u: offset up','o: reset offset','n: loglog on','c: contour on',
    700700                    's: toggle single plot','+: no selection')
    701701    Page.keyPress = OnPlotKeyPress
     
    817817            Y = xye[1]+offset*N
    818818        elif 'SASD' in plottype:
    819             if G2frame.logPlot:
    820                 if G2frame.sqPlot:
    821                     Y = xye[1]*Sample['Scale'][0]*(1.005)**(offset*N)*X**4
    822                 else:
    823                     Y = xye[1]*Sample['Scale'][0]*(1.005)**(offset*N)
     819            if G2frame.sqPlot:
     820                Y = xye[1]*Sample['Scale'][0]*(1.005)**(offset*N)*X**4
    824821            else:
    825                 Y = xye[1]*Sample['Scale'][0]+offset*N
     822                Y = xye[1]*Sample['Scale'][0]*(1.005)**(offset*N)
    826823        if LimitId and ifpicked:
    827824            limits = np.array(G2frame.PatternTree.GetItemPyData(LimitId))
     
    916913                        Plot.loglog(X,Y,colors[N%6],picker=False,nonposy='mask')
    917914                else:
    918                     Plot.plot(X,Y,colors[N%6],picker=False)
     915                    if 'PWDR' in plottype:
     916                        Plot.plot(X,Y,colors[N%6],picker=False)
     917                    elif 'SASD' in plottype:
     918                        Plot.semilogy(X,Y,colors[N%6],picker=False,nonposy='mask')
    919919            if G2frame.logPlot:
    920920                Plot.set_ylim(bottom=np.min(np.trim_zeros(Y))/2.)
  • trunk/GSASIIpwd.py

    r1186 r1217  
    150150    Cth2 = 1.-Sth2
    151151    if 'Cylinder' in Geometry:      #Lobanov & Alte da Veiga for 2-theta = 0; beam fully illuminates sample
    152         return np.where(MuR <3.0,muRunder3(Sth2),muRover3(Sth2))
     152        if MuR <= 3.0:
     153            return muRunder3(Sth2)
     154        else:
     155            return muRover3(Sth2)
    153156    elif 'Bragg' in Geometry:
    154157        return 1.0
  • trunk/GSASIIpwdGUI.py

    r1213 r1217  
    12971297        if tc.key == 0 and 'SASD' in histName:          #a kluge!
    12981298            G2plt.PlotPatterns(G2frame,plotType='SASD',newPlot=True)
    1299                    
     1299           
     1300    def OnMaterial(event):
     1301        Obj = event.GetEventObject()
     1302        id,key = Info[Obj.GetId()]
     1303        if key == 'Name':
     1304            data['Materials'][id][key] = Obj.GetValue()
     1305        elif key == 'VolFrac':
     1306            try:
     1307                value = min(max(0.,float(Obj.GetValue())),1.)
     1308            except ValueError:
     1309                value = data['Materials'][id][key]
     1310            data['Materials'][id][key] = value
     1311            data['Materials'][not id][key] = 1.-value
     1312        wx.CallAfter(UpdateSampleGrid,G2frame,data)
    13001313
    13011314    ######## DEBUG #######################################################
     
    13581371                ['SurfRoughB','Surface roughness B: ',[10,4]]]
    13591372    elif 'SASD' in histName:
    1360         pass
     1373        parms.append(['Thick','Sample thickness (cm)',[10,3]])
    13611374    parms.append(['Omega','Goniometer omega:',[10,3]])
    13621375    parms.append(['Chi','Goniometer chi:',[10,3]])
     
    14061419            parmVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,data,key,typeHint=float)
    14071420        parmSizer.Add(parmVal,1,wx.EXPAND)
     1421    Info = {}
     1422    if 'SASD' in histName:
     1423        Substances = G2frame.PatternTree.GetItemPyData(
     1424            G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Substances'))
     1425        for id,item in enumerate(data['Materials']):
     1426            subst = wx.BoxSizer(wx.HORIZONTAL)
     1427            subst.Add(wx.StaticText(G2frame.dataDisplay,label=' Material: '),0,wx.ALIGN_CENTER_VERTICAL)
     1428            matsel = wx.ComboBox(G2frame.dataDisplay,value=item['Name'],choices=Substances['Substances'].keys(),
     1429                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     1430            Info[matsel.GetId()] = [id,'Name']
     1431            matsel.Bind(wx.EVT_COMBOBOX,OnMaterial)       
     1432            subst.Add(matsel,0,wx.ALIGN_CENTER_VERTICAL)
     1433            subst.Add(wx.StaticText(G2frame.dataDisplay,label=' Volume fraction: '),0,wx.ALIGN_CENTER_VERTICAL)
     1434            volfrac = wx.TextCtrl(G2frame.dataDisplay,value=str('%.3f'%(item['VolFrac'])),style=wx.TE_PROCESS_ENTER)
     1435            Info[volfrac.GetId()] = [id,'VolFrac']
     1436            volfrac.Bind(wx.EVT_TEXT_ENTER,OnMaterial)
     1437            volfrac.Bind(wx.EVT_KILL_FOCUS,OnMaterial)
     1438            subst.Add(volfrac,0,wx.ALIGN_CENTER_VERTICAL)
     1439            parmSizer.Add(subst,0)
     1440           
     1441
     1442       
    14081443    for key in ('FreePrm1','FreePrm2','FreePrm3'):
    14091444        parmVal = G2gd.ValidatedTxtCtrl(G2frame.dataDisplay,Controls,key,typeHint=str,
Note: See TracChangeset for help on using the changeset viewer.