added angle conversion theta/q

This commit is contained in:
Marco Cammarata 2017-01-17 19:21:02 +01:00
parent eab1bcdb26
commit a95b0aa10e
1 changed files with 24 additions and 0 deletions

View File

@ -216,3 +216,27 @@ def reshapeToBroadcast(what,ref):
shape = [ref.shape[0],] + [1,]*(ref.ndim-1)
return what.reshape(shape)
def radToQ(theta,**kw):
""" theta is the scattering angle (theta_out - theta_in);
kw should be have either E or wavelength
it returns the scattering vector in the units of wavelength """
# Energy or wavelength should be in kw
assert "E" in kw or "wavelength" in kw
# but not both
assert not ("E" in kw and "wavelength" in kw)
if "E" in kw: kw["wavelength"] = 12.398/kw["E"]
return 4*np.pi/kw["wavelength"]*np.sin(theta)
def degToQ(theta,**kw):
theta = theta/180.*np.pi
return radToQ(theta,**kw)
degToQ.__doc__ = radToQ.__doc__
def qToTheta(q,**kw):
""" Return scattering angle from q (given E or wavelength) """
# Energy or wavelength should be in kw
assert "E" in kw or "wavelength" in kw
# but not both
assert not ("E" in kw and "wavelength" in kw)
if "E" in kw: kw["wavelength"] = 12.398/kw["E"]
return np.arcsin(q*kw["wavelength"]/4/np.pi)