{ RCSid: $Id: source.cal,v 2.10 2008/01/24 23:15:46 greg Exp $ }
{
	Source distribution coordinates (degrees).

	Theta is measured from the negative z-axis.
	Phi is measured from the positive x-axis (0 degrees)
		towards the positive y-axis (90 degrees).

	srcB_vert and srcB_horiz are angles
	used in type B photometry.

	boxcorr function corrects for distribution modeled
	with a rectangular box.  lboxcorr provides a more
	accurate calculation for nearby surfaces, but requires
	that the source box be centered at the origin.
	The dimensions of the box, which must be aligned with
	the x,y,z axes, are given in meters regardless of the
	units being used in the scene file.

	cylcorr function provides the same correction for a
	cylinder whose central axis is aligned with the Z-axis.

	A1		- optional multipier
	A2,A3,A4	- X,Y,Z dimensions of axis-aligned box (in meters!)
or
	A2,A3		- diameter and height of Z-aligned cylinder (meters)
}
					{ local definitions }
boxprojection = abs(Dx)*A3*A4 + abs(Dy)*A2*A4 + abs(Dz)*A2*A3;
lboxprojection = (	noneg(abs(Px-Dx*Ts)-A2/2)*A3*A4 +
			noneg(abs(Py-Dy*Ts)-A3/2)*A2*A4 +
			noneg(abs(Pz-Dz*Ts)-A4/2)*A2*A3 ) / Ts;
cylprojection = A2*A3*sqrt(1-Dz*Dz) + PI/4*A2*A2*abs(Dz);

flatcorr(v) = corr(v) / Rdot;		{ correction for flat sources }
corr(v) = if(AC-.5, A1*v, v);		{ multiplier correction }
boxcorr(v) = A1 * v / boxprojection;	{ correction for emitting box }
lboxcorr(v) = A1 * v / lboxprojection;	{ local box correction }
cylcorr(v) = A1 * v / cylprojection;	{ cylinder correction }

src_theta = Acos(Dz) / DEGREE;			{ 0-180 }
src_phi = mod( Atan2(-Dy, -Dx) / DEGREE, 360 );	{ 0-360 }
				{ bilateral symmetry }
src_phi2 = tri( src_phi, 180 );		{ 0-180 }
				{ quadrilateral symmetry }
src_phi4 = tri( src_phi, 90 );		{ 0-90 }

				{ Type B photometry coordinates }
srcB_vert = atan2( -Dx, Dz ) / DEGREE;
srcB_horiz = atan2( Dy, Dz ) / DEGREE;
				{ w/ symmetry }
srcB_vert2 = abs( srcB_vert );
srcB_horiz2 = abs( srcB_horiz );
