function euler_ang_rot_matrix,eulerang,parameters=par
if arg_present(par) and size(/type,par) ne 8 then $
par = {func:'euler_ang_rot_matrix',phi:0d,the:0d,psi:0d}
if keyword_set(par) then eulerang=[par.phi,par.the,par.psi]
rot = dblarr(3,3)
e=double(eulerang)
scale = !dpi/180
phi = e[0]
the = e[1]
psi = e[2]
e0 = cos((phi+psi)/2d * scale) * cos(the/2d * scale)
e1 = cos((phi-psi)/2d * scale) * sin(the/2d * scale)
e2 = sin((phi-psi)/2d * scale) * sin(the/2d * scale)
e3 = sin((phi+psi)/2d * scale) * cos(the/2d * scale)
rot[0,0] = e0^2+e1^2-e2^2-e3^2
rot[0,1] = 2*(e1*e2 + e0*e3)
rot[0,2] = 2*(e1*e3 - e0*e2)
rot[1,0] = 2*(e1*e2 - e0*e3)
rot[1,1] = e0^2-e1^2+e2^2-e3^2
rot[1,2] = 2*(e2*e3 + e0*e1)
rot[2,0] = 2*(e1*e3 + e0*e2)
rot[2,1] = 2*(e2*e3 - e0*e1)
rot[2,2] = e0^2-e1^2-e2^2+e3^2
rot_angle = acos(e0^2-e1^2-e2^2-e3^2)*180/!dpi
rot_angle2 = 2*asin(sqrt(e1^2+e2^2+e3^2)) * 180/!dpi
dprint,dlevel=5,rot_angle,rot_angle2,eulerang
return,set_zeros(rot,3e-16)
end