]> git.treefish.org Git - phys/latlib.git/blob - o815/o815.h
made hypercache multi-observable.
[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
9 #include "latlib/paraq.h"
10 #include "latlib/writeout.h"
11
12 using namespace std;
13
14 class obs;
15
16 class o815 {
17  public:
18
19   class obs {
20   public:
21     obs(const string& _obsid, const string& _datadesc, o815 *_O815, char *_obsmem, const int& _obsmemSize);
22     void finish();
23     void meas();
24     void start();
25     string getDataDesc() { return datadesc; };
26   private:
27     virtual void _meas(bool loadedobs)=0;
28     virtual void _finish()=0;
29     virtual void _start()=0;
30   protected:
31     o815 *O815;
32     char *obsMem;
33     ostream *oout;
34     ostream *olog;
35     string obsid, datadesc;
36   };
37
38   struct {
39     int nmeas;
40     int nskip;
41     int nequi;
42     int lsize[2];
43     pair<string,int> obscache;
44     pair<string,int> confcache;
45     string outdir;
46     bool idonly;
47     bool showjobnum;
48   } comargs;
49
50   o815(int argc, char **argv, const string& programid);
51   ~o815();
52   paraq *paraQ;
53   writeout *out;
54   vector<obs*> observables;
55   void mainLoop();
56   string headMaster();
57
58 private:
59   MPI_Status mpiStatus;
60   int numprocs, rank;
61   static void listArg(int *target, int tlen, char *listarg);
62   void parseArgs(int argc, char **argv);
63   string programid;
64 };
65
66 #endif