1   /* Copyright 2002-2026 CS GROUP
2    * Licensed to CS GROUP (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.propagation.SpacecraftState;
21  
22  /** Provider for process noise matrices.
23   * @author Luc Maisonobe
24   * @since 9.2
25   */
26  public interface CovarianceMatrixProvider {
27  
28      /** Get the initial covariance matrix.
29       * <p>
30       * The initial covariance matrix is a covariance matrix corresponding to the
31       * parameters managed by the {@link KalmanEstimator Kalman estimator}.
32       * The number of rows/columns and their order are as follows:
33       * </p>
34       * <ul>
35       *   <li>The first 6 components correspond to the 6 orbital parameters
36       *   of the associated propagator. All 6 parameters must always be present,
37       *   regardless of the fact they are estimated or not.</li>
38       *   <li>The following components correspond to the subset of propagation
39       *   parameters of the associated propagator that are estimated.</li>
40       *   <li>The remaining components correspond to the subset of measurements
41       *   parameters that are estimated, considering all measurements, even
42       *   the ones that correspond to spacecrafts not related to the
43       *   associated propagator</li>
44       * </ul>
45       * <p>
46       * In most cases, the initial covariance matrix will be the output matrix
47       * of a previous run of the Kalman filter.
48       * </p>
49       * @param initial initial state
50       * @return physical (i.e. non normalized) initial covariance matrix
51       * @see org.orekit.propagation.conversion.PropagatorBuilder#getOrbitalParameterFactory()
52       * @see org.orekit.orbits.OrbitalParameterFactory#getOrbitalParametersDrivers()
53       * @see org.orekit.propagation.conversion.PropagatorBuilder#getPropagationParametersDrivers()
54       */
55      RealMatrix getInitialCovarianceMatrix(SpacecraftState initial);
56  
57      /** Get the process noise matrix between previous and current states.
58       * <p>
59       * The process noise matrix is a covariance matrix corresponding to the
60       * parameters managed by the {@link KalmanEstimator Kalman estimator}.
61       * The number of rows/columns and their order are as follows:
62       * </p>
63       * <ul>
64       *   <li>The first 6 components correspond to the 6 orbital parameters
65       *   of the associated propagator. All 6 parameters must always be present,
66       *   regardless of the fact they are estimated or not.</li>
67       *   <li>The following components correspond to the subset of propagation
68       *   parameters of the associated propagator that are estimated.</li>
69       *   <li>The remaining components correspond to the subset of measurements
70       *   parameters that are estimated, considering all measurements, even
71       *   the ones that correspond to spacecrafts not related to the
72       *   associated propagator</li>
73       * </ul>
74       * <p>
75       * In most cases, the process noise for the part corresponding to measurements
76       * (the final rows and columns) will be set to 0 for the process noise corresponding
77       * to the evolution between a non-null previous and current state.
78       * </p>
79       * @param previous previous state
80       * @param current current state
81       * @return physical (i.e. non normalized) process noise matrix between
82       * previous and current states
83       * @see org.orekit.propagation.conversion.PropagatorBuilder#getOrbitalParameterFactory()
84       * @see org.orekit.orbits.OrbitalParameterFactory#getOrbitalParametersDrivers()
85       * @see org.orekit.propagation.conversion.PropagatorBuilder#getPropagationParametersDrivers()
86       */
87      RealMatrix getProcessNoiseMatrix(SpacecraftState previous, SpacecraftState current);
88  
89  }