code: 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);
  	}
docs: 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