]> git.treefish.org Git - phys/latlib.git/commitdiff
...
authorAlex Schmidt <alex@treefish.org>
Fri, 25 May 2012 13:13:03 +0000 (15:13 +0200)
committerAlex Schmidt <alex@treefish.org>
Fri, 25 May 2012 13:13:03 +0000 (15:13 +0200)
configcache.cpp
configcache.h
obs.hpp

index 48c31f4b559ff929be02c51931d14064de31bf2d..f3c02deec729ae3c8997f13b1cee1f72ad634352 100644 (file)
@@ -5,7 +5,7 @@
 #include <time.h>
 #include <dirent.h>
 
-configcache::configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize){
+configcache::configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize, const int& cachemode){
   NEQUI = nequi;
   NSKIP = nskip;
   DATADIR = datadir;
@@ -20,6 +20,8 @@ configcache::configcache(const string& cacheid, const int& nequi, const int& nsk
   outBuffer = NULL;
   inBuffer = NULL;
 
+  MODE = cachemode;
+
   refetchDataFiles = false;
 }
 
@@ -87,7 +89,7 @@ bool configcache::isValidInFile(const string& infile)
 
 bool configcache::readConfig()
 {
-  if(DATADIR == "") return false;
+  if(DATADIR == "" || MODE == CACHE_MODE_DISABLED) return false;
 
   if(refetchDataFiles){
     refetchDataFiles = false;
@@ -124,7 +126,7 @@ bool configcache::readConfig()
 
 void configcache::writeConfig()
 {
-  if( DATADIR == "") return;
+  if( DATADIR == "" || MODE < 2 ) return;
 
   if(!outFile.is_open()){
     time_t secstamp = time(NULL);
index 3227233b8be515f7c095f3fb7cc95a6283841197..437294684d559e7d652e768a61087cac0040f752 100644 (file)
 #include <boost/iostreams/device/array.hpp>
 #include <boost/iostreams/copy.hpp>
 
+#define CACHE_MODE_DISABLED 0
+#define CACHE_MODE_READ 1
+#define CACHE_MODE_FULL 2
+
 using namespace std;
 
 struct parameter{
@@ -22,7 +26,7 @@ struct parameter{
 class configcache{
  public:
   ~configcache();
-  configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize);
+  configcache(const string& cacheid, const int& nequi, const int& nskip, const string& datadir, char **configmem, const int& configMemSize, const int& cachemode=CACHE_MODE_FULL);
   bool readConfig();
   void writeConfig();
   void addPara(const string& parid, const double& val=0);
@@ -35,6 +39,7 @@ class configcache{
   int NSKIP;
   string DATADIR;
   string CACHEID;
+  int MODE;
   string getFileId(const bool& shortid=false);
 
   ofstream outFile;
diff --git a/obs.hpp b/obs.hpp
index 2501f141ae90a61d5ce0c8fb3a71a84a60512ad8..99d97fa10aaedea8f8f3689fd33c3ba832326a36 100644 (file)
--- a/obs.hpp
+++ b/obs.hpp
@@ -35,6 +35,7 @@ private:
   map<string,result> computations;
   
   void mean(const string& compid, vector< vector <double> > *meas, const int& ival);
+  void mean(const string& compid, vector< vector <int> > *meas, const int& ival);
 };
 
 
@@ -75,6 +76,24 @@ void obs<obstype>::mean(const string& compid, vector< vector<double> > *meas, co
     computations[compid].err += pow( (*measIt)[ival] - computations[compid].val, 2 );
   computations[compid].err /= nmeas*(nmeas-1);
   computations[compid].err = sqrt( computations[compid].err );  
+}
+
+template <typename obstype>
+void obs<obstype>::mean(const string& compid, vector< vector<int> > *meas, const int& ival)
+{
+  computations[compid].val = 0;
+  computations[compid].err = 0;
+  
+  int nmeas = meas->size();
+
+  for(vector< vector<int> >::iterator measIt = meas->begin(); measIt != meas->end(); ++measIt)
+    computations[compid].val += (*measIt)[ival];
+  computations[compid].val /= nmeas;
+  
+  for(vector< vector<int> >::iterator measIt = meas->begin(); measIt != meas->end(); ++measIt)
+    computations[compid].err += pow( (*measIt)[ival] - computations[compid].val, 2 );
+  computations[compid].err /= nmeas*(nmeas-1);
+  computations[compid].err = sqrt( computations[compid].err );  
 }                               
     
 template <typename obstype>