Merge branch 'master' into pygromacs
[alexxy/gromacs.git] / src / gromacs / gmxana / gmx_spatial.cpp
similarity index 87%
rename from src/gromacs/gmxana/gmx_spatial.c
rename to src/gromacs/gmxana/gmx_spatial.cpp
index a7f3d12720ba4f39634ae03d2cb1dc1bda3d2a4e..44f9b2ac1631285d9c169d8779fea617bb0d76db 100644 (file)
@@ -34,8 +34,8 @@
  */
 #include "gmxpre.h"
 
-#include <math.h>
-#include <stdlib.h>
+#include <cmath>
+#include <cstdlib>
 
 #include "gromacs/commandline/pargs.h"
 #include "gromacs/fileio/confio.h"
@@ -106,7 +106,6 @@ int gmx_spatial(int argc, char *argv[])
     };
 
     static gmx_bool bPBC         = FALSE;
-    static gmx_bool bSHIFT       = FALSE;
     static int      iIGNOREOUTER = -1;   /*Positive values may help if the surface is spikey */
     static gmx_bool bCUTDOWN     = TRUE;
     static real     rBINWIDTH    = 0.05; /* nm */
@@ -134,7 +133,7 @@ int gmx_spatial(int argc, char *argv[])
     int             ePBC;
     char            title[STRLEN];
     t_trxframe      fr;
-    rvec           *xtop, *shx[26];
+    rvec           *xtop;
     matrix          box, box_pbc;
     t_trxstatus    *status;
     int             flags = TRX_READ_X;
@@ -146,12 +145,12 @@ int gmx_spatial(int argc, char *argv[])
     int             i, nidx, nidxp;
     int             v;
     int             j, k;
-    long         ***bin = (long ***)NULL;
-    long            nbin[3];
+    int          ***bin = NULL;
+    int             nbin[3];
     FILE           *flp;
-    long            x, y, z, minx, miny, minz, maxx, maxy, maxz;
-    long            numfr, numcu;
-    long            tot, max, min;
+    int             x, y, z, minx, miny, minz, maxx, maxy, maxz;
+    int             numfr, numcu;
+    int             tot, maxval, minval;
     double          norm;
     output_env_t    oenv;
     gmx_rmpbc_t     gpbc = NULL;
@@ -217,9 +216,9 @@ int gmx_spatial(int argc, char *argv[])
     }
     for (i = ZZ; i >= XX; --i)
     {
-        MAXBIN[i]  = (ceil((MAXBIN[i]-MINBIN[i])/rBINWIDTH)+(double)iNAB)*rBINWIDTH+MINBIN[i];
-        MINBIN[i] -= (double)iNAB*rBINWIDTH;
-        nbin[i]    = (long)ceil((MAXBIN[i]-MINBIN[i])/rBINWIDTH);
+        MAXBIN[i]  = (std::ceil((MAXBIN[i]-MINBIN[i])/rBINWIDTH)+iNAB)*rBINWIDTH+MINBIN[i];
+        MINBIN[i] -= iNAB*rBINWIDTH;
+        nbin[i]    = static_cast<int>(std::ceil((MAXBIN[i]-MINBIN[i])/rBINWIDTH));
     }
     snew(bin, nbin[XX]);
     for (i = 0; i < nbin[XX]; ++i)
@@ -262,9 +261,9 @@ int gmx_spatial(int argc, char *argv[])
                 printf("Memory was required for [%f,%f,%f]\n", fr.x[index[i]][XX], fr.x[index[i]][YY], fr.x[index[i]][ZZ]);
                 exit(1);
             }
