Update copyright date; remove old CVS keyword
[ctsim.git] / tools / phm2pj.cpp
index ffa7ec269935a7377f50ad10009175b8241f409f..1b08de1c8071785f5f546f4f32288766d586a743 100644 (file)
@@ -7,9 +7,7 @@
 **   Date Started:  1984
 **
 **  This is part of the CTSim program
-**  Copyright (C) 1983-2000 Kevin Rosenberg
-**
-**  $Id: phm2pj.cpp,v 1.31 2001/09/24 09:40:42 kevin Exp $
+**  Copyright (C) 1983-2009 Kevin Rosenberg
 **
 **  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
@@ -32,7 +30,7 @@
 enum { O_PHANTOM, O_DESC, O_NRAY, O_ROTANGLE, O_PHMFILE, O_GEOMETRY, O_FOCAL_LENGTH, O_CENTER_DETECTOR_LENGTH,
 O_VIEW_RATIO, O_SCAN_RATIO, O_OFFSETVIEW, O_TRACE, O_VERBOSE, O_HELP, O_DEBUG, O_VERSION };
 
-static struct option phm2pj_options[] = 
+static struct option phm2pj_options[] =
 {
   {"phantom", 1, 0, O_PHANTOM},
   {"phmfile", 1, 0, O_PHMFILE},
@@ -53,10 +51,10 @@ static struct option phm2pj_options[] =
   {0, 0, 0, 0}
 };
 
-static const char* g_szIdStr = "$Id: phm2pj.cpp,v 1.31 2001/09/24 09:40:42 kevin Exp $";
+static const char* g_szIdStr = "$Id$";
 
 
-void 
+void
 phm2pj_usage (const char *program)
 {
   std::cout << "usage: " << fileBasename(program) << " outfile ndet nview [--phantom phantom-name] [--phmfile filename] [OPTIONS]\n";
@@ -89,10 +87,6 @@ phm2pj_usage (const char *program)
   std::cout << "     --trace          Trace level to use\n";
   std::cout << "        none          No tracing (default)\n";
   std::cout << "        console       Trace text level\n";
-  std::cout << "        phantom       Trace phantom image\n";
-  std::cout << "        proj          Trace projections\n";
-  std::cout << "        plot          Trace plot\n";
-  std::cout << "        clipping      Trace clipping\n";
   std::cout << "     --verbose        Verbose mode\n";
   std::cout << "     --debug          Debug mode\n";
   std::cout << "     --version        Print version\n";
@@ -103,7 +97,7 @@ phm2pj_usage (const char *program)
 void GatherProjectionsMPI (MPIWorld& mpiWorld, Projections& pjGlobal, Projections& pjLocal, const int opt_debug);
 #endif
 
-int 
+int
 phm2pj_main (int argc, char* const argv[])
 {
   Phantom phm;
@@ -126,22 +120,22 @@ phm2pj_main (int argc, char* const argv[])
   double opt_rotangle = -1;
   char* endptr = NULL;
   char* endstr;
-  
+
 #ifdef HAVE_MPI
   MPIWorld mpiWorld (argc, argv);
 #endif
-  
+
   Timer timerProgram;
-  
+
 #ifdef HAVE_MPI
   if (mpiWorld.getRank() == 0) {
 #endif
     while (1) {
       int c = getopt_long(argc, argv, "", phm2pj_options, NULL);
-      
+
       if (c == -1)
         break;
-      
+
       switch (c) {
       case O_PHANTOM:
         optPhmName = optarg;
@@ -222,15 +216,15 @@ phm2pj_main (int argc, char* const argv[])
           return (1);
         }
         break;
-         case O_OFFSETVIEW:
-               opt_offsetview = strtol(optarg, &endptr, 10);
-               endstr = optarg + strlen(optarg);
-               if (endptr != endstr) { 
-                 std::cerr << "Error setting --offsetview to %s" << optarg << std::endl;
-                 phm2pj_usage(argv[0]);
-                 return (1);
-               }
-               break;
+          case O_OFFSETVIEW:
+                opt_offsetview = strtol(optarg, &endptr, 10);
+                endstr = optarg + strlen(optarg);
+                if (endptr != endstr) {
+                  std::cerr << "Error setting --offsetview to %s" << optarg << std::endl;
+                  phm2pj_usage(argv[0]);
+                  return (1);
+                }
+                break;
 
       case O_VERSION:
 #ifdef VERSION
@@ -248,7 +242,7 @@ phm2pj_main (int argc, char* const argv[])
         return (1);
       }
     }
-    
+
     if (optPhmName == "" && optPhmFileName == "") {
       std::cerr << "No phantom defined\n" << std::endl;
       phm2pj_usage(argv[0]);
@@ -258,7 +252,7 @@ phm2pj_main (int argc, char* const argv[])
       phm2pj_usage(argv[0]);
       return (1);
     }
-    
+
     opt_outfile = argv[optind];
     opt_ndet = strtol(argv[optind+1], &endptr, 10);
     endstr = argv[optind+1] + strlen(argv[optind+1]);
@@ -274,14 +268,14 @@ phm2pj_main (int argc, char* const argv[])
       phm2pj_usage(argv[0]);
       return (1);
     }
-    
+
     if (opt_rotangle < 0) {
       if (optGeometryName.compare ("parallel") == 0)
         opt_rotangle = 0.5;
       else
         opt_rotangle = 1.0;
     }
-    
+
     std::ostringstream desc;
     desc << "phm2pj: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << "OffsetView =" << opt_offsetview << ", Geometry=" << optGeometryName << ", ";
     if (optPhmFileName.length()) {
@@ -293,7 +287,7 @@ phm2pj_main (int argc, char* const argv[])
       desc << ": " << opt_desc;
     }
     opt_desc = desc.str();
-    
+
     if (optPhmName != "") {
       phm.createFromPhantom (optPhmName.c_str());
       if (phm.fail()) {
@@ -302,7 +296,7 @@ phm2pj_main (int argc, char* const argv[])
         return (1);
       }
     }
-    
+
     if (optPhmFileName != "") {
 #ifdef HAVE_MPI
       std::cerr << "Can not read phantom from file in MPI mode\n";
@@ -310,11 +304,11 @@ phm2pj_main (int argc, char* const argv[])
 #endif
       phm.createFromFile (optPhmFileName.c_str());
     }
-    
+
 #ifdef HAVE_MPI
   }
 #endif
