r96: *** empty log message ***
[ctsim.git] / src / phm2rs.cpp
index f87f3016b2e5a0f108d5bf60de43839924ac8c68..04593493f8d7ab8f9d477dc405922037f2b703f5 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: phm2rs.cpp,v 1.5 2000/06/13 16:20:31 kevin Exp $
+**  $Id: phm2rs.cpp,v 1.6 2000/06/15 19:07: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
@@ -87,12 +87,12 @@ void GatherProjectionsMPI (MPIWorld& mpiWorld, RAYSUM *rsGlobal, RAYSUM *rsLocal
 int 
 phm2rs_main (int argc, char* argv[])
 {
-  DETECTOR *det;
-  PHANTOM *phm = NULL;
+  Detector *det;
+  Phantom phm;
   RAYSUM *rsGlobal = NULL;
   char *opt_outfile = NULL;
-  char opt_desc[MAXREMARK+1];
-  char opt_phmfilename[256];
+  string opt_desc;
+  string opt_phmfilename;
   char *endptr, *endstr;
   int opt_ndet, opt_nview;
   int opt_nray = 1;
@@ -112,8 +112,6 @@ phm2rs_main (int argc, char* argv[])
 #ifdef HAVE_MPI
   if (mpiWorld.getRank() == 0) {
 #endif
-    strcpy(opt_desc, "");
-    strcpy(opt_phmfilename, "");
     while (1) {
       int c = getopt_long(argc, argv, "", phm2rs_options, NULL);
       char *endptr = NULL;
@@ -128,7 +126,7 @@ phm2rs_main (int argc, char* argv[])
          phm2rs_usage(argv[0]);
          return (1);
        }
-       phm = phm_create (opt_phmnum);
+       phm.create (opt_phmnum);
        break;
       case O_PHMFILE:
 #ifdef HAVE_MPI
@@ -136,8 +134,8 @@ phm2rs_main (int argc, char* argv[])
          cerr << "Can not read phantom from file in MPI mode" << endl;
        return (1);
 #endif
-       strncpy(opt_phmfilename, optarg, sizeof(opt_phmfilename));
-       phm = phm_create_from_file(opt_phmfilename);
+       opt_phmfilename = optarg;
+       phm.createFromFile (opt_phmfilename.c_str());
        break;
       case O_VERBOSE:
        opt_verbose = 1;
@@ -153,7 +151,7 @@ phm2rs_main (int argc, char* argv[])
        }
        break;
       case O_DESC:
-       strncpy(opt_desc, optarg, sizeof(opt_desc));
+       opt_desc = optarg;
        break;
       case O_ROTANGLE:
        opt_rotangle = strtod(optarg, &endptr);
@@ -190,7 +188,7 @@ phm2rs_main (int argc, char* argv[])
       }
     }
   
-    if (phm == NULL) {
+    if (phm.nPElem() == 0) {
       cerr << "No phantom defined" << endl;
       phm2rs_usage(argv[0]);
       return (1);
@@ -216,22 +214,17 @@ phm2rs_main (int argc, char* argv[])
       return (1);
     }
 
-    char str[256];
-    snprintf(str, sizeof(str), 
-            "Raysum_Collect: NDet=%d, Nview=%d, NRay=%d, RotAngle=%.2f, ", 
-            opt_ndet, opt_nview, opt_nray, opt_rotangle);
-    if (opt_phmfilename[0]) {
-      strncat(str, "Phantom=", sizeof(str));
-      strncat(str, opt_phmfilename, sizeof(str));
+    ostringstream desc;
+    desc << "Raysum_Collect: NDet=" << opt_ndet << ", Nview=" << opt_nview << ", NRay=" << opt_nray << ", RotAngle=" << opt_rotangle << ", ";
+    if (opt_phmfilename.length()) {
+      desc << "PhantomFile=" << opt_phmfilename;
     } else if (opt_phmnum != -1) {
-      strncat(str, "Phantom=", sizeof(str));
-      strncat(str, name_of_phantom(opt_phmnum), sizeof(str));
+      desc << "Phantom=" << name_of_phantom(opt_phmnum);
     }
-    if (opt_desc[0]) {
-      strncat(str, ": ", sizeof(str));
-      strncat(str, opt_desc, sizeof(str));
+    if (opt_desc.length()) {
+      desc << ": " << opt_desc;
     }
-    strncpy(opt_desc, str, sizeof(opt_desc));
+    opt_desc = desc.str();
 #ifdef HAVE_MPI
   }
 #endif
@@ -247,27 +240,27 @@ phm2rs_main (int argc, char* argv[])
   mpiWorld.getComm().Bcast (&opt_trace, 1, MPI::INT, 0);
 
   if (mpiWorld.getRank() > 0 && opt_phmnum >= 0)
-    phm = phm_create (opt_phmnum);
+    phm.create (opt_phmnum);
 #endif
 
   opt_rotangle *= PI;
-  det = detector_create (phm, DETECTOR_PARALLEL, opt_ndet, opt_nview, opt_nray, opt_rotangle);
+  det = new Detector (phm, DETECTOR_PARALLEL, opt_ndet, opt_nview, opt_nray, opt_rotangle);
 
 #ifdef HAVE_MPI
   mpiWorld.setTotalWorkUnits (opt_nview);
 
   if (mpiWorld.getRank() == 0) {
-    rsGlobal = raysum_create_from_det (opt_outfile, det);
+    rsGlobal = raysum_create_from_det (opt_outfile, *det);
     raysum_alloc_views(rsGlobal);
   }
   
-  rsLocal = raysum_create_from_det (NULL, det);
+  rsLocal = raysum_create_from_det (NULL, *det);
   rsLocal->nview = mpiWorld.getMyLocalWorkUnits();
   if (opt_debug)
     cout << "rsLocal->nview = " << rsLocal->nview << " (process " << mpiWorld.getRank() << ")" << endl;;
 
   TimerMPI timerProject (mpiWorld.getComm());
-  raysum_collect (rsLocal, det, phm, mpiWorld.getMyStartWorkUnit(), opt_trace, FALSE);
+  raysum_collect (rsLocal, *det, phm, mpiWorld.getMyStartWorkUnit(), opt_trace, FALSE);
   if (opt_verbose)
     timerProject.timerEndAndReport ("Time to collect projections");
 
@@ -276,8 +269,8 @@ phm2rs_main (int argc, char* argv[])
   if (opt_verbose)
     timerGather.timerEndAndReport ("Time to gather projections");
 #else
-  rsGlobal = raysum_create_from_det (opt_outfile, det);
-  raysum_collect (rsGlobal, det, phm, 0, opt_trace, FALSE);
+  rsGlobal = raysum_create_from_det (opt_outfile, *det);
+  raysum_collect (rsGlobal, *det, phm, 0, opt_trace, FALSE);
 #endif
   
 #ifdef HAVE_MPI
@@ -285,7 +278,7 @@ phm2rs_main (int argc, char* argv[])
 #endif
     {
       rsGlobal->calctime = timerProgram.timerEnd();
-      strncpy (rsGlobal->remark, opt_desc, sizeof(rsGlobal->remark));
+      rsGlobal->remark = opt_desc;
       raysum_write (rsGlobal);
       raysum_close (rsGlobal);
       if (opt_verbose) {
@@ -294,8 +287,7 @@ phm2rs_main (int argc, char* argv[])
       }
     }
 
-  phm_free (phm);
-  detector_free (det);
+  delete det;
 
   return (0);
 }