AbstractAlfriend1999.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.collision.shorttermencounter.probability.twod;
- import org.hipparchus.CalculusFieldElement;
- import org.hipparchus.linear.BlockFieldMatrix;
- import org.hipparchus.linear.BlockRealMatrix;
- import org.hipparchus.linear.FieldLUDecomposition;
- import org.hipparchus.linear.FieldMatrix;
- import org.hipparchus.linear.LUDecomposition;
- import org.hipparchus.linear.RealMatrix;
- import org.hipparchus.util.MathArrays;
- import org.orekit.ssa.metrics.FieldProbabilityOfCollision;
- import org.orekit.ssa.metrics.ProbabilityOfCollision;
- /**
- * Abstract class for Alfriend1999 normal and maximised methods as they share lots of similarities.
- *
- * @author Vincent Cucchietti
- * @since 12.0
- */
- public abstract class AbstractAlfriend1999 extends AbstractShortTermEncounter2DPOCMethod {
- /**
- * Default constructor.
- *
- * @param name name of the method
- */
- protected AbstractAlfriend1999(final String name) {
- super(name);
- }
- /** {@inheritDoc} */
- @Override
- public ProbabilityOfCollision compute(final double xm, final double ym, final double sigmaX, final double sigmaY,
- final double radius) {
- // Reconstruct necessary values from inputs
- final double squaredMahalanobisDistance =
- ShortTermEncounter2DDefinition.computeSquaredMahalanobisDistance(xm, ym, sigmaX, sigmaY);
- // Compute covariance matrix determinant
- final double covarianceMatrixDeterminant = computeCovarianceMatrixDeterminant(sigmaX, sigmaY);
- // Compute probability of collision
- final double value = computeValue(radius, squaredMahalanobisDistance, covarianceMatrixDeterminant);
- return new ProbabilityOfCollision(value, getName(), this.isAMaximumProbabilityOfCollisionMethod());
- }
- /** {@inheritDoc} */
- @Override
- public <T extends CalculusFieldElement<T>> FieldProbabilityOfCollision<T> compute(final T xm, final T ym, final T sigmaX,
- final T sigmaY,
- final T radius) {
- // Reconstruct necessary values from inputs
- final T squaredMahalanobisDistance =
- FieldShortTermEncounter2DDefinition.computeSquaredMahalanobisDistance(xm, ym, sigmaX, sigmaY);
- // Compute covariance matrix determinant
- final T covarianceMatrixDeterminant = computeCovarianceMatrixDeterminant(sigmaX, sigmaY);
- // Compute probability of collision
- final T value = computeValue(radius, squaredMahalanobisDistance, covarianceMatrixDeterminant);
- return new FieldProbabilityOfCollision<>(value, getName(), this.isAMaximumProbabilityOfCollisionMethod());
- }
- /**
- * Compute the covariance matrix determinant.
- *
- * @param sigmaX square root of the x-axis eigen value of the diagonalized combined covariance matrix projected onto the
- * collision plane (m)
- * @param sigmaY square root of the y-axis eigen value of the diagonalized combined covariance matrix projected onto the
- * collision plane (m)
- *
- * @return covariance matrix determinant
- */
- private double computeCovarianceMatrixDeterminant(final double sigmaX, final double sigmaY) {
- // Rebuild covariance matrix
- final RealMatrix covarianceMatrix = new BlockRealMatrix(new double[][] {
- { sigmaX * sigmaX, 0 },
- { 0, sigmaY * sigmaY }
- });
- // Compute determinant
- return new LUDecomposition(covarianceMatrix).getDeterminant();
- }
- /**
- * Compute the covariance matrix determinant.
- *
- * @param sigmaX square root of the x-axis eigen value of the diagonalized combined covariance matrix projected onto the
- * collision plane (m)
- * @param sigmaY square root of the y-axis eigen value of the diagonalized combined covariance matrix projected onto the
- * collision plane (m)
- * @param <T> type of the field elements
- *
- * @return covariance matrix determinant
- */
- private <T extends CalculusFieldElement<T>> T computeCovarianceMatrixDeterminant(final T sigmaX, final T sigmaY) {
- // Rebuild covariance matrix
- final T[][] covarianceMatrixData = MathArrays.buildArray(sigmaX.getField(), 2, 2);
- covarianceMatrixData[0][0] = sigmaX.multiply(sigmaX);
- covarianceMatrixData[1][1] = sigmaY.multiply(sigmaY);
- final FieldMatrix<T> covarianceMatrix = new BlockFieldMatrix<>(covarianceMatrixData);
- // Compute determinant
- return new FieldLUDecomposition<>(covarianceMatrix).getDeterminant();
- }
- /**
- * Compute the value of the probability of collision.
- *
- * @param radius sum of primary and secondary collision object equivalent sphere radii (m)
- * @param squaredMahalanobisDistance squared Mahalanobis distance
- * @param covarianceMatrixDeterminant covariance matrix determinant
- *
- * @return value of the probability of collision
- */
- abstract double computeValue(double radius, double squaredMahalanobisDistance, double covarianceMatrixDeterminant);
- /**
- * Compute the value of the probability of collision.
- *
- * @param radius sum of primary and secondary collision object equivalent sphere radii (m)
- * @param squaredMahalanobisDistance squared Mahalanobis distance
- * @param covarianceMatrixDeterminant covariance matrix determinant
- * @param <T> type of the field elements
- *
- * @return value of the probability of collision
- */
- abstract <T extends CalculusFieldElement<T>> T computeValue(T radius, T squaredMahalanobisDistance,
- T covarianceMatrixDeterminant);
- }