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