Ignore:
Timestamp:
02/14/03 23:21:35 (22 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/base/timer.cc

    r926 r1759  
    44#include <iostream.h>
    55
    6 #include "math.h"           // modf
     6#include <math.h>           // modf
    77#include "sys/time.h"       // struct timeval
    88#include "slalib/slalib.h"  // slacldj
     
    2222    tv_sec /= 24;
    2323
    24     fDay = tv_sec%365;
    25     tv_sec /= 365;
     24    Set(tv_sec + 40587);
    2625
    27     fYea = tv_sec+1970;
     26    fDiv = fmod((fMs+fSecs)/(60*60*24), 1.0);
     27}
    2828
    29     fDay -= (fYea-1972)/4;
     29void Timer::Set(const long mjd)
     30{
     31    //
     32    // Express day in Gregorian calendar
     33    //  (taken from slalib slaDjcl)
     34    //
     35    fMjd = mjd;
    3036
    31     int days = fDay;
     37    const long jd   = mjd + 2400001;
     38    const long n4   = (((((jd*4-17918)/146097)*6)/4+1)/2+jd-37)*4;
     39    const long nd10 = (((n4-237)%1461)/4)*10+5;
    3240
    33     fMon=0;
    34     do fDay -= fDays[fMon++];
    35     while (fDay>0);
    36 
    37     int i=1;
    38     while (i<fMon)
    39         days -= fDays[i++];
    40 
    41     fDay = days;
    42 
    43     double dummy;
    44     fDiv = modf((fMs+fSecs)/(60*60*24), &dummy);
     41    fYea = n4/1461 - 4712;
     42    fMon = ((nd10/306+2)%12) + 1;
     43    fDay = (nd10%306)/10 + 1;
    4544}
    4645
     
    7372    fMon  = t.fMon;
    7473    fYea  = t.fYea;
     74    fMjd  = t.fMjd;
     75}
     76
     77void Timer::SetMjd(double mjd)
     78{
     79    Set((long)mjd);
     80
     81    fDiv = fmod(mjd, 1.0);
     82
     83    mjd -= 40587;
     84
     85    mjd *= 24;
     86    fHor = (int)mjd;
     87
     88    mjd *= 60;
     89    fMin = (int)mjd;
     90
     91    mjd *= 60;
     92    fSec = (int)mjd;
     93
     94    fMs = mjd * 1000;
    7595}
    7696
     
    83103
    84104    return fMs+fSecs;
    85 }
    86 
    87 double Timer::CalcMjd()
    88 {
    89     int status;
    90     double mjd=0;
    91     slaCldj(fYea, fMon, fDay, &mjd, &status);
    92 
    93     if (status)
    94         cout << "Warning: slaCldj returned " << status << endl;
    95 
    96     return mjd + fDiv;
    97105}
    98106
     
    115123}
    116124
    117 const int Timer::fDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Note: See TracChangeset for help on using the changeset viewer.