]> git.treefish.org Git - phys/latlib.git/blob - o815/o815.h
7e286e0263e84996b08f190988acb06fc26d8393
[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);
24     void finish();
25     void meas(bool loadedobs);
26     void start();
27     string getDataDesc() { return datadesc; };
28     int ocid;
29     string obsid;
30   private:
31     virtual void _meas(bool loadedobs)=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     void nextConfig();
46     char *confMem;
47     virtual void _newParas()=0;
48   private:
49     virtual void _makeSweep()=0;
50   protected:
51     o815 *O815;
52     ostream *log;
53     int nequi, nskip, confmemSize;
54   };
55
56   struct {
57     int nmeas;
58     int nskip;
59     int nequi;
60     int lsize[2];
61     pair<string,int> obscache;
62     pair<string,int> confcache;
63     string outdir;
64     int idonly;
65     int showjobnum;
66   } comargs;
67
68   struct comoption {
69     string name;
70     int has_arg;
71     int *flag;
72     int val;
73     string optdesc;
74     string argdesc;
75   };
76
77   o815(int argc, char **argv, const string& _programid, comoption specOps[]=NULL, void (*helpHeader)()=NULL);
78   ~o815();
79   paraq *paraQ;
80   writeout *out;
81   vector<obs*> observables;
82   sim* Sim;
83   void mainLoop();
84   string headMaster();
85   void addPara(const string& paraid, const double& paraDefault);
86   void addComOption(const char* name, int has_arg, int *flag, int val, const char* optdesc, const char* argdesc);
87   vector< pair<int,char*> > parsedSpecOps;
88   vector<char*> lonelyArgs;
89
90 private:
91   vector<comoption> comOptions;
92   MPI_Status mpiStatus;
93   int numprocs, rank;
94   static void listArg(int *target, int tlen, char *listarg);
95   void parseArgs(int argc, char **argv, comoption specOps[]);
96   string programid;
97   int nextParas();
98   comoption* getOptionByVal(int val);
99 };
100
101 #endif