1   /* Copyright 2002-2018 CS Systèmes d'Information
2    * Licensed to CS Systèmes d'Information (CS) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * CS licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *   http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.orekit.estimation.sequential;
18  
19  import org.hipparchus.linear.RealMatrix;
20  import org.orekit.errors.OrekitException;
21  import org.orekit.propagation.SpacecraftState;
22  
23  /** Provider for process noise matrices.
24   * @author Luc Maisonobe
25   * @since 9.2
26   */
27  public interface CovarianceMatrixProvider {
28  
29      /** Get the initial covariance matrix.
30       * <p>
31       * The initial covariance matrix is a covariance matrix corresponding to the
32       * parameters managed by the {@link KalmanEstimator Kalman estimator}.
33       * The number of rows/columns and their order are as follows:
34       * </p>
35       * <ul>
36       *   <li>The first 6 components correspond to the 6 orbital parameters
37       *   of the associated propagator. All 6 parameters must always be present,
38       *   regardless of the fact they are estimated or not.</li>
39       *   <li>The following components correspond to the subset of propagation
40       *   parameters of the associated propagator that are estimated.</li>
41       *   <li>The remaining components correspond to the subset of measurements
42       *   parameters that are estimated, considering all measurements, even
43       *   the ones that correspond to spacecrafts not related to the
44       *   associated propagator</li>
45       * </ul>
46       * <p>
47       * In most cases, the initial covariance matrix will be the output matrix
48       * of a previous run of the Kalman filter.
49       * </p>
50       * @param initial initial state state
51       * @return physical (i.e. non normalized) initial covariance matrix
52       * @exception OrekitException if matrix cannot be computed
53       * @see org.orekit.propagation.conversion.PropagatorBuilder#getOrbitalParametersDrivers()
54       * @see org.orekit.propagation.conversion.PropagatorBuilder#getPropagationParametersDrivers()
55       */
56      RealMatrix getInitialCovarianceMatrix(SpacecraftState initial)
57          throws OrekitException;
58  
59      /** Get the process noise matrix between previous and current states.
60       * <p>
61       * The process noise matrix is a covariance matrix corresponding to the
62       * parameters managed by the {@link KalmanEstimator Kalman estimator}.
63       * The number of rows/columns and their order are as follows:
64       * </p>
65       * <ul>
66       *   <li>The first 6 components correspond to the 6 orbital parameters
67       *   of the associated propagator. All 6 parameters must always be present,
68       *   regardless of the fact they are estimated or not.</li>
69       *   <li>The following components correspond to the subset of propagation
70       *   parameters of the associated propagator that are estimated.</li>
71       *   <li>The remaining components correspond to the subset of measurements
72       *   parameters that are estimated, considering all measurements, even
73       *   the ones that correspond to spacecrafts not related to the
74       *   associated propagator</li>
75       * </ul>
76       * <p>
77       * In most cases, the process noise for the part corresponding to measurements
78       * (the final rows and columns) will be set to 0 for the process noise corresponding
79       * to the evolution between a non-null previous and current state.
80       * </p>
81       * @param previous previous state
82       * @param current current state
83       * @return physical (i.e. non normalized) process noise matrix between
84       * previous and current states
85       * @exception OrekitException if matrix cannot be computed
86       * @see org.orekit.propagation.conversion.PropagatorBuilder#getOrbitalParametersDrivers()
87       * @see org.orekit.propagation.conversion.PropagatorBuilder#getPropagationParametersDrivers()
88       */
89      RealMatrix getProcessNoiseMatrix(SpacecraftState previous, SpacecraftState current)
90          throws OrekitException;
91  
92  }