All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.biojava.nbio.structure.geometry.SuperPosition Maven / Gradle / Ivy

/*
 *                    BioJava development code
 *
 * This code may be freely distributed and modified under the
 * terms of the GNU Lesser General Public Licence.  This should
 * be distributed with the code.  If you do not have a copy,
 * see:
 *
 *      http://www.gnu.org/copyleft/lesser.html
 *
 * Copyright for this code is held jointly by the individual
 * authors.  These should be listed in @author doc comments.
 *
 * For more information on the BioJava project and its aims,
 * or to join the biojava-l mailing list, visit the home page
 * at:
 *
 *      http://www.biojava.org/
 *
 */
package org.biojava.nbio.structure.geometry;

import javax.vecmath.Matrix4d;
import javax.vecmath.Point3d;

/**
 * The SuperPosition interface defines and documents the required methods for
 * any superpostion algorithm implementation, so that the input and expected
 * output are uniform.
 *
 * @author Aleix Lafita
 * @since 5.0.0
 *
 */
public interface SuperPosition {

	/**
	 * Obtain the superposition matrix that minimizes the RMSD between two
	 * arrays of equivalent points.
	 * 

* The two point arrays have to be of the same length and the order of * points have to be the same, so that a specific position in the one array * is equivalent to the same position in the other array. * * @param fixed * point array as reference, onto which the other point array is * superposed. Original coordinates will not be modified. * @param moved * point array to which the resulting transformation matrix is * applied. Original coordinates will not be modified. * @return transformation matrix as a Matrix4d to superpose moved onto fixed * point arrays */ public Matrix4d superpose(Point3d[] fixed, Point3d[] moved); /** * Transform an array of points so that the coordinates of its points * minimize the RMSD to the other array of equivalent points, and return the * transformation matrix applied. *

* The two point arrays have to be of the same length and the order of * points have to be the same, so that a specific position in the one array * is equivalent to the same position in the other array. * * @param fixed * point array as reference, onto which the other point array is * superposed. Original coordinates will not be modified. * @param moved * point array to which the resulting transformation matrix is * applied. Original coordinates will be transformed. * @return transformation matrix as a Matrix4d to superpose moved onto fixed * point arrays */ public Matrix4d superposeAndTransform(Point3d[] fixed, Point3d[] moved); /** * Calculate the RMSD between two arrays of equivalent points that are not * superposed. *

* This is equivalent to first superposing the point arrays with * {@link SuperPosition#superposeAndTransform(Point3d[], Point3d[])} and * then calculating the RMSD of the superposed point arrays with * {@link CalcPoint#rmsd(Point3d[], Point3d[])}, but it will be faster when * the transformation matrix is not needed. *

* The two point arrays have to be of the same length and the order of * points have to be the same, so that a specific position in the one array * is equivalent to the same position in the other array. * * @param x * an array of points. Original coordinates will not be modified. * @param y * an array of points. Original coordinates will not be modified. * @return the minimum RMSD between the equivalent point arrays (after * superposition) */ public double getRmsd(Point3d[] x, Point3d[] y); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy