uk.ac.bristol.star.cdf
Class TtScaler

java.lang.Object
  extended by uk.ac.bristol.star.cdf.TtScaler

public abstract class TtScaler
extends java.lang.Object

Handles conversions between TT_TIME2000 (TT since J2000.0) and Unix (UTC since 1970-01-01) times. An instance of this class is valid for a certain range of TT2000 dates (one that does not straddle a leap second). To convert between TT_TIME2000 and Unix time, first acquire the right instance of this class for the given time, and then use it for the conversion.

An external leap seconds table can be referenced with the "CDF_LEAPSECONDSTABLE" environment variable in exactly the same way as for the NASA library. Otherwise an internal leap seconds table will be used.

Since:
8 Aug 2013

Field Summary
static double J2000_UNIXMILLIS
          Date of the J2000 epoch (2000-01-01T12:00:00) as a Unix time.
static java.lang.String LEAP_FILE_ENV
          Environment variable to locate external leap seconds file ("CDF_LEAPSECONDSTABLE").
 
Constructor Summary
TtScaler(double fixOffset, double scaleBase, double scaleFactor, long fromTt2kMillis, long toTt2kMillis)
          Constructor.
 
Method Summary
 int compareTt2kMillis(long tt2kMillis)
          Assesses validity of this scaler for a given time.
 long getFromTt2kMillis()
          Returns the start of the validity range of this scaler in TT milliseconds since J2000.
static int getScalerIndex(long tt2kMillis, TtScaler[] orderedScalers, int i0)
          Searches an ordered array of scaler instances for one that is applicable to a supplied TT time.
 long getToTt2kMillis()
          Returns the end of the validity range of this scaler in TT milliseconds since J2000.
static TtScaler[] getTtScalers()
          Returns an ordered list of scalers covering the whole range of times.
abstract  int millisIntoLeapSecond(long tt2kMillis)
          Indicates whether and how far a given time is into the duration of a leap second.
 double tt2kToUnixMillis(long tt2kMillis)
          Converts time in milliseconds from TT since J2000 to UTC since 1970 for this scaler.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

J2000_UNIXMILLIS

public static final double J2000_UNIXMILLIS
Date of the J2000 epoch (2000-01-01T12:00:00) as a Unix time.

See Also:
Constant Field Values

LEAP_FILE_ENV

public static final java.lang.String LEAP_FILE_ENV
Environment variable to locate external leap seconds file ("CDF_LEAPSECONDSTABLE"). The environment variable name and file format are just the same as for the NASA CDF library.

See Also:
Constant Field Values
Constructor Detail

TtScaler

public TtScaler(double fixOffset,
                double scaleBase,
                double scaleFactor,
                long fromTt2kMillis,
                long toTt2kMillis)
Constructor.

Parameters:
fixOffset - fixed offset of UTC in seconds from TAI
scaleBase - MJD base for scaling
scaleFactor - factor for scaling
fromTt2kMillis - start of validity range in TT milliseconds since J2000
toTt2kMillis - end of validity range in TT milliseconds since J2000
Method Detail

tt2kToUnixMillis

public double tt2kToUnixMillis(long tt2kMillis)
Converts time in milliseconds from TT since J2000 to UTC since 1970 for this scaler.

Parameters:
tt2kMillis - TT milliseconds since J2000
Returns:
UTC milliseconds since Unix epoch

getFromTt2kMillis

public long getFromTt2kMillis()
Returns the start of the validity range of this scaler in TT milliseconds since J2000.

Returns:
validity range start

getToTt2kMillis

public long getToTt2kMillis()
Returns the end of the validity range of this scaler in TT milliseconds since J2000.

Returns:
validity range end

compareTt2kMillis

public int compareTt2kMillis(long tt2kMillis)
Assesses validity of this scaler for a given time. The result will be zero if this scaler is valid, negative if the given time is earlier than this scaler's range, and positive if the given time is later than this scaler's range.

Parameters:
tt2kMillis - TT milliseconds since J2000
Returns:
validity signum

millisIntoLeapSecond

public abstract int millisIntoLeapSecond(long tt2kMillis)
Indicates whether and how far a given time is into the duration of a leap second. If the supplied time falls during a leap second, the number of milliseconds elapsed since the leap second's start is returned. Otherwise (i.e. nearly always) -1 is returned.

Parameters:
tt2kMillis - TT time in milliseconds since J2000
Returns:
a value in the range 0...1000 if in a leap second, otherwise -1

getScalerIndex

public static int getScalerIndex(long tt2kMillis,
                                 TtScaler[] orderedScalers,
                                 int i0)
Searches an ordered array of scaler instances for one that is applicable to a supplied TT time. The supplied array of instances must be ordered and cover the supplied time value; the result of getTtScalers() is suitable and most likely what you want to use here.

Parameters:
tt2kMillis - TT time in milliseconds since J2000
orderedScalers - list of TtScaler instances ordered in time
i0 - initial guess at index of the right answer; if negative no best guess is assumed

getTtScalers

public static TtScaler[] getTtScalers()
Returns an ordered list of scalers covering the whole range of times. Ordering is by time, as per the compareTt2kMillis(long) method; every long tt2kMillis value will be valid for one of the list.

Returns:
ordered list of time scalers