[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orekit Developers] Detecting two events at the same date



Tanguy Yannick <Yannick.Tanguy@cnes.fr> a écrit :

Hello,

Hi Yannick,


We encountered some problems while trying to detect two events at the same date. OREKIT propagators don't allow it, and it can lead to great difficulties in some operationnal tools. The problem has been located in AbstractPropagator (OREKIT) because events are sorted by date, and a TreeSet (occuringEvents) can only store an event per date.

Good catch!


We propose a solution to correct it, in Commons Math (AbstractIntegrator) and OREKIT. The solution is based on a Comparator that will use a hash code to arbitrary sort events when they have strictly the same date.

In the method acceptStep, a TreeSet is created with a specific Comparator instance :
****
public int compare(final EventState es0, final EventState es1) { int rez = orderingSign * es0.getEventTime().compareTo(es1.getEventTime());
                    if (rez == 0) {
                        // The two event states are for the same date.
// We give them an arbitrary order based on the hashcode,
                        // so that both can be kept inside a SortedSet.
                        final int hes0 = es0.hashCode();
                        final int hes1 = es1.hashCode();
                        if (hes0 != hes1) {
                            rez = hes0 > hes1 ? 1 : -1;
                        } else {
                            rez = 0;
                        }
                    }
                    return rez;
                }
****

Note : the problem is exactly the same in AbstractIntegrator (Commons Math) and had been corrected the same way. Both corrections give expected results.

This feature is necessary for our applications. Should we create JIRA tickets in Commons Math and OREKIT ?

Yes, please do and provide patches for these (including test cases).

thanks
Luc


Best regards,

Yannick







----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.