Index: /trunk/MagicSoft/Cosy/Changelog
===================================================================
--- /trunk/MagicSoft/Cosy/Changelog	(revision 1758)
+++ /trunk/MagicSoft/Cosy/Changelog	(revision 1759)
@@ -49,4 +49,11 @@
      - don't use second SE when only one is attached
      - added SE Test stuff
+
+   * base/BaseLinkDef.h, base/Makefile:
+     - added MParContainer
+     - added MObservatory
+
+   * base/timer.[h,cc]:
+     - changed the calculation of the date according to slalib
 
 
Index: /trunk/MagicSoft/Cosy/base/BaseLinkDef.h
===================================================================
--- /trunk/MagicSoft/Cosy/base/BaseLinkDef.h	(revision 1758)
+++ /trunk/MagicSoft/Cosy/base/BaseLinkDef.h	(revision 1759)
@@ -9,4 +9,6 @@
 #pragma link C++ class MStar+;
 #pragma link C++ class MGList+;
+#pragma link C++ class MParContainer+;
+#pragma link C++ class MObservatory+;
 
 #endif
Index: /trunk/MagicSoft/Cosy/base/Makefile
===================================================================
--- /trunk/MagicSoft/Cosy/base/Makefile	(revision 1758)
+++ /trunk/MagicSoft/Cosy/base/Makefile	(revision 1759)
@@ -33,4 +33,5 @@
 SRCFILES = File.cc \
 	   MStopwatch.cc \
+           MParContainer.cc \
            MThread.cc \
 	   MTimeout.cc \
@@ -40,4 +41,5 @@
            MLog.cc \
            MLogManip.cc \
+           MObservatory.cc \
            MGList.cc \
            timer.cc 
@@ -46,5 +48,7 @@
 	      MGList.h \
 	      MLog.h \
-	      MLogManip.h
+	      MLogManip.h \
+              MObservatory.h \
+              MParContainer.h
 
 SRCS    = $(SRCFILES)
Index: /trunk/MagicSoft/Cosy/base/timer.cc
===================================================================
--- /trunk/MagicSoft/Cosy/base/timer.cc	(revision 1758)
+++ /trunk/MagicSoft/Cosy/base/timer.cc	(revision 1759)
@@ -4,5 +4,5 @@
 #include <iostream.h>
 
-#include "math.h"           // modf
+#include <math.h>           // modf
 #include "sys/time.h"       // struct timeval
 #include "slalib/slalib.h"  // slacldj
@@ -22,25 +22,24 @@
     tv_sec /= 24;
 
-    fDay = tv_sec%365;
-    tv_sec /= 365;
+    Set(tv_sec + 40587);
 
-    fYea = tv_sec+1970;
+    fDiv = fmod((fMs+fSecs)/(60*60*24), 1.0);
+}
 
-    fDay -= (fYea-1972)/4;
+void Timer::Set(const long mjd)
+{
+    //
+    // Express day in Gregorian calendar
+    //  (taken from slalib slaDjcl)
+    //
+    fMjd = mjd;
 
-    int days = fDay;
+    const long jd   = mjd + 2400001;
+    const long n4   = (((((jd*4-17918)/146097)*6)/4+1)/2+jd-37)*4;
+    const long nd10 = (((n4-237)%1461)/4)*10+5;
 
-    fMon=0;
-    do fDay -= fDays[fMon++];
-    while (fDay>0);
-
-    int i=1;
-    while (i<fMon)
-        days -= fDays[i++];
-
-    fDay = days;
-
-    double dummy;
-    fDiv = modf((fMs+fSecs)/(60*60*24), &dummy);
+    fYea = n4/1461 - 4712;
+    fMon = ((nd10/306+2)%12) + 1;
+    fDay = (nd10%306)/10 + 1;
 }
 
@@ -73,4 +72,25 @@
     fMon  = t.fMon;
     fYea  = t.fYea;
+    fMjd  = t.fMjd;
+}
+
+void Timer::SetMjd(double mjd)
+{
+    Set((long)mjd);
+
+    fDiv = fmod(mjd, 1.0);
+
+    mjd -= 40587;
+
+    mjd *= 24;
+    fHor = (int)mjd;
+
+    mjd *= 60;
+    fMin = (int)mjd;
+
+    mjd *= 60;
+    fSec = (int)mjd;
+
+    fMs = mjd * 1000;
 }
 
@@ -83,16 +103,4 @@
 
     return fMs+fSecs;
-}
-
-double Timer::CalcMjd()
-{
-    int status;
-    double mjd=0;
-    slaCldj(fYea, fMon, fDay, &mjd, &status);
-
-    if (status)
-        cout << "Warning: slaCldj returned " << status << endl;
-
-    return mjd + fDiv;
 }
 
@@ -115,3 +123,2 @@
 }
 
-const int Timer::fDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Index: /trunk/MagicSoft/Cosy/base/timer.h
===================================================================
--- /trunk/MagicSoft/Cosy/base/timer.h	(revision 1758)
+++ /trunk/MagicSoft/Cosy/base/timer.h	(revision 1759)
@@ -7,7 +7,7 @@
 {
 private:
-    const static int fDays[12];
     double fMs;
     double fDiv;
+
     int fSec;
     int fSecs;
@@ -18,8 +18,12 @@
     int fYea;
 
+    double fMjd;
+
     char fDateStr[30];
 
+    void Set(const long mjd);
+
 public:
-    Timer() : fMs(0), fSec(0), fSecs(0), fMin(0), fHor(0), fDay(0), fMon(0), fYea(0) {}
+    Timer() : fMs(0), fSec(0), fSecs(0), fMin(0), fHor(0), fDay(0), fMon(0), fYea(0), fMjd(0) {}
     Timer(double t);
     Timer(struct timeval *tv);
@@ -30,6 +34,9 @@
 
     int GetSecs() { return fSecs; }
+
     double Now(); //[s]
-    double CalcMjd();
+    double GetMjd() const { return fMjd+fDiv; }
+
+    virtual void SetMjd(double mjd);
 
     int Day() const   { return fDay; }
