** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: phm2pj.cpp,v 1.10 2000/08/25 15:59:13 kevin Exp $
+** $Id: phm2pj.cpp,v 1.16 2000/11/24 12:08:10 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.10 2000/08/25 15:59:13 kevin Exp $";
+static const char* g_szIdStr = "$Id: phm2pj.cpp,v 1.16 2000/11/24 12:08:10 kevin Exp $";
void
{
cout << "usage: " << fileBasename(program) << " outfile ndet nview [--phantom phantom-name] [--phmfile filename] [OPTIONS]\n";
cout << "Calculate (projections) through phantom object, either a predefined --phantom or a --phmfile\n\n";
- cout << " outfile Name of output file for raysums\n";
+ cout << " outfile Name of output file for projections\n";
cout << " ndet Number of detectors\n";
cout << " nview Number of rotated views\n";
cout << " --phantom Phantom to use for projection\n";
cout << " --nray Number of rays per detector (default = 1)\n";
cout << " --rotangle Degrees to rotate view through (multiple of PI)\n";
cout << " (default = 1)\n";
+ cout << " --geometry Geometry of scanning\n";
+ cout << " parallel Parallel scan beams (default)\n";
+ cout << " equilinear Equilinear divergent scan beams\n";
+ cout << " equiangular Equiangular divergent scan beams\n";
cout << " --focal-length Focal length ratio (ratio to radius of phantom)\n";
cout << " (default = 1)\n";
cout << " --field-of-view Field of view (ratio to diameter of phantom square)\n";
cout << " (default = 1)\n";
cout << " --trace Trace level to use\n";
cout << " none No tracing (default)\n";
- cout << " text Trace text level\n";
- cout << " phm Trace phantom image\n";
- cout << " rays Trace rays\n";
+ cout << " console Trace text level\n";
+ cout << " phantom Trace phantom image\n";
+ cout << " proj Trace projections\n";
cout << " plot Trace plot\n";
cout << " clipping Trace clipping\n";
cout << " --verbose Verbose mode\n";
string optGeometryName = Scanner::convertGeometryIDToName(Scanner::GEOMETRY_PARALLEL);
char *opt_outfile = NULL;
string opt_desc;
+ string optPhmName;
string optPhmFileName;
int opt_ndet;
int opt_nview;
int opt_nray = 1;
double dOptFocalLength = 1.;
double dOptFieldOfView = 1.;
- int opt_trace = 0;
- string optPhmName (Phantom::convertPhantomIDToName(Phantom::PHM_HERMAN));
+ int opt_trace = Trace::TRACE_NONE;
int opt_verbose = 0;
int opt_debug = 0;
double opt_rotangle = 1;
break;
break;
case O_TRACE:
- if ((opt_trace = TraceLevel::convertTraceNameToID(optarg)) == TRACE_INVALID) {
+ if ((opt_trace = Trace::convertTraceNameToID(optarg)) == Trace::TRACE_INVALID) {
phm2pj_usage(argv[0]);
return (1);
}
}
ostringstream desc;
- desc << "phm2pj: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << ", ";
+ desc << "phm2pj: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << ", Geometry=" << optGeometryName << ", ";
if (optPhmFileName.length()) {
desc << "PhantomFile=" << optPhmFileName;
} else if (optPhmName != "") {
if (mpiWorld.getRank() == 0)
pjGlobal.initFromScanner (scanner);
- if (opt_verbose)
- pjGlobal.printScanInfo();
+ if (opt_verbose) {
+ ostringstream os;
+ pjGlobal.printScanInfo(os);
+ cout << os.str();
+ }
Projections pjLocal (scanner);
pjLocal.setNView (mpiWorld.getMyLocalWorkUnits());
#if HAVE_SGP
SGPDriver* pSGPDriver = NULL;
SGP* pSGP = NULL;
- if (opt_trace >= TRACE_PHM) {
+ if (opt_trace >= Trace::TRACE_PHANTOM) {
pSGPDriver = new SGPDriver ("phm2pj", 600, 600);
pSGP = new SGP (*pSGPDriver);
}
scanner.collectProjections (pjGlobal, phm, opt_trace, pSGP);
- if (opt_trace >= TRACE_PHM) {
+ if (opt_trace >= Trace::TRACE_PHANTOM) {
cout << "Press enter to continue\n";
cio_kb_getc();
delete pSGP; pSGP = NULL;
if (opt_verbose) {
phm.print();
cout << endl;
- pjGlobal.printScanInfo();
- cout << endl;
+ ostringstream os;
+ pjGlobal.printScanInfo (os);
+ cout << os.str() << endl;
cout << " Remark: " << pjGlobal.remark() << endl;
cout << "Run time: " << pjGlobal.calcTime() << " seconds\n";
}