summaryrefslogtreecommitdiffstats
path: root/include/astra/Globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/astra/Globals.h')
-rw-r--r--include/astra/Globals.h309
1 files changed, 309 insertions, 0 deletions
diff --git a/include/astra/Globals.h b/include/astra/Globals.h
new file mode 100644
index 0000000..9407ef9
--- /dev/null
+++ b/include/astra/Globals.h
@@ -0,0 +1,309 @@
+/*
+-----------------------------------------------------------------------
+Copyright 2012 iMinds-Vision Lab, University of Antwerp
+
+Contact: astra@ua.ac.be
+Website: http://astra.ua.ac.be
+
+
+This file is part of the
+All Scale Tomographic Reconstruction Antwerp Toolbox ("ASTRA Toolbox").
+
+The ASTRA Toolbox is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+The ASTRA Toolbox is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with the ASTRA Toolbox. If not, see <http://www.gnu.org/licenses/>.
+
+-----------------------------------------------------------------------
+$Id$
+*/
+
+#ifndef _INC_ASTRA_GLOBALS
+#define _INC_ASTRA_GLOBALS
+
+/*! \mainpage The ASTRA-toolbox
+ *
+ * <img src="../images/logo_big.png"/>
+ */
+
+
+//----------------------------------------------------------------------------------------
+
+#ifdef _MSC_VER
+
+// disable warning: 'fopen' was declared deprecated
+#pragma warning (disable : 4996)
+// disable warning: C++ exception handler used, but unwind semantics are not enables
+#pragma warning (disable : 4530)
+// disable warning: no suitable definition provided for explicit template instantiation request
+#pragma warning (disable : 4661)
+
+#endif
+
+//----------------------------------------------------------------------------------------
+// standard includes
+#include <cassert>
+#include <iostream>
+#include <fstream>
+#include <math.h>
+#include <boost/static_assert.hpp>
+#include <boost/throw_exception.hpp>
+
+//----------------------------------------------------------------------------------------
+// macro's
+
+#define ASTRA_TOOLBOXVERSION_MAJOR 1
+#define ASTRA_TOOLBOXVERSION_MINOR 1
+#define ASTRA_TOOLBOXVERSION ((ASTRA_TOOLBOXVERSION_MAJOR)*100 + (ASTRA_TOOLBOXVERSION_MINOR))
+#define ASTRA_TOOLBOXVERSION_STRING "1.1"
+
+
+#define ASTRA_ASSERT(a) assert(a)
+
+#define ASTRA_CONFIG_CHECK(value, type, msg) if (!(value)) { cout << "Configuration Error in " << type << ": " << msg << endl; return false; }
+
+#define ASTRA_CONFIG_WARNING(type, msg) { cout << "Warning in " << type << ": " << msg << endl; }
+
+
+#define ASTRA_DELETE(a) if (a) { delete a; a = NULL; }
+#define ASTRA_DELETE_ARRAY(a) if (a) { delete[] a; a = NULL; }
+
+#ifdef _MSC_VER
+
+#ifdef DLL_EXPORTS
+#define _AstraExport __declspec(dllexport)
+#define EXPIMP_TEMPLATE
+#else
+#define _AstraExport __declspec(dllimport)
+#define EXPIMP_TEMPLATE extern
+#endif
+
+#else
+
+#define _AstraExport
+
+#endif
+
+
+//----------------------------------------------------------------------------------------
+// typedefs
+namespace astra {
+ typedef float float32;
+ typedef double float64;
+ typedef unsigned short int uint16;
+ typedef signed short int sint16;
+ typedef unsigned char uchar8;
+ typedef signed char schar8;
+
+ typedef int int32;
+ typedef short int int16;
+}
+
+//----------------------------------------------------------------------------------------
+// globals vars & functions
+//namespace astra {
+//#define ToolboxVersion 0.1f;
+
+//float32 getVersion() { return ToolboxVersion; }
+
+//_AstraExport bool cudaEnabled() {
+//#ifdef ASTRA_CUDA
+// return true;
+//#else
+// return false;
+//#endif
+//}
+//}
+
+//----------------------------------------------------------------------------------------
+// errors
+namespace astra {
+
+typedef enum {ASTRA_SUCCESS,
+ ASTRA_ERROR_NOT_INITIALIZED,
+ ASTRA_ERROR_INVALID_FILE,
+ ASTRA_ERROR_OUT_OF_RANGE,
+ ASTRA_ERROR_DIMENSION_MISMATCH,
+ ASTRA_ERROR_EXTERNAL_LIBRARY,
+ ASTRA_ERROR_ALLOCATION,
+ ASTRA_ERROR_NOT_IMPLEMENTED} AstraError;
+}
+
+
+//----------------------------------------------------------------------------------------
+// variables
+namespace astra {
+ const float32 PI = 3.14159265358979323846264338328f;
+ const float32 PI32 = 3.14159265358979323846264338328f;
+ const float32 PIdiv2 = PI / 2;
+ const float32 PIdiv4 = PI / 4;
+ const float32 eps = 1e-7f;
+}
+
+//----------------------------------------------------------------------------------------
+// math
+namespace astra {
+
+ inline float32 cos_73s(float32 x)
+ {
+ /*
+ const float32 c1 = 0.999999953464f;
+ const float32 c2 = -0.4999999053455f;
+ const float32 c3 = 0.0416635846769f;
+ const float32 c4 = -0.0013853704264f;
+ const float32 c5 = 0.000023233f;
+ */
+ const float c1= (float)0.99940307;
+ const float c2= (float)-0.49558072;
+ const float c3= (float)0.03679168;
+
+ float32 x2;
+ x2 = x * x;
+ //return (c1 + x2*(c2 + x2*(c3 + x2*(c4 + c5*x2))));
+ return (c1 + x2*(c2 + c3 * x2));
+ }
+
+ inline float32 fast_cos(float32 x)
+ {
+ int quad;
+
+ //x = fmod(x, 2*PI); // Get rid of values > 2* pi
+ if (x < 0) x =- x; // cos(-x) = cos(x)
+ quad = int(x/PIdiv2); // Get quadrant # (0 to 3)
+ switch (quad) {
+ case 0: return cos_73s(x);
+ case 1: return -cos_73s(PI-x);
+ case 2: return -cos_73s(x-PI);
+ case 3: return cos_73s(2*PI-x);
+ }
+ return 0.0f;
+ }
+
+ inline float32 fast_sin(float32 x){
+ return fast_cos(PIdiv2-x);
+ }
+
+}
+
+//----------------------------------------------------------------------------------------
+// structs
+namespace astra {
+ /**
+ * Struct for storing pixel weigths
+ **/
+ struct SPixelWeight
+ {
+ int m_iIndex;
+ float32 m_fWeight;
+ };
+
+ /**
+ * Struct combining some properties of a detector in 1D detector row
+ **/
+ struct SDetector2D
+ {
+ int m_iIndex;
+ int m_iAngleIndex;
+ int m_iDetectorIndex;
+ };
+
+ /**
+ * Struct combining some properties of a detector in 2D detector array
+ **/
+ struct SDetector3D
+ {
+ int m_iIndex;
+ int m_iAngleIndex;
+ int m_iDetectorIndex;
+ int m_iSliceIndex;
+ };
+}
+//----------------------------------------------------------------------------------------
+// some toys
+
+// safe reinterpret cast
+template <class To, class From>
+To safe_reinterpret_cast(From from)
+{
+ BOOST_STATIC_ASSERT(sizeof(From) <= sizeof(To));
+ return reinterpret_cast<To>(from);
+}
+
+//----------------------------------------------------------------------------------------
+// functions for testing
+template<typename T>
+inline void writeArray(T*** arr, int dim1, int dim2, int dim3, const std::string& filename)
+{
+ std::ofstream out(filename.c_str());
+ int i1, i2, i3;
+ for (i1 = 0; i1 < dim1; ++i1) {
+ for (i2 = 0; i2 < dim2; ++i2) {
+ for (i3 = 0; i3 < dim3; ++i3) {
+ out << arr[i1][i2][i3] << " ";
+ }
+ out << std::endl;
+ }
+ out << std::endl;
+ }
+ out.close();
+}
+
+template<typename T>
+inline void writeArray(T** arr, int dim1, int dim2, const std::string& filename)
+{
+ std::ofstream out(filename.c_str());
+ for (int i1 = 0; i1 < dim1; i1++) {
+ for (int i2 = 0; i2 < dim2; i2++) {
+ out << arr[i1][i2] << " ";
+ }
+ out << std::endl;
+ }
+ out.close();
+}
+
+template<typename T>
+inline void writeArray(T* arr, int dim1, const std::string& filename)
+{
+ std::ofstream out(filename.c_str());
+ for (int i1 = 0; i1 < dim1; i1++) {
+ out << arr[i1] << " ";
+ }
+ out.close();
+}
+namespace astra {
+_AstraExport inline int getVersion() { return ASTRA_TOOLBOXVERSION; }
+_AstraExport inline const char* getVersionString() { return ASTRA_TOOLBOXVERSION_STRING; }
+#ifdef ASTRA_CUDA
+_AstraExport inline bool cudaEnabled() { return true; }
+#else
+_AstraExport inline bool cudaEnabled() { return false; }
+#endif
+}
+//----------------------------------------------------------------------------------------
+// portability between MSVC and Linux/gcc
+
+#ifndef _MSC_VER
+#include "swrap.h"
+#define EXPIMP_TEMPLATE
+
+#if !defined(FORCEINLINE) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#define FORCEINLINE inline __attribute__((__always_inline__))
+#else
+#define FORCEINLINE inline
+#endif
+
+#else
+
+#define FORCEINLINE __forceinline
+
+#endif
+
+#endif