Class StartStopEventsTrigger<A extends AbstractDetector<A>,​O extends AbstractDetector<O>>

  • Type Parameters:
    A - type of the start detector
    O - type of the stop detector
    All Implemented Interfaces:
    ManeuverTriggers, EventDetectorsProvider, ParameterDriversProvider

    public abstract class StartStopEventsTrigger<A extends AbstractDetector<A>,​O extends AbstractDetector<O>>
    extends AbstractManeuverTriggers
    Maneuver triggers based on a pair of event detectors that defines firing start and stop.

    The thruster starts firing when the start detector becomes positive. The thruster stops firing when the stop detector becomes positive. The 2 detectors should not be positive at the same time. A date detector is not suited as it does not delimit an interval. They can be both negative at the same time.

    Since:
    11.1
    Author:
    Luc Maisonobe
    See Also:
    IntervalEventTrigger
    • Constructor Detail

      • StartStopEventsTrigger

        protected StartStopEventsTrigger​(A prototypeStartDetector,
                                         O prototypeStopDetector)
        Simple constructor.

        Note that the startDetector and stopDetector passed as an argument are used only as a prototypes from which new detectors will be built using their withHandler methods to set up internal handlers. The original event handlers from the prototype will be ignored and never called.

        If the trigger is used in a field-based propagation, the detector will be automatically converted to a field equivalent. Beware however that the eventOccurred of the converted propagator will call the method with the same name in the prototype detector, in order to get the correct return value.

        Parameters:
        prototypeStartDetector - prototype detector for firing start
        prototypeStopDetector - prototype detector for firing stop
    • Method Detail

      • getStartDetector

        public A getStartDetector()
        Getter for the firing start detector.
        Returns:
        firing start detector
      • getStopDetector

        public O getStopDetector()
        Getter for the firing stop detector.
        Returns:
        firing stop detector
      • init

        public void init​(SpacecraftState initialState,
                         AbsoluteDate target)
        Initialization method called at propagation start.

        The default implementation does nothing.

        Specified by:
        init in interface ManeuverTriggers
        Overrides:
        init in class AbstractManeuverTriggers
        Parameters:
        initialState - initial spacecraft state (at the start of propagation).
        target - date of propagation. Not equal to initialState.getDate().
      • isFiringOnInitialState

        protected boolean isFiringOnInitialState​(SpacecraftState initialState,
                                                 boolean isForward)
        Method to check if the thruster is firing on initialization. can be called by sub classes
        Specified by:
        isFiringOnInitialState in class AbstractManeuverTriggers
        Parameters:
        initialState - initial spacecraft state
        isForward - if true, propagation will be in the forward direction
        Returns:
        true if firing in propagation direction
      • getEventDetectors

        public Stream<EventDetector> getEventDetectors()
        Get the discrete events related to the model.

        This method is not intended to be called several time, only once by a propagator, as it has the side effect of rebuilding the events detectors when called

        Returns:
        stream of event detectors
      • getFieldEventDetectors

        public <S extends CalculusFieldElement<S>> Stream<FieldEventDetector<S>> getFieldEventDetectors​(Field<S> field)
        Get the discrete events related to the model.

        This method is not intended to be called several time, only once by a propagator, as it has the side effect of rebuilding the events detectors when called

        Type Parameters:
        S - extends CalculusFieldElement<T>
        Parameters:
        field - field to which the state belongs
        Returns:
        stream of event detectors
      • convertStartDetector

        protected abstract <D extends FieldAbstractDetector<D,​S>,​S extends CalculusFieldElement<S>> FieldAbstractDetector<D,​S> convertStartDetector​(Field<S> field,
                                                                                                                                                                      A detector)
        Convert a primitive firing start detector into a field firing start detector.

        There is not need to set up withMaxCheck, withThreshold, or withHandler in the converted detector, this will be done by caller.

        A skeleton implementation of this method to convert some XyzDetector into FieldXyzDetector, considering these detectors are created from a date and a number parameter is:

        
             protected <D extends FieldAbstractDetector<D, S>, S extends CalculusFieldElement<S>>
                 FieldAbstractDetector<D, S> convertStartDetector(final Field<S> field, final XyzDetector detector) {
        
                 final FieldAbsoluteDate<S> date  = new FieldAbsoluteDate<>(field, detector.getDate());
                 final S                    param = field.getZero().newInstance(detector.getParam());
        
                 final FieldAbstractDetector<D, S> converted = (FieldAbstractDetector<D, S>) new FieldXyzDetector<>(date, param);
                 return converted;
        
             }
         
         
        Type Parameters:
        D - type of the event detector
        S - type of the field elements
        Parameters:
        field - field to which the state belongs
        detector - primitive firing start detector to convert
        Returns:
        converted firing start detector
      • convertStopDetector

        protected abstract <D extends FieldAbstractDetector<D,​S>,​S extends CalculusFieldElement<S>> FieldAbstractDetector<D,​S> convertStopDetector​(Field<S> field,
                                                                                                                                                                     O detector)
        Convert a primitive firing stop detector into a field firing stop detector.

        There is not need to set up withMaxCheck, withThreshold, or withHandler in the converted detector, this will be done by caller.

        A skeleton implementation of this method to convert some XyzDetector into FieldXyzDetector, considering these detectors are created from a date and a number parameter is:

        
             protected <D extends FieldAbstractDetector<D, S>, S extends CalculusFieldElement<S>>
                 FieldAbstractDetector<D, S> convertStopDetector(final Field<S> field, final XyzDetector detector) {
        
                 final FieldAbsoluteDate<S> date  = new FieldAbsoluteDate<>(field, detector.getDate());
                 final S                    param = field.getZero().newInstance(detector.getParam());
        
                 final FieldAbstractDetector<D, S> converted = (FieldAbstractDetector<D, S>) new FieldXyzDetector<>(date, param);
                 return converted;
        
             }
         
         
        Type Parameters:
        D - type of the event detector
        S - type of the field elements
        Parameters:
        field - field to which the state belongs
        detector - primitive firing stop detector to convert
        Returns:
        converted firing stop detector