1 /* Copyright 2002-2025 Mark Rutten
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 * Mark Rutten 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.measurements.modifiers;
18
19 import org.orekit.attitudes.FrameAlignedProvider;
20 import org.orekit.estimation.measurements.BistaticRange;
21 import org.orekit.estimation.measurements.EstimatedMeasurement;
22 import org.orekit.estimation.measurements.EstimatedMeasurementBase;
23 import org.orekit.estimation.measurements.EstimationModifier;
24 import org.orekit.estimation.measurements.GroundStation;
25 import org.orekit.models.earth.ionosphere.IonosphericModel;
26 import org.orekit.propagation.SpacecraftState;
27
28 /**
29 * Class modifying theoretical bistatic range measurement with ionospheric delay.
30 * The effect of ionospheric correction on the range is directly computed
31 * through the computation of the ionospheric delay.
32 * <p>
33 * The ionospheric delay depends on the frequency of the signal (GNSS, VLBI, ...).
34 * For optical measurements (e.g. SLR), the ray is not affected by ionosphere charged particles.
35 * <p>
36 * Since 10.0, state derivatives and ionospheric parameters derivates are computed
37 * using automatic differentiation.
38 * </p>
39 *
40 * @author Maxime Journot
41 * @author Joris Olympio
42 * @author Mark Rutten
43 * @since 11.2
44 */
45 public class BistaticRangeIonosphericDelayModifier extends BaseRangeIonosphericDelayModifier implements EstimationModifier<BistaticRange> {
46
47 /**
48 * Constructor.
49 *
50 * @param model Ionospheric delay model appropriate for the current range measurement method.
51 * @param freq frequency of the signal in Hz
52 */
53 public BistaticRangeIonosphericDelayModifier(final IonosphericModel model,
54 final double freq) {
55 super(model, freq);
56 }
57
58 /** {@inheritDoc} */
59 @Override
60 public void modifyWithoutDerivatives(final EstimatedMeasurementBase<BistaticRange> estimated) {
61
62 final BistaticRange measurement = estimated.getObservedMeasurement();
63 final GroundStation emitter = measurement.getEmitterStation();
64 final GroundStation receiver = measurement.getReceiverStation();
65
66 BistaticModifierUtil.modify(estimated, emitter, receiver,
67 this::rangeErrorIonosphericModel, this);
68
69 }
70
71 /** {@inheritDoc} */
72 @Override
73 public void modify(final EstimatedMeasurement<BistaticRange> estimated) {
74
75 final BistaticRange measurement = estimated.getObservedMeasurement();
76 final GroundStation emitter = measurement.getEmitterStation();
77 final GroundStation receiver = measurement.getReceiverStation();
78 final SpacecraftState state = estimated.getStates()[0];
79
80 BistaticModifierUtil.modify(estimated, getIonoModel(),
81 new ModifierGradientConverter(state, 6, new FrameAlignedProvider(state.getFrame())),
82 emitter, receiver,
83 this::rangeErrorIonosphericModel,
84 this::rangeErrorIonosphericModel,
85 this);
86
87 }
88
89 }