Commit 9f731446 authored by Bryan Cazabonne's avatar Bryan Cazabonne
Browse files

Merge branch 'release-11.1'

parents 0929549c 24a4446f
Albert Alcarraz García <albert.alcarraz-garcia@c-s.fr> Albert Alcarraz García <albert.alcarraz-garcia@c-s.fr>
Andrea Antolino <andrea.antolino@c-s.fr> Andrea Antolino <Andrea.Antolino@c-s.fr>
Andrea Antolino <andrea.antolino@c-s.fr> Andrea Antolino <andrea.antolino@c-s.fr>
Bruno Revelin <bruno.revelin@c-s.fr> Bruno Revelin <Bruno.Revelin@c-s.fr>
Bryan Cazabonne <bryan.cazabonne@c-s.fr> Bryan <bryan.cazabonne@c-s.com>
Bryan Cazabonne <bryan.cazabonne@c-s.fr> Bryan Cazabonne <bryan.cazabonne@c-s.fr>
Daniel De Sousa <dan.desousa@gmail.com> Daniel De Sousa <dan.desousa@gmail.com>
Evan Ward <evan.ward@nrl.navy.mil> Evan Ward <evan.ward@nrl.navy.mil>
Evan Ward <evan.ward@nrl.navy.mil> Evan Ward <nomail@nowhere.org>
Fabien Maussion <fabien@orekit.org> Fabien Maussion <fabien@orekit.org>
Francesco Rocca <francesco.rocca@telespazio.com> Francesco Rocca <>
Greg Carbott <gregory.carbott@nrl.navy.mil> Greg Carbott <gregory.carbott@nrl.navy.mil>
Guilhem Bonnefille <guilhem.bonnefille@c-s.fr> Guilhem Bonnefille <guilhem.bonnefille@c-s.fr>
Guylaine Prat <guylaine.prat@c-s.fr> Guylaine Prat <guylaine.prat@c-s.fr>
Hank Grabowski <hank@applieddefense.com> Hank Grabowski <hank@applieddefense.com>
Joris Olympio <joris.olympio@c-s.fr> Joris Olympio <joris.olympio@c-s.fr>
Joris Olympio <joris.olympio@c-s.fr> jolympio <joris.olympio@c-s.fr>
Luc Maisonobe <luc@orekit.org> Luc Maisonobe <Luc.Maisonobe@free.fr>
Luc Maisonobe <luc@orekit.org> Luc Maisonobe <Luc.Maisonobe@orekit.org>
Luc Maisonobe <luc@orekit.org> Luc Maisonobe <luc@orekit.org>
Luc Maisonobe <luc@orekit.org> maisonobe <maisonobe@users.noreply.github.com>
Lucian Barbulescu <lucian.barbulescu@c-s.ro> Lucian Barbulescu <lucian.barbulescu@c-s.ro>
Madalin Mamuleanu <mamuleanu.madalin@gmail.com> Madalin Mamuleanu <mamuleanu.madalin@gmail.com>
MaksimP <maksimp86@mail.ru> MaksimP <maksimp86@mail.ru>
Maxime Journot <maxime.journot@c-s.fr> Maxime Journot <Maxime.Journot@c-s.fr>
Maxime Journot <maxime.journot@c-s.fr> Maxime Journot <maxime.journot@c-s.fr>
Nicolas Bernard <nicolas.bernard@c-s.fr> Nicola Bernard <nicolas.bernard@c-s.fr>
Nicolas Bernard <nicolas.bernard@c-s.fr> Nicolas Bernard <nicolas.bernard@c-s.fr>
Pascal Parraud <pascal@orekit.org> Pascal Parraud <pascal@orekit.org>
Pavel Bludov <pbludov@gmail.com> Pavel Bludov <pbludov@gmail.com>
Piotr Listkiewicz <piotr.listkiewicz@gmail.com> Piotr Listkiewicz <piotr.listkiewicz@gmail.com>
Piotr Listkiewicz <piotr.listkiewicz@gmail.com> liscju <piotr.listkiewicz@gmail.com>
rnveach <rveach02@gmail.com> rnveach <rveach02@gmail.com>
Robert Painsi <robertpainsi@gmail.com> Robert Painsi <robertpainsi@gmail.com>
Romain di Costanzo <romain.di-costanzo@c-s.fr> Romain Di Costanzo <romain.di-costanzo@c-s.fr>
Romain di Costanzo <romain.di-costanzo@c-s.fr> rdicosta <romain.di-costanzo@c-s.fr>
Roman Ivanov <ivanov-jr@mail.ru> Roman Ivanov <ivanov-jr@mail.ru>
Sébastien Dinot <sebastien.dinot@c-s.fr> Sebastien Dinot <sebastien.dinot@c-s.fr>
Sébastien Dinot <sebastien.dinot@c-s.fr> Sebastien Dinot <sebastien@dinot.net>
Sébastien Dinot <sebastien.dinot@c-s.fr> Sébastien Dinot <Sebastien.Dinot@c-s.fr>
Sébastien Dinot <sebastien.dinot@c-s.fr> Sébastien Dinot <sebastien.dinot@c-s.fr>
Steven <sljkwsk@yahoo.com> Steven <sljkwsk@yahoo.com>
Steven Ports <steven.ports@c-s.fr> Steven Ports <steven.ports@c-s.fr>
Thierry Ceolin <thierry.ceolin@c-s.fr> Thierry Ceolin <thierry@orekit.org>
Thierry Ceolin <thierry.ceolin@c-s.fr> thierry ceolin <thierry.ceolin@c-s.fr>
Thierry Ceolin <thierry.ceolin@c-s.fr> thierry ceolin <thierry@orekit.org>
Thomas Neidhart <thomas.neidhart@gmail.com> Thomas Neidhart <thomas.neidhart@gmail.com>
Véronique Pommier-Maurussane <vero@orekit.org> Véronique Pommier-Maurussane <vero@orekit.org>
Yannick Jeandroz <yannick.jeandroz@airbus.com> Yannick Jeandroz <yannick.jeandroz@airbus.com>
Abhishek Kumar <abhimait1909@gmail.com> abhishek kumar <abhimait1909@gmail.com>
Albert Alcarraz García <albert.alcarraz-garcia@csgroup.eu> albert alcarraz garcía <albert.alcarraz-garcia@c-s.fr>
Alberto Fossà <alberto.fossa18@gmail.com> alberto fossà <alberto.fossa18@gmail.com>
Alexandr Puzeyev <puzeyev.a@gmail.com> alexandr <puzeyev.a@gmail.com>
Amir Allahvirdi-Zadeh <am.allahverdi@gmail.com> amir allahvirdi-zadeh <am.allahverdi@gmail.com>
Andrea Antolino <andrea.antolino@csgroup.eu> andrea antolino <andrea.antolino@csgroup.eu>
Andrea Antolino <andrea.antolino@csgroup.eu> andrea antolino <andrea.antolino@c-s.fr>
Andrew Goetz <andrew@goetz.space> andrew goetz <andrew@goetz.space>
Andrew Goetz <andrew@goetz.space> andrew goetz <andrew.s.goetz@lmco.com>
Anne-Laure Lugan <anne-laure.lugan@airbus.com> anne-laure lugan <anne-laure.lugan@airbus.com>
Bruno Revelin <bruno.revelin@csgroup.eu> bruno revelin <bruno.revelin@csgroup.eu>
Bruno Revelin <bruno.revelin@csgroup.eu> bruno revelin <bruno.revelin@c-s.fr>
Bryan Cazabonne <bryan.cazabonne@csgroup.eu> bryan cazabonne <bryan.cazabonne@csgroup.eu>
Bryan Cazabonne <bryan.cazabonne@csgroup.eu> bryan cazabonne <bryan.cazabonne@c-s.fr>
Bryan Cazabonne <bryan.cazabonne@csgroup.eu> bryan <bryan.cazabonne@c-s.com>
Chiara Rusconi <chiara.rusconi@csgroup.eu> chiara rusconi <chiara.rusconi@csgroup.eu>
Chiara Rusconi <chiara.rusconi@csgroup.eu> crusconi <chiara.rusconi@csgroup.eu>
Clément Jonglez <clement@jonglez.space> clément jonglez <clement@jonglez.space>
Daniel De Sousa <dan.desousa@gmail.com> daniel de sousa <dan.desousa@gmail.com>
David Soulard <david.soulard@csgroup.eu> david soulard <david.soulard@csgroup.eu>
David Soulard <david.soulard@csgroup.eu> david soulard <david.soulard@c-s.fr>
Dylan Gautreau <dylan.gautreau@csgroup.eu> dylan gautreau <dylan.gautreau@csgroup.eu>
Dylan Gautreau <dylan.gautreau@csgroup.eu> dylan gautreau <dylan.gautreau@c-s.fr>
Evan Ward <evan.ward@nrl.navy.mil> evan ward <evan.ward@nrl.navy.mil>
Evan Ward <evan.ward@nrl.navy.mil> evan ward <nomail@nowhere.org>
Fabien Maussion <fabien@orekit.org> fabien maussion <fabien@orekit.org>
Francesco Rocca <francesco.rocca@telespazio.com> francesco rocca <>
Gabriele Serafini <gabriele.serafini94@gmail.com> gabriele serafini <gabriele.serafini94@gmail.com>
Greg Carbott <gregory.carbott@nrl.navy.mil> greg carbott <gregory.carbott@nrl.navy.mil>
Guilhem Bonnefille <guilhem.bonnefille@csgroup.eu> guilhem bonnefille <guilhem.bonnefille@csgroup.eu>
Guilhem Bonnefille <guilhem.bonnefille@csgroup.eu> guilhem bonnefille <guilhem.bonnefille@c-s.fr>
Guillaume Obrecht <guillaume.obrecht@gmail.com> guillaume obrecht <guillaume.obrecht@gmail.com>
Guylaine Prat <guylaine.prat@csgroup.eu> guylaine prat <guylaine.prat@csgroup.eu>
Guylaine Prat <guylaine.prat@csgroup.eu> guylaine prat <guylaine.prat@c-s.fr>
Hank Grabowski <hank@applieddefense.com> hank grabowski <hank@applieddefense.com>
Joris Olympio <joris.olympio@csgroup.eu> joris olympio <joris.olympio@csgroup.eu>
Joris Olympio <joris.olympio@csgroup.eu> joris olympio <joris.olympio@c-s.fr>
Joris Olympio <joris.olympio@csgroup.eu> jolympio <joris.olympio@c-s.fr>
Julie Bayard <julie.bayard@csgroup.eu> jbayard <jbayard@po18076lx>
Julio Hernanz González <juliohernanzgonzalez@gmail.com> julio hernanz gonzález <juliohernanzgonzalez@gmail.com>
Lara Hue <lara.hue@airbus.com> lara hue <lara.hue@airbus.com>
Lars Næsbye Christensen <lars@naesbye.dk> lars næsbye christensen <lars@naesbye.dk>
Laurene Beauvalet <laurene.beauvalet@csgroup.eu> laurene beauvalet <laurene.beauvalet@csgroup.eu>
Laurene Beauvalet <laurene.beauvalet@csgroup.eu> laurene beauvalet <laurene.beauvalet@c-s.fr>
Luc Maisonobe <luc@orekit.org> luc maisonobe <luc.maisonobe@csgroup.eu>
Luc Maisonobe <luc@orekit.org> luc maisonobe <luc.maisonobe@c-s.fr>
Luc Maisonobe <luc@orekit.org> luc maisonobe <luc.maisonobe@free.fr>
Luc Maisonobe <luc@orekit.org> luc maisonobe <luc.maisonobe@orekit.org>
Luc Maisonobe <luc@orekit.org> luc maisonobe <luc@orekit.org>
Luc Maisonobe <luc@orekit.org> maisonobe <maisonobe@users.noreply.github.com>
Lucian Barbulescu <lucian.barbulescu@c-s.ro> lucian barbulescu <lucian.barbulescu@c-s.ro>
Lukas Matt <lukas@zauberstuhl.de> lukas matt <lukas@zauberstuhl.de>
Madalin Mamuleanu <mamuleanu.madalin@gmail.com> madalin mamuleanu <mamuleanu.madalin@gmail.com>
MaksimP <maksimp86@mail.ru> maksimp <maksimp86@mail.ru>
Mark Rutten <markgrutten@yahoo.com.au> mark rutten <markgrutten@yahoo.com.au>
Maxime Journot <maxime.journot@csgroup.eu> maxime journot <maxime.journot@csgroup.eu>
Maxime Journot <maxime.journot@csgroup.eu> maxime journot <maxime.journot@c-s.fr>
Mélina Vanel <melina.vanel@csgroup.eu> mélina vanel <melina.vanel@csgroup.eu>
Mélina Vanel <melina.vanel@csgroup.eu> mélina vanel <melina.vanel@c-s.fr>
Mélina Vanel <melina.vanel@csgroup.eu> mvanel <Mélina Vanel>
Mikael Fillastre <mikael.fillastre@exotrail.com> mikael fillastre <mikael.fillastre@exotrail.com>
Nick Mancuso <nicholas.mancuso13@gmail.com> nick mancuso <nicholas.mancuso13@gmail.com>
Nicolas Bernard <nicolas.bernard@csgroup.eu> nicola bernard <nicolas.bernard@c-s.fr>
Nicolas Bernard <nicolas.bernard@csgroup.eu> nicolas bernard <nicolas.bernard@csgroup.eu>
Nicolas Bernard <nicolas.bernard@csgroup.eu> nicolas bernard <nicolas.bernard@c-s.fr>
Nicolas Fialton <nicolas.fialton@csgroup.eu> nfialton <nfialton@pc16565lx>
Pascal Parraud <pascal@orekit.org> pascal parraud <pascal@orekit.org>
Pascal Parraud <pascal@orekit.org> pascal parraud <pascal.parraud@csgroup.eu>
Pascal Parraud <pascal@orekit.org> pascal parraud <pascal.parraud@c-s.fr>
Pavel Bludov <pbludov@gmail.com> pavel bludov <pbludov@gmail.com>
Petrus Hyvönen <petrus.hyvonen@sscspace.com> petrus hyvönen <petrus.hyvonen@sscspace.com>
Piotr Listkiewicz <piotr.listkiewicz@gmail.com> piotr listkiewicz <piotr.listkiewicz@gmail.com>
Piotr Listkiewicz <piotr.listkiewicz@gmail.com> liscju <piotr.listkiewicz@gmail.com>
plan3d <plan3d@tutanota.com> plan3d <plan3d@tutanota.com>
Pol Mesalles <pol.developer1@gmail.com> pol mesalles <pol.developer1@gmail.com>
Raphaël Fermé <raphael.ferme@csgroup.eu> ferme raphael <rferme@idsi0.si.c-s.fr>
Raphaël Fermé <raphael.ferme@csgroup.eu> raphael ferme <rferme@csgroup.eu>
Raphaël Fermé <raphael.ferme@csgroup.eu> raphael ferme <rferme@c-s.fr>
rnveach <rveach02@gmail.com> rnveach <rveach02@gmail.com>
Robert Painsi <robertpainsi@gmail.com> robert painsi <robertpainsi@gmail.com>
Romain di Costanzo <romain.di-costanzo@csgroup.eu> romain di costanzo <romain.di-costanzo@csgroup.eu>
Romain di Costanzo <romain.di-costanzo@csgroup.eu> romain di costanzo <romain.di-costanzo@c-s.fr>
Romain di Costanzo <romain.di-costanzo@csgroup.eu> rdicosta <romain.di-costanzo@c-s.fr>
Roman Ivanov <ivanov-jr@mail.ru> roman ivanov <ivanov-jr@mail.ru>
Romaric Her <romaric.her@csgroup.eu> romaric her <romaric.her@csgroup.eu>
Romaric Her <romaric.her@csgroup.eu> romaric her <romaric.her@c-s.fr>
Sébastien Dinot <sebastien.dinot@csgroup.eu> sebastien dinot <sebastien.dinot@c-s.fr>
Sébastien Dinot <sebastien.dinot@csgroup.eu> sebastien dinot <sebastien.dinot@csgroup.eu>
Sébastien Dinot <sebastien.dinot@csgroup.eu> sebastien dinot <sebastien.dinot@free.fr>
Sébastien Dinot <sebastien.dinot@csgroup.eu> sebastien dinot <sebastien@dinot.net>
Sébastien Dinot <sebastien.dinot@csgroup.eu> sebastien dinot <sebastien@palabritudes.net>
Sébastien Dinot <sebastien.dinot@csgroup.eu> sébastien dinot <sebastien.dinot@c-s.fr>
Shipping Enjoyer <ezp33940@zwoho.com> user <user@user.user>
Shiva Iyer <shiva.iyer@gmail.com> shiva_iyer <shiva.iyer@gmail.com>
Steven <sljkwsk@yahoo.com> steven <sljkwsk@yahoo.com>
Steven Ports <steven.ports@csgroup.eu> steven ports <steven.ports@csgroup.eu>
Steven Ports <steven.ports@csgroup.eu> steven ports <steven.ports@c-s.fr>
Thierry Ceolin <thierry.ceolin@csgroup.eu> thierry ceolin <thierry.ceolin@csgroup.eu>
Thierry Ceolin <thierry.ceolin@csgroup.eu> thierry ceolin <thierry.ceolin@c-s.fr>
Thierry Ceolin <thierry.ceolin@csgroup.eu> thierry ceolin <thierry@orekit.org>
Thomas Neidhart <thomas.neidhart@gmail.com> thomas neidhart <thomas.neidhart@gmail.com>
Thomas Paulet <thomas.paulet@csgroup.eu> thomas paulet <thomas.paulet@csgroup.eu>
Thomas Paulet <thomas.paulet@csgroup.eu> thomas paulet <thomas.paulet@c-s.fr>
Thomas Paulet <thomas.paulet@csgroup.eu> root <root@po18481lx>
Véronique Pommier-Maurussane <vero@orekit.org> véronique pommier-maurussane <vero@orekit.org>
Vincent Mouraux <vincent.mouraux@c-s.fr> vincent mouraux <vincent.mouraux@csgroup.eu>
Vincent Mouraux <vincent.mouraux@c-s.fr> vincent mouraux <vincent.mouraux@c-s.fr>
Vyom Yadav <jackhammervyom@gmail.com> vyom-yadav <jackhammervyom@gmail.com>
Vyom Yadav <jackhammervyom@gmail.com> vyomyadav <jackhammervyom@gmail.com>
William Desprats <william.desprats@csgroup.eu> william desprats <william.desprats@csgroup.eu>
William Desprats <william.desprats@csgroup.eu> william desprats <william.desprats@c-s.fr>
Yannick Jeandroz <yannick.jeandroz@airbus.com> yannick jeandroz <yannick.jeandroz@airbus.com>
Yannick Jeandroz <yannick.jeandroz@airbus.com> yannick jeandroz <yannick.jeandroz@gmail.com>
......@@ -2,7 +2,7 @@
<project name="orekit" default="jar" basedir=".">
<property name="project.version" value="11.1" />
<property name="project.version" value="11.1.1" />
<property name="src.dir" location="src" />
<property name="main.src.dir" value="${src.dir}/main/java" />
......
......@@ -5,7 +5,7 @@
<groupId>org.orekit</groupId>
<artifactId>orekit</artifactId>
<packaging>jar</packaging>
<version>11.1</version>
<version>11.1.1</version>
<name>ORbit Extrapolation KIT</name>
<url>http://www.orekit.org/</url>
......@@ -33,7 +33,7 @@
<orekit.maven-jxr-plugin.version>3.1.1</orekit.maven-jxr-plugin.version>
<orekit.plantuml-maven-plugin.version>1.2</orekit.plantuml-maven-plugin.version>
<orekit.plantuml.version>1.2021.10</orekit.plantuml.version>
<orekit.maven-project-info-reports-plugin.version>3.1.2</orekit.maven-project-info-reports-plugin.version>
<orekit.maven-project-info-reports-plugin.version>3.2.1</orekit.maven-project-info-reports-plugin.version>
<orekit.maven-resources-plugin.version>3.2.0</orekit.maven-resources-plugin.version>
<orekit.maven-site-plugin.version>3.9.1</orekit.maven-site-plugin.version>
<orekit.maven-wagon-ssh-plugin.version>3.4.1</orekit.maven-wagon-ssh-plugin.version>
......@@ -324,7 +324,7 @@
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
......@@ -583,6 +583,11 @@
<artifactId>maven-jxr-plugin</artifactId>
<version>${orekit.maven-jxr-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>${orekit.maven-project-info-reports-plugin.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
......
......@@ -20,6 +20,33 @@
<title>Orekit Changes</title>
</properties>
<body>
<release version="11.1.1" date="2022-03-17"
description="Version 11.1.1 is a patch release of Orekit.
It fixes issues related to the parsing of SP3 and Rinex files. It also takes
additional derivatives into account in {Field}SpacecraftState.shiftedBy method.
Finally it includes some improvements in the class documentation">
<action dev="lars" type="add" issue="896">
Added Git configuration instructions in contributing guide.
</action>
<action dev="lars" type="fix" issue="897">
Corrected wrong path in release guide.
</action>
<action dev="bryan" type="fix" issue="894">
Fixed dead link in contributing guidelines.
</action>
<action dev="bryan" type="fix" issue="698">
Added missing BDS-3 signal for Rinex 3.04.
</action>
<action dev="bryan" type="fixed" issue="892">
Removed check of not supported keys in RinexLoader.
</action>
<action dev="lirw1984" type="update" issue="895">
Enhanced parsing of SP3 files.
</action>
<action dev="luc" type="add" issue="902">
Take additional derivatives into account in {Field}SpacecraftState.shiftedBy.
</action>
</release>
<release version="11.1" date="2022-02-14"
description="Version 11.1 is a minor release of Orekit.
It includes both new features and bug fixes. New features introduced
......
......@@ -19,6 +19,8 @@ package org.orekit.files.sp3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.Scanner;
......@@ -28,10 +30,12 @@ import java.util.stream.Stream;
import org.hipparchus.exception.LocalizedCoreFormats;
import org.hipparchus.geometry.euclidean.threed.Vector3D;
import org.hipparchus.util.FastMath;
import org.orekit.annotation.DefaultDataContext;
import org.orekit.data.DataContext;
import org.orekit.data.DataSource;
import org.orekit.errors.OrekitException;
import org.orekit.errors.OrekitIllegalArgumentException;
import org.orekit.errors.OrekitMessages;
import org.orekit.files.general.EphemerisFileParser;
import org.orekit.files.sp3.SP3.SP3Coordinate;
......@@ -39,7 +43,9 @@ import org.orekit.files.sp3.SP3.SP3FileType;
import org.orekit.frames.Frame;
import org.orekit.gnss.TimeSystem;
import org.orekit.time.AbsoluteDate;
import org.orekit.time.DateComponents;
import org.orekit.time.DateTimeComponents;
import org.orekit.time.TimeComponents;
import org.orekit.time.TimeScale;
import org.orekit.time.TimeScales;
import org.orekit.utils.CartesianDerivativesFilter;
......@@ -524,7 +530,7 @@ public class SP3Parser implements EphemerisFileParser<SP3> {
},
/** Parser for comments. */
HEADER_COMMENTS("^/\\*.*") {
HEADER_COMMENTS("^[%]?/\\*.*|") {
/** {@inheritDoc} */
@Override
......@@ -551,14 +557,95 @@ public class SP3Parser implements EphemerisFileParser<SP3> {
final int day = Integer.parseInt(line.substring(11, 13).trim());
final int hour = Integer.parseInt(line.substring(14, 16).trim());
final int minute = Integer.parseInt(line.substring(17, 19).trim());
final double second = Double.parseDouble(line.substring(20, 31).trim());
pi.latestEpoch = new AbsoluteDate(year, month, day,
hour, minute, second,
pi.timeScale);
final double second = Double.parseDouble(line.substring(20).trim());
// some SP3 files have weird epochs as in the following two examples, where
// the middle dates are wrong
//
// * 2016 7 6 16 58 0.00000000
// PL51 11872.234459 3316.551981 101.400098 999999.999999
// VL51 8054.606014 -27076.640110 -53372.762255 999999.999999
// * 2016 7 6 16 60 0.00000000
// PL51 11948.228978 2986.113872 -538.901114 999999.999999
// VL51 4605.419303 -27972.588048 -53316.820671 999999.999999
// * 2016 7 6 17 2 0.00000000
// PL51 11982.652569 2645.786926 -1177.549463 999999.999999
// VL51 1128.248622 -28724.293303 -53097.358387 999999.999999
//
// * 2016 7 6 23 58 0.00000000
// PL51 3215.382310 -7958.586164 8812.395707
// VL51 -18058.659942 -45834.335707 -34496.540437
// * 2016 7 7 24 0 0.00000000
// PL51 2989.229334 -8494.421415 8385.068555
// VL51 -19617.027447 -43444.824985 -36706.159070
// * 2016 7 7 0 2 0.00000000
// PL51 2744.983592 -9000.639164 7931.904779
// VL51 -21072.925764 -40899.633288 -38801.567078
//
// In the first case, the date should really be 2016 7 6 17 0 0.00000000,
// i.e as the minutes field overflows, the hours field should be incremented
// In the second case, the date should really be 2016 7 7 0 0 0.00000000,
// i.e. as the hours field overflows, the day field should be kept as is
// we cannot be sure how carry was managed when these bogus files were written
// so we try different options, incrementing or not previous field, and selecting
// the closest one to expected date
DateComponents dc = new DateComponents(year, month, day);
final List<AbsoluteDate> candidates = new ArrayList<>();
int h = hour;
int m = minute;
double s = second;
if (s >= 60.0) {
s -= 60;
addCandidate(candidates, dc, h, m, s, pi.timeScale);
m++;
}
if (m > 59) {
m = 0;
addCandidate(candidates, dc, h, m, s, pi.timeScale);
h++;
}
if (h > 23) {
h = 0;
addCandidate(candidates, dc, h, m, s, pi.timeScale);
dc = new DateComponents(dc, 1);
}
addCandidate(candidates, dc, h, m, s, pi.timeScale);
final AbsoluteDate expected = pi.latestEpoch == null ?
pi.file.getEpoch() :
pi.latestEpoch.shiftedBy(pi.file.getEpochInterval());
pi.latestEpoch = null;
for (final AbsoluteDate candidate : candidates) {
if (FastMath.abs(candidate.durationFrom(expected)) < 0.01 * pi.file.getEpochInterval()) {
pi.latestEpoch = candidate;
}
}
if (pi.latestEpoch == null) {
// no date recognized, just parse again the initial fields
// in order to generate again an exception
pi.latestEpoch = new AbsoluteDate(year, month, day, hour, minute, second, pi.timeScale);
}
pi.nbEpochs++;
}
/** Add an epoch candidate to a list.
* @param candidates list of candidates
* @param dc date components
* @param hour hour number from 0 to 23
* @param minute minute number from 0 to 59
* @param second second number from 0.0 to 60.0 (excluded)
* @param timeScale time scale
* @since 11.1.1
*/
private void addCandidate(final List<AbsoluteDate> candidates, final DateComponents dc,
final int hour, final int minute, final double second,
final TimeScale timeScale) {
try {
candidates.add(new AbsoluteDate(dc, new TimeComponents(hour, minute, second), timeScale));
} catch (OrekitIllegalArgumentException oiae) {
// ignored
}
}
/** {@inheritDoc} */
@Override
public Stream<LineParser> allowedNext() {
......@@ -586,7 +673,7 @@ public class SP3Parser implements EphemerisFileParser<SP3> {
pi.latestPosition = new Vector3D(x * 1000, y * 1000, z * 1000);
// clock (microsec)
pi.latestClock = line.length() <= 46 ?
pi.latestClock = line.trim().length() <= 46 ?
DEFAULT_CLOCK_VALUE :
Double.parseDouble(line.substring(46, 60).trim()) * 1e-6;
......@@ -670,7 +757,7 @@ public class SP3Parser implements EphemerisFileParser<SP3> {
final Vector3D velocity = new Vector3D(xv / 10d, yv / 10d, zv / 10d);
// clock rate in file is 1e-4 us / s
final double clockRateChange = line.length() <= 46 ?
final double clockRateChange = line.trim().length() <= 46 ?
DEFAULT_CLOCK_VALUE :
Double.parseDouble(line.substring(46, 60).trim()) * 1e-4;
......
......@@ -63,7 +63,7 @@ import org.orekit.utils.ParameterDriver;
* The radiative model of the satellite, and its ability to diffuse, reflect or absorb radiation is handled
* by a {@link RadiationSensitive radiation sensitive model}.
* </p> <p>
* <b>Caution:</b> The spacecraft state must be defined in an Earth centered frame.
* <b>Caution:</b> This model is only suitable for Earth. Using it with another central body is prone to error..
* </p>
*
* @author Thomas Paulet
......
......@@ -87,6 +87,19 @@ public enum Frequency {
/** Beidou B3 (1268.52 MHz). */
B03(SatelliteSystem.BEIDOU, "B3", 124),
/** Beidou B1 (1575.42 MHz).
* FIXME the name must be updated in 12.0.
* It has been set to B04 as a workaround to handle the incompatibility between Rinex 3.02 and Rinex 3.04 for C2X
* In 3.02 the frequency of C2X is equal to 1561.098 MHz whereas in 3.04 it is equal to 1575.42 MHz
*/
B04(SatelliteSystem.BEIDOU, "B1", 154),
/** Beidou B2a (1176.45 MHz). */
B05(SatelliteSystem.BEIDOU, "B2a", 115),
/** Beidou B2 (B2a + B2b) (1191.795MHz). */
B08(SatelliteSystem.BEIDOU, "B2 (B2a+B2b)", 116.5),
/** QZSS L1 (1575.42 MHz). */
J01(SatelliteSystem.QZSS, "L1", 154),
......
......@@ -270,7 +270,6 @@ public class RinexObservationLoader {
int nbSatObs = -1;
int nbLinesSat = -1;
double rcvrClkOffset = 0;
boolean inRunBy = false;
boolean inMarkerName = false;
boolean inObserver = false;
boolean inRecType = false;
......@@ -280,8 +279,6 @@ public class RinexObservationLoader {
boolean inTypesObs = false;
boolean inFirstObs = false;
boolean inPhaseShift = false;
boolean inGlonassSlot = false;
boolean inGlonassCOD = false;
RinexObservationHeader rinexHeader = null;
int scaleFactor = 1;
int nbObsScaleFactor = 0;
......@@ -322,12 +319,12 @@ public class RinexObservationLoader {
while (readLine(reader, false)) {
if (rinexHeader == null) {
switch(line.substring(LABEL_START).trim()) {
switch (line.substring(LABEL_START).trim()) {
case COMMENT :
// nothing to do
break;
case PGM_RUN_BY_DATE :
inRunBy = true;
// nothing to do
break;
case MARKER_NAME :
markerName = parseString(0, 60);
......@@ -482,7 +479,7 @@ public class RinexObservationLoader {
break;
case END_OF_HEADER :
//We make sure that we have read all the mandatory fields inside the header of the Rinex
if (!inRinexVersion || !inRunBy || !inMarkerName ||
if (!inRinexVersion || !inMarkerName ||
!inObserver || !inRecType || !inAntType ||
formatVersion < 2.20 && !inAproxPos ||
formatVersion < 2.20 && !inAntDelta ||
......@@ -673,12 +670,12 @@ public class RinexObservationLoader {
while (readLine(reader, false)) {
if (rinexHeader == null) {
switch(line.substring(LABEL_START).trim()) {
switch (line.substring(LABEL_START).trim()) {
case COMMENT :
// nothing to do
break;
case PGM_RUN_BY_DATE :
inRunBy = true;
// nothing to do
break;
case MARKER_NAME :
markerName = parseString(0, 60);
......@@ -758,7 +755,7 @@ public class RinexObservationLoader {
interval = parseDouble(0, 10);
break;
case TIME_OF_FIRST_OBS :
switch(satelliteSystem) {
switch (satelliteSystem) {
case GPS:
timeScale = timeScales.getGPS();
break;
......@@ -936,20 +933,17 @@ public class RinexObservationLoader {
break;
}
case GLONASS_SLOT_FRQ_NB :
//Not defined yet
inGlonassSlot = true;
// Not defined yet
break;
case GLONASS_COD_PHS_BIS :
//Not defined yet
inGlonassCOD = true;
// Not defined yet
break;
case END_OF_HEADER :
//We make sure that we have read all the mandatory fields inside the header of the Rinex
if (!inRinexVersion || !inRunBy || !inMarkerName ||
if (!inRinexVersion || !inMarkerName ||
!inObserver || !inRecType || !inAntType ||
!inAntDelta || !inTypesObs || !inFirstObs ||
formatVersion >= 3.01 && !inPhaseShift ||
formatVersion >= 3.03 && (!inGlonassSlot || !inGlonassCOD)) {
formatVersion >= 3.01 && !inPhaseShift) {
throw new OrekitException(OrekitMessages.INCOMPLETE_HEADER, name);
}
......
......@@ -24,7 +24,7 @@ package org.orekit.gnss;
*/
public enum SignalCode {
/** Galileo A PRS / IRNSS A SPS / GLONASS L1OCd and L2CSI codes. */
/** Galileo A PRS / IRNSS A SPS / GLONASS L1OCd and L2CSI / Beidou B1A and B3A codes. */
A,
/** Galileo B I/NAV and B C/NAV / IRNSS B RS / GLONASS L1OCp and LO2Cp codes. */
......@@ -33,7 +33,7 @@ public enum SignalCode {
/** GPS C/A / GLONASS C/A / Galileo C / SBAS C/A / QZSS C/A / IRNSS C RS(P) codes. */
C,
/** GPS L1(C/A) + (P2-P1) / QZSS L5D codes. */
/** GPS L1(C/A) + (P2-P1) / QZSS L5D / Beidou Data codes. */
D,
/** QZSS L6E and L6 (D+E) codes. */
......@@ -48,7 +48,10 @@ public enum SignalCode {
/** GPS M code. */
M,
/** GPS P (AS off) / GLONASS P / QZSS L5P codes. */
/** Beidou B1 Codeless. */
N,
/** GPS P (AS off) / GLONASS P / QZSS L5P / Beidou Pilot codes. */
P,
/** GPS Q / GLONASS Q / Galileo Q / SBAS Q / QZSS Q / Beidou Q codes. */
......@@ -60,13 +63,13 @@ public enum SignalCode {
/** GPS Z - tracking and similar (AS off) / code. */
W,
/** GPS L1C (D+P), L2C (M+L) and I+Q / GLONASS I+Q, L1OCd+L1OCp and L2CSI+LO2Cp / Galileo B+C and I+Q / SBAS I+Q / QZSS L1C (D+P), L2C (M+L), I+Q and S+L / Beidou I+Q / IRNSS B+C codes. */
/** GPS L1C (D+P), L2C (M+L) and I+Q / GLONASS I+Q, L1OCd+L1OCp and L2CSI+LO2Cp / Galileo B+C and I+Q / SBAS I+Q / QZSS L1C (D+P), L2C (M+L), I+Q and S+L / Beidou B1 (I+Q), B2b I+Q, B2a Data+Pilot, B3 (I+Q) / IRNSS B+C codes. */
X,
/** GPS Y code. */
Y,
/** Galileo A+B+C / QZSS L1-SAIF, L5(D+P) and L6(D+E) codes. */
/** Galileo A+B+C / QZSS L1-SAIF, L5(D+P) and L6(D+E) / Beidou B2b Data+Pilot codes. */
Z,
/** Codeless. */
......
......@@ -699,10 +699,10 @@ public class FieldSpacecraftState <T extends CalculusFieldElement<T>>
public FieldSpacecraftState<T> shiftedBy(final double dt) {
if (absPva == null) {
return new FieldSpacecraftState<>(orbit.shiftedBy(dt), attitude.shiftedBy(dt),
mass, additional, additionalDot);
mass, shiftAdditional(dt), additionalDot);
} else {
return new FieldSpacecraftState<>(absPva.shiftedBy(dt), attitude.shiftedBy(dt),
mass, additional, additionalDot);
mass, shiftAdditional(dt), additionalDot);
}
}
......@@ -740,13 +740,63 @@ public class FieldSpacecraftState <T extends CalculusFieldElement<T>>
public FieldSpacecraftState<T> shiftedBy(final T dt) {
if (absPva == null) {
return new FieldSpacecraftState<>(orbit.shiftedBy(dt), attitude.shiftedBy(dt),
mass, additional, additionalDot);
mass, shiftAdditional(dt), additionalDot);
} else {
return new FieldSpacecraftState<>(absPva.shiftedBy(dt), attitude.shiftedBy(dt),
mass, additional, additionalDot);
mass, shiftAdditional(dt), additionalDot);
}
}
/** Shift additional states.
* @param dt time shift in seconds
* @return shifted additional states
* @since 11.1.1
*/
private FieldArrayDictionary<T> shiftAdditional(final double dt) {
// fast handling when there are no derivatives at all
if (additionalDot.size() == 0) {
return additional;
}