Пример #1
0
    def reset(self):
        self.post = gv_general.chiwedge( wedge = self.pars.get('wedge'),
                chi = self.pars.get('chi')).ravel()
        self.posti= np.dot(gv_general.wedgemat(self.pars.get('wedge')), 
                           gv_general.chimat(self.pars.get('chi'))).T.ravel()

        self.axis = np.array([0,0,-1],np.float)
Пример #2
0
def assignpeaks( gr, pars, colfile, tol=None, omegatol=0.2 ):
    labels = np.zeros( colfile.nrows )
    cyf = cyfit.cyfit(pars)
    cyf.setscfc( colfile.sc, colfile.fc )
    hkl = np.zeros( cyf.XL.shape, np.float)
    drlv = np.zeros( colfile.nrows, np.float)
    kcalc = np.zeros( cyf.XL.shape, np.float)
    r_omega  = np.array(colfile.omega*np.pi/180.0,np.float)
    cyf.hkl( colfile.sc, colfile.fc, r_omega, gr, hkl, kcalc )
    # Make integer hkl
    wripaca.ih_drlv( hkl, drlv )
    # Now replace omegaobs by omegacalc where this is appropriate
    pre = np.eye(3).ravel()
    posti = np.dot(gv_general.wedgemat(pars.get('wedge')), 
                     gv_general.chimat(pars.get('chi'))).T.ravel()
    axis = np.array([0,0,-1],np.float)
    ub = np.linalg.inv(gr.ubi)
    gcalc = np.dot( ub, hkl.T ).T.copy()
    #print hkl
    romegacalc = np.zeros( r_omega.shape, np.float)
    romegaerr  = np.zeros( r_omega.shape, np.float)
    wripaca.omegacalcclose(gcalc,
                           pre,
                           posti,
                           axis,
                           r_omega,
                           romegacalc,
                           romegaerr,
                           pars.get('wavelength'),
                           )
    # OK, now we will accept anything within omegatol
    if 0:
        pylab.hist(romegaerr, bins=50)
        pylab.figure()
        pylab.plot(r_omega, romegaerr,",")
        pylab.show()
    r_omega = np.where( romegaerr < omegatol*np.pi/180.,  romegacalc, r_omega )
    cyf.hkl( colfile.sc, colfile.fc, r_omega, gr, hkl, kcalc )
    drlv_omegafree = drlv.copy()
    wripaca.ih_drlv( hkl, drlv_omegafree )
    m = drlv < tol
    sc = colfile.sc[m]
    fc = colfile.fc[m]
    omegaobs = colfile.omega[m].astype(np.float)
    omega = colfile.omega[m].astype(np.float)
    hkl = hkl[m]
    print "Got",m.sum(),"peaks",
    if 0:
        pylab.ion()
        pylab.title("tol = %f"%(tol))
        pylab.hist( drlv, bins=np.arange(0,0.05,0.001))
        pylab.hist( drlv_omegafree, bins=np.arange(0,0.05,0.001))
        pylab.show()
        raw_input("OK?")

    return dummycf( sc, fc, omega, omegaobs, hkl )
Пример #3
0
def omegacalc_ub( ubi, h, pars, romega):
    pre = np.eye(3).ravel()
    posti = np.dot(gv_general.wedgemat(pars.get('wedge')), 
                     gv_general.chimat(pars.get('chi'))).T.ravel()
    axis = np.array([0,0,-1],np.float)
    ub = np.linalg.inv(ubi)
    gcalc = np.dot( ub, h.T ).T.copy()
    romegacalc = np.zeros( romega.shape, np.float)
    romegaerr  = np.zeros( romega.shape, np.float)
    wripaca.omegacalcclose(gcalc,
                           pre,
                           posti,
                           axis,
                           romega,
                           romegacalc,
                           romegaerr,
                           pars.get('wavelength'),
                           )
    return romegacalc
Пример #4
0
testaxisang()



def anglediff(a1, a2):
    return np.arctan2(np.sin(a1-a2), np.cos(a1-a2))



for wedge, chi in [(0.,0.),(-10.,0.), (11,-15), (0,6)]:
    print "Wedge",wedge,"chi",chi
    print "gve[0] gve[1] gve[2]  om1py  om2py  om1af  om2af  omtrue"
    gve = transform.compute_g_vectors( tth, eta, omega, wvln, wedge, chi )
    gve = gve.T.copy()
    post = gv_general.chiwedge( wedge=wedge, chi=chi ) 
    posti = np.dot(gv_general.wedgemat(wedge), gv_general.chimat(chi)).T

    # don't try to match this as it is wrong!!
    #    tth, eta, omega = transform.uncompute_g_vectors( hkl.T, wvln, 
    #        wedge=wedge,
    #        chi = chi)

    ppre = np.reshape(pre,(3,3))
    ppost = np.reshape(post,(3,3))


    omg1, omg2, valid = gv_general.g_to_k( gve.T, wvln, axis=axis, pre=ppre, post=ppost )
    #print pre
    #print posti.ravel()
    #print axis
    #print wvln