/* Copyright 2002-2017 CS Systèmes d'Information
* Licensed to CS Systèmes d'Information (CS) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* CS licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
*
* This package provides interfaces and classes dealing with events occurring during propagation.
* It is used when {@link org.orekit.propagation.events.EventDetector
* EventDetector} instances are registered to any {@link org.orekit.propagation.Propagator
* Propagator}. When the event associated with the detector occurs, the propagator interrupts
* the propagation and calls the {@link
* org.orekit.propagation.events.EventDetector#eventOccurred(SpacecraftState, boolean) eventOccurred}
* method of the event detector, which can do whatever the user want and either stop or resume
* propagation, optionally resetting the state.
*
* <p>
* If the registered events detectors are configured to stop propagation when triggered, the propagator
* can be run with an arbitrary large target date, relying on the events occurrence to stop propagation
* exactly at the right time.
* </p>
*
* <p>
* The package provides some predefined events:
* </p>
* <ul>
* <li>{@link org.orekit.propagation.events.AlignmentDetector AlignmentDetector}
* detects satellite/body alignment (and by default stop when reaching alignment)
* </li>
* <li>{@link org.orekit.propagation.events.AngularSeparationDetector AngularSeparationDetector}
* detects angular separation thresholds crossing between spacecraft and a beacon
* (typically the Sun) as seen from an observer (typically a ground station)
* </li>
* <li>{@link org.orekit.propagation.events.AltitudeDetector AltitudeDetector}
* detects altitude crossing (and by default stop at descending)
* </li>
* <li>{@link org.orekit.propagation.events.ApsideDetector ApsideDetector}
* detects apside crossing (and by default stop at perigee)
* </li>
* <li>{@link org.orekit.propagation.events.CircularFieldOfViewDetector CircularFieldOfViewDetector}
* detects moving target entering/exiting satellite sensor Field Of View with a
* circular shaped boundary (and by default continue on entry and stop on exit)
* </li>
* <li>{@link org.orekit.propagation.events.DateDetector DateDetector}
* detects occurrence of a predefine instant (and by default stop there)
* </li>
* <li>{@link org.orekit.propagation.events.EclipseDetector EclipseDetector}
* detects satellite entering/exiting an eclipse (and by default stop on exit)
* </li>
* <li>{@link org.orekit.propagation.events.ElevationDetector ElevationDetector}
* detects satellite raising/setting (and by default stop at setting)
* </li>
* <li>{@link org.orekit.propagation.events.ElevationExtremumDetector ElevationExtremumDetector}
* detects satellite maximum/minimum elevation (and by default stop at minimum)
* </li>
* <li>{@link org.orekit.propagation.events.FieldOfViewDetector FieldOfViewDetector}
* detects moving target entering/exiting satellite sensor Field Of View with an arbitrarily
* shaped boundary (and by default continue on entry and stop on exit)
* </li>
* <li>{@link org.orekit.propagation.events.FootprintOverlapDetector FootprintOverlapDetector}
* detects geographic zone entering or exiting Field Of View of a spacecraft sensor (and by default stop at zone exit)
* </li>
* <li>{@link org.orekit.propagation.events.GeographicZoneDetector GeographicZoneDetector}
* detects geographic boundaries crossings (and by default stop at zone exit)
* </li>
* <li>{@link org.orekit.propagation.events.GroundFieldOfViewDetector GroundFieldOfViewDetector}
* detects spacecraft entering/exiting ground based Field Of View with an arbitrarily
* shaped boundary (and by default continue on entry and stop on exit)
* </li>
* <li>{@link org.orekit.propagation.events.LatitudeCrossingDetector LatitudeCrossingDetector}
* detects satellite crossing a parallel (and by default stop at northward crossing)
* </li>
* <li>{@link org.orekit.propagation.events.LatitudeExtremumDetector LatitudeExtremumDetector}
* detects satellite maximum/minimum latitude (and by default stop at minimum)
* </li>
* <li>{@link org.orekit.propagation.events.LongitudeCrossingDetector LongitudeCrossingDetector}
* detects satellite crossing a meridian (the increasing/decreasing flag is irrelevant for this detector)
* </li>
* <li>{@link org.orekit.propagation.events.LongitudeExtremumDetector LongitudeExtremumDetector}
* detects satellite maximum/minimum longitude (and by default stop at minimum)
* </li>
* <li>{@link org.orekit.propagation.events.NodeDetector NodeDetector}
* detects node crossing (and by default stop at ascending node)
* </li>
* <li>{@link org.orekit.propagation.events.PositionAngleDetector PositionAngleDetector}
* detects anomaly, latitude argument or longitude argument crossings, with either true
* eccentric or mean angles (the increasing/decreasing flag is irrelevant for this detector)
* </li>
* </ul>
*
* <p>
* In addition to raw events, the class also provides {@link org.orekit.propagation.events.EventsLogger
* EventsLogger} to gather all events that occurred during a propagation, {@link
* org.orekit.propagation.events.EventShifter EventShifter} which allows to slightly shift an
* event in time (for example to trigger something say 5 minutes before eclipse entry), {@link
* org.orekit.propagation.events.EventSlopeFilter EventSlopeFilter} and {@link
* org.orekit.propagation.events.EventEnablingPredicateFilter EventEnablingPredicateFilter} to trigger
* only specific types of events, without losing computation time by locating events user is not
* interested in. Also the {@link org.orekit.propagation.events.BooleanDetector} allows
* the user to combine other event detectors using Boolean logic.
* </p>
*
* <p>
* The low level interfaces and classes are heavily based on similar classes
* from the ode.events package from the <a
* href="https://hipparchus.org/">Hipparchus</a> library. The changes are mainly
* adaptations of the signatures to space dynamics.
* </p>
* <ul>
* <li>the type of dependent variable t has been changed from <code>double</code>
* to {@link org.orekit.time.AbsoluteDate AbsoluteDate}</li>
* <li>the type of state vector y has been changed from <code>double[]</code>
* to {@link org.orekit.propagation.SpacecraftState SpacecraftState}</li>
* </ul>
*
* @author Luc Maisonobe
* @author Pascal Parraud
*
*/
package org.orekit.propagation.events;