-            x = (long)ceil((fr.x[index[i]][XX]-MINBIN[XX])/rBINWIDTH);
-            y = (long)ceil((fr.x[index[i]][YY]-MINBIN[YY])/rBINWIDTH);
-            z = (long)ceil((fr.x[index[i]][ZZ]-MINBIN[ZZ])/rBINWIDTH);
+            x = static_cast<int>(std::ceil((fr.x[index[i]][XX]-MINBIN[XX])/rBINWIDTH));
+            y = static_cast<int>(std::ceil((fr.x[index[i]][YY]-MINBIN[YY])/rBINWIDTH));
+            z = static_cast<int>(std::ceil((fr.x[index[i]][ZZ]-MINBIN[ZZ])/rBINWIDTH));
             ++bin[x][y][z];
             if (x < minx)
             {
@@ -315,9 +314,9 @@ int gmx_spatial(int argc, char *argv[])
     fprintf(flp, "Spatial Distribution Function\n");
     fprintf(flp, "test\n");
     fprintf(flp, "%5d%12.6f%12.6f%12.6f\n", nidxp, (MINBIN[XX]+(minx+iIGNOREOUTER)*rBINWIDTH)*10./bohr, (MINBIN[YY]+(miny+iIGNOREOUTER)*rBINWIDTH)*10./bohr, (MINBIN[ZZ]+(minz+iIGNOREOUTER)*rBINWIDTH)*10./bohr);
-    fprintf(flp, "%5ld%12.6f%12.6f%12.6f\n", maxx-minx+1-(2*iIGNOREOUTER), rBINWIDTH*10./bohr, 0., 0.);
-    fprintf(flp, "%5ld%12.6f%12.6f%12.6f\n", maxy-miny+1-(2*iIGNOREOUTER), 0., rBINWIDTH*10./bohr, 0.);
-    fprintf(flp, "%5ld%12.6f%12.6f%12.6f\n", maxz-minz+1-(2*iIGNOREOUTER), 0., 0., rBINWIDTH*10./bohr);
+    fprintf(flp, "%5d%12.6f%12.6f%12.6f\n", maxx-minx+1-(2*iIGNOREOUTER), rBINWIDTH*10./bohr, 0., 0.);
+    fprintf(flp, "%5d%12.6f%12.6f%12.6f\n", maxy-miny+1-(2*iIGNOREOUTER), 0., rBINWIDTH*10./bohr, 0.);
+    fprintf(flp, "%5d%12.6f%12.6f%12.6f\n", maxz-minz+1-(2*iIGNOREOUTER), 0., 0., rBINWIDTH*10./bohr);
     for (i = 0; i < nidxp; i++)
     {
         v = 2;
@@ -341,7 +340,7 @@ int gmx_spatial(int argc, char *argv[])
         {
             v = 16;
         }
-        fprintf(flp, "%5d%12.6f%12.6f%12.6f%12.6f\n", v, 0., (double)fr.x[indexp[i]][XX]*10./bohr, (double)fr.x[indexp[i]][YY]*10./bohr, (double)fr.x[indexp[i]][ZZ]*10./bohr);
+        fprintf(flp, "%5d%12.6f%12.6f%12.6f%12.6f\n", v, 0., fr.x[indexp[i]][XX]*10.0/bohr, fr.x[indexp[i]][YY]*10.0/bohr, fr.x[indexp[i]][ZZ]*10.0/bohr);
     }
 
     tot = 0;
@@ -366,15 +365,15 @@ int gmx_spatial(int argc, char *argv[])
                 if (bin[k][j][i] != 0)
                 {
                     printf("A bin was not empty when it should have been empty. Programming error.\n");
-                    printf("bin[%d][%d][%d] was = %ld\n", k, j, i, bin[k][j][i]);
+                    printf("bin[%d][%d][%d] was = %d\n", k, j, i, bin[k][j][i]);
                     exit(1);
                 }
             }
         }
     }
 
-    min = 999;
-    max = 0;
+    minval = 999;
+    maxval = 0;
     for (k = 0; k < nbin[XX]; k++)
     {
         if (k < minx+iIGNOREOUTER || k > maxx-iIGNOREOUTER)
@@ -394,13 +393,13 @@ int gmx_spatial(int argc, char *argv[])
                     continue;
                 }
                 tot += bin[k][j][i];
-                if (bin[k][j][i] > max)
+                if (bin[k][j][i] > maxval)
                 {
-                    max = bin[k][j][i];
+                    maxval = bin[k][j][i];
                 }
-                if (bin[k][j][i] < min)
+                if (bin[k][j][i] < minval)
                 {
-                    min = bin[k][j][i];
+                    minval = bin[k][j][i];
                 }
             }
         }
@@ -409,7 +408,7 @@ int gmx_spatial(int argc, char *argv[])
     numcu = (maxx-minx+1-(2*iIGNOREOUTER))*(maxy-miny+1-(2*iIGNOREOUTER))*(maxz-minz+1-(2*iIGNOREOUTER));
     if (bCALCDIV)
     {
-        norm = ((double)numcu*(double)numfr) / (double)tot;
+        norm = static_cast<double>(numcu*numfr)/tot;
     }
     else
     {
@@ -434,7 +433,7 @@ int gmx_spatial(int argc, char *argv[])
                 {
                     continue;
                 }
-                fprintf(flp, "%12.6f ", norm*(double)bin[k][j][i]/(double)numfr);
+                fprintf(flp, "%12.6f ", static_cast<double>(norm*bin[k][j][i])/numfr);
             }
             fprintf(flp, "\n");
         }
@@ -442,19 +441,15 @@ int gmx_spatial(int argc, char *argv[])
     }
     gmx_ffclose(flp);
 
-    /* printf("x=%d to %d\n",minx,maxx); */
-    /* printf("y=%d to %d\n",miny,maxy); */
-    /* printf("z=%d to %d\n",minz,maxz); */
-
     if (bCALCDIV)
     {
-        printf("Counts per frame in all %ld cubes divided by %le\n", numcu, 1.0/norm);
-        printf("Normalized data: average %le, min %le, max %le\n", 1.0, norm*(double)min/(double)numfr, norm*(double)max/(double)numfr);
+        printf("Counts per frame in all %d cubes divided by %le\n", numcu, 1.0/norm);
+        printf("Normalized data: average %le, min %le, max %le\n", 1.0, minval*norm/numfr, maxval*norm/numfr);
     }
     else
     {
-        printf("grid.cube contains counts per frame in all %ld cubes\n", numcu);
-        printf("Raw data: average %le, min %le, max %le\n", 1.0/norm, (double)min/(double)numfr, (double)max/(double)numfr);
+        printf("grid.cube contains counts per frame in all %d cubes\n", numcu);
+        printf("Raw data: average %le, min %le, max %le\n", 1.0/norm, static_cast<double>(minval)/numfr, static_cast<double>(maxval)/numfr);
     }
 
     return 0;