+bool
+Backprojector::initBackprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor)
+{
+ m_nameBackproject = backprojName;
+ m_nameInterpolation = interpName;
+ m_pBackprojectImplem = NULL;
+ m_idBackproject = convertBackprojectNameToID (backprojName);
+ if (m_idBackproject == BPROJ_INVALID) {
+ m_fail = true;
+ m_failMessage = "Invalid backprojection name ";
+ m_failMessage += backprojName;
+ }
+ m_idInterpolation = convertInterpolationNameToID (interpName);
+ if (m_idInterpolation == INTERP_INVALID) {
+ m_fail = true;
+ m_failMessage = "Invalid interpolation name ";
+ m_failMessage += interpName;
+ }
+
+ if (m_fail || 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, interpFactor));
+ else if (m_idBackproject == BPROJ_TABLE)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectTable (proj, im, m_idInterpolation, interpFactor));
+ else if (m_idBackproject == BPROJ_DIFF)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectDiff (proj, im, m_idInterpolation, interpFactor));
+ else if (m_idBackproject == BPROJ_DIFF2)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectDiff2 (proj, im, m_idInterpolation, interpFactor));
+ else if (m_idBackproject == BPROJ_IDIFF2)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectIntDiff2 (proj, im, m_idInterpolation, interpFactor));
+ else if (m_idBackproject == BPROJ_IDIFF3)
+ m_pBackprojectImplem = static_cast<Backproject*>(new BackprojectIntDiff3 (proj, im, m_idInterpolation, interpFactor));
+ else {
+ m_fail = true;
+ m_failMessage = "Unable to select a backprojection method [Backprojector::initBackprojector]";
+ 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;
+ else if (strcasecmp (backprojName, BPROJ_IDIFF3_STR) == 0)
+ backprojID = BPROJ_IDIFF3;
+
+ 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;
+ else if (bprojID == BPROJ_IDIFF3)
+ bprojName = BPROJ_IDIFF3_STR;
+
+ return (bprojName);
+}
+
+
+
+const Backprojector::InterpolationID
+Backprojector::convertInterpolationNameToID (const char* const interpName)