[cig-commits] r14992 - in cs/spatialdata-0.1/trunk: . libsrc/spatialdb libsrc/units tests/libtests/spatialdb tests/libtests/spatialdb/data tests/libtests/units

brad at geodynamics.org brad at geodynamics.org
Wed May 13 20:17:43 PDT 2009


Author: brad
Date: 2009-05-13 20:17:42 -0700 (Wed, 13 May 2009)
New Revision: 14992

Modified:
   cs/spatialdata-0.1/trunk/Makefile.am
   cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.cc
   cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.hh
   cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIOAscii.cc
   cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc
   cs/spatialdata-0.1/trunk/libsrc/units/Parser.hh
   cs/spatialdata-0.1/trunk/setup.py
   cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSpatialDB.cc
   cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/data/spatialdb.dat
   cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/testspatial.cc
   cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc
   cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc
Log:
Added unit conversions to SimpleIO.

Modified: cs/spatialdata-0.1/trunk/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/Makefile.am	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/Makefile.am	2009-05-14 03:17:42 UTC (rev 14992)
@@ -10,7 +10,7 @@
 # ----------------------------------------------------------------------
 #
 
-ACLOCAL_AMFLAGS = -I ./m4
+ACLOCAL_AMFLAGS = -I m4
 
 SUBDIRS = \
 	libsrc \

Modified: cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -21,7 +21,9 @@
 #include "SimpleDBData.hh" // USES SimpleDBData
 
 #include "spatialdata/geocoords/CoordSys.hh" // USES CoordSys
+#include "spatialdata/units/Parser.hh" // USES Parser
 
+#include <vector> // USES std::vector
 #include <stdexcept> // USES std::runtime_error, std::exception
 #include <sstream> // USES std::ostringsgream
 #include <assert.h> // USES assert()
@@ -72,5 +74,32 @@
   } // if
 } // checkCompatibility
 
+// ----------------------------------------------------------------------
+void
+spatialdata::spatialdb::SimpleIO::convertToSI(SimpleDBData* const data)
+{ // convertToSI
+  assert(0 != data);
 
+#if 1
+  spatialdata::units::Parser parser;
+
+  const int numValues = data->numValues();
+  std::vector<double> scales(numValues);
+  for (int iVal=0; iVal < numValues; ++iVal) {
+    if (strcasecmp(data->units(iVal), "none") != 0)
+      scales[iVal] = parser.parse(data->units(iVal));
+    else
+      scales[iVal] = 1.0;
+  } // for
+
+  const int numLocs = data->numLocs();
+  for (int iLoc=0; iLoc < numLocs; ++iLoc) {
+    double* values = data->data(iLoc);
+    for (int iVal=0; iVal < numValues; ++iVal)
+      values[iVal] *= scales[iVal];
+  } // for
+#endif
+} // convertToSI
+
+
 // End of file 

Modified: cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.hh
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.hh	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIO.hh	2009-05-14 03:17:42 UTC (rev 14992)
@@ -88,6 +88,12 @@
   static void checkCompatibility(const SimpleDBData& data,
 				 const spatialdata::geocoords::CoordSys* pCS);
 
+  /** Convert values to SI units.
+   *
+   * @param data Database data
+   */
+  static void convertToSI(SimpleDBData* const data);
+
 private :
   // PRIVATE METHODS ////////////////////////////////////////////////////
 

Modified: cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIOAscii.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIOAscii.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/libsrc/spatialdb/SimpleIOAscii.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -254,7 +254,9 @@
   // number of points
   checkCompatibility(*pData, *ppCS);
   
-  assert(0 != *ppCS);
+  // Convert to SI units
+  convertToSI(pData);
+
   (*ppCS)->initialize();
 } // _readV1
 

Modified: cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/libsrc/units/Parser.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -22,12 +22,17 @@
 // Default constructor
 spatialdata::units::Parser::Parser(void)
 { // constructor
+  // Initialize Python interpreter if it is not already initialized.
+  _alreadyInitialized = Py_IsInitialized();
+  if (!_alreadyInitialized)
+  Py_Initialize();
+
   // Should check for NULL, decode the exception, and throw a C++ equivalent
   PyObject *mod = PyImport_ImportModule("pyre.units");
   assert(0 != mod);
   PyObject *cls = PyObject_GetAttrString(mod, "parser");
   assert(0 != cls);
-  _parser      = PyObject_CallFunctionObjArgs(cls, NULL);
+  _parser = PyObject_CallFunctionObjArgs(cls, NULL);
   assert(0 != _parser);
   Py_DECREF(cls);
   Py_DECREF(mod);
@@ -38,6 +43,9 @@
 spatialdata::units::Parser::~Parser(void)
 { // destructor
   Py_DECREF(_parser); _parser = 0;
+
+  if (!_alreadyInitialized)
+    Py_Finalize();
 } // destructor
 
 // ----------------------------------------------------------------------

Modified: cs/spatialdata-0.1/trunk/libsrc/units/Parser.hh
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/units/Parser.hh	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/libsrc/units/Parser.hh	2009-05-14 03:17:42 UTC (rev 14992)
@@ -20,7 +20,7 @@
 
 #include "unitsfwd.hh"
 
-#include "Python.h"
+#include <Python.h>
 
 /// C++ interface to Pyre units parser.
 class spatialdata::units::Parser
@@ -48,11 +48,12 @@
    */
   double parse(const char* units);
 
-
 private :
   // PRIVATE MEMBERS ////////////////////////////////////////////////////
 
   PyObject* _parser;
+  bool _alreadyInitialized;
+
 }; // class Parser
 
 #endif // spatialdata_units_parser_hh

