\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
\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.
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.
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
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
\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.
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
-\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
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}
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
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:
\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:
\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
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
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.
\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}
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
\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).
\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,
(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:
\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
\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.
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
\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}
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.
\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
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
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
-\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,
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}
\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}%
\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.
\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}
\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}
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}
}
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
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
\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}
\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}
\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
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
\] [0]{}
\bar [1]{}
\toocomplex [1]{}
+\quad [0]{}
<pre>
<h1>Build Log</h1>
<h3>
---------------------Configuration: ctsim - Win32 Release--------------------
+--------------------Configuration: ctsim - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
-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"
<h3>Output Window</h3>
Compiling...
-dialogs.cpp
+views.cpp
Linking...
-LINK : warning LNK4089: all references to "WSOCK32.dll" discarded by /OPT:REF
<h3>Results</h3>
-ctsim.exe - 0 error(s), 1 warning(s)
+ctsim.exe - 0 error(s), 0 warning(s)
</pre>
</body>
</html>
+#define IDH_QUICKSTART 8601
#define IDH_INTRODUCTION 8602
#define IDH_DLG_PROJECTIONS 8603
#define IDH_DLG_RASTERIZE 8604
** 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
#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[] =
{
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)
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))
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
** 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
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);
wxString strCtrl = m_pTextCtrlRotAngle->GetValue();
double dValue;
if (strCtrl.ToDouble (&dValue))
- return (dValue * PI);
+ return (dValue * TWOPI);
else
return (m_dDefaultRotAngle);
} else {
Scanner::GEOMETRY_PARALLEL)
return (PI);
else
- return (2 * PI);
+ return (TWOPI);
}
}
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;
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);
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*
** 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
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");
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;
m_iDefaultNView = 320;
#endif
m_iDefaultNSample = 1;
- m_dDefaultRotation = 2;
+ m_dDefaultRotation = 1;
m_dDefaultFocalLength = 2;
m_dDefaultViewRatio = 1;
m_dDefaultScanRatio = 1;
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;
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;
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;
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;
** 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
{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
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";
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;
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;