PACKAGE=ctsim
-VERSION=2.0.0-b4
+VERSION=2.0.0-b5
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: backprojectors.h,v 1.10 2000/07/19 04:33:27 kevin Exp $
+** $Id: backprojectors.h,v 1.11 2000/07/20 11:17:31 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
INTERP_FREQ_PREINTERPOLATION,
} InterpolationID;
- static const char BPROJ_TRIG_STR[]= "trig";
- static const char BPROJ_TABLE_STR[]= "table";
- static const char BPROJ_DIFF_STR[]= "diff";
- static const char BPROJ_DIFF2_STR[]= "diff2";
- static const char BPROJ_IDIFF2_STR[]= "idiff2";
- static const char BPROJ_IDIFF3_STR[]= "idiff3";
+ static const char BPROJ_TRIG_STR[];
+ static const char BPROJ_TABLE_STR[];
+ static const char BPROJ_DIFF_STR[];
+ static const char BPROJ_DIFF2_STR[];
+ static const char BPROJ_IDIFF2_STR[];
+ static const char BPROJ_IDIFF3_STR[];
+
+ static const char BPROJ_TRIG_TITLE_STR[];
+ static const char BPROJ_TABLE_TITLE_STR[];
+ static const char BPROJ_DIFF_TITLE_STR[];
+ static const char BPROJ_DIFF2_TITLE_STR[];
+ static const char BPROJ_IDIFF2_TITLE_STR[];
+ static const char BPROJ_IDIFF3_TITLE_STR[];
- static const char INTERP_NEAREST_STR[]= "nearest";
- static const char INTERP_LINEAR_STR[]= "linear";
- static const char INTERP_BSPLINE_STR[]= "bspline";
- static const char INTERP_FREQ_PREINTERPOLATION_STR[]= "freq_preinterpolation";
+ static const char INTERP_NEAREST_STR[];
+ static const char INTERP_LINEAR_STR[];
+ static const char INTERP_BSPLINE_STR[];
+ static const char INTERP_FREQ_PREINTERPOLATION_STR[];
+
+ static const char INTERP_NEAREST_TITLE_STR[];
+ static const char INTERP_LINEAR_TITLE_STR[];
+ static const char INTERP_BSPLINE_TITLE_STR[];
+ static const char INTERP_FREQ_PREINTERPOLATION_TITLE_STR[];
Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: filter.h,v 1.14 2000/07/19 04:33:27 kevin Exp $
+** $Id: filter.h,v 1.15 2000/07/20 11:17:31 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
DOMAIN_SPATIAL
} DomainID;
- static const char FILTER_ABS_BANDLIMIT_STR[]= "abs_bandlimit";
- static const char FILTER_ABS_SINC_STR[]= "abs_sinc";
- static const char FILTER_ABS_COS_STR[]= "abs_cos";
- static const char FILTER_ABS_HAMMING_STR[]= "abs_hamming";
- static const char FILTER_SHEPP_STR[]= "shepp";
- static const char FILTER_BANDLIMIT_STR[]= "bandlimit";
- static const char FILTER_SINC_STR[]= "sinc";
- static const char FILTER_COS_STR[]= "cos";
- static const char FILTER_HAMMING_STR[]= "hamming";
- static const char FILTER_TRIANGLE_STR[]= "triangle";
+ // Filters
+ static const char FILTER_ABS_BANDLIMIT_STR[];
+ static const char FILTER_ABS_SINC_STR[];
+ static const char FILTER_ABS_COS_STR[];
+ static const char FILTER_ABS_HAMMING_STR[];
+ static const char FILTER_SHEPP_STR[];
+ static const char FILTER_BANDLIMIT_STR[];
+ static const char FILTER_SINC_STR[];
+ static const char FILTER_COS_STR[];
+ static const char FILTER_HAMMING_STR[];
+ static const char FILTER_TRIANGLE_STR[];
+
+ static const char FILTER_ABS_BANDLIMIT_TITLE_STR[];
+ static const char FILTER_ABS_SINC_TITLE_STR[];
+ static const char FILTER_ABS_COS_TITLE_STR[];
+ static const char FILTER_ABS_HAMMING_TITLE_STR[];
+ static const char FILTER_SHEPP_TITLE_STR[];
+ static const char FILTER_BANDLIMIT_TITLE_STR[];
+ static const char FILTER_SINC_TITLE_STR[];
+ static const char FILTER_COS_TITLE_STR[];
+ static const char FILTER_HAMMING_TITLE_STR[];
+ static const char FILTER_TRIANGLE_TITLE_STR[];
- static const char FILTER_METHOD_CONVOLUTION_STR[]= "convolution";
- static const char FILTER_METHOD_FOURIER_STR[]= "fourier";
- static const char FILTER_METHOD_FOURIER_TABLE_STR[]="fourier_table";
- static const char FILTER_METHOD_FFT_STR[]= "fft";
+ // Filter Methods
+ static const char FILTER_METHOD_CONVOLUTION_STR[];
+ static const char FILTER_METHOD_FOURIER_STR[];
+ static const char FILTER_METHOD_FOURIER_TABLE_STR[];
+ static const char FILTER_METHOD_FFT_STR[];
#if HAVE_FFTW
- static const char FILTER_METHOD_FFTW_STR[]= "fftw";
- static const char FILTER_METHOD_RFFTW_STR[]= "rfftw";
+ static const char FILTER_METHOD_FFTW_STR[];
+ static const char FILTER_METHOD_RFFTW_STR[];
#endif
- static const char DOMAIN_FREQUENCY_STR[]="frequency";
- static const char DOMAIN_SPATIAL_STR[]="spatial";
+ static const char FILTER_METHOD_CONVOLUTION_TITLE_STR[];
+ static const char FILTER_METHOD_FOURIER_TITLE_STR[];
+ static const char FILTER_METHOD_FOURIER_TABLE_TITLE_STR[];
+ static const char FILTER_METHOD_FFT_TITLE_STR[];
+#if HAVE_FFTW
+ static const char FILTER_METHOD_FFTW_TITLESTR[];
+ static const char FILTER_METHOD_RFFTW_TITLE_STR[];
+#endif
+
+ // Domains
+ static const char DOMAIN_FREQUENCY_STR[];
+ static const char DOMAIN_SPATIAL_STR[];
+
+ static const char DOMAIN_FREQUENCY_TITLE_STR[];
+ static const char DOMAIN_SPATIAL_TITLE_STR[];
SignalFilter (const char* filterName, const char* filterMethodName,double bw, double signalIncrement, int n, double param, const char* domainName, const int zeropad = 0, const int preinterpolationFactor = 1);
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: phantom.h,v 1.8 2000/07/19 04:33:27 kevin Exp $
+** $Id: phantom.h,v 1.9 2000/07/20 11:17:31 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
PHM_UNITPULSE /* Unit pulse phantom */
} PhantomID;
- static const char PHM_HERMAN_STR[]= "herman";
- static const char PHM_BHERMAN_STR[]= "bherman";
- static const char PHM_ROWLAND_STR[]= "rowland";
- static const char PHM_BROWLAND_STR[]= "browland";
- static const char PHM_UNITPULSE_STR[]= "unitpulse";
-
- static const char PHM_HERMAN_TITLE_STR[]= "Herman Head";
- static const char PHM_BHERMAN_TITLE_STR[]= "Herman Head Bordered";
- static const char PHM_ROWLAND_TITLE_STR[]= "Rowland Head";
- static const char PHM_BROWLAND_TITLE_STR[]= "Rowland Head Bordered";
- static const char PHM_UNITPULSE_TITLE_STR[]= "Unit Pulse";
+ static const char PHM_HERMAN_STR[];
+ static const char PHM_BHERMAN_STR[];
+ static const char PHM_ROWLAND_STR[];
+ static const char PHM_BROWLAND_STR[];
+ static const char PHM_UNITPULSE_STR[];
+
+ static const char PHM_HERMAN_TITLE_STR[];
+ static const char PHM_BHERMAN_TITLE_STR[];
+ static const char PHM_ROWLAND_TITLE_STR[];
+ static const char PHM_BROWLAND_TITLE_STR[];
+ static const char PHM_UNITPULSE_TITLE_STR[];
Phantom (void);
Phantom (const char* const phmName);
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: scanner.h,v 1.6 2000/07/18 14:51:06 kevin Exp $
+** $Id: scanner.h,v 1.7 2000/07/20 11:17:31 kevin Exp $
**
**
** This program is free software; you can redistribute it and/or modify
GEOMETRY_INVALID,
GEOMETRY_PARALLEL,
GEOMETRY_EQUILINEAR,
- GEOMETRY_EQUIANGLE
+ GEOMETRY_EQUIANGULAR,
} GeometryID;
- static const char GEOMETRY_PARALLEL_STR[] = "parallel";
- static const char GEOMETRY_EQUILINEAR_STR[] = "equilinear";
- static const char GEOMETRY_EQUIANGLE_STR[] = "equiangle";
+ static const char GEOMETRY_PARALLEL_STR[];
+ static const char GEOMETRY_EQUILINEAR_STR[];
+ static const char GEOMETRY_EQUIANGULAR_STR[];
+
+ static const char GEOMETRY_PARALLEL_TITLE_STR[];
+ static const char GEOMETRY_EQUILINEAR_TITLE_STR[];
+ static const char GEOMETRY_EQUIANGULAR_TITLE_STR[];
Scanner (const Phantom& phm, const char* const geometryName, int nDet, int nView, int nSample, const double rot_anglen);
~Scanner();
#ifndef TRACE_H
#define TRACE_H
-enum {
+enum TraceID {
TRACE_INVALID=-1,
TRACE_NONE=0, /* No tracing */
TRACE_TEXT, /* Minimal status */
TRACE_CLIPPING /* Plot clipping */
};
-static const char TRACE_NONE_STR[]= "none";
-static const char TRACE_TEXT_STR[]= "text";
-static const char TRACE_PHM_STR[]= "phm";
-static const char TRACE_RAYS_STR[]= "rays";
-static const char TRACE_PLOT_STR[]= "plot";
-static const char TRACE_CLIPPING_STR[]= "clipping";
-
class TraceLevel
{
public:
- TraceLevel (const char* const traceString);
-
- void addTrace (const char* const traceString);
-
- bool isTrace (const char* const traceQuery) const;
-
- int getTraceLevel(void) const { return m_traceLevel; }
+ static const char TRACE_NONE_STR[];
+ static const char TRACE_TEXT_STR[];
+ static const char TRACE_PHM_STR[];
+ static const char TRACE_RAYS_STR[];
+ static const char TRACE_PLOT_STR[];
+ static const char TRACE_CLIPPING_STR[];
+
+ TraceLevel (const char* const traceString);
+
+ void addTrace (const char* const traceString);
+
+ bool isTrace (const char* const traceQuery) const;
+
+ int getTraceLevel(void) const { return m_traceLevel; }
+
+ static TraceID convertTraceNameToID (const char* traceName);
private:
-
- int m_traceLevel;
-
- bool addTraceElements (const char* const traceString);
+
+ int m_traceLevel;
+
+ bool addTraceElements (const char* const traceString);
};
-inline int
-convertTraceNameToID (const char *traceString)
-{
- int traceID = TRACE_INVALID;
-
- if (strcasecmp (traceString, TRACE_NONE_STR) == 0)
- traceID = TRACE_NONE;
- else if (strcasecmp (traceString, TRACE_TEXT_STR) == 0)
- traceID = TRACE_TEXT;
- else if (strcasecmp (traceString, TRACE_PHM_STR) == 0)
- traceID = TRACE_PHM;
- else if (strcasecmp (traceString, TRACE_PLOT_STR) == 0)
- traceID = TRACE_PLOT;
- else if (strcasecmp (traceString, TRACE_CLIPPING_STR) == 0)
- traceID = TRACE_CLIPPING;
- else if (strcasecmp (traceString, TRACE_RAYS_STR) == 0)
- traceID = TRACE_RAYS;
-
- return (traceID);
-}
-
-
#endif
noinst_LIBRARIES = libctsim.a
-libctsim_a_SOURCES = filter.cpp scanner.cpp projections.cpp phantom.cpp imagefile.cpp backprojectors.cpp array2dfile.cpp
+libctsim_a_SOURCES = filter.cpp scanner.cpp projections.cpp phantom.cpp imagefile.cpp backprojectors.cpp array2dfile.cpp trace.cpp
INCLUDES=@my_includes@
EXTRA_DIST=Makefile.nt
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: backprojectors.cpp,v 1.8 2000/07/13 07:03:21 kevin Exp $
+** $Id: backprojectors.cpp,v 1.9 2000/07/20 11:17:31 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
#include "ct.h"
+const char Backprojector::BPROJ_TRIG_STR[]= "trig";
+const char Backprojector::BPROJ_TABLE_STR[]= "table";
+const char Backprojector::BPROJ_DIFF_STR[]= "diff";
+const char Backprojector::BPROJ_DIFF2_STR[]= "diff2";
+const char Backprojector::BPROJ_IDIFF2_STR[]= "idiff2";
+const char Backprojector::BPROJ_IDIFF3_STR[]= "idiff3";
+
+const char Backprojector::BPROJ_TRIG_TITLE_STR[]= "Direc Trigometric";
+const char Backprojector::BPROJ_TABLE_TITLE_STR[]= "Trig Table";
+const char Backprojector::BPROJ_DIFF_TITLE_STR[]= "Diff";
+const char Backprojector::BPROJ_DIFF2_TITLE_STR[]= "Diff2";
+const char Backprojector::BPROJ_IDIFF2_TITLE_STR[]= "Integer Diff2";
+const char Backprojector::BPROJ_IDIFF3_TITLE_STR[]= "Integer Diff3";
+
+const char Backprojector::INTERP_NEAREST_STR[]= "nearest";
+const char Backprojector::INTERP_LINEAR_STR[]= "linear";
+const char Backprojector::INTERP_BSPLINE_STR[]= "bspline";
+const char Backprojector::INTERP_FREQ_PREINTERPOLATION_STR[]= "freq_preinterpolation";
+
+const char Backprojector::INTERP_NEAREST_TITLE_STR[]= "Nearest";
+const char Backprojector::INTERP_LINEAR_TITLE_STR[]= "Linear";
+const char Backprojector::INTERP_BSPLINE_TITLE_STR[]= "B-Spline";
+const char Backprojector::INTERP_FREQ_PREINTERPOLATION_TITLE_STR[]= "Frequency Preinterpolation";
+
+
Backprojector::Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor)
{
m_fail = false;
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: filter.cpp,v 1.18 2000/07/15 08:36:13 kevin Exp $
+** $Id: filter.cpp,v 1.19 2000/07/20 11:17:31 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
int SignalFilter::N_INTEGRAL=500; //static member
+// Filters
+const char SignalFilter::FILTER_ABS_BANDLIMIT_STR[] = "abs_bandlimit";
+const char SignalFilter::FILTER_ABS_SINC_STR[] = "abs_sinc";
+const char SignalFilter::FILTER_ABS_COS_STR[] = "abs_cos";
+const char SignalFilter::FILTER_ABS_HAMMING_STR[] = "abs_hamming";
+const char SignalFilter::FILTER_SHEPP_STR[] = "shepp";
+const char SignalFilter::FILTER_BANDLIMIT_STR[] = "bandlimit";
+const char SignalFilter::FILTER_SINC_STR[] = "sinc";
+const char SignalFilter::FILTER_COS_STR[] = "cos";
+const char SignalFilter::FILTER_HAMMING_STR[] = "hamming";
+const char SignalFilter::FILTER_TRIANGLE_STR[] = "triangle";
+
+const char SignalFilter::FILTER_ABS_BANDLIMIT_TITLE_STR[] = "Abs(w) * Bandlimit";
+const char SignalFilter::FILTER_ABS_SINC_TITLE_STR[] = "Abs(w) * Sinc";
+const char SignalFilter::FILTER_ABS_COS_TITLE_STR[] = "Abs(w) * Cos";
+const char SignalFilter::FILTER_ABS_HAMMING_TITLE_STR[] = "Abs(w) * Hamming";
+const char SignalFilter::FILTER_SHEPP_TITLE_STR[] = "Shepp";
+const char SignalFilter::FILTER_BANDLIMIT_TITLE_STR[] = "Bandlimit";
+const char SignalFilter::FILTER_SINC_TITLE_STR[] = "Sinc";
+const char SignalFilter::FILTER_COS_TITLE_STR[] = "Cos";
+const char SignalFilter::FILTER_HAMMING_TITLE_STR[] = "Hamming";
+const char SignalFilter::FILTER_TRIANGLE_TITLE_STR[] = "Triangle";
+
+// Filter Methods
+const char SignalFilter::FILTER_METHOD_CONVOLUTION_STR[] = "convolution";
+const char SignalFilter::FILTER_METHOD_FOURIER_STR[] = "fourier";
+const char SignalFilter::FILTER_METHOD_FOURIER_TABLE_STR[] = "fourier_table";
+const char SignalFilter::FILTER_METHOD_FFT_STR[] = "fft";
+#if HAVE_FFTW
+const char SignalFilter::FILTER_METHOD_FFTW_STR[] = "fftw";
+const char SignalFilter::FILTER_METHOD_RFFTW_STR[] = "rfftw";
+#endif
+
+const char SignalFilter::FILTER_METHOD_CONVOLUTION_TITLE_STR[] = "Convolution";
+const char SignalFilter::FILTER_METHOD_FOURIER_TITLE_STR[] = "Direct Fourier";
+const char SignalFilter::FILTER_METHOD_FOURIER_TABLE_TITLE_STR[] = "Fourier Trig Table";
+const char SignalFilter::FILTER_METHOD_FFT_TITLE_STR[] = "FFT";
+#if HAVE_FFTW
+const char SignalFilter::FILTER_METHOD_FFTW_TITLESTR[] = "FFTW";
+const char SignalFilter::FILTER_METHOD_RFFTW_TITLE_STR[] = "Real FFTW";
+#endif
+
+// Domains
+const char SignalFilter::DOMAIN_FREQUENCY_STR[] = "frequency";
+const char SignalFilter::DOMAIN_SPATIAL_STR[] = "spatial";
+
+const char SignalFilter::DOMAIN_FREQUENCY_TITLE_STR[] = "Frequency";
+const char SignalFilter::DOMAIN_SPATIAL_TITLE_STR[] = "Spatial";
+
+
/* NAME
* SignalFilter::SignalFilter Construct a signal
*
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: phantom.cpp,v 1.8 2000/07/18 03:14:35 kevin Exp $
+** $Id: phantom.cpp,v 1.9 2000/07/20 11:17:31 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
#include "ct.h"
+const char Phantom::PHM_HERMAN_STR[]= "herman";
+const char Phantom::PHM_BHERMAN_STR[]= "bherman";
+const char Phantom::PHM_ROWLAND_STR[]= "rowland";
+const char Phantom::PHM_BROWLAND_STR[]= "browland";
+const char Phantom::PHM_UNITPULSE_STR[]= "unitpulse";
+
+const char Phantom::PHM_HERMAN_TITLE_STR[]= "Herman Head";
+const char Phantom::PHM_BHERMAN_TITLE_STR[]= "Herman Head Bordered";
+const char Phantom::PHM_ROWLAND_TITLE_STR[]= "Rowland Head";
+const char Phantom::PHM_BROWLAND_TITLE_STR[]= "Rowland Head Bordered";
+const char Phantom::PHM_UNITPULSE_TITLE_STR[]= "Unit Pulse";
+
+
+
// CLASS IDENTIFICATION
// Phanton
//
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: scanner.cpp,v 1.3 2000/07/13 07:03:21 kevin Exp $
+** $Id: scanner.cpp,v 1.4 2000/07/20 11:17:31 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
#include "ct.h"
+const char Scanner::GEOMETRY_PARALLEL_STR[] = "parallel";
+const char Scanner::GEOMETRY_EQUILINEAR_STR[] = "equilinear";
+const char Scanner::GEOMETRY_EQUIANGULAR_STR[] = "equiangular";
+
+const char Scanner::GEOMETRY_PARALLEL_TITLE_STR[] = "Parallel";
+const char Scanner::GEOMETRY_EQUILINEAR_TITLE_STR[] = "Equilinear";
+const char Scanner::GEOMETRY_EQUIANGULAR_TITLE_STR[] = "Equiangular";
// NAME
// DetectorArray Construct a DetectorArray
geometryID = GEOMETRY_PARALLEL;
else if (strcasecmp (geometryName, GEOMETRY_EQUILINEAR_STR) == 0)
geometryID = GEOMETRY_EQUILINEAR;
- else if (strcasecmp (geometryName, GEOMETRY_EQUIANGLE_STR) == 0)
- geometryID = GEOMETRY_EQUIANGLE;
+ else if (strcasecmp (geometryName, GEOMETRY_EQUIANGULAR_STR) == 0)
+ geometryID = GEOMETRY_EQUIANGULAR;
return (geometryID);
}
--- /dev/null
+/*****************************************************************************
+** FILE IDENTIFICATION
+**
+** Name: trace.cpp Class for trace
+** Programmer: Kevin Rosenberg
+** Date Started: June 2000
+**
+** This is part of the CTSim program
+** Copyright (C) 1983-2000 Kevin Rosenberg
+**
+** $Id: trace.cpp,v 1.1 2000/07/20 11:17:31 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
+** published by the Free Software Foundation.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+******************************************************************************/
+
+#include "ct.h"
+
+const char TraceLevel::TRACE_NONE_STR[]= "none";
+const char TraceLevel::TRACE_TEXT_STR[]= "text";
+const char TraceLevel::TRACE_PHM_STR[]= "phm";
+const char TraceLevel::TRACE_RAYS_STR[]= "rays";
+const char TraceLevel::TRACE_PLOT_STR[]= "plot";
+const char TraceLevel::TRACE_CLIPPING_STR[]= "clipping";
+
+
+TraceID
+TraceLevel::convertTraceNameToID (const char *traceString)
+{
+ TraceID traceID = TRACE_INVALID;
+
+ if (strcasecmp (traceString, TRACE_NONE_STR) == 0)
+ traceID = TRACE_NONE;
+ else if (strcasecmp (traceString, TRACE_TEXT_STR) == 0)
+ traceID = TRACE_TEXT;
+ else if (strcasecmp (traceString, TRACE_PHM_STR) == 0)
+ traceID = TRACE_PHM;
+ else if (strcasecmp (traceString, TRACE_PLOT_STR) == 0)
+ traceID = TRACE_PLOT;
+ else if (strcasecmp (traceString, TRACE_CLIPPING_STR) == 0)
+ traceID = TRACE_CLIPPING;
+ else if (strcasecmp (traceString, TRACE_RAYS_STR) == 0)
+ traceID = TRACE_RAYS;
+
+ return (traceID);
+}
+
+
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: ctsim.cpp,v 1.6 2000/07/19 04:33:27 kevin Exp $
+** $Id: ctsim.cpp,v 1.7 2000/07/20 11:17:31 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
//// Make a menubar
wxMenu *file_menu = new wxMenu;
- file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "&Create Phantom...");
+ file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
file_menu->Append(wxID_OPEN, "&Open...");
file_menu->AppendSeparator();
DialogGetPhantom dialogPhantom (this, Phantom::PHM_HERMAN_STR);
int dialogReturn = dialogPhantom.ShowModal();
if (dialogReturn == wxID_OK) {
- string selection = dialogPhantom.getPhantom();
+ wxString selection = dialogPhantom.getPhantom();
*theApp->getLog() << "Selected phantom " << selection.c_str() << "\n";
- wxString filename = selection.c_str();
- filename += ".phm";
+ wxString filename = selection + ".phm";
theApp->getDocManager()->CreateDocument(filename, wxDOC_SILENT);
}
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: dialogs.cpp,v 1.3 2000/07/19 04:33:27 kevin Exp $
+** $Id: dialogs.cpp,v 1.4 2000/07/20 11:17:31 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
#include "backprojectors.h"
+
+const wxString DialogGetPhantom::s_asPhantom[] =
+{
+ wxString(Phantom::PHM_HERMAN_STR),
+ wxString(Phantom::PHM_BHERMAN_STR),
+ wxString(Phantom::PHM_ROWLAND_STR),
+ wxString(Phantom::PHM_BROWLAND_STR),
+ wxString(Phantom::PHM_UNITPULSE_STR),
+};
+const wxString DialogGetPhantom::s_asPhantomTitle[] =
+{
+ wxString(Phantom::PHM_HERMAN_TITLE_STR),
+ wxString(Phantom::PHM_BHERMAN_TITLE_STR),
+ wxString(Phantom::PHM_ROWLAND_TITLE_STR),
+ wxString(Phantom::PHM_BROWLAND_TITLE_STR),
+ wxString(Phantom::PHM_UNITPULSE_TITLE_STR),
+};
+const unsigned int DialogGetPhantom::s_iNumPhantom = sizeof(s_asPhantom) / sizeof(wxString);
+
+
DialogGetPhantom::DialogGetPhantom (wxFrame* pParent, const char* szDefaultPhantom = NULL)
: wxDialog (pParent, -1, "Select Phantom", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
{
pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
- wxString aListPhantomTitle [5];
- aListPhantomTitle[0] = Phantom::PHM_HERMAN_TITLE_STR;
- aListPhantomTitle[1] = Phantom::PHM_BHERMAN_TITLE_STR;
- aListPhantomTitle[2] = Phantom::PHM_ROWLAND_TITLE_STR;
- aListPhantomTitle[3] = Phantom::PHM_BROWLAND_TITLE_STR;
- aListPhantomTitle[4] = Phantom::PHM_UNITPULSE_TITLE_STR;
- m_pListBoxPhantom = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, 5, aListPhantomTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
+ m_pListBoxPhantom = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, s_iNumPhantom, s_asPhantomTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
pTopSizer->Add (m_pListBoxPhantom, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
pTopSizer->SetSizeHints (this);
}
-string
+const wxString&
DialogGetPhantom::getPhantom(void)
{
- string aListPhantom [5];
- aListPhantom[0] = Phantom::PHM_HERMAN_STR;
- aListPhantom[1] = Phantom::PHM_BHERMAN_STR;
- aListPhantom[2] = Phantom::PHM_ROWLAND_STR;;
- aListPhantom[3] = Phantom::PHM_BROWLAND_STR;
- aListPhantom[4] = Phantom::PHM_UNITPULSE_STR;
-
int selection = m_pListBoxPhantom->GetSelection();
if (selection >= 0)
- return (aListPhantom[selection]);
+ return (s_asPhantom[selection]);
return (m_sDefaultPhantom);
}
// DialogGetProjectionParameters
/////////////////////////////////////////////////////////////////////
+const wxString DialogGetProjectionParameters::s_asGeometry[] =
+{
+ wxString(Scanner::GEOMETRY_PARALLEL_STR),
+ wxString(Scanner::GEOMETRY_EQUILINEAR_STR),
+ wxString(Scanner::GEOMETRY_EQUIANGULAR_STR),
+};
+const wxString DialogGetProjectionParameters::s_asGeometryTitle[] =
+{
+ wxString(Scanner::GEOMETRY_PARALLEL_TITLE_STR),
+ wxString(Scanner::GEOMETRY_EQUILINEAR_TITLE_STR),
+ wxString(Scanner::GEOMETRY_EQUIANGULAR_TITLE_STR),
+};
+const unsigned int DialogGetProjectionParameters::s_iNumGeometry = sizeof(s_asGeometry) / sizeof(wxString);
+
+
DialogGetProjectionParameters::DialogGetProjectionParameters (wxFrame* pParent, int iDefaultNDet = 0, int iDefaultNView = 0, int iDefaultNSamples = 1, double dDefaultRotAngle = 1., const char* szDefaultGeometry = NULL)
: wxDialog (pParent, -1, "Set Projection Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
{
pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+ m_pListBoxGeometry = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, s_iNumGeometry, s_asGeometryTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
+ pTopSizer->Add (m_pListBoxGeometry, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
+
ostringstream os;
os << iDefaultNDet;
m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
return (m_dDefaultRotAngle);
}
-const string&
+const wxString&
DialogGetProjectionParameters::getGeometry (void)
{
- return m_sDefaultGeometry;
+ int selection = m_pListBoxGeometry->GetSelection();
+ if (selection >= 0)
+ return (s_asGeometry[selection]);
+
+ return m_sDefaultGeometry;
}
// DialogGetReconstructionParameters
/////////////////////////////////////////////////////////////////////
+const wxString DialogGetReconstructionParameters::s_asFilter[] =
+{
+ wxString(SignalFilter::FILTER_ABS_BANDLIMIT_STR),
+ wxString(SignalFilter::FILTER_SHEPP_STR),
+};
+const wxString DialogGetReconstructionParameters::s_asFilterTitle[] =
+{
+ wxString(SignalFilter::FILTER_ABS_BANDLIMIT_TITLE_STR),
+ wxString(SignalFilter::FILTER_SHEPP_TITLE_STR),
+};
+const unsigned int DialogGetReconstructionParameters::s_iNumFilter = sizeof(s_asFilter) / sizeof(wxString);
+
+
+const wxString DialogGetReconstructionParameters::s_asInterp[] =
+{
+ wxString(Backprojector::INTERP_NEAREST_STR),
+ wxString(Backprojector::INTERP_LINEAR_STR),
+};
+const wxString DialogGetReconstructionParameters::s_asInterpTitle[] =
+{
+ wxString(Backprojector::INTERP_NEAREST_TITLE_STR),
+ wxString(Backprojector::INTERP_LINEAR_TITLE_STR),
+ };
+const unsigned int DialogGetReconstructionParameters::s_iNumInterp = sizeof(s_asInterp) / sizeof(wxString);
+
+
DialogGetReconstructionParameters::DialogGetReconstructionParameters (wxFrame* pParent, int iDefaultXSize = 0, int iDefaultYSize = 0, const char* szDefaultFilterName = NULL, double dDefaultFilterParam = 1., const char* szDefaultFilterMethodName = NULL, int iDefaultZeropad = 3, const char* szDefaultInterpName = NULL, int iDefaultInterpParam = 1, const char* szDefaultBackprojName = NULL)
: wxDialog (pParent, -1, "Set Reconstruction Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
{
pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+ m_pListBoxFilter = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, s_iNumFilter, s_asFilterTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
+ pTopSizer->Add (m_pListBoxFilter, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
+
+ m_pListBoxInterp = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, s_iNumInterp, s_asInterpTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
+ pTopSizer->Add (m_pListBoxInterp, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
+
ostringstream os;
os << iDefaultXSize;
m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_CENTER_VERTICAL);
pTopSizer->Add (pGridSizer, 1, wxALL, 10);
- wxString aTitlesFilter[4];
- aTitlesFilter[0] = "Abs * Bandlimit";
- aTitlesFilter[1] = "Abs * Hamming";
- aTitlesFilter[2] = "Abs * Hanning";
- aTitlesFilter[3] = "Abs * Cosine";
-
- m_pListBoxFilter = new wxListBox (this, -1, wxDefaultPosition, wxSize(-1,-1), 4, aTitlesFilter, wxLB_SINGLE | wxLB_NEEDED_SB);
- pTopSizer->Add (m_pListBoxFilter);
-
m_sDefaultFilterName = szDefaultFilterName;
m_sDefaultFilterMethodName = szDefaultFilterMethodName;
m_sDefaultInterpName = szDefaultInterpName;
return (m_dDefaultFilterParam);
}
-const string&
+const wxString&
DialogGetReconstructionParameters::getFilterName (void)
{
- return m_sDefaultFilterName;
+ int selection = m_pListBoxFilter->GetSelection();
+ if (selection >= 0)
+ return (s_asFilter[selection]);
+
+ return m_sDefaultFilterName;
}
-const string&
+const wxString&
DialogGetReconstructionParameters::getFilterMethodName (void)
{
return m_sDefaultFilterMethodName;
}
-const string&
+const wxString&
DialogGetReconstructionParameters::getInterpName (void)
{
- return m_sDefaultInterpName;
+ int selection = m_pListBoxInterp->GetSelection();
+ if (selection >= 0)
+ return (s_asInterp[selection]);
+
+ return m_sDefaultInterpName;
}
-const string&
+const wxString&
DialogGetReconstructionParameters::getBackprojName (void)
{
return m_sDefaultBackprojName;
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: dialogs.h,v 1.4 2000/07/19 04:33:27 kevin Exp $
+** $Id: dialogs.h,v 1.5 2000/07/20 11:17:31 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
#include "wx/wx.h"
#include <string>
+
class DialogGetPhantom : public wxDialog
{
public:
DialogGetPhantom (wxFrame* pParent, const char* szDefaultPhantom);
virtual ~DialogGetPhantom (void) {}
- string getPhantom (void);
+ const wxString& getPhantom (void);
private:
wxListBox* m_pListBoxPhantom;
- string m_sDefaultPhantom;
+ wxString m_sDefaultPhantom;
+
+ static const wxString s_asPhantom[];
+ static const wxString s_asPhantomTitle[];
+ static const unsigned int s_iNumPhantom;
};
unsigned int getNView (void);
unsigned int getNSamples (void);
double getRotAngle (void);
- const string& getGeometry(void);
+ const wxString& getGeometry(void);
private:
wxTextCtrl* m_pTextCtrlNDet;
wxTextCtrl* m_pTextCtrlNView;
wxTextCtrl* m_pTextCtrlNSamples;
wxTextCtrl* m_pTextCtrlRotAngle;
- wxTextCtrl* m_pTextCtrlGeometry;
+ wxListBox* m_pListBoxGeometry;
int m_iDefaultNDet;
int m_iDefaultNView;
int m_iDefaultNSamples;
double m_dDefaultRotAngle;
- string m_sDefaultGeometry;
+ wxString m_sDefaultGeometry;
+
+ static const wxString s_asGeometry[];
+ static const wxString s_asGeometryTitle[];
+ static const unsigned int s_iNumGeometry;
};
unsigned int getXSize(void);
unsigned int getYSize(void);
- const string& getFilterName(void);
+ const wxString& getFilterName(void);
double getFilterParam(void);
- const string& getFilterMethodName(void);
+ const wxString& getFilterMethodName(void);
unsigned int getZeropad(void);
- const string& getInterpName(void);
+ const wxString& getInterpName(void);
unsigned int getInterpParam(void);
- const string& getBackprojName(void);
+ const wxString& getBackprojName(void);
private:
wxTextCtrl* m_pTextCtrlXSize;
wxTextCtrl* m_pTextCtrlYSize;
- wxTextCtrl* m_pTextCtrlFilterParam;
- wxTextCtrl* m_pTextCtrlFilterMethodName;
wxTextCtrl* m_pTextCtrlZeropad;
- wxTextCtrl* m_pTextCtrlInterpName;
+ wxTextCtrl* m_pTextCtrlFilterParam;
wxTextCtrl* m_pTextCtrlInterpParam;
- wxTextCtrl* m_pTextCtrlBackprojName;
wxListBox* m_pListBoxFilter;
wxListBox* m_pListBoxFilterMethod;
int m_iDefaultXSize;
int m_iDefaultYSize;
- string m_sDefaultFilterName;
double m_dDefaultFilterParam;
- string m_sDefaultFilterMethodName;
int m_iDefaultZeropad;
- string m_sDefaultInterpName;
int m_iDefaultInterpParam;
- string m_sDefaultBackprojName;
+ wxString m_sDefaultFilterName;
+ wxString m_sDefaultFilterMethodName;
+ wxString m_sDefaultInterpName;
+ wxString m_sDefaultBackprojName;
+
+ static const wxString s_asFilter[];
+ static const wxString s_asFilterTitle[];
+ static const unsigned int s_iNumFilter;
+
+ static const wxString s_asFilterMethod[];
+ static const wxString s_asFilterMethodTitle[];
+ static const unsigned int s_iNumFilterMethod;
+
+ static const wxString s_asInterp[];
+ static const wxString s_asInterpTitle[];
+ static const unsigned int s_iNumInterp;
+
+ static const wxString s_asBackproj[];
+ static const wxString s_asBackprojTitle[];
+ static const unsigned int s_iNumBackproj;
};
#endif
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: views.cpp,v 1.6 2000/07/19 04:33:27 kevin Exp $
+** $Id: views.cpp,v 1.7 2000/07/20 11:17:31 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
if (pt.x >= 0 && pt.x < nx && pt.y >= 0 & pt.y < ny) {
ostringstream os;
- os << "Image value (" << pt.x << "," << pt.y << ") = " << v[pt.x][pt.y] << "\n";
+ os << "Image value (" << pt.x << "," << pt.y << ") = " << v[pt.x][ny - 1 - pt.y] << "\n";
*theApp->getLog() << os.str().c_str();
} else
*theApp->getLog() << "Mouse out of image range (" << pt.x << "," << pt.y << ")\n";
wxMenu *file_menu = new wxMenu;
- file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "&Create Phantom...");
+ file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
file_menu->Append(wxID_OPEN, "&Open...");
file_menu->Append(wxID_CLOSE, "&Close");
file_menu->Append(wxID_SAVE, "&Save");
int nView = dialogProjection.getNView();
int nSamples = dialogProjection.getNSamples();
double dRotAngle = dialogProjection.getRotAngle();
- string sGeometry = dialogProjection.getGeometry();
+ wxString sGeometry = dialogProjection.getGeometry();
if (nDet > 0 && nView > 0 && sGeometry != "") {
const Phantom& rPhantom = GetDocument()->getPhantom();
ProjectionFileDocument* pProjectionDoc = dynamic_cast<ProjectionFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.pj", wxDOC_SILENT));
pProjectionDoc->Modify(true);
pProjectionDoc->UpdateAllViews(this);
ostringstream os;
- os << "Projections for " << rPhantom.name() << ": nDet=" << nDet << ", nView=" << nView << ", nSamples=" << nSamples << ", RotAngle=" << dRotAngle << ", Geometry=" << sGeometry << "\n";
+ os << "Projections for " << rPhantom.name() << ": nDet=" << nDet << ", nView=" << nView << ", nSamples=" << nSamples << ", RotAngle=" << dRotAngle << ", Geometry=" << sGeometry.c_str() << "\n";
*theApp->getLog() << os.str().c_str();
}
}
wxMenu *file_menu = new wxMenu;
- file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "&Create Phantom...");
+ file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
file_menu->Append(wxID_OPEN, "&Open...");
file_menu->Append(wxID_CLOSE, "&Close");
if (retVal == wxID_OK) {
int xSize = dialogReconstruction.getXSize();
int ySize = dialogReconstruction.getYSize();
- string optFilterName = dialogReconstruction.getFilterName();
+ wxString optFilterName = dialogReconstruction.getFilterName();
double optFilterParam = dialogReconstruction.getFilterParam();
- string optFilterMethodName = dialogReconstruction.getFilterMethodName();
+ wxString optFilterMethodName = dialogReconstruction.getFilterMethodName();
int optZeropad = dialogReconstruction.getZeropad();
- string optInterpName = dialogReconstruction.getInterpName();
+ wxString optInterpName = dialogReconstruction.getInterpName();
int optInterpParam = dialogReconstruction.getInterpParam();
- string optBackprojectName = dialogReconstruction.getBackprojName();
+ wxString optBackprojectName = dialogReconstruction.getBackprojName();
if (xSize > 0 && ySize > 0) {
ImageFileDocument* pReconDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
ImageFile& imageFile = pReconDoc->getImageFile();
pReconDoc->Modify(true);
pReconDoc->UpdateAllViews(this);
ostringstream os;
- os << "Reconstruct " << rProj.getFilename() << ": xSize=" << xSize << ", ySize=" << ySize << ", Filter=" << optFilterName << ", FilterParam=" << optFilterParam << ", FilterMethod=" << optFilterMethodName << ", Zeropad=" << optZeropad << ", Interpolation=" << optInterpName << ", InterpolationParam=" << optInterpParam << ", Backprojection=" << optBackprojectName << "\n";
+ os << "Reconstruct " << rProj.getFilename() << ": xSize=" << xSize << ", ySize=" << ySize << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << optFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", Zeropad=" << optZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << optInterpParam << ", Backprojection=" << optBackprojectName.c_str() << "\n";
*theApp->getLog() << os.str().c_str();
}
}
wxMenu *file_menu = new wxMenu;
- file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "&Create Phantom...");
+ file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
file_menu->Append(wxID_OPEN, "&Open...");
file_menu->Append(wxID_CLOSE, "&Close");
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: phm2if.cpp,v 1.1 2000/07/13 07:01:35 kevin Exp $
+** $Id: phm2if.cpp,v 1.2 2000/07/20 11:17:31 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
opt_debug = 1;
break;
case O_TRACE:
- if ((opt_trace = convertTraceNameToID(optarg)) == TRACE_INVALID) {
+ if ((opt_trace = TraceLevel::convertTraceNameToID(optarg)) == TRACE_INVALID) {
phm2if_usage(argv[0]);
return (1);
}
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: phm2pj.cpp,v 1.1 2000/07/13 07:01:35 kevin Exp $
+** $Id: phm2pj.cpp,v 1.2 2000/07/20 11:17:31 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
break;
break;
case O_TRACE:
- if ((opt_trace = convertTraceNameToID(optarg)) == TRACE_INVALID) {
+ if ((opt_trace = TraceLevel::convertTraceNameToID(optarg)) == TRACE_INVALID) {
phm2pj_usage(argv[0]);
return (1);
}
** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: pjrec.cpp,v 1.2 2000/07/15 08:36:13 kevin Exp $
+** $Id: pjrec.cpp,v 1.3 2000/07/20 11:17:31 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
optDebug = 1;
break;
case O_TRACE:
- if ((optTrace = convertTraceNameToID(optarg)) == TRACE_INVALID) {
+ if ((optTrace = TraceLevel::convertTraceNameToID(optarg)) == TRACE_INVALID) {
pjrec_usage(argv[0]);
return (1);
}