NanoShaper
0.7.2
NanoShaper is a tool able to triangulate and inspect an arbitray triangulated surface or several types of molecular surfaces
|
00001 00002 //--------------------------------------------------------- 00003 /* @file globals.h 00004 * @brief globals.h Includes all the common global parameters 00005 * */ 00006 //--------------------------------------------------------- 00007 00008 #ifndef globals_h 00009 #define globals_h 00010 00012 //#define DBGMEM_CRT 00013 00014 #ifdef DBGMEM_CRT 00015 // check vector bounds. To allow that you have to access vector following the 00016 // here defined access functions 00017 #define CHECK_BOUNDS 00018 #endif 00019 00020 //if Microsoft C++ is not idenfied memory leak is deactivated 00021 #ifndef _MSC_VER 00022 #undef DBGMEM_CRT 00023 #endif 00024 00025 #ifdef DBGMEM_CRT 00026 #define _CRTDBG_MAP_ALLOC 00027 #define _CRTDBG_MAP_ALLOC_NEW 00028 #pragma message(" MESSAGE Microsoft Memory Leaks Detector is Enabled!") 00029 #include <stdlib.h> 00030 #include <crtdbg.h> 00031 #endif 00032 00033 #define VERSION "0.7.2" 00034 #define PROGNAME "NanoShaper" 00035 00037 #include<iostream> 00038 #include<math.h> 00039 #include<vector> 00040 #include<fstream> 00041 #include<assert.h> 00042 #include<algorithm> 00043 #include<stdio.h> 00044 #include<cstring> 00045 #include<map> 00046 #include<list> 00047 #include<set> 00048 #include<time.h> 00049 #include<queue> 00050 #include<limits> 00051 #include "ConfigFile.h" 00053 00054 using namespace std; 00055 00057 #define WARN " <<WARNING>> " 00058 #define ERR " <<ERROR>> " 00059 #define INFO " <<INFO>> " 00060 #define CITE " <<CITATION>> " 00061 #define REMARK " <<REMARK>> " 00062 00063 00064 // access to EPSMAP,IDEBMAP,STATUSMAP colum-major as in Fortran 00065 // substituted by template access/writing inline functions with optional bounds check 00066 00067 //#define EPSMAP(i,j,k,l,NX,NY,NZ) epsmap[(i)+(NX)*((j)+(NY)*((k)+(NZ)*(l)))] 00068 //#define IDEBMAP(i,j,k,NX,NY) idebmap[(i)+(NX)*((j)+(NY)*(k))] 00069 //#define STATUSMAP(i,j,k,NX,NY) status[(i)+(NX)*((j)+(NY)*(k))] 00070 //#define TEMP_STATUSMAP(i,j,k,NX,NY) tempStatus[(i)+(NX)*((j)+(NY)*(k))] 00071 //#define TEMP_STATUSMAP2(i,j,k,NX,NY) tempStatus2[(i)+(NX)*((j)+(NY)*(k))] 00072 00074 00075 //#define ENABLE_BOOST_THREADS 00076 //#define ENABLE_BOOST_CHRONO 00078 //#define ENABLE_CGAL 00079 00081 00082 #ifdef ENABLE_BOOST_THREADS 00083 #include <boost/thread/thread.hpp> 00084 #include <boost/thread/mutex.hpp> 00085 #include <boost/thread/condition_variable.hpp> 00086 #endif 00087 00088 #ifdef ENABLE_BOOST_CHRONO 00089 #include <boost/chrono.hpp> 00090 #endif 00091 00092 #ifndef __GNUC__ 00093 #define INFINITY 1e100 00094 #endif 00095 00096 00098 00100 #define BUFLEN 1024 00101 00102 #define PI 3.14159265 00103 #define HALF_PI 1.57079633 00104 #define QUARTER_PI 0.785398163 00105 #define TWO_PI 6.28318531 00106 00108 00109 #define ABS(x) (x < 0 ? -(x) : (x)) 00110 00112 #define CROSS(dest,v1,v2) \ 00113 dest[0]=(v1[1])*(v2[2])-(v1[2])*(v2[1]); \ 00114 dest[1]=(v1[2])*(v2[0])-(v1[0])*(v2[2]); \ 00115 dest[2]=(v1[0])*(v2[1])-(v1[1])*(v2[0]); 00116 00118 #define DOT(v1,v2) ((v1[0])*(v2[0])+(v1[1])*(v2[1])+(v1[2])*(v2[2])) 00119 00122 #define NORMALIZE(v,t) \ 00123 t=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); \ 00124 v[0]=v[0]/t; \ 00125 v[1]=v[1]/t; \ 00126 v[2]=v[2]/t; 00127 00128 #define NORMALIZE_PLANE(v,t) \ 00129 t=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); \ 00130 v[0]=v[0]/t; \ 00131 v[1]=v[1]/t; \ 00132 v[2]=v[2]/t; \ 00133 v[3]=v[3]/t; 00134 00135 #define NORMALIZE_S(v,t) \ 00136 t=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); \ 00137 v[0]=v[0]/(t+1e-20); \ 00138 v[1]=v[1]/(t+1e-20); \ 00139 v[2]=v[2]/(t+1e-20); 00140 00141 #define NORMALIZE_S_ASSIGN(w,v,t) \ 00142 t=sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]); \ 00143 w[0]=v[0]/(t+1e-20); \ 00144 w[1]=v[1]/(t+1e-20); \ 00145 w[2]=v[2]/(t+1e-20); 00146 00148 #define ASSIGN(u,v) \ 00149 { u[0]=v[0]; \ 00150 u[1]=v[1]; \ 00151 u[2]=v[2]; } 00152 00154 #define ASSIGN4(u,v) \ 00155 { u[0]=v[0]; \ 00156 u[1]=v[1]; \ 00157 u[2]=v[2];\ 00158 u[3]=v[3];} 00159 00161 #define CHANGE_SIGN(u) \ 00162 { u[0]=-u[0]; \ 00163 u[1]=-u[1]; \ 00164 u[2]=-u[2]; } 00165 00167 #define SUB(dest,v1,v2)\ 00168 dest[0]=v1[0]-v2[0]; \ 00169 dest[1]=v1[1]-v2[1]; \ 00170 dest[2]=v1[2]-v2[2]; 00171 00173 #define ADD(dest,v1,v2)\ 00174 dest[0]=v1[0]+v2[0]; \ 00175 dest[1]=v1[1]+v2[1]; \ 00176 dest[2]=v1[2]+v2[2]; 00177 00179 #define MID(dest,v1,v2)\ 00180 dest[0]=(v1[0]+v2[0])*0.5; \ 00181 dest[1]=(v1[1]+v2[1])*0.5; \ 00182 dest[2]=(v1[2]+v2[2])*0.5; 00183 00185 #define ADD_MUL(dest,v1,v2,a)\ 00186 dest[0]=v1[0]+a*v2[0]; \ 00187 dest[1]=v1[1]+a*v2[1]; \ 00188 dest[2]=v1[2]+a*v2[2]; 00189 00191 #define VEC_MUL(dest,v,a)\ 00192 dest[0]=a*v[0]; \ 00193 dest[1]=a*v[1]; \ 00194 dest[2]=a*v[2]; 00195 00196 #define DIST(dist,v1,v2)\ 00197 dist=sqrt((v1[0]-v2[0])*(v1[0]-v2[0])+(v1[1]-v2[1])*(v1[1]-v2[1])+(v1[2]-v2[2])*(v1[2]-v2[2])); 00198 00199 #define DIST2(dist,v1,v2)\ 00200 dist=((v1[0]-v2[0])*(v1[0]-v2[0])+(v1[1]-v2[1])*(v1[1]-v2[1])+(v1[2]-v2[2])*(v1[2]-v2[2])); 00201 00203 #define MIN(x, y) ((x)<(y) ? (x):(y)) 00204 00206 #define MAX(x, y) ((x)>(y) ? (x):(y)) 00207 00208 00209 /* determinant of matrix 00210 Computes determinant of matrix m, returning d 00211 */ 00212 #define DETERMINANT_2X2(d,m) \ 00213 { \ 00214 d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \ 00215 } 00216 00217 /* determinant of matrix 00218 Computes determinant of matrix m, returning d 00219 */ 00220 00221 #define DETERMINANT_3X3(d,m) \ 00222 { \ 00223 d = m[0][0] * (m[1][1]*m[2][2] - m[1][2] * m[2][1]); \ 00224 d -= m[0][1] * (m[1][0]*m[2][2] - m[1][2] * m[2][0]); \ 00225 d += m[0][2] * (m[1][0]*m[2][1] - m[1][1] * m[2][0]); \ 00226 } 00227 00228 /* compute adjoint of matrix and scale 00229 Computes adjoint of matrix m, scales it by s, returning a 00230 */ 00231 00232 #define SCALE_ADJOINT_2X2(a,s,m) \ 00233 { \ 00234 a[0][0] = (s) * m[1][1]; \ 00235 a[1][0] = - (s) * m[1][0]; \ 00236 a[0][1] = - (s) * m[0][1]; \ 00237 a[1][1] = (s) * m[0][0]; \ 00238 } 00239 00240 00241 /* compute adjoint of matrix and scale 00242 Computes adjoint of matrix m, scales it by s, returning a 00243 */ 00244 00245 #define SCALE_ADJOINT_3X3(a,s,m) \ 00246 { \ 00247 a[0][0] = (s) * (m[1][1] * m[2][2] - m[1][2] * m[2][1]); \ 00248 a[1][0] = (s) * (m[1][2] * m[2][0] - m[1][0] * m[2][2]); \ 00249 a[2][0] = (s) * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); \ 00250 \ 00251 a[0][1] = (s) * (m[0][2] * m[2][1] - m[0][1] * m[2][2]); \ 00252 a[1][1] = (s) * (m[0][0] * m[2][2] - m[0][2] * m[2][0]); \ 00253 a[2][1] = (s) * (m[0][1] * m[2][0] - m[0][0] * m[2][1]); \ 00254 \ 00255 a[0][2] = (s) * (m[0][1] * m[1][2] - m[0][2] * m[1][1]); \ 00256 a[1][2] = (s) * (m[0][2] * m[1][0] - m[0][0] * m[1][2]); \ 00257 a[2][2] = (s) * (m[0][0] * m[1][1] - m[0][1] * m[1][0]); \ 00258 } 00259 00260 /* inverse of matrix 00261 Compute inverse of matrix a, returning determinant m and inverse b 00262 */ 00263 00264 #define INVERT_2X2(b,det,a) \ 00265 { \ 00266 double tmp; \ 00267 DETERMINANT_2X2 (det, a); \ 00268 tmp = 1.0 / (det); \ 00269 SCALE_ADJOINT_2X2 (b, tmp, a); \ 00270 } 00271 00272 /* inverse of matrix 00273 Compute inverse of matrix a, returning determinant m and inverse b 00274 */ 00275 00276 #define INVERT_3X3(b,det,a) \ 00277 { \ 00278 double tmp; \ 00279 DETERMINANT_3X3 (det, a); \ 00280 tmp = 1.0 / (det); \ 00281 SCALE_ADJOINT_3X3 (b, tmp, a); \ 00282 } 00283 00284 #define PRINT_MAT3(mat) \ 00285 { \ 00286 cout << endl; \ 00287 for (int i=0;i<3;i++) \ 00288 { \ 00289 cout << mat[i][0] << "," << mat[i][1] << "," << mat[i][2];\ 00290 cout << endl; \ 00291 } \ 00292 } 00293 00294 #define PRINT_VEC3(vec) \ 00295 { \ 00296 cout << endl; \ 00297 cout << vec[0] << "," << vec[1] << "," << vec[2];\ 00298 cout << endl; \ 00299 \ 00300 } 00301 00302 00303 extern fstream* errorStream; 00304 extern fstream* internals; 00305 00306 class Configuration 00307 { 00308 public: 00309 00310 double cavVol; 00311 int numMol; 00312 00313 // grid (DelPhi) params 00314 double scale; 00315 double perfill; 00316 // mol file name 00317 string molFile; 00318 // sys name 00319 string sysName; 00320 00321 bool multi_diel; 00322 00323 // actions 00324 bool fillCavities; 00325 bool buildEpsmaps; 00326 bool buildStatus; 00327 bool tri; 00328 bool accTri; 00329 bool smoothing; 00330 bool tri2balls; 00331 bool projBGP; 00332 00333 // save data 00334 bool saveEpsmaps; 00335 bool saveIdebmap; 00336 bool saveBgps; 00337 bool saveStatusMap; 00338 bool saveCavities; 00339 00340 // global parameters 00341 string operativeMode; 00342 int numthd; 00343 bool printAvailSurf; 00344 int currentSeed; 00345 00346 // pocket detection 00347 bool cavAndPockets; 00348 bool linkPockets; 00349 double pocketRadiusBig; 00350 double pocketRadiusSmall; 00351 double pocketRadiusLink; 00352 bool debug; 00353 }; 00354 00355 extern Configuration conf; 00356 00357 #endif