Commit 7d4f4a1d authored by Luc Maisonobe's avatar Luc Maisonobe

Added support for IERS Rapid Data and Prediction files.

These files ares the finals.all, finals.data and finals.daily files.
Both IAU-1980 and IAU-2000 are supported and both columns and
XML formats are supported.
 
parent 914222e0
......@@ -5,7 +5,7 @@
<groupId>org.orekit</groupId>
<artifactId>orekit</artifactId>
<packaging>bundle</packaging>
<version>5.0.1</version>
<version>5.0.2</version>
<name>ORbit Extrapolation KIT</name>
<url>http://www.orekit.org/</url>
......
......@@ -102,12 +102,24 @@ import org.orekit.utils.Constants;
*/
public class FramesFactory implements Serializable {
/** Default regular expression for the Rapid Data and Prediction EOP columns files (IAU1980 compatibles). */
public static final String RAPID_DATA_PREDICITON_COLUMNS_1980_FILENAME = "^finals\\.[^.]*$";
/** Default regular expression for the Rapid Data and Prediction EOP XML files (IAU1980 compatibles). */
public static final String RAPID_DATA_PREDICITON_XML_1980_FILENAME = "^finals\\..*\\.xml$";
/** Default regular expression for the EOPC04 files (IAU1980 compatibles). */
public static final String EOPC04_1980_FILENAME = "^eopc04\\.(\\d\\d)$";
/** Default regular expression for the BulletinB files (IAU1980 compatibles). */
public static final String BULLETINB_1980_FILENAME = "^bulletinb((-\\d\\d\\d\\.txt)|(\\.\\d\\d\\d))$";
/** Default regular expression for the Rapid Data and Prediction EOP columns files (IAU2000 compatibles). */
public static final String RAPID_DATA_PREDICITON_COLUMNS_2000_FILENAME = "^finals2000A\\.[^.]*$";
/** Default regular expression for the Rapid Data and Prediction EOP XML files (IAU2000 compatibles). */
public static final String RAPID_DATA_PREDICITON_XML_2000_FILENAME = "^finals2000A\\..*\\.xml$";
/** Default regular expression for the EOPC04 files (IAU2000 compatibles). */
public static final String EOPC04_2000_FILENAME = "^eopc04_IAU2000\\.(\\d\\d)$";
......@@ -188,6 +200,12 @@ public class FramesFactory implements Serializable {
* <p>
* The default loaders look for IERS EOP 05 C04 and bulletins B files.
* </p>
* @param rapidDataColumnsSupportedNames regular expression for supported
* rapid data columns EOP files names
* (may be null if the default IERS file names are used)
* @param rapidDataXMLSupportedNames regular expression for supported
* rapid data XML EOP files names
* (may be null if the default IERS file names are used)
* @param eopC04SupportedNames regular expression for supported EOP05 C04 files names
* (may be null if the default IERS file names are used)
* @param bulletinBSupportedNames regular expression for supported bulletin B files names
......@@ -196,12 +214,20 @@ public class FramesFactory implements Serializable {
* @see <a href="http://hpiers.obspm.fr/eoppc/bul/bulb/">IERS bulletins B</a>
* @see #addEOP1980HistoryLoader(EOP1980HistoryLoader)
* @see #clearEOP1980HistoryLoaders()
* @see #addDefaultEOP2000HistoryLoaders(String, String)
* @see #addDefaultEOP2000HistoryLoaders(String, String, String)
*/
public static void addDefaultEOP1980HistoryLoaders(final String eopC04SupportedNames,
public static void addDefaultEOP1980HistoryLoaders(final String rapidDataColumnsSupportedNames,
final String rapidDataXMLSupportedNames,
final String eopC04SupportedNames,
final String bulletinBSupportedNames) {
final String rapidColNames =
(rapidDataColumnsSupportedNames == null) ? RAPID_DATA_PREDICITON_COLUMNS_1980_FILENAME : rapidDataColumnsSupportedNames;
addEOP1980HistoryLoader(new RapidDataAndPredictionColumnsLoader(rapidColNames));
final String rapidXmlNames =
(rapidDataXMLSupportedNames == null) ? RAPID_DATA_PREDICITON_XML_1980_FILENAME : rapidDataXMLSupportedNames;
addEOP1980HistoryLoader(new RapidDataAndPredictionXMLLoader(rapidXmlNames));
final String eopcNames =
(eopC04SupportedNames == null) ? EOPC04_1980_FILENAME : eopC04SupportedNames;
(eopC04SupportedNames == null) ? EOPC04_1980_FILENAME : eopC04SupportedNames;
addEOP1980HistoryLoader(new EOP05C04FilesLoader(eopcNames));
final String bulBNames =
(bulletinBSupportedNames == null) ? BULLETINB_1980_FILENAME : bulletinBSupportedNames;
......@@ -234,7 +260,7 @@ public class FramesFactory implements Serializable {
public static EOP1980History getEOP1980History() throws OrekitException {
final EOP1980History history = new EOP1980History();
if (EOP_1980_LOADERS.isEmpty()) {
addDefaultEOP1980HistoryLoaders(null, null);
addDefaultEOP1980HistoryLoaders(null, null, null, null);
}
for (final EOP1980HistoryLoader loader : EOP_1980_LOADERS) {
loader.fillHistory(history);
......@@ -259,6 +285,12 @@ public class FramesFactory implements Serializable {
* <p>
* The default loaders look for IERS EOP 05 C04 and bulletins B files.
* </p>
* @param rapidDataColumnsSupportedNames regular expression for supported
* rapid data columns EOP files names
* (may be null if the default IERS file names are used)
* @param rapidDataXMLSupportedNames regular expression for supported
* rapid data XML EOP files names
* (may be null if the default IERS file names are used)
* @param eopC04SupportedNames regular expression for supported EOP05 C04 files names
* (may be null if the default IERS file names are used)
* @param bulletinBSupportedNames regular expression for supported bulletin B files names
......@@ -267,10 +299,18 @@ public class FramesFactory implements Serializable {
* @see <a href="http://hpiers.obspm.fr/eoppc/bul/bulb/">IERS bulletins B</a>
* @see #addEOP2000HistoryLoader(EOP2000HistoryLoader)
* @see #clearEOP2000HistoryLoaders()
* @see #addDefaultEOP1980HistoryLoaders(String, String)
* @see #addDefaultEOP1980HistoryLoaders(String, String, String)
*/
public static void addDefaultEOP2000HistoryLoaders(final String eopC04SupportedNames,
public static void addDefaultEOP2000HistoryLoaders(final String rapidDataColumnsSupportedNames,
final String rapidDataXMLSupportedNames,
final String eopC04SupportedNames,
final String bulletinBSupportedNames) {
final String rapidColNames =
(rapidDataColumnsSupportedNames == null) ? RAPID_DATA_PREDICITON_COLUMNS_2000_FILENAME : rapidDataColumnsSupportedNames;
addEOP2000HistoryLoader(new RapidDataAndPredictionColumnsLoader(rapidColNames));
final String rapidXmlNames =
(rapidDataXMLSupportedNames == null) ? RAPID_DATA_PREDICITON_XML_2000_FILENAME : rapidDataXMLSupportedNames;
addEOP2000HistoryLoader(new RapidDataAndPredictionXMLLoader(rapidXmlNames));
final String eopcNames =
(eopC04SupportedNames == null) ? EOPC04_2000_FILENAME : eopC04SupportedNames;
addEOP2000HistoryLoader(new EOP05C04FilesLoader(eopcNames));
......@@ -305,7 +345,7 @@ public class FramesFactory implements Serializable {
public static EOP2000History getEOP2000History() throws OrekitException {
final EOP2000History history = new EOP2000History();
if (EOP_2000_LOADERS.isEmpty()) {
addDefaultEOP2000HistoryLoaders(null, null);
addDefaultEOP2000HistoryLoaders(null, null, null, null);
}
for (final EOP2000HistoryLoader loader : EOP_2000_LOADERS) {
loader.fillHistory(history);
......
......@@ -20,6 +20,14 @@
<title>Orekit Changes</title>
</properties>
<body>
<release version="5.0.2" date="2011-07-11"
description="version 5.0.2 is an interim release of Orekit with support for IERS
Rapid Data and Prediction files.">
<action dev="luc" type="update">
Added support for IERS Rapid Data and Prediction files finals.all, finals.data and finals.daily,
for both IAU-1980 and IAU-2000 and with both columns and XML formats.
</action>
</release>
<release version="5.0.1" date="2011-04-15"
description="version 5.0.1 is a minor release of Orekit without any functional changes.
The differences with respect to 5.0 are only related to packaging and deployement to
......
......@@ -35,7 +35,7 @@ public class DataProvidersManagerTest {
DataProvidersManager.getInstance().clearProviders();
Assert.assertFalse(DataProvidersManager.getInstance().isSupported(DirectoryCrawler.class));
Assert.assertTrue(DataProvidersManager.getInstance().feed(".*", crawler));
Assert.assertEquals(17, crawler.getCount());
Assert.assertEquals(18, crawler.getCount());
}
@Test
......@@ -49,7 +49,7 @@ public class DataProvidersManagerTest {
} catch (OrekitException oe) {
// expected
}
Assert.assertEquals(17, crawler.getCount());
Assert.assertEquals(18, crawler.getCount());
}
@Test
......
/* Copyright 2002-2011 CS Communication & Systèmes
* Licensed to CS Communication & Systèmes (CS) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* CS licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.orekit.frames;
import java.text.ParseException;
import org.junit.Assert;
import org.junit.Test;
import org.orekit.data.AbstractFilesLoaderTest;
import org.orekit.errors.OrekitException;
import org.orekit.time.AbsoluteDate;
import org.orekit.time.TimeScalesFactory;
import org.orekit.utils.Constants;
public class RapidDataAndPredictionColumnsLoaderTest extends AbstractFilesLoaderTest {
@Test
public void testStartDateDaily1980() throws OrekitException, ParseException {
setRoot("rapid-data-columns");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionColumnsLoader("^finals\\.daily$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2011, 4, 9, TimeScalesFactory.getUTC()),
history.getStartDate());
}
@Test
public void testEndDateDaily1980() throws OrekitException, ParseException {
setRoot("rapid-data-columns");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionColumnsLoader("^finals\\.daily$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2011, 10, 6, TimeScalesFactory.getUTC()),
history.getEndDate());
}
@Test
public void testStartDateDaily2000() throws OrekitException, ParseException {
setRoot("rapid-data-columns");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionColumnsLoader("^finals\\.daily$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2011, 10, 6, TimeScalesFactory.getUTC()),
history.getEndDate());
}
@Test
public void testMissingColumnsPadding1980() throws OrekitException, ParseException {
setRoot("rapid-data-columns");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionColumnsLoader("^finals\\.daily$").fillHistory(history);
// after 2011-06-01, the example daily file has no columns for Bulletin B data
// we don't see anything since we ignore the columns from Bulletin B
AbsoluteDate t1Inf = new AbsoluteDate(2011, 6, 1, TimeScalesFactory.getUTC());
Assert.assertEquals(-67.724, 3600000 * Math.toDegrees(history.getNutationCorrection(t1Inf).getDdpsi()), 1.0e-10);
Assert.assertEquals(-11.807, 3600000 * Math.toDegrees(history.getNutationCorrection(t1Inf).getDdeps()), 1.0e-10);
Assert.assertEquals(-0.2778790, history.getUT1MinusUTC(t1Inf), 1.0e-10);
Assert.assertEquals( 0.5773, 1000 * history.getLOD(t1Inf), 1.0e-10);
AbsoluteDate t1Sup = t1Inf.shiftedBy(Constants.JULIAN_DAY);
Assert.assertEquals(-67.800, 3600000 * Math.toDegrees(history.getNutationCorrection(t1Sup).getDdpsi()), 1.0e-10);
Assert.assertEquals(-11.810, 3600000 * Math.toDegrees(history.getNutationCorrection(t1Sup).getDdeps()), 1.0e-10);
Assert.assertEquals(-0.2784173, history.getUT1MinusUTC(t1Sup), 1.0e-10);
Assert.assertEquals( 0.5055, 1000 * history.getLOD(t1Sup), 1.0e-10);
// after 2011-07-06, the example daily file has no columns for LOD
AbsoluteDate t2Inf = new AbsoluteDate(2011, 7, 6, TimeScalesFactory.getUTC());
Assert.assertEquals(-72.717, 3600000 * Math.toDegrees(history.getNutationCorrection(t2Inf).getDdpsi()), 1.0e-10);
Assert.assertEquals(-10.620, 3600000 * Math.toDegrees(history.getNutationCorrection(t2Inf).getDdeps()), 1.0e-10);
Assert.assertEquals(-0.2915826, history.getUT1MinusUTC(t2Inf), 1.0e-10);
Assert.assertEquals( 0.5020, 1000 * history.getLOD(t2Inf), 1.0e-10);
AbsoluteDate t2Sup = t2Inf.shiftedBy(Constants.JULIAN_DAY);
Assert.assertEquals(-73.194, 3600000 * Math.toDegrees(history.getNutationCorrection(t2Sup).getDdpsi()), 1.0e-10);
Assert.assertEquals(-10.535, 3600000 * Math.toDegrees(history.getNutationCorrection(t2Sup).getDdeps()), 1.0e-10);
Assert.assertEquals(-0.2920866, history.getUT1MinusUTC(t2Sup), 1.0e-10);
Assert.assertEquals( 0.0, 1000 * history.getLOD(t2Sup), 1.0e-10);
// after 2011-09-19, the example daily file has no columns for nutation
AbsoluteDate t3Inf = new AbsoluteDate(2011, 9, 19, TimeScalesFactory.getUTC());
Assert.assertEquals(-79.889, 3600000 * Math.toDegrees(history.getNutationCorrection(t3Inf).getDdpsi()), 1.0e-10);
Assert.assertEquals(-11.125, 3600000 * Math.toDegrees(history.getNutationCorrection(t3Inf).getDdeps()), 1.0e-10);
Assert.assertEquals(-0.3112849, history.getUT1MinusUTC(t3Inf), 1.0e-10);
Assert.assertEquals( 0.0, 1000 * history.getLOD(t3Inf), 1.0e-10);
AbsoluteDate t3Sup = t3Inf.shiftedBy(Constants.JULIAN_DAY);
Assert.assertEquals( 0.0, 3600000 * Math.toDegrees(history.getNutationCorrection(t3Sup).getDdpsi()), 1.0e-10);
Assert.assertEquals( 0.0, 3600000 * Math.toDegrees(history.getNutationCorrection(t3Sup).getDdeps()), 1.0e-10);
Assert.assertEquals(-0.3115675, history.getUT1MinusUTC(t3Sup), 1.0e-10);
Assert.assertEquals( 0.0, 1000 * history.getLOD(t3Sup), 1.0e-10);
}
@Test
public void testMissingColumnsPadding2000() throws OrekitException, ParseException {
setRoot("rapid-data-columns");
EOP2000History history = new EOP2000History();
new RapidDataAndPredictionColumnsLoader("^finals2000A\\.daily$").fillHistory(history);
// after 2011-06-01, the example daily file has no columns for Bulletin B data
// we don't see anything since we ignore the columns from Bulletin B
AbsoluteDate t1Inf = new AbsoluteDate(2011, 6, 1, TimeScalesFactory.getUTC());
Assert.assertEquals(-0.015313, 3600 * Math.toDegrees(history.getPoleCorrection(t1Inf).getXp()), 1.0e-10);
Assert.assertEquals( 0.403214, 3600 * Math.toDegrees(history.getPoleCorrection(t1Inf).getYp()), 1.0e-10);
Assert.assertEquals(-0.2778790, history.getUT1MinusUTC(t1Inf), 1.0e-10);
Assert.assertEquals( 0.5773, 1000 * history.getLOD(t1Inf), 1.0e-10);
AbsoluteDate t1Sup = t1Inf.shiftedBy(Constants.JULIAN_DAY);
Assert.assertEquals(-0.014222, 3600 * Math.toDegrees(history.getPoleCorrection(t1Sup).getXp()), 1.0e-10);
Assert.assertEquals( 0.404430, 3600 * Math.toDegrees(history.getPoleCorrection(t1Sup).getYp()), 1.0e-10);
Assert.assertEquals(-0.2784173, history.getUT1MinusUTC(t1Sup), 1.0e-10);
Assert.assertEquals( 0.5055, 1000 * history.getLOD(t1Sup), 1.0e-10);
// after 2011-07-06, the example daily file has no columns for LOD
AbsoluteDate t2Inf = new AbsoluteDate(2011, 7, 6, TimeScalesFactory.getUTC());
Assert.assertEquals( 0.052605, 3600 * Math.toDegrees(history.getPoleCorrection(t2Inf).getXp()), 1.0e-10);
Assert.assertEquals( 0.440076, 3600 * Math.toDegrees(history.getPoleCorrection(t2Inf).getYp()), 1.0e-10);
Assert.assertEquals(-0.2915826, history.getUT1MinusUTC(t2Inf), 1.0e-10);
Assert.assertEquals( 0.5020, 1000 * history.getLOD(t2Inf), 1.0e-10);
AbsoluteDate t2Sup = t2Inf.shiftedBy(Constants.JULIAN_DAY);
Assert.assertEquals( 0.055115, 3600 * Math.toDegrees(history.getPoleCorrection(t2Sup).getXp()), 1.0e-10);
Assert.assertEquals( 0.440848, 3600 * Math.toDegrees(history.getPoleCorrection(t2Sup).getYp()), 1.0e-10);
Assert.assertEquals(-0.2920866, history.getUT1MinusUTC(t2Sup), 1.0e-10);
Assert.assertEquals( 0.0, 1000 * history.getLOD(t2Sup), 1.0e-10);
}
@Test
public void testEndDateDaily2000() throws OrekitException, ParseException {
setRoot("rapid-data-columns");
EOP2000History history = new EOP2000History();
new RapidDataAndPredictionColumnsLoader("^finals2000A\\.daily$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2011, 10, 6, TimeScalesFactory.getUTC()),
history.getEndDate());
}
}
/* Copyright 2002-2011 CS Communication & Systèmes
* Licensed to CS Communication & Systèmes (CS) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* CS licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.orekit.frames;
import java.text.ParseException;
import org.junit.Assert;
import org.junit.Test;
import org.orekit.data.AbstractFilesLoaderTest;
import org.orekit.errors.OrekitException;
import org.orekit.time.AbsoluteDate;
import org.orekit.time.TimeScalesFactory;
public class RapidDataAndPredictionXMLLoaderTest extends AbstractFilesLoaderTest {
@Test
public void testStartDateDaily1980() throws OrekitException, ParseException {
setRoot("rapid-data-xml");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionXMLLoader("^finals\\.daily\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2010, 7, 1, TimeScalesFactory.getUTC()),
history.getStartDate());
}
@Test
public void testEndDateDaily1980() throws OrekitException, ParseException {
setRoot("rapid-data-xml");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionXMLLoader("^finals\\.daily\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2010, 8, 1, TimeScalesFactory.getUTC()),
history.getEndDate());
}
@Test
public void testStartDateDaily2000() throws OrekitException, ParseException {
setRoot("rapid-data-xml");
EOP2000History history = new EOP2000History();
new RapidDataAndPredictionXMLLoader("^finals2000A\\.daily\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2010, 5, 11, TimeScalesFactory.getUTC()),
history.getStartDate());
}
@Test
public void testEndDateDaily2000() throws OrekitException, ParseException {
setRoot("rapid-data-xml");
EOP2000History history = new EOP2000History();
new RapidDataAndPredictionXMLLoader("^finals2000A\\.daily\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2010, 7, 24, TimeScalesFactory.getUTC()),
history.getEndDate());
}
@Test
public void testStartDateFinals1980() throws OrekitException, ParseException {
setRoot("compressed-data");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionXMLLoader("^finals\\.1999\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(1999, 1, 1, TimeScalesFactory.getUTC()),
history.getStartDate());
}
@Test
public void testEndDateFinals1980() throws OrekitException, ParseException {
setRoot("compressed-data");
EOP1980History history = new EOP1980History();
new RapidDataAndPredictionXMLLoader("^finals\\.1999\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(1999, 12, 31, TimeScalesFactory.getUTC()),
history.getEndDate());
}
@Test
public void testStartDateFinals2000() throws OrekitException, ParseException {
setRoot("regular-data");
EOP2000History history = new EOP2000History();
new RapidDataAndPredictionXMLLoader("^finals2000A\\.2002\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2002, 1, 1, TimeScalesFactory.getUTC()),
history.getStartDate());
}
@Test
public void testEndDateFinals2000() throws OrekitException, ParseException {
setRoot("regular-data");
EOP2000History history = new EOP2000History();
new RapidDataAndPredictionXMLLoader("^finals2000A\\.2002\\.xml$").fillHistory(history);
Assert.assertEquals(new AbsoluteDate(2002, 12, 31, TimeScalesFactory.getUTC()),
history.getEndDate());
}
}
This diff is collapsed.
This diff is collapsed.
<!-- This file has been manually truncated for test purposes -->
<!-- It contains only a subset of a real IERS data file -->
<!-- It is not even continuous as it includes months-long holes -->
<EOP xmlns="http://www.iers.org/2003/schema/eop">
<version>
<product>finals.daily (IAU1980)</product>
<date>2010-05-12</date>
<volume>IAU1980</volume>
<number>---</number>
</version>
<metaFileName/>
<headerLine>
<headerLineDate>
<sYear>Year</sYear>
<sMonth>Month</sMonth>
<sDay>Day</sDay>
<sTime>Time</sTime>
<sMJD>MJD</sMJD>
</headerLineDate>
<headerLineEOP>
<product source="BulletinA">
<sX>X</sX>
<ssigma_X>sigma_X</ssigma_X>
<sY>Y</sY>
<ssigma_Y>sigma_Y</ssigma_Y>
<sUT1-UTC>UT1-UTC</sUT1-UTC>
<ssigma_UT1-UTC>sigma_UT1-UTC</ssigma_UT1-UTC>
<sLOD>LOD</sLOD>
<ssigma_LOD>sigma_LOD</ssigma_LOD>
<sdPsi>dPsi</sdPsi>
<ssigma_dPsi>sigma_dPsi</ssigma_dPsi>
<sdEpsilon>dEpsilon</sdEpsilon>
<ssigma_dEpsilon>sigma_dEpsilon</ssigma_dEpsilon>
</product>
<product source="BulletinB">
<sX>X</sX>
<sY>Y</sY>
<sUT1-UTC>UT1-UTC</sUT1-UTC>
<sdPsi>dPsi</sdPsi>
<sdEpsilon>dEpsilon</sdEpsilon>
</product>
</headerLineEOP>
<headerLineUnits>
<product source="BulletinA">
<X>arcsec</X>
<sigma_X>arcsec</sigma_X>
<Y>arcsec</Y>
<sigma_Y>arcsec</sigma_Y>
<UT1-UTC>sec</UT1-UTC>
<sigma_UT1-UTC>sec</sigma_UT1-UTC>
<LOD>msec</LOD>
<sigma_LOD>msec</sigma_LOD>
<dPsi>marcsec</dPsi>
<sigma_dPsi>marcsec</sigma_dPsi>
<dEpsilon>marcsec</dEpsilon>
<sigma_dEpsilon>marcsec</sigma_dEpsilon>
</product>
<product source="BulletinB">
<X>arcsec</X>
<Y>arcsec</Y>
<UT1-UTC>sec</UT1-UTC>
<dPsi>marcsec</dPsi>
<dEpsilon>marcsec</dEpsilon>
</product>
</headerLineUnits>
</headerLine>
<data product="finals.daily (IAU1980)" source="BulletinA BulletinB">
<timeSeries>
<time>
<dateYear>2010</dateYear>
<dateMonth>07</dateMonth>
<dateDay>01</dateDay>
<MJD>55378</MJD>
</time>
<dataEOP>
<pole source="BulletinA" type="final">
<X>0.060729</X>
<sigma_X>0.000093</sigma_X>
<Y>0.483215</Y>
<sigma_Y>0.000042</sigma_Y>
</pole>
<UT source="BulletinA" type="final">
<UT1-UTC>-0.0568654</UT1-UTC>
<sigma_UT1-UTC>0.0000065</sigma_UT1-UTC>
<LOD>-0.0551</LOD>
<sigma_LOD>0.0045</sigma_LOD>
</UT>
<nutation source="BulletinA" type="final">
<dPsi>-67.373</dPsi>
<sigma_dPsi>0.204</sigma_dPsi>
<dEpsilon>-9.678</dEpsilon>
<sigma_dEpsilon>0.102</sigma_dEpsilon>
</nutation>
<pole source="BulletinB" type="final">
<X>0.060783</X>
<Y>0.483197</Y>
</pole>
<UT source="BulletinB" type="final">
<UT1-UTC>-0.0568663</UT1-UTC>
</UT>
<nutation source="BulletinB" type="final">
<dPsi>-67.364</dPsi>
<dEpsilon>-9.740</dEpsilon>
</nutation>
</dataEOP>
</timeSeries>
<timeSeries>
<time>
<dateYear>2010</dateYear>
<dateMonth>07</dateMonth>
<dateDay>02</dateDay>
<MJD>55379</MJD>
</time>
<dataEOP>
<pole source="BulletinA" type="final">
<X>0.064760</X>
<sigma_X>0.000092</sigma_X>
<Y>0.483590</Y>
<sigma_Y>0.000042</sigma_Y>
</pole>
<UT source="BulletinA" type="final">
<UT1-UTC>-0.0568341</UT1-UTC>
<sigma_UT1-UTC>0.0000063</sigma_UT1-UTC>
<LOD>0.0067</LOD>
<sigma_LOD>0.0051</sigma_LOD>
</UT>
<nutation source="BulletinA" type="final">
<dPsi>-67.654</dPsi>
<sigma_dPsi>0.204</sigma_dPsi>
<dEpsilon>-9.803</dEpsilon>
<sigma_dEpsilon>0.102</sigma_dEpsilon>
</nutation>
<pole source="BulletinB" type="final">
<X/>
<Y/>
</pole>
<UT source="BulletinB" type="final">
<UT1-UTC/>
</UT>
<nutation source="BulletinB" type="final">
<dPsi/>
<dEpsilon/>
</nutation>
</dataEOP>
</timeSeries>
<timeSeries>
<time>
<dateYear>2010</dateYear>
<dateMonth>07</dateMonth>
<dateDay>03</dateDay>
<MJD>55380</MJD>
</time>
<dataEOP>
<pole source="BulletinA" type="final">
<X>0.067871</X>
<sigma_X>0.000086</sigma_X>
<Y>0.483932</Y>
<sigma_Y>0.000042</sigma_Y>
</pole>
<UT source="BulletinA" type="final">
<UT1-UTC>-0.0568738</UT1-UTC>
<sigma_UT1-UTC>0.0000078</sigma_UT1-UTC>
<LOD>0.0534</LOD>
<sigma_LOD>0.0045</sigma_LOD>
</UT>
<nutation source="BulletinA" type="final">
<dPsi>-67.868</dPsi>
<sigma_dPsi>0.216</sigma_dPsi>
<dEpsilon>-9.815</dEpsilon>
<sigma_dEpsilon>0.157</sigma_dEpsilon>
</nutation>
<pole source="BulletinB" type="final">
<X/>
<Y/>
</pole>
<UT source="BulletinB" type="final">
<UT1-UTC/>
</UT>
<nutation source="BulletinB" type="final">
<dPsi/>
<dEpsilon/>
</nutation>
</dataEOP>
</timeSeries>
<timeSeries>
<time>
<dateYear>2010</dateYear>
<dateMonth>07</dateMonth>
<dateDay>31</dateDay>
<MJD>55408</MJD>
</time>
<dataEOP>
<pole source="BulletinA" type="final">
<X>0.137281</X>
<sigma_X>0.000015</sigma_X>
<Y>0.468001</Y>
<sigma_Y>0.000018</sigma_Y>
</pole>
<UT source="BulletinA" type="final">
<UT1-UTC>-0.0496964</UT1-UTC>
<sigma_UT1-UTC>0.0000103</sigma_UT1-UTC>
<LOD>-0.1170</LOD>
<sigma_LOD>0.0076</sigma_LOD>
</UT>
<nutation source="BulletinA" type="prediction">
<dPsi>-72.554</dPsi>
<sigma_dPsi>.600</sigma_dPsi>
<dEpsilon>-9.498</dEpsilon>
<sigma_dEpsilon>.600</sigma_dEpsilon>
</nutation>
<pole source="BulletinB" type="final">
<X/>
<Y/>
</pole>
<UT source="BulletinB" type="final">
<UT1-UTC/>
</UT>
<nutation source="BulletinB" type="final">
<dPsi/>
<dEpsilon/>
</nutation>
</dataEOP>
</timeSeries>
<timeSeries>
<time>
<dateYear>2010</dateYear>
<dateMonth>08</dateMonth>
<dateDay>01</dateDay>
<MJD>55409</MJD>
</time>
<dataEOP>
<pole source="BulletinA" type="final">
<X>0.139469</X>
<sigma_X>0.000014</sigma_X>
<Y>0.466637</Y>
<sigma_Y>0.000018</sigma_Y>
</pole>
<UT source="BulletinA" type="final">
<UT1-UTC>-0.0495399</UT1-UTC>
<sigma_UT1-UTC>0.0000111</sigma_UT1-UTC>
<LOD>-0.1972</LOD>
<sigma_LOD>0.0081</sigma_LOD>
</UT>
<nutation source="BulletinA" type="prediction">
<dPsi>-72.579</dPsi>
<sigma_dPsi>.600</sigma_dPsi>
<dEpsilon>-9.572</dEpsilon>
<sigma_dEpsilon>.600</sigma_dEpsilon>
</nutation>
<pole source="BulletinB" type="final">
<X/>
<Y/>
</pole>
<UT source="BulletinB" type="final">
<UT1-UTC/>
</UT>
<nutation source="BulletinB" type="final">
<dPsi/>
<dEpsilon/>
</nutation>
</dataEOP>
</timeSeries>
<timeSeries>
<time>
<dateYear>2010</dateYear>
<dateMonth>08</dateMonth>