BeidouCivilianNavigationMessage.java

  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.propagation.analytical.gnss.data;

  18. import org.hipparchus.CalculusFieldElement;
  19. import org.hipparchus.Field;
  20. import org.orekit.gnss.RadioWave;
  21. import org.orekit.gnss.SatelliteSystem;
  22. import org.orekit.time.TimeScales;

  23. /**
  24.  * Container for data contained in a Beidou civilian navigation message.
  25.  * @author Luc Maisonobe
  26.  * @since 12.0
  27.  */
  28. public class BeidouCivilianNavigationMessage extends AbstractNavigationMessage<BeidouCivilianNavigationMessage> {

  29.     /** Identifier for Beidou-3 B1C message type. */
  30.     public static final String CNV1 = "CNV1";

  31.     /** Identifier for Beidou-3 B2A message type. */
  32.     public static final String CNV2 = "CNV2";

  33.     /** Identifier for Beidou-3 B2B message type. */
  34.     public static final String CNV3 = "CNV3";

  35.     /** Radio wave on which navigation signal is sent. */
  36.     private final RadioWave radioWave;

  37.     /** Change rate in semi-major axis (m/s). */
  38.     private double aDot;

  39.     /** Change rate in Δn₀. */
  40.     private double deltaN0Dot;

  41.     /** Issue of Data, Ephemeris. */
  42.     private int iode;

  43.     /** Issue of Data, Clock. */
  44.     private int iodc;

  45.     /** Inter Signal Delay for B1 CD. */
  46.     private double iscB1CD;

  47.     /** Inter Signal Delay for B1 CP. */
  48.     private double iscB1CP;

  49.     /** Inter Signal Delay for B2 AD. */
  50.     private double iscB2AD;

  51.     /** Signal In Space Accuracy Index (along track and across track). */
  52.     private int sisaiOe;

  53.     /** Signal In Space Accuracy Index (radial and clock). */
  54.     private int sisaiOcb;

  55.     /** Signal In Space Accuracy Index (clock drift accuracy). */
  56.     private int sisaiOc1;

  57.     /** Signal In Space Accuracy Index (clock drift rate accuracy). */
  58.     private int sisaiOc2;

  59.     /** Signal In Space Monitoring Accuracy Index. */
  60.     private int sismai;

  61.     /** Health. */
  62.     private int health;

  63.     /** Integrity flags. */
  64.     private int integrityFlags;

  65.     /** B1/B3 Group Delay Differential (s). */
  66.     private double tgdB1Cp;

  67.     /** B2 AP Group Delay Differential (s). */
  68.     private double tgdB2ap;

  69.     /** B2B_i / B3I Group Delay Differential (s). */
  70.     private double tgdB2bI;

  71.     /** Satellite type. */
  72.     private BeidouSatelliteType satelliteType;

  73.     /**
  74.      * Constructor.
  75.      * @param radioWave  radio wave on which navigation signal is sent
  76.      * @param timeScales known time scales
  77.      * @param system     satellite system to consider for interpreting week number
  78.      *                   (may be different from real system, for example in Rinex nav, weeks
  79.      *                   are always according to GPS)
  80.      */
  81.     public BeidouCivilianNavigationMessage(final RadioWave radioWave,
  82.                                            final TimeScales timeScales, final SatelliteSystem system) {
  83.         super(GNSSConstants.BEIDOU_MU, GNSSConstants.BEIDOU_AV, GNSSConstants.BEIDOU_WEEK_NB,
  84.               timeScales, system);
  85.         this.radioWave = radioWave;
  86.     }

  87.     /** Constructor from field instance.
  88.      * @param <T> type of the field elements
  89.      * @param original regular field instance
  90.      */
  91.     public <T extends CalculusFieldElement<T>> BeidouCivilianNavigationMessage(final FieldBeidouCivilianNavigationMessage<T> original) {
  92.         super(original);
  93.         this.radioWave = original.getRadioWave();
  94.         setADot(original.getADot().getReal());
  95.         setDeltaN0Dot(original.getDeltaN0Dot().getReal());
  96.         setIODE(original.getIODE());
  97.         setIODC(original.getIODC());
  98.         setIscB1CD(original.getIscB1CD().getReal());
  99.         setIscB1CP(original.getIscB1CP().getReal());
  100.         setIscB2AD(original.getIscB2AD().getReal());
  101.         setSisaiOe(original.getSisaiOe());
  102.         setSisaiOcb(original.getSisaiOcb());
  103.         setSisaiOc1(original.getSisaiOc1());
  104.         setSisaiOc2(original.getSisaiOc2());
  105.         setSismai(original.getSismai());
  106.         setHealth(original.getHealth());
  107.         setIntegrityFlags(original.getIntegrityFlags());
  108.         setTgdB1Cp(original.getTgdB1Cp().getReal());
  109.         setTgdB2ap(original.getTgdB2ap().getReal());
  110.         setTgdB2bI(original.getTgdB2bI().getReal());
  111.         setSatelliteType(original.getSatelliteType());
  112.     }

  113.     /** {@inheritDoc} */
  114.     @SuppressWarnings("unchecked")
  115.     @Override
  116.     public <T extends CalculusFieldElement<T>, F extends FieldGnssOrbitalElements<T, BeidouCivilianNavigationMessage>>
  117.         F toField(final Field<T> field) {
  118.         return (F) new FieldBeidouCivilianNavigationMessage<>(field, this);
  119.     }

  120.     /**
  121.      * Getter for radio wave.
  122.      * @return radio wave on which navigation signal is sent
  123.      */
  124.     public RadioWave getRadioWave() {
  125.         return radioWave;
  126.     }

  127.     /**
  128.      * Getter for the change rate in semi-major axis.
  129.      * @return the change rate in semi-major axis
  130.      */
  131.     public double getADot() {
  132.         return aDot;
  133.     }

  134.     /**
  135.      * Setter for the change rate in semi-major axis.
  136.      * @param value the change rate in semi-major axis
  137.      */
  138.     public void setADot(final double value) {
  139.         this.aDot = value;
  140.     }

  141.     /**
  142.      * Getter for change rate in Δn₀.
  143.      * @return change rate in Δn₀
  144.      */
  145.     public double getDeltaN0Dot() {
  146.         return deltaN0Dot;
  147.     }

  148.     /**
  149.      * Setter for change rate in Δn₀.
  150.      * @param deltaN0Dot change rate in Δn₀
  151.      */
  152.     public void setDeltaN0Dot(final double deltaN0Dot) {
  153.         this.deltaN0Dot = deltaN0Dot;
  154.     }

  155.     /**
  156.      * Getter for the Issue Of Data Ephemeris (IODE).
  157.      * @return the Issue Of Data Ephemeris (IODE)
  158.      */
  159.     public int getIODE() {
  160.         return iode;
  161.     }

  162.     /**
  163.      * Setter for the Issue of Data Ephemeris.
  164.      * @param value the IODE to set
  165.      */
  166.     public void setIODE(final int value) {
  167.         this.iode = value;
  168.     }

  169.     /**
  170.      * Getter for the Issue Of Data Clock (IODC).
  171.      * @return the Issue Of Data Clock (IODC)
  172.      */
  173.     public int getIODC() {
  174.         return iodc;
  175.     }

  176.     /**
  177.      * Setter for the Issue of Data Clock.
  178.      * @param value the IODC to set
  179.      */
  180.     public void setIODC(final int value) {
  181.         this.iodc = value;
  182.     }

  183.     /**
  184.      * Getter for inter Signal Delay for B1 CD.
  185.      * @return inter signal delay
  186.      */
  187.     public double getIscB1CD() {
  188.         return iscB1CD;
  189.     }

  190.     /**
  191.      * Setter for inter Signal Delay for B1 CD.
  192.      * @param delay delay to set
  193.      */
  194.     public void setIscB1CD(final double delay) {
  195.         this.iscB1CD = delay;
  196.     }

  197.     /**
  198.      * Getter for inter Signal Delay for B2 AD.
  199.      * @return inter signal delay
  200.      */
  201.     public double getIscB2AD() {
  202.         return iscB2AD;
  203.     }

  204.     /**
  205.      * Setter for inter Signal Delay for B2 AD.
  206.      * @param delay delay to set
  207.      */
  208.     public void setIscB2AD(final double delay) {
  209.         this.iscB2AD = delay;
  210.     }

  211.     /**
  212.      * Getter for inter Signal Delay for B1 CP.
  213.      * @return inter signal delay
  214.      */
  215.     public double getIscB1CP() {
  216.         return iscB1CP;
  217.     }

  218.     /**
  219.      * Setter for inter Signal Delay for B1 CP.
  220.      * @param delay delay to set
  221.      */
  222.     public void setIscB1CP(final double delay) {
  223.         this.iscB1CP = delay;
  224.     }

  225.     /**
  226.      * Getter for Signal In Space Accuracy Index (along track and across track).
  227.      * @return Signal In Space Accuracy Index (along track and across track)
  228.      */
  229.     public int getSisaiOe() {
  230.         return sisaiOe;
  231.     }

  232.     /**
  233.      * Setter for Signal In Space Accuracy Index (along track and across track).
  234.      * @param sisaiOe Signal In Space Accuracy Index (along track and across track)
  235.      */
  236.     public void setSisaiOe(final int sisaiOe) {
  237.         this.sisaiOe = sisaiOe;
  238.     }

  239.     /**
  240.      * Getter for Signal In Space Accuracy Index (radial and clock).
  241.      * @return Signal In Space Accuracy Index (radial and clock)
  242.      */
  243.     public int getSisaiOcb() {
  244.         return sisaiOcb;
  245.     }

  246.     /**
  247.      * Setter for Signal In Space Accuracy Index (radial and clock).
  248.      * @param sisaiOcb Signal In Space Accuracy Index (radial and clock)
  249.      */
  250.     public void setSisaiOcb(final int sisaiOcb) {
  251.         this.sisaiOcb = sisaiOcb;
  252.     }

  253.     /**
  254.      * Getter for Signal In Space Accuracy Index (clock drift accuracy).
  255.      * @return Signal In Space Accuracy Index (clock drift accuracy)
  256.      */
  257.     public int getSisaiOc1() {
  258.         return sisaiOc1;
  259.     }

  260.     /**
  261.      * Setter for Signal In Space Accuracy Index (clock drift accuracy).
  262.      * @param sisaiOc1 Signal In Space Accuracy Index (clock drift accuracy)
  263.      */
  264.     public void setSisaiOc1(final int sisaiOc1) {
  265.         this.sisaiOc1 = sisaiOc1;
  266.     }

  267.     /**
  268.      * Getter for Signal In Space Accuracy Index (clock drift rate accuracy).
  269.      * @return Signal In Space Accuracy Index (clock drift rate accuracy)
  270.      */
  271.     public int getSisaiOc2() {
  272.         return sisaiOc2;
  273.     }

  274.     /**
  275.      * Setter for Signal In Space Accuracy Index (clock drift rate accuracy).
  276.      * @param sisaiOc2 Signal In Space Accuracy Index (clock drift rate accuracy)
  277.      */
  278.     public void setSisaiOc2(final int sisaiOc2) {
  279.         this.sisaiOc2 = sisaiOc2;
  280.     }

  281.     /**
  282.      * Getter for Signal In Space Monitoring Accuracy Index.
  283.      * @return Signal In Space Monitoring Accuracy Index
  284.      */
  285.     public int getSismai() {
  286.         return sismai;
  287.     }

  288.     /**
  289.      * Setter for Signal In Space Monitoring Accuracy Index.
  290.      * @param sismai Signal In Space Monitoring Accuracy Index
  291.      */
  292.     public void setSismai(final int sismai) {
  293.         this.sismai = sismai;
  294.     }

  295.     /**
  296.      * Getter for health.
  297.      * @return health
  298.      */
  299.     public int getHealth() {
  300.         return health;
  301.     }

  302.     /**
  303.      * Setter for health.
  304.      * @param health health
  305.      */
  306.     public void setHealth(final int health) {
  307.         this.health = health;
  308.     }

  309.     /**
  310.      * Getter for B1C integrity flags.
  311.      * @return B1C integrity flags
  312.      */
  313.     public int getIntegrityFlags() {
  314.         return integrityFlags;
  315.     }

  316.     /**
  317.      * Setter for B1C integrity flags.
  318.      * @param integrityFlags integrity flags
  319.      */
  320.     public void setIntegrityFlags(final int integrityFlags) {
  321.         this.integrityFlags = integrityFlags;
  322.     }

  323.     /**
  324.      * Getter for B1/B3 Group Delay Differential (s).
  325.      * @return B1/B3 Group Delay Differential (s)
  326.      */
  327.     public double getTgdB1Cp() {
  328.         return tgdB1Cp;
  329.     }

  330.     /**
  331.      * Setter for B1/B3 Group Delay Differential (s).
  332.      * @param tgdB1Cp B1/B3 Group Delay Differential (s)
  333.      */
  334.     public void setTgdB1Cp(final double tgdB1Cp) {
  335.         this.tgdB1Cp = tgdB1Cp;
  336.     }

  337.     /**
  338.      * Getter for B2 AP Group Delay Differential (s).
  339.      * @return B2 AP Group Delay Differential (s)
  340.      */
  341.     public double getTgdB2ap() {
  342.         return tgdB2ap;
  343.     }

  344.     /**
  345.      * Setter for B2 AP Group Delay Differential (s).
  346.      * @param tgdB2ap B2 AP Group Delay Differential (s)
  347.      */
  348.     public void setTgdB2ap(final double tgdB2ap) {
  349.         this.tgdB2ap = tgdB2ap;
  350.     }

  351.     /**
  352.      * Getter for B2B_i / B3I Group Delay Differential (s).
  353.      * @return B2B_i / B3I Group Delay Differential (s)
  354.      */
  355.     public double getTgdB2bI() {
  356.         return tgdB2bI;
  357.     }

  358.     /**
  359.      * Setter for B2B_i / B3I Group Delay Differential (s).
  360.      * @param tgdB2bI B2B_i / B3I Group Delay Differential (s)
  361.      */
  362.     public void setTgdB2bI(final double tgdB2bI) {
  363.         this.tgdB2bI = tgdB2bI;
  364.     }

  365.     /**
  366.      * Getter for satellite type.
  367.      * @return satellite type
  368.      */
  369.     public BeidouSatelliteType getSatelliteType() {
  370.         return satelliteType;
  371.     }

  372.     /**
  373.      * Setter for satellite type.
  374.      * @param satelliteType satellite type
  375.      */
  376.     public void setSatelliteType(final BeidouSatelliteType satelliteType) {
  377.         this.satelliteType = satelliteType;
  378.     }

  379. }