Changeset 3139


Ignore:
Timestamp:
Oct 25, 2017 1:35:18 PM (4 years ago)
Author:
vondreele
Message:

implement PWDR simulation for TOF instruments

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIdataGUI.py

    r3136 r3139  
    17821782        Iparm1, Iparm2 = Iparm
    17831783        if 'T' in Iparm1['Type'][0]:
    1784             print('TOF simulation not supported yet')
    1785             return False
     1784            rd.idstring = ' TOF neutron simulation'
     1785            simType = 'TOF'
    17861786        else:
    17871787            # need to get name, 2theta start, end, step
    17881788            rd.idstring = ' CW'
     1789            simType = 'CW'
    17891790            if 'X' in Iparm1['Type'][0]:
    17901791                rd.idstring = 'CW x-ray simulation'
     
    18011802        N = 0
    18021803        while (N < 3): # insist on a dataset with a few points
    1803             names = ('dataset name', 'start angle', 'end angle', 'step size')
    1804             if not wave or wave < 1.0:
    1805                 inp = [rd.idstring, 10.,40.,0.005] # see names for what's what
     1804            if 'TOF' in rd.idstring:
     1805                names = ('dataset name', 'start TOF(ms)', 'end TOF(ms)', 'DT/T')
     1806                inp = [rd.idstring, 10.,80.,0.0005] # see names for what's what
     1807                dlg = G2G.ScrolledMultiEditor(
     1808                    self,[inp] * len(inp),range(len(inp)),names,
     1809                    header='Enter simulation name and range',
     1810                    minvals=(None,.5,1.0,0.0001),
     1811                    maxvals=(None,200.,200.,.001),
     1812                    sizevals=((225,-1),)
     1813                    )
    18061814            else:
    1807                 inp = [rd.idstring, 10.,80.,0.01] # see names for what's what
    1808             dlg = G2G.ScrolledMultiEditor(
    1809                 self,[inp] * len(inp),range(len(inp)),names,
    1810                 header='Enter simulation name and range',
    1811                 minvals=(None,0.001,0.001,0.0001),
    1812                 maxvals=(None,180.,180.,.1),
    1813                 sizevals=((225,-1),)
    1814                 )
     1815                names = ('dataset name', 'start angle', 'end angle', 'step size')
     1816                if not wave or wave < 1.0:
     1817                    inp = [rd.idstring, 10.,40.,0.005] # see names for what's what
     1818                else:
     1819                    inp = [rd.idstring, 10.,80.,0.01] # see names for what's what
     1820                dlg = G2G.ScrolledMultiEditor(
     1821                    self,[inp] * len(inp),range(len(inp)),names,
     1822                    header='Enter simulation name and range',
     1823                    minvals=(None,0.001,0.001,0.0001),
     1824                    maxvals=(None,180.,180.,.1),
     1825                    sizevals=((225,-1),)
     1826                    )
    18151827            dlg.CenterOnParent()
    18161828            if dlg.ShowModal() == wx.ID_OK:
     
    18221834            else:
    18231835                return False
    1824             N = int((end-start)/step)+1
    1825             x = np.linspace(start,end,N,True)
    1826             N = len(x)
     1836            if 'TOF' in rd.idstring:
     1837                N = (np.log(end)-np.log(start))/step
     1838                x = np.exp((np.arange(0,N))*step+np.log(start*1000.))
     1839                N = len(x)
     1840            else:           
     1841                N = int((end-start)/step)+1
     1842                x = np.linspace(start,end,N,True)
     1843                N = len(x)
    18271844        rd.powderdata = [
    18281845            np.array(x), # x-axis values
     
    18441861        valuesdict = {
    18451862            'wtFactor':1.0,
    1846             'Dummy':True,
     1863            'Dummy':True,'simType':simType,
    18471864            'ranId':ran.randint(0,sys.maxsize),
    18481865            'Offset':[0.0,0.0],'delOffset':0.02*Ymax,'refOffset':-.1*Ymax,'refDelt':0.1*Ymax,
     
    42854302        '''
    42864303        lastRaisedPlotTab = self.G2plotNB.lastRaisedPlotTab # save the last page saved
    4287         #print 'lastRaisedPlotTab=',lastRaisedPlotTab
    42884304        self.G2plotNB.lastRaisedPlotTab = None
     4305#        print ('lastRaisedPlotTab='+lastRaisedPlotTab)
    42894306        # mark displayed plots as invalid
    42904307        for lbl,frame in zip(self.G2plotNB.plotList,self.G2plotNB.panelList):
     
    68496866    def onEditSimRange(event):
    68506867        'Edit simulation range'
    6851         inp = [
    6852             min(data[1][0]),
    6853             max(data[1][0]),
    6854             None
    6855             ]
    6856         inp[2] = (inp[1] - inp[0])/(len(data[1][0])-1.)
    6857         names = ('start angle', 'end angle', 'step size')
    6858         dlg = G2G.ScrolledMultiEditor(
    6859             G2frame,[inp] * len(inp), range(len(inp)), names,
    6860             header='Edit simulation range',
    6861             minvals=(0.001,0.001,0.0001),
    6862             maxvals=(180.,180.,.1),
    6863             )
     6868        if 'TOF' in data[0].get('simType','CW'):
     6869            inp = [
     6870                min(data[1][0])/1000.,
     6871                max(data[1][0])/1000.,
     6872                None
     6873                ]
     6874            inp[2] = (np.log(inp[1]) - np.log(inp[0]))/(len(data[1][0])-1.)
     6875            names = ('start TOF(ms)', 'end TOF(ms)', 'DT/T')
     6876            dlg = G2G.ScrolledMultiEditor(
     6877                G2frame,[inp] * len(inp), range(len(inp)), names,
     6878                header='Edit simulation range',
     6879                minvals=(0.5,1.0,0.0001),
     6880                maxvals=(200.,200.,.001),
     6881                )           
     6882        else:
     6883            inp = [
     6884                min(data[1][0]),
     6885                max(data[1][0]),
     6886                None
     6887                ]
     6888            inp[2] = (inp[1] - inp[0])/(len(data[1][0])-1.)
     6889            names = ('start angle', 'end angle', 'step size')
     6890            dlg = G2G.ScrolledMultiEditor(
     6891                G2frame,[inp] * len(inp), range(len(inp)), names,
     6892                header='Edit simulation range',
     6893                minvals=(0.001,0.001,0.0001),
     6894                maxvals=(180.,180.,.1),
     6895                )
    68646896        dlg.CenterOnParent()
    68656897        val = dlg.ShowModal()
     
    68716903            start,end,step = inp
    68726904        step = abs(step)
    6873         N = int((end-start)/step)+1
    6874         newdata = np.linspace(start,end,N,True)
    6875         if len(newdata) < 2: return # too small a range - reject
     6905        if 'TOF' in data[0].get('simType','CW'):
     6906            N = (np.log(end)-np.log(start))/step
     6907            newdata = np.exp((np.arange(0,N))*step+np.log(start*1000.))
     6908        else:
     6909            N = int((end-start)/step)+1
     6910            newdata = np.linspace(start,end,N,True)
     6911            if len(newdata) < 2: return # too small a range - reject
    68766912        data[1] = [newdata,np.zeros_like(newdata),np.ones_like(newdata),
    68776913            np.zeros_like(newdata),np.zeros_like(newdata),np.zeros_like(newdata)]
     
    70667102        G2frame.Bind(wx.EVT_MENU, OnPlotAll3DHKL, id=G2G.wxID_3DALLHKLPLOT)
    70677103   
    7068     G2frame.dataWindow.ClearData()
     7104    if G2frame.dataWindow:
     7105        G2frame.dataWindow.ClearData()
    70697106    mainSizer = G2frame.dataWindow.GetSizer()
    70707107    mainSizer.Add((5,5),)
     
    70877124        Tmax = max(data[1][0])
    70887125        num = len(data[1][0])
    7089         step = (Tmax - Tmin)/(num-1)
    7090         t = u'2\u03b8' # 2theta
    7091         lbl =  u'Simulation range: {:.2f} to {:.2f} {:s}\nwith {:.4f} steps ({:d} points)'
     7126        if 'TOF' in data[0].get('simType','CW'):
     7127            step = (np.log(Tmax) - np.log(Tmin))/(num-1.)
     7128            t = u'\u00b5s'
     7129            lbl =  u'Simulation range: {:.2f} to {:.2f} {:s} with {:.4f} resolution ({:d} points)'
     7130        else:
     7131            step = (Tmax - Tmin)/(num-1)
     7132            t = u'2\u03b8' # 2theta
     7133            lbl =  u'Simulation range: {:.2f} to {:.2f} {:s} with {:.4f} steps ({:d} points)'
    70927134        lbl += u'\n(Edit range resets observed intensities).'
    70937135        lbl = lbl.format(Tmin,Tmax,t,step,num)
    7094         simSizer.Add(wx.StaticText(G2frame.dataWindow,wx.ID_ANY,lbl),
    7095                     0,WACV)
     7136        simSizer.Add(wx.StaticText(G2frame.dataWindow,wx.ID_ANY,lbl),0,WACV)
    70967137        but = wx.Button(G2frame.dataWindow,wx.ID_ANY,"Edit range")
    70977138        but.Bind(wx.EVT_BUTTON,onEditSimRange)
    7098         simSizer.Add(but,0,WACV)
    70997139        mainSizer.Add(simSizer)
     7140        mainSizer.Add(but,0,WACV)
    71007141    if 'Nobs' in data[0]:
    71017142        mainSizer.Add(wx.StaticText(G2frame.dataWindow,-1,
     
    71597200                'FoMax' : FoMax,'Zone' : '001','Layer' : 0,'Scale' : 1.0,'Super':Super,'SuperVec':SuperVec}
    71607201            G2plt.PlotSngl(G2frame,newPlot=True,Data=controls,hklRef=refList)
     7202    G2frame.dataWindow.SetDataSize()
    71617203                 
    71627204################################################################################
Note: See TracChangeset for help on using the changeset viewer.