New Features:
- -- ctsim: Added tips to be displayed at startup and via the help menu.
- -- ctsim: Added center-detector concept. Allow for detector array
+ * ctsim: Added tips to be displayed at startup and via the help menu.
+ * ctsim: Added center-detector concept. Allow for detector array
to be any arbitrary distance from center of scanner. As a result,
projection files are not incompatible with previous version of
CTSim.
- -- ctsim: Added background and SMP processing for reconstructions,
- scanning, and rasterization.
- -- ctsim: Added generic threaded tasks and background manager for
+ * ctsim: Added threaded tasks and background manager for
background processing as well as taking advantage of multiple-CPU's
- on SMP systems.
- -- ctsim: Added plot t-theta sampling to projection file menu.
- -- ctsim: Added Reconstruction with Rebinning for faster
+ on SMP systems. (Microsoft Windows only)
+ * ctsim: Added plot t-theta sampling to projection file menu.
+ * ctsim: Added Reconstruction with Rebinning for faster
divergent beam reconstructions.
- -- ctsim: Added import and export of DICOM image files.
- -- ctsim: Added PPM, PGM, and PNG file import to imagefile.
- -- ctsim: Added FFT/IFFT of columns of image files.
- -- ctsim: Added clipboard cut/copy/paste for image files.
- -- ctsim: Added region of interest to reconstructions.
- -- ctsim: Added Convert Rectangular Image to Projection files
- -- ctsim: Added "Verbose Logging", "Startup Tips", and
+ * ctsim: Added import and export of DICOM image files.
+ * ctsim: Added PPM, PGM, and PNG file import to imagefile.
+ * ctsim: Added FFT/IFFT of columns of image files.
+ * ctsim: Added clipboard cut/copy/paste for image files.
+ * ctsim: Added region of interest to reconstructions.
+ * ctsim: Added Convert Rectangular Image to Projection files
+ * ctsim: Added "Verbose Logging", "Startup Tips", and
"Background processes" options to Preferences dialog.
- -- ctsim: Added plotting of projection file histograms.
- -- plotfile: Added scattergram plot functions
- -- ctsim: Added accelerator key for File-Properties
- -- ctsim: Improved wireframe 3-d display to remove hidden
+ * ctsim: Added plotting of projection file histograms.
+ * plotfile: Added scattergram plot functions
+ * ctsim: Added accelerator key for File-Properties
+ * ctsim: Improved wireframe 3-d display to remove hidden
surfaces.
- -- backprojectors.cpp: Added setting of axis extent and increment
+ * backprojectors.cpp: Added setting of axis extent and increment
to reconstructions.
+ * projections.cpp: Can read and reconstruct SIEMENS AR.STAR DICOM
+ projection data files.
Bug Fixes:
- -- views.cpp: Added out-of-memory checks to display for huge
+
+ * views.cpp,ctsim.cpp: Fixed bug with window frames sometimes
+ not being displayed on Unix platforms.
+ * views.cpp: Added out-of-memory checks to display for huge
image and projection files.
- -- filter.cpp: Fixed Hanning parameter to be 0.5 rather than 0.54
- -- imagefile.cpp: Fixed scaling factor in fftRows
- -- imagefile.cpp: Fixed bug when performing magnitude() on real-valued
+ * filter.cpp: Fixed Hanning parameter to be 0.5 rather than 0.54
+ * imagefile.cpp: Fixed scaling factor in fftRows
+ * imagefile.cpp: Fixed bug when performing magnitude() on real-valued
image.
- -- sgp.cpp: Fixed bug in drawCircle.
- -- distribution: fixed problem with documentation files not
+ * sgp.cpp: Fixed bug in drawCircle.
+ * distribution: fixed problem with documentation files not
being included with the distribution (Reported by Ian Kay).
- -- sgp.cpp/ezplot.cpp: Improved plotting with markers.
- -- fixed ctsimtext shell when giving no parameters to function-name
- -- phm2if, phm2pj: Updated help messages for renamed phantoms
+ * sgp.cpp/ezplot.cpp: Improved plotting with markers.
+ * fixed ctsimtext shell when giving no parameters to function-name
+ * phm2if, phm2pj: Updated help messages for renamed phantoms
3.0.3 - Released 2/20/01
EXTRA_DIRS3=
endif
-SUBDIRS=man doc libctsupport libctsim html cgi-bin include $(EXTRA_DIRS1) $(EXTRA_DIRS2 $(EXTRA_DIRS3) tools helical
+SUBDIRS=man doc libctsupport libctsim html cgi-bin include $(EXTRA_DIRS1) $(EXTRA_DIRS2) $(EXTRA_DIRS3) tools helical
EXTRA_DIST=acsite.m4 make.bat msvc/ctsim.dsw msvc/ctsimtext/ctsimtext.dsp msvc/libctsim/libctsim.dsp msvc/ctsim/ctsim.dsp
@HAVE_WXWINDOWS_TRUE@EXTRA_DIRS3 = src
@HAVE_WXWINDOWS_FALSE@EXTRA_DIRS3 =
-SUBDIRS = $(EXTRA_DIRS1) $(EXTRA_DIRS2) man doc libctsupport libctsim html cgi-bin include $(EXTRA_DIRS3) tools helical
+SUBDIRS = man doc libctsupport libctsim html cgi-bin include $(EXTRA_DIRS1) $(EXTRA_DIRS2) $(EXTRA_DIRS3) tools helical
EXTRA_DIST = acsite.m4 make.bat msvc/ctsim.dsw msvc/ctsimtext/ctsimtext.dsp msvc/libctsim/libctsim.dsp msvc/ctsim/ctsim.dsp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
TAR = tar
GZIP_ENV = --best
-DIST_SUBDIRS = getopt libctgraphics man doc libctsupport libctsim html \
-cgi-bin include src tools helical
+DIST_SUBDIRS = man doc libctsupport libctsim html cgi-bin include \
+getopt libctgraphics src tools helical
all: all-redirect
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
-Version 3.5 New Features
+Version 3.5 Released May 2002
* New reconstruction technique: Interpolate divergent beams to
parallel beams for faster reconstructions.
-Take new features in 3.5 and add to documentation file
+
Document: ctsim
Title: CTSim
Author: Kevin M. Rosenberg
-Abstract: Describes the
- use the CTSim Computed Tomography Simulator
+Abstract: This manual describes the theory
+ and use of CTSim - A Computed Tomography Simulator.
Section: math
Format: HTML
usr/share/doc/ctsim
usr/share/doc/ctsim/html
usr/share/man
-usr/share/man1
+usr/share/man/man1
build-stamp: configure-stamp
dh_testdir
# Add here commands to compile the package.
- $(MAKE)
+ $(MAKE) all
touch build-stamp
clean:
install -g root -o root -m 0644 $(pkg).htb $(datadir)
.PHONY: pdf
-pdf: ctsim.dvi
+pdf: ctsim.pdf
$(pkg).pdf: $(pkg).dvi
dvipdfm $(pkg)
mostlyclean distclean maintainer-clean
-all-local: htmlhelp html dvi
+all-local: htmlhelp html pdf
install-data-hook: $(pkg).htb
install -g root -o root -m 0644 $(pkg).htb $(datadir)
-.PHONY: ps
-ps: ctsim.ps
-$(pkg).ps: $(pkg).dvi
- dvips $(pkg)
+.PHONY: pdf
+pdf: ctsim.pdf
+$(pkg).pdf: $(pkg).dvi
+ dvipdfm $(pkg)
.PHONY: dvi
dvi: $(pkg).dvi
\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
+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
-any number of files that you want \ctsim\ to
-automatically open. \ctsim\ can open projection files, image
-files, phantom files, and plot files.
+You can invoke \ctsim\ by itself on the command line, or include any
+number of files that you want \ctsim\ to automatically open. \ctsim\
+can open projection files, image 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.
new installations. With this option set, \ctsim\ execute lengthy calculations in the
background. A background window will appear when processes are running in the background
and will disappear when no background processes are executing. This background window shows
-the status and progress of all background processes.}
+the status and progress of all background processes.
+\textbf{NOTE:} Due to limitations of \texttt{wxWindows}, this function is
+only supported on Microsoft Windows.
+}
\end{twocollist}
\item The parameters used when generating the projections from the phantom.
\end{itemize}
+\subsection{Process - Convert Rectangular}
+The commands takes the projection data and creates an image file using
+the projection data.
+
\subsection{Process - Convert Polar}\label{IDH_DLG_POLAR}\index{Polar conversion}
This command creates an image file with the polar conversion of the projection data.
The parameters to set are:
quality interpolation.}
\end{twocollist}
-\subsection{Process - Convert FFT Polar}
+\subsection{Convert - Convert FFT Polar}
The parameters for this option are the same as the \helprefn{Convert
Polar Dialog}{convertpolardialog}. For this command, though, the
projections are Fourier transformed prior to conversion to polar
image.
+\subsection{Convert - Interpolate to Parallel}
+This command filters divergent projection data (equiangular or
+equilinear) and interpolates (or rebins) to estimate the projection
+data if the projections had been collected with parallel geometry.
+
+\subsection{Analyze - Plot Histogram}
+Plots a histogram of projection data attenuations.
+
+\subsection{Analyze - Plot T-Theta Sampling}
+Plots a 2-dimensional scattergram showing the \texttt{T} and
+\texttt{Theta} values for each data point in the projection data.
+This is especially instructive when scanning with divergent
+geometries and the scan ratio is close to \texttt{1}.
+
+
\subsection{Reconstruct - Filtered Backprojection}\label{IDH_DLG_RECONSTRUCTION}\index{Dialog!Reconstruction}
This command displays a dialog to set the parameters for reconstructing an image from projections
using the filtered backprojection technique. The parameters available are:
a setting of \texttt{0} disables zero padding. Settings greater than \texttt{1}
perform larger amounts of zero padding but without any significant benefit.}
+\twocolitem{\textbf{ROI}}{These four settings control the
+\textit{region of interest} for the reconstruction. The default values
+match the dimensions of the entire phantom. By constraining the ROI to
+be a smaller square, the reconstruction will be magnified.}
+
\end{twocollist}
+\subsection{Reconstruct - Filtered Backprojection (Rebin to Parallel)}\label{IDH_DLG_RECONSTRUCTION_REBIN}\index{Dialog!Reconstruction_Rebin}
+The command reconstructs the projection data via filtered backprojection
+as described above. As opposed to the above command, this command also
+rebins divergent projection data to parallel prior to reconstruction.
+This greatly speeds reconstruction of divergent geometry projections.
+
\section{Plot Menus}
\subsection{File - Properties}
The displayed properties include:
** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: ctsim.cpp,v 1.106 2002/05/03 01:01:15 kevin Exp $
+** $Id: ctsim.cpp,v 1.107 2002/05/03 09:57:41 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.106 2002/05/03 01:01:15 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.107 2002/05/03 09:57:41 kevin Exp $";
struct option CTSimApp::ctsimOptions[] =
{
if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim"))
*m_pLog << "Cannot initialize the Windows Help system" << "\n";
#else
- if (! m_pFrame->getHtmlHelpController().Initialize(helpDir + "/ctsim") &&
- ! m_pFrame->getHtmlHelpController().Initialize("/usr/share/ctsim"))
+ if (! m_pFrame->getHtmlHelpController().Initialize("/usr/share/ctsim/ctsim") &&
+ ! m_pFrame->getHtmlHelpController().Initialize("/usr/local/share/ctsim/ctsim"))
*m_pLog << "Cannot initialize the HTML Help system" << "\n";
else {
if (::wxDirExists ("/tmp"))
return;
}
pImageDoc->setImageFile (pImageFile);
- // pImageDoc->UpdateAllViews (NULL);
- // if (ImageFileView* imageView = pImageDoc->getView()) {
- // imageView->OnUpdate (imageView, NULL);
- // imageView->getFrame()->SetFocus();
- // imageView->getFrame()->Show(true);
- // }
if (theApp->getAskDeleteNewDocs())
pImageDoc->Modify (true);
}
return;
}
pProjDoc->setProjections (pProjections);
- pProjDoc->UpdateAllViews (NULL);
- if (ProjectionFileView* projView = pProjDoc->getView()) {
- projView->OnUpdate (projView, NULL);
- projView->getFrame()->SetFocus();
- projView->getFrame()->Show(true);
- }
-
if (theApp->getAskDeleteNewDocs())
pProjDoc->Modify (true);
}
ProjectionFileDocument* newDoc = dynamic_cast<ProjectionFileDocument*>(m_pDocTemplProjection->CreateDocument (""));
if (newDoc) {
ProjectionFileView* pView = newDoc->getView();
- if (pView) {
- wxFrame* pFrame = pView->getFrame();
- if (pFrame) {
- // wxSize size;
- // m_pFrame->GetClientSize (&size.x, &size.y);
- // pFrame->SetClientSize (size.x / 2, size.y / 2);
- pFrame->Show (false);
- }
- }
newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName());
newDoc->SetDocumentTemplate (m_pDocTemplProjection);
newDoc->OnNewDocument();
** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: dialogs.cpp,v 1.56 2001/09/24 11:46:17 kevin Exp $
+** $Id: dialogs.cpp,v 1.57 2002/05/03 09:57:41 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
m_pCBStartupTips->SetValue (bStartupTips);
pTopSizer->Add (m_pCBStartupTips, 0, wxALIGN_CENTER_VERTICAL);
-#ifdef HAVE_WXTHREADS
+#if HAVE_WXTHREADS && MSVC
m_pCBUseBackgroundTasks = new wxCheckBox (this, -1, "Put Tasks in Background", wxDefaultPosition, wxSize(250, 25), 0);
m_pCBUseBackgroundTasks->SetValue (bUseBackgroundTasks);
pTopSizer->Add (m_pCBUseBackgroundTasks, 0, wxALIGN_CENTER_VERTICAL);
bool
DialogPreferences::getUseBackgroundTasks ()
{
-#ifdef HAVE_WXTHREADS
+#if HAVE_WXTHREADS && MSVC
return static_cast<bool>(m_pCBUseBackgroundTasks->GetValue());
#else
return false;
** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: views.cpp,v 1.152 2002/05/03 01:01:15 kevin Exp $
+** $Id: views.cpp,v 1.153 2002/05/03 09:57:41 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
return;
}
pProjectionDoc->setProjections (pProj);
- ProjectionFileView* projView = pProjectionDoc->getView();
- if (projView) {
- projView->OnUpdate (projView, NULL);
- if (projView->getCanvas())
- projView->getCanvas()->SetClientSize (m_iDefaultNDet, m_iDefaultNView);
- if (wxFrame* pFrame = projView->getFrame()) {
- pFrame->Show(true);
- pFrame->SetFocus();
- pFrame->Raise();
- }
- GetDocumentManager()->ActivateView (projView, true, false);
- }
if (theApp->getAskDeleteNewDocs())
pProjectionDoc-> Modify(true);
pProjectionDoc->UpdateAllViews (this);
ProjectionFileView::setInitialClientSize ()
{
wxSize bestSize = m_pCanvas->GetBestSize();
-
+
if (bestSize.x > 800)
bestSize.x = 800;
if (bestSize.y > 800)
wxImage image (nDet, nView, imageData, true);
m_bitmap = image.ConvertToBitmap();
delete imageData;
- //int xSize = nDet;
- //int ySize = nView;
- //xSize = clamp (xSize, 0, 800);
- //ySize = clamp (ySize, 0, 800);
- //m_pFrame->SetClientSize (xSize, ySize);
- m_pCanvas->SetScrollbars (20, 20, nDet/20, nView/20);
}
- if (m_pCanvas)
- m_pCanvas->Refresh();
+ m_pCanvas->SetScrollbars(20, 20, nDet/20, nView/20);
+ m_pCanvas->SetBackgroundColour(*wxWHITE);
+
+ if (m_pCanvas)
+ m_pCanvas->Refresh();
}
bool