FieldProbabilityOfCollision.java
/* Copyright 2002-2024 CS GROUP
* Licensed to CS GROUP (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.
*/
package org.orekit.ssa.metrics;
import org.hipparchus.CalculusFieldElement;
import org.hipparchus.util.MathUtils;
import org.orekit.ssa.collision.shorttermencounter.probability.twod.Alfriend1999Max;
import org.orekit.ssa.collision.shorttermencounter.probability.twod.Laas2015;
/**
* Container for values relative to the probability of collision :
* <ul>
* <li>Value of the probability of collision.</li>
* <li>Name of the method with which it was computed.</li>
* <li>Upper and lower limit of the value if the method provides them (such as {@link Laas2015} for example).</li>
* <li>Flag defining if the probability was maximized in any way (such as {@link Alfriend1999Max} for example).</li>
* </ul>
*
* @author Vincent Cucchietti
* @since 12.0
* @param <T> type of the field elements
*/
public class FieldProbabilityOfCollision<T extends CalculusFieldElement<T>> {
/** Value of the probability of collision. */
private final T value;
/**
* Lower limit of the probability of collision.
* <p>
* 0 by default.
*/
private final T lowerLimit;
/**
* Upper limit of the probability of collision.
* <p>
* 0 by default.
*/
private final T upperLimit;
/** Name of the probability computing method with which this probability was calculated. */
private final String probabilityOfCollisionMethodName;
/**
* Defines if this probability of collision can be considered a maximum probability of collision.
* <p>
* It depends on what method was used to compute this probability.
* <p>
* False by default.
*/
private final boolean isMaxProbability;
/**
* Constructor with default values of 0 for the upper/lower limits and default false flag for maximum probability.
*
* @param value value of the probability of collision
* @param probabilityOfCollisionMethodName name of the probability computing method with which this probability was
* computed
*/
public FieldProbabilityOfCollision(final T value, final String probabilityOfCollisionMethodName) {
this(value, probabilityOfCollisionMethodName, false);
}
/**
* Constructor with default values of 0 for the upper and lower limits.
*
* @param value value of the probability of collision
* @param probabilityOfCollisionMethodName name of the probability computing method with which this probability was
* computed
* @param isMaxProbability flag defining if it has been computed using a maximum probability of collision method
*/
public FieldProbabilityOfCollision(final T value, final String probabilityOfCollisionMethodName,
final boolean isMaxProbability) {
this(value, value.getField().getZero(), value.getField().getZero(), probabilityOfCollisionMethodName,
isMaxProbability);
}
/**
* Constructor.
*
* @param value value of the probability of collision
* @param lowerLimit lower limit of the probability of collision
* @param upperLimit upper limit of the probability of collision
* @param probabilityOfCollisionMethodName name of the probability computing method with which this probability was
* computed
* @param isMaxProbability flag indicating if this method computes a maximum probability of collision
*/
public FieldProbabilityOfCollision(final T value, final T lowerLimit, final T upperLimit,
final String probabilityOfCollisionMethodName, final boolean isMaxProbability) {
// Check that inputs are valid
MathUtils.checkRangeInclusive(value.getReal(), 0, 1);
MathUtils.checkRangeInclusive(lowerLimit.getReal(), 0, 1);
MathUtils.checkRangeInclusive(upperLimit.getReal(), 0, 1);
// Initialization
this.value = value;
this.lowerLimit = lowerLimit;
this.upperLimit = upperLimit;
this.probabilityOfCollisionMethodName = probabilityOfCollisionMethodName;
this.isMaxProbability = isMaxProbability;
}
/** Get value of the probability of collision.
* @return value of the probability of collision
*/
public T getValue() {
return value;
}
/** Get lower limit of the probability of collision value.
* @return lower limit of the probability of collision value, 0 by default
*/
public T getLowerLimit() {
return lowerLimit;
}
/** Get upper limit of the probability of collision value.
* @return upper limit of the probability of collision value, 0 by default
*/
public T getUpperLimit() {
return upperLimit;
}
/** Get name of the probability computing method with which this probability was computed.
* @return name of the probability computing method with which this probability was computed
*/
public String getProbabilityOfCollisionMethodName() {
return probabilityOfCollisionMethodName;
}
/** Get flag that defines if this probability of collision can be considered a maximum probability of collision.
* @return flag that defines if this probability of collision can be considered a maximum probability of collision
*/
public boolean isMaxProbability() {
return isMaxProbability;
}
}