Acces the parameterDriver of a tropospheric delay modifier

Hello the orekit team,

I am doing Orbit dertermination for gnss satelite.
To model the tropospheric delay on my measurements I use a RangeTroposphericDelayModifier with SaastamoinenModel.
I want to have access to the value of the modifier in my BatchLSObserver but when I try to access it with:

-myMeasurement.getObservedMeasurement().getModifiers().get(2).getParametersDrivers();

It gives me an empty list of parameterdrivers. (the get(2) is because the troposhperic delay is my third modifier)
I have checked the number of modifiers existing with :

-myMeasurement.getObservedMeasurement().getModifiers().size()

And it gives me the correct number of modifier.

Can you help me with this please?

Thank you in advance,

Luca

Hi @luca123

ParameterDriver class is used to declare all the parameters that can be estimated during an orbit determination process. They are 3 families: orbital drivers, propagation drivers (e.g., drag coefficient, reflection coefficient, etc.), and measurement drivers (e.g. clock offset, station bias, etc.). The ParameterDriver are link to the model were they are used. In other word, the drag coefficient ParameterDriver is initialized and used in the IsotropicDrag class for instance.

Please note that a same parameter can be available in different classes. For instance, the ParameterDriver for the central attraction coefficient is available in NewtonianAttraction and HolmesFeatherstoneAttractionModel. As they represent the same parameter, we have a class ParameterDriverList which is in charge of telling the orbit determination that there is only one parameter and not two.

For the tropospheric delay, there is one ParameterDriver. However, this parameter is not in the SaastamoinenModel. That’s why you have an empty list. Indeed, according to Saastamoinen’s paper (1972), there is no need to estimate a parameter in this model.
In Orekit, the model for estimating the tropospheric delay is the EstimatedTroposphericModel. Therefore, if you want to estimate the tropospheric delay, you have to use this class instead of the Saastamoinen model. I recommend you to read the Javadoc of this class in order to have additional information about this model.
Also, please find below an example showing how to use it.

final NiellMappingFunctionModel mappingFunction = new NiellMappingFunctionModel();
final EstimatedTroposphericModel tropoModel     = new EstimatedTroposphericModel(mappingFunction, 2.0);
final RangeTroposphericDelayModifier modifier = new RangeTroposphericDelayModifier(tropoModel);

final ParameterDriver parameterDriver = modifier.getParametersDrivers().get(0);
parameterDriver.setSelected(true);
parameterDriver.setName("stationName" + EstimatedTroposphericModel.TOTAL_ZENITH_DELAY);
range.addModifier(modifier);

Best regards,
Bryan

Oh…Ok thank you very much. I understand better now. That’s logic indeed.

And is there a way to print the path delay of the SaastamoinenModel with acces only on the observed measurement ? I know it is possible to constrcut it with the SaastamoinenModel class but inside the batchLSObserver, I have acces only to my measurement and thus on the RangeTroposphericDelayModifier. I would like to know the value of the offset applied on each of my measurement.

Thank you very much,

Luca

Hi Luca,

Unfortunately, once in the orbit determination process, I don’t think it is possible to directly have the value of the delay…

What you could do is to extend the RangeTroposphericDelayModifier and override the modify(…) method.

You implementation could be something like :

  1. Get the value of the measurement
  2. Call super.modify(…) to apply the modifier
  3. Get the new value of the measurement
  4. Delay = previous_value - new_value

Maybe you could also add a getter in order to access this “Delay” value in the batchLSObserver.

I’m sorry I can’t provide an example of the class because I’m using my mobile phone.

Best regards,
Bryan

Thank you very much ! This is a great idea.

Best regards,

Luca