Changeset 1174


Ignore:
Timestamp:
Dec 18, 2013 2:55:50 PM (10 years ago)
Author:
vondreele
Message:

correct image integration for sample absorption - cylinders only for now

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIimage.py

    r1171 r1174  
    774774        tam = ma.mask_or(tam.flatten(),tamt*tama)
    775775    taz = ma.masked_outside(image.flatten(),int(Zlim[0]),Zlim[1])
     776    tabs = np.ones_like(taz)
    776777    tam = ma.mask_or(tam.flatten(),ma.getmask(taz))
    777778    tax = ma.compressed(ma.array(tax.flatten(),mask=tam))
     
    779780    taz = ma.compressed(ma.array(taz.flatten(),mask=tam))
    780781    tad = ma.compressed(ma.array(tad.flatten(),mask=tam))
    781     return tax,tay,taz,tad
     782    tabs = ma.compressed(ma.array(tabs.flatten(),mask=tam))
     783    return tax,tay,taz,tad,tabs
    782784   
    783785def ImageIntegrate(image,data,masks,blkSize=128,dlg=None):
     
    816818                dlg.Update(Nup)
    817819            Block = image[iBeg:iFin,jBeg:jFin]
    818             tax,tay,taz,tad = Fill2ThetaAzimuthMap(masks,TA,tam,Block)    #and apply masks
     820            tax,tay,taz,tad,tabs = Fill2ThetaAzimuthMap(masks,TA,tam,Block)    #and apply masks
    819821            Nup += 1
    820822            if dlg:
     
    822824            tax = np.where(tax > LRazm[1],tax-360.,tax)                 #put azm inside limits if possible
    823825            tax = np.where(tax < LRazm[0],tax+360.,tax)
     826            if data['SampleAbs'][1]:
     827                muR = data['SampleAbs'][0]*(1.+npsind(tax)**2/2.)/(npcosd(tay))
     828                tabs = G2pwd.Absorb(data['SampleShape'],muR,tay)
    824829            if any([tax.shape[0],tay.shape[0],taz.shape[0]]):
    825                 NST,H0 = h2d.histogram2d(len(tax),tax,tay,taz*tad,numAzms,numChans,LRazm,LUtth,Dazm,Dtth,NST,H0)
     830                NST,H0 = h2d.histogram2d(len(tax),tax,tay,taz*tad*tabs,numAzms,numChans,LRazm,LUtth,Dazm,Dtth,NST,H0)
    826831            Nup += 1
    827832            if dlg:
  • trunk/GSASIIimgGUI.py

    r1163 r1174  
    5151        data['DetDepth'] = 0.
    5252        data['DetDepthRef'] = False
     53    if 'SampleAbs' not in data:
     54        data['SampleShape'] = 'Cylinder'
     55        data['SampleAbs'] = [0.0,False]
    5356#end patch
    5457
     
    513516            obliqVal.SetValue('%.3f'%(data['Oblique'][0]))
    514517                           
     518        def OnSamAbs(event):
     519            if data['SampleAbs'][1]:
     520                data['SampleAbs'][1] = False
     521            else:
     522                data['SampleAbs'][1] = True
     523               
     524        def OnSamAbsVal(event):
     525            try:
     526                value = float(samabsVal.GetValue())
     527                if 0.00 <= value <= 2.00:
     528                    data['SampleAbs'][0] = value
     529                else:
     530                    raise ValueError
     531            except ValueError:
     532                pass
     533            samabsVal.SetValue('%.3f'%(data['SampleAbs'][0]))
     534                           
    515535        def OnShowLines(event):
    516536            if data['showLines']:
     
    614634        outAzim.Bind(wx.EVT_KILL_FOCUS,OnNumOutAzms)
    615635        littleSizer.Add(outAzim,0,wx.ALIGN_CENTER_VERTICAL)
     636        dataSizer.Add(littleSizer,0,)
     637        littleSizer = wx.BoxSizer(wx.HORIZONTAL)
     638        samabs = wx.CheckBox(parent=G2frame.dataDisplay,label='Apply sample absorption?')
     639        dataSizer.Add(samabs,0,wx.ALIGN_CENTER_VERTICAL)
     640        samabs.Bind(wx.EVT_CHECKBOX, OnSamAbs)
     641        samabs.SetValue(data['SampleAbs'][1])
     642        littleSizer.Add(wx.StaticText(G2frame.dataDisplay,label='mu/R (0.00-2.0) '),0,
     643            wx.ALIGN_CENTER_VERTICAL)
     644        samabsVal = wx.TextCtrl(parent=G2frame.dataDisplay,value='%.3f'%(data['SampleAbs'][0]),style=wx.TE_PROCESS_ENTER)
     645        samabsVal.Bind(wx.EVT_TEXT_ENTER,OnSamAbsVal)
     646        samabsVal.Bind(wx.EVT_KILL_FOCUS,OnSamAbsVal)
     647        littleSizer.Add(samabsVal,0,wx.ALIGN_CENTER_VERTICAL)
    616648        dataSizer.Add(littleSizer,0,)
    617649        littleSizer = wx.BoxSizer(wx.HORIZONTAL)
  • trunk/GSASIIpwd.py

    r1131 r1174  
    9898    :param float Psi: flat plate tilt axis - future
    9999    '''
     100   
     101    def muRunder3(Sth2):
     102        T0 = 16.0/(3.*np.pi)
     103        T1 = (25.99978-0.01911*Sth2**0.25)*np.exp(-0.024551*Sth2)+ \
     104            0.109561*np.sqrt(Sth2)-26.04556
     105        T2 = -0.02489-0.39499*Sth2+1.219077*Sth2**1.5- \
     106            1.31268*Sth2**2+0.871081*Sth2**2.5-0.2327*Sth2**3
     107        T3 = 0.003045+0.018167*Sth2-0.03305*Sth2**2
     108        Trns = -T0*MuR-T1*MuR**2-T2*MuR**3-T3*MuR**4
     109        return np.exp(Trns)
     110   
     111    def muRover3(Sth2):
     112        T1 = 1.433902+11.07504*Sth2-8.77629*Sth2*Sth2+ \
     113            10.02088*Sth2**3-3.36778*Sth2**4
     114        T2 = (0.013869-0.01249*Sth2)*np.exp(3.27094*Sth2)+ \
     115            (0.337894+13.77317*Sth2)/(1.0+11.53544*Sth2)**1.555039
     116        T3 = 1.933433/(1.0+23.12967*Sth2)**1.686715- \
     117            0.13576*np.sqrt(Sth2)+1.163198
     118        T4 = 0.044365-0.04259/(1.0+0.41051*Sth2)**148.4202
     119        Trns = (T1-T4)/(1.0+T2*(MuR-3.0))**T3+T4
     120        return Trns/100.
     121       
    100122    Sth2 = npsind(Tth/2.0)**2
    101123    Cth2 = 1.-Sth2
    102124    if 'Cylinder' in Geometry:      #Lobanov & Alte da Veiga for 2-theta = 0; beam fully illuminates sample
    103         if MuR < 3.0:
    104             T0 = 16.0/(3*np.pi)
    105             T1 = (25.99978-0.01911*Sth2**0.25)*np.exp(-0.024551*Sth2)+ \
    106                 0.109561*np.sqrt(Sth2)-26.04556
    107             T2 = -0.02489-0.39499*Sth2+1.219077*Sth2**1.5- \
    108                 1.31268*Sth2**2+0.871081*Sth2**2.5-0.2327*Sth2**3
    109             T3 = 0.003045+0.018167*Sth2-0.03305*Sth2**2
    110             Trns = -T0*MuR-T1*MuR**2-T2*MuR**3-T3*MuR**4
    111             return np.exp(Trns)
    112         else:
    113             T1 = 1.433902+11.07504*Sth2-8.77629*Sth2*Sth2+ \
    114                 10.02088*Sth2**3-3.36778*Sth2**4
    115             T2 = (0.013869-0.01249*Sth2)*np.exp(3.27094*Sth2)+ \
    116                 (0.337894+13.77317*Sth2)/(1.0+11.53544*Sth2)**1.555039
    117             T3 = 1.933433/(1.0+23.12967*Sth2)**1.686715- \
    118                 0.13576*np.sqrt(Sth2)+1.163198
    119             T4 = 0.044365-0.04259/(1.0+0.41051*Sth2)**148.4202
    120             Trns = (T1-T4)/(1.0+T2*(MuR-3.0))**T3+T4
    121             return Trns/100.
     125        return np.where(MuR <3.0,muRunder3(Sth2),muRover3(Sth2))
    122126    elif 'Bragg' in Geometry:
    123127        return 1.0
Note: See TracChangeset for help on using the changeset viewer.