- Backproject* bj = NULL;
-
- if (bjType == O_BPROJ_TRIG)
- bj = static_cast<Backproject*>(new BackprojectTrig (proj, im, interpType));
- else if (bjType == O_BPROJ_TABLE)
- bj = static_cast<Backproject*>(new BackprojectTable (proj, im, interpType));
- else if (bjType == O_BPROJ_DIFF)
- bj = static_cast<Backproject*>(new BackprojectDiff (proj, im, interpType));
- else if (bjType == O_BPROJ_DIFF2)
- bj = static_cast<Backproject*>(new BackprojectDiff2 (proj, im, interpType));
- else if (bjType == O_BPROJ_IDIFF2)
- bj = static_cast<Backproject*>(new BackprojectIntDiff2 (proj, im, interpType));
- else
- sys_error (ERR_WARNING, "Illegal backproject type %d [selectBackprojector]");
-
- return (bj);
+ m_nameBackproject = backprojName;
+ m_nameInterpolation = interpName;
+ m_idBackproject = convertBackprojectNameToID (backprojName);
+ m_idInterpolation = convertInterpolationNameToID (interpName);
+ m_pBackprojectImplem = NULL;
+
+ if (m_idBackproject == BPROJ_INVALID || m_idInterpolation == INTERP_INVALID) {
+ m_fail = true;
+ return false;
+ }
+
+ if (m_idBackproject == BPROJ_TRIG)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectTrig (proj, im, m_idInterpolation));
+ else if (m_idBackproject == BPROJ_TABLE)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectTable (proj, im, m_idInterpolation));
+ else if (m_idBackproject == BPROJ_DIFF)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectDiff (proj, im, m_idInterpolation));
+ else if (m_idBackproject == BPROJ_DIFF2)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectDiff2 (proj, im, m_idInterpolation));
+ else if (m_idBackproject == BPROJ_IDIFF2)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectIntDiff2 (proj, im, m_idInterpolation));
+ else {
+ m_fail = true;
+ return false;
+ }
+
+ return true;
+}
+
+
+const Backprojector::BackprojectID
+Backprojector::convertBackprojectNameToID (const char* const backprojName)
+{
+ BackprojectID backprojID = BPROJ_INVALID;
+
+ if (strcasecmp (backprojName, BPROJ_TRIG_STR) == 0)
+ backprojID = BPROJ_TRIG;
+ else if (strcasecmp (backprojName, BPROJ_TABLE_STR) == 0)
+ backprojID = BPROJ_TABLE;
+ else if (strcasecmp (backprojName, BPROJ_DIFF_STR) == 0)
+ backprojID = BPROJ_DIFF;
+ else if (strcasecmp (backprojName, BPROJ_DIFF2_STR) == 0)
+ backprojID = BPROJ_DIFF2;
+ else if (strcasecmp (backprojName, BPROJ_IDIFF2_STR) == 0)
+ backprojID = BPROJ_IDIFF2;
+
+ return (backprojID);
+}
+
+const char*
+Backprojector::convertBackprojectIDToName (const BackprojectID bprojID)
+{
+ const char *bprojName = "";
+
+ if (bprojID == BPROJ_TRIG)
+ bprojName = BPROJ_TRIG_STR;
+ else if (bprojID == BPROJ_TABLE)
+ bprojName = BPROJ_TABLE_STR;
+ else if (bprojID == BPROJ_DIFF)
+ bprojName = BPROJ_DIFF_STR;
+ else if (bprojID == BPROJ_DIFF2)
+ bprojName = BPROJ_DIFF2_STR;
+ else if (bprojID == BPROJ_IDIFF2)
+ bprojName = BPROJ_IDIFF2_STR;
+
+ return (bprojName);
+}
+
+
+
+const Backprojector::InterpolationID
+Backprojector::convertInterpolationNameToID (const char* const interpName)
+{
+ InterpolationID interpID = INTERP_INVALID;
+
+ if (strcasecmp (interpName, INTERP_NEAREST_STR) == 0)
+ interpID = INTERP_NEAREST;
+ else if (strcasecmp (interpName, INTERP_LINEAR_STR) == 0)
+ interpID = INTERP_LINEAR;
+#if HAVE_BSPLINE_INTERP
+ else if (strcasecmp (interpName, INTERP_BSPLINE_STR) == 0)
+ interpID = INTERP_BSPLINE;
+#endif
+
+ return (interpID);
+}
+
+
+/* NAME
+ * name_of_interp Return name of interpolation method
+ *
+ * SYNOPSIS
+ * name = name_of_interp (interp_type)
+ * char *name Name of interpolation method
+ * int interp_type Method of interpolation
+ *
+ * NOTES
+ * Returns NULL if interp_type is invalid
+ */
+
+const char*
+Backprojector::convertInterpolationIDToName (const InterpolationID interpID)
+{
+ if (interpID == INTERP_NEAREST)
+ return (INTERP_NEAREST_STR);
+ else if (interpID == INTERP_LINEAR)
+ return (INTERP_LINEAR_STR);
+#if HAVE_BSPLINE_INTERP
+ else if (interpID == INTERP_BSPLINE)
+ return (INTERP_BSPLINE_STR);
+#endif
+ else
+ return ("");