** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: pjrec.cpp,v 1.6 2000/07/28 08:28:08 kevin Exp $
+** $Id: pjrec.cpp,v 1.10 2000/08/03 09:57:29 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 "timer.h"
-enum {O_INTERP, O_FILTER, O_FILTER_METHOD, O_ZEROPAD, O_FILTER_PARAM, O_BACKPROJ, O_PREINTERPOLATION_FACTOR, O_VERBOSE, O_TRACE, O_HELP, O_DEBUG, O_VERSION};
+enum {O_INTERP, O_FILTER, O_FILTER_METHOD, O_ZEROPAD, O_FILTER_PARAM, O_FREQUENCY_FILTER, O_BACKPROJ, O_PREINTERPOLATION_FACTOR, O_VERBOSE, O_TRACE, O_HELP, O_DEBUG, O_VERSION};
static struct option my_options[] =
{
{"filter", 1, 0, O_FILTER},
{"filter-method", 1, 0, O_FILTER_METHOD},
{"zeropad", 1, 0, O_ZEROPAD},
+ {"frequency-filter", 1, 0, O_FREQUENCY_FILTER},
{"filter-param", 1, 0, O_FILTER_PARAM},
{"backproj", 1, 0, O_BACKPROJ},
{"trace", 1, 0, O_TRACE},
{0, 0, 0, 0}
};
+static const char* g_szIdStr = "$Id: pjrec.cpp,v 1.10 2000/08/03 09:57:29 kevin Exp $";
void
pjrec_usage (const char *program)
cout << " --zeropad n Set zeropad level (default = 0)\n";
cout << " set n to number of powers to two to pad\n";
cout << " --frequency-filter Set type of frequency filter\n";
- cout << " direct Use direct frequency filter\n";
- cout << " ifourier Use inverse fourier transform of spatial filter\n";
+ cout << " direct_frequency Use direct frequency filter\n";
+ cout << " inverse_spatial Use inverse fourier transform of spatial filter\n";
cout << " --backproj Backprojection Method" << endl;
cout << " trig Trigometric functions at every point" << endl;
cout << " table Trigometric functions with precalculated table" << endl;
double optFilterParam = -1;
string optFilterName (SignalFilter::convertFilterIDToName (SignalFilter::FILTER_ABS_BANDLIMIT));
string optFilterMethodName (SignalFilter::convertFilterMethodIDToName (SignalFilter::FILTER_METHOD_CONVOLUTION));
+ string optFrequencyFilterName (SignalFilter::convertFrequencyFilterIDToName (SignalFilter::FREQUENCY_FILTER_INVERSE_SPATIAL));
string optInterpName (Backprojector::convertInterpIDToName (Backprojector::INTERP_LINEAR));
string optBackprojName (Backprojector::convertBackprojectIDToName (Backprojector::BPROJ_IDIFF3));
int optPreinterpolationFactor = 1;
case O_FILTER_METHOD:
optFilterMethodName = optarg;
break;
- case O_BACKPROJ:
- optBackprojName = optarg;
+ case O_FREQUENCY_FILTER:
+ optFrequencyFilterName = optarg;
break;
case O_FILTER_PARAM:
optFilterParam = strtod(optarg, &endptr);
return(1);
}
break;
+ case O_BACKPROJ:
+ optBackprojName = optarg;
+ break;
case O_VERBOSE:
optVerbose = 1;
break;
break;
case O_VERSION:
#ifdef VERSION
- cout << "Version " << VERSION << endl;
+ cout << "Version " << VERSION << endl << g_szIdStr << endl;
#else
cout << "Unknown version number" << endl;
#endif
#ifdef HAVE_MPI
TimerCollectiveMPI timerReconstruct (mpiWorld.getComm());
- projLocal.reconstruct (*imLocal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace);
+ projLocal.reconstruct (*imLocal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optFrequencyFilterName.c_str(), optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace);
if (optVerbose)
timerReconstruct.timerEndAndReport ("Time to reconstruct");
if (optVerbose)
timerReduce.timerEndAndReport ("Time to reduce image");
#else
- projGlobal.reconstruct (*imGlobal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace);
+ projGlobal.reconstruct (*imGlobal, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeroPad, optFrequencyFilterName.c_str(), optInterpName.c_str(), optPreinterpolationFactor, optBackprojName.c_str(), optTrace);
#endif
#ifdef HAVE_MPI