1   /* Copyright 2022-2025 Luc Maisonobe
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.files.rinex.navigation;
18  
19  import org.orekit.utils.units.Unit;
20  
21  /** Container for data contained in several ionosphere messages.
22   * @author Luc Maisonobe
23   * @since 14.0
24   */
25  public class IonosphereAij {
26  
27      /** Converter for Nequick-G aᵢ₀ parameter. */
28      public static final Unit SFU = Unit.SOLAR_FLUX_UNIT;
29  
30      /** Converter for Nequick-G aᵢ₁ parameter. */
31      public static final Unit SFU_PER_DEG = SFU.divide("sfu/deg", Unit.DEGREE);
32  
33      /** Converter for Nequick-G aᵢ₂ parameter. */
34      public static final Unit SFU_PER_DEG2 = SFU_PER_DEG.divide("sfu/deg²", Unit.DEGREE);
35  
36      /** aᵢ₀ (sfu). */
37      private double ai0;
38  
39      /** aᵢ₁ (sfu/rad). */
40      private double ai1;
41  
42      /** aᵢ₂ (sfu/rad²). */
43      private double ai2;
44  
45      /** Get aᵢ₀.
46       * <p>
47       * Beware Orekit uses SI units here.
48       * In order to retrieve the more traditional SFU, use
49       * {@code IonosphereNequickGMessage.SFU.fromSI(msg.getAi0())}
50       * </p>
51       * @return aᵢ₀ (W/m²/Hz)
52       * @see #SFU
53       */
54      public double getAi0() {
55          return ai0;
56      }
57  
58      /** Set aᵢ₀.
59       * <p>
60       * Beware Orekit uses SI units here.
61       * In order to use the more traditional SFU, use
62       * {@code msg.setAi0(IonosphereNequickGMessage.SFU.toSI(ai0))}
63       * </p>
64       * @param ai0 aᵢ₀ (W/m²/Hz)
65       * @see #SFU
66       */
67      public void setAi0(final double ai0) {
68          this.ai0 = ai0;
69      }
70  
71      /** Get aᵢ₁.
72       * <p>
73       * Beware Orekit uses SI units here.
74       * In order to retrieve the more traditional SFU/deg, use
75       * {@code IonosphereNequickGMessage.SFU_PAR_DEG.fromSI(msg.getAi1())}
76       * </p>
77       * @return aᵢ₁ (W/m²/Hz/rad)
78       * @see #SFU_PER_DEG
79       */
80      public double getAi1() {
81          return ai1;
82      }
83  
84      /** Set aᵢ₁.
85       * <p>
86       * Beware Orekit uses SI units here.
87       * In order to use the more traditional SFU/deg, use
88       * {@code msg.setAi1(IonosphereNequickGMessage.SFU_PER_DEG.toSI(ai1))}
89       * </p>
90       * @param ai1 aᵢ₁ (W/m²/Hz/rad)
91       * @see #SFU_PER_DEG
92       */
93      public void setAi1(final double ai1) {
94          this.ai1 = ai1;
95      }
96  
97      /** Get aᵢ₂.
98       * <p>
99       * Beware Orekit uses SI units here.
100      * In order to retrieve the more traditional SFU/deg², use
101      * {@code IonosphereNequickGMessage.SFU_PER_DEG_2.fromSI(msg.getAi2())}
102      * </p>
103      * @return aᵢ₂ (W/m²/Hz/rad²)
104      * @see #SFU_PER_DEG2
105      */
106     public double getAi2() {
107         return ai2;
108     }
109 
110     /** Set aᵢ₂.
111      * <p>
112      * Beware Orekit uses SI units here.
113      * In order to use the more traditional SFU/deg², use
114      * {@code msg.setAi2(IonosphereNequickGMessage.SFU_PER_DEG2.toSI(ai2))}
115      * </p>
116      * @param ai2 aᵢ₂ (W/m²/Hz/rad²)
117      * @see #SFU_PER_DEG2
118      */
119     public void setAi2(final double ai2) {
120         this.ai2 = ai2;
121     }
122 
123 }