% Psfig/TeX 
\def\PsfigVersion{1.9}
% dvips version
%
% All psfig/tex software, documentation, and related files
% in this distribution of psfig/tex are 
% Copyright 1987, 1988, 1991 Trevor J. Darrell
%
% Permission is granted for use and non-profit distribution of psfig/tex 
% providing that this notice is clearly maintained. The right to
% distribute any portion of psfig/tex for profit or as part of any commercial
% product is specifically reserved for the author(s) of that portion.
%
% *** Feel free to make local modifications of psfig as you wish,
% *** but DO NOT post any changed or modified versions of ``psfig''
% *** directly to the net. Send them to me and I'll try to incorporate
% *** them into future versions. If you want to take the psfig code 
% *** and make a new program (subject to the copyright above), distribute it, 
% *** (and maintain it) that's fine, just don't call it psfig.
%
% Bugs and improvements to trevor@media.mit.edu.
%
% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions
% to the original version of this project.
%
% Modified by J. Daniel Smith on 9 October 1990 to accept the
% %%BoundingBox: comment with or without a space after the colon.  Stole
% file reading code from Tom Rokicki's EPSF.TEX file (see below).
%
% More modifications by J. Daniel Smith on 29 March 1991 to allow the
% the included PostScript figure to be rotated.  The amount of
% rotation is specified by the "angle=" parameter of the \psfig command.
%
% Modified by Robert Russell on June 25, 1991 to allow users to specify
% .ps filenames which don't yet exist, provided they explicitly provide
% boundingbox information via the \psfig command. Note: This will only work
% if the "file=" parameter follows all four "bb???=" parameters in the
% command. This is due to the order in which psfig interprets these params.
%
%  3 Jul 1991	JDS	check if file already read in once
%  4 Sep 1991	JDS	fixed incorrect computation of rotated
%			bounding box
% 25 Sep 1991	GVR	expanded synopsis of \psfig
% 14 Oct 1991	JDS	\fbox code from LaTeX so \psdraft works with TeX
%			changed \typeout to \ps@typeout
% 17 Oct 1991	JDS	added \psscalefirst and \psrotatefirst
%

% From: gvr@cs.brown.edu (George V. Reilly)
%
% \psdraft	draws an outline box, but doesn't include the figure
%		in the DVI file.  Useful for previewing.
%
% \psfull	includes the figure in the DVI file (default).
%
% \psscalefirst width= or height= specifies the size of the figure
% 		before rotation.
% \psrotatefirst (default) width= or height= specifies the size of the
% 		 figure after rotation.  Asymetric figures will
% 		 appear to shrink.
%
% \psfigurepath#1	sets the path to search for the figure
%
% \psfig
% usage: \psfig{file=, figure=, height=, width=,
%			bbllx=, bblly=, bburx=, bbury=,
%			rheight=, rwidth=, clip=, angle=, silent=}
%
%	"file" is the filename.  If no path name is specified and the
%		file is not found in the current directory,
%		it will be looked for in directory \psfigurepath.
%	"figure" is a synonym for "file".
%	By default, the width and height of the figure are taken from
%		the BoundingBox of the figure.
%	If "width" is specified, the figure is scaled so that it has
%		the specified width.  Its height changes proportionately.
%	If "height" is specified, the figure is scaled so that it has
%		the specified height.  Its width changes proportionately.
%	If both "width" and "height" are specified, the figure is scaled
%		anamorphically.
%	"bbllx", "bblly", "bburx", and "bbury" control the PostScript
%		BoundingBox.  If these four values are specified
%               *before* the "file" option, the PSFIG will not try to
%               open the PostScript file.
%	"rheight" and "rwidth" are the reserved height and width
%		of the figure, i.e., how big TeX actually thinks
%		the figure is.  They default to "width" and "height".
%	The "clip" option ensures that no portion of the figure will
%		appear outside its BoundingBox.  "clip=" is a switch and
%		takes no value, but the `=' must be present.
%	The "angle" option specifies the angle of rotation (degrees, ccw).
%	The "silent" option makes \psfig work silently.
%

% check to see if macros already loaded in (maybe some other file says
% "\input psfig") ...
\ifx\undefined\psfig\else\endinput\fi

%
% from a suggestion by eijkhout@csrd.uiuc.edu to allow
% loading as a style file. Changed to avoid problems
% with amstex per suggestion by jbence@math.ucla.edu

\let\LaTeXAtSign=\@
\let\@=\relax
\edef\psfigRestoreAt{\catcode`\@=\number\catcode`@\relax}
%\edef\psfigRestoreAt{\catcode`@=\number\catcode`@\relax}
\catcode`\@=11\relax
\newwrite\@unused
\def\ps@typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
\ps@typeout{psfig/tex \PsfigVersion}

%% Here's how you define your figure path.  Should be set up with null
%% default and a user useable definition.

\def\figurepath{./}
\def\psfigurepath#1{\edef\figurepath{#1}}

%
% @psdo control structure -- similar to Latex @for.
% I redefined these with different names so that psfig can
% be used with TeX as well as LaTeX, and so that it will not 
% be vunerable to future changes in LaTeX's internal
% control structure,
%
\def\@nnil{\@nil}
\def\@empty{}
\def\@psdonoop#1\@@#2#3{}
\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
    \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}
\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
       #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}
\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil 
       \let\@nextwhile=\@psdonoop \else
      #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}
\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
    \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}
\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil 
       \let\@nextwhile=\@psdonoop \else
      #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}
% 
% \fbox is defined in latex.tex; so if \fbox is undefined, assume that
% we are not in LaTeX.
% Perhaps this could be done better???
\ifx\undefined\fbox
% \fbox code from modified slightly from LaTeX
\newdimen\fboxrule
\newdimen\fboxsep
\newdimen\ps@tempdima
\newbox\ps@tempboxa
\fboxsep = 3pt
\fboxrule = .4pt
\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule
    \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa
   \hbox{\lower \ps@tempdima\hbox
  {\vbox{\hrule height \fboxrule
          \hbox{\vrule width \fboxrule \hskip\fboxsep
          \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip 
                 \fboxsep\vrule width \fboxrule}
                 \hrule height \fboxrule}}}}
