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 package org.orekit.estimation.measurements.modifiers;
18
19 import java.util.Collections;
20 import java.util.List;
21
22 import org.hipparchus.geometry.euclidean.threed.Vector3D;
23 import org.orekit.estimation.measurements.EstimatedMeasurementBase;
24 import org.orekit.estimation.measurements.EstimationModifier;
25 import org.orekit.estimation.measurements.InterSatellitesRange;
26 import org.orekit.gnss.antenna.FrequencyPattern;
27 import org.orekit.utils.ParameterDriver;
28
29 /** On-board antenna offset effect on inter-satellites range measurements.
30 * @author Luc Maisonobe
31 * @since 9.0
32 */
33 public class OnBoardAntennaInterSatellitesRangeModifier
34 extends PhaseCentersInterSatellitesBaseModifier<InterSatellitesRange>
35 implements EstimationModifier<InterSatellitesRange> {
36
37 /** Simple constructor.
38 * @param receiverPhaseCenter position of the Antenna Phase Center in emitter satellite frame
39 * @param emitterPhaseCenter position of the Antenna Phase Center in receiver satellite frame
40 */
41 public OnBoardAntennaInterSatellitesRangeModifier(final Vector3D receiverPhaseCenter,
42 final Vector3D emitterPhaseCenter) {
43 this(new FrequencyPattern(receiverPhaseCenter, null),
44 new FrequencyPattern(emitterPhaseCenter, null));
45 }
46
47 /** Simple constructor.
48 * @param receiverPattern pattern for receiver satellite
49 * @param emitterPattern pattern for emitter satellite
50 * @since 12.1
51 */
52 public OnBoardAntennaInterSatellitesRangeModifier(final FrequencyPattern receiverPattern,
53 final FrequencyPattern emitterPattern) {
54 super(receiverPattern, emitterPattern);
55 }
56
57 /** {@inheritDoc} */
58 @Override
59 public List<ParameterDriver> getParametersDrivers() {
60 return Collections.emptyList();
61 }
62
63 /** {@inheritDoc} */
64 @Override
65 public void modifyWithoutDerivatives(final EstimatedMeasurementBase<InterSatellitesRange> estimated) {
66 final double delta = estimated.getParticipants().length < 3 ?
67 oneWayDistanceModification(estimated) :
68 twoWayDistanceModification(estimated);
69 estimated.modifyEstimatedValue(this, estimated.getEstimatedValue()[0] + delta);
70 }
71
72 }