00001
00013 #ifndef LGR_H
00014 #define LGR_H
00015
00016 #include "bdmbase.h"
00017 #include "user_info.h"
00018
00019 namespace bdm{
00020 using std::string;
00021
00025 class memlog : public logger {
00026
00027 protected:
00029 int maxlen;
00031 int ind;
00033 Array<mat> vectors;
00035 string itfilename;
00036 public:
00038 memlog ( int maxlen0, string itf="" ) : maxlen ( maxlen0 ),ind ( 0 ),vectors ( 0 ),itfilename(itf) {}
00039
00040 memlog(): ind ( 0 ),vectors ( 0 ) {}
00041
00043 void init() {
00044 int i; int n =entries.length();
00045 vectors.set_size ( n );
00046 for ( i=0;i<n;i++ ) {vectors(i).set_size (maxlen,entries(i)._dsize() );}
00047 }
00048 void step() {if ( ind<maxlen ) ind++; else it_error ( "memlog::ind is too high;" );}
00049 void logit ( int id, const vec &v ) {
00050 it_assert_debug(id<vectors.length(),"Logger was not initialized, run init().");
00051 if(id>=0){ vectors ( id ).set_row ( ind,v );}
00052 }
00053 void logit ( int id, const double &d ) {
00054 it_assert_debug(id<vectors.length(),"Logger was not initialized, run init().");
00055 it_assert_debug(vectors(id).cols()==1,"Vector expected");
00056 if(id>=0){ vectors ( id ) ( ind )=d;}
00057 }
00059 void itsave(const char* fname);
00061 void finalize() {if (itfilename.length()>0) itsave(itfilename.c_str());};
00062
00063
00076 void from_setting( const Setting &set );
00077
00078
00079 };
00080
00081 UIREGISTER(memlog);
00082
00090 class dirfilelog : public memlog {
00091
00092 protected:
00094 string dirname;
00096 Array<string> scalarnames;
00097 public:
00101 dirfilelog ( string dirname0, int maxlen0 ) : memlog ( maxlen0 ), dirname ( dirname0 ), scalarnames ( 0 ) {}
00102
00103 dirfilelog() {}
00104
00106 void init();
00107 void step();
00108 void finalize();
00112 void write_buffers ( int Len );
00113
00123 void from_setting( const Setting &set );
00124
00125
00126 };
00127
00128 UIREGISTER(dirfilelog);
00129
00130 };
00131 #endif // LGR_H