-  
+
 #ifdef HAVE_MPI
   TimerCollectiveMPI timerBcast(mpiWorld.getComm());
   mpiWorld.BcastString (optPhmName);
@@ -331,54 +325,54 @@ phm2pj_main (int argc, char* const argv[])
   mpiWorld.getComm().Bcast (&opt_trace, 1, MPI::INT, 0);
   if (opt_verbose)
     timerBcast.timerEndAndReport ("Time to broadcast variables");
-  
+
   if (mpiWorld.getRank() > 0 && optPhmName != "")
     phm.createFromPhantom (optPhmName.c_str());
 #endif
-  
+
   opt_rotangle *= TWOPI;
-  Scanner scanner (phm, optGeometryName.c_str(), opt_ndet, opt_nview, opt_offsetview, opt_nray, 
-               opt_rotangle, dOptFocalLength, dOptCenterDetectorLength, dOptViewRatio, dOptScanRatio);
+  Scanner scanner (phm, optGeometryName.c_str(), opt_ndet, opt_nview, opt_offsetview, opt_nray,
+                opt_rotangle, dOptFocalLength, dOptCenterDetectorLength, dOptViewRatio, dOptScanRatio);
   if (scanner.fail()) {
     std::cout << "Scanner Creation Error: " << scanner.failMessage() << std::endl;
     return (1);
   }
 #ifdef HAVE_MPI
   mpiWorld.setTotalWorkUnits (opt_nview);
