]> git.treefish.org Git - phys/latlib.git/blob - o815/o815.h
...
[phys/latlib.git] / o815 / o815.h
1 #ifndef O815_H
2 #define O815_H
3
4 #include <string>
5 #include <vector>
6 #include <stdlib.h>
7 #include <getopt.h>
8
9 #include "latlib/paraq.h"
10 #include "latlib/writeout.h"
11 #include "latlib/hypercache.h"
12
13 using namespace std;
14
15 class obs;
16
17 class o815 {
18  public:
19
20   class obs {
21   public:
22     obs(const string& _obsid, const string& _datadesc, o815 *_O815, const int& _obsmemSize, const string& _obsidpostfix="");
23     void finish();
24     void meas(bool loadedobs, const int& nthmeas);
25     void start();
26     string getDataDesc() { return datadesc; };
27     int ocid;
28     string obsid;
29     string obsidpostfix;
30   private:
31     virtual void _meas(bool loadedobs, const int& nthmeas)=0;
32     virtual void _finish()=0;
33     virtual void _start()=0;
34   protected:
35     o815 *O815;
36     char *obsMem;
37     string simid, datadesc;
38     ostream *out, *log;
39     paraq* paraQ;
40   };
41
42   class sim {
43   public:
44     sim(o815 *_O815, const int& _confmemSize);
45     ~sim ();
46     void nextConfig();
47     char *confMem;
48     virtual void _newParas()=0;
49     int nequi, nskip;
50     void resetConfig();
51   private:
52     virtual void _makeSweep()=0;
53     virtual void _resetConfig()=0;
54     char *startConfiguration;
55   protected:
56     o815 *O815;
57     ostream *log;
58     int confmemSize;
59   };
60
61   struct {
62     int nmeas;
63     int nskip;
64     int nequi;
65     int lsize[2];
66     pair<string,int> obscache;
67     pair<string,int> confcache;
68     string outdir;
69     int idonly;
70     int showjobnum;
71     string startconfig;
72   } comargs;
73
74   struct comoption {
75     string name;
76     int has_arg;
77     int *flag;
78     int val;
79     string optdesc;
80     string argdesc;
81   };
82
83   o815(int argc, char **argv, const string& _programid, comoption specOps[]=NULL, void (*helpHeader)()=NULL);
84   void postParaInit();
85   ~o815();
86   paraq *paraQ;
87   writeout *out;
88   vector<obs*> observables;
89   sim* Sim;
90   void mainLoop();
91   string headMaster( bool hashedrange=false );
92   void addPara(const string& paraid, const double& paraDefault);
93   void addComOption(const char* name, int has_arg, int *flag, int val, const char* optdesc, const char* argdesc);
94   vector< pair<int,char*> > parsedSpecOps;
95   vector<char*> lonelyArgs;
96
97 private:
98   vector<comoption> comOptions;
99   int numprocs, rank;
100   static void listArg(int *target, int tlen, char *listarg);
101   void parseArgs(int argc, char **argv, comoption specOps[]);
102   string programid;
103   int nextParas();
104   comoption* getOptionByVal(int val);
105   static void readCacheArgs(const string& arg, string& cachedir, int& cachemode);
106   unsigned long hash(const string& str);
107 };
108
109 #endif