- double detInc = m_detInc;
- int n_filteredProj = m_nDet * interpFactor;
- double filteredProj [n_filteredProj]; // filtered projections
-
-#ifdef HAVE_BSPLINE_INTERP
- int spline_order = 0, zoom_factor = 0;
- if (interp_type == I_BSPLINE) {
- zoom_factor = interpFactor;
- spline_order = 3;
- zoom_factor = 3;
- n_filteredProj = (m_nDet - 1) * (zoom_factor + 1) + 1;
- }
-#endif
-
- double filterBW = 1. / detInc;
- ProcessSignal processSignal (filterName, filterMethodName, filterBW, m_detInc, m_nDet, filt_param, "spatial", filterGenerationName, zeropad, interpFactor, trace, m_geometry, m_focalLength);
-
- if (processSignal.fail()) {
- sys_error (ERR_SEVERE, "%s [Projections::reconstruct]", processSignal.failMessage().c_str());
- return false;
- }
-
- if (trace)
- cout << "Reconstruct: filter="<<filterName<< ", interp="<<interpName<<", backproject="<<backprojectName<<endl;
-
-#if HAVE_SGP
- int nVecFilter = processSignal.getNFilterPoints();
- double plot_xaxis [nVecFilter]; // array for plotting
-
- if (trace > Trace::TRACE_CONSOLE && nVecFilter > 0) {
- int i;
- double f;
- double filterInc = processSignal.getFilterIncrement();
- for (i = 0, f = processSignal.getFilterMin(); i < nVecFilter; i++, f += filterInc)
- plot_xaxis[i] = f;
-
- if (processSignal.getFilter()) {
- SGPDriver sgpDriver ("Filter Function");
- SGP sgp (sgpDriver);
- EZPlot ezplot (sgp);
-
- 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 ();
- }
- }
- if (trace >= Trace::TRACE_CONSOLE) {
- printf ("nview=%d, ndet=%d, det_start=%.4f, detInc=%.4f\n", m_nView, m_nDet, m_detStart, m_detInc);
- }
-#endif //HAVE_SGP
-
- Backprojector bj (*this, im, backprojectName, interpName, interpFactor);
- if (bj.fail()) {
- sys_error (ERR_SEVERE, "%s [Projections::reconstruct]", bj.failMessage().c_str());
- return false;
- }
-
- for (int iview = 0; iview < m_nView; iview++) {
- if (trace >= Trace::TRACE_CONSOLE)
- cout <<"Reconstructing view " << iview << "(last = " << m_nView - 1 << ")\n";
-
- const DetectorArray& darray = getDetectorArray (iview);
- const DetectorValue* detval = darray.detValues();
-
- processSignal.filterSignal (detval, filteredProj);