Class FramesFactory


  • public class FramesFactory
    extends Object
    Factory for predefined reference frames.

    FramesFactory Presentation

    Several predefined reference frames are implemented in OREKIT. They are linked together in a tree with the Geocentric Celestial Reference Frame (GCRF) as the root of the tree. This factory is designed to:

    • build the frames tree consistently,
    • avoid rebuilding some frames that may be costly to recreate all the time,
    • set up interpolation/caching features for some frames that may induce costly computation
    • streamline the Earth Orientation Parameters history loading.

    Reference Frames

    The user can retrieve those reference frames using various static methods, the most important ones being: getFrame(Predefined), getGCRF(), getCIRF(IERSConventions, boolean) getTIRF(IERSConventions, boolean), getITRF(IERSConventions, boolean), getITRF(ITRFVersion, IERSConventions, boolean), getEME2000(), getMOD(IERSConventions), getTOD(IERSConventions, boolean), getGTOD(IERSConventions, boolean), getITRFEquinox(IERSConventions, boolean), getTEME() and getVeis1950().

    International Terrestrial Reference Frame

    This frame is the current (as of 2013) reference realization of the International Terrestrial Reference System produced by IERS. It is described in IERS conventions (2010). It replaces the Earth Centered Earth Fixed frame which is the reference frame for GPS satellites.

    This frame is used to define position on solid Earth. It rotates with the Earth and includes the pole motion with respect to Earth crust as provided by IERS Earth Orientation Parameters. Its pole axis is the IERS Reference Pole (IRP).

    Depending on the Earth Orientation Parameters source, different ITRS realization may be returned by getITRF(IERSConventions, boolean), and if EOP are mixed, the ITRF may even jump from one realization to another one. This is not a problem for most users as different ITRS realizations are very close to each other (a few millimeters at Earth surface). If however a specific ITRF version (i.e. an ITRS realization) is needed for very high accuracy, Orekit provides the getITRF(ITRFVersion, IERSConventions, boolean) method to get it and take care of jumps in EOP.

    ITRF can be built using the new non-rotating origin paradigm mandated by IAU 2000 resolution B1.8 and any supported IERS conventions (even IERS 1996 can be used with non-rotating origin paradigm, despite the resolution was not yet adopted at conventions publication time).

    ITRF can also be built using the classical equinox paradigm used prior to IAU 2000 resolution B1.8 and any supported IERS conventions (even IERS 2003 and 2010 can be used with equinox paradigm, despite the resolution is in effect now). The choice of paradigm (non-rotating origin or equinox) and the choice of IERS conventions (i.e. the choice of precession/nutation models) can be made independently by user, Orekit provides all alternatives.

    Intermediate frames

    Orekit also provides all the intermediate frames that are needed to transform between GCRF and ITRF, along the two paths: ITRF/TIRF/CIRF/GCRF for the non-rotating origin paradigm and ITRF/GTOD/TOD/MOD/EME2000/GCRF for the equinox paradigm.

    Earth Orientation Parameters

    This factory also handles loading of Earth Orientation Parameters (EOP) needed for accurate transformations between inertial and Earth fixed frames, using DataProvidersManager features. EOP are IERS conventions dependent, because they correspond to correction to the precession/nutation models. When EOP should be applied, but EOP data are not available, then a null (0.0) correction is used. This can occur when no EOP data is loaded, or when the requested date is beyond the time span of the loaded EOP data. Using a null correction can result in coarse accuracy. To check the time span covered by EOP data use getEOPHistory(IERSConventions, boolean), EOPHistory.getStartDate(), and EOPHistory.getEndDate().

    For more information on configuring the EOP data Orekit uses see https://gitlab.orekit.org/orekit/orekit/blob/master/src/site/markdown/configuration.md.

    Here is a schematic representation of the predefined reference frames tree:

                                                                      GCRF
                                                                        |
                                                     |-----------------------------------------------
                                                     |                         |     Frame bias     |
                                                     |                         |                 EME2000
                                                     |                         |                    |
                                                     |                         | Precession effects |
                                                     |                         |                    |
               Bias, Precession and Nutation effects |                        MOD                  MOD  (Mean Equator Of Date)
                                                     |                         |             w/o EOP corrections
                                                     |                         |  Nutation effects  |
        (Celestial Intermediate Reference Frame)   CIRF                        |                    |
                                                     |                        TOD                  TOD  (True Equator Of Date)
                              Earth natural rotation |                         |             w/o EOP corrections
                                                     |-------------            |    Sidereal Time   |
                                                     |            |            |                    |
      (Terrestrial Intermediate Reference Frame)   TIRF         TIRF         GTOD                 GTOD  (Greenwich True Of Date)
                                                     |    w/o tidal effects                  w/o EOP corrections
                                         Pole motion |            |                                 |
                                                     |            |                                 |-------------
                                                     |            |                                 |            |
     (International Terrestrial Reference Frame)   ITRF         ITRF                              ITRF        VEIS1950
                                                     |    w/o tidal effects                   equinox-based
                                                     |            |
                                               other ITRF     other ITRF
                                                          w/o tidal effects
     

    This is a utility class, so its constructor is private.

    Author:
    Guylaine Prat, Luc Maisonobe, Pascal Parraud
    See Also:
    Frames
    • Field Detail

      • RAPID_DATA_PREDICTION_COLUMNS_1980_FILENAME

        public static final String RAPID_DATA_PREDICTION_COLUMNS_1980_FILENAME
        Default regular expression for the Rapid Data and Prediction EOP columns files (IAU1980 compatibles).
        See Also:
        Constant Field Values
      • XML_1980_FILENAME

        public static final String XML_1980_FILENAME
        Default regular expression for the EOP XML files (IAU1980 compatibles).
        See Also:
        Constant Field Values
      • EOPC04_1980_FILENAME

        public static final String EOPC04_1980_FILENAME
        Default regular expression for the EOPC04 files (IAU1980 compatibles).
        See Also:
        Constant Field Values
      • BULLETINB_1980_FILENAME

        public static final String BULLETINB_1980_FILENAME
        Default regular expression for the BulletinB files (IAU1980 compatibles).
        See Also:
        Constant Field Values
      • RAPID_DATA_PREDICTION_COLUMNS_2000_FILENAME

        public static final String RAPID_DATA_PREDICTION_COLUMNS_2000_FILENAME
        Default regular expression for the Rapid Data and Prediction EOP columns files (IAU2000 compatibles).
        See Also:
        Constant Field Values
      • XML_2000_FILENAME

        public static final String XML_2000_FILENAME
        Default regular expression for the EOP XML files (IAU2000 compatibles).
        See Also:
        Constant Field Values
      • EOPC04_2000_FILENAME

        public static final String EOPC04_2000_FILENAME
        Default regular expression for the EOPC04 files (IAU2000 compatibles).
        See Also:
        Constant Field Values
      • BULLETINB_2000_FILENAME

        public static final String BULLETINB_2000_FILENAME
        Default regular expression for the BulletinB files (IAU2000 compatibles).
        See Also:
        Constant Field Values
      • BULLETINA_FILENAME

        public static final String BULLETINA_FILENAME
        Default regular expression for the BulletinA files (IAU1980 and IAU2000 compatibles).
        See Also:
        Constant Field Values
      • CSV_FILENAME

        public static final String CSV_FILENAME
        Default regular expression for the csv files (IAU1980 and IAU2000 compatibles).
        Since:
        12.0
        See Also:
        Constant Field Values
    • Method Detail

      • getFrames

        @DefaultDataContext
        public static LazyLoadedFrames getFrames()
        Get the instance of Frames that is called by the static methods in this class.
        Returns:
        the reference frames used by this factory.
      • addDefaultEOP1980HistoryLoaders

        @DefaultDataContext
        public static void addDefaultEOP1980HistoryLoaders​(String rapidDataColumnsSupportedNames,
                                                           String rapidDataXMLSupportedNames,
                                                           String eopC04SupportedNames,
                                                           String bulletinBSupportedNames,
                                                           String bulletinASupportedNames,
                                                           String csvSupportedNames)
        Add the default loaders EOP history (IAU 1980 precession/nutation).

        The default loaders look for IERS EOP C04 and bulletins B files. They correspond to IERS 1996 conventions.

        Parameters:
        rapidDataColumnsSupportedNames - regular expression for supported rapid data columns EOP files names (may be null if the default IERS file names are used)
        rapidDataXMLSupportedNames - regular expression for supported XML EOP files names (may be null if the default IERS file names are used)
        eopC04SupportedNames - regular expression for supported EOP C04 files names (may be null if the default IERS file names are used)
        bulletinBSupportedNames - regular expression for supported bulletin B files names (may be null if the default IERS file names are used)
        bulletinASupportedNames - regular expression for supported bulletin A files names (may be null if the default IERS file names are used)
        csvSupportedNames - regular expression for supported csv files names (may be null if the default IERS file names are used)
        Since:
        12.0
        See Also:
        IERS EOP C04 files, addEOPHistoryLoader(IERSConventions, EopHistoryLoader), clearEOPHistoryLoaders(), addDefaultEOP2000HistoryLoaders(String, String, String, String, String, String)
      • addDefaultEOP2000HistoryLoaders

        @DefaultDataContext
        public static void addDefaultEOP2000HistoryLoaders​(String rapidDataColumnsSupportedNames,
                                                           String xmlSupportedNames,
                                                           String eopC04SupportedNames,
                                                           String bulletinBSupportedNames,
                                                           String bulletinASupportedNames,
                                                           String csvSupportedNames)
        Add the default loaders for EOP history (IAU 2000/2006 precession/nutation).

        The default loaders look for IERS EOP C04 and bulletins B files. They correspond to both IERS 2003 and IERS 2010 conventions.

        Parameters:
        rapidDataColumnsSupportedNames - regular expression for supported rapid data columns EOP files names (may be null if the default IERS file names are used)
        xmlSupportedNames - regular expression for supported XML EOP files names (may be null if the default IERS file names are used)
        eopC04SupportedNames - regular expression for supported EOP C04 files names (may be null if the default IERS file names are used)
        bulletinBSupportedNames - regular expression for supported bulletin B files names (may be null if the default IERS file names are used)
        bulletinASupportedNames - regular expression for supported bulletin A files names (may be null if the default IERS file names are used)
        csvSupportedNames - regular expression for supported csv files names (may be null if the default IERS file names are used)
        Since:
        12.0
        See Also:
        IERS EOP C04 files, addEOPHistoryLoader(IERSConventions, EopHistoryLoader), clearEOPHistoryLoaders(), addDefaultEOP1980HistoryLoaders(String, String, String, String, String, String)
      • setEOPContinuityThreshold

        @DefaultDataContext
        public static void setEOPContinuityThreshold​(double threshold)
        Set the threshold to check EOP continuity.

        The default threshold (used if this method is never called) is 5 Julian days. If after loading EOP entries some holes between entries exceed this threshold, an exception will be triggered.

        One case when calling this method is really useful is for applications that use a single Bulletin A, as these bulletins have a roughly one month wide hole for the first bulletin of each month, which contains older final data in addition to the rapid data and the predicted data.

        Parameters:
        threshold - threshold to use for checking EOP continuity (in seconds)
      • getFrame

        @DefaultDataContext
        public static Frame getFrame​(Predefined factoryKey)
        Get one of the predefined frames.
        Parameters:
        factoryKey - key of the frame within the factory
        Returns:
        the predefined frame
      • getGCRF

        @DefaultDataContext
        public static Frame getGCRF()
        Get the unique GCRF frame.

        The GCRF frame is the root frame in the frame tree.

        Returns:
        the unique instance of the GCRF frame
      • getICRF

        @DefaultDataContext
        public static Frame getICRF()
        Get the unique ICRF frame.

        The ICRF frame is centered at solar system barycenter and aligned with GCRF.

        Returns:
        the unique instance of the ICRF frame
      • getEcliptic

        @DefaultDataContext
        public static Frame getEcliptic​(IERSConventions conventions)
        Get the ecliptic frame. The IAU defines the ecliptic as "the plane perpendicular to the mean heliocentric orbital angular momentum vector of the Earth-Moon barycentre in the BCRS (IAU 2006 Resolution B1)." The +z axis is aligned with the angular momentum vector, and the +x axis is aligned with +x axis of MOD.

        This implementation agrees with the JPL 406 ephemerides to within 0.5 arc seconds.

        Parameters:
        conventions - IERS conventions to apply
        Returns:
        the selected reference frame singleton.
      • getEME2000

        @DefaultDataContext
        public static FactoryManagedFrame getEME2000()
        Get the unique EME2000 frame.

        The EME2000 frame is also called the J2000 frame. The former denomination is preferred in Orekit.

        Returns:
        the unique instance of the EME2000 frame
      • getTIRF

        @DefaultDataContext
        public static FactoryManagedFrame getTIRF​(IERSConventions conventions)
        Get the TIRF reference frame, ignoring tidal effects.
        Parameters:
        conventions - IERS conventions to apply
        Returns:
        the selected reference frame singleton. library cannot be read.
      • getITRF

        @DefaultDataContext
        public static VersionedITRF getITRF​(ITRFVersion version,
                                            IERSConventions conventions,
                                            boolean simpleEOP)
        Get a specific International Terrestrial Reference Frame.

        Note that if a specific version of ITRF is required, then simpleEOP should most probably be set to false, as ignoring tidal effects has an effect of the same order of magnitude as the differences between the various ITRF versions.

        Parameters:
        version - ITRF version
        conventions - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
        Since:
        9.2
      • buildUncachedITRF

        public static Frame buildUncachedITRF​(EOPHistory eopHistory,
                                              UTCScale utc)
        Build an uncached International Terrestrial Reference Frame with specific EOP history.

        This frame and its parent frames (TIRF and CIRF) will not be cached, they are rebuilt from scratch each time this method is called. This factory method is intended to be used when EOP history is changed at run time. For regular ITRF use, the getITRF(IERSConventions, boolean) and {link getITRF(ITRFVersion, IERSConventions, boolean) are more suitable.

        Parameters:
        eopHistory - EOP history
        utc - UTC time scale
        Returns:
        an ITRF frame with specified EOP history
        Since:
        12.0
      • getTIRF

        @DefaultDataContext
        public static FactoryManagedFrame getTIRF​(IERSConventions conventions,
                                                  boolean simpleEOP)
        Get the TIRF reference frame.
        Parameters:
        conventions - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
        Since:
        6.1
      • getCIRF

        @DefaultDataContext
        public static FactoryManagedFrame getCIRF​(IERSConventions conventions,
                                                  boolean simpleEOP)
        Get the CIRF2000 reference frame.
        Parameters:
        conventions - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
      • getVeis1950

        @DefaultDataContext
        public static FactoryManagedFrame getVeis1950()
        Get the VEIS 1950 reference frame.

        Its parent frame is the GTOD frame with IERS 1996 conventions without EOP corrections.

        Returns:
        the selected reference frame singleton.
      • getITRFEquinox

        @DefaultDataContext
        public static FactoryManagedFrame getITRFEquinox​(IERSConventions conventions,
                                                         boolean simpleEOP)
        Get the equinox-based ITRF reference frame.
        Parameters:
        conventions - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
        Since:
        6.1
      • getGTOD

        @DefaultDataContext
        public static FactoryManagedFrame getGTOD​(boolean applyEOPCorr)
        Get the GTOD reference frame.

        The applyEOPCorr parameter is available mainly for testing purposes or for consistency with legacy software that don't handle EOP correction parameters. Beware that setting this parameter to false leads to crude accuracy (order of magnitudes for errors might be above 250m in LEO and 1400m in GEO). For this reason, setting this parameter to false is restricted to IERS 1996 conventions, and hence the IERS conventions cannot be freely chosen here.

        Parameters:
        applyEOPCorr - if true, EOP corrections are applied (here, dut1 and lod)
        Returns:
        the selected reference frame singleton.
      • getGTOD

        @DefaultDataContext
        public static FactoryManagedFrame getGTOD​(IERSConventions conventions,
                                                  boolean simpleEOP)
        Get the GTOD reference frame.
        Parameters:
        conventions - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
      • getTOD

        @DefaultDataContext
        public static FactoryManagedFrame getTOD​(boolean applyEOPCorr)
        Get the TOD reference frame.

        The applyEOPCorr parameter is available mainly for testing purposes or for consistency with legacy software that don't handle EOP correction parameters. Beware that setting this parameter to false leads to crude accuracy (order of magnitudes for errors might be above 1m in LEO and 10m in GEO). For this reason, setting this parameter to false is restricted to IERS 1996 conventions, and hence the IERS conventions cannot be freely chosen here.

        Parameters:
        applyEOPCorr - if true, EOP corrections are applied (here, nutation)
        Returns:
        the selected reference frame singleton.
      • getTOD

        @DefaultDataContext
        public static FactoryManagedFrame getTOD​(IERSConventions conventions,
                                                 boolean simpleEOP)
        Get the TOD reference frame.
        Parameters:
        conventions - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
      • getMOD

        @DefaultDataContext
        public static FactoryManagedFrame getMOD​(boolean applyEOPCorr)
        Get the MOD reference frame.

        The applyEOPCorr parameter is available mainly for testing purposes or for consistency with legacy software that don't handle EOP correction parameters. Beware that setting this parameter to false leads to crude accuracy (order of magnitudes for errors might be above 1m in LEO and 10m in GEO). For this reason, setting this parameter to false is restricted to IERS 1996 conventions, and hence the IERS conventions cannot be freely chosen here.

        Parameters:
        applyEOPCorr - if true, EOP corrections are applied (EME2000/GCRF bias compensation)
        Returns:
        the selected reference frame singleton.
      • getTEME

        @DefaultDataContext
        public static FactoryManagedFrame getTEME()
        Get the TEME reference frame.

        The TEME frame is used for the SGP4 model in TLE propagation. This frame has no official definition and there are some ambiguities about whether it should be used as "of date" or "of epoch". This frame should therefore be used only for TLE propagation and not for anything else, as recommended by the CCSDS Orbit Data Message blue book.

        Returns:
        the selected reference frame singleton.
      • getPZ9011

        @DefaultDataContext
        public static FactoryManagedFrame getPZ9011​(IERSConventions convention,
                                                    boolean simpleEOP)
        Get the PZ-90.11 (Parametry Zemly – 1990.11) reference frame.

        The PZ-90.11 reference system was updated on all operational GLONASS satellites starting from 3:00 pm on December 31, 2013.

        The transition between parent frame (ITRF-2008) and PZ-90.11 frame is performed using a seven parameters Helmert transformation.

            From       To      ΔX(m)   ΔY(m)   ΔZ(m)   RX(mas)   RY(mas)  RZ(mas)   Epoch
         ITRF-2008  PZ-90.11  +0.003  +0.001  -0.000   +0.019    -0.042   +0.002     2010
         
        Parameters:
        convention - IERS conventions to apply
        simpleEOP - if true, tidal effects are ignored when interpolating EOP
        Returns:
        the selected reference frame singleton.
        See Also:
        "Springer Handbook of Global Navigation Satellite Systems, Peter Teunissen & Oliver Montenbruck"
      • getNonInterpolatingTransform

        public static Transform getNonInterpolatingTransform​(Frame from,
                                                             Frame to,
                                                             AbsoluteDate date)
        Get the transform between two frames, suppressing all interpolation.

        This method is similar to Frame.getTransformTo(Frame, AbsoluteDate) except it removes the performance enhancing interpolation features that are added by the factory to some frames, in order to focus on accuracy. The interpolation features are intended to save processing time by avoiding doing some lengthy computation like nutation evaluation at each time step and caching some results. This method can be used to avoid this, when very high accuracy is desired, or for testing purposes. It should be used with care, as doing the full computation is really costly for some frames.

        Parameters:
        from - frame from which transformation starts
        to - frame to which transformation ends
        date - date of the transform
        Returns:
        transform between the two frames, avoiding interpolation
      • getNonInterpolatingTransform

        public static <T extends CalculusFieldElement<T>> FieldTransform<T> getNonInterpolatingTransform​(Frame from,
                                                                                                         Frame to,
                                                                                                         FieldAbsoluteDate<T> date)
        Get the transform between two frames, suppressing all interpolation.

        This method is similar to Frame.getTransformTo(Frame, AbsoluteDate) except it removes the performance enhancing interpolation features that are added by the factory to some frames, in order to focus on accuracy. The interpolation features are intended to save processing time by avoiding doing some lengthy computation like nutation evaluation at each time step and caching some results. This method can be used to avoid this, when very high accuracy is desired, or for testing purposes. It should be used with care, as doing the full computation is really costly for some frames.

        Type Parameters:
        T - type of the field elements
        Parameters:
        from - frame from which transformation starts
        to - frame to which transformation ends
        date - date of the transform
        Returns:
        transform between the two frames, avoiding interpolation
        Since:
        9.0
      • findEOP

        public static EOPHistory findEOP​(Frame start)
        Retrieve EOP from a frame hierarchy.

        The frame hierarchy tree is walked from specified frame up to root traversing parent frames, and the providers are checked to see if they reference EOP history. The first EOP history found is returned.

        Parameters:
        start - frame from which to start search, will typically be some Earth related frame, like a topocentric frame or an ITRF frame
        Returns:
        EOP history found while walking the frames tree, or null if no EOP history is found
        Since:
        9.1