1   /* Copyright 2002-2025 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  
18  package org.orekit.estimation.common;
19  
20  import org.orekit.estimation.measurements.AngularAzEl;
21  import org.orekit.estimation.measurements.GroundStation;
22  import org.orekit.estimation.measurements.Range;
23  import org.orekit.estimation.measurements.RangeRate;
24  import org.orekit.estimation.measurements.modifiers.AngularRadioRefractionModifier;
25  import org.orekit.estimation.measurements.modifiers.Bias;
26  import org.orekit.estimation.measurements.modifiers.RangeTroposphericDelayModifier;
27  import org.orekit.models.earth.ionosphere.IonosphericModel;
28  
29  /** Container for stations-related data.
30   * @author Luc Maisonobe
31   */
32  class StationData {
33  
34      /** Ground station. */
35      private final GroundStation station;
36  
37      /** Range sigma. */
38      private final double rangeSigma;
39  
40      /** Range bias (may be null if bias is fixed to zero). */
41      private final Bias<Range> rangeBias;
42  
43      /** Range rate sigma. */
44      private final double rangeRateSigma;
45  
46      /** Range rate bias (may be null if bias is fixed to zero). */
47      private final Bias<RangeRate> rangeRateBias;
48  
49      /** Azimuth-elevation sigma. */
50      private final double[] azElSigma;
51  
52      /** Azimuth-elevation bias (may be null if bias is fixed to zero). */
53      private final Bias<AngularAzEl> azELBias;
54  
55      /** Elevation refraction correction (may be null). */
56      private final AngularRadioRefractionModifier refractionCorrection;
57  
58      /** Tropospheric correction (may be null). */
59      private final RangeTroposphericDelayModifier rangeTroposphericCorrection;
60  
61      /** Ionospheric model (may be null). */
62      private final IonosphericModel ionosphericModel;
63  
64      /** Simple constructor.
65       * @param station ground station
66       * @param rangeSigma range sigma
67       * @param rangeBias range bias (may be null if bias is fixed to zero)
68       * @param rangeRateSigma range rate sigma
69       * @param rangeRateBias range rate bias (may be null if bias is fixed to zero)
70       * @param azElSigma azimuth-elevation sigma
71       * @param azELBias azimuth-elevation bias (may be null if bias is fixed to zero)
72       * @param refractionCorrection refraction correction for elevation (may be null)
73       * @param rangeTroposphericCorrection tropospheric correction  for the range (may be null)
74       * @param ionosphericModel ionospheric model for the range (may be null)
75       */
76      StationData(final GroundStation station,
77                  final double rangeSigma, final Bias<Range> rangeBias,
78                  final double rangeRateSigma, final Bias<RangeRate> rangeRateBias,
79                  final double[] azElSigma, final Bias<AngularAzEl> azELBias,
80                  final AngularRadioRefractionModifier refractionCorrection,
81                  final RangeTroposphericDelayModifier rangeTroposphericCorrection,
82                  final IonosphericModel ionosphericModel) {
83          this.station                     = station;
84          this.rangeSigma                  = rangeSigma;
85          this.rangeBias                   = rangeBias;
86          this.rangeRateSigma              = rangeRateSigma;
87          this.rangeRateBias               = rangeRateBias;
88          this.azElSigma                   = azElSigma.clone();
89          this.azELBias                    = azELBias;
90          this.refractionCorrection        = refractionCorrection;
91          this.rangeTroposphericCorrection = rangeTroposphericCorrection;
92          this.ionosphericModel            = ionosphericModel;
93      }
94  
95      /** Get ground station.
96       * @return ground station
97       */
98      public GroundStation getStation() {
99          return station;
100     }
101 
102     /** Get range sigma.
103      * @return range sigma. */
104     public double getRangeSigma() {
105         return rangeSigma;
106     }
107 
108     /** Range bias (may be null if bias is fixed to zero).
109      * @return range bias
110      */
111     public Bias<Range> getRangeBias() {
112         return rangeBias;
113     }
114 
115     /** Range rate sigma.
116      * @return range rate sigma
117      */
118     public double getRangeRateSigma() {
119         return rangeRateSigma;
120     }
121 
122     /** Range rate bias (may be null if bias is fixed to zero).
123      * @return range rate bias
124      */
125     public Bias<RangeRate> getRangeRateBias() {
126         return rangeRateBias;
127     }
128 
129     /** Azimuth-elevation sigma.
130      * @return azimuth-elevation sigma
131      */
132     public double[] getAzElSigma() {
133         return azElSigma.clone();
134     }
135 
136     /** Azimuth-elevation bias (may be null if bias is fixed to zero).
137      * @return azimuth-elevation bias
138      */
139     public Bias<AngularAzEl> getAzELBias() {
140         return azELBias;
141     }
142 
143     /** Elevation refraction correction (may be null).
144      * @return elevation refraction correction
145      */
146     public AngularRadioRefractionModifier getRefractionCorrection() {
147         return refractionCorrection;
148     }
149 
150     /** Tropospheric correction (may be null).
151      * @return tropospheric correction
152      */
153     public RangeTroposphericDelayModifier getRangeTroposphericCorrection() {
154         return rangeTroposphericCorrection;
155     }
156 
157     /** Ionospheric model (may be null).
158      * @return ionospheric model
159      */
160     public IonosphericModel getIonosphericModel() {
161         return ionosphericModel;
162     }
163 
164 }