public static double getMCScore(MultipleAlignment alignment,
			double gapOpen, double gapExtension, double dCutoff)
			throws StructureException {

		List<Atom[]> trans = MultipleAlignmentTools.transformAtoms(alignment);

		// Calculate d0: same as the one in TM score
		int minLen = Integer.MAX_VALUE;
		for (Atom[] atoms : alignment.getAtomArrays())
			if (atoms.length < minLen)
				minLen = atoms.length;
		double d0 = 1.24 * Math.cbrt((minLen) - 15.) - 1.8;

		// Calculate the distance cutoff penalization
		double A = 20.0 / (1 + (dCutoff * dCutoff) / (d0 * d0));

		return getMCScore(trans, d0, gapOpen, gapExtension, A);
	}
public static double getMCScore ( MultipleAlignment alignment , double gapOpen , double gapExtension , double dCutoff ) throws StructureException { List < Atom [ ] > trans = MultipleAlignmentTools . transformAtoms ( alignment ) ; int minLen = Integer . MAX_VALUE ; for ( Atom [ ] atoms : alignment . getAtomArrays ( ) ) if ( atoms . length < minLen ) minLen = atoms . length ; double d0 = 1.24 * Math . cbrt ( ( minLen ) - 15. ) - 1.8 ; double A = 20.0 / ( 1 + ( dCutoff * dCutoff ) / ( d0 * d0 ) ) ; return getMCScore ( trans , d0 , gapOpen , gapExtension , A ) ; }
Calculates the MC score, specific for the MultipleAlignment algorithm.
The score function is modified from the original CEMC paper, making it
continuous and differentiable.
<p>
The maximum score of a match is 20, and the penalties for gaps are part
of the input. The half-score distance, d0, is chosen as in the TM-score.
<p>
Complexity: T(n,l) = O(l*n^2), if n=number of structures and l=alignment
length.

@param alignment
@param gapOpen
penalty for gap opening (reasonable values are in the range
(1.0-20.0)
@param gapExtension
penalty for extending a gap (reasonable values are in the
range (0.5-10.0)
@param dCutoff
the distance cutoff
@return the value of the score
@throws StructureException