1   /* Copyright 2002-2021 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.propagation.conversion;
18  
19  import org.orekit.frames.Frame;
20  import org.orekit.orbits.OrbitType;
21  import org.orekit.orbits.PositionAngle;
22  import org.orekit.propagation.Propagator;
23  import org.orekit.time.AbsoluteDate;
24  import org.orekit.utils.ParameterDriversList;
25  
26  /** This interface is the top-level abstraction to build propagators for conversion.
27   * @author Pascal Parraud
28   * @since 6.0
29   */
30  public interface PropagatorBuilder {
31  
32      /** Build a propagator.
33       * @param normalizedParameters normalized values for the selected parameters
34       * @return an initialized propagator
35       */
36      Propagator buildPropagator(double[] normalizedParameters);
37  
38      /** Get the current value of selected normalized parameters.
39       * @return current value of selected normalized parameters
40       */
41      double[] getSelectedNormalizedParameters();
42  
43      /** Get the orbit type expected for the 6 first parameters in
44       * {@link #buildPropagator(double[])}.
45       * @return orbit type to use in {@link #buildPropagator(double[])}
46       * @see #buildPropagator(double[])
47       * @see #getPositionAngle()
48       * @since 7.1
49       */
50      OrbitType getOrbitType();
51  
52      /** Get the position angle type expected for the 6 first parameters in
53       * {@link #buildPropagator(double[])}.
54       * @return position angle type to use in {@link #buildPropagator(double[])}
55       * @see #buildPropagator(double[])
56       * @see #getOrbitType()
57       * @since 7.1
58       */
59      PositionAngle getPositionAngle();
60  
61      /** Get the date of the initial orbit.
62       * @return date of the initial orbit
63       */
64      AbsoluteDate getInitialOrbitDate();
65  
66      /** Get the frame in which the orbit is propagated.
67       * @return frame in which the orbit is propagated
68       */
69      Frame getFrame();
70  
71      /** Get the drivers for the configurable orbital parameters.
72       * @return drivers for the configurable orbital parameters
73       * @since 8.0
74       */
75      ParameterDriversList getOrbitalParametersDrivers();
76  
77      /** Get the drivers for the configurable propagation parameters.
78       * <p>
79       * The parameters typically correspond to force models.
80       * </p>
81       * @return drivers for the configurable propagation parameters
82       * @since 8.0
83       */
84      ParameterDriversList getPropagationParametersDrivers();
85  
86  }