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)
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 )
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
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