From e5c753200f28fdf5542a48051ad79c7c7dfbb299 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Tue, 13 Feb 2001 17:48:37 +0000 Subject: [PATCH] r535: no message --- doc/ctsim-appendix.tex | 151 ++++++++++++++++------------ doc/ctsim-concepts.tex | 66 ++++++++----- doc/ctsim-gui.tex | 13 ++- doc/ctsim-install.tex | 51 +++++----- doc/ctsim-textui.tex | 216 ++++++++++++++++++++++------------------- doc/ctsim.tex | 5 +- 6 files changed, 286 insertions(+), 216 deletions(-) diff --git a/doc/ctsim-appendix.tex b/doc/ctsim-appendix.tex index 9c97a7f..86305a5 100644 --- a/doc/ctsim-appendix.tex +++ b/doc/ctsim-appendix.tex @@ -1,93 +1,116 @@ -\chapter{Appendix}\label{appendix}\index{Appendix}% -\setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}% +\appendix + +\chapter{Simple Graphics Package}\label{appendix}\index{Appendix}% +\setheader{{\it Appendix \thechapter}}{}{}{}{}{{\it Appendix \thechapter}}% \ctsimfooter% -\section{Simple Graphics Package}\index{Simple Graphics Package}% -\subsection{Overview}% Simple Graphics Package was created in 1980 by Kevin Rosenberg and is modelled after the graphics library in Foley and van -Dam\cite{FOLEY82}. - -\begin{verbatim} - +------------------------+ - | World Coordinate level | - +-----------+------------+ - | - +-------------+-------------+ - | Clipping against Window() | - +-------------+-------------+ - | - +------------+-------------+ - | Convert to Normalized | - | device coordinates (NDC) | - +------------+-------------+ - | - +-------------+-------------+ - | Clipping against Viewport | - +-------------+-------------+ - | - +------------+-------------+ - | Convert to Physical | - | device coordinates (PDC) | - +--------------------------+ -\end{verbatim} - -\subsection{Functions}% - -\subsubsection{World Coordinate Level} +Dam\cite{FOLEY82}. It is designed to be platform-independent. + +\section{Flowchart} +Master coordinate (MC) level \\ +$\hspace{3cm} \downarrow$ \\ +Apply \emph{Current transformation matrix} \\ +$\hspace{3cm} \downarrow$ \\ +World coordinate (WC) level \\ +$\hspace{4cm} \downarrow$ \\ +Clipping against Window \\ +$\hspace{3cm} \downarrow$ \\ +Convert to Normalized device coordinates (NDC) \\ +$\hspace{3cm} \downarrow$ \\ +Clipping against Viewport \\ +$\hspace{3cm} \downarrow$ \\ +Convert to Physical device coordinates (PDC) \\ + + +\section{Functions}% + +\subsection{State functions} \begin{twocollist} -\twocolitem{initgrf2}{Initialize 2 dimensional graphics} -\twocolitem{termgrf2}{Terminate 2 dimensional graphics} -\twocolitem{setColor(color)}{Set current drawing color} -\twocolitem{setLinestyle (style)}{Set current line style} -\twocolitem{setLinewidth (width)}{Set current line width} -\twocolitem{setTextColor (foreground, background)}{If back=-1, -then transparent} \twocolitem{setMarker (type, color)}{Set marker -attibutes} +\twocolitem{\texttt{eraseWindow()}}{Clears the screen} +\twocolitem{\texttt{setColor(color)}}{Set current pen color} +\twocolitem{\texttt{setLinestyle(style)}}{Set current pen style} +\twocolitem{\texttt{setLinewidth(width)}}{Set current pen width} +\twocolitem{\texttt{setTextColor(foreground, background)}}{Set text colors} +\twocolitem{\texttt{setMarker(type, color)}}{Set marker attibutes} +\twocolitem{\texttt{setRasterOp(rasterOp)}}{Set raster operator} \end{twocollist} -\subsubsection{State Commands} + +\subsection{Master coordinate functions} \begin{twocollist} -\twocolitem{Window(xmin, ymin, xmax, ymax)}{Set window for world -coordinates} \twocolitem{MoveAbs(x, y)}{Move graphics cursor} -\twocolitem{MoveRel(dx, dy)}{} \twocolitem{PointAbs (x, y)}{Plot -point at current position} \twocolitem{PointRel (dx, dy)}{} -\twocolitem{LineAbs2 (x, y)}{Draw line from current point to -point} \twocolitem{LineRel2 (dx, dy)}{} \twocolitem{MarkerAbs2 (x, -y)}{Draw marker at current position} \twocolitem{MarkerRel2 (dx, -dy)}{} \twocolitem{PolylineAbs (x[], y[], n)}{Draw a set of lines} -\twocolitem{PolylineRel (dx[], dy[], n)}{} -\twocolitem{wc\_to\_ndc(xwc, ywc, xndc, yndc)}{Convert from world -coord to NDC} \twocolitem{ndc\_to\_wc(xndc, yndc, xwc, -ywc)}{Convert from NDC to world coord} \twocolitem{DrawText -(str)}{Draw text string at current positon} +\twocolitem{setWindow(xmin, ymin, xmax, ymax)}{Set window for world +coordinates} +\twocolitem{\texttt{moveAbs(x, y)}}{Move graphics cursor to absolute position} +\twocolitem{\texttt{moveRel(dx, dy)}}{Move graphics cursor relative to current position} +\twocolitem{\texttt{pointAbs(x, y)}}{Draw point at current position} +\twocolitem{\texttt{pointRel(dx, dy)}}{Draw point relative to current position} +\twocolitem{\texttt{lineAbs(x, y)}}{Draw line from current position to +absolute position} +\twocolitem{\texttt{lineRel(dx, dy)}}{Draw line from current position to position +relative to current position} +\twocolitem{\texttt{markerAbs(x,y)}}{Draw marker at current position} +\twocolitem{\texttt{markerRel(dx,dy)}}{Draw marker relative to current position} +\twocolitem{\texttt{polylineAbs(x[], y[], n)}}{Draw a series of lines to absolute position} +\twocolitem{\texttt{polylineRel(dx[], dy[], n)}}{Draw series of lines relative to current position} +\twocolitem{\texttt{drawString(str)}}{Draw text string at current positon} +\twocolitem{\texttt{drawCircle(r}}{Draw circle at current positon} +\twocolitem{\texttt{drawArc(r,start,stop)}}{Draw arc with center at current positon} +\twocolitem{\texttt{drawRect(xmin,ymin,xmax,ymax)}}{Draw rectangle} \end{twocollist} - -\subsubsection{Normalized Coordinate level}% +\subsection{Normalized coordinate functions}% \begin{twocollist} -\twocolitem{Viewport (xmin, ymin, xmax, ymax)}{Viewport for window -in NDC} \twocolitem{stylus (x, y, beam)}{Draw a line from current -position} \twocolitem{markerNDC(xndc, yndc)}{Draw marker at NDC +\twocolitem{\texttt{Viewport(xmin, ymin, xmax, ymax)}}{Viewport for window +in NDC} +\twocolitem{\texttt{stylus(x, y, beam)}}{Draw a line from current position} +\twocolitem{\texttt{markerNDC(xndc, yndc)}}{Draw marker at NDC position} \end{twocollist} +\subsection{Master coordinate to World coordinate transformations}% +These transformation functions operate on the \emph{Current transformation +matrix} (CTM). -\subsection{Coordinate Mapping} +\begin{twocollist} +\twocolitem{\texttt{clearCTM()}}{Sets the CTM to an identity matrix} +\twocolitem{\texttt{preTranslate(x,y)}}{Apply translation to CTM} +\twocolitem{\texttt{postTranslate(x,y)}}{Apply translation to CTM} +\twocolitem{\texttt{preScale(x,y)}}{Apply scale to CTM} +\twocolitem{\texttt{postScale(x,y)}}{Apply scale to CTM} +\twocolitem{\texttt{preRotate(angle)}}{Apply rotation to CTM} +\twocolitem{\texttt{postRotate(angle)}}{Apply rotation to CTM} +\twocolitem{\texttt{preShear(x,y)}}{Apply shear to CTM} +\twocolitem{\texttt{postShear(x,y)}}{Apply shear to CTM} +\end{twocollist} + +\subsection{Coordinate transformation functions}% +\begin{twocollist} +\twocolitem{\texttt{transformMCtoNDC(\&x,\&y)}}{Convert from master +coordinates to NDC} +\twocolitem{\texttt{transformNDCtoMC(\&x,\&y)}}{Convert from NDC to master +coordinates} +\end{twocollist} -\subsubsection{Mapping from world coordinates to physical device coordinates}% +\section{Coordinate Mapping} +\subsection{Dimensions} Window (World Coordinates): $X_{wmin}, X_{wmax}, Y_{wmin}, Y_{wmax}$ \\ Viewport (Normalized Device Coordinates): $X_{vmin}, X_{vmax}, Y_{vmin}, Y_{vmax}$\\ Physical (Physicial Device Coordinates): $X_{pmax}, Y_{pmax}$\\ +\subsection{Formulas} +To convert from Master coordinates to World coordinates: \\ +Apply current transformation matrix + To convert from WC to NDC:\\ \begin{equation} - X_{ndc} = X_{vmin} + (X_{vmax} - X_{vmin}) (X_{wc} - X_{wmin}) / (X_{wmax} - X_{wmin}) +X_{ndc} = X_{vmin} + (X_{vmax} - X_{vmin}) (X_{wc} - X_{wmin}) / (X_{wmax} - X_{wmin}) \end{equation} \begin{equation} - Y_{ndc} = Y_{vmin} + (Y_{vmax} - Y_{vmin}) (Y_{wc} - Y_{wmin}) / (Y_{wmax} - Y_{wmin}) +Y_{ndc} = Y_{vmin} + (Y_{vmax} - Y_{vmin}) (Y_{wc} - Y_{wmin}) / (Y_{wmax} - Y_{wmin}) \end{equation} To convert from NDC to PDC: diff --git a/doc/ctsim-concepts.tex b/doc/ctsim-concepts.tex index 21f94dd..3f0dab0 100644 --- a/doc/ctsim-concepts.tex +++ b/doc/ctsim-concepts.tex @@ -122,22 +122,21 @@ ratios rather than absolute values. \subsubsection{Phantom Diameter} \begin{figure} $$\image{5cm;0cm}{scangeometry.eps}$$ -\caption{Phantom Geometry} +\caption{\label{phantomgeomfig} Phantom Geometry} \end{figure} -The phantom diameter is automatically calculated by \ctsim\ from the -phantom definition. The maximum of the phantom length and height is -used to define the square that completely surrounds the phantom. Let -\latexonly{$p_l$}\latexignore{\emph{Pl}} -be the width and height of this square. The diameter of this boundary box, -\latexonly{$p_d$,}\latexignore{\emph{Pd},} -\rtfsp is then -\latexignore{\\$$\emph{Pl x sqrt(2)}$$\\} -\latexonly{$$p_d = p_l \sqrt{2}$$} -CT scanners actually collect projections around a circle rather than a -square. The diameter of this circle is also the diameter of the boundary -square -\latexonly{$p_d$.}\latexignore{\rtfsp\emph{Pd}.} -These relationships are diagrammed in figure 2.1. +The phantom diameter is automatically calculated by \ctsim\ from +the phantom definition. The maximum of the phantom length and +height is used to define the square that completely surrounds the +phantom. Let \latexonly{$p_l$}\latexignore{\emph{Pl}} be the width +and height of this square. The diameter of this boundary box, +\latexonly{$p_d$,}\latexignore{\emph{Pd},} \rtfsp is then +\latexignore{\\$$\emph{Pl x sqrt(2)}$$\\} \latexonly{$$p_d = p_l +\sqrt{2}$$} CT scanners actually collect projections around a +circle rather than a square. The diameter of this circle is also +the diameter of the boundary square +\latexonly{$p_d$. These +relationships are diagrammed in figure~\ref{phantomgeomfig}.} +\latexignore{emph{Pd}.} \subsubsection{View Diameter} The \emph{view diameter} is the area that is being processed @@ -211,10 +210,10 @@ the x-ray beams diverge from a single source to a detector array. In the equilinear mode, a single source produces a fan beam which is read by a linear array of detectors. If the detectors occupy an arc of a circle, then the geometry is equiangular. -See figure 2.2. +\latexonly{See figure~\ref{divergentfig}.} \begin{figure} \image{10cm;0cm}{divergent.eps} -\caption{Equilinear and equiangular geometries.} +\caption{\label{divergentfig} Equilinear and equiangular geometries.} \end{figure} @@ -226,10 +225,11 @@ at the time of manufacture. \ctsim, however, calculates the the \emph{focal length} \latexignore{\\$$\emph{alpha = 2 x asin ( (Sd / 2) / f)}$$\\} \latexonly{\begin{equation}\label{alphacalc}\alpha = 2 \sin^{-1} -((s_d / 2) / f)\end{equation}} This is illustrated in figure 2.3. +((s_d / 2) / f)\end{equation} + This is illustrated in figure~\ref{alphacalcfig}.} \begin{figure} \image{10cm;0cm}{alphacalc.eps} -\caption{Calculation of $\alpha$} +\caption{\label{alphacalcfig} Calculation of $\alpha$} \end{figure} @@ -276,10 +276,11 @@ For equiangular geometry, the detectors are spaced around a circle covering an angular distance of \latexonly{$2\,\alpha$.}\latexignore{\emph{2 \alpha}.} The dotted circle in -\begin{figure}\label{equiangularfig} -\image{10cm;0cm}{equiangular.eps} \caption{Equiangular geometry} +\begin{figure} +\image{10cm;0cm}{equiangular.eps} +\caption{\label{equiangularfig}Equiangular geometry} \end{figure} -figure 2.4 indicates the positions of the detectors in this case. +figure~\ref{equiangularfig} indicates the positions of the detectors in this case. For equilinear geometry, the detectors are space along a straight line. The length of the line depends upon @@ -288,9 +289,9 @@ length}. It is calculated as \latexonly{$4\,f \tan (\alpha / 2)$} \latexignore{\emph{4 x F x tan(\alpha/2)}} \begin{figure}\label{equilinearfig} \image{10cm;0cm}{equilinear.eps} -\caption{Equilinear geometry} +\caption{\label{equilinearfig} Equilinear geometry} \end{figure} -This geometry is shown in figure~2.5. +\latexonly{This geometry is shown in figure~\ref{equilinearfig}.} \subsubsection{Examples of Geometry Settings} @@ -336,3 +337,20 @@ multiple filters for this purpose. Backprojection is the process of ``smearing'' the filtered projections over the reconstructing image. Various levels of interpolation can be specified. + +\section{Image Comparison} +Images can be compared statistically. Three measurements can be calculated +by \ctsim. They are taken from the standard measurements used by +Herman\cite{HERMAN80}. +$d$ is the standard error, $e$ is the maximum error, and +$r$ is the maximum error of a 2 by 2 pixel area. + +To compare two images, $A$ and $B$, each of which has $n$ columns and $m$ rows, +these values are calculated as below. + +\begin{equation} +d = \frac{\sum_{i=0}^{n}{\sum_{j=0}^{m}{(A_{ij} - B_{ij})^2}}}{m n} +\end{equation} +\begin{equation} +r = max(|A_{ij} - B{ij}|) +\end{equation} diff --git a/doc/ctsim-gui.tex b/doc/ctsim-gui.tex index a790baa..d54bfeb 100644 --- a/doc/ctsim-gui.tex +++ b/doc/ctsim-gui.tex @@ -398,11 +398,22 @@ frequency-based filtering. A setting of \texttt{1} is optimal.} \section{Plot Menus} \subsection{File - Properties} -The displayed properties include +The displayed properties include the number of curves in the plot +and the number of points per curve. Additionally, the EZPlot +commands used to format the plot are displayed. \subsection{View Menu} These commands set the scaling for the y-axis. They are analogous to the options used for setting the intensity scale for images. + \subsubsection{Set} +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. + \subsubsection{Full} +The command resets the upper and lower limits of the y-axis to the +minimum and maximum values of the curves. diff --git a/doc/ctsim-install.tex b/doc/ctsim-install.tex index 7e5598f..c697bf4 100644 --- a/doc/ctsim-install.tex +++ b/doc/ctsim-install.tex @@ -4,16 +4,15 @@ \section{Download}\label{download}\index{Installation,Download}% -The latest version of \ctsim, plus source code, can be accessed from: +The latest version of \ctsim, both executable programs and source code, + can be downloaded from the official + \ctsim\ \urlref{web site}{http://www.ctsim.org}. Additionally, these + files are also available from the \urlref{FTP site}{ftp://ftp.ctsim.org}. -\begin{verbatim} -http://www.ctsim.org -ftp://ftp.ctsim.org -\end{verbatim} \section{Installing Windows Binary}\index{Installation,Windows}% -Download the Windows executable file as helprefn{shown}{download}. +Download the Windows executable file. Simply execute this program to unpack \ctsim\ and begin the installation program. \ctsim\ will then be accessible from the \texttt{Start} Menu under the \texttt{Programs} submenu. @@ -27,37 +26,41 @@ Download the RPM file from as \helprefn{shown}{download}. Then use the \texttt{rpm} manager program:\\ \hspace{1cm}\texttt{rpm -Uvh} \emph{ctsim-*.rpm}\\ -\ctsim will then be installed in the \texttt{/usr/local/bin} -directory. +\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 +directory \texttt{/usr/local/man}. \section{Build From Sources}\label{build}\index{Installation,Build}% Refer to the INSTALL file included in the source distribution for instructions. -\subsection{Optional Libraries When Building For Source}% +\subsection{Optional Libraries}% \begin{itemize} - \item zlib Library\\ - Used for PNG file export. + \item \textbf{wxWindows}\\ + Used for platform-independent graphical interface. The graphical version + of \ctsim\ requires this library.\\ + \urlref{Web site}{http://www.wxwindows.org} - \item libpng Library)\\ - Used for PNG file export.\\ - www.libpng.org + \item \textbf{FFTW}\\ + Used for fast frequency-based filtering and fourier transformations of images. + Without this library \ctsim\ will use slower, traditional Fourier transformations.\\ + \urlref{Web site}{http://www.fftw.org} - \item FFTW library)\\ - Used for frequency-based filtering and fourier transformations of images.\\ - www.fftw.org + \item \textbf{libpng}\\ + Used for PNG file export.\\ + \urlref{Web site}{http://www.libpng.org/pub/png/libpng.html} - \item readline library\\ - Used for \ctsimtext\ interactive shell. + \item \textbf{zlib}\\ + Used for PNG file export.\\ + \urlref{Web site}{http://www.info-zip.org/pub/infozip/zlib/zlib_docs.html} - \item wxWindows library\\ - Used for platform-independent graphical interface. The graphical-shell - program \ctsim\ requires this library.\\ - www.wxwindows.org + \item \textbf{readline}\\ + Used for \ctsimtext\ interactive shell.\\ + \urlref{Web site}{http://www.gnu.org} \item dmalloc library\\ Used for debugging memory allocation\\ - www.dmalloc.com + \urlref{Web site}{http://www.dmalloc.com} \end{itemize} diff --git a/doc/ctsim-textui.tex b/doc/ctsim-textui.tex index ea452b8..0c123cc 100644 --- a/doc/ctsim-textui.tex +++ b/doc/ctsim-textui.tex @@ -6,7 +6,7 @@ \usage \ctsimtext\ can be invoked via three different methods. -\begin{itemize}\itemsep=0pt +\begin{enumerate}\itemsep=3pt \item \ctsimtext\ can executed without any parameters. In that case, \ctsimtext\ offers a command-line to enter the function-names and their parameters. The output of the command is displayed. Further @@ -23,65 +23,79 @@ files (such as UNIX and Linux), the executable file \ctsimtext\ can be linked to the function names. This is automatically done by the installation file for Linux. Thus, to use \ctsimtext\ with the function name \texttt{pjrec}, the below command can be executed:\\ -\texttt{pjrec parameters...} +\texttt{pjrec parameters...} \\ +as a shortcut rather than the equivalent command \\ +\texttt{ctsimtext pjrec parameters...} + +\end{enumerate} + +\section{Parallel Processing With a Computer Cluster} +\ctsimtext\ can be used to spread it's processing over a cluster. Specifically, +\ctsimtext\ supports the \urlref{LAM}{http://www.mpi.nd.edu/lam} version of +the MPI environment. On platforms with LAM installed, a parallel version of +\ctsimtext\ is created. The name of this program is \texttt{ctsimtext-lam}. +The functions that take advantage of the parallel processing are +\texttt{phm2if}, \texttt{phm2pj}, \texttt{pjrec}. + +This parallel processing version has been tested with excellent results on +a 16-CPU \urlref{Beowulf}{http://www.beowulf.org} cluster. -\end{itemize} \section{if1}\label{if1}\index{ctsimtext,if1}% -Perfoms math functions on a single image. +Performs math functions on a single image. \usage \begin{itemize}\itemsep=0pt - \item -\,-invert - \item -\,-log - \item -\,-exp - \item -\,-sqr - \item -\,-sqrt + \item \doublehyphen{invert} + \item \doublehyphen{log} + \item \doublehyphen{exp} + \item \doublehyphen{sqr} + \item \doublehyphen{sqrt} \end{itemize} \section{if2}\label{if2}\index{ctsimtext,if2}% -Perfoms math functions on a two images. +Performs math functions on a two images. \usage \begin{itemize}\itemsep=0pt - \item -\,-add - \item -\,-sub - \item -\,-mul - \item -\,-comp - \item -\,-column-plot - \item -\,-row-plot + \item \doublehyphen{add} + \item \doublehyphen{sub} + \item \doublehyphen{mul} + \item \doublehyphen{comp} + \item \doublehyphen{column-plot} + \item \doublehyphen{row-plot} \end{itemize} \section{ifexport}\label{ifexport}\index{ctsimtext,ifexport}% -Export an imagefile to a standard graphics file. +Export an image file to a standard graphics file. \usage \begin{itemize}\itemsep=0pt - \item --format + \item \doublehyphen{format} \begin{itemize}\itemsep=0pt - \item -\,-pgm - \item -\,-pgmasc - \item -\,-png - \item -\,-png16 + \item \texttt{gm} + \item \texttt{pgmasc} + \item \texttt{png} + \item \texttt{png16} \end{itemize} - \item -\,-center + \item \doublehyphen{center} \begin{itemize}\itemsep=0pt - \item median - \item mode - \item mean + \item \texttt{median} + \item \texttt{mode} + \item \texttt{mean} \end{itemize} - \item -\,-auto + \item \doublehyphen{auto} \begin{itemize}\itemsep=0pt - \item -\,-full - \item -\,-std0.1 - \item -\,-std0.5 - \item -\,-std1 - \item -\,-std2 - \item -\,-std3 + \item \texttt{full} + \item \texttt{std0.1} + \item \texttt{std0.5} + \item \texttt{std1} + \item \texttt{std2} + \item \texttt{std3} \end{itemize} - \item -\,-scale - \item -\,-min - \item -\,-max + \item \doublehyphen{scale} + \item \doublehyphen{min} + \item \doublehyphen{max} \end{itemize} \section{ifinfo}\label{ifinfo}\index{ctsimtext,ifinfo}% @@ -90,60 +104,55 @@ Displays information about an imagefile. \usage \begin{itemize}\itemsep=0pt - \item -\,-labels - \item -\,-no-labels - \item -\,-stats - \item -\,-no-stats - \item -\,-help + \item \doublehyphen{labels} + \item \doublehyphen{no-labels} + \item \doublehyphen{stats} + \item \doublehyphen{no-stats} + \item \doublehyphen{help} \end{itemize} \section{phm2pj}\label{phm2pj}\index{ctsimtext,phm2pj}% Simulates collection of X-rays data (projections) around a phantom object. \usage -phm2pj projection-file-name number-of-detectors number-of-views [options...] -\begin{itemize}\itemsep=0pt - \item -\,-phantom - Select a standard phantom - \begin{itemize}\itemsep=0pt - \item herman - \item shepp-logan - \item unit-pulse - \end{itemize} +\texttt{phm2pj projection-file-name number-of-detectors number-of-views [options...]} - \item -\,-phmfile - Load a phantom definition definition +\begin{twocollist} +\twocolitem{\doublehyphen{phantom}}{Select a standard phantom. +\begin{itemize}\itemsep=0pt +\item \texttt{herman} +\item \texttt{shepp-logan} +\item \texttt{unit-pulse} +\end{itemize} +} +\twocolitem{\doublehyphen{phmfile}}{Load a phantom definition definition} - \item -\,-geometry +\twocolitem{\doublehyphen{geometry}}{ \begin{itemize}\itemsep=0pt - \item parallel - \item equiangular - \item equilinear + \item \texttt{parallel} + \item \texttt{equiangular} + \item \texttt{equilinear} \end{itemize} +} - \item -\,-nray - Number of samples per each detector +\twocolitem{\doublehyphen{nray}}{ Number of samples per each detector} - \item -\,-rotangle - Sets the rotation amount as a multiple of pi. For parallel geometries use -a rotation angle of 1 and for equilinear and equiangular -geometries use a rotation angle of 2. The default is to use to -appropriate rotation angle based on the geometry. +\twocolitem{\doublehyphen{rotangle}}{Sets the rotation amount as a multiple of 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 +appropriate rotation angle based on the geometry.} - \item -\,-view-ratio - Sets the field of view as a ratio of the diameter of the phantom. - For normal scanning, a value of 1.0 is fine. +\twocolitem{\doublehyphen{view-ratio}}{Sets the field of view as a ratio of the diameter of the phantom. + For normal scanning, a default value of \texttt{1.0} is optimal.} - \item -\,-scan-ratio - Sets the length of scanning as a ratio of the view diameter. - For normal scanning, a value of 1.0 is fine. +\twocolitem{\doublehyphen{scan-ratio}}{Sets the length of scanning as a ratio of the view diameter. + For normal scanning, a value of \texttt{1.0} is optimal.} - \item -\,-focal-length - Sets the distance of the radiation source and detectors from the center of the object as a ratio of the radius of the object. - For parallel geometries, a value of 1.0 is fine. For other geometries, this should be at least 2.0 to avoid artifacts. -\end{itemize} +\twocolitem{\doublehyphen{focal-length}}{Sets the distance of the radiation source and detectors from the center of the object as a ratio of the radius of the object. + For parallel geometries, a value of \texttt{1.0} is optimal. For other + geometries, this should be at least \texttt{2.0} to avoid artifacts.} +\end{twocollist} -The Herman phantom is taken with permission from Gabor Hermans 1980 book\cite{HERMAN80}. The Shepp-Logan phantom was published in 1974\cite{SHEPP74}. \section{phm2if}\label{phm2if}\index{ctsimtext,phm2if}% Converts a geometric phantom object into an imagefile. The size of the @@ -151,29 +160,32 @@ imagefile in pixels must be specified as well as the number of samples to average per pixel. \usage -\begin{itemize}\itemsep=0pt - \item -\,-nsamples - \item -\,-view-ratio -\end{itemize} +\begin{twocollist} + \twocolitem{\doublehyphen{nsamples}}{Number of samples in x \& y directions per pixel} + \twocolitem{\doublehyphen{view-ratio}}{Sets the view ration. For normal scanning, + the default value of \texttt{1.0} is optimal.} +\end{twocollist} \section{pj2if}\label{pj2if}\index{ctsimtext,pj2if}% Convert a projection file into an imagefile. \usage -\begin{itemize}\itemsep=0pt -\item -\,-help Print brief online help -\end{itemize} +\texttt{pj2if projection-file-name image-file-name x-size ysize [options...]} + +\begin{twocollist} +\twocolitem{\doublehyphen{help}}{Print brief online help} +\end{twocollist} \section{pjinfo}\label{pjinfo}\index{ctsimtext,pjinfo}% Displays information about a projection file. \usage \begin{itemize}\itemsep=0pt - \item -\,-binaryheader - \item -\,-binaryview - \item -\,-startview - \item -\,-endview - \item -\,-dump + \item \doublehyphen{binaryheader} + \item \doublehyphen{binaryview} + \item \doublehyphen{startview} + \item \doublehyphen{endview} + \item \doublehyphen{dump} \end{itemize} \section{pjrec}\label{pjrec}\index{ctsimtext,pjrec}% @@ -181,33 +193,35 @@ Reconstructs the interior of an object from a projection file. \begin{twocollist} \twocolitemruled{\textbf{Parameter}}{\textbf{Options}} -\twocolitem{\textbf{-\,-filter}}{Selects which filter to apply to +\twocolitem{\doublehyphen{filter}}{Selects which filter to apply to each projection. To properly reconstruct an image, this filter should be multiplied by the absolute value of distance from zero frequency. \begin{itemize}\itemsep=0pt -\item abs\_bandlimit -\item abs\_cosine -\item abs\_hamming +\item \texttt{abs\_bandlimit} +\item \texttt{abs\_cosine} +\item \texttt{abs\_hamming} \end{itemize} -} \twocolitem{\textbf{-\,-filter-parameter}}{Sets the alpha level -for Hamming - window. At setting of 0.54, this equals the Hanning window.} +} \twocolitem{\doublehyphen{filter-parameter}}{Sets the alpha level +for Hamming window. At setting of \texttt{0.54}, this equals +the Hanning window.} -\twocolitem{\textbf{-\,-filter-method}}{Selects the filtering +\twocolitem{\doublehyphen{filter-method}}{Selects the filtering method. For large numbers of detectors, \texttt{rfftw} is optimal. For smaller numbers of detectors, \texttt{convolution} might be a bit faster. \begin{itemize}\itemsep=0pt -\item convolution -\item fourier -\item fourier\_table +\item \texttt{convolution} +\item \texttt{fourier} +\item \texttt{fourier-table} +\item \texttt{fftw} +\item \texttt{rfftw} \item fftw \item rfftw \end{itemize} } -\twocolitem{\textbf{-\,-filter-generation}}{Selects the filter +\twocolitem{\doublehyphen{filter-generation}}{Selects the filter generation. With convolution, \texttt{direct} is the proper method to select. With any of the frequency methods, \texttt{inverse-fourier} is the best method. @@ -217,7 +231,7 @@ to select. With any of the frequency methods, \end{itemize} } -\twocolitem{\textbf{-\,-interpolation}}{Interpolation technique. +\twocolitem{\doublehyphen{interpolation}}{Interpolation technique. \texttt{linear} is optimal. \begin{itemize}\itemsep=0pt \item nearest @@ -226,7 +240,7 @@ to select. With any of the frequency methods, \end{itemize} } -\twocolitem{\textbf{-\,-backprojection}}{Selects the +\twocolitem{\doublehyphen{backprojection}}{Selects the backprojection technique. A setting of \texttt{idiff} is optimal. \begin{itemize}\itemsep=0pt \item trig @@ -236,7 +250,7 @@ backprojection technique. A setting of \texttt{idiff} is optimal. \end{itemize} } -\twocolitem{\textbf{-\,-zeropad}}{Zeropad factor. A setting of +\twocolitem{\doublehyphen{zeropad}}{Zeropad factor. A setting of \texttt{1} is optimal.} \end{twocollist} diff --git a/doc/ctsim.tex b/doc/ctsim.tex index 5a5f7c7..75672f7 100644 --- a/doc/ctsim.tex +++ b/doc/ctsim.tex @@ -1,4 +1,4 @@ -\documentclass[letter,12pt]{report}% +\documentclass[letterpaper,12pt]{report}% \usepackage{graphicx} \usepackage{texhelp} \usepackage{fancyhea} @@ -23,10 +23,11 @@ \newcommand{\indexit}[1]{#1\index{#1}}% \newcommand{\inioption}[1]{{\bf {\tt #1}}\index{#1}}% -\newcommand{\manvernum}[0]{0.21} +\newcommand{\manvernum}[0]{0.3} \newcommand{\manver}[0]{v\manvernum} \newcommand{\mandate}[0]{February 12, 2001} \newcommand{\ctsimfooter}{\setfooter{\thepage}{}{}{\small Manual \manver}{\small \mandate}{\thepage}} +\newcommand{\doublehyphen}[1]{-\,-\texttt{#1}} \latexignore{\newcommand{\sqrt}[2]{sqrt(#2)}} -- 2.34.1