Reflection parameter estimation

Hello everyone!! I tried to implement estimation of reflection coefficient using BatchLS. Here’s my code:

initial_value = 1.5
scale_factor = 0.067
lower_bound = 1.
upper_bound = 2.

isotropicRadiationSingleCoeff = IsotropicRadiationSingleCoefficient(10.0, initial_value)
solarRadiationPressure = SolarRadiationPressure(sun, wgs84Ellipsoid.getEquatorialRadius(), isotropicRadiationSingleCoeff)
    
reflection_param = solarRadiationPressure.getParametersDrivers().get(0)
reflection_param.setMinValue(lower_bound)
reflection_param.setMaxValue(upper_bound)
reflection_param.setReferenceValue(initial_value)
reflection_param.setScale(scale_factor)
reflection_param.setSelected(True)

parameter_observer = ParameterObserver.valueChanged(float(solarRadiationPressure.getParametersDrivers().get(0).getValue()), 
                                                    ParameterDriver("reflection_param", initial_value, scale_factor, lower_bound, upper_bound))
reflection_param.addObserver(parameter_observer)

propagatorBuilder.addForceModel(solarRadiationPressure)

Can someone tell me what am I doing wrong?? A following error occurs:

TypeError: descriptor 'valueChanged' for 'ParameterObserver' objects doesn't apply to a 'float' object

The code works without observer, but I want to get a value of reflection parameter for each iteration. Besides, code gives inappropriate result for GEO, which is close to results of IodGooding:

Gibbs:
Keplerian parameters: {a: 4.240057888814118E7; e: 0.004565616165528337; i: 0.09156350509937108; pa: 169.65363782985855; raan: 91.0134171094278; v: -18.903633576322076;}

Gooding:
Keplerian parameters: {a: 6.993022900990523E7; e: 0.3347392113087113; i: 0.5890569678045681; pa: -108.07132218757638; raan: -12.643296530529136; v: 2.5872234997974974;}

Estimated:
Keplerian parameters: {a: 7.107918982692797E7; e: 0.3455327370588846; i: 0.5904904274520356; pa: -108.72866055382211; raan: -12.167251671585113; v: 2.769254453957682;}

Hey there,

I’m not sure why you get the error, but I can tell you that the valueChanged method doesn’t return anything (it’s of type void in Java), so you shouldn’t instantiate a variable with it (I guess you’ll end up with None in Python).

About the result of the OD itself, it’s kind of expected that it will be close to the initial guess so if the latter is Gooding and is fairly wrong, the least squares won’t be able to do much about it, it’s even surprising that it’s converging at all.

Best,
Romain.

Hi,

I am quite confused by that error message, I assume it is coming from the java engine and not the python interpreter?

That “float” should be sent as a java double to the jvm I think. Try to put it to a variable in python and make sure it is a proper float (should be).