\fi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% file reading stuff from epsf.tex
%   EPSF.TEX macro file:
%   Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
%   Revised by Don Knuth, 3 Jan 1990.
%   Revised by Tomas Rokicki to accept bounding boxes with no
%      space after the colon, 18 Jul 1990.
%   Portions modified/removed for use in PSFIG package by
%      J. Daniel Smith, 9 October 1990.
%
\newread\ps@stream
\newif\ifnot@eof       % continue looking for the bounding box?
\newif\if@noisy        % report what you're making?
\newif\if@atend        % %%BoundingBox: has (at end) specification
\newif\if@psfile       % does this look like a PostScript file?
%
% PostScript files should start with `%!'
%
{\catcode`\%=12\global\gdef\epsf@start{%!}}
\def\epsf@PS{PS}
%
\def\epsf@getbb#1{%
%
%   The first thing we need to do is to open the
%   PostScript file, if possible.
%
\openin\ps@stream=#1
\ifeof\ps@stream\ps@typeout{Error, File #1 not found}\else
%
%   Okay, we got it. Now we'll scan lines until we find one that doesn't
%   start with %. We're looking for the bounding box comment.
%
   {\not@eoftrue \chardef\other=12
    \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
    \loop
       \if@psfile
	  \read\ps@stream to \epsf@fileline
       \else{
	  \obeyspaces
          \read\ps@stream to \epsf@tmp\global\let\epsf@fileline\epsf@tmp}
       \fi
       \ifeof\ps@stream\not@eoffalse\else
%
%   Check the first line for `%!'.  Issue a warning message if its not
%   there, since the file might not be a PostScript file.
%
       \if@psfile\else
       \expandafter\epsf@test\epsf@fileline:. \\%
       \fi
%
%   We check to see if the first character is a % sign;
%   if so, we look further and stop only if the line begins with
%   `%%BoundingBox:' and the `(atend)' specification was not found.
%   That is, the only way to stop is when the end of file is reached,
%   or a `%%BoundingBox: llx lly urx ury' line is found.
%
          \expandafter\epsf@aux\epsf@fileline:. \\%
       \fi
   \ifnot@eof\repeat
   }\closein\ps@stream\fi}%
%
% This tests if the file we are reading looks like a PostScript file.
%
\long\def\epsf@test#1#2#3:#4\\{\def\epsf@testit{#1#2}
			\ifx\epsf@testit\epsf@start\else
\ps@typeout{Warning! File does not start with `\epsf@start'.  It may not be a PostScript file.}
			\fi
			\@psfiletrue} % don't test after 1st line
%
%   We still need to define the tricky \epsf@aux macro. This requires
%   a couple of magic constants for comparison purposes.
%
{\catcode`\%=12\global\let\epsf@percent=%\global\def\epsf@bblit{%BoundingBox}}
%
%
%   So we're ready to check for `%BoundingBox:' and to grab the
%   values if they are found.  We continue searching if `(at end)'
%   was found after the `%BoundingBox:'.
%
\long\def\epsf@aux#1#2:#3\\{\ifx#1\epsf@percent
   \def\epsf@testit{#2}\ifx\epsf@testit\epsf@bblit
	\@atendfalse
        \epsf@atend #3 . \\%
	\if@atend	
	   \if@verbose{
		\ps@typeout{psfig: found `(atend)'; continuing search}
	   }\fi
        \else
        \epsf@grab #3 . . . \\%
        \not@eoffalse
        \global\no@bbfalse
        \fi
   \fi\fi}%
%
%   Here we grab the values and stuff them in the appropriate definitions.
%
\def\epsf@grab #1 #2 #3 #4 #5\\{%
   \global\def\epsf@llx{#1}\ifx\epsf@llx\empty
      \epsf@grab #2 #3 #4 #5 .\\\else
   \global\def\epsf@lly{#2}%
   \global\def\epsf@urx{#3}\global\def\epsf@ury{#4}\fi}%
%
% Determine if the stuff following the %%BoundingBox is `(atend)'
% J. Daniel Smith.  Copied from \epsf@grab above.
%
\def\epsf@atendlit{(atend)} 
\def\epsf@atend #1 #2 #3\\{%
   \def\epsf@tmp{#1}\ifx\epsf@tmp\empty
      \epsf@atend #2 #3 .\\\else
   \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi}


% End of file reading stuff from epsf.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% trigonometry stuff from "trig.tex"
\chardef\psletter = 11 % won't conflict with \begin{letter} now...
\chardef\other = 12

\newif \ifdebug %%% turn me on to see TeX hard at work ...
\newif\ifc@mpute %%% don't need to compute some values
\c@mputetrue % but assume that we do

\let\then = \relax
\def\r@dian{pt }
\let\r@dians = \r@dian
\let\dimensionless@nit = \r@dian
\let\dimensionless@nits = \dimensionless@nit
\def\internal@nit{sp }
\let\internal@nits = \internal@nit
\newif\ifstillc@nverging
\def \Mess@ge #1{\ifdebug \then \message {#1} \fi}

{ %%% Things that need abnormal catcodes %%%
	\catcode `\@ = \psletter
	\gdef \nodimen {\expandafter \n@dimen \the \dimen}
	\gdef \term #1 #2 #3%
	       {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value)
		\edef \t@@ {\expandafter \n@dimen \the #2\r@dian}%
				   %%% freeze parameter 2 (dimen, by value)
		\t@rm {\t@} {\t@@} {#3}%
	       }
	\gdef \t@rm #1 #2 #3%
	       {{%
		\count 0 = 0
		\dimen 0 = 1 \dimensionless@nit
		\dimen 2 = #2\relax
		\Mess@ge {Calculating term #1 of \nodimen 2}%
		\loop
		\ifnum	\count 0 < #1
		\then	\advance \count 0 by 1
			\Mess@ge {Iteration \the \count 0 \space}%
			\Multiply \dimen 0 by {\dimen 2}%
			\Mess@ge {After multiplication, term = \nodimen 0}%
			\Divide \dimen 0 by {\count 0}%
			\Mess@ge {After division, term = \nodimen 0}%
		\repeat
		\Mess@ge {Final value for term #1 of 
				\nodimen 2 \space is \nodimen 0}%
		\xdef \Term {#3 = \nodimen 0 \r@dians}%
		\aftergroup \Term
	       }}
	\catcode `\p = \other
	\catcode `\t = \other
	\gdef \n@dimen #1pt{#1} %%% throw away the ``pt''
}

\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym

\def \Multiply #1by #2%%% allows division of a dimen by a dimen
       {{%%% should really freeze parameter 2 (dimen, passed by value)
	\count 0 = #1\relax
	\count 2 = #2\relax
	\count 4 = 65536
	\Mess@ge {Before scaling, count 0 = \the \count 0 \space and
			count 2 = \the \count 2}%
	\ifnum	\count 0 > 32767 %%% do our best to avoid overflow
	\then	\divide \count 0 by 4
		\divide \count 4 by 4
	\else	\ifnum	\count 0 < -32767
		\then	\divide \count 0 by 4
			\divide \count 4 by 4
		\else
		\fi
	\fi
	\ifnum	\count 2 > 32767 %%% while retaining reasonable accuracy
	\then	\divide \count 2 by 4
		\divide \count 4 by 4
	\else	\ifnum	\count 2 < -32767
		\then	\divide \count 2 by 4
			\divide \count 4 by 4
		\else
		\fi
	\fi
	\multiply \count 0 by \count 2
	\divide \count 0 by \count 4
	\xdef \product {#1 = \the \count 0 \internal@nits}%
	\aftergroup \product
       }}

\def\r@duce{\ifdim\dimen0 > 90\r@dian \then   % sin(x+90) = sin(180-x)
		\multiply\dimen0 by -1
		\advance\dimen0 by 180\r@dian
		\r@duce
	    \else \ifdim\dimen0 < -90\r@dian \then  % sin(-x) = sin(360+x)
		\advance\dimen0 by 360\r@dian
		\r@duce
		\fi
	    \fi}

\def\Sine#1%
       {{%
	\dimen 0 = #1 \r@dian
	\r@duce
	\ifdim\dimen0 = -90\r@dian \then
	   \dimen4 = -1\r@dian
	   \c@mputefalse
	\fi
	\ifdim\dimen0 = 90\r@dian \then
	   \dimen4 = 1\r@dian
	   \c@mputefalse
	\fi
	\ifdim\dimen0 = 0\r@dian \then
	   \dimen4 = 0\r@dian
	   \c@mputefalse
	\fi
%
	\ifc@mpute \then
        	% convert degrees to radians
		\divide\dimen0 by 180
		\dimen0=3.141592654\dimen0
%
		\dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant
		\divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2
		\Mess@ge {Sin: calculating Sin of \nodimen 0}%
		\count 0 = 1 %%% see power-series expansion for sine
		\dimen 2 = 1 \r@dian %%% ditto
		\dimen 4 = 0 \r@dian %%% ditto
		\loop
			\ifnum	\dimen 2 = 0 %%% then we've done
			\then	\stillc@nvergingfalse 
			\else	\stillc@nvergingtrue
			\fi
			\ifstillc@nverging %%% then calculate next term
			\then	\term {\count 0} {\dimen 0} {\dimen 2}%
				\advance \count 0 by 2
				\count 2 = \count 0
				\divide \count 2 by 2
				\ifodd	\count 2 %%% signs alternate
				\then	\advance \dimen 4 by \dimen 2
				\else	\advance \dimen 4 by -\dimen 2
				\fi
		\repeat
	\fi		
			\xdef \sine {\nodimen 4}%
       }}

% Now the Cosine can be calculated easily by calling \Sine
\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else
		             \edef\Savesine{\sine}\fi
	{\dimen0=#1\r@dian\advance\dimen0 by 90\r@dian
	 \Sine{\nodimen 0}
	 \xdef\cosine{\sine}
	 \xdef\sine{\Savesine}}}	      
% end of trig stuff
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\psdraft{
	\def\@psdraft{0}
	%\ps@typeout{draft level now is \@psdraft \space . }
}
\def\psfull{
	\def\@psdraft{100}
	%\ps@typeout{draft level now is \@psdraft \space . }
}

\psfull

\newif\if@scalefirst
\def\psscalefirst{\@scalefirsttrue}
\def\psrotatefirst{\@scalefirstfalse}
\psrotatefirst

\newif\if@draftbox
\def\psnodraftbox{
	\@draftboxfalse
}
\def\psdraftbox{
	\@draftboxtrue
}
\@draftboxtrue

\newif\if@prologfile
\newif\if@postlogfile
\def\pssilent{
	\@noisyfalse
}
\def\psnoisy{
	\@noisytrue
}
\psnoisy
%%% These are for the option list.
%%% A specification of the form a = b maps to calling \@p@@sa{b}
\newif\if@bbllx
\newif\if@bblly
\newif\if@bburx
\newif\if@bbury
\newif\if@height
\newif\if@width
\newif\if@rheight
\newif\if@rwidth
\newif\if@angle
\newif\if@clip
\newif\if@verbose
\def\@p@@sclip#1{\@cliptrue}


\newif\if@decmpr

%%% GDH 7/26/87 -- changed so that it first looks in the local directory,
%%% then in a specified global directory for the ps file.
%%% RPR 6/25/91 -- changed so that it defaults to user-supplied name if
%%% boundingbox info is specified, assuming graphic will be created by
%%% print time.
%%% TJD 10/19/91 -- added bbfile vs. file distinction, and @decmpr flag

\def\@p@@sfigure#1{\def\@p@sfile{null}\def\@p@sbbfile{null}
	        \openin1=#1.bb
		\ifeof1\closein1
	        	\openin1=\figurepath#1.bb
			\ifeof1\closein1
			        \openin1=#1
				\ifeof1\closein1%
				       \openin1=\figurepath#1
					\ifeof1
					   \ps@typeout{Error, File #1 not found}
						\if@bbllx\if@bblly
				   		\if@bburx\if@bbury
			      				\def\@p@sfile{#1}%
			      				\def\@p@sbbfile{#1}%
							\@decmprfalse
				  	   	\fi\fi\fi\fi
					\else\closein1
				    		\def\@p@sfile{\figurepath#1}%
				    		\def\@p@sbbfile{\figurepath#1}%
						\@decmprfalse
	                       		\fi%
			 	\else\closein1%
					\def\@p@sfile{#1}
					\def\@p@sbbfile{#1}
					\@decmprfalse
			 	\fi
			\else
				\def\@p@sfile{\figurepath#1}
				\def\@p@sbbfile{\figurepath#1.bb}
				\@decmprtrue
			\fi
		\else
			\def\@p@sfile{#1}
			\def\@p@sbbfile{#1.bb}
			\@decmprtrue
		\fi}

\def\@p@@sfile#1{\@p@@sfigure{#1}}

\def\@p@@sbbllx#1{
		%\ps@typeout{bbllx is #1}
		\@bbllxtrue
		\dimen100=#1
		\edef\@p@sbbllx{\number\dimen100}
}
\def\@p@@sbblly#1{
		%\ps@typeout{bblly is #1}
		\@bbllytrue
		\dimen100=#1
		\edef\@p@sbblly{\number\dimen100}
}
\def\@p@@sbburx#1{
		%\ps@typeout{bburx is #1}
		\@bburxtrue
		\dimen100=#1
		\edef\@p@sbburx{\number\dimen100}
}
\def\@p@@sbbury#1{
		%\ps@typeout{bbury is #1}
		\@bburytrue
		\dimen100=#1
		\edef\@p@sbbury{\number\dimen100}
}
\def\@p@@sheight#1{
		\@heighttrue
		\dimen100=#1
   		\edef\@p@sheight{\number\dimen100}
		%\ps@typeout{Height is \@p@sheight}
}
\def\@p@@swidth#1{
		%\ps@typeout{Width is #1}
		\@widthtrue
		\dimen100=#1
		\edef\@p@swidth{\number\dimen100}
}
\def\@p@@srheight#1{
		%\ps@typeout{Reserved height is #1}
		\@rheighttrue
		\dimen100=#1
		\edef\@p@srheight{\number\dimen100}
}
\def\@p@@srwidth#1{
		%\ps@typeout{Reserved width is #1}
		\@rwidthtrue
		\dimen100=#1
		\edef\@p@srwidth{\number\dimen100}
}
\def\@p@@sangle#1{
		%\ps@typeout{Rotation is #1}
		\@angletrue
%		\dimen100=#1
		\edef\@p@sangle{#1} %\number\dimen100}
}
\def\@p@@ssilent#1{ 
		\@verbosefalse
}
\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}
\def\@p@@spostlog#1{\@postlogfiletrue\def\@postlogfileval{#1}}
\def\@cs@name#1{\csname #1\endcsname}
\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}
%
% initialize the defaults (size the size of the figure)
%
\def\ps@init@parms{
		\@bbllxfalse \@bbllyfalse
		\@bburxfalse \@bburyfalse
		\@heightfalse \@widthfalse
		\@rheightfalse \@rwidthfalse
		\def\@p@sbbllx{}\def\@p@sbblly{}
		\def\@p@sbburx{}\def\@p@sbbury{}
		\def\@p@sheight{}\def\@p@swidth{}
		\def\@p@srheight{}\def\@p@srwidth{}
		\def\@p@sangle{0}
		\def\@p@sfile{} \def\@p@sbbfile{}
		\def\@p@scost{10}
		\def\@sc{}
		\@prologfilefalse
		\@postlogfilefalse
		\@clipfalse
		\if@noisy
			\@verbosetrue
		\else
			\@verbosefalse
		\fi
}
%
% Go through the options setting things up.
%
\def\parse@ps@parms#1{
	 	\@psdo\@psfiga:=#1\do
		   {\expandafter\@setparms\@psfiga,}}
%
% Compute bb height and width
%
\newif\ifno@bb
\def\bb@missing{
	\if@verbose{
		\ps@typeout{psfig: searching \@p@sbbfile \space  for bounding box}
	}\fi
	\no@bbtrue
	\epsf@getbb{\@p@sbbfile}
        \ifno@bb \else \bb@cull\epsf@llx\epsf@lly\epsf@urx\epsf@ury\fi
}	
\def\bb@cull#1#2#3#4{
	\dimen100=#1 bp\edef\@p@sbbllx{\number\dimen100}
	\dimen100=#2 bp\edef\@p@sbblly{\number\dimen100}
	\dimen100=#3 bp\edef\@p@sbburx{\number\dimen100}
	\dimen100=#4 bp\edef\@p@sbbury{\number\dimen100}
	\no@bbfalse
}
% rotate point (#1,#2) about (0,0).
% The sine and cosine of the angle are already stored in \sine and
% \cosine.  The result is placed in (\p@intvaluex, \p@intvaluey).
\newdimen\p@intvaluex
\newdimen\p@intvaluey
\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp
%            	calculate x' = x \cos\theta - y \sin\theta
		  \global\p@intvaluex=\cosine\dimen0
		  \dimen3=\sine\dimen1
		  \global\advance\p@intvaluex by -\dimen3
% 		calculate y' = x \sin\theta + y \cos\theta
		  \global\p@intvaluey=\sine\dimen0
		  \dimen3=\cosine\dimen1
		  \global\advance\p@intvaluey by \dimen3
		  }}
\def\compute@bb{
		\no@bbfalse
		\if@bbllx \else \no@bbtrue \fi
		\if@bblly \else \no@bbtrue \fi
		\if@bburx \else \no@bbtrue \fi
		\if@bbury \else \no@bbtrue \fi
		\ifno@bb \bb@missing \fi
		\ifno@bb \ps@typeout{FATAL ERROR: no bb supplied or found}
			\no-bb-error
		\fi
		%
%\ps@typeout{BB: \@p@sbbllx, \@p@sbblly, \@p@sbburx, \@p@sbbury} 
%
% store height/width of original (unrotated) bounding box
		\count203=\@p@sbburx
		\count204=\@p@sbbury
		\advance\count203 by -\@p@sbbllx
		\advance\count204 by -\@p@sbblly
		\edef\ps@bbw{\number\count203}
		\edef\ps@bbh{\number\count204}
		%\ps@typeout{ psbbh = \ps@bbh, psbbw = \ps@bbw }
		\if@angle 
			\Sine{\@p@sangle}\Cosine{\@p@sangle}
	        	{\dimen100=\maxdimen\xdef\r@p@sbbllx{\number\dimen100}
					    \xdef\r@p@sbblly{\number\dimen100}
			                    \xdef\r@p@sbburx{-\number\dimen100}
					    \xdef\r@p@sbbury{-\number\dimen100}}
%
% Need to rotate all four points and take the X-Y extremes of the new
% points as the new bounding box.
                        \def\minmaxtest{
			   \ifnum\number\p@intvaluex<\r@p@sbbllx
			      \xdef\r@p@sbbllx{\number\p@intvaluex}\fi
			   \ifnum\number\p@intvaluex>\r@p@sbburx
			      \xdef\r@p@sbburx{\number\p@intvaluex}\fi
			   \ifnum\number\p@intvaluey<\r@p@sbblly
			      \xdef\r@p@sbblly{\number\p@intvaluey}\fi
			   \ifnum\number\p@intvaluey>\r@p@sbbury
			      \xdef\r@p@sbbury{\number\p@intvaluey}\fi
			   }
%			lower left
			\rotate@{\@p@sbbllx}{\@p@sbblly}
			\minmaxtest
%			upper left
			\rotate@{\@p@sbbllx}{\@p@sbbury}
			\minmaxtest
%			lower right
			\rotate@{\@p@sbburx}{\@p@sbblly}
			\minmaxtest
%			upper right
			\rotate@{\@p@sbburx}{\@p@sbbury}
			\minmaxtest
			\edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly}
			\edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury}
%\ps@typeout{rotated BB: \r@p@sbbllx, \r@p@sbblly, \r@p@sbburx, \r@p@sbbury}
		\fi
		\count203=\@p@sbburx
		\count204=\@p@sbbury
		\advance\count203 by -\@p@sbbllx
		\advance\count204 by -\@p@sbblly
		\edef\@bbw{\number\count203}
		\edef\@bbh{\number\count204}
		%\ps@typeout{ bbh = \@bbh, bbw = \@bbw }
}
%
% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds,
%	then leaves the result in @result
%
\def\in@hundreds#1#2#3{\count240=#2 \count241=#3
		     \count100=\count240	% 100 is first digit #2/#3
		     \divide\count100 by \count241
		     \count101=\count100
		     \multiply\count101 by \count241
		     \advance\count240 by -\count101
		     \multiply\count240 by 10
		     \count101=\count240	%101 is second digit of #2/#3
		     \divide\count101 by \count241
		     \count102=\count101
		     \multiply\count102 by \count241
		     \advance\count240 by -\count102
		     \multiply\count240 by 10
		     \count102=\count240	% 102 is the third digit
		     \divide\count102 by \count241
		     \count200=#1\count205=0
		     \count201=\count200
			\multiply\count201 by \count100
		 	\advance\count205 by \count201
		     \count201=\count200
			\divide\count201 by 10
			\multiply\count201 by \count101
			\advance\count205 by \count201
			%
		     \count201=\count200
			\divide\count201 by 100
			\multiply\count201 by \count102
			\advance\count205 by \count201
			%
		     \edef\@result{\number\count205}
}
\def\compute@wfromh{
		% computing : width = height * (bbw / bbh)
		\in@hundreds{\@p@sheight}{\@bbw}{\@bbh}
		%\ps@typeout{ \@p@sheight * \@bbw / \@bbh, = \@result }
		\edef\@p@swidth{\@result}
		%\ps@typeout{w from h: width is \@p@swidth}
}
\def\compute@hfromw{
		% computing : height = width * (bbh / bbw)
	        \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}
		%\ps@typeout{ \@p@swidth * \@bbh / \@bbw = \@result }
		\edef\@p@sheight{\@result}
		%\ps@typeout{h from w : height is \@p@sheight}
}
\def\compute@handw{
		\if@height 
			\if@width
			\else
				\compute@wfromh
			\fi
		\else 
			\if@width
				\compute@hfromw
			\else
				\edef\@p@sheight{\@bbh}
				\edef\@p@swidth{\@bbw}
			\fi
		\fi
}
\def\compute@resv{
		\if@rheight \else \edef\@p@srheight{\@p@sheight} \fi
		\if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi
		%\ps@typeout{rheight = \@p@srheight, rwidth = \@p@srwidth}
}
%		
% Compute any missing values
\def\compute@sizes{
	\compute@bb
	\if@scalefirst\if@angle
% at this point the bounding box has been adjsuted correctly for
% rotation.  PSFIG does all of its scaling using \@bbh and \@bbw.  If
% a width= or height= was specified along with \psscalefirst, then the
% width=/height= value needs to be adjusted to match the new (rotated)
% bounding box size (specifed in \@bbw and \@bbh).
%    \ps@bbw       width=
%    -------  =  ---------- 
%    \@bbw       new width=
% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the
% width of the original (unrotated) bounding box.
	\if@width
	   \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw}
	   \edef\@p@swidth{\@result}
	\fi
	\if@height
	   \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh}
	   \edef\@p@sheight{\@result}
	\fi
	\fi\fi
	\compute@handw
	\compute@resv}

%
% \psfig
% usage : \psfig{file=, height=, width=, bbllx=, bblly=, bburx=, bbury=,
%			rheight=, rwidth=, clip=}
%
% "clip=" is a switch and takes no value, but the `=' must be present.
\def\psfig#1{\vbox {
	% do a zero width hard space so that a single
	% \psfig in a centering enviornment will behave nicely
	%{\setbox0=\hbox{\ }\ \hskip-\wd0}
	%
	\ps@init@parms
	\parse@ps@parms{#1}
	\compute@sizes
	%
	\ifnum\@p@scost<\@psdraft{
		%
		\special{ps::[begin] 	\@p@swidth \space \@p@sheight \space
				\@p@sbbllx \space \@p@sbblly \space
				\@p@sbburx \space \@p@sbbury \space
				startTexFig \space }
		\if@angle
			\special {ps:: \@p@sangle \space rotate \space} 
		\fi
		\if@clip{
			\if@verbose{
				\ps@typeout{(clip)}
			}\fi
			\special{ps:: doclip \space }
		}\fi
		\if@prologfile
		    \special{ps: plotfile \@prologfileval \space } \fi
		\if@decmpr{
			\if@verbose{
				\ps@typeout{psfig: including \@p@sfile.Z \space }
			}\fi
			\special{ps: plotfile "`zcat \@p@sfile.Z" \space }
		}\else{
			\if@verbose{
				\ps@typeout{psfig: including \@p@sfile \space }
			}\fi
			\special{ps: plotfile \@p@sfile \space }
		}\fi
		\if@postlogfile
		    \special{ps: plotfile \@postlogfileval \space } \fi
		\special{ps::[end] endTexFig \space }
		% Create the vbox to reserve the space for the figure.
		\vbox to \@p@srheight sp{
		% 1/92 TJD Changed from "true sp" to "sp" for magnification.
			\hbox to \@p@srwidth sp{
				\hss
			}
		\vss
		}
	}\else{
		% draft figure, just reserve the space and print the
		% path name.
		\if@draftbox{		
			% Verbose draft: print file name in box
			\hbox{\frame{\vbox to \@p@srheight sp{
			\vss
			\hbox to \@p@srwidth sp{ \hss \@p@sfile \hss }
			\vss
			}}}
		}\else{
			% Non-verbose draft
			\vbox to \@p@srheight sp{
			\vss
			\hbox to \@p@srwidth sp{\hss}
			\vss
			}
		}\fi	



	}\fi
}}
\psfigRestoreAt
\let\@=\LaTeXAtSign


\documentstyle[aps,prd]{revtex} \input psfig.tex \voffset=.5truein
\begin{document} \title{Neutrino Absorption Tomography of the Earth's Interior
using Isotropic Ultra-high Energy Flux} \author{ Pankaj Jain$^a$, John P.
Ralston$^b$ and
George M. Frichter$^c$} \address{$^a$Physics Department, I.I.T., Kanpur, India
208016 \\ $^b$Department of Physics and Astronomy \\ University of Kansas,
Lawrence, KS 66045-2151, USA \\$^c$Department of Physics, Florida State
University, Talahassee, FL 32306-3016 USA, \\ } \date{\today} \maketitle

\begin{abstract} We study the feasibility of using an isotropic flux of cosmic
neutrinos in the energy range of 10 to 10000 TeV to study the interior
structure
of Earth. The angular distribution of events in a $\sim {\rm km}^3$-scale
neutrino telescope can be inverted to yield information on the Earth's mass
distribution that is independent of other methods.  The energy spectrum of
the neutrino primaries is also determined from
consistency with the angular distribution. 
It is possible to make a model
independent determination of the
density profile of Earth's interior, separate from the absolute
normalization of
the incident cosmic neutrinos. \end{abstract}


\section*{ }

The nature of the Earth's interior has traditionally been deduced by
indirect physical methods. An early, noteworthy result was Cavendish's 1793
deduction that the Earth must have a dense core, obtained by ``weighing the
Earth" gravitationally. 
Current measurements are based largely on seismic wave propagation, which
is rather indirect and has substantial intrinsic uncertainties
\cite{geotexts}.   Adding extra information fails to remove ambiguitites,
including studies ranging from the vibrational modes of the Earth as an
elastic body, to temperature constraints\cite{Jeanloz} , to the detailed
composition of the core \cite{Jeanloz}.   Controversies currently exist:
for example, seismic data has indicated that there may be an unsymmetrical
differentially rotating element in the core \cite{xsong}, with contenders
to explain this including a very large single crystal. Independent
measurements of the density profile would be of considerable value. Here we
discuss a novel way to take a rather direct `snapshot' of the nucleon
density in the Earth's interior, by considering tomography with ultra-high
energy neutrinos of cosmic origin. The principle of neutrino tomography is
essentially the same as X-ray tomography, except for substituting penetrating
neutrinos to serve in place of X-rays. By measuring neutrino absorption
along different paths through a solid body, one can deduce the nucleon
density in the
interior of the object. The results would be utterly independent of the
geophysical model, and directly measure the nucleon density.

The interaction strength of neutrinos with other fundamental particles
increases strongly with energy, and has been well measured at several high
energy
accelerators \cite{PDG98}.  The energy range of these direct measurements runs
from below $10^8$ eV up to almost $10^{14}$ eV, the latter being achieved
recently at the accelerator HERA in Hamburg.  For almost all of the
ultra-high energy (UHE)
region of incident energy above $10^{13}$ eV, the cross section has not been
measured directly. However, $\sigma$ can be calculated by exploiting relations
in the Standard Model between electron-initiated reactions which have been
measured, the neutrino initiated reactions desired, and evolution of active
quark and anti-quark pairs with energy \cite{Frichter95,Gandhi98}.  The
uncertainty due to theory in these calculations is small, leading to a
fundamental interaction which is sufficiently well known for the purposes of
tomography.

The flux of UHE neutrinos from cosmic sources cannot yet be considered
established, and several pilot experiments in the TeV (1 TeV = $10^{12}$ eV)
energy range are underway to measure it. The BAIKAL experiment operates in lake
water; the AMANDA project detects neutrinos interacting in the Antarctic ice
cap. A third scheme called RICE exists in the pilot stage, and uses a novel
radio detection strategy which is the most effective method above 100 TeV. The
optimal energy range for neutrino tomography is roughly 10-1000 TeV, a region
where these existing pilot projects have some overlap. However, current
detectors are small and would give a marginal or insufficient event rate for
Earth tomography.  With better resources, employing a few hundred optimally
tuned detectors, our calculations indicate that one should be able to say
something useful about the Earth's interior.  However our primary focus is
a future detector on a much larger scale, with a detection volume of order
1 ${\rm km}^3$ (KM3). With fluxes of the order of current astrophysical
estimates, a KM3 detector should be able to perform definitively.

Our approach differs from previous studies of neutrino absorption tomography.
The older studies concentrated on exploiting point neutrino sources assumed to
have a steady time dependence
\cite{Volkova74,DeRujula83,Wilson84,Askar'yan84,Borisov87,Nicolaidis91,Crawford95,Kuo95}.
Reconstruction of the density profile is
done by observing periodic occultation of the sources due to the Earth's
rotation. This method relies on the rate obtained from limited point
sources, and is also subject to errors if the energy dependence of the
primary spectrum is
poorly determined.  The geometry will not work for a detector located at
the South Pole.  Kuo {\it et al.} \cite{Kuo95} investigated Earth
tomography in the context of the DUMAND II array, concluding that a time
scale of `from years to decades' was needed to obtain sufficient data with
this
method. These results are important, but we offer a complementary and more
promising
scheme. We consider neutrinos coming from unresolved active galactic
nuclei, gamma ray bursts,
secondary emissions from cosmic rays whose directions are scrambled by
cosmic magnetic
fields, and other possible galactic or cosmological sources of ultra high
energy neutrinos.
Integrating over the Universe, this diffuse flux should be nearly
isotropic, with a sizable component in the optimal energy region. Such a
flux has several advantages. For example, one overcomes the serious problem
of binning events by arrival times to incorporate the effects of the
Earth's rotation.
There is far less ambiguity due to any possible time dependent fluctuations in
the flux of an energetic point source. Most attractively, the entire
Earth density profile can be obtained unambiguously, by a simple inversion of a
well-measured observable in the data, namely the angular distribution. The
overall normalization of the flux is not needed, as we arrange the
calculation so that it drops out of the determination of the density
profile.

The energy dependence of the primary neutrino flux is also determined by
the procedure.  This is unexpected and rather miraculous, but it occurs
because the interaction cross
section and detector efficiencies are energy dependent.  Given initial data on
the angular distribution, and supposing poorly determined initial data, or
guesses, on the
energy spectrum (always a problem in cosmic ray physics), our procedure
iterates the energy spectrum to obtain consistency with the angular
distribution and
density. Put another way, a faulty energy spectrum would be inconsistent,
and by
iteration the angular distribution and measured energy flux after
attenuation determine the energy spectrum. This is quite interesting and
may serve as a good method to measure the incident
energy spectrum. If one assumes that the density profile of the Earth is
already well
known, then the angular distribution strongly overdetermines the problem, and
one might even deduce the energy dependence of the cross section,
contributing a powerful check on fundamental physics.


To illustrate these remarks, consider the angular distribution of neutrinos
passing through the Earth (Fig. 1). With an isotropic primary flux, the angular
dependence comes from differing amounts of matter traversed en route to the
detector. The effect is expressed by an evolution equation for the flux,
$\Phi$, as a function of distance $z$ traversed:

\begin{equation} \frac{d {\rm ln}\Phi(E,z)}{dz}=-n(z)\sigma_{\rm eff}(E)\:.
\label{eqone} \end{equation}

Here $\sigma_{\rm eff}$ is a known `effective' cross section which incorporates
both charged current cross sections, neutral current cross sections, and
neutral current regeneration \cite{Berez86,Frich96} for neutrinos of energy
$E$. We
measure the polar angle $\theta$ with respect to the nadir (Fig. 1). We
assume spherical symmetry, so that the density $n=n(r)$ is a positive
definite function of distance
$r$ from the Earth's center. Let us assume momentarily that the measurement
is dominated by a
sufficiently narrow range of neutrino energies, so that the variation of
(\ref{eqone}) with energy can be neglected. By taking the logarithm of the
flux, the overall flux normalization is an additive constant that drops out
of the
angular distribution.

Solving (\ref{eqone}) for the surviving neutrino flux that can be measured at a
detector site located near the Earth's surface, one obtains,

\begin{equation} \Phi_{\rm surv}(E,\theta)=\Phi_\nu(E)e^{-\sigma_{\rm
eff}(E)R n(R) f(\theta)}\:, \label{eqtwo} \end{equation} where $\Phi_\nu$ is the
incident neutrino flux, $R$ is the Earth's radius  
and the function $f(\theta)$ is proportional to the  
integrated nucleon density along the chord $0<z<2R{\rm cos}(\theta)$. It is
convenient to measure $r$ in units of the Earth's radius $R$. Then,

\begin{equation} f(\theta)={1\over n(R)}\int_{{\rm sin}^2(\theta)}^1
\frac{n(r)d(r^2)}{\sqrt{r^2-{\rm sin}^2(\theta)}}\:. \label{eqthree}
\end{equation}
 Given data for the angular dependence over the region
$0<\theta<\frac{\pi}{2}$, this particular transform can be inverted; the
result is:

\begin{equation} n(r)=-{n(R)\over \pi}\int_{{\rm sin}^{-1}(r)}^{\frac{\pi}{2}}
\frac{df(\theta)}{d\theta} \frac{d\theta}{\sqrt{{\rm sin}^2(\theta)-r^2}}\:.
\label{eqfour} \end{equation}

This analytic result shows that the angular distribution is sufficient to
give the density profile.  The result is simpler than might be expected,
because the particular spherical geometry of the problem has been
exploited. Deviations from spherical symmetry are of interest, so that
relaxing our assumptions can be contemplated, but our goal here is to prove
the practicality of the simplest scheme when confronting realistic
difficulties.  The primary difficulty appears to be statistical
fluctuations from small expected data sets, but we will find that these
appear to be under control on the scale of KM3.

We now turn to the question of energy dependence that was sidestepped
above. The simple procedure above can be applied within a small energy bin.
One might then imagine requiring that in each angular bin, we also bin the
data in energy.  With limited
statistics and limited energy resolution of the detector, we find that such a
method is unlikely to be practical.  Yet integrating over energy does not
commute with the angular inversion, so a priori the energy integrated
angular distrbution does not appear to be adequate.  To get around these
problems, we created an alternative procedure in which the Earth's
density profile and the incident flux is iteratively improved.

We start by assuming a trial function for the density profile, which will yield
our initial guess for the attenuation factor $f(\theta)$. This can be used,
along with data on the energy dependence of observed flux integrated over
nadir angle,
to obtain our first guess for the incident energy spectrum. The attenuation
function
$f(\theta)$ can then be further improved by using the calculated value of the
incident flux.  Again this is compared with the angular distribution of the
observed flux integrated over energy. At no stage is it necessary to have the
joint distribution in energy and in angle.  This procedure is repeated till
convergence is obtained for both the incident flux and $f(\theta)$.  The same
procedure has then converged to the Earth's density profile. In order to obtain
convergence and a unique solution, it is necessary to fix one boundary
condition, which is taken to be the value of the density of the Earth near the
surface. Since the surface density is known with reasonable accuracy, the
boundary
condition should not introduce any bias.

In fact the result is overdetermined, because two moments of the density are
already known: These are the total mass of the Earth (just as Cavendish used),
and the Earth's moment of inertia.  But the entire procedure can be
carried out without making use of these moments, so in practice the density
is over-determined.  This is important, because one can expect only crude
measurement of the energy distribution from a realistic
cosmic ray detector.  

We used standard Monte Carlo methods to study the feasibility of the iterated
inversion technique. The simulations used the Preliminary Reference Earth Model
(PREM) \cite{Dzie81,geotexts} for the Earth's density profile. The range of
neutrino
energies was restricted to lie between $10 - 10^4$ TeV.  Our numerical
results show that the optimal lower limit in energy is between 10 and 50
TeV, since below this value the Earth is essentially
transparent. The optimal upper limit is between $10^3$ and $10^4$ TeV, beyond
which the number of events are expected to be too small to be of much use
for tomography.
We employed a generic form of the diffuse AGN neutrino flux,
$\Phi_\nu(E)=\Phi_oE^{-2}$ for $10\ {\rm TeV} < E < 10^4\ {\rm TeV}$. This
form is within the range of current theoretical predictions. For example,
in the energy range of interest, the AGN model of Stecker, Done, Salamon and
Sommers (SDSS) \cite{Stecker92} gives a flux $\sim E^{-1}$.  A model due to
Szabo and Protheroe (SP) \cite{Proth92}, while not now thought to be correctly
normalized, has the neutrino spectrum falling like $\sim E^{-2}$.  We take
an agnostic position on
the flux, and address uncertainties by simply renormalizing results at the
end. We simulated data for a generic UHE neutrino telescope, for the
purposes of study defined in two ways: in one extreme for simplicity, we
took detector response independent of neutrino energy and angle of
incidence. The other extreme is the case of detector with the energy and
angular response calculated for a radio array \cite {Frich96}.  The radio
method has an response strongly increasing with energy, making the flat
response to the higher-energy part of the spectrum a more conservative
method. 
Meanwhile we do not have sufficient information on 
the angular
response of optical detection. Since we believe that a realistic detection
scheme would combine the strengths of both optical and radio detection,
the two cases should give a reasonable range of results without excluding
either or 
getting bogged down in details: in fact, the results were so similar 
that we simply report the simpler (isotropic and flat) response. 
Of course, detector response for a particular experimental situation, as
well as realistic energy resolution and pointing accuracy, can always be
incorporated.

Our simulation generated $N$ events distributed in nadir angle,
$0^o<\theta<90^o$, and energy, 10 TeV $<E_\nu< 10^4 $ TeV, according to
Eqn.  (\ref{eqtwo}).  We normalized our calculation so the total number of
events observed per antenna between 100 TeV and $10^4$ TeV is about 100 per
year. This is about one fourth of the event rate calculated  in
\cite{Frich96}, which takes into account subsequent changes in estimates of
the incident flux.  While we thus normalize our rates to radio detection,
any combination of methods can be rescaled in an obvious way.


The Monte Carlo data were divided into 20 energy $E$ bins, with widths
increasing like $E^2$. The data was also divided into 10 angular bins
chosen to be equally spaced in radius from the center of the Earth. These
bins were chosen to obtain the density at roughly uniform intervals. We
made no attempt to discover an optimal binning procedure. However the solid
angle subtended by the central bin, namely the one containing the center of
Earth, is very small, and hence it puts severe requirements on the
total number of events needed to say something useful about the density in
this region.
This also happens to be one of the most interesting regions for geophysics.
Depending on the total number of events and optimization scheme, one may
wish to adjust this bin to get a better measurement.

We found that for a wide range of trial density profiles convergence of the
iterative procedure was obtained within about 5 iterations.  We plot in
Fig. 2 an example of successive approximations to the attenuation function
$f(\theta)$, with the solid line showing the final result. Fig. 3
shows the successive approximations for the incident flux in energy.  The
plots show rapid convergence occurs with the scheme chosen. The figures
show explicitly that a considerable error in
the incident energy spectrum can be tolerated, with the final energy
spectrum converging
to the actual spectrum.

The final extracted density profile, along with the PREM density profile,
is shown in
Fig. 4.  The step between the core and lower mantle is very well resolved,
while the inner core is not.  Since the density converged to proper value,
then all of its moments also converged, showing that the total mass and
moment of inertia were consistent, or: Neutrinos can ``weigh the Earth".
In practice the known mass density moments provide an excellent handle on
the overall consistency of the final result.  Statistical error bars on the
derived density are acceptable (Fig. 4), although one would probably want
to optimize the central core region further. The results were obtained by
assuming that a detector with 1000 antennas is deployed for two years.  The
number is ambitious but within the scope of planning for future arrays.
Because the errors are statistical, the same result would be obtained
for an incident flux normalized 5 times lower in 10 years running.  Put yet
another way, even a modest array of 200 antennas might say something useful
in the time scale of 10 years. In Fig. 5 we also show the final result
assuming the optimistic flux estimates, but only 100 antennas for a running
time of 2 years. In this case we divide the earth's radius into only five
bins instead of ten, in order to get a reasonable number of events in the
central bin. The step between the core and lower mantle remains well
resolved.

We hasten to add that there can be many uncertainties in realistic
experimental design, which only further study can address.  During a period
of a few years to a decade, a $KM3$ neutrino telescope will be fulfilling a
primary mission as a fundamentally new kind of instrument for observing the
cosmos. We believe that with the same kind of detector, neutrino tomography
could also provide important and independent information about the Earth's
interior.


{\large\bf Acknowledgements:} We thank Geoff Abers, John Doveton, Doug McKay
and R. P. Singh for useful comments.
Supported
by DOE grant number DE-FGO2-98ER41079, the KU General Research Fund, NSF-K*STAR
Program under the Kansas Institute for Theoretical and Computational
Science and DAE grant number DAE/PHY/96152.


\begin{thebibliography}{unsrt}


\bibitem{geotexts} See current text on seismology, e.g. Mordern Global
Seismology, by T. Lay and T. C. Wallace ( Academic Press, 1995);
Quantitative Seismology: Theory and Methods, Vols 1 and 2, by K. Aki and P.
G. Richards, (W. H. Freeman, 1980).

\bibitem{Jeanloz} R. Jeanloz, Ann. Rev. Earth  Plan. Sci. 18, 357 (1990);
R. Jeanloz and S. Morris,   ibid 14, 377 (1986).
\bibitem{xsong}  X. D. Song and P. D. Richards, Nature 382, 221, (1996);  W.
J. Su, A. M. Dziewonski, and R. Jeanloz, Science 274, 1883 (1996);   X. D.
Song, Rev. Geophys. 35, 297 (1997).


\bibitem{PDG98} Particle Data Group, European Physical Journal C, 3 (1-4)
(1998).

\bibitem{Frichter95} G. M. Frichter, J. P. Ralston, and D. W. McKay, Phys. Rev.
Lett. 74, 1508-1511 (1995).

\bibitem{Gandhi98} R. Gandhi, C. Quigg, M. H. Reno, I. Sarcevic, Phys. Rev. D
58 (1998) 093009.

\bibitem{Volkova74} L. V. Volkova and G. T. Zatsepin, Bull. Phys. Ser. 38,
151-154 (1974).

\bibitem{DeRujula83} A. De. Rujula, S. L. Glashow, R. R. Wilson and G. Charpak,
Phys. Rep. 99, 341-396 (1983).

\bibitem{Wilson84} T. L. Wilson, Nature 309, 38-42 (1984).

\bibitem{Askar'yan84} G. A. Askar'yan, Usp. Fiz. Nauk 144, 523-530 (1984); Sov.
Phys. Usp. 27, 896-990 (1984).

\bibitem{Borisov87} A.B. Borisov, B.A. Dolgoshein, and A.N. Kalinovskii, Yad.
Fiz. 44, 681-689 (1986); Sov. J. Nucl. Phys. 44, 442 (1987).

\bibitem{Nicolaidis91} A. Nicolaidis, M. Jannane, and A. Tarantola, J. of
Geophys. Res. 96, 21811-17 (1991).

\bibitem{Crawford95} H. J. Crawford, R. Jeanloz, B. Romanowicz, and the DUMAND
collaboration, Proc. of the XXIV International Cosmic Ray Conference,
(University of Rome), 804 (1995).

\bibitem{Kuo95} C. Kuo, H. J. Crawford, R. Jeanloz, B. Romanowicz, G. 
Shapiro and M. L. Stevenson, Earth and Planetary Science Letters {\bf 133},
95 (1995).

\bibitem{Berez86} V. S. Berezinsky, A. Z. Gazizov, A. Z. Rozental and G. T.
Zatsepin, Sov. J. Nucl. Phys. 43, 406 (1986).

\bibitem{Frich96} G. M. Frichter, J. P. Ralston, and D. W. McKay, Phys.
Rev. D53
1684 (1996).

\bibitem{Dzie81} A. M. Dziewonski and D. L. Anderson, Phys. Earth Planet.
Inter., 25, 297-365 (1981).

\bibitem{Stecker92} F. W. Stecker, C. Done, M. H. Salamon and P. Sommers, Phys.
Rev. Lett. {\bf 66}, 2697; E (1992): {\it ibid} {\bf 69}, 2738.

\bibitem{Proth92}  A. P. Szabo and R. J. Protheroe, Astropart. Phys. {\bf 2},
375 (1994); R. J. Protheroe and A. P. Szabo, Phys. Rev. Lett. {\bf 69}, 2285
(1992).

\end{thebibliography}

\newpage
\begin{figure} [t,b] \hbox{\hspace{4em}
\hbox{\psfig{file=tfig1.ps,height=8cm}}}
\bigskip
\caption
{Earth density contours, and paths traced by netrinos at different angles
of incidence to the detector.
}
 \label{fig1}
\end{figure}


\newpage
\begin{figure} [t,b] \hbox{\hspace{4em}
\hbox{\psfig{file=tfig2.ps,height=8cm}}}
\bigskip
\caption{Successive approximations to the attenuation function $f(\theta)$
calculated iteratively, where $\theta$ is the nadir angle. The solid line
shows the final result} \label{fig2}
\end{figure}

\begin{figure} [t,b] \hbox{\hspace{4em}
\hbox{\psfig{file=tfig3.ps,height=8cm}}}
\bigskip
\caption{Successive approximations to the extracted value of the incident
flux $\phi(E)$, calculated
iteratively. The solid line shows the final result.} \label{fig3} \end{figure}

\begin{figure} [t,b] \hbox{\hspace{4em}
\hbox{\psfig{file=tfig4.ps,height=8cm}}}
\bigskip
\caption{The extracted density using ten radial bins along with the
statistical errors. The PREM model for the Earth's density, solid curve,
was used to generate data. The step between the core and lower mantle is
very well resolved, while the difference between the inner and outer cores
is not.} \label{fig4} \end{figure}

\begin{figure} [t,b] \hbox{\hspace{4em}
\hbox{\psfig{file=tfig5.ps,height=8cm}}}
\bigskip
\caption{The extracted density using five radial bins along with the
statistical errors, assuming one tenth the event rate compared to Fig. 4.
The step between the core and lower mantle remains well resolved. }
\label{fig5} \end{figure}
\end{document}




