IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 31, 2006, 1:24:21 PM (20 years ago)
Author:
drobbin
Message:

Fixed Time conversions and ToMJD & ToJD fxns to use TAI type. Updated transforms tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astro/psTime.c

    r6204 r6268  
    1010 *  @author Ross Harman, MHPCC
    1111 *
    12  *  @version $Revision: 1.79 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2006-01-26 21:10:22 $
     12 *  @version $Revision: 1.80 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2006-01-31 23:24:21 $
    1414 *
    1515 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    9393static psTime* convertTimeTTTAI(psTime* time);
    9494static psTime* convertTimeUTCUT1(psTime* time);
     95
    9596
    9697/** Removes leading and trailing whitespace and # characters from a string. The cleaned string is a new null
     
    581582    time->type = PS_TIME_TAI;
    582583
     584    //XXX: Set leapseconds to TRUE
     585    //    time->leapsecond = true;
    583586    return time;
    584587}
     
    676679    if(time->type == PS_TIME_UT1) {
    677680        psError(PS_ERR_BAD_PARAMETER_VALUE,true,"Cannot convert from UT1 time type");
     681        //        return NULL;
    678682        return time;
    679683    }
     
    11611165
    11621166    // Determine Julian and modified Julian dates used in table lookup and time delta calculation
    1163     jd = psTimeToJD(time);
    1164     mjd = psTimeToMJD(time);
     1167    if(time->sec < 0) {
     1168        // psTime earlier than epoch
     1169        jd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + JD_EPOCH_OFFSET;
     1170        mjd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + MJD_EPOCH_OFFSET;
     1171    } else {
     1172        // psTime greater than epoch
     1173        jd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + JD_EPOCH_OFFSET;
     1174        mjd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + MJD_EPOCH_OFFSET;
     1175    }
    11651176
    11661177    // Set ceiling of the julian date to the last entry in the lookup table
     
    12051216    PS_ASSERT_INT_WITHIN_RANGE(time2->nsec,0,(psU32)((1e9)-1),0);
    12061217    diff = abs((psS64)p_psTimeGetTAIDelta((psTime*)time1)-(psS64)p_psTimeGetTAIDelta((psTime*)time2));
    1207 
    12081218    return diff;
    12091219}
     
    12481258    PS_ASSERT_INT_WITHIN_RANGE(time->nsec,0,(psU32)((1e9)-1),NAN);
    12491259
     1260    psTime *time2 = p_psTimeCopy(time);
     1261    //XXX: ADD says that this formula works only for PS_TIME_TAI, so adding the following:
     1262    if (time->type == PS_TIME_UTC || time->type == PS_TIME_TT) {
     1263        time2 = psTimeConvert(time2, PS_TIME_TAI);
     1264    }
     1265
    12501266    // Julian date conversion
    1251     if(time->sec < 0) {
     1267    if(time2->sec < 0) {
    12521268        // psTime earlier than epoch
    1253         jd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + JD_EPOCH_OFFSET;
     1269        jd = time2->sec / SEC_PER_DAY - time2->nsec / NSEC_PER_DAY + JD_EPOCH_OFFSET;
    12541270    } else {
    12551271        // psTime greater than epoch
    1256         jd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + JD_EPOCH_OFFSET;
    1257     }
     1272        jd = time2->sec / SEC_PER_DAY + time2->nsec / NSEC_PER_DAY + JD_EPOCH_OFFSET;
     1273    }
     1274
     1275    psFree(time2);
    12581276    return jd;
    12591277}
     
    12661284    PS_ASSERT_PTR_NON_NULL(time,NAN);
    12671285    PS_ASSERT_INT_WITHIN_RANGE(time->nsec,0,(psU32)((1e9)-1),NAN);
     1286    psTime *time2 = p_psTimeCopy(time);
     1287    //XXX: ADD says that this formula works only for PS_TIME_TAI, so adding the following:
     1288    if (time->type == PS_TIME_UTC || time->type == PS_TIME_TT) {
     1289        time2 = psTimeConvert(time2, PS_TIME_TAI);
     1290    }
    12681291
    12691292    // Modified Julian date conversion
    1270     if(time->sec < 0) {
     1293    if(time2->sec < 0) {
    12711294        // psTime earlier than epoch
    1272         mjd = time->sec / SEC_PER_DAY - time->nsec / NSEC_PER_DAY + MJD_EPOCH_OFFSET;
     1295        mjd = time2->sec / SEC_PER_DAY - time2->nsec / NSEC_PER_DAY + MJD_EPOCH_OFFSET;
    12731296    } else {
    12741297        // psTime greater than epoch
    1275         mjd = time->sec / SEC_PER_DAY + time->nsec / NSEC_PER_DAY + MJD_EPOCH_OFFSET;
    1276     }
     1298        mjd = time2->sec / SEC_PER_DAY + time2->nsec / NSEC_PER_DAY + MJD_EPOCH_OFFSET;
     1299    }
     1300    psFree(time2);
    12771301    return mjd;
    12781302}
     
    18101834    PS_ASSERT_PTR_NON_NULL(inTime, NULL);
    18111835    psTime *outTime = psTimeAlloc(inTime->type);
    1812     *outTime = *inTime;
     1836    //    *outTime = *inTime;
     1837    outTime->sec = inTime->sec;
     1838    outTime->nsec = inTime->nsec;
     1839    outTime->leapsecond = inTime->leapsecond;
    18131840    return outTime;
    18141841}
    18151842
     1843
Note: See TracChangeset for help on using the changeset viewer.