-  
+
   Projections pjGlobal;
   if (mpiWorld.getRank() == 0)
     pjGlobal.initFromScanner (scanner);
-  
+
   if (opt_verbose) {
     std::ostringstream os;
     pjGlobal.printScanInfo(os);
     std::cout << os.str();
   }
-  
+
   Projections pjLocal (scanner);
   pjLocal.setNView (mpiWorld.getMyLocalWorkUnits());
-  
+
   if (opt_debug)
     std::cout << "pjLocal->nview = " << pjLocal.nView() << " (process " << mpiWorld.getRank() << ")\n";;
-  
+
   TimerCollectiveMPI timerProject (mpiWorld.getComm());
   scanner.collectProjections (pjLocal, phm, mpiWorld.getMyStartWorkUnit(), mpiWorld.getMyLocalWorkUnits(), false, opt_trace);
   if (opt_verbose)
     timerProject.timerEndAndReport ("Time to collect projections");
-  
+
   TimerCollectiveMPI timerGather (mpiWorld.getComm());
   GatherProjectionsMPI (mpiWorld, pjGlobal, pjLocal, opt_debug);
-  if (opt_verbose) 
+  if (opt_verbose)
     timerGather.timerEndAndReport ("Time to gather projections");
-  
+
 #else
   Projections pjGlobal (scanner);
   scanner.collectProjections (pjGlobal, phm, 0, opt_nview, opt_offsetview, true, opt_trace);
 #endif
-  
+
 #ifdef HAVE_MPI
-  if (mpiWorld.getRank() == 0) 
+  if (mpiWorld.getRank() == 0)
 #endif
   {
     pjGlobal.setCalcTime (timerProgram.timerEnd());
@@ -394,7 +388,7 @@ phm2pj_main (int argc, char* const argv[])
       std::cout << "Run time: " << pjGlobal.calcTime() << " seconds\n";
     }
   }
-  
+
   return (0);
 }
 
@@ -414,12 +408,12 @@ void GatherProjectionsMPI (MPIWorld& mpiWorld, Projections& pjGlobal, Projection
     double viewAngle = detArray.viewAngle();
     int nDet = detArray.nDet();
     DetectorValue* detval = detArray.detValues();
-    
+
     mpiWorld.getComm().Send(&viewAngle, 1, MPI::DOUBLE, 0, 0);
     mpiWorld.getComm().Send(&nDet, 1, MPI::INT, 0, 0);
     mpiWorld.getComm().Send(detval, nDet, MPI::FLOAT, 0, 0);
   }
-  
+
   if (mpiWorld.getRank() == 0) {
     for (int iProc = 0; iProc < mpiWorld.getNumProcessors(); iProc++) {
       for (int iw = mpiWorld.getStartWorkUnit(iProc); iw <= mpiWorld.getEndWorkUnit(iProc); iw++) {
@@ -428,7 +422,7 @@ void GatherProjectionsMPI (MPIWorld& mpiWorld, Projections& pjGlobal, Projection
         int nDet;
         DetectorArray& detArray = pjGlobal.getDetectorArray(iw);
         DetectorValue* detval = detArray.detValues();
-        
+
         mpiWorld.getComm().Recv(&viewAngle, 1, MPI::DOUBLE, iProc, 0, status);
         mpiWorld.getComm().Recv(&nDet, 1, MPI::INT, iProc, 0, status);
         mpiWorld.getComm().Recv(detval, nDet, MPI::FLOAT, iProc, 0, status);
@@ -441,11 +435,11 @@ void GatherProjectionsMPI (MPIWorld& mpiWorld, Projections& pjGlobal, Projection
 
 
 #ifndef NO_MAIN
-int 
+int
 main (int argc, char* argv[])
 {
   int retval = 1;
-  
+
   try {
     retval = phm2pj_main(argc, argv);
 #if HAVE_DMALLOC
@@ -456,7 +450,7 @@ main (int argc, char* argv[])
   } catch (...) {
     std::cerr << "Unknown exception\n";
   }
-  
+
   return (retval);
 }
 #endif