Modified: cs/spatialdata-0.1/trunk/setup.py
===================================================================
--- cs/spatialdata-0.1/trunk/setup.py	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/setup.py	2009-05-14 03:17:42 UTC (rev 14992)
@@ -7,7 +7,7 @@
 setup(
     
     name = 'spatialdata', 
-    version = '0.3.1',
+    version = '0.5.0',
 
     zip_safe = False,
     packages = find_packages(),

Modified: cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSpatialDB.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSpatialDB.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/TestSpatialDB.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -63,11 +63,11 @@
 { // testDB
   CPPUNIT_ASSERT(0 != _pDB);
 
-  const char* names[] = {"two", "one"};
-  const char* units[] = {"m", "m"};
-  const int numVals = 2;
+  const char* names[] = {"two", "one", "four", "three"};
+  const char* units[] = {"km", "m", "None", "MPa"};
+  const int numVals = 4;
   const double queryLoc[] = { 1.0, 2.0, 3.0 };
-  const double vals[] = { 6.3, 4.7 };
+  const double vals[] = { 6.3e+3, 4.7, 0.8, 1.2e+6 };
   const int errFlags[] = { 0 };
   const int spaceDim = 3;
 
@@ -82,7 +82,7 @@
 
   const double tolerance = 1.0e-06;
   for (int iVal=0; iVal < numVals; ++iVal)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(valsQ[iVal]/vals[numVals-iVal-1],
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(valsQ[iVal]/vals[iVal],
 				 1.0, tolerance);
 
   delete[] valsQ; valsQ = 0;
@@ -97,11 +97,11 @@
   CPPUNIT_ASSERT(0 != _pDB);
 
   const char* names[] = {"two", "one"};
-  const char* units[] = {"m", "m"};
+  const char* units[] = {"km", "m"};
   const int numVals = 2;
   const double queryLoc[] = { 1.0, 2.0, 3.0 };
   const int spaceDim = 3;
-  const double vals[] = { 6.3, 4.7 };
+  const double vals[] = { 6.3e+3, 4.7 };
   const int errFlags[] = { 0 };
 
   _pDB->queryVals(names, numVals);
@@ -117,7 +117,7 @@
 
   const double tolerance = 1.0e-06;
   for (int iVal=0; iVal < numVals; ++iVal)
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(valsQ[iVal]/vals[numVals-iVal-1],
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(valsQ[iVal]/vals[iVal],
 				 1.0, tolerance);
 
   delete[] valsQ; valsQ = 0;

Modified: cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/data/spatialdb.dat
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/data/spatialdb.dat	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/data/spatialdb.dat	2009-05-14 03:17:42 UTC (rev 14992)
@@ -1,12 +1,12 @@
 #SPATIAL.ascii 1
 SimpleDB {
-  num-values = 2
-  value-names =  One  Two
-  value-units =  m  m
+  num-values = 4
+  value-names =  One  Two  Three Four
+  value-units =  m  km  MPa  None
   num-locs = 1
   data-dim = 0
   cs-data = cartesian {
     to-meters = 1.0
   }
 }
-  6.000000e-01  1.000000e-01  2.000000e-01  6.300000e+00  4.700000e+00
+  6.000000e-01  1.000000e-01  2.000000e-01    4.7  6.3  1.2  0.8

Modified: cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/testspatial.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/testspatial.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/tests/libtests/spatialdb/testspatial.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -46,7 +46,5 @@
   return (result.wasSuccessful() ? 0 : 1);
 } // main
 
-// version
-// $Id$
 
 // End of file

Modified: cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/tests/libtests/units/TestParser.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -24,7 +24,13 @@
 void
 spatialdata::units::TestParser::testConstructor(void)
 { // testConstructor
-  Parser parser;
+  // Test without prior initialization.
+  Parser parserA;
+
+  // Test with prior initialization.
+  Py_Initialize();
+  Parser parserB;
+  Py_Finalize();
 } // testConstructor
 
 // ----------------------------------------------------------------------

Modified: cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc
===================================================================
--- cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc	2009-05-12 23:51:56 UTC (rev 14991)
+++ cs/spatialdata-0.1/trunk/tests/libtests/units/testunits.cc	2009-05-14 03:17:42 UTC (rev 14992)
@@ -19,15 +19,10 @@
 #include <cppunit/TestRunner.h>
 #include <cppunit/TextOutputter.h>
 
-#include <Python.h>
-
 int
 main(int argc,
      char* argv[])
 { // main
-  // Initialize Python interpreter
-  Py_Initialize();
-
   // Create event manager and test controller
   CppUnit::TestResult controller;
 
@@ -48,8 +43,6 @@
   CppUnit::TextOutputter outputter(&result, std::cerr);
   outputter.write();
 
-  Py_Finalize();
-
   return (result.wasSuccessful() ? 0 : 1);
 } // main
 



More information about the CIG-COMMITS mailing list