+
+#ifndef __BACKPROJECTORS_H
+#define __BACKPROJECTORS_H
+
+#undef HAVE_BSPLINE_INTERP
+
+#include "imagefile.h"
+
+
+class Backproject;
+class ImageFile;
+class Projections;
+
+class Backprojector
+{
+ public:
+ static const int BPROJ_INVALID;
+ static const int BPROJ_TRIG;
+ static const int BPROJ_TABLE;
+ static const int BPROJ_DIFF;
+ static const int BPROJ_DIFF2;
+ static const int BPROJ_IDIFF2;
+ static const int BPROJ_IDIFF3;
+
+ static const int INTERP_INVALID;
+ static const int INTERP_NEAREST;
+ static const int INTERP_LINEAR;
+ static const int INTERP_FREQ_PREINTERPOLATION;
+#if HAVE_BSPLINE_INTERP
+ static const int INTERP_BSPLINE;
+ static const int INTERP_1BSPLINE;
+ static const int INTERP_2BSPLINE;
+ static const int INTERP_3BSPLINE;
+#endif
+
+ Backprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+
+ ~Backprojector ();
+
+ void BackprojectView (const double* const viewData, const double viewAngle);
+
+ bool fail() const {return m_fail;}
+ const string& failMessage() const {return m_failMessage;}
+
+ static const int getBackprojectCount() {return s_iBackprojectCount;}
+ static const char** getBackprojectNameArray() {return s_aszBackprojectName;}
+ static const char** getBackprojectTitleArray() {return s_aszBackprojectTitle;}
+ static int convertBackprojectNameToID (const char* const bprojName);
+ static const char* convertBackprojectIDToName (const int bprojID);
+ static const char* convertBackprojectIDToTitle (const int bprojID);
+
+ static const int getInterpCount() {return s_iInterpCount;}
+ static const char** getInterpNameArray() {return s_aszInterpName;}
+ static const char** getInterpTitleArray() {return s_aszInterpTitle;}
+ static int convertInterpNameToID (const char* const interpName);
+ static const char* convertInterpIDToName (const int interpID);
+ static const char* convertInterpIDToTitle (const int interpID);
+
+
+ private:
+ string m_nameBackproject;
+ string m_nameInterpolation;
+ int m_idBackproject;
+ int m_idInterpolation;
+ Backproject* m_pBackprojectImplem;
+ bool m_fail;
+ string m_failMessage;
+
+ static const char* s_aszBackprojectName[];
+ static const char* s_aszBackprojectTitle[];
+ static const int s_iBackprojectCount;
+
+ static const char* s_aszInterpName[];
+ static const char* s_aszInterpTitle[];
+ static const int s_iInterpCount;
+
+ bool initBackprojector (const Projections& proj, ImageFile& im, const char* const backprojName, const char* const interpName, const int interpFactor);
+};
+
+