package fr.orsay.lri.varna.models.treealign; /** * This distance is such that a substitution costs nothing. * * @author Raphael Champeimont * */ public class ExampleDistance2 implements TreeAlignLabelDistanceSymmetric<RNANodeValue2> { public double f(RNANodeValue2 v1, RNANodeValue2 v2) { if (v1 == null) { if (v2 == null) { return 0; } else if (!v2.isSingleNode()) { // v2 is a list of bases return v2.getNodes().size(); } else { // v2 is a single node return 2; } } else if (!v1.isSingleNode()) { // v1 is a list of bases if (v2 == null) { return v1.getNodes().size(); } else if (!v2.isSingleNode()) { // v2 is a list of bases return Math.abs(v2.getNodes().size() - v1.getNodes().size()); } else { // v2 is a single node return 2 + v1.getNodes().size(); } } else { // v1 is a single node // all the same as when v1 == null if (v2 == null) { return 2; } else if (!v2.isSingleNode()) { // v2 is a list of bases return 2 + v2.getNodes().size(); } else { // v2 is a single node return 0; } } } }