-const char Backprojector::BPROJ_TRIG_STR[]= "trig";
-const char Backprojector::BPROJ_TABLE_STR[]= "table";
-const char Backprojector::BPROJ_DIFF_STR[]= "diff";
-const char Backprojector::BPROJ_DIFF2_STR[]= "diff2";
-const char Backprojector::BPROJ_IDIFF2_STR[]= "idiff2";
-const char Backprojector::BPROJ_IDIFF3_STR[]= "idiff3";
-
-const char Backprojector::BPROJ_TRIG_TITLE_STR[]= "Direc Trigometric";
-const char Backprojector::BPROJ_TABLE_TITLE_STR[]= "Trig Table";
-const char Backprojector::BPROJ_DIFF_TITLE_STR[]= "Diff";
-const char Backprojector::BPROJ_DIFF2_TITLE_STR[]= "Diff2";
-const char Backprojector::BPROJ_IDIFF2_TITLE_STR[]= "Integer Diff2";
-const char Backprojector::BPROJ_IDIFF3_TITLE_STR[]= "Integer Diff3";
-
-const char Backprojector::INTERP_NEAREST_STR[]= "nearest";
-const char Backprojector::INTERP_LINEAR_STR[]= "linear";
-const char Backprojector::INTERP_BSPLINE_STR[]= "bspline";
-const char Backprojector::INTERP_FREQ_PREINTERPOLATION_STR[]= "freq_preinterpolation";
-
-const char Backprojector::INTERP_NEAREST_TITLE_STR[]= "Nearest";
-const char Backprojector::INTERP_LINEAR_TITLE_STR[]= "Linear";
-const char Backprojector::INTERP_BSPLINE_TITLE_STR[]= "B-Spline";
-const char Backprojector::INTERP_FREQ_PREINTERPOLATION_TITLE_STR[]= "Frequency Preinterpolation";
-
-
-Backprojector::Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor)
+const int Backprojector::BPROJ_INVALID = -1;
+const int Backprojector::BPROJ_TRIG = 0;
+const int Backprojector::BPROJ_TABLE = 1;
+const int Backprojector::BPROJ_DIFF = 2;
+const int Backprojector::BPROJ_IDIFF = 3;
+
+const char* const Backprojector::s_aszBackprojectName[] =
+{
+ {"trig"},
+ {"table"},
+ {"diff"},
+ {"idiff"},
+};
+
+const char* const Backprojector::s_aszBackprojectTitle[] =
+{
+ {"Direct Trigometric"},
+ {"Trigometric Table"},
+ {"Difference Iteration"},
+ {"Integer Difference Iteration"},
+};
+
+const int Backprojector::s_iBackprojectCount = sizeof(s_aszBackprojectName) / sizeof(const char*);
+
+const int Backprojector::INTERP_INVALID = -1;
+const int Backprojector::INTERP_NEAREST = 0;
+const int Backprojector::INTERP_LINEAR = 1;
+const int Backprojector::INTERP_CUBIC = 2;
+const int Backprojector::INTERP_FREQ_PREINTERPOLATION = 3;
+#if HAVE_BSPLINE_INTERP
+const int Backprojector::INTERP_BSPLINE = 4;
+const int Backprojector::INTERP_1BSPLINE = 5;
+const int Backprojector::INTERP_2BSPLINE = 6;
+const int Backprojector::INTERP_3BSPLINE = 7;
+#endif
+
+const char* const Backprojector::s_aszInterpName[] =
+{
+ {"nearest"},
+ {"linear"},
+ {"cubic"},
+#if HAVE_FREQ_PREINTERP
+ {"freq_preinterpolationj"},
+#endif
+#if HAVE_BSPLINE_INTERP
+ {"bspline"},
+ {"1bspline"},
+ {"2bspline"},
+ {"3bspline"},
+#endif
+};
+
+const char* const Backprojector::s_aszInterpTitle[] =
+{
+ {"Nearest"},
+ {"Linear"},
+ {"Cubic"},
+#if HAVE_FREQ_PREINTERP
+ {"Frequency Preinterpolation"},
+#endif
+#if HAVE_BSPLINE_INTERP
+ {"B-Spline"},
+ {"B-Spline 1st Order"},
+ {"B-Spline 2nd Order"},
+ {"B-Spline 3rd Order"},
+#endif
+};
+
+const int Backprojector::s_iInterpCount = sizeof(s_aszInterpName) / sizeof(const char*);
+
+
+
+Backprojector::Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName,
+ const char* const interpName, const int interpFactor, const ReconstructionROI* pROI)