Commit caba1cec authored by Bryan Cazabonne's avatar Bryan Cazabonne

Merge branch 'release-10.3'

parents c984b301 666ae09d
Pipeline #816 passed with stages
in 26 minutes and 58 seconds
......@@ -2,7 +2,7 @@
<project name="orekit" default="jar" basedir=".">
<property name="project.version" value="10.2" />
<property name="project.version" value="10.3" />
<property name="src.dir" location="src" />
<property name="main.src.dir" value="${src.dir}/main/java" />
......@@ -18,7 +18,7 @@
<property name="lib.dir" location="lib" />
<property name="hipparchus.version" value="1.7" />
<property name="hipparchus.version" value="1.8" />
<property name="hipparchus.core.jar" value="hipparchus-core-${hipparchus.version}.jar" />
<property name="hipparchus.geometry.jar" value="hipparchus-geometry-${hipparchus.version}.jar" />
<property name="hipparchus.ode.jar" value="hipparchus-ode-${hipparchus.version}.jar" />
......@@ -30,7 +30,7 @@
<property name="junit.version" value="4.12" />
<property name="junit.jar" value="junit-${junit.version}.jar" />
<property name="junit.maven.path" value="junit/junit" />
<property name="mockito.version" value="3.3.3" />
<property name="mockito.version" value="3.6.28" />
<property name="mockito.jar" value="mockito-core-${mockito.version}.jar" />
<property name="mockito.maven.path" value="org/mockito/mockito-core" />
<property name="bytebuddy.version" value="1.9.10" />
......
......@@ -5,7 +5,7 @@
<groupId>org.orekit</groupId>
<artifactId>orekit</artifactId>
<packaging>jar</packaging>
<version>10.2</version>
<version>10.3</version>
<name>ORbit Extrapolation KIT</name>
<url>http://www.orekit.org/</url>
......@@ -20,12 +20,12 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<orekit.spotbugs-maven-plugin.version>4.0.4</orekit.spotbugs-maven-plugin.version>
<orekit.jacoco-maven-plugin.version>0.8.5</orekit.jacoco-maven-plugin.version>
<orekit.maven-bundle-plugin.version>4.2.1</orekit.maven-bundle-plugin.version>
<orekit.spotbugs-maven-plugin.version>4.1.4</orekit.spotbugs-maven-plugin.version>
<orekit.jacoco-maven-plugin.version>0.8.6</orekit.jacoco-maven-plugin.version>
<orekit.maven-bundle-plugin.version>5.1.1</orekit.maven-bundle-plugin.version>
<orekit.maven-changes-plugin.version>2.12.1</orekit.maven-changes-plugin.version>
<orekit.maven-checkstyle-plugin.version>3.1.1</orekit.maven-checkstyle-plugin.version>
<orekit.checkstyle.version>8.33</orekit.checkstyle.version>
<orekit.checkstyle.version>8.38</orekit.checkstyle.version>
<orekit.maven-clean-plugin.version>3.1.0</orekit.maven-clean-plugin.version>
<orekit.maven-compiler-plugin.version>3.8.1</orekit.maven-compiler-plugin.version>
<orekit.maven-javadoc-plugin.version>3.2.0</orekit.maven-javadoc-plugin.version>
......@@ -33,8 +33,8 @@
<orekit.maven-jxr-plugin.version>3.0.0</orekit.maven-jxr-plugin.version>
<orekit.plantuml-maven-plugin.version>1.2</orekit.plantuml-maven-plugin.version>
<orekit.plantuml.version>1.2020.14</orekit.plantuml.version>
<orekit.maven-project-info-reports-plugin.version>3.1.0</orekit.maven-project-info-reports-plugin.version>
<orekit.maven-resources-plugin.version>3.1.0</orekit.maven-resources-plugin.version>
<orekit.maven-project-info-reports-plugin.version>3.1.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>
<orekit.maven-source-plugin.version>3.2.1</orekit.maven-source-plugin.version>
......@@ -42,7 +42,7 @@
https://issues.apache.org/jira/browse/SUREFIRE-1628 -->
<orekit.maven-surefire-plugin.version>2.22.2</orekit.maven-surefire-plugin.version>
<orekit.maven-surefire-report-plugin.version>3.0.0-M5</orekit.maven-surefire-report-plugin.version>
<orekit.mockito-core.version>3.3.3</orekit.mockito-core.version>
<orekit.mockito-core.version>3.6.28</orekit.mockito-core.version>
<orekit.jgit.buildnumber.version>1.2.10</orekit.jgit.buildnumber.version>
<orekit.build-helper-maven-plugin.version>3.2.0</orekit.build-helper-maven-plugin.version>
<orekit.nexus-staging-maven-plugin.version>1.6.8</orekit.nexus-staging-maven-plugin.version>
......@@ -50,7 +50,7 @@
<orekit.maven-install-plugin.version>3.0.0-M1</orekit.maven-install-plugin.version>
<orekit.mathjax.config>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;MathJax.Hub.Config({ TeX: { extensions: [&quot;autoload.js&quot;]}});&lt;/script&gt;</orekit.mathjax.config>
<orekit.mathjax.enable>&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_CHTML&quot;&gt;&lt;/script&gt;</orekit.mathjax.enable>
<orekit.hipparchus.version>1.7</orekit.hipparchus.version>
<orekit.hipparchus.version>1.8</orekit.hipparchus.version>
<orekit.junit.version>4.12</orekit.junit.version>
<orekit.compiler.source>1.8</orekit.compiler.source>
<orekit.compiler.target>1.8</orekit.compiler.target>
......@@ -227,15 +227,27 @@
<contributor>
<name>&#201;douard Delente</name>
</contributor>
<contributor>
<name>Rapha&#235;l Ferm&#233;</name>
</contributor>
<contributor>
<name>Christine Fernandez-Martin</name>
</contributor>
<contributor>
<name>Mikael Fillastre</name>
</contributor>
<contributor>
<name>Andrea Fiorentino</name>
</contributor>
<contributor>
<name>Romaric Her</name>
</contributor>
<contributor>
<name>James Housden</name>
</contributor>
<contributor>
<name>Shiva Iyer</name>
</contributor>
<contributor>
<name>Fran&#231;ois-Xavier Laffont</name>
</contributor>
......@@ -248,6 +260,9 @@
<contributor>
<name>Lars N&#230;sbye Christensen</name>
</contributor>
<contributor>
<name>Thomas Paulet</name>
</contributor>
<contributor>
<name>Steven Ports</name>
</contributor>
......@@ -263,26 +278,17 @@
<contributor>
<name>Beatriz Salazar Garc&#237;a</name>
</contributor>
<contributor>
<name>Ioanna Stypsanelli</name>
</contributor>
<contributor>
<name>Michael Turner</name>
</contributor>
<contributor>
<name>Gabriele Serafini</name>
</contributor>
<contributor>
<name>Shiva Iyer</name>
</contributor>
<contributor>
<name>David Soulard</name>
</contributor>
<contributor>
<name>Mikael Fillastre</name>
<name>Ioanna Stypsanelli</name>
</contributor>
<contributor>
<name>Andrea Fiorentino</name>
<name>Michael Turner</name>
</contributor>
</contributors>
......
......@@ -20,6 +20,140 @@
<title>Orekit Changes</title>
</properties>
<body>
<release version="10.3" date="2020-12-21"
description="Version 10.3 is a minor release of Orekit.
It includes both new features and bug fixes. New features introduced
in 10.3 are: relativistic clock correction for range, phase, and range rate
measurements, piece wise models for empirical forces, one-way GNSS code
and phase measurements, support for laser ranging data (both CPF and
CRD formats), Lense-Thirring and De Sitter relativistic corrections to
satellite acceleration, support for AGI leap second files, new interfaces
for attitude ephemeris files, Knocke model for Earth's albedo and infrared,
as well as several other new features. This release includes an important
fix in DSST orbit determination allowing to used short period Jacobian
during state transition matrix calculation. It also fixes issues in Kalman
orbit determination and CCSDS ADM format. See the list below for a full
description of the changes.">
<action dev="bryan" type="update" issue="741">
Updated Hipparchus version to 1.8 and updated code with new functionalities.
</action>
<action dev="bryan" type="add" issue="740">
Added aggregator for bounded attitude providers.
</action>
<action dev="thomas" type="add" issue="8">
Added Knocke's Earth rediffused radiation pressure force model.
</action>
<action dev="bryan" type="add" issue="739">
Allowed initialization of attitude provider from attitude segment.
</action>
<action dev="raphael" type="add" issue="705">
Allowed writing an AEM file from a list of SpacecraftStates.
</action>
<action dev="luc" type="add" issue="738">
Added user-defined max iteration and convergence criterion in SecularAndHarmonic.
</action>
<action dev="luc" type="add" issue="737">
Added loading of AGI LeapSecond.dat files.
</action>
<action dev="raphael" type="add" issue="686">
Allowed user-defined format for ephemeris data lines in
StreamingAemWriter, AEMWriter, StreamingOemWriter and OEMWriter.
</action>
<action dev="bryan" type="fix" issue="683">
Updated building instructions.
</action>
<action dev="bryan" type="add" issue="734">
Added getters for phase measurement ambiguity driver.
</action>
<action dev="bryan" type="fix" issue="696">
Allowed to configure initial covariance for measurements in Kalman Filter.
</action>
<action dev="thomas, bryan" type="add" issue="709">
Added clock drift contribution to range rate measurements.
</action>
<action dev="bryan" type="fix" issue="687">
Fixed Javadoc of ElevationMask.
</action>
<action dev="raphael" type="fix" issue="711">
Allowed definition of a default interpolation degree in both AEMParser and OEMParser.
</action>
<action dev="bryan" type="add" issue="733">
Added Lense-Thirring and De Sitter relativistic effects.
</action>
<action dev="melanisti" type="fix" issue="725">
Fixed missing measurement parameter in InterSatellitesRange measurement.
</action>
<action dev="bryan" type="add" issue="732">
Added documentation for checkstyle configuration.
</action>
<action dev="thomas" type="fix" issue="730">
Removed useless loop over an empty list
</action>
<action dev="luc" type="fix" issue="731">
Fixed parsing of some ICGEM gravity fields files.
</action>
<action dev="raphael" type="fix" issue="720">
Added support for measurements parameters in UnivariateProcessNoise
</action>
<action dev="luc" type="fix" issue="729">
Fixed wrong handling of RESET-STATE in analytical propagators.
</action>
<action dev="luc" type="add" issue="728">
Allow creating a node detector without an orbit.
</action>
<action dev="bryan" type="add" issue="671">
Added support for laser ranging file formats.
</action>
<action dev="clement" type="fix" issue="724">
Remove range checks in TLE constructor.
</action>
<action dev="bryan" type="fix" issue="723">
Allowed AEM and OEM writers to write header comments.
</action>
<action dev="bryan" type="add" issue="719">
Added one-way GNSS range and phase measurements for LEO satellite
orbit determination applications.
</action>
<action dev="bryan" type="add" issue="716">
Added piecewise empirical force model.
</action>
<action dev="bryan" type="add" >
Considered a new implementation for empirical forces, to allow piecewise model.
</action>
<action dev="bryan" type="add" issue="703">
Added inter-satellites phase measurement.
</action>
<action dev="bryan" type="fix" issue="695">
Considered covariance matrix from Position measurement in Kalman estimator.
</action>
<action dev="bryan" type="fix" issue="718">
Fixed orbital state used for short periodic Jacobian computation.
</action>
<action dev="bryan" type="add" issue="704">
Allow using user specified velocity error for computing
tolerance vectors for integrators.
</action>
<action dev="bryan" type="add" issue="714">
Added frequency deviation for range-rate measurements.
</action>
<action dev="bryan" type="add" issue="715">
Added relativistic clock correction for range, phase and
inter-satellite range measurements.
</action>
<action dev="bryan" type="fix" issue="706">
Fixed missing measurement parameter in inter-satellites range measurement.
</action>
<action dev="thomas" type="fix" issue="713">
Fixed computation of DSST short period Jacobian.
</action>
<action dev="luc" type="fix" issue="699">
Fixed missing measurement parameter in Phase measurement
</action>
<action dev="luc" type="fix" issue="701">
Fixed wrong handling of propagation parameters by Kalman filter in multi-satellite
context
</action>
</release>
<release version="10.2" date="2020-07-14"
description="Version 10.2 is a minor release of Orekit.
It includes both new features and bug fixes. New features introduced
......
......@@ -31,7 +31,7 @@ import java.lang.annotation.Target;
*/
@Documented
@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD,
ElementType.TYPE})
ElementType.TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface DefaultDataContext {
}
/* Copyright 2002-2020 CS GROUP
* Licensed to CS GROUP (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.attitudes;
import java.util.Collection;
import java.util.Map.Entry;
import java.util.NavigableMap;
import java.util.TreeMap;
import org.hipparchus.RealFieldElement;
import org.orekit.errors.OrekitException;
import org.orekit.errors.OrekitMessages;
import org.orekit.frames.Frame;
import org.orekit.time.AbsoluteDate;
import org.orekit.time.FieldAbsoluteDate;
import org.orekit.utils.FieldPVCoordinatesProvider;
import org.orekit.utils.PVCoordinatesProvider;
/**
* A {@link BoundedAttitudeProvider} that covers a larger time span from several constituent
* attitude providers that cover shorter time spans.
*
* @author Bryan Cazabonne
* @since 10.3
*/
public class AggregateBoundedAttitudeProvider implements BoundedAttitudeProvider {
/** Constituent attitude provider. */
private final NavigableMap<AbsoluteDate, BoundedAttitudeProvider> providers;
/**
* Constructor.
* @param providers attitude providers that provide the backing data for this instance.
* There must be at least one attitude provider in the collection.
* If there are gaps between the {@link BoundedAttitudeProvider#getMaxDate()}
* of one attitude provider and the {@link BoundedAttitudeProvider#getMinDate()}
* of the next attitude provider an exception may be thrown by any method of
* this class at any time. If there are overlaps between the the {@link
* BoundedAttitudeProvider#getMaxDate()} of one attitude provider and the {@link
* BoundedAttitudeProvider#getMinDate()} of the next attitude provider then the
* attitude provider with the latest {@link BoundedAttitudeProvider#getMinDate()}
* is used.
*/
public AggregateBoundedAttitudeProvider(final Collection<? extends BoundedAttitudeProvider> providers) {
// Check if the collection is empty
if (providers.isEmpty()) {
throw new OrekitException(OrekitMessages.NOT_ENOUGH_ATTITUDE_PROVIDERS);
}
// Initialize map
this.providers = new TreeMap<>();
// Loop on providers
for (final BoundedAttitudeProvider provider : providers) {
// Fill collection
this.providers.put(provider.getMinDate(), provider);
}
}
/** {@inheritDoc} */
@Override
public Attitude getAttitude(final PVCoordinatesProvider pvProv, final AbsoluteDate date,
final Frame frame) {
// Get the attitude provider for the given date
final BoundedAttitudeProvider provider = getAttitudeProvider(date);
// Build attitude
return provider.getAttitude(pvProv, date, frame);
}
/** {@inheritDoc} */
@Override
public <T extends RealFieldElement<T>> FieldAttitude<T> getAttitude(final FieldPVCoordinatesProvider<T> pvProv,
final FieldAbsoluteDate<T> date, final Frame frame) {
// Get the attitude provider for the given date
final BoundedAttitudeProvider provider = getAttitudeProvider(date.toAbsoluteDate());
// Build attitude
return provider.getAttitude(pvProv, date, frame);
}
/** {@inheritDoc} */
@Override
public AbsoluteDate getMinDate() {
return providers.firstEntry().getValue().getMinDate();
}
/** {@inheritDoc} */
@Override
public AbsoluteDate getMaxDate() {
return providers.lastEntry().getValue().getMaxDate();
}
/**
* Get the attitude provider to use for the given date.
* @param date of query
* @return attitude provider to use on date.
*/
private BoundedAttitudeProvider getAttitudeProvider(final AbsoluteDate date) {
final Entry<AbsoluteDate, BoundedAttitudeProvider> attitudeEntry = providers.floorEntry(date);
if (attitudeEntry != null) {
return attitudeEntry.getValue();
} else {
// Let the first attitude provider throw the exception
return providers.firstEntry().getValue();
}
}
}
/* Copyright 2002-2020 CS GROUP
* Licensed to CS GROUP (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.attitudes;
import org.orekit.time.AbsoluteDate;
/** This interface is intended for attitude ephemerides valid only during a time range.
*
* <p>This interface provides a mean to retrieve an attitude at
* any time within a given range. It should be implemented by attitude readers
* based on external data files.</p>
*
* @author Bryan Cazabonne