+
+#ifndef __BACKPROJECTORS_H
+#define __BACKPROJECTORS_H
+
+#undef HAVE_BSPLINE_INTERP
+
+#include "imagefile.h"
+
+
+class Backproject;
+
+class Backprojector
+{
+ public:
+ typedef enum {
+ BPROJ_INVALID,
+ BPROJ_TRIG,
+ BPROJ_TABLE,
+ BPROJ_DIFF,
+ BPROJ_DIFF2,
+ BPROJ_IDIFF2,
+ BPROJ_IDIFF3
+} BackprojectID;
+
+ typedef enum {
+ INTERP_INVALID,
+ INTERP_NEAREST, // Nearest neighbor
+#if HAVE_BSPLINE_INTERP
+ I_BSPLINE,
+ I_1BSPLINE, // 1st order B-Spline
+ I_2BSPLINE,
+ I_3BSPLINE,
+#endif
+ INTERP_LINEAR, // Linear interpolation
+ INTERP_FREQ_PREINTERPOLATION,
+ } InterpolationID;
+
+ static const char BPROJ_TRIG_STR[];
+ static const char BPROJ_TABLE_STR[];
+ static const char BPROJ_DIFF_STR[];
+ static const char BPROJ_DIFF2_STR[];
+ static const char BPROJ_IDIFF2_STR[];
+ static const char BPROJ_IDIFF3_STR[];
+
+ static const char BPROJ_TRIG_TITLE_STR[];
+ static const char BPROJ_TABLE_TITLE_STR[];
+ static const char BPROJ_DIFF_TITLE_STR[];
+ static const char BPROJ_DIFF2_TITLE_STR[];
+ static const char BPROJ_IDIFF2_TITLE_STR[];
+ static const char BPROJ_IDIFF3_TITLE_STR[];
+
+ static const char INTERP_NEAREST_STR[];
+ static const char INTERP_LINEAR_STR[];
+ static const char INTERP_BSPLINE_STR[];
+ static const char INTERP_FREQ_PREINTERPOLATION_STR[];
+
+ static const char INTERP_NEAREST_TITLE_STR[];
+ static const char INTERP_LINEAR_TITLE_STR[];
+ static const char INTERP_BSPLINE_TITLE_STR[];
+ static const char INTERP_FREQ_PREINTERPOLATION_TITLE_STR[];
+
+ Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+
+ ~Backprojector (void);
+
+ void BackprojectView (const double* const viewData, const double viewAngle);
+
+ bool fail(void) const {return m_fail;}
+ const string& failMessage(void) const {return m_failMessage;}
+
+ private:
+ string m_nameBackproject;
+ string m_nameInterpolation;
+ BackprojectID m_idBackproject;
+ InterpolationID m_idInterpolation;
+ Backproject* m_pBackprojectImplem;
+ bool m_fail;
+ string m_failMessage;
+
+ static const InterpolationID convertInterpolationNameToID (const char* const interpName);
+ static const char* convertInterpolationIDToName (const InterpolationID interpID);
+ static const BackprojectID convertBackprojectNameToID (const char* const bprojName);
+ static const char* convertBackprojectIDToName (const BackprojectID bprojID);
+
+ bool initBackprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+};
+
+