Changeset 2776 for trunk/GSASIIpwdGUI.py


Ignore:
Timestamp:
Apr 11, 2017 10:39:15 AM (5 years ago)
Author:
vondreele
Message:

add a number of materials to Substances.py
implement multilayer reflectometry models

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIpwdGUI.py

    r2774 r2776  
    47814781                disLabel = r'$Distance\ from\ top\ surface,\ \AA$'
    47824782            if od['value_2']:
    4783                 nLines = len(model['Layers'])-1
     4783                laySeq = model['Layer Seq'].split()
     4784                nLines = len(laySeq)+1
    47844785                linePos = np.zeros(nLines)
    4785                 for ilay,layer in enumerate(model['Layers'][1:-1]):
    4786                     linePos[ilay+1:] += layer.get('Thick',[0.,False])[0]
     4786                for ilay,lay in enumerate(np.fromstring(data['Layer Seq'],dtype=int,sep=' ')):
     4787                    linePos[ilay+1:] += model['Layers'][lay].get('Thick',[0.,False])[0]
    47874788                if od['value_1']:
    47884789                    linePos = linePos[-1]-linePos
     
    47964797       
    47974798    def ModelPlot(data,x,xr,y):
    4798         nLines = len(data['Layers'])-1
     4799        laySeq = data['Layer Seq'].split()
     4800        nLines = len(laySeq)+1
    47994801        linePos = np.zeros(nLines)
    4800         for ilay,layer in enumerate(data['Layers'][1:-1]):
    4801             linePos[ilay+1:] += layer.get('Thick',[0.,False])[0]
     4802        for ilay,lay in enumerate(np.fromstring(data['Layer Seq'],dtype=int,sep=' ')):
     4803            linePos[ilay+1:] += data['Layers'][lay].get('Thick',[0.,False])[0]
    48024804        if data['Zero'] == 'Top':
    48034805            XY = [[x,y],]
     
    49224924            Name = Obj.GetValue()
    49234925            data['Layers'][item]['Name'] = Name
    4924             data['Layers'][item]['Rough'] = [0.,False]
    4925             data['Layers'][item]['Thick'] = [1.,False]
     4926            if 'Rough' not in data['Layers'][item]:
     4927                data['Layers'][item]['Rough'] = [0.,False]
     4928            if 'Thick' not in data['Layers'][item]:
     4929                data['Layers'][item]['Thick'] = [10.,False]
    49264930            if 'N' in Inst['Type'][0]:
    49274931                data['Layers'][item]['Mag SLD'] = [0.,False]
     
    49414945            ind = Indx[Obj.GetId()]
    49424946            data['Layers'].insert(ind+1,{'Name':'vacuum','DenMul':[1.0,False],})
     4947            data['Layer Seq'] = ' '.join([str(i+1) for i in range(len(data['Layers'])-2)])
    49434948            G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data)
    49444949            G2plt.PlotPatterns(G2frame,plotType='REFD')
     
    49494954            ind = Indx[Obj.GetId()]
    49504955            del data['Layers'][ind]
     4956            data['Layer Seq'] = ' '.join([str(i+1) for i in range(len(data['Layers'])-2)])
    49514957            G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data)
    49524958            G2plt.PlotPatterns(G2frame,plotType='REFD')
     
    50695075       
    50705076        return layerSizer
     5077       
     5078    def OnRepSeq(event):
     5079        event.Skip()
     5080        stack = repseq.GetValue()
     5081        nstar = stack.count('*')
     5082        if nstar:
     5083            try:
     5084                newstack = ''
     5085                Istar = 0
     5086                for star in range(nstar):
     5087                    Istar = stack.index('*',Istar+1)
     5088                    iB = stack[:Istar].rfind(' ')
     5089                    if iB == -1:
     5090                        mult = int(stack[:Istar])
     5091                    else:
     5092                        mult = int(stack[iB:Istar])
     5093                    pattern = stack[Istar+2:stack.index(')',Istar)]+' '
     5094                    newstack += mult*pattern
     5095                stack = newstack
     5096            except ValueError:
     5097                stack += ' Error in string'
     5098                wx.MessageBox(stack,'Error',style=wx.ICON_EXCLAMATION)
     5099                repseq.SetValue(data['Layer Seq'])
     5100                return
     5101        try:
     5102            Slist = np.array(stack.split(),dtype=int)
     5103        except ValueError:
     5104            stack += ' Error in string'
     5105            repseq.SetValue(data['Layer Seq'])
     5106            wx.MessageBox(stack,'Error',style=wx.ICON_EXCLAMATION)
     5107            return
     5108        if len(Slist) < 1:
     5109            stack += ' Error in sequence - too short!'
     5110        Stest = np.arange(1,Nlayers-1)
     5111        if not np.all(np.array([item in Stest for item in Slist])):
     5112            stack += ' Error: invalid layer selection'
     5113        elif not np.all(np.ediff1d(Slist)):
     5114            stack += ' Error: Improbable sequence or bad string'
     5115        if 'Error' in stack:
     5116            repseq.SetValue(data['Layer Seq'])
     5117            wx.MessageBox(stack,'Error',style=wx.ICON_EXCLAMATION)
     5118            return
     5119        else:
     5120            data['Layer Seq'] = stack
     5121            repseq.SetValue(stack)
     5122            G2pwd.REFDModelFxn(Profile,Inst,Limits,Substances,data)
     5123            x,xr,y = G2pwd.makeSLDprofile(data,Substances)
     5124            ModelPlot(data,x,xr,y)
     5125            G2plt.PlotPatterns(G2frame,plotType='REFD')
    50715126   
    50725127    Substances = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Substances'))['Substances']
     
    50945149    mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Global parameters:'),0,WACV)
    50955150    mainSizer.Add(OverallSizer())
    5096     G2G.HorizontalLine(mainSizer,G2frame.dataDisplay)   
     5151    G2G.HorizontalLine(mainSizer,G2frame.dataDisplay)
     5152    Nlayers = len(data['Layers'])
     5153    if Nlayers > 2:
     5154        if 'Layer Seq' not in data:
     5155            data['Layer Seq'] = ' '.join([str(i+1) for i in range(Nlayers-2)])
     5156        lineSizer = wx.BoxSizer(wx.HORIZONTAL)
     5157        lineSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layer sequence: '),0,WACV)
     5158        repseq = wx.TextCtrl(G2frame.dataDisplay,value = data['Layer Seq'],style=wx.TE_PROCESS_ENTER,size=(500,25))
     5159        repseq.Bind(wx.EVT_TEXT_ENTER,OnRepSeq)       
     5160        repseq.Bind(wx.EVT_KILL_FOCUS,OnRepSeq)
     5161        lineSizer.Add(repseq,0,WACV)
     5162        mainSizer.Add(lineSizer)
     5163        Str = ' Use sequence nos. from:'
     5164        for ilay,layer in enumerate(data['Layers'][1:-1]):
     5165            Str += ' %d: %s'%(ilay+1,layer['Name'])
     5166        mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=Str),0,WACV)
     5167        mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' NB: Repeat sequence by e.g. 6*(1 2) '),0,WACV)
    50975168    G2G.HorizontalLine(mainSizer,G2frame.dataDisplay)   
    50985169    mainSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Layers: scatt. densities are 10%scm%s = 10%s%s%s'%(Pwr10,Pwrm2,Pwrm6,Angstr,Pwrm2)),0,WACV)
     
    51045175    Size = mainSizer.Fit(G2frame.dataFrame)
    51055176    Size[0] += 25
     5177    Size[1] = min(700,Size[1])
    51065178    G2frame.dataFrame.setSizePosLeft(Size)
    51075179#    x,xr,y = G2pwd.makeSLDprofile(data,Substances)
Note: See TracChangeset for help on using the changeset viewer.