protected Relatedness calcRelatedness( Concept synset1, Concept synset2 ) {
		StringBuilder tracer = new StringBuilder();
		if ( synset1 == null || synset2 == null ) return new Relatedness( min, null, illegalSynset );
		if ( synset1.getSynset().equals( synset2.getSynset() ) ) return new Relatedness( max, identicalSynset, null );
		
		StringBuilder subTracer = enableTrace ? new StringBuilder() : null;
		List<Subsumer> shortestPaths = pathFinder.getShortestPaths( synset1, synset2, subTracer );
		if ( shortestPaths.size() == 0 ) return new Relatedness( min ); // TODO message
		Subsumer path = shortestPaths.get(0);
		int dist = path.length;
		double score;
		if ( dist > 0 ) {
			score = 1D / (double)dist;
		} else {
			score = -1;
		}
		
		if ( enableTrace ) {
			tracer.append( subTracer.toString() );
			tracer.append( "Shortest path: "+path+"\n" );
			tracer.append( "Path length = "+dist+"\n" );
		}
				
		return new Relatedness( score, tracer.toString(), null );
	}