r184: *** empty log message ***
[ctsim.git] / libctsim / projections.cpp
index 35d8418a070edd3029684246f8e8eea645d1ffff..df7ccd2b03b380372eea0124e471aa8711066cd0 100644 (file)
@@ -8,7 +8,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: projections.cpp,v 1.16 2000/07/28 08:28:08 kevin Exp $
+**  $Id: projections.cpp,v 1.22 2000/08/25 15:59:13 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
@@ -81,8 +81,7 @@ Projections::initFromScanner (const Scanner& scanner)
   m_rotInc = scanner.rotInc();
   m_detInc = scanner.detInc();
   m_rotStart = 0;
-  m_detStart =  -scanner.radius() + (scanner.detInc() / 2);
-  m_phmLen = scanner.phmLen();
+  m_detStart =  -(scanner.detLen() / 2) + (scanner.detInc() / 2);
 }
 
 void
@@ -486,7 +485,7 @@ Projections::printScanInfo (void) const
  */
 
 bool
-Projections::reconstruct (ImageFile& im, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* const interpName, int interpFactor, const char* const backprojectName, const int trace) const
+Projections::reconstruct (ImageFile& im, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* filterGenerationName, const char* const interpName, int interpFactor, const char* const backprojectName, const int trace) const
 {
   double detInc = m_detInc;
   int n_filteredProj = m_nDet * interpFactor;
@@ -503,11 +502,10 @@ Projections::reconstruct (ImageFile& im, const char* const filterName, double fi
 #endif
 
   double filterBW = 1. / detInc;
-  SignalFilter filter (filterName, filterMethodName, filterBW, m_detInc, m_nDet, filt_param, "spatial", zeropad, interpFactor);
-  filter.setTraceLevel(trace);
+  ProcessSignal processSignal (filterName, filterMethodName, filterBW, m_detInc, m_nDet, filt_param, "spatial", filterGenerationName, zeropad, interpFactor, trace);
 
-  if (filter.fail()) {
-      sys_error (ERR_SEVERE, "%s [Projections::reconstruct]", filter.failMessage().c_str());
+  if (processSignal.fail()) {
+      sys_error (ERR_SEVERE, "%s [Projections::reconstruct]", processSignal.failMessage().c_str());
       return false;
   }
 
@@ -515,22 +513,24 @@ Projections::reconstruct (ImageFile& im, const char* const filterName, double fi
     cout << "Reconstruct: filter="<<filterName<< ", interp="<<interpName<<", backproject="<<backprojectName<<endl;
 
 #if HAVE_SGP
-  int nVecFilter = filter.getNFilterPoints();
+  int nVecFilter = processSignal.getNFilterPoints();
   double plot_xaxis [nVecFilter];                      // array for plotting 
 
   if (trace > TRACE_TEXT && nVecFilter > 0)  {
     int i;
     double f;
-    double filterInc = filter.getFilterIncrement();
-    for (i = 0, f = filter.getFilterMin(); i < nVecFilter; i++, f += filterInc)
+    double filterInc = processSignal.getFilterIncrement();
+    for (i = 0, f = processSignal.getFilterMin(); i < nVecFilter; i++, f += filterInc)
       plot_xaxis[i] = f;
 
-    if (filter.getFilter()) {
+    if (processSignal.getFilter()) {
       SGPDriver sgpDriver ("Filter Function");
       SGP sgp (sgpDriver);
       EZPlot ezplot (sgp);
 
-      ezplot.addCurve (plot_xaxis, filter.getFilter(), nVecFilter);
+      ezplot.ezset ("title Filter Response");
+      ezplot.addCurve (plot_xaxis, processSignal.getFilter(), nVecFilter);
+      ezplot.plot();
       cio_put_str ("Press any key to continue");
       cio_kb_getc ();
     }
@@ -553,55 +553,51 @@ Projections::reconstruct (ImageFile& im, const char* const filterName, double fi
     const DetectorArray& darray = getDetectorArray (iview);
     const DetectorValue* detval = darray.detValues();
 
-    filter.filterSignal (detval, filteredProj);
+    processSignal.filterSignal (detval, filteredProj);
+
+#ifdef HAVE_BSPLINE_INTERP
+    if (interp_type == I_BSPLINE) 
+       bspline (m_nDet, zoom_factor, spline_order, filteredProj, filteredProj);
+    
+#ifdef HAVE_SGP
+    if (trace >= TRACE_PLOT && interp_type == I_BSPLINE) {
+       bspline (m_nDet, zoom_factor, spline_order, filteredProj, filteredProj);
+      ezplot_1d (filteredProj, n_filteredProj);
+    }
+#endif
+#endif
+
+    bj.BackprojectView (filteredProj, darray.viewAngle());
 
 #ifdef HAVE_SGP
-    if (trace >= TRACE_PLOT)  {
+    if (trace >= TRACE_PLOT) {
       SGPDriver sgpDriverProj ("Projection");
       SGP sgpProj (sgpDriverProj);
       EZPlot ezplotProj (sgpProj);
 
       ezplotProj.ezset  ("clear");
+      ezplotProj.ezset ("title Filtered Projection");
       ezplotProj.ezset  ("xticks major 5.");
       ezplotProj.ezset  ("xlabel ");
       ezplotProj.ezset  ("ylabel ");
-      ezplotProj.ezset  ("xlength .5.");
+      ezplotProj.ezset  ("yporigin .5.");
+      ezplotProj.ezset  ("ylength .5.");
       ezplotProj.ezset  ("box.");
       ezplotProj.ezset  ("grid.");
-      ezplotProj.addCurve (detval, plot_xaxis, m_nDet);
-      ezplotProj.ezset  ("clear.");
+      ezplotProj.addCurve (plot_xaxis, detval, m_nDet);
+      ezplotProj.plot();
+      ezplotProj.ezset  ("clear");
       ezplotProj.ezset  ("xticks major 5.");
       ezplotProj.ezset  ("xlabel ");
       ezplotProj.ezset  ("ylabel ");
-      ezplotProj.ezset  ("xporigin .5.");
-      ezplotProj.ezset  ("xlength .5.");
+      ezplotProj.ezset  ("ylength .5.");
       ezplotProj.ezset ("box");
       ezplotProj.ezset ("grid");
-      ezplotProj.addCurve (filteredProj, plot_xaxis, n_filteredProj);
-      ezplotProj.plot ();
-      cout << "Press enter to continue\n";
-      cio_kb_getc();
-    }
-#endif  //HAVE_SGP
+      ezplotProj.addCurve (plot_xaxis, filteredProj,  n_filteredProj);
+      ezplotProj.plot();
 
-#ifdef HAVE_BSPLINE_INTERP
-    if (interp_type == I_BSPLINE) 
-       bspline (m_nDet, zoom_factor, spline_order, filteredProj, filteredProj);
-    
-#ifdef HAVE_SGP
-    if (trace >= TRACE_PLOT && interp_type == I_BSPLINE) {
-       bspline (m_nDet, zoom_factor, spline_order, filteredProj, filteredProj);
-      ezplot_1d (filteredProj, n_filteredProj);
-    }
-#endif
-#endif
-
-    bj.BackprojectView (filteredProj, darray.viewAngle());
-
-#ifdef HAVE_SGP
-    if (trace >= TRACE_PLOT) {
+      cout << "Do you want to exit with current pic (y/n)? " << flush;
       char str[256];
-      printf ("Do you want to exit with current pic (y/n) -- ");
       fgets(str, sizeof(str), stdin);
       if (tolower(str[0]) == 'y') {
        break;