From 21362871030affef16ed3f135ac36349476416b5 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Mon, 19 Feb 2001 20:23:17 +0000 Subject: [PATCH] r550: no message --- doc/ctsim-concepts.tex | 18 +++-- doc/ctsim-gui.tex | 153 ++++++++++++++++++++++++----------------- doc/ctsim-install.tex | 7 +- doc/ctsim-textui.tex | 39 ++++++----- doc/ctsim.prj | 12 ++-- doc/ctsim.tex | 8 +-- doc/tex2rtf.ini | 1 + msvc/ctsim/ctsim.plg | 55 ++++++++------- src/ctsim-map.h | 1 + src/ctsim.cpp | 7 +- src/dialogs.cpp | 16 +++-- src/views.cpp | 17 +++-- tools/phm2pj.cpp | 12 ++-- 13 files changed, 196 insertions(+), 150 deletions(-) diff --git a/doc/ctsim-concepts.tex b/doc/ctsim-concepts.tex index 27d342a..3f0bb16 100644 --- a/doc/ctsim-concepts.tex +++ b/doc/ctsim-concepts.tex @@ -2,7 +2,7 @@ \setheader{{\it CHAPTER \thechapter}}{}{}{\ctsimheadtitle}{}{{\it CHAPTER \thechapter}} \ctsimfooter -\section{Overview}\index{Conceptual overview} +\section{Conceptual Overview}\index{Conceptual overview} The operation of \ctsim\ begins with the phantom object. A phantom object consists of geometric elements. A scanner is specified and the collection of x-ray data, or projections, is @@ -18,7 +18,6 @@ concerned with are the \helprefn{phantom}{conceptphantom} and the \helprefn{scanner}{conceptscanner}. \section{Phantoms}\label{conceptphantom} -\subsection{Overview}\label{phantomoverview}\index{Phantom!Overview}% \ctsim\ uses geometrical objects to describe the object being scanned. A phantom is composed of one or more phantom elements. @@ -63,12 +62,12 @@ Of note, the commonly used phantom described by Shepp and Logan\cite{SHEPP74} uses only ellipses. \subsubsection{rectangle} -Rectangles use \texttt{cx} and \texttt{cy} to define the position of +Rectangles use \texttt{(cx,cy)} to define the position of the center of the rectangle with respect to the origin. \texttt{dx} and \texttt{dy} are the half-width and half-height of the rectangle. \subsubsection{triangle} -Triangles are drawn with the center of the base at \texttt{(cx,cy) +Triangles are drawn with the center of the base at \texttt{(cx,cy)} and a base half-width of \texttt{dx} and a height of \texttt{dy}. Rotations are then applied about the center of the base. @@ -100,7 +99,6 @@ defined as a rectangle of size 0.1 by 0.1, the phantom size is 0.101 in each direction. \section{Scanner}\label{conceptscanner}\index{Scanner!Concepts}% -\subsection{Dimensions} Understanding the scanning geometry is the most complicated aspect of using \ctsim. For real-world CT simulators, this is actually quite simple. The geometry is fixed by the manufacturer during the @@ -108,6 +106,7 @@ construction of the scanner and can not be changed. \ctsim, being a very flexible simulator, gives tremendous options in setting up the geometry for a scan. +\subsection{Dimensions} The geometry for a scan starts with the size of the phantom being scanned. This is because \ctsim\ allows for statistical comparisons between the original phantom image and @@ -212,7 +211,6 @@ significant distortions will occur. \subsection{Divergent Geometries}\label{geometrydivergent}\index{Equilinear geometry}\index{Equiangular geometry} \index{Scanner!Equilinear}\index{Scanner!Equiangular} -\subsubsection{Overview} For both equilinear (second generation) and equiangular (third, fourth, and fifth generation) geometries, the x-ray beams diverge from a single source to a detector array. @@ -359,10 +357,10 @@ by \ctsim. They are taken from the standard measurements used by Herman\cite{HERMAN80}. They are: \begin{itemize}\itemsep=0pt -\item[-]\textbf{$d$}\quad The normalized root mean squared distance measure. -\item[-]\textbf{$r$}\quad The normalized mean absolute distance measure. -\item[-]\textbf{$e$}\quad The worst case distance measure over a \latexonly{$2\times2$}\latexignore{\emph{2 x 2}} pixel area. -\end{twocollist} +\item[]\textbf{$d$}\quad The normalized root mean squared distance measure. +\item[]\textbf{$r$}\quad The normalized mean absolute distance measure. +\item[]\textbf{$e$}\quad The worst case distance measure over a \latexonly{$2\times2$}\latexignore{\emph{2 x 2}} pixel area. +\end{itemize} These measurements are defined in equations \ref{dequation} through \ref{bigrequation}. In these equations, $p$ denotes the phantom image, $r$ denotes the reconstruction diff --git a/doc/ctsim-gui.tex b/doc/ctsim-gui.tex index 5a11609..2d39599 100644 --- a/doc/ctsim-gui.tex +++ b/doc/ctsim-gui.tex @@ -1,15 +1,15 @@ -\chapter{The Graphical User Interface}\label{ctsim}\index{ctsim}% +\chapter{The Graphical User Interface}\label{ctsim}\index{ctsim}\index{Graphical interface}% \setheader{{\it CHAPTER \thechapter}}{}{}{\ctsimheadtitle}{}{{\it CHAPTER \thechapter}}% \ctsimfooter% -\section{Overview}\index{Graphical interface} \ctsim\ is the graphical shell for the CTSim project. This shell uses the \urlref{wxWindows}{http://www.wxwindows.org} library for cross-platform compatibility. The graphical shell is compatible with Microsoft Windows, \urlref{GTK}{http://www.gtk.org}, and \urlref{Motif}{http://www.openmotif.org} graphical environments. +\section{Starting CTSim} \usage \texttt{ctsim [files to open...]} You can invoke \ctsim\ by itself on the command line, or include @@ -20,7 +20,38 @@ files, phantom files, and plot files. On Microsoft Windows platforms, the simplest way to invoke \ctsim\ is via the \emph{Start} menu under the \emph{Programs} sub-menu. -\section{Quick Start}\label{quickstart}\index{Quick Start} +\section{Quick Start}\label{IDH_QUICKSTART}\index{Quick Start} +The fastest way to put \ctsim\ through it's basic operation is: +\begin{enumerate}\itemsep=0pt +\item \texttt{File - Create Phantom...} \\ +This creates a window with the geometric phantom. Choose the \texttt{Herman} head phantom. +\item \texttt{Process - Rasterize...} \\ +This creates an image file of the phantom by converting it from a +geometric definition into a rasterized image. You may use the defaults +shown in the dialog box. +\item \texttt{View - Auto...} \\ +Use this command on the new rasterized image window. This will optimize the intensity scale for +viewing the soft-tissue details of the phantom. Select the \texttt{median} center and +a standard deviation factor of \texttt{0.1}. +\item \texttt{Process - Projections...} \\ +Use this command on the geometric phantom window. This simulates the collection of x-ray +data. You may use the defaults shown in the dialog box. +\item \texttt{Reconstruction - Filtered Backprojection...} \\ +Use this command on the projection window. This will reconstruct an image +from the projections. Once again, you may use the defaults shown in the dialog box. +\item \texttt{View - Auto...} \\ +Use this command on the new reconstructed image window. This will optimize the intensity scale for +viewing the soft-tissue details of the reconstruction. Select the \texttt{median} center and +a standard deviation factor of \texttt{0.1}. +\item \texttt{Analyze - Compare Images...} \\ +Use this command on the rasterized phantom image window. This will bring up a dialog box +asking for the comparison image. Select the reconstruction image that you just made and also select the "Make difference image" +check box. You'll then see the image distance measurements and also a new window with the difference between the rasterized +phantom and the reconstruction. +\item \textbf{That's it!} You have just performed the basic operations with \ctsim. By varying the parameters of the rasterization, +projection, and reconstructions you perform endless computed tomography experiments. \ctsim\ also has many other visualization +and analysis features that you learn more about by reading the manual. +\end{enumerate} \section{File Types}\index{File types} @@ -41,12 +72,12 @@ since both a real and imaginary component need to be stored. When complex-valued images are viewed on the screen, only the real component is displayed. -Images files can also store any number of text labels. \ctsim\ uses +Images files can store any number of text labels. \ctsim\ uses these labels for recording history information regarding the creation and modifications of images. \subsection{Projection} -Projection files are created from phantom files during the +Projection files are created from phantom files via the projection process. Numerous options are available for the creation of the these files. The files are stored in a binary format with cross-platform compatibility on little and big-endian @@ -61,7 +92,7 @@ files for easy cross-platform support and editing. These global commands are present on the menus of all windows. \subsection{File - Create Phantom}\label{IDH_DLG_PHANTOM}\index{Dialog!Create phantom} -This command brings up a dialog box showing the phantoms that are pre-programmed +This command displays a dialog box showing the phantoms that are pre-programmed into \ctsim. After selecting one of these phantoms, the new window with that phantom will be generated. The pre-programmed phantoms are: @@ -73,11 +104,12 @@ center of the phantom and \texttt{0} everywhere else.} \end{twocollist} \subsection{File - Create Filter}\label{IDH_DLG_FILTER}\index{Dialog!Create filter} -This command brings up a dialog box showing the pre-programmed filters +This command displays a dialog box showing the pre-programmed filters of \ctsim. This command will create a 2-dimensional image of the selected filter. The center of the filter is at the center of the image. -These filters can be created in their natural frequency domain or in their spatial domain. +These filters can be created in their natural frequency domain or in their inverse +spatial domain. \begin{twocollist} \twocolitem{\textbf{Filter}}{Selects the filter to generate. The available filters are: @@ -97,8 +129,9 @@ These filters can be created in their natural frequency domain or in their spati \item Triangle \end{itemize} } -\twocolitem{\textbf{Domain}}{Selects either the \texttt{Frequency} or \texttt{Spatial} domains. The filters have the -frequency domain as their natural domain.} +\twocolitem{\textbf{Domain}}{Selects either the \texttt{Frequency} or \texttt{Spatial} domain. The filters have the +frequency domain as their natural domain. The spatial domain is obtained either analytically or performing +an inverse Fourier transformation.} \twocolitem{\textbf{X Size}}{Number of columns in the output image.} \twocolitem{\textbf{Y Size}}{Number of rows in the output image.} \twocolitem{\textbf{Hamming Parameter}}{ This parameter adjusts the smoothing of the Hamming @@ -126,12 +159,12 @@ On UNIX and Linux environments, they are stored in the user's home directory with the filename of \texttt{.ctsim}. \begin{twocollist} -\twocolitem{\textbf{Advanced options}}{By default, this is turned off in new installations. +\twocolitem{\textbf{Advanced options}}{This option is initially turned off in new installations. These advanced options are not required for normal simulations. When \texttt{Advanced Options} is set, \ctsim\ will display more options during scanning of phantoms and the reconstruction of projections.} -\twocolitem{\textbf{Ask before deleting new documents}}{By default, this is turned on in +\twocolitem{\textbf{Ask before closing new documents}}{This option is initially turned on in new installations. With this option set, \ctsim\ will ask before closing documents that have been modified or never saved on disk. By turning off this option, \ctsim\ will never ask if you want to save a file -- you'll @@ -149,10 +182,13 @@ This command saves the contents of the active window. If the window hasn't been named, a dialog box will open asking for the file name to use. \subsection{File - Close} -As one would expect, this closes the active window. +As one would expect, this closes the active window. If the contents of the window have not been +saved and the \emph{Advanced Preferences} option \texttt{Ask before closing new documents} +is turned on, then you will be prompted if decide if you want to save the contents of the window +prior to closing. \subsection{File - Save As} -Allows the saving of the contents of a window to any filename. +Allows the saving of the contents of the active window to any file name. \subsection{Help - Contents} This command displays the online help. @@ -188,11 +224,11 @@ are averaged.} \end{twocollist} \subsection{Process - Projections}\label{IDH_DLG_PROJECTIONS}\index{Dialog!Projections} -This creates a projection file from a phantom. The options +This command creates a projection file from a phantom. The options available when collecting projections are: \begin{twocollist} -\twocolitem{\textbf{Geometry}}{Selects the scanner geometry. +\twocolitem{\textbf{Geometry}}{Sets the scanner geometry. The available geometries are: \begin{itemize}\itemsep=0pt \item \texttt{Parallel} \item \texttt{Equiangular} @@ -202,10 +238,10 @@ available when collecting projections are: detectors in the detector array.} \twocolitem{\textbf{Number of views}}{Sets the number of views -collected} +to collect.} \twocolitem{\textbf{Samples per detector}}{Sets the number of -samples collected for each detector} +samples collected for each detector.} \twocolitem{\textbf{View Ratio}}{Sets the field of view as a ratio of the diameter of the phantom. For normal scanning, use a value of @@ -223,23 +259,23 @@ geometries, this should be at least \texttt{2.0} to avoid artifacts.} \textbf{Advanced Options} -These options are only visible if \emph{Advanced Options} has been +These options are visible only if \emph{Advanced Options} has been selected in the \texttt{File - Preferences} dialog. These parameters default to optimal settings and don't need to be adjusted except by expert users. \begin{twocollist} \twocolitem{\textbf{Rotation Angle}}{Sets the rotation amount as a -multiple of \latexonly{$\pi$.}\latexignore{pi.} For parallel geometries use a rotation angle of \texttt{1} +fraction of a circle. For parallel geometries use a rotation angle of \texttt{0.5} and for equilinear and equiangular geometries use a rotation angle -of \texttt{2}. Using any other rotation angle will lead to artifacts.} +of \texttt{1}. Using any other rotation angle will lead to artifacts.} \end{twocollist} \section{Image Menus} \subsection{File - Properties} -Properties of image files include +Properties of image files include: \begin{itemize}\itemsep=0pt \item Whether the image is real or complex-valued. \item Numeric statistics (minimum, maximum, mean, median, mode, and standard deviation). @@ -264,7 +300,8 @@ UNIX systems.} \end{twocollist} -\subsection{View}\label{intensityscale}\index{Intensity scale} +\subsection{View} +\subsubsection{Intensity Scale}\label{intensityscale}\index{Intensity scale} These commands are used change the intensity scale for viewing the image. These commands do not change the image data. When the minimum value is set, then the color pure black is assigned to that image value. Similarly, @@ -276,10 +313,10 @@ In clinical medicine, the intensity scale is often changed to examine bone (high value) versus soft-tissue (medium value) features. \subsubsection{Set}\label{IDH_DLG_MINMAX} -This command displays a dialog box that allows you to set the lower +This command displays a dialog box that sets the lower and upper values to display. -\subsubsection{Auto}\label{IDH_DLG_AUTOSCALE} +\subsubsection{Auto}\label{IDH_DLG_AUTOSCALE}\index{Auto scale} This command displays a dialog box that allows \ctsim\ to automatically make an intensity scale. The parameters that \ctsim\ needs to make this automatic scale are: @@ -289,8 +326,8 @@ automatic scale are: \ctsim\ allows you to use either the mean, mode, or median of the image as the center of the intensity scale.} -\twocolitem{\textbf{Width}}{This sets the half-width of the intensity scale. The width -is specified as a ratio of the standard deviation.} +\twocolitem{\textbf{Width}}{This sets the half-width of the intensity scale. The half-width +is specified as a multiple of the standard deviation.} \end{twocollist} As an example, if \texttt{median} is selected as the center and @@ -350,7 +387,7 @@ support both real and complex-valued images. The available arithmetic commards a \subsubsection{Frequency Based} -This commands allow the Fourier and inverse Fourier transformations of +These commands perform Fourier and inverse Fourier transformations of images. By default, the transformations will automatically convert images between Fourier to natural orders as expected. For example, \texttt{2-D FFT} will transform the points into natural order after the Fourier transform. @@ -358,37 +395,34 @@ Similarly the inverse, \texttt{2-D IFFT}, will reorder the points from natural order to Fourier order before applying the inverse Fourier transformation. As you would expect, images that undergo frequency filtering will be complex-valued -after than filtering. Normally, only the real component is shown by \ctsim. However, \ctsim\ does +after than filtering. Only the real component is shown by \ctsim. However, \ctsim\ does have options for converting a complex-valued image into a real-valued image via the \texttt{Magnitude} and \texttt{Phase} filtering commands. The available frequency-based filtering commards are: \begin{itemize}\itemsep=0pt -\item 2D FFT -\item 2D IFFT +\item 2-D FFT +\item 2-D IFFT \item FFT Rows \item IFFT Rows \item FFT Columns \item IFFT Columns -\item 2D Fourier -\item 2D Inverse Fourier +\item 2-D Fourier +\item 2-D Inverse Fourier \item Shuffle Fourier to Natural Order \item Shuffle Natural to Fourier Order \item Magnitude \item Phase \end{itemize} -\subsection{Analyze} -These commands are used for analyzing an image. - -\subsubsection{Plotting} -The commands plot rows and columns of images. There are also commands -that perform FFT and IFFT transformations prior to plotting. To select -the row or column to plot or compare, click the mouse button over the +\subsection{Analyze - Plot} +The commands plot rows and columns of images. There are commands +that perform FFT transformations prior to plotting. To select +the row or column to plot, click the left mouse button over the desired cursor point. -The available commands are: +The available plot commands are: \begin{itemize}\itemsep=0pt \item Plot Row \item Plot Column @@ -397,27 +431,22 @@ The available commands are: \item Plot FFT Col \end{itemize} -\subsubsection{Image Comparison}\label{IDH_DLG_COMPARISON}\index{Image!Comparison} +\subsection{Analyze - Compare}\label{IDH_DLG_COMPARISON}\index{Image!Comparison} This command performs statistical comparisons between two images. An option also exists for generating a difference image from the two input images. -There are also commands for comparison plotting of rows and columns from two images. -This is quite helpful when comparing a phantom to a reconstruction. - -The three distance measures are: - +The three distance measures reported are: \begin{itemize}\itemsep=0pt -\item[-] \textbf{$d$}\quad The normalized root mean squared distance measure. -\item[-] \textbf{$r$}\quad The normalized mean absolute distance measure. -\item[-] \textbf{$e$}\quad The worst case distance measure over a \latexonly{$2\times2$}\latexignore{\emph{2 x 2}} pixel area. +\item[] \textbf{$d$}\quad The normalized root mean squared distance measure. +\item[] \textbf{$r$}\quad The normalized mean absolute distance measure. +\item[] \textbf{$e$}\quad The worst case distance measure over a \latexonly{$2\times2$}\latexignore{\emph{2 x 2}} pixel area. \end{itemize} -The available commands are: -\begin{itemize}\itemsep=0pt -\item Compare Image -\item Compare Row -\item Compare Column -\end{itemize} +There are also commands for comparison plotting of rows and columns from two images. +This is quite helpful when comparing a phantom to a reconstruction. As with plotting +of rows and columns, click the left mouse button over the desired cursor point to +choose which row and column to plot. + \section{Projection Menus} @@ -485,16 +514,16 @@ using a smoothing filter. In the absence of smooth data, \texttt{linear} gives b is also many times faster than cubic interpolation. \begin{itemize}\itemsep=0pt -\item \texttt{nearest} - No interpolation, selects nearest point -\item \texttt{linear} - Uses fast straight line interpolation -\item \texttt{cubic} - Uses cubic interpolating polynomial +\item \texttt{nearest} - No interpolation, selects nearest point. +\item \texttt{linear} - Uses fast straight line interpolation. +\item \texttt{cubic} - Uses cubic interpolating polynomial. \end{itemize} } \end{twocollist} \textbf{Advanced Options} -These options are only visible if \emph{Advanced Options} has been +These options are visible only if \emph{Advanced Options} has been selected in the \texttt{File - Preferences} dialog. These parameters default to optimal settings and don't need to be adjusted except by expert users. @@ -557,8 +586,8 @@ This command sets the upper and lower limits for the y-axis. \subsubsection{Auto} This command automatically sets the upper and lower limits for the -y-axis. Please refer to the \texttt{View - Auto} documentation for -image files for the details. +y-axis. Please refer to the image file \helpref{\texttt{View - Auto}}{IDH_DLG_AUTOSCALE} +documentation for the details. \subsubsection{Full} The command resets the upper and lower limits of the y-axis to the diff --git a/doc/ctsim-install.tex b/doc/ctsim-install.tex index a51b550..858cf4f 100644 --- a/doc/ctsim-install.tex +++ b/doc/ctsim-install.tex @@ -26,7 +26,7 @@ Download the \ctsim\ RPM file, then use the \texttt{rpm} manager program as follows:\\ -\hspace{1cm}\texttt{rpm -Uvh} \emph{ctsim-*.rpm}\\ +\hspace*{1cm}\texttt{rpm -Uvh} \emph{ctsim-*.rpm}\\ \ctsim\ and \ctsimtext\ will then be installed in the \texttt{/usr/local/bin} directory. The online help file, \texttt{ctsim.hhp}, will be installed in @@ -37,7 +37,10 @@ directory \texttt{/usr/local/man}. Refer to the INSTALL file included in the source distribution for instructions. -\subsection{Optional Libraries}% +\subsection{Optional Libraries} +These libraries are optional and not required to build \ctsim\ from source code. +However, they add functionality to \ctsim\ and there inclusion is recommended. + \begin{itemize} \item \textbf{wxWindows}\\ Used for the platform-independent graphical interface. The graphical version diff --git a/doc/ctsim-textui.tex b/doc/ctsim-textui.tex index 409f580..07e73c3 100644 --- a/doc/ctsim-textui.tex +++ b/doc/ctsim-textui.tex @@ -1,15 +1,15 @@ -\chapter{The Command Line Interface}\label{ctsimtext}\index{ctsimtext} +\chapter{The Command Line Interface}\label{ctsimtext}\index{ctsimtext}\index{Command line interface} \setheader{{\it CHAPTER \thechapter}}{}{}{\ctsimheadtitle}{}{{\it CHAPTER \thechapter}}% \ctsimfooter% -\section{Overview}\index{Command line interface} -\ctsimtext\ is a master shell for all of the command-line tools. The +\ctsimtext\ is the master shell for all of the command-line tools. The command-line tools can perform most of the functions of the graphical -shell. These command-line utilities are especially appropriate for use on +shell. These command-line tools are especially appropriate for use on systems without graphical capability or for batch processing, shell scripting, and parallel processing. -\usage \ctsimtext\ can be invoked via three different +\section{Starting ctsimtext} +\ctsimtext\ can be invoked via three different methods. \begin{enumerate}\itemsep=3pt \item \ctsimtext\ can executed without any parameters. In that case, @@ -31,7 +31,7 @@ be linked to the function names. This is automatically done by the installation program and the \texttt{rpm} manager. Thus, to use \ctsimtext\ with the function name \texttt{pjrec}, the below command can be executed:\\ \hspace*{1.5cm}\texttt{pjrec parameters...} \\ -as a shortcut rather to the equivalent command \\ +as a shortcut to the equivalent command \\ \hspace*{1.5cm}\texttt{ctsimtext pjrec parameters...} \end{enumerate} @@ -86,8 +86,8 @@ real and complex-valued images. \twocolitem{\doublehyphen{divide}}{Divide the two images.} \twocolitem{\doublehyphen{comp}}{Statistically compare the two images. The standard \helpref{three distance measurements}{conceptimagecompare} are reported.} - \twocolitem{\doublehyphen{column-plot n}}{Plot the values of a particular column.} - \twocolitem{\doublehyphen{row-plot n}}{Plot the values of a particular row.} + \twocolitem{\doublehyphen{column-plot n}}{Plot the values of a particular column. The plot file is saved to disk.} + \twocolitem{\doublehyphen{row-plot n}}{Plot the values of a particular row. The plot file is saved to disk.} \end{twocollist} \section{ifexport}\label{ifexport}\index{ifexport}% @@ -170,10 +170,9 @@ Simulates collection of X-rays data (projections) around a phantom object. \twocolitem{\doublehyphen{nray}}{ Number of samples per each detector} -\twocolitem{\doublehyphen{rotangle}}{The rotation angle as a multiple of \latexonly{$\pi$.} -\latexignore{pi.} -For parallel geometries use a rotation angle of \texttt{1} and for equilinear and equiangular -geometries use a rotation angle of \texttt{2}. The default is to use to +\twocolitem{\doublehyphen{rotangle}}{The rotation angle as a fraction of a circle. +For parallel geometries use a rotation angle of \texttt{0.5} and for equilinear and equiangular +geometries use a rotation angle of \texttt{1}. The default is to use to appropriate rotation angle based on the geometry.} \twocolitem{\doublehyphen{view-ratio}}{Sets the field of view as a ratio of the diameter of the phantom. @@ -204,10 +203,11 @@ Generates a raster image file based on a phantom. \end{twocollist} \section{pj2if}\label{pj2if}\index{pj2if}% -Convert a projection file into an imagefile. +Convert a projection file into an image file where each row of the +image file contains the projection data from a single view. \usage -\texttt{pj2if projection-filename image-filename x-size y-size [options...]} +\texttt{pj2if projection-filename image-filename [options...]} \textbf{Options} @@ -247,8 +247,9 @@ Reconstructs the interior of an object from a projection file. \twocolitemruled{\textbf{Parameter}}{\textbf{Options}} \twocolitem{\doublehyphen{filter}}{Selects which filter to apply to each projection. To properly reconstruct an image, this filter should -be consist of the the absolute value of distance from zero -frequency optionally multiplied by a smoothing filter. +consist of the the absolute value of distance from zero +frequency optionally multiplied by a smoothing filter. The optimal +filters to use are: \begin{itemize}\itemsep=0pt \item \texttt{abs\_bandlimit} \item \texttt{abs\_cosine} @@ -294,9 +295,9 @@ using a smoothing filter. In the absence of smooth data, \texttt{linear} gives b is many times faster than cubic interpolation. \begin{itemize}\itemsep=0pt -\item \texttt{nearest} -\item \texttt{linear} -\item \texttt{cubic} +\item \texttt{nearest} - No interpolation, selects nearest point. +\item \texttt{linear} - Uses fast straight line interpolation. +\item \texttt{cubic} - Uses cubic interpolating polynomial. \end{itemize} } diff --git a/doc/ctsim.prj b/doc/ctsim.prj index 17e49f9..bc831ae 100644 --- a/doc/ctsim.prj +++ b/doc/ctsim.prj @@ -5,13 +5,13 @@ 1 ctsim.tex 18 -7 +5 0 ctsim-gui.tex TeX -268447738 0 384 1 411 28 176 176 1253 763 +268447738 0 43 18 43 18 176 176 1253 763 mytitle.sty DATA 5243570 0 9 1 8 22 66 66 1143 653 @@ -24,12 +24,12 @@ TeX ctsim-install.tex TeX 12282 0 34 10 34 66 110 110 1187 697 -ctsim.tex -TeX -134230010 0 95 47 95 47 22 22 1099 609 ctsim-concepts.tex TeX -12282 0 325 71 325 25 110 110 1187 697 +268447738 0 363 20 363 77 110 110 1187 697 +ctsim.tex +TeX +402665466 0 86 36 105 25 22 22 1099 609 ctsim-web.tex TeX 268447739 0 24 50 0 60 88 88 1165 675 diff --git a/doc/ctsim.tex b/doc/ctsim.tex index 0b656ac..41d8cad 100644 --- a/doc/ctsim.tex +++ b/doc/ctsim.tex @@ -25,7 +25,7 @@ \newcommand{\manvernum}[0]{0.6} \newcommand{\manver}[0]{v\manvernum} -\newcommand{\mandate}[0]{February 16, 2001} +\newcommand{\mandate}[0]{February 19, 2001} \newcommand{\ctsimfooter}{\setfooter{\thepage}{}{}{\small Manual \manver}{\small \mandate}{\thepage}} \newcommand{\doublehyphen}[1]{-\,-\texttt{#1}} \newcommand{\ctsimvernum}[0]{3.0.0} @@ -38,7 +38,7 @@ \parindent=0pt% %\backgroundcolour{255;255;255}\textcolour{0;0;0}% Has an effect in HTML only \title{CTSim 3.0 User Manual}% -\author{Kevin Rosenberg, M.D.}% +\author{Kevin M. Rosenberg, M.D.}% \makeindex% \begin{document} @@ -55,7 +55,7 @@ \setheader{{\it COPYRIGHT}}{}{}{\ctsimheadtitle}{}{{\it COPYRIGHT}}% \ctsimfooter -Copyright (c) 1983-2001 Kevin Rosenberg, M.D. +Copyright (c) 1983-2001 Kevin M. Rosenberg, M.D. Permission to use, copy, modify, and distribute this software and its documentation for any purpose is hereby granted without fee, provided that the @@ -66,7 +66,7 @@ THE SOFTWARE IS PROVIDED ``AS-IS'' AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. -IN NO EVENT SHALL KEVIN ROSENBERG BE LIABLE FOR ANY +IN NO EVENT SHALL KEVIN M. ROSENBERG BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY diff --git a/doc/tex2rtf.ini b/doc/tex2rtf.ini index a4d3c6d..2d6e779 100644 --- a/doc/tex2rtf.ini +++ b/doc/tex2rtf.ini @@ -28,3 +28,4 @@ mapFileName = "../src/ctsim-map.h" \] [0]{} \bar [1]{} \toocomplex [1]{} +\quad [0]{} diff --git a/msvc/ctsim/ctsim.plg b/msvc/ctsim/ctsim.plg index f737b38..983ac1b 100644 --- a/msvc/ctsim/ctsim.plg +++ b/msvc/ctsim/ctsim.plg @@ -3,47 +3,46 @@
 

Build Log

---------------------Configuration: ctsim - Win32 Release-------------------- +--------------------Configuration: ctsim - Win32 Debug--------------------

Command Lines

-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP560.tmp" with contents +Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP62.tmp" with contents [ -/nologo /G6 /MT /W3 /GR /GX /O2 /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\include" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c -"C:\ctsim\src\dialogs.cpp" +/nologo /G6 /MTd /W3 /Gm /Gi /GR /GX /Zi /Od /Gy /I "\wx2.2.5\include" /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D VERSION=\"3.0.0beta1\" /D "_DEBUG" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Debug/" /Fp"Debug/ctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c +"C:\ctsim\src\views.cpp" ] -Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP560.tmp" -Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP561.tmp" with contents +Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP62.tmp" +Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP63.tmp" with contents [ -wsock32.lib tiff.lib jpeg.lib png.lib zlib.lib xpm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib htmlhelp.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/ctsim.pdb" /machine:I386 /out:"Release/ctsim.exe" /libpath:"\wx2.2.5\lib" -.\Release\ctsim.obj -.\Release\dialogs.obj -.\Release\dlgprojections.obj -.\Release\dlgreconstruct.obj -.\Release\docs.obj -.\Release\graph3dview.obj -.\Release\views.obj -.\Release\ctsim.res -\ctsim\msvc\libctsim\Release\libctsim.lib -"\fftw-2.1.3\Win32\FFTW2st\Release\FFTW2st.lib" -"\fftw-2.1.3\Win32\RFFTW2st\Release\RFFTW2st.lib" -\wx2.2.5\lib\jpeg.lib -\wx2.2.5\lib\png.lib -\wx2.2.5\lib\wx.lib -\wx2.2.5\lib\xpm.lib -\wx2.2.5\lib\zlib.lib -\wx2.2.5\lib\tiff.lib +winmm.lib rpcrt4.lib ws2_32.lib ../libctsim/Debug/libctsim.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib wxd.lib xpmd.lib tiffd.lib zlibd.lib pngd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib htmlhelp.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"\wx2.2.5\lib" +.\Debug\ctsim.obj +.\Debug\dialogs.obj +.\Debug\dlgprojections.obj +.\Debug\dlgreconstruct.obj +.\Debug\docs.obj +.\Debug\graph3dview.obj +.\Debug\views.obj +.\Debug\ctsim.res +\ctsim\msvc\libctsim\Debug\libctsim.lib +"\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib" +"\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib" +\wx2.2.5\lib\jpegd.lib +\wx2.2.5\lib\pngd.lib +\wx2.2.5\lib\wxd.lib +\wx2.2.5\lib\xpmd.lib +\wx2.2.5\lib\zlibd.lib +\wx2.2.5\lib\tiffd.lib ] -Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP561.tmp" +Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP63.tmp"

Output Window

Compiling... -dialogs.cpp +views.cpp Linking... -LINK : warning LNK4089: all references to "WSOCK32.dll" discarded by /OPT:REF

Results

-ctsim.exe - 0 error(s), 1 warning(s) +ctsim.exe - 0 error(s), 0 warning(s)
diff --git a/src/ctsim-map.h b/src/ctsim-map.h index 7ecb24b..9197d40 100644 --- a/src/ctsim-map.h +++ b/src/ctsim-map.h @@ -1,3 +1,4 @@ +#define IDH_QUICKSTART 8601 #define IDH_INTRODUCTION 8602 #define IDH_DLG_PROJECTIONS 8603 #define IDH_DLG_RASTERIZE 8604 diff --git a/src/ctsim.cpp b/src/ctsim.cpp index 35ab913..4803312 100644 --- a/src/ctsim.cpp +++ b/src/ctsim.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: ctsim.cpp,v 1.79 2001/02/16 02:36:18 kevin Exp $ +** $Id: ctsim.cpp,v 1.80 2001/02/19 20:23:17 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -72,7 +72,7 @@ #endif #endif -static const char* rcsindent = "$Id: ctsim.cpp,v 1.79 2001/02/16 02:36:18 kevin Exp $"; +static const char* rcsindent = "$Id: ctsim.cpp,v 1.80 2001/02/19 20:23:17 kevin Exp $"; struct option CTSimApp::ctsimOptions[] = { @@ -291,6 +291,7 @@ BEGIN_EVENT_TABLE(MainFrame, wxDocParentFrame) EVT_MENU(MAINMENU_FILE_PREFERENCES, MainFrame::OnPreferences) EVT_MENU(MAINMENU_HELP_ABOUT, MainFrame::OnAbout) EVT_MENU(MAINMENU_HELP_CONTENTS, MainFrame::OnHelpContents) +EVT_MENU(IDH_QUICKSTART, MainFrame::OnHelpButton) EVT_BUTTON(IDH_DLG_RASTERIZE, MainFrame::OnHelpButton) EVT_BUTTON(IDH_DLG_PROJECTIONS, MainFrame::OnHelpButton) EVT_BUTTON(IDH_DLG_RECONSTRUCTION, MainFrame::OnHelpButton) @@ -302,6 +303,7 @@ EVT_BUTTON(IDH_DLG_COMPARISON, MainFrame::OnHelpButton) EVT_BUTTON(IDH_DLG_PREFERENCES, MainFrame::OnHelpButton) EVT_BUTTON(IDH_DLG_POLAR, MainFrame::OnHelpButton) EVT_BUTTON(IDH_DLG_AUTOSCALE, MainFrame::OnHelpButton) + EVT_SIZE(MainFrame::OnSize) #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG)) @@ -368,6 +370,7 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxMenu* help_menu = new wxMenu; help_menu->Append (MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG)) help_menu->Append (MAINMENU_HELP_SECONDARY, "&Secondary Help"); #endif diff --git a/src/dialogs.cpp b/src/dialogs.cpp index 9e5cb2d..f25952c 100644 --- a/src/dialogs.cpp +++ b/src/dialogs.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: dialogs.cpp,v 1.35 2001/02/16 22:31:18 kevin Exp $ +** $Id: dialogs.cpp,v 1.36 2001/02/19 20:23:17 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -620,7 +620,7 @@ DialogGetProjectionParameters::DialogGetProjectionParameters std::ostringstream osRotAngle; osRotAngle << dDefaultRotAngle; m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0); - pText2Sizer->Add (new wxStaticText (this, -1, "Rotation Angle (PI units)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); + pText2Sizer->Add (new wxStaticText (this, -1, "Rotation Angle (Fraction of circle)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); pText2Sizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL); } pGridSizer->Add (pText2Sizer); @@ -692,7 +692,7 @@ DialogGetProjectionParameters::getRotAngle () wxString strCtrl = m_pTextCtrlRotAngle->GetValue(); double dValue; if (strCtrl.ToDouble (&dValue)) - return (dValue * PI); + return (dValue * TWOPI); else return (m_dDefaultRotAngle); } else { @@ -700,7 +700,7 @@ DialogGetProjectionParameters::getRotAngle () Scanner::GEOMETRY_PARALLEL) return (PI); else - return (2 * PI); + return (TWOPI); } } @@ -1325,6 +1325,7 @@ DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pPar pTextGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); pTextGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); pTextGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); +#ifdef DEBUG if (iDefaultZeropad >= 0) { std::ostringstream osZeropad; osZeropad << iDefaultZeropad; @@ -1332,7 +1333,8 @@ DialogGetConvertPolarParameters::DialogGetConvertPolarParameters (wxWindow* pPar pTextGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); pTextGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); } - +#endif + pGridSizer->Add (pTextGridSizer, 0, wxALIGN_CENTER | wxALL); pTopSizer->Add (pGridSizer, 1, wxALL | wxALIGN_CENTER, 3); @@ -1387,12 +1389,16 @@ DialogGetConvertPolarParameters::getYSize () unsigned int DialogGetConvertPolarParameters::getZeropad () { +#ifdef DEBUG wxString strCtrl = m_pTextCtrlZeropad->GetValue(); unsigned long lValue; if (strCtrl.ToULong (&lValue)) return lValue; else return (m_iDefaultZeropad); +#else + return 0; +#endif } const char* diff --git a/src/views.cpp b/src/views.cpp index 4fd607d..8721cd4 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: views.cpp,v 1.106 2001/02/16 22:31:18 kevin Exp $ +** $Id: views.cpp,v 1.107 2001/02/19 20:23:17 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -863,14 +863,14 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) filter_menu->Append (IFMENU_FILTER_EXP, "&Exp"); filter_menu->AppendSeparator(); #ifdef HAVE_FFT - filter_menu->Append (IFMENU_FILTER_FFT, "2D &FFT"); - filter_menu->Append (IFMENU_FILTER_IFFT, "2D &IFFT"); + filter_menu->Append (IFMENU_FILTER_FFT, "2-D &FFT"); + filter_menu->Append (IFMENU_FILTER_IFFT, "2-D &IFFT"); filter_menu->Append (IFMENU_FILTER_FFT_ROWS, "FFT Rows"); filter_menu->Append (IFMENU_FILTER_IFFT_ROWS, "IFFT Rows"); filter_menu->Append (IFMENU_FILTER_FFT_COLS, "FFT Columns"); filter_menu->Append (IFMENU_FILTER_IFFT_COLS, "IFFT Columns"); - filter_menu->Append (IFMENU_FILTER_FOURIER, "2D F&ourier"); - filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "2D Inverse Fo&urier"); + filter_menu->Append (IFMENU_FILTER_FOURIER, "2-D F&ourier"); + filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "2-D Inverse Fo&urier"); #else filter_menu->Append (IFMENU_FILTER_FOURIER, "&Fourier"); filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "&Inverse Fourier"); @@ -911,6 +911,7 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -1825,7 +1826,7 @@ PhantomFileView::PhantomFileView() m_iDefaultNView = 320; #endif m_iDefaultNSample = 1; - m_dDefaultRotation = 2; + m_dDefaultRotation = 1; m_dDefaultFocalLength = 2; m_dDefaultViewRatio = 1; m_dDefaultScanRatio = 1; @@ -2083,6 +2084,7 @@ PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -2496,6 +2498,7 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -2815,6 +2818,7 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -3060,6 +3064,7 @@ TextFileView::CreateChildFrame (wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; diff --git a/tools/phm2pj.cpp b/tools/phm2pj.cpp index 507cecf..2d0ba70 100644 --- a/tools/phm2pj.cpp +++ b/tools/phm2pj.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: phm2pj.cpp,v 1.26 2001/02/16 00:28:41 kevin Exp $ +** $Id: phm2pj.cpp,v 1.27 2001/02/19 20:23:17 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -51,7 +51,7 @@ static struct option phm2pj_options[] = {0, 0, 0, 0} }; -static const char* g_szIdStr = "$Id: phm2pj.cpp,v 1.26 2001/02/16 00:28:41 kevin Exp $"; +static const char* g_szIdStr = "$Id: phm2pj.cpp,v 1.27 2001/02/19 20:23:17 kevin Exp $"; void @@ -71,7 +71,7 @@ phm2pj_usage (const char *program) std::cout << " --phmfile Get Phantom from phantom file\n"; std::cout << " --desc Description of raysum\n"; std::cout << " --nray Number of rays per detector (default = 1)\n"; - std::cout << " --rotangle Degrees to rotate view through (multiple of PI)\n"; + std::cout << " --rotangle Angle to rotate view through (fraction of a circle)\n"; std::cout << " (default = select appropriate for geometry)\n"; std::cout << " --geometry Geometry of scanning\n"; std::cout << " parallel Parallel scan beams (default)\n"; @@ -253,9 +253,9 @@ phm2pj_main (int argc, char* const argv[]) if (opt_rotangle < 0) { if (optGeometryName.compare ("parallel") == 0) - opt_rotangle = 1; + opt_rotangle = 0.5; else - opt_rotangle = 2; + opt_rotangle = 1.0; } std::ostringstream desc; @@ -311,7 +311,7 @@ phm2pj_main (int argc, char* const argv[]) phm.createFromPhantom (optPhmName.c_str()); #endif - opt_rotangle *= PI; + opt_rotangle *= TWOPI; Scanner scanner (phm, optGeometryName.c_str(), opt_ndet, opt_nview, opt_nray, opt_rotangle, dOptFocalLength, dOptViewRatio, dOptScanRatio); if (scanner.fail()) { std::cout << "Scanner Creation Error: " << scanner.failMessage() << std::endl; -- 